You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Jan 23, 2023. It is now read-only.
[release/2.2] Added support for running in a sandbox on Mac (#20735) (#20906)
* Added support for running in a sandbox on Mac (#20735)
* Added support for running in a sandbox on Mac
When running in a sandbox, the Mac operating system will limit access to resources, esp. the file system. Right now both Mutex and SharedMemory in the PAL are accessing the /tmp folder for which Mac does not provide the application permissions to access.
Instead, the sandbox provides the ability to share information between applications by using a shared container folder. This is done by registering the application with an Application Group ID. Using this ID, we can access the shared folder and read/write from it.
Since the .Net runtime can be loaded in multiple ways, we decided that the easiest way to let the runtime know what the application group ID is via an environment variable. Thus, if the NETCOREAPP_SANDBOX_APPLICATION_GROUP_ID environment variable is set (on Mac), the runtime will assume we are sandboxed, and will use the value provided as the application group ID. Note that due to limitations on semaphore file lengths, we will not allow application group IDs longer than 13 characters. This gives us 10 characters for the developer ID, and 3 extra characters for the group name.
When sandbox is disabled (the environment variable is empty) then the folder for Mutex and SharedMemory will continue to be rooted in /tmp. However when the sandbox is enabled, these files will be created under /user/{loginname}/Library/Group Containers/{AppGroupId}/.
Fixes #20473
* Made gApplicationContainerPath a pointer so it does not get automatically deleted by the c runtime
* Made s_runtimeTempDirectoryPath and s_sharedMemoryDirectoryPath pointers so they are not automatically deleted by the c runtime
* Renamed gApplicationContainerPath to gSharedFilesPath
* Renamed NETCOREAPP_SANDBOX_APPLICATION_GROUP_ID to DOTNET_SANDBOX_APPLICATION_GROUP_ID
* Fixed usage of VerifyStringOperation
* Replaced new with InternalNew
* Wrapped Apple specific code with #ifdef
* Added exception handling during close
* Moved VerifyStringOperation macro into SharedMemoryManager
* Moved PathCharString variable declarations before AutoCleanup is declared.
* Fixed initialization functions not to throw
* Renamed CopyPath to BuildSharedFilesPath
* Fixed misc nits
* Fixed implicit conversions from BOOL to bool
* Moved MAX_APPLICATION_GROUP_ID_LENGTH inside ifdef APPLE
* Removed PAL_IsApplicationSandboxed
* Verify the application group container directory exists in Mac Sandbox (#20916)
* Verify the application group container directory exists in Mac Sandbox
Added an additional check to verify that the shared files directory based on the application group ID exists when running in a Mac sandbox. If it doesn't then the initialization will fail.
As part of this change, also refactored the logic the sets the shared file path into a separate method.
* Changed bool to BOOL
0 commit comments