Merge branch 'master' of git+ssh://vda@busybox.net/var/lib/git/busybox
[oweals/busybox.git] / runit / chpst.c
index 24d1d6e2c81b24129dd4abf976d33864ea0d7c06..21297daf6d5f58099eff6f981c5a15bb26e3d101 100644 (file)
@@ -174,9 +174,9 @@ int chpst_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
 int chpst_main(int argc UNUSED_PARAM, char **argv)
 {
        struct bb_uidgid_t ugid;
-       char *set_user;
-       char *env_user;
-       char *env_dir;
+       char *set_user = set_user; /* for compiler */
+       char *env_user = env_user;
+       char *env_dir = env_dir;
        char *root;
        char *nicestr;
        unsigned limita;
@@ -200,11 +200,11 @@ int chpst_main(int argc UNUSED_PARAM, char **argv)
                // if yes -> getopt converts strings to numbers for us
                opt_complementary = "-1:a+:c+:d+:f+:l+:m+:o+:p+:r+:s+:t+";
                opt = getopt32(argv, "+a:c:d:f:l:m:o:p:r:s:t:u:U:e:"
-                       USE_CHPST("/:n:vP012"),
+                       IF_CHPST("/:n:vP012"),
                        &limita, &limitc, &limitd, &limitf, &limitl,
                        &limitm, &limito, &limitp, &limitr, &limits, &limitt,
                        &set_user, &env_user, &env_dir
-                       USE_CHPST(, &root, &nicestr));
+                       IF_CHPST(, &root, &nicestr));
                argv += optind;
                if (opt & OPT_m) { // -m means -asld
                        limita = limits = limitl = limitd = limitm;
@@ -213,6 +213,8 @@ int chpst_main(int argc UNUSED_PARAM, char **argv)
        } else {
                option_mask32 = opt = 0;
                argv++;
+               if (!*argv)
+                       bb_show_usage();
        }
 
        // envdir?
@@ -222,13 +224,13 @@ int chpst_main(int argc UNUSED_PARAM, char **argv)
        }
 
        // setuidgid?
-       if (ENABLE_SETUIDGID && applet_name[0] == 's') {
+       if (ENABLE_SETUIDGID && applet_name[1] == 'e') {
                set_user = *argv++;
                opt |= OPT_u;
        }
 
        // envuidgid?
-       if (ENABLE_ENVUIDGID && applet_name[0] == 'e') {
+       if (ENABLE_ENVUIDGID && applet_name[0] == 'e' && applet_name[3] == 'u') {
                env_user = *argv++;
                opt |= OPT_U;
        }