3
0
Fork 0
forked from mirrors/nixpkgs

switch to zero underscores for sandbox profiles; remove generateFrameworkProfile

This commit is contained in:
Jude Taylor 2015-11-21 12:06:41 -08:00
parent a63346e33c
commit 69e7f3bb74
11 changed files with 29 additions and 96 deletions

View file

@ -43,7 +43,7 @@ stdenv.mkDerivation rec {
]; ];
}; };
_sandboxProfile = stdenv.lib.sandbox.allowFileRead "/dev/ptmx"; sandboxProfile = stdenv.lib.sandbox.allowFileRead "/dev/ptmx";
# To fix the trouble in vim73, that it cannot cross-build with this patch # To fix the trouble in vim73, that it cannot cross-build with this patch
# to bypass a configure script check that cannot be done cross-building. # to bypass a configure script check that cannot be done cross-building.

View file

@ -37,7 +37,7 @@ stdenv.mkDerivation {
NIX_LDFLAGS = stdenv.lib.optionalString (!stdenv.isDarwin) "-lgcc_s"; NIX_LDFLAGS = stdenv.lib.optionalString (!stdenv.isDarwin) "-lgcc_s";
# without this, git fails when trying to check for /etc/gitconfig existence # without this, git fails when trying to check for /etc/gitconfig existence
_propagatedSandboxProfile = stdenv.lib.sandbox.allowDirectoryList "/etc"; propagatedSandboxProfile = stdenv.lib.sandbox.allowDirectoryList "/etc";
makeFlags = "prefix=\${out} sysconfdir=/etc/ PERL_PATH=${perl}/bin/perl SHELL_PATH=${stdenv.shell} " makeFlags = "prefix=\${out} sysconfdir=/etc/ PERL_PATH=${perl}/bin/perl SHELL_PATH=${stdenv.shell} "
+ (if pythonSupport then "PYTHON_PATH=${python}/bin/python" else "NO_PYTHON=1") + (if pythonSupport then "PYTHON_PATH=${python}/bin/python" else "NO_PYTHON=1")

View file

@ -50,7 +50,7 @@ stdenv.mkDerivation rec {
--replace "/bin/pwd" "$pwd" --replace "/bin/pwd" "$pwd"
''; '';
_sandboxProfile = stdenv.lib.sandbox.allow "ipc-sysv-sem"; sandboxProfile = stdenv.lib.sandbox.allow "ipc-sysv-sem";
# Build a thread-safe Perl with a dynamic libperls.o. We need the # Build a thread-safe Perl with a dynamic libperls.o. We need the
# "installstyle" option to ensure that modules are put under # "installstyle" option to ensure that modules are put under

View file

@ -1,7 +1,6 @@
{ stdenv, fetchurl, xar, gzip, cpio, pkgs }: { stdenv, fetchurl, xar, gzip, cpio, pkgs }:
let let
generateFrameworkProfile = pkgs.callPackage ./generate-framework-profile.nix {};
# sadly needs to be exported because security_tool needs it # sadly needs to be exported because security_tool needs it
sdk = stdenv.mkDerivation rec { sdk = stdenv.mkDerivation rec {
version = "10.9"; version = "10.9";
@ -97,11 +96,11 @@ let
propagatedBuildInputs = deps; propagatedBuildInputs = deps;
# allows building the symlink tree # allows building the symlink tree
_sandboxProfile = '' sandboxProfile = ''
(allow file-read* (subpath "/System/Library/Frameworks/${name}.framework")) (allow file-read* (subpath "/System/Library/Frameworks/${name}.framework"))
''; '';
_propagatedSandboxProfile = stdenv.lib.sandbox.importProfile (generateFrameworkProfile name); __propagatedImpureHostDeps = "/System/Library/Frameworks/${name}.framework/${name}";
meta = with stdenv.lib; { meta = with stdenv.lib; {
description = "Apple SDK framework ${name}"; description = "Apple SDK framework ${name}";
@ -165,7 +164,7 @@ in rec {
}); });
CoreServices = stdenv.lib.overrideDerivation super.CoreServices (drv: { CoreServices = stdenv.lib.overrideDerivation super.CoreServices (drv: {
_propagatedSandboxProfile = drv._propagatedSandboxProfile ++ ['' __propagatedSandboxProfile = drv.__propagatedSandboxProfile ++ [''
(allow mach-lookup (global-name "com.apple.CoreServices.coreservicesd")) (allow mach-lookup (global-name "com.apple.CoreServices.coreservicesd"))
'']; ''];
}); });
@ -182,5 +181,5 @@ in rec {
frameworks = bareFrameworks // overrides bareFrameworks; frameworks = bareFrameworks // overrides bareFrameworks;
inherit sdk generateFrameworkProfile; inherit sdk;
} }

View file

@ -1,64 +0,0 @@
{ runCommand }:
# In a normal programming language, one might store a hashmap
# { library name -> runtime dependencies }.
# associative arrays were only recently added to bash, and even then, bash arrays cannot
# be multidimensional. instead, the filesystem is the hash table!
# once every dependency in the tree has been visited, a comprehensive list of libraries
# will exist inside ./build. then `find ./build -type f` will give you the
# dependency tree you need!
frameworkName:
let path = "/System/Library/Frameworks/${frameworkName}.framework";
in runCommand "${frameworkName}-profile.sb" {
# __noChroot lite
_sandboxProfile = ''
(allow file* (subpath "/"))
'';
# inconsistencies may exist between self and hydra
allowSubstitutes = false;
} ''
if [ ! -f "${path}/${frameworkName}" ]; then
touch $out
exit
fi
base=./build
find_deps () {
if [ -f "$base/$1" ]; then
return
fi
dependencies=$(otool -l -arch x86_64 $1 \
| grep 'LC_\w*_DYLIB' -A 2 \
| grep name \
| sed 's/^ *//' \
| cut -d' ' -f2)
mkdir -p $base/"$(dirname "$1")"
touch $base/"$1"
for dep in $dependencies; do
find_deps "$dep"
done
}
find_deps "${path}/${frameworkName}" "$out"
set -o noglob
profile="(allow file-read*"
for file in $(find $base -type f); do
filename=''${file/$base/}
case $filename in
/usr/lib/system*) ;;
/usr/lib/libSystem.dylib) ;;
/usr/lib/libSystem.B.dylib) ;;
/usr/lib/libobjc.A.dylib) ;;
/usr/lib/libobjc.dylib) ;;
/usr/lib/libauto.dylib) ;;
/usr/lib/libc++abi.dylib) ;;
/usr/lib/libDiagnosticMessagesClient.dylib) ;;
*) profile+=" (literal \"$filename\")" ;;
esac
done
profile+=" (literal \"${path}/${frameworkName}\")"
profile+=" (literal \"${path}/Versions/Current\")"
echo "$profile)" > $out
''

