; Copyright (C) 2013-2018 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)

(import "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))

(deny sysctl*)
(allow sysctl-read
    (sysctl-name
        "hw.availcpu"
        "hw.ncpu"
        "hw.model"
        "kern.memorystatus_level"
        "vm.footprint_suspend"))

(deny iokit-get-properties)
(allow iokit-get-properties
    (iokit-property-regex #"^AAPL,(DisplayPipe|boot-display|mux-switch-state)")
    (iokit-property "AGCInfo")
    (iokit-property-regex #"^ATY,fb_(linebytes|offset|size)")
    (iokit-property "AccelCaps")
    (iokit-property "ActuationSupported")
    (iokit-property "AllowDisplaySleep")
    (iokit-property "AlwaysNeedsVelocityCalculated")
    (iokit-property "Apple(DisplayType|GVAKeyDoesNotExist|IntelMEVABundleName|Sense)")
    (iokit-property "CFBundleIdentifier")
    (iokit-property-regex #"^Display(ParameterHandlerUsesCharPtr|ProductID|Routing|SerialNumber|VendorID)")
    (iokit-property "Development")
    (iokit-property "DeviceEqID")
    (iokit-property "Driver is Ready")
    (iokit-property "EnableLPVP")
    (iokit-property "Endianness")
    (iokit-property "Family ID")
    (iokit-property "ForceSupported")
    (iokit-property "HIDPointerAccelerationType")
    (iokit-property-regex #"^IOAccel(DisplayPipeCapabilities|Index|Revision|Types)")
    (iokit-property-regex #"^IOAudioControl(ChannelID|ID|SubType|Usage)")
    (iokit-property-regex #"^IOAudioDevice(CanBeDefaults|TransportType)")
    (iokit-property-regex #"^IOAudioEngine(ChannelNames|ClientDescription|CoreAudioPlugIn|(|Device)Description|Flavor|GlobalUniqueID|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 "IOClassNameOverride")
    (iokit-property "IOCFPlugInTypes")
    (iokit-property "IOClass")
    (iokit-property "IOConsoleUsers")
    (iokit-property "IODVDBundleName")
    (iokit-property-regex #"^IODisplay(Attributes|CapabilityString|ConnectFlags|ControllerID|EDID|FirmwareLevel|MCCSVersion|Parameters|PrefsKey|TechnologyType|UsageTime)")
    (iokit-property-regex #"^IOFB(CLUTDefer|Config|CurrentPixelClock|CurrentPixelCount|CursorInfo|DependentID|DependentIndex|DetailedTimings|GammaCount|GammaHeaderSize|GammaWidth|I2CInterfaceIDs|I2CInterfaceInfo|Integrated|MemorySize|NeedsRefresh|ProbeOptions|ScalerInfo|TimingRange|Transform|UIScale|WaitCursorFrames|WaitCursorPeriod)")
    (iokit-property-regex #"^IOFBCurrentPixelCount(Real)")
    (iokit-property "IOFramebufferOpenGLIndex")
    (iokit-property "IOGeneralInterest")
    (iokit-property "IOGLBundleName")
    (iokit-property "IOGVACodec")
    (iokit-property "IOGVAVTCapabilities")
    (iokit-property-regex #"^IOGVA(BGRAEnc|Codec|EncoderRestricted|Scaler)")
    (iokit-property "IOI2CTransactionTypes")
    (iokit-property-regex "^IOGVA[A-Z]+(De|En)code")
    (iokit-property "IOMACAddress") ;; For some Flash players
    (iokit-property "IOMatchCategory")
    (iokit-property-regex #"^IOName(Match|Matched)")
    (iokit-property-regex #"^IOPCI(ClassMatch|Express(Capabilities|Link(Status|Capabilities))|PrimaryMatch|MSIMode|Resourced|Tunnelled)")
    (iokit-property "IOPMStrictTreeOrder")
    (iokit-property-regex #"^IOPlatform(SerialNumber|UUID)") ;; Ditto
    (iokit-property "IOPowerManagement")
    (iokit-property "IOProbeScore")
    (iokit-property "IOProviderClass")
    (iokit-property-regex #"^IOReport(Lures|Legend(|Public))")
    (iokit-property "IOScreenRestoreState")
    (iokit-property "IOSourceVersion")
    (iokit-property "IOVARendererID")
    (iokit-property-regex #"^InternalStatistics(|Accm)")
    (iokit-property-regex #"^MT( Built-In|HIDDevice)")
    (iokit-property "MaintainPowerInUILock")
    (iokit-property "Max Packet Size")
    (iokit-property-regex #"^MetalPlugin(Name|ClassName)")
    (iokit-property-regex #"^Multitouch (ID|Serial Number|Subdevice ID)")
    (iokit-property "NXSystemInfo")
    (iokit-property "NoAutoRoute")
    (iokit-property-regex #"^PerformanceStatistics(|Accum)")
    (iokit-property "Protocol Characteristics")
    (iokit-property-regex #"^Sensor (Columns|Region (Descriptor|Param)|Rows|Surface (Descriptor|Height|Width))")
    (iokit-property "SupportAudioAUUC")
    (iokit-property "SurfaceList")
    (iokit-property "TimeStampFiltering")
    (iokit-property "Transport")
    (iokit-property "VRAM,totalMB")
    (iokit-property "WANTS_FRAMES_IGNORED")
    (iokit-property "board-id")
    (iokit-property-regex #"^audio-(codec-info|device-(mvalue|nvalue))")
    (iokit-property "av-signal-type")
    (iokit-property "bcdVersion")
    (iokit-property "boot-gamma-restored")
    (iokit-property "built-in")
    (iokit-property "connector-type")
    (iokit-property "device-colors")
    (iokit-property "graphic-options")
    (iokit-property "idProduct")
    (iokit-property "idVendor")
    (iokit-property "iofb_version")
    (iokit-property-regex #"^parser-(options|type)")
    (iokit-property "port-number")
    (iokit-property "startup-timing")
    (iokit-property "touch-size-id")
)

#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101300
(deny mach-lookup (xpc-service-name-prefix ""))
(allow mach-lookup
    (xpc-service-name "com.apple.ViewBridgeAuxiliary")
    (xpc-service-name "com.apple.accessibility.mediaaccessibilityd")
    (xpc-service-name "com.apple.appkit.xpc.openAndSavePanelService")
    (xpc-service-name "com.apple.appstore.PluginXPCService") ; <rdar://problem/35940948>
    (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")
)
#endif

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

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

(define (home-library-subpath home-library-relative-subpath)
    (subpath (string-append (param "HOME_LIBRARY_DIR") home-library-relative-subpath)))

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

(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-subpath home-library-preferences-relative-subpath)
    (subpath (string-append (param "HOME_LIBRARY_PREFERENCES_DIR") home-library-preferences-relative-subpath)))

(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))

(define (shared-preferences-read-write . domains)
  (for-each (lambda (domain)
              (begin
                (if (defined? `user-preference-write)
                    (allow user-preference-read user-preference-write (preference-domain domain)))
                ; (Temporary) backward compatibility with non-CFPreferences readers / writers.
                (allow file-read* file-write*
                       (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))

;; 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*)

(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))))))

;; WebKit2 sandbox launcher needs to define an _OS_VERSION parameter
;; This parameter is the major OS Version number.
(if (not (defined? 'os-version))
    (define os-version (param "_OS_VERSION")))

(system-graphics)

;; Read-only preferences
(shared-preferences-read
    ".GlobalPreferences"
    "com.apple.ATS"
    "com.apple.Bluetooth"
    "com.apple.CoreGraphics"
    "com.apple.HIToolbox"
    "com.apple.QuickTime"
    "com.apple.driver.AppleBluetoothMultitouch.mouse"
    "com.apple.driver.AppleBluetoothMultitouch.trackpad"
    "com.apple.driver.AppleHIDMouse"
    "com.apple.inputmethodkit"
    "com.apple.iWork.Pages"
    "com.apple.LaunchServices"
    "com.apple.MultitouchSupport"
    "com.apple.security"
    "com.apple.security.revocation"
    "com.apple.security_common"
    "com.apple.speech.voice.prefs"
    "com.apple.speech.synthesis.general.prefs"
    "com.apple.speech.recognition.AppleSpeechRecognition.prefs"
    "com.apple.systemsound"
    "com.apple.universalaccess"
    "com.apple.WebFoundation"
    "com.apple.WebKit.PluginProcess"
    "pbs"
    "com.apple.ServicesMenu.Services")

;; Read-only data
(allow file-read*
    (literal "/")
    (literal "/private/etc/hosts")
    (literal "/private/etc/protocols")
    (literal "/private/etc/services")
    (literal "/private/etc/resolv.conf")
    (literal "/private/var/run/resolv.conf")

    (subpath "/Library/Frameworks")
    (subpath "/Library/Managed Preferences")
    (subpath "/private/var/db/mds")

    (regex #"^/Library/Preferences/com\.apple\.security")
    (home-literal "/.CFUserTextEncoding")
    (home-library-subpath "/Audio")
    (home-library-subpath "/ColorPickers")
    (home-library-subpath "/ColorSync")
    (subpath "/Library/Components")
    (home-library-subpath "/Components")
    (subpath "/Library/Contextual Menu Items")
    (subpath "/Library/Input Methods")
    (home-library-subpath "/Input Methods")
    (subpath "/Library/InputManagers")
    (home-library-subpath "/InputManagers")
    (home-library-subpath "/KeyBindings")
    (subpath "/Library/Keyboard Layouts")
    (home-library-subpath "/Keyboard Layouts")
    (subpath "/Library/Fonts")
    (home-library-subpath "/Fonts")
    (subpath "/Library/Spelling")
    (home-library-subpath "/Spelling")
    (subpath "/Library/PDF Services")
    (home-library-subpath "/PDF Services")
    (home-library-preferences-literal "/QuickTime Preferences")

    (home-library-literal "/Caches/com.apple.coreaudio.components.plist")

    (subpath "/Library/Audio/Sounds")
    (subpath "/Library/Audio/Plug-Ins/Components")
    (home-library-subpath "/Audio/Plug-Ins/Components")
    (subpath "/Library/Audio/Plug-Ins/HAL")
    (subpath "/Library/CoreMediaIO/Plug-Ins/DAL")
    (subpath "/Library/QuickTime")
    (home-library-subpath "/QuickTime")
    (subpath "/Library/Video/Plug-Ins")
    (home-library-subpath "/Caches/QuickTime")

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

    (home-library-literal "/Application Support/SyncServices/Local/ClientsWithChanges/com.apple.Keychain")

    (subpath "/Library/ColorSync")

    (home-literal "/Library/Preferences/com.apple.lookup.shared.plist"))

#if __MAC_OS_X_VERSION_MIN_REQUIRED < 101240
;; FIXME: This should be removed when <rdar://problem/10479685> is fixed.
;; Restrict AppSandboxed processes from creating /Library/Keychains, but allow access to the contents of /Library/Keychains:
(allow file-read-data file-read-metadata file-write-data
    (subpath "/Library/Keychains"))

;; Do permit creating per-user keychains
(allow file-read* file-write*
    (home-library-subpath "/Keychains"))

;; Except deny access to new-style iOS Keychain folders which are UUIDs.
(deny file-read* file-write*
    (regex (string-append "/Library/Keychains/" (uuid-regex-string) "(/|$)"))
    (home-library-regex (string-append "/Keychains/" (uuid-regex-string) "(/|$)")))
#endif

;; Security framework
(allow mach-lookup (global-name "com.apple.ocspd"))
(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-name "com.apple.AppleDatabaseChanged"))

;; Read-write preferences and data
(allow system-fsctl (fsctl-command (_IO "h" 47)))

;; IOKit user clients
(allow iokit-open
    (iokit-user-client-class "IOAudioControlUserClient")
    (iokit-user-client-class "IOAudioEngineUserClient")
    (iokit-user-client-class "IOHIDParamUserClient")
    (iokit-user-client-class "RootDomainUserClient"))

;; Various services required by AppKit and other frameworks
(allow mach-lookup
    (global-name "com.apple.audio.AudioComponentRegistrar")
    (global-name "com.apple.CoreServices.coreservicesd")
    (global-name "com.apple.DiskArbitration.diskarbitrationd")
    (global-name "com.apple.FileCoordination")
    (global-name "com.apple.FontObjectsServer")
    (global-name "com.apple.ImageCaptureExtension2.presence")
    (global-name "com.apple.PowerManagement.control")
    (global-name "com.apple.SecurityServer")
    (global-name "com.apple.SystemConfiguration.PPPController")
    (global-name "com.apple.SystemConfiguration.configd")
    (global-name "com.apple.UNCUserNotification")
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101300
    (global-name "com.apple.analyticsd")
#endif
    (global-name "com.apple.audio.audiohald")
    (global-name "com.apple.audio.coreaudiod")
    (global-name "com.apple.cfnetwork.AuthBrokerAgent")
    (global-name "com.apple.cmio.VDCAssistant")
    (global-name "com.apple.cookied") ;; FIXME: <rdar://problem/10790768> Limit access to cookies.
    (global-name "com.apple.coreservices.launchservicesd")
    (global-name "com.apple.fonts")
    (global-name "com.apple.lsd.mapdb")
    (global-name "com.apple.ocspd")
    (global-name "com.apple.pasteboard.1")
    (global-name "com.apple.pbs.fetch_services")
    (global-name "com.apple.tccd.system")
    (global-name "com.apple.tsm.uiserver")
    (global-name "com.apple.window_proxies")
    (global-name "com.apple.windowserver.active")
    (local-name "com.apple.tsm.portname")
    (global-name-regex #"_OpenStep$"))

;; Configuration directories
(allow file-read* (subpath (param "PLUGIN_PATH")))
(allow file-read* (subpath (param "WEBKIT2_FRAMEWORK_DIR")))
(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")))
(if (positive? (string-length (param "NSURL_CACHE_DIR")))
    (allow-read-write-directory-and-issue-read-write-extensions (param "NSURL_CACHE_DIR")))

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

(system-network)

(allow network-outbound
    ;; Local mDNSResponder for DNS, arbitrary outbound TCP and UDP
    (literal "/private/var/run/mDNSResponder")
    (remote tcp)
    (remote udp))
(allow network-inbound
    (local udp))

;; Open and Save panels
(define (webkit-powerbox)
    (allow file-read* (literal "/Library/Preferences/com.apple.ViewBridge.plist"))
    (allow file-read* file-write* (extension "com.apple.app-sandbox.read-write"))
    (allow file-issue-extension
        (require-all
            (extension-class "com.apple.app-sandbox.read")
            (extension "com.apple.app-sandbox.read-write"))
        (require-all
            (extension-class "com.apple.app-sandbox.read-write")
            (extension "com.apple.app-sandbox.read-write"))))

;; Printing
(define (webkit-printing)
    (if (defined? 'authorization-right-obtain)
        (allow authorization-right-obtain
               (right-name "system.print.operator")
               (right-name "system.printingmanager")))
    (if (defined? 'mach-register)
        (deny mach-register (with no-log)
               (global-name-regex #"^com\.apple\.ICA-[0-9]+$")))
    (if (defined? 'mach-task-name)
        (allow mach-task-name))
    (allow network-outbound (literal "/private/var/run/cupsd"))
    (allow mach-lookup
        (global-name "com.apple.printuitool.agent")
        (global-name "com.apple.printtool.agent")
        (global-name "com.apple.printtool.daemon"))
    (allow file-read*
        (subpath "/Library/Printers")
        (home-literal "/.cups/lpoptions")
        (home-literal "/.cups/client.conf")
        (literal "/private/etc/cups/client.conf")
        (literal "/private/etc/cups/lpoptions")
        (subpath "/private/etc/cups/ppd")
        (literal "/private/var/run/cupsd"))
    (shared-preferences-read "org.cups.PrintingPrefs"))

;; Text Services Manager
(with-filter (iokit-registry-entry-class "IOHIDEventDriver")
    (allow iokit-set-properties (iokit-property "CapsLockDelayOverride")))

;; Image Capture
(define (webkit-imagecapture)
    (allow appleevent-send (appleevent-destination "com.apple.imagecaptureextension2")))

;; Camera
(define (webkit-camera)
    (shared-preferences-read "com.apple.coremedia")
    (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))

;; Microphone
(define (webkit-microphone)
    (allow device-microphone))

(allow ipc-posix-shm*
    (ipc-posix-name-regex #"^AudioIO")
    (ipc-posix-name-regex #"^CFPBS:")
    (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")
    (ipc-posix-name-regex #"^com\.apple\.cs\.")
    (ipc-posix-name-regex #"^ls\."))
(allow ipc-posix-shm-read*
    (ipc-posix-name-regex #"^/tmp/com\.apple\.csseed\.")
    (ipc-posix-name "FNetwork.defaultStorageSession")
    (ipc-posix-name "apple.shm.notification_center"))

;; Silently block access to some resources
(deny file-read* file-write* (with no-log)
    (subpath "/Network/Library")
    (subpath "/Network/Applications")
    (home-library-preferences-regex #"/com\.apple\.internetconfig(priv)?\.plist")

    ;; FIXME: Should be removed after <rdar://problem/10463881> is fixed.
    (home-library-preferences-literal "/com.apple.LaunchServices.QuarantineEventsV2")
    (home-library-preferences-literal "/com.apple.LaunchServices.QuarantineEventsV2-journal"))

(deny mach-lookup (with no-log)
    (global-name "com.apple.FSEvents")
    (global-name "com.apple.coreservices.appleevents")
    (global-name "com.apple.dock.server")
    (global-name-regex #"^com\.apple\.distributed_notifications"))

;; The below rules are inserted at the end of sandbox profile compilation by overriding the finalizer.
;; The initial value of %finalize must be the last function called.
(letrec
   ((original-%finalize %finalize)
    (webkit-%finalize
        (lambda ()
            (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 #"^com\.apple\.security\.private\."))
            ;; FIXME: Should be removed once <rdar://problem/16329087> is fixed.
            (if (defined? 'xattr-regex)
                (deny file-read-xattr file-write-xattr (xattr-regex #"^com\.apple\.security\.private\."))
                (deny file-read-xattr file-write-xattr (xattr #"^com\.apple\.security\.private\.")))
            (original-%finalize))))
   (set! %finalize webkit-%finalize))
