; Copyright (C) 2010-2019 Apple Inc. All rights reserved.
;
; Redistribution and use in source and binary forms, with or without
; modification, are permitted provided that the following conditions
; are met:
; 1. Redistributions of source code must retain the above copyright
;    notice, this list of conditions and the following disclaimer.
; 2. Redistributions in binary form must reproduce the above copyright
;    notice, this list of conditions and the following disclaimer in the
;    documentation and/or other materials provided with the distribution.
;
; THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
; AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
; THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
; PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
; BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
; CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
; SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
; CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
; ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
; THE POSSIBILITY OF SUCH DAMAGE.

(version 1)
(deny default (with partial-symbolication))
(allow system-audit file-read-metadata)

;;;
;;; The following rules were originally contained in 'system.sb'. We are duplicating them here so we can
;;; remove unneeded sandbox extensions.
;;;

;;; Allow registration of per-pid services.
(allow mach-register (local-name-prefix ""))

;;; Allow read access to standard system paths.
(allow file-read*
    (require-all (file-mode #o0004)
    (require-any (subpath "/Library/Filesystems/NetFSPlugins")
    (subpath "/Library/Apple/System")
    (subpath "/Library/Preferences/Logging")      ; Logging Rethink
    (subpath "/System")
    (subpath "/private/var/db/dyld")
    (subpath "/private/var/db/timezone")
    (subpath "/usr/lib")
    (subpath "/usr/share"))))

;;; Allow reading internal profiles on development builds
(allow file-read*
    (require-all (file-mode #o0004)
    (subpath "/AppleInternal/Library/Preferences/Logging")
    (system-attribute apple-internal)))

;;; Allow mapping of system frameworks + dylibs
(allow file-map-executable
    (subpath "/Library/Apple/System/Library/Frameworks")
    (subpath "/Library/Apple/System/Library/PrivateFrameworks")
    (subpath "/System/Library/Frameworks")
    (subpath "/System/Library/PrivateFrameworks")
    (subpath "/usr/lib")
    (literal "/usr/local/lib/sanitizers"))

(allow file-read-metadata
    (literal "/etc")
    (literal "/tmp")
    (literal "/var")
    (literal "/private/etc/localtime"))


;;; Allow access to standard special files.
(allow file-read*
    (literal "/dev/autofs_nowait")
    (literal "/dev/random")
    (literal "/dev/urandom")
    (literal "/private/etc/master.passwd")
    (literal "/private/etc/passwd"))

(allow file-read*
       file-write-data
    (literal "/dev/null")
    (literal "/dev/zero"))

(allow file-read*
       file-write-data
       file-ioctl
    (literal "/dev/dtracehelper"))

;;; Allow creation of core dumps.
(allow file-write-create
    (require-all (prefix "/cores/")
        (vnode-type REGULAR-FILE)))

;;; Allow IPC to standard system agents.
(allow ipc-posix-shm-read*
    (ipc-posix-name "apple.shm.notification_center")
    (ipc-posix-name-prefix "apple.cfprefs."))

;;; (system-graphics) - Allow access to graphics hardware.
(define (system-graphics)
    ;; Preferences
    (allow user-preference-read
        (preference-domain "com.apple.opengl")
        (preference-domain "com.nvidia.OpenGL"))
    ;; CVMS
    (allow mach-lookup
        (global-name "com.apple.cvmsServ"))
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400 || PLATFORM(MACCATALYST)
    (allow file-read*
        (prefix "/private/var/db/CVMS/cvmsCodeSignObj"))
#endif
    ;; OpenCL
    (allow iokit-open
        (iokit-connection "IOAccelerator")
        (iokit-registry-entry-class "IOAccelerationUserClient")
        (iokit-registry-entry-class "IOSurfaceRootUserClient")
        (iokit-registry-entry-class "IOSurfaceSendRight"))
    ;; CoreVideo CVCGDisplayLink
    (allow iokit-open
        (iokit-registry-entry-class "IOFramebufferSharedUserClient"))
    ;; H.264 Acceleration
    (allow iokit-open
        (iokit-registry-entry-class "AppleIntelMEUserClient")
        (iokit-registry-entry-class "AppleSNBFBUserClient"))
    ;; QuartzCore
    (allow iokit-open
        (iokit-registry-entry-class "AGPMClient")
        (iokit-registry-entry-class "AppleGraphicsControlClient")
        (iokit-registry-entry-class "AppleGraphicsPolicyClient"))
    ;; OpenGL
    (allow iokit-open
        (iokit-registry-entry-class "AppleMGPUPowerControlClient"))
    ;; GPU bundles
    (allow file-read*
        (subpath "/Library/GPUBundles"))
    ;; DisplayServices
    (allow iokit-set-properties
        (require-all (iokit-connection "IODisplay")
        (require-any (iokit-property "brightness")
        (iokit-property "linear-brightness")
        (iokit-property "commit")
        (iokit-property "rgcs")
        (iokit-property "ggcs")
        (iokit-property "bgcs")))))

;;;
;;; End rules originally copied from 'system.sb'
;;;

;;; process-info* defaults to allow; deny it and then allow operations we actually need.
(deny process-info*)
(allow process-info-pidinfo)
(allow process-info-setcontrol (target self))
(allow process-codesigning-status*)

(deny sysctl*)
(allow sysctl-read
    (sysctl-name
        "hw.byteorder"
        "hw.busfrequency_max"
        "hw.cputype"
        "hw.machine"
        "hw.memsize"
        "hw.model"
        "hw.ncpu"
        "hw.vectorunit"
        "kern.bootargs" ;; <rdar://problem/47738015>
        "kern.hostname"
        "kern.maxfilesperproc"
        "kern.memorystatus_level"
        "kern.osproductversion" ;; <rdar://problem/51756739>
        "kern.safeboot"
        "kern.version"
        "machdep.cpu.brand_string"
        "security.mac.sandbox.sentinel"
        "kern.tcsm_enable"
        "kern.tcsm_available"
        "vm.footprint_suspend")
    (sysctl-name-regex #"^hw.(active|avail)cpu")
    (sysctl-name-regex #"^hw.(busfrequency|cachelinesize|cpufrequency(|_max)|pagesize|tbfrequency)(|_compat)")
    (sysctl-name-regex #"^hw.l.+cachesize")
    (sysctl-name-regex #"^hw.(logical|physical)cpu_max")
    (sysctl-name-regex #"^hw.optional\.")
    (sysctl-name-regex #"^kern.os(release|type|variant_status|version)")
    (sysctl-name-regex #"^net.routetable")
)

(allow sysctl-write
    (sysctl-name
        "kern.tcsm_enable"))

(deny iokit-get-properties)
(allow iokit-get-properties
    (iokit-property "AAPL,LCD-PowerState-ON") ;; <rdar://problem/47738015>
    (iokit-property "AGCInfo")
    (iokit-property-regex #"^Accel(Caps|NativeDMARowByteAlignment)")
    (iokit-property-regex #"^(Accurate|Extended)MaxDigitizerPressureValue")
    (iokit-property-regex #"^(Activation|Animation)Thresholds")
    (iokit-property "ActuationSupported")
    (iokit-property "AllowDisplaySleep")
    (iokit-property "AlwaysNeedsVelocityCalculated")
    (iokit-property-regex #"Apple(GVAKeyDoesNotExist|IntelMEVABundleName)")
    (iokit-property-regex #"^AAPL,(DisplayPipe|OpenCLdisabled|IOGraphics_LER(|_RegTag_1|_RegTag_0|_Busy_2)|alias-policy|boot-display|display-alias|mux-switch-state|ndrv-dev|primary-display|slot-name)")
    (iokit-property-regex #"^ATY,(cbits|fb_(linebytes|offset|size)|intrev)")
    (iokit-property "ATY,DeviceName") ;; Needed by Metal compilers
    (iokit-property "ATY,FamilyName") ;; Ditto
    (iokit-property "AVCSupported")
    (iokit-property "BacklightHandle")
    (iokit-property "BlockSize")
    (iokit-property-regex #"^CEA(ModeID|PixelRepetition)")
    (iokit-property "CFBundleIdentifier")
    (iokit-property "CFBundleIdentifierKernel") ;; <rdar://problem/47738015>
    (iokit-property "CapsLockDelay")
    (iokit-property "CaseSensitive")
    (iokit-property "ConfigState")
    (iokit-property "Description")
    (iokit-property "Development")
    (iokit-property-regex #"^Device( Characteristics|EqID)")
    (iokit-property "DisplayRouting")
    (iokit-property "Driver is Ready")
    (iokit-property "Ejectable")
    (iokit-property "EnableLPVP")
    (iokit-property "Encrypted")
    (iokit-property "Endianness")
    (iokit-property "Family ID")
    (iokit-property "ForceSupported")
    (iokit-property "Formats")
    (iokit-property "GPUConfigurationVariable")
    (iokit-property "GpuDebugPolicy")
    (iokit-property "HEVCSupported")
    (iokit-property "HIDPointerAccelerationType")
    (iokit-property-regex #"^IOAccel(DisplayPipeCapabilities|Index|Types|Revision)")
    (iokit-property-regex #"^IO(Class|MatchCategory|NameMatch)")
    (iokit-property-regex #"^IOAudioControl(ChannelID|ID|SubType|Usage|Value)")
    (iokit-property-regex #"^IOAudioDevice(CanBeDefaults|TransportType)")
    (iokit-property-regex #"^IOAudioEngine(ChannelNames|ClientDescription|CoreAudioPlugIn|(|Device)Description|Flavor|GlobalUniqueID|IsHidden|OutputChannelLayout|SampleOffset|State)")
    (iokit-property-regex #"^IOAudioEngineClock(Domain|IsStable)")
    (iokit-property "IOAudioEngineDisableClockBoundsCheck")
    (iokit-property-regex #"^IOAudioEngine(Input|Output)Sample(Latency|Offset)")
    (iokit-property-regex #"^IOAudioEngineNum(ActiveUserClients|SampleFramesPerBuffer)")
    (iokit-property "IOAudioSampleRate")
    (iokit-property "IOAudioStreamSampleFormatByteOrder")
    (iokit-property-regex #"^IOAV(.*)(De|En)code$")
    (iokit-property "IOBacklightHandlerID")
    (iokit-property "IOBusyInterest")
    (iokit-property "IOCFPlugInTypes")
    (iokit-property "IOChildIndex")
    (iokit-property-regex #"^IOClass(|NameOverride)")
    (iokit-property "IOConsoleUsers")
    (iokit-property "IODVDBundleName")
    (iokit-property "IODeviceMemory")
    (iokit-property "IODisplayParameters")
    (iokit-property-regex #"^IOFB(CLUTDefer|Config|CursorInfo|Dependent(ID|Index))")
    (iokit-property "IOFBCurrentPixelClock")
    (iokit-property-regex #"^IOFBCurrentPixelCount(|Real)")
    (iokit-property-regex #"^IOFB(DetailedTimings|Gamma(Count|HeaderSize|Width))")
    (iokit-property-regex #"^IOFB(Blue|Green|Red)GammaScale")
    (iokit-property-regex #"^IOFBI2CInterface(IDs|Info)")
    (iokit-property-regex #"^IOFB(HDMIDongleROM|Integrated|MemorySize|NeedsRefresh|ProbeOptions|ScalerInfo|TimingRange|Transform|UIScale|WaitCursor(Frames|Period))")
    (iokit-property "IOFramebufferOpenGLIndex")
    (iokit-property "IOGeneralInterest")
    (iokit-property "IOGLBundleName")
    (iokit-property-regex #"^IOGVA(BGRAEnc|Codec|EncoderRestricted|Scaler|VTCapabilities|HEVCDecodeCapabilities|HEVCEncodeCapabilities)")
    (iokit-property-regex #"^IOGVA(.*)(De|En)code$")
    (iokit-property "IOHibernateState")
    (iokit-property "IOI2CTransactionTypes")
    (iokit-property-regex #"^IOInterrupt(Controllers|Specifiers)")
    (iokit-property "IOKitDebug")
    (iokit-property "IOMatchCategory")
    (iokit-property "IOMediaIcon")
    (iokit-property "IONDRVFramebufferGeneration")
    (iokit-property "IONVRAMProperty")
    (iokit-property-regex #"^IOName(|Match(|ed))")
    (iokit-property "IOOCDBundleName")
    (iokit-property "IOPCITunnelled")
    (iokit-property "IOPCITunnelCompatible")
    (iokit-property "IOPMStrictTreeOrder")
    (iokit-property "IOParentMatch")
    (iokit-property-regex #"^IOPCI((Class|Primary|Property|)Match|Express(Capabilities|Link(Status|Capabilities))|MSIMode|Resourced|Tunnelled)")
    (iokit-property "IOPMIsPowerManaged")
    (iokit-property-regex #"^IOPlatform(SerialNumber|UUID)")
    (iokit-property "IOPowerManagement")
    (iokit-property "IOProbeScore")
    (iokit-property "IOPropertyMatch")
    (iokit-property "IOProviderClass")
    (iokit-property-regex #"^IOReport(Lures|Legend(|Public))")
    (iokit-property "IOScreenRestoreState")
    (iokit-property "IOSourceVersion")
    (iokit-property-regex #"^IOVA(BundleName|Renderer(|Sub)ID)")
    (iokit-property-regex #"^InternalStatistics(|Accm)")
    (iokit-property-regex #"^MetalPlugin(Name|ClassName)")
    (iokit-property "MetalStatisticsName")
    (iokit-property "MTHIDDevice")
    (iokit-property "MT Built-In")
    (iokit-property "MaintainPowerInUILock")
    (iokit-property "Max Packet Size")
    (iokit-property "MinDigitizerPressureValue")
    (iokit-property "Multitouch Serial Number")
    (iokit-property-regex #"^Multitouch (Subdevice |)ID")
    (iokit-property "NVArch")
    (iokit-property-regex #"^NVC(AP|LASS)")
    (iokit-property-regex #"^NVDA,(Features|NVPresentment-version|accel-loaded|invalid-config|mm-version)")
    (iokit-property "NVDA,Enable-A2R10G10B10Format")
    (iokit-property-regex #"^NVDA(Type|initgl_created)")
    (iokit-property "NVRAMProperty")
    (iokit-property "NXSystemInfo")
    (iokit-property-regex #"^VRAM,(memvendorID|total(MB|size))")
    (iokit-property "NoAutoRoute")
    (iokit-property-regex #"^Num(Blocks|Streams)")
    (iokit-property-regex #"^PerformanceStatistics(|Accum)")
    (iokit-property "Protocol Characteristics")
    (iokit-property "Removable")
    (iokit-property-regex #"^ResetOn(Lock|Unlock)Ms")
    (iokit-property "SafeEjectRequested")
    (iokit-property "SampleRates")
    (iokit-property "Serial Number")
    (iokit-property "StartupDisplay")
    (iokit-property "SurfaceList")
    (iokit-property-regex #"^Support(AudioAUUC|sSilentClick|TapToWake)")
    (iokit-property-regex #"^Sensor (Columns|Rows)")
    (iokit-property-regex #"^Sensor Region (Descriptor|Param|Rows)")
    (iokit-property-regex #"^Sensor Surface (Descriptor|Height|Width)")
    (iokit-property "SurfaceList")
    (iokit-property "TimeStampFiltering")
    (iokit-property "Transport")
    (iokit-property "USBADC") ;; Needed for Audio support on older hardware
    (iokit-property "UserClientEnabled")
    (iokit-property "VRAM,totalMB")
    (iokit-property "WANTS_FRAMES_IGNORED")
    (iokit-property-regex #"^acpi-(device|path)")
    (iokit-property "assigned-addresses")
    (iokit-property "attached-gpu-control-path")
    (iokit-property-regex #"^audio-(codec-info|device-mvalue|device-nvalue|selector)")
    (iokit-property "av-signal-type")
    (iokit-property "bcdVersion")
    (iokit-property-regex #"^(board|device|revision|subsystem|vendor)-id")
    (iokit-property "boot-gamma-restored")
    (iokit-property "built-in")
    (iokit-property "cail_properties")
    (iokit-property-regex #"^canvas-(height|width)")
    (iokit-property "class-code")
    (iokit-property "color-accuracy-index")
    (iokit-property "compatible")
    (iokit-property "connector-type")
    (iokit-property-regex #"^(device|revision|subsystem-vendor|touch-size)-id")
    (iokit-property "device_type")
    (iokit-property "dpm")
    (iokit-property "errordb") ;; Needed for OpenGL on older hardware
    (iokit-property "filevault-image") ;; Needed by LaunchServices
    (iokit-property "graphic-options")
    (iokit-property "hda-gfx")
    (iokit-property-regex #"^id(Product|Vendor)")
    (iokit-property "iofb_version")
    (iokit-property "image-encrypted")
    (iokit-property "image-path") ;; Needed by LaunchServices
    (iokit-property "locationID") ;; Needed for Audio support on older hardware
    (iokit-property "model")
    (iokit-property "mt-device-id")
    (iokit-property "name")
    (iokit-property "nv-stats")
    (iokit-property "od-server-name") ;; Needed by LaunchServices
    (iokit-property-regex #"^parser-(options|type)")
    (iokit-property-regex #"^pci(-aspm-default|debug)")
    (iokit-property "port-number")
    (iokit-property "reg")
    (iokit-property "rm_board_number")
    (iokit-property-regex #"^(rom|vbios)-revision")
    (iokit-property "saved-config")
    (iokit-property "startup-timing")
    (iokit-property "touch-size-id")
#if !PLATFORM(MAC) || __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400
    (iokit-property "ATY,cbits")
    (iokit-property "ATY,intrev")
    (iokit-property "AccelNativeDMARowByteAlignment")
    (iokit-property "CompactVRAM")
    (iokit-property "EnableBlitLib")
    (iokit-property "ForceDisableEDRAM")
    (iokit-property "GPUConfigurationVariable")
    (iokit-property "GpuDebugPolicy")
    (iokit-property "IOKitDebug")
    (iokit-property "IOPCIMatch")
    (iokit-property "IOOCDBundleName")
    (iokit-property "MetalStatisticsScriptName")
    (iokit-property "MetalCoalesce")
    (iokit-property "PanicOnGPUHang")
    (iokit-property "TelemetryDisable")
    (iokit-property "cail_properties")
    (iokit-property "dpm")
#endif
    (iokit-property "IOGVAH264EncodeCapabilities") ;; <rdar://problem/49498040>
)

(deny mach-lookup (xpc-service-name-prefix ""))
(allow mach-lookup
    (xpc-service-name "com.apple.PerformanceAnalysis.animationperfd")
    (xpc-service-name "com.apple.accessibility.mediaaccessibilityd")
    (xpc-service-name "com.apple.audio.SandboxHelper")
    (xpc-service-name "com.apple.coremedia.videodecoder")
    (xpc-service-name "com.apple.coremedia.videoencoder")
    (xpc-service-name-regex #"\.apple-extension-service$")
    (xpc-service-name "com.apple.hiservices-xpcservice")
    (xpc-service-name "com.apple.print.normalizerd")
)

;; Utility functions for home directory relative path filters
(define (home-regex home-relative-regex)
  (regex (string-append "^" (regex-quote (param "HOME_DIR")) home-relative-regex)))

(define (home-subpath home-relative-subpath)
  (subpath (string-append (param "HOME_DIR") home-relative-subpath)))

(define (home-literal home-relative-literal)
  (literal (string-append (param "HOME_DIR") home-relative-literal)))

(define (allow-read-directory-and-issue-read-extensions path)
    (if path
        (begin
            (allow file-read* (subpath path))
            (allow file-issue-extension (require-all (extension-class "com.apple.app-sandbox.read") (subpath path))))))

(define (allow-read-write-directory-and-issue-read-write-extensions path)
    (if path
        (begin
            (allow file-read* file-write* (subpath path))
            (allow file-issue-extension (require-all (extension-class "com.apple.app-sandbox.read") (subpath path)))
            (allow file-issue-extension (require-all (extension-class "com.apple.app-sandbox.read-write") (subpath path))))))

;; Remove when <rdar://problem/29646094> is fixed.
(define (HEX-pattern-match-generator pattern-descriptor)
    (letrec ((pattern-string ""))
        (for-each  (lambda (repeat-count)
            (if (zero? repeat-count)
                (set! pattern-string (string-append  pattern-string "-"))
                (let appender ((count repeat-count))
                    (if (> count 0)
                        (begin
                            (set! pattern-string (string-append  pattern-string "[0-9A-F]"))
                            (appender (- count 1)))))))
            pattern-descriptor)
    pattern-string))

;; return a regex pattern matching string for 8-4-4-4-12 UUIDs:
(define (uuid-HEX-pattern-match-string)
    (HEX-pattern-match-generator '(8 0 4 0 4 0 4 0 12)))

;; global to hold the computed UUID matching pattern.
(define *uuid-pattern* "")

(define (uuid-regex-string)
    (if (zero? (string-length *uuid-pattern*))
        (set! *uuid-pattern* (uuid-HEX-pattern-match-string)))
    *uuid-pattern*)

;; Read-only preferences and data
(allow file-read*
    ;; Basic system paths
    (subpath "/Library/Dictionaries")
    (subpath "/Library/Fonts")
    (subpath "/Library/Frameworks")
    (subpath "/Library/Managed Preferences")
    (subpath "/Library/Speech/Synthesizers")
    (regex #"^/private/etc/(hosts|group|passwd)$")

    (literal "/Library/Application Support/CrashReporter/SubmitDiagInfo.domains")

    ;; System and user preferences
    (home-literal "/.CFUserTextEncoding")

    ;; FIXME: This should be removed when <rdar://problem/8957845> is fixed.
    (home-subpath "/Library/Fonts")

    (subpath "/Library/Audio/Plug-Ins/HAL")

    (home-subpath "/Library/Dictionaries"))

(allow file-read-data
    (literal "/usr/local/lib/log") ; <rdar://problem/36629495>
    ;; Needed for AES3 support
    (subpath "/Library/Audio/Plug-Ins/Components"))

;; Preferences support
(allow user-preference-read
    (preference-domain
        "kCFPreferencesAnyApplication"
        "com.apple.Accessibility"
        "com.apple.ATS"
        "com.apple.CoreGraphics"
        "com.apple.DownloadAssessment"
        "com.apple.HIToolbox"
        "com.apple.LaunchServices"
        "com.apple.MultitouchSupport" ;; FIXME: Remove when <rdar://problem/13011633> is fixed.
        "com.apple.ServicesMenu.Services" ;; Needed for NSAttributedString <rdar://problem/10844321>
        "com.apple.ViewBridge" ;; Needed for Input elements.
        "com.apple.WebFoundation"
        "com.apple.avfoundation"
        "com.apple.avfoundation.frecents" ;; <rdar://problem/33137029>
        "com.apple.avfoundation.videoperformancehud" ;; <rdar://problem/31594568>
        "com.apple.coremedia"
        "com.apple.crypto"
        "com.apple.driver.AppleBluetoothMultitouch.mouse"
        "com.apple.driver.AppleBluetoothMultitouch.trackpad"
        "com.apple.driver.AppleHIDMouse"
        "com.apple.lookup.shared"
        "com.apple.mediaaccessibility" ;; Needed for custom caption styles
        "com.apple.networkConnect"
        "com.apple.speech.voice.prefs"
        "com.apple.systemsound"
        "com.apple.universalaccess"
        "edu.mit.Kerberos"
        "pbs" ;; Needed for NSAttributedString <rdar://problem/10844321>
))

; (Temporary) backward compatibility with non-CFPreferences readers.
(allow file-read*
    (literal "/Library/Preferences/com.apple.ViewBridge.plist"))

; FIXME: This is needed for some security framework calls (that use non-CFPreferences readers)
(allow file-read-data
    (literal "/Library/Preferences/com.apple.security.plist")
    (home-subpath "/Library/Preferences/com.apple.security.plist"))

;; On-disk WebKit2 framework location, to account for debug installations outside of /System/Library/Frameworks,
;; and to allow issuing extensions.
(allow-read-directory-and-issue-read-extensions (param "WEBKIT2_FRAMEWORK_DIR"))

;; Allow issuing extensions to system libraries that the Network process can already read.
;; This is to avoid warnings attempting to create extensions for these resources.
(allow-read-directory-and-issue-read-extensions "/System/Library/PrivateFrameworks/WebInspectorUI.framework")

;; Sandbox extensions
(define (apply-read-and-issue-extension op path-filter)
    (op file-read* path-filter)
    (op file-issue-extension (require-all (extension-class "com.apple.app-sandbox.read") path-filter)))
(define (apply-write-and-issue-extension op path-filter)
    (op file-write* path-filter)
    (op file-issue-extension (require-all (extension-class "com.apple.app-sandbox.read-write") path-filter)))
(define (read-only-and-issue-extensions path-filter)
    (apply-read-and-issue-extension allow path-filter))
(define (read-write-and-issue-extensions path-filter)
    (apply-read-and-issue-extension allow path-filter)
    (apply-write-and-issue-extension allow path-filter))
(read-only-and-issue-extensions (extension "com.apple.app-sandbox.read"))
(read-write-and-issue-extensions (extension "com.apple.app-sandbox.read-write"))
(allow mach-lookup (extension "com.apple.app-sandbox.mach")) ;; FIXME: Should be removed when <rdar://problem/13066206> is fixed.

;; Allow the OpenGL Profiler to attach.
(if (defined? 'mach-register)
    (allow mach-register (global-name-regex #"^_oglprof_attach_<[0-9]+>$")))

(if (positive? (string-length (param "DARWIN_USER_CACHE_DIR")))
    (allow-read-write-directory-and-issue-read-write-extensions (param "DARWIN_USER_CACHE_DIR")))

(if (positive? (string-length (param "DARWIN_USER_TEMP_DIR")))
    (allow-read-write-directory-and-issue-read-write-extensions (param "DARWIN_USER_TEMP_DIR")))

;; IOKit user clients
(allow iokit-open
    (iokit-user-client-class "AppleMultitouchDeviceUserClient")
    (iokit-user-client-class "AppleUpstreamUserClient")
    (iokit-user-client-class "IOHIDParamUserClient")
    (iokit-user-client-class "RootDomainUserClient")
    (iokit-user-client-class "IOAudioControlUserClient")
    (iokit-user-client-class "IOAudioEngineUserClient")
    ;; Following is needed due to <rdar://problem/10427451> && <rdar://problem/10808817>
    (iokit-user-client-class "AudioAUUC"))

;; cookied.
;; FIXME: Update for <rdar://problem/13642852>.
(allow ipc-posix-shm-read-data
    (ipc-posix-name "FNetwork.defaultStorageSession")
    (ipc-posix-name-regex #"\.PrivateBrowsing-")
    (ipc-posix-name-regex #"^WebKit Test-"))

;; ColorSync
(allow ipc-posix-shm*
    (ipc-posix-name "com.apple.ColorSync.Gen.lock")
    (ipc-posix-name "com.apple.ColorSync.Disp.lock")
    (ipc-posix-name "com.apple.ColorSync.Gray2.2")
    (ipc-posix-name "com.apple.ColorSync.sRGB")
    (ipc-posix-name "com.apple.ColorSync.GenGray")
    (ipc-posix-name "com.apple.ColorSync.GenRGB"))

;; Audio
(allow ipc-posix-shm-read* ipc-posix-shm-write-data
    (ipc-posix-name-regex #"^AudioIO"))

;; Remote Web Inspector
(allow mach-lookup
       (global-name "com.apple.webinspector"))

(allow mach-lookup
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101500
    (with report) (with telemetry)
#endif
    (global-name "com.apple.audio.AudioComponentRegistrar")
    (global-name "com.apple.awdd")
    (global-name "com.apple.cfprefsd.agent")
    (global-name "com.apple.cookied")
    (global-name "com.apple.diagnosticd")
    (global-name "com.apple.iconservices")
    (global-name "com.apple.iconservices.store")
    (global-name "com.apple.mobileassetd")
    (global-name "com.apple.powerlog.plxpclogger.xpc")
    (global-name "com.apple.system.logger")
)

;; Various services required by AppKit and other frameworks
(allow mach-lookup
#if __MAC_OS_X_VERSION_MIN_REQUIRED < 101400
       (global-name "com.apple.FontObjectsServer")
#endif
       (global-name "com.apple.PowerManagement.control")
       (global-name "com.apple.SystemConfiguration.configd")
       (global-name "com.apple.analyticsd")
       (global-name "com.apple.assertiond.processassertionconnection")
       (global-name "com.apple.audio.SystemSoundServer-OSX")
       (global-name "com.apple.audio.audiohald")
       (global-name "com.apple.cfprefsd.daemon")
       (global-name "com.apple.cmio.registerassistantservice") ;; Needed by CoreMedia for plugin drivers
       (global-name "com.apple.coreservices.launchservicesd")
       (global-name "com.apple.fonts")
       (global-name "com.apple.mediaremoted.xpc")
       (global-name "com.apple.logd")
       (global-name "com.apple.logd.events")
       (global-name "com.apple.lsd.mapdb")
       (global-name "com.apple.lskdd") ;; <rdar://problem/49123855>
       (global-name "com.apple.tccd")
       (global-name "com.apple.tccd.system")
       (global-name "com.apple.trustd.agent")
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400 || PLATFORM(MACCATALYST)
       (global-name "com.apple.CARenderServer") ; Needed for [CAContext remoteContextWithOptions]
#else
       (global-name "com.apple.windowserver.active")
#endif
)

#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400 || PLATFORM(MACCATALYST)
;; <rdar://problem/47268166>
(allow mach-lookup (xpc-service-name "com.apple.MTLCompilerService"))
#endif

#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400 || PLATFORM(MACCATALYST)
(deny mach-lookup (with no-log)
    (global-name "com.apple.CoreServices.coreservicesd")
    (global-name "com.apple.DiskArbitration.diskarbitrationd")
    (global-name "com.apple.ViewBridgeAuxiliary")
    (global-name "com.apple.windowserver.active"))
#endif

;; Needed to support encrypted media playback <rdar://problem/40038478>
(allow mach-lookup
    (global-name "com.apple.SecurityServer")
    (global-name "com.apple.ocspd"))

(allow file-read* file-write* (subpath "/private/var/db/mds/system")) ;; FIXME: This should be removed when <rdar://problem/9538414> is fixed.

(allow file-read*
       (subpath "/private/var/db/mds")
       (literal "/private/var/db/DetachedSignatures"))

(allow ipc-posix-shm-read* ipc-posix-shm-write-data ipc-posix-shm-write-create
       (ipc-posix-name "com.apple.AppleDatabaseChanged"))

;; CoreFoundation. We don't import com.apple.corefoundation.sb, because it allows unnecessary access to pasteboard.
(allow mach-lookup
    (global-name-regex #"^com.apple.distributed_notifications")
#if !HAVE(CSCHECKFIXDISABLE)
    (global-name "com.apple.CoreServices.coreservicesd")
#endif
)

(allow file-read-data
    (literal "/dev/autofs_nowait")) ; Used by CF to circumvent automount triggers
(allow ipc-posix-shm
    (ipc-posix-name-regex #"^CFPBS:")) ; <rdar://problem/13757475>
(allow system-fsctl (fsctl-command (_IO "h" 47)))

;; Graphics
(system-graphics)

;; Networking
(allow network-outbound
       ;; Local mDNSResponder for DNS, arbitrary outbound TCP
       ;; Note: This is needed for some media playback features. <rdar://problem/38191574>
       ;; Remove this permission when <rdar://problem/38240572> is fixed.
       (literal "/private/var/run/mDNSResponder")
       ;; ObjC map_images needs to send logging data to syslog. <rdar://problem/39778918>
       (literal "/private/var/run/syslog")
       (remote tcp))

;; CFNetwork
(allow file-read-data (path "/private/var/db/nsurlstoraged/dafsaData.bin"))

#if PLATFORM(MAC)
;; FIXME should be removed when <rdar://problem/9347205> + related radar in Safari is fixed
(allow mach-lookup
       (global-name "com.apple.system.logger")
       (global-name "com.apple.system.notification_center"))
#endif

(if (defined? 'vnode-type)
        (deny file-write-create (vnode-type SYMLINK)))

;; Reserve a namespace for additional protected extended attributes.
(deny file-read-xattr file-write-xattr (xattr-regex #"^com\.apple\.security\.private\."))

(deny file-read* file-write* (with no-log)
       ;; FIXME: Should be removed after <rdar://problem/10463881> is fixed.
       (home-literal "/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2")
       (home-literal "/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2-journal"))

;; Deny access needed for unnecessary NSApplication initialization.
;; FIXME: This can be removed once <rdar://problem/13011633> is fixed.
(deny file-read* (with no-log)
       (subpath "/Library/InputManagers")
       (home-subpath "/Library/InputManagers"))
(deny user-preference-read (with no-log)
    (preference-domain "com.apple.speech.recognition.AppleSpeechRecognition.prefs"))
(deny mach-lookup (with no-log)
       (global-name "com.apple.coreservices.appleevents")
       (global-name "com.apple.pasteboard.1")
       (global-name "com.apple.speech.recognitionserver"))
#if PLATFORM(MAC)
;; Also part of unnecessary NSApplication initialization, but we can't block access to these yet, see <rdar://problem/13869765>.
(allow file-read*
       (subpath "/Library/Components")
       (subpath "/Library/Keyboard Layouts")
       (subpath "/Library/Input Methods")
       (home-subpath "/Library/Components")
       (home-subpath "/Library/Keyboard Layouts")
       (home-subpath "/Library/Input Methods"))
#endif

;; AirPlay
(allow mach-lookup
    (global-name "com.apple.coremedia.endpoint.xpc")
    (global-name "com.apple.coremedia.endpointstream.xpc")
    (global-name "com.apple.coremedia.endpointplaybacksession.xpc")
    ; <rdar://problem/35509194>
    (global-name "com.apple.coremedia.endpointremotecontrolsession.xpc")
    (global-name "com.apple.coremedia.routediscoverer.xpc")
    (global-name "com.apple.coremedia.routingcontext.xpc")
    (global-name "com.apple.coremedia.volumecontroller.xpc")
)

;; Data Detectors
(allow file-read* (subpath "/private/var/db/datadetectors/sys"))

#if PLATFORM(MAC)
;; Media capture, utilities
(if (not (defined? 'sbpl-filter?))
  (define (sbpl-filter? x)
      (and (list? x)
           (eq? (car x) 'filter))))

(macro (with-filter form)
   (let* ((ps (cdr form))
          (extra-filter (car ps))
          (rules (cdr ps)))
    `(letrec
        ((collect
             (lambda (l filters non-filters)
                 (if (null? l)
                     (list filters non-filters)
                     (let* 
                         ((x (car l))
                          (rest (cdr l)))
                         (if (sbpl-filter? x)
                             (collect rest (cons x filters) non-filters)
                             (collect rest filters (cons x non-filters)))))))
         (inject-filter
             (lambda args
                 (let* ((collected (collect args '() '()))
                        (filters (car collected))
                        (non-filters (cadr collected)))
                 (if (null? filters)
                     (cons ,extra-filter non-filters)
                     (cons (require-all (apply require-any filters) ,extra-filter) non-filters)))))
         (orig-allow allow)
         (orig-deny deny)
         (wrapper
             (lambda (action)
                 (lambda args (apply action (apply inject-filter args))))))
        (set! allow (wrapper orig-allow))
        (set! deny (wrapper orig-deny))
        ,@rules
        (set! deny orig-deny)
        (set! allow orig-allow))))

(define (home-library-preferences-regex home-library-preferences-relative-regex)
    (regex (string-append "^" (regex-quote (param "HOME_LIBRARY_PREFERENCES_DIR")) home-library-preferences-relative-regex)))

(define (home-library-preferences-literal home-library-preferences-relative-literal)
    (literal (string-append (param "HOME_LIBRARY_PREFERENCES_DIR") home-library-preferences-relative-literal)))

(define (shared-preferences-read . domains)
  (for-each (lambda (domain)
              (begin
                (if (defined? `user-preference-read)
                    (allow user-preference-read (preference-domain domain)))
                ; (Temporary) backward compatibility with non-CFPreferences readers.
                (allow file-read*
                       (literal (string-append "/Library/Preferences/" domain ".plist"))
                       (home-library-preferences-literal (string-append "/" domain ".plist"))
                       (home-library-preferences-regex (string-append #"/ByHost/" (regex-quote domain) #"\..*\.plist$")))))
            domains))

;; Media capture, microphone access
(with-filter (extension "com.apple.webkit.microphone")
    (allow device-microphone))

;; Media capture, camera access
(with-filter (extension "com.apple.webkit.camera")
    (shared-preferences-read "com.apple.coremedia")
    (allow file-read* (subpath "/Library/CoreMediaIO/Plug-Ins/DAL"))
    (allow mach-lookup (extension "com.apple.app-sandbox.mach"))
    (allow mach-lookup
        (global-name "com.apple.cmio.AppleCameraAssistant")
        ;; Apple DAL assistants
        (global-name "com.apple.cmio.VDCAssistant")
        (global-name "com.apple.cmio.AVCAssistant")
        (global-name "com.apple.cmio.IIDCVideoAssistant")
        ;; QuickTimeIIDCDigitizer assistant
        (global-name "com.apple.IIDCAssistant"))
    (allow iokit-open
        ;; QuickTimeUSBVDCDigitizer
        (iokit-user-client-class "IOUSBDeviceUserClientV2")
        (iokit-user-client-class "IOUSBInterfaceUserClientV2"))
    (allow device-camera))
#endif // PLATFORM(MAC)