View file

@ -1,4 +1,4 @@
{ stdenv, appleDerivation, icu, dyld, libdispatch, launchd, libclosure, generateFrameworkProfile }: { stdenv, appleDerivation, icu, dyld, libdispatch, launchd, libclosure }:
# this project uses blocks, a clang-only extension # this project uses blocks, a clang-only extension
assert stdenv.cc.isClang; assert stdenv.cc.isClang;
@ -8,7 +8,7 @@ appleDerivation {
patches = [ ./add-cf-initialize.patch ./add-cfmachport.patch ./cf-bridging.patch ]; patches = [ ./add-cf-initialize.patch ./add-cfmachport.patch ./cf-bridging.patch ];
_propagatedSandboxProfile = stdenv.lib.sandbox.importProfile (generateFrameworkProfile "CoreFoundation"); __propagatedImpureHostDeps = "/System/Library/Frameworks/CoreFoundation.framework/CoreFoundation";
preBuild = '' preBuild = ''
substituteInPlace Makefile \ substituteInPlace Makefile \

View file

@ -81,7 +81,7 @@ in appleDerivation {
]; ];
# ps uses this syscall to get process info # ps uses this syscall to get process info
_propagatedSandboxProfile = stdenv.lib.sandbox.allow "mach-priv-task-port"; propagatedSandboxProfile = stdenv.lib.sandbox.allow "mach-priv-task-port";
meta = { meta = {
platforms = stdenv.lib.platforms.darwin; platforms = stdenv.lib.platforms.darwin;

View file

@ -7,7 +7,7 @@ appleDerivation {
propagatedBuildInputs = [ Security ]; propagatedBuildInputs = [ Security ];
_propagatedSandboxProfile = '' propagatedSandboxProfile = ''
(allow mach-lookup (global-name "com.apple.SystemConfiguration.configd")) (allow mach-lookup (global-name "com.apple.SystemConfiguration.configd"))
''; '';

View file

@ -54,11 +54,9 @@ let
inherit (adv_cmds) ps locale; inherit (adv_cmds) ps locale;
architecture = applePackage "architecture" "265" "05wz8wmxlqssfp29x203fwfb8pgbdjj1mpz12v508658166yzqj8" {}; architecture = applePackage "architecture" "265" "05wz8wmxlqssfp29x203fwfb8pgbdjj1mpz12v508658166yzqj8" {};
bootstrap_cmds = applePackage "bootstrap_cmds" "86" "0xr0296jm1r3q7kbam98h85g23qlfi763z54ahj563n636kyk2wb" {}; bootstrap_cmds = applePackage "bootstrap_cmds" "86" "0xr0296jm1r3q7kbam98h85g23qlfi763z54ahj563n636kyk2wb" {};
bsdmake = applePackage "bsdmake" "24" "11a9kkhz5bfgi1i8kpdkis78lhc6b5vxmhd598fcdgra1jw4iac2" {}; bsdmake = applePackage "bsdmake" "24" "11a9kkhz5bfgi1i8kpdkis78lhc6b5vxmhd598fcdgra1jw4iac2" {};
CarbonHeaders = applePackage "CarbonHeaders" "9A581" "1hc0yijlpwq39x5bic6nnywqp2m1wj1f11j33m2q7p505h1h740c" {}; CarbonHeaders = applePackage "CarbonHeaders" "9A581" "1hc0yijlpwq39x5bic6nnywqp2m1wj1f11j33m2q7p505h1h740c" {};
CF = applePackage "CF" "855.17" "1sadmxi9fsvsmdyxvg2133sdzvkzwil5fvyyidxsyk1iyfzqsvln" { CF = applePackage "CF" "855.17" "1sadmxi9fsvsmdyxvg2133sdzvkzwil5fvyyidxsyk1iyfzqsvln" {};
inherit (pkgs.darwin.apple_sdk) generateFrameworkProfile;
};
CommonCrypto = applePackage "CommonCrypto" "60049" "1azin6w7cnzl0iv8kd2qzgwcp6a45zy64y5z1i6jysjcl6xmlw2h" {}; CommonCrypto = applePackage "CommonCrypto" "60049" "1azin6w7cnzl0iv8kd2qzgwcp6a45zy64y5z1i6jysjcl6xmlw2h" {};
configd = applePackage "configd" "453.19" "1gxakahk8gallf16xmhxhprdxkh3prrmzxnmxfvj0slr0939mmr2" {}; configd = applePackage "configd" "453.19" "1gxakahk8gallf16xmhxhprdxkh3prrmzxnmxfvj0slr0939mmr2" {};
copyfile = applePackage "copyfile" "103.92.1" "15i2hw5aqx0fklvmq6avin5s00adacvzqc740vviwc2y742vrdcd" {}; copyfile = applePackage "copyfile" "103.92.1" "15i2hw5aqx0fklvmq6avin5s00adacvzqc740vviwc2y742vrdcd" {};

View file

@ -12,8 +12,8 @@ let lib = import ../../../lib; in lib.makeOverridable (
, extraBuildInputs ? [] , extraBuildInputs ? []
, __stdenvImpureHostDeps ? [] , __stdenvImpureHostDeps ? []
, __extraImpureHostDeps ? [] , __extraImpureHostDeps ? []
, _stdenvSandboxProfile ? "" , stdenvSandboxProfile ? ""
, _extraSandboxProfile ? "" , extraSandboxProfile ? ""
}: }:
let let
@ -102,8 +102,8 @@ let
, outputs ? [ "out" ] , outputs ? [ "out" ]
, __impureHostDeps ? [] , __impureHostDeps ? []
, __propagatedImpureHostDeps ? [] , __propagatedImpureHostDeps ? []
, _sandboxProfile ? "" , sandboxProfile ? ""
, _propagatedSandboxProfile ? "" , propagatedSandboxProfile ? ""
, ... } @ attrs: , ... } @ attrs:
let let
pos' = pos' =
@ -154,12 +154,12 @@ let
(removeAttrs attrs (removeAttrs attrs
["meta" "passthru" "crossAttrs" "pos" ["meta" "passthru" "crossAttrs" "pos"
"__impureHostDeps" "__propagatedImpureHostDeps" "__impureHostDeps" "__propagatedImpureHostDeps"
"_sandboxProfile" "_propagatedSandboxProfile"]) "sandboxProfile" "propagatedSandboxProfile"])
// (let // (let
computedSandboxProfile = computedSandboxProfile =
lib.concatMap (input: input._propagatedSandboxProfile or []) (extraBuildInputs ++ buildInputs ++ nativeBuildInputs); lib.concatMap (input: input.__propagatedSandboxProfile or []) (extraBuildInputs ++ buildInputs ++ nativeBuildInputs);
computedPropagatedSandboxProfile = computedPropagatedSandboxProfile =
lib.concatMap (input: input._propagatedSandboxProfile or []) (propagatedBuildInputs ++ propagatedNativeBuildInputs); lib.concatMap (input: input.__propagatedSandboxProfile or []) (propagatedBuildInputs ++ propagatedNativeBuildInputs);
in in
{ {
builder = attrs.realBuilder or shell; builder = attrs.realBuilder or shell;
@ -178,11 +178,11 @@ let
(if crossConfig == null then propagatedBuildInputs else []); (if crossConfig == null then propagatedBuildInputs else []);
} // ifDarwin { } // ifDarwin {
# TODO: remove lib.unique once nix has a list canonicalization primitive # TODO: remove lib.unique once nix has a list canonicalization primitive
_sandboxProfile = __sandboxProfile =
let profiles = [ _extraSandboxProfile ] ++ computedSandboxProfile ++ computedPropagatedSandboxProfile ++ [ _propagatedSandboxProfile _sandboxProfile ]; let profiles = [ extraSandboxProfile ] ++ computedSandboxProfile ++ computedPropagatedSandboxProfile ++ [ propagatedSandboxProfile sandboxProfile ];
final = lib.concatStringsSep "\n" (lib.filter (x: x != "") (lib.unique profiles)); final = lib.concatStringsSep "\n" (lib.filter (x: x != "") (lib.unique profiles));
in final; in final;
_propagatedSandboxProfile = lib.unique (computedPropagatedSandboxProfile ++ [ _propagatedSandboxProfile ]); __propagatedSandboxProfile = lib.unique (computedPropagatedSandboxProfile ++ [ propagatedSandboxProfile ]);
} // (if outputs' != [ "out" ] then { } // (if outputs' != [ "out" ] then {
outputs = outputs'; outputs = outputs';
} else { })))) ( } else { })))) (
@ -219,7 +219,7 @@ let
inherit preHook initialPath shell defaultNativeBuildInputs; inherit preHook initialPath shell defaultNativeBuildInputs;
} }
// ifDarwin { // ifDarwin {
_sandboxProfile = _stdenvSandboxProfile; __sandboxProfile = stdenvSandboxProfile;
}) })
// rec { // rec {

View file

@ -50,7 +50,7 @@ in rec {
inherit (bootstrapFiles) mkdir bzip2 cpio; inherit (bootstrapFiles) mkdir bzip2 cpio;
_sandboxProfile = binShClosure + libSystemProfile; __sandboxProfile = binShClosure + libSystemProfile;
}; };
stageFun = step: last: {shell ? "${bootstrapTools}/bin/sh", stageFun = step: last: {shell ? "${bootstrapTools}/bin/sh",
@ -93,8 +93,8 @@ in rec {
}; };
# The stdenvs themselves don't use mkDerivation, so I need to specify this here # The stdenvs themselves don't use mkDerivation, so I need to specify this here
_stdenvSandboxProfile = binShClosure + libSystemProfile; stdenvSandboxProfile = binShClosure + libSystemProfile;
_extraSandboxProfile = binShClosure + libSystemProfile; extraSandboxProfile = binShClosure + libSystemProfile;
extraAttrs = { inherit platform; }; extraAttrs = { inherit platform; };
overrides = pkgs: (overrides pkgs) // { fetchurl = thisStdenv.fetchurlBoot; }; overrides = pkgs: (overrides pkgs) // { fetchurl = thisStdenv.fetchurlBoot; };
@ -269,8 +269,8 @@ in rec {
export PATH_LOCALE=${pkgs.darwin.locale}/share/locale export PATH_LOCALE=${pkgs.darwin.locale}/share/locale
''; '';
_stdenvSandboxProfile = binShClosure + libSystemProfile; stdenvSandboxProfile = binShClosure + libSystemProfile;
_extraSandboxProfile = binShClosure + libSystemProfile; extraSandboxProfile = binShClosure + libSystemProfile;
initialPath = import ../common-path.nix { inherit pkgs; }; initialPath = import ../common-path.nix { inherit pkgs; };
shell = "${pkgs.bash}/bin/bash"; shell = "${pkgs.bash}/bin/bash";