From eb54864494ffa54418b1f0f0e981b3d202f03c20 Mon Sep 17 00:00:00 2001 From: j-keck Date: Mon, 2 Feb 2015 21:22:06 +0100 Subject: [PATCH 1/3] libcap_progs: fix bash path * in progs/capsh.c is the bash path hardcoded to '/bin/bash' * this fix set's the path to '/var/run/current-system/sw/bin/bash' --- .../linux/libcap/progs-bash-path.patch | 15 +++++++++++++++ pkgs/os-specific/linux/libcap/progs.nix | 2 ++ 2 files changed, 17 insertions(+) create mode 100644 pkgs/os-specific/linux/libcap/progs-bash-path.patch diff --git a/pkgs/os-specific/linux/libcap/progs-bash-path.patch b/pkgs/os-specific/linux/libcap/progs-bash-path.patch new file mode 100644 index 00000000000..359d95400fa --- /dev/null +++ b/pkgs/os-specific/linux/libcap/progs-bash-path.patch @@ -0,0 +1,15 @@ +this patch set the bash path from '/bin/bash' to '/var/run/current-system/sw/bin/bash' + +diff --git a/progs/capsh.c b/progs/capsh.c +index 52336d7..fd98a03 100644 +--- a/progs/capsh.c ++++ b/progs/capsh.c +@@ -556,7 +556,7 @@ int main(int argc, char *argv[], char *envp[]) + } + printf("\n"); + } else if ((!strcmp("--", argv[i])) || (!strcmp("==", argv[i]))) { +- argv[i] = strdup(argv[i][0] == '-' ? "/bin/bash" : argv[0]); ++ argv[i] = strdup(argv[i][0] == '-' ? "/var/run/current-system/sw/bin/bash" : argv[0]); + argv[argc] = NULL; + execve(argv[i], argv+i, envp); + fprintf(stderr, "execve /bin/bash failed!\n"); diff --git a/pkgs/os-specific/linux/libcap/progs.nix b/pkgs/os-specific/linux/libcap/progs.nix index 1902b4acb1a..c287c437958 100644 --- a/pkgs/os-specific/linux/libcap/progs.nix +++ b/pkgs/os-specific/linux/libcap/progs.nix @@ -9,6 +9,8 @@ stdenv.mkDerivation rec { buildInputs = [ libcap ]; + patches = [ ./progs-bash-path.patch ]; + preConfigure = "cd progs"; installFlags = "RAISE_SETFCAP=no"; From 236f7fd20dc1b0c05d94f43c4ef749928e1bee4a Mon Sep 17 00:00:00 2001 From: j-keck Date: Tue, 3 Feb 2015 10:25:16 +0100 Subject: [PATCH 2/3] libcap_progs: fix bash path * in progs/capsh.c is the bash path hardcoded to '/bin/bash'. * this fix set's the bash path from PATH. --- .../linux/libcap/progs-bash-path.patch | 15 --------------- pkgs/os-specific/linux/libcap/progs.nix | 5 ++++- 2 files changed, 4 insertions(+), 16 deletions(-) delete mode 100644 pkgs/os-specific/linux/libcap/progs-bash-path.patch diff --git a/pkgs/os-specific/linux/libcap/progs-bash-path.patch b/pkgs/os-specific/linux/libcap/progs-bash-path.patch deleted file mode 100644 index 359d95400fa..00000000000 --- a/pkgs/os-specific/linux/libcap/progs-bash-path.patch +++ /dev/null @@ -1,15 +0,0 @@ -this patch set the bash path from '/bin/bash' to '/var/run/current-system/sw/bin/bash' - -diff --git a/progs/capsh.c b/progs/capsh.c -index 52336d7..fd98a03 100644 ---- a/progs/capsh.c -+++ b/progs/capsh.c -@@ -556,7 +556,7 @@ int main(int argc, char *argv[], char *envp[]) - } - printf("\n"); - } else if ((!strcmp("--", argv[i])) || (!strcmp("==", argv[i]))) { -- argv[i] = strdup(argv[i][0] == '-' ? "/bin/bash" : argv[0]); -+ argv[i] = strdup(argv[i][0] == '-' ? "/var/run/current-system/sw/bin/bash" : argv[0]); - argv[argc] = NULL; - execve(argv[i], argv+i, envp); - fprintf(stderr, "execve /bin/bash failed!\n"); diff --git a/pkgs/os-specific/linux/libcap/progs.nix b/pkgs/os-specific/linux/libcap/progs.nix index c287c437958..9b2a8b69c3c 100644 --- a/pkgs/os-specific/linux/libcap/progs.nix +++ b/pkgs/os-specific/linux/libcap/progs.nix @@ -9,7 +9,10 @@ stdenv.mkDerivation rec { buildInputs = [ libcap ]; - patches = [ ./progs-bash-path.patch ]; + prePatch = '' + BASH=$(type -tp bash) + substituteInPlace progs/capsh.c --replace "/bin/bash" "$BASH" + ''; preConfigure = "cd progs"; From 73ec7f243f42185c1a6efb526c0c9d3d3732d6c4 Mon Sep 17 00:00:00 2001 From: j-keck Date: Tue, 3 Feb 2015 11:11:17 +0100 Subject: [PATCH 3/3] libcap_progs: fix bash path * in progs/capsh.c is the bash path hardcoded to '/bin/bash'. * this fix removes the absolute path und use 'execvpe' to call 'bash'. --- pkgs/os-specific/linux/libcap/progs.nix | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pkgs/os-specific/linux/libcap/progs.nix b/pkgs/os-specific/linux/libcap/progs.nix index 9b2a8b69c3c..ae4446c82e6 100644 --- a/pkgs/os-specific/linux/libcap/progs.nix +++ b/pkgs/os-specific/linux/libcap/progs.nix @@ -10,8 +10,11 @@ stdenv.mkDerivation rec { buildInputs = [ libcap ]; prePatch = '' - BASH=$(type -tp bash) - substituteInPlace progs/capsh.c --replace "/bin/bash" "$BASH" + # use relative bash path + substituteInPlace progs/capsh.c --replace "/bin/bash" "bash" + + # ensure capsh can find bash in $PATH + substituteInPlace progs/capsh.c --replace execve execvpe ''; preConfigure = "cd progs";