|
| 1 | +From 2b8000f1ebd07fd68ee0e3c32737d97bcd1687fb Mon Sep 17 00:00:00 2001 |
| 2 | +From: "Andrew J. Hesford" <ajh@sideband.org> |
| 3 | +Date: Mon, 14 Feb 2022 14:25:22 -0500 |
| 4 | +Subject: [PATCH] chpst: add -C to change working directory |
| 5 | + |
| 6 | +--- |
| 7 | + man/chpst.8 | 8 ++++++++ |
| 8 | + src/chpst.c | 9 +++++++-- |
| 9 | + 2 files changed, 15 insertions(+), 2 deletions(-) |
| 10 | + |
| 11 | +diff --git runit-2.1.2/man/chpst.8 runit-2.1.2/man/chpst.8 |
| 12 | +index 43c0b8d..e0829b6 100644 |
| 13 | +--- runit-2.1.2/man/chpst.8 |
| 14 | ++++ runit-2.1.2/man/chpst.8 |
| 15 | +@@ -146,6 +146,14 @@ Change the root directory to |
| 16 | + before starting |
| 17 | + .IR prog . |
| 18 | + .TP |
| 19 | ++.B \-C \fIpwd |
| 20 | ++chdir. |
| 21 | ++Change the working directory to |
| 22 | ++.I pwd |
| 23 | ++before starting |
| 24 | ++.IR prog . |
| 25 | ++When combined with \-/, the working directory is changed after the chroot. |
| 26 | ++.TP |
| 27 | + .B \-n \fIinc |
| 28 | + nice. |
| 29 | + Add |
| 30 | +diff --git runit-2.1.2/src/chpst.c runit-2.1.2/src/chpst.c |
| 31 | +index 1cca5f4..d597b68 100644 |
| 32 | +--- runit-2.1.2/src/chpst.c |
| 33 | ++++ runit-2.1.2/src/chpst.c |
| 34 | +@@ -20,7 +20,7 @@ |
| 35 | + #include "openreadclose.h" |
| 36 | + #include "direntry.h" |
| 37 | + |
| 38 | +-#define USAGE_MAIN " [-vP012] [-u user[:group]] [-U user[:group]] [-b argv0] [-e dir] [-/ root] [-n nice] [-l|-L lock] [-m n] [-d n] [-o n] [-p n] [-f n] [-c n] prog" |
| 39 | ++#define USAGE_MAIN " [-vP012] [-u user[:group]] [-U user[:group]] [-b argv0] [-e dir] [-/ root] [-C pwd] [-n nice] [-l|-L lock] [-m n] [-d n] [-o n] [-p n] [-f n] [-c n] prog" |
| 40 | + #define FATAL "chpst: fatal: " |
| 41 | + #define WARNING "chpst: warning: " |
| 42 | + |
| 43 | +@@ -60,6 +60,7 @@ long limitt =-2; |
| 44 | + long nicelvl =0; |
| 45 | + const char *lock =0; |
| 46 | + const char *root =0; |
| 47 | ++const char *pwd =0; |
| 48 | + unsigned int lockdelay; |
| 49 | + |
| 50 | + void suidgid(char *user, unsigned int ext) { |
| 51 | +@@ -286,7 +287,7 @@ int main(int argc, const char **argv) { |
| 52 | + if (str_equal(progname, "setlock")) setlock(argc, argv); |
| 53 | + if (str_equal(progname, "softlimit")) softlimit(argc, argv); |
| 54 | + |
| 55 | +- while ((opt =getopt(argc, argv, "u:U:b:e:m:d:o:p:f:c:r:t:/:n:l:L:vP012V")) |
| 56 | ++ while ((opt =getopt(argc, argv, "u:U:b:e:m:d:o:p:f:c:r:t:/:C:n:l:L:vP012V")) |
| 57 | + != opteof) |
| 58 | + switch(opt) { |
| 59 | + case 'u': set_user =(char*)optarg; break; |
| 60 | +@@ -305,6 +306,7 @@ int main(int argc, const char **argv) { |
| 61 | + case 'r': if (optarg[scan_ulong(optarg, &ul)]) usage(); limitr =ul; break; |
| 62 | + case 't': if (optarg[scan_ulong(optarg, &ul)]) usage(); limitt =ul; break; |
| 63 | + case '/': root =optarg; break; |
| 64 | ++ case 'C': pwd =optarg; break; |
| 65 | + case 'n': |
| 66 | + switch (*optarg) { |
| 67 | + case '-': |
| 68 | +@@ -337,6 +339,9 @@ int main(int argc, const char **argv) { |
| 69 | + if (chdir(root) == -1) fatal2("unable to change directory", root); |
| 70 | + if (chroot(".") == -1) fatal("unable to change root directory"); |
| 71 | + } |
| 72 | ++ if (pwd) { |
| 73 | ++ if (chdir(pwd) == -1) fatal2("unable to change directory", pwd); |
| 74 | ++ } |
| 75 | + if (nicelvl) { |
| 76 | + errno =0; |
| 77 | + if (nice(nicelvl) == -1) if (errno) fatal("unable to set nice level"); |
0 commit comments