···
(n: v: (if v ? "program" then v else v // {program=n;}))
-
mkWrapper = { program, source ? null, ...}: ''
-
parentWrapperDir=$(dirname ${wrapperDir})
-
gcc -Wall -O2 -DSOURCE_PROG=\"${source}\" -DWRAPPER_DIR=\"$parentWrapperDir\" \
-
-lcap-ng -lcap ${./wrapper.c} -o $out/bin/${program}.wrapper -L ${pkgs.libcap.lib}/lib -L ${pkgs.libcap_ng}/lib \
-
-I ${pkgs.libcap.dev}/include -I ${pkgs.libcap_ng}/include -I ${pkgs.linuxHeaders}/include
-
wrappedPrograms = pkgs.stdenv.mkDerivation {
-
name = "permissions-wrapper";
-
${lib.concatMapStrings mkWrapper programs}
###### Activation script for the setcap wrappers
···
assert (lib.versionAtLeast (lib.getVersion config.boot.kernelPackages.kernel) "4.3");
-
cp ${wrappedPrograms}/bin/${program}.wrapper $wrapperDir/${program}
chmod 0000 $wrapperDir/${program}
···
, permissions ? "u+rx,g+x,o+x"
-
cp ${wrappedPrograms}/bin/${program}.wrapper $wrapperDir/${program}
chmod 0000 $wrapperDir/${program}
···
(n: v: (if v ? "program" then v else v // {program=n;}))
+
mkWrapper = { program, source ? null, ...}:
+
parentWrapperDir=$(dirname ${wrapperDir})
+
gcc -Wall -O2 -DSOURCE_PROG=\"${source}\" -DWRAPPER_DIR=\"$parentWrapperDir\" \
+
-Wformat -Wformat-security -Werror=format-security \
+
-fstack-protector-strong --param ssp-buffer-size=4 \
+
-D_FORTIFY_SOURCE=2 -fPIC \
+
-lcap-ng -lcap ${./wrapper.c} -o $out/bin/${program}.wrapper -L ${pkgs.libcap.lib}/lib -L ${pkgs.libcap_ng}/lib \
+
-I ${pkgs.libcap.dev}/include -I ${pkgs.libcap_ng}/include -I ${pkgs.linuxHeaders}/include
+
in pkgs.stdenv.mkDerivation {
+
name = "${program}-wrapper";
###### Activation script for the setcap wrappers
···
assert (lib.versionAtLeast (lib.getVersion config.boot.kernelPackages.kernel) "4.3");
+
let wrapperDrv = mkWrapper { inherit program source; };
+
cp ${wrapperDrv}/bin/${program}.wrapper $wrapperDir/${program}
chmod 0000 $wrapperDir/${program}
···
, permissions ? "u+rx,g+x,o+x"
+
let wrapperDrv = mkWrapper { inherit program source; };
+
cp ${wrapperDrv}/bin/${program}.wrapper $wrapperDir/${program}
chmod 0000 $wrapperDir/${program}