diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2004-09-19 00:58:47 +0000 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2004-09-19 00:58:47 +0000 |
commit | 9f5c2a84158f3a50303a77e91d4940ff9880117f (patch) | |
tree | ecadb86a9be33373eee2c48fff175215a44eabde | |
parent | 21b794d06b95741a55094fad73e4221dbbe20988 (diff) | |
download | coreutils-9f5c2a84158f3a50303a77e91d4940ff9880117f.tar.xz |
(main): Reject unknown options instead of
interpreting them as a directory to chroot to.
-rw-r--r-- | src/chroot.c | 18 |
1 files changed, 7 insertions, 11 deletions
diff --git a/src/chroot.c b/src/chroot.c index 37e749c96..565e26940 100644 --- a/src/chroot.c +++ b/src/chroot.c @@ -76,27 +76,22 @@ main (int argc, char **argv) parse_long_options (argc, argv, PROGRAM_NAME, GNU_PACKAGE, VERSION, usage, AUTHORS, (char const *) NULL); - /* The above handles --help and --version. - Since there is no other invocation of getopt, handle `--' here. */ - if (1 < argc && STREQ (argv[1], "--")) - { - --argc; - ++argv; - } + if (getopt_long (argc, argv, "", NULL, NULL) != -1) + usage (EXIT_FAILURE); - if (argc <= 1) + if (argc <= optind) { error (0, 0, _("missing operand")); usage (EXIT_FAIL); } - if (chroot (argv[1])) + if (chroot (argv[optind]) != 0) error (EXIT_FAIL, errno, _("cannot change root directory to %s"), argv[1]); if (chdir ("/")) error (EXIT_FAIL, errno, _("cannot chdir to root directory")); - if (argc == 2) + if (argc == optind + 1) { /* No command. Run an interactive shell. */ char *shell = getenv ("SHELL"); @@ -104,11 +99,12 @@ main (int argc, char **argv) shell = "/bin/sh"; argv[0] = shell; argv[1] = "-i"; + argv[2] = NULL; } else { /* The following arguments give the command. */ - argv += 2; + argv += optind + 1; } /* Execute the given command. */ |