]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
su: fix "COMMAND not specified" error
authorKarel Zak <kzak@redhat.com>
Wed, 7 Nov 2012 14:20:39 +0000 (15:20 +0100)
committerKarel Zak <kzak@redhat.com>
Wed, 7 Nov 2012 14:20:39 +0000 (15:20 +0100)
 # su
 su: COMMAND not specified

This error message make sense for "runuser -u <user> <command>" only.

Addresses: https://bugzilla.redhat.com/show_bug.cgi?id=872787
Signed-off-by: Karel Zak <kzak@redhat.com>
login-utils/su-common.c

index 1fa76c8205d284010811bfcb7b807844b1a28fc7..5abdc840bedf5e5d00b39bbe8f0d7e6a2ec5491e 100644 (file)
@@ -761,19 +761,28 @@ su_main (int argc, char **argv, int mode)
       ++optind;
     }
 
-  /* if not "-u <user>" specified then fallback to classic su(1) */
-  if (!runuser_user && optind < argc)
-    new_user = argv[optind++];
-  else {
-      /* runuser -u <command> */
-    new_user = runuser_user;
-    if (shell || fast_startup || command || simulate_login) {
-      errx(EXIT_FAILURE,
+  switch (su_mode) {
+  case RUNUSER_MODE:
+    if (runuser_user) {
+      /* runuser -u <user> <command> */
+      new_user = runuser_user;
+      if (shell || fast_startup || command || simulate_login) {
+        errx(EXIT_FAILURE,
           _("options --{shell,fast,command,session-command,login} and "
             "--user are mutually exclusive."));
+      }
+      if (optind == argc)
+        errx(EXIT_FAILURE, _("COMMAND not specified."));
+
+      break;
     }
-    if (optind == argc)
-      errx(EXIT_FAILURE, _("COMMAND not specified."));
+    /* fallthrough if -u <user> is not specified, then follow
+     * traditional su(1) behavior
+     */
+  case SU_MODE:
+    if (optind < argc)
+      new_user = argv[optind++];
+    break;
   }
 
   if ((num_supp_groups || use_gid) && restricted)