diff options
| -rw-r--r-- | meta/recipes-extended/shadow/files/add_root_cmd_options.patch | 189 |
1 files changed, 98 insertions, 91 deletions
diff --git a/meta/recipes-extended/shadow/files/add_root_cmd_options.patch b/meta/recipes-extended/shadow/files/add_root_cmd_options.patch index c5f2bec56b..5edd3b8744 100644 --- a/meta/recipes-extended/shadow/files/add_root_cmd_options.patch +++ b/meta/recipes-extended/shadow/files/add_root_cmd_options.patch | |||
| @@ -25,9 +25,18 @@ Workaround is specific to our build system. | |||
| 25 | 25 | ||
| 26 | Signed-off-by: Scott Garman <scott.a.garman@intel.com> | 26 | Signed-off-by: Scott Garman <scott.a.garman@intel.com> |
| 27 | 27 | ||
| 28 | 2011-09-29 Fix the parsing of the --root option in gpasswd, useradd, usermod: | ||
| 29 | |||
| 30 | In programs which need to scan the command line in two passes to handle | ||
| 31 | --root option separately from the rest of the arguments, replace the first | ||
| 32 | calls to getopt_long with a simple iteration over the argument list since | ||
| 33 | getopt_long has the bad habit of reordering arguments on the command line. | ||
| 34 | |||
| 35 | Signed-off-by: Julian Pidancet <julian.pidancet@gmail.com> | ||
| 36 | |||
| 28 | diff -urN shadow-4.1.4.3.orig//src/gpasswd.c shadow-4.1.4.3//src/gpasswd.c | 37 | diff -urN shadow-4.1.4.3.orig//src/gpasswd.c shadow-4.1.4.3//src/gpasswd.c |
| 29 | --- shadow-4.1.4.3.orig//src/gpasswd.c 2011-02-13 09:58:16.000000000 -0800 | 38 | --- shadow-4.1.4.3.orig//src/gpasswd.c 2011-09-29 12:00:45.211000091 +0100 |
| 30 | +++ shadow-4.1.4.3//src/gpasswd.c 2011-06-28 15:12:03.539504372 -0700 | 39 | +++ shadow-4.1.4.3//src/gpasswd.c 2011-09-29 12:09:54.590000090 +0100 |
| 31 | @@ -63,6 +63,7 @@ | 40 | @@ -63,6 +63,7 @@ |
| 32 | * (/etc/gshadow present) */ | 41 | * (/etc/gshadow present) */ |
| 33 | static bool is_shadowgrp; | 42 | static bool is_shadowgrp; |
| @@ -52,7 +61,7 @@ diff -urN shadow-4.1.4.3.orig//src/gpasswd.c shadow-4.1.4.3//src/gpasswd.c | |||
| 52 | " -r, --remove-password remove the GROUP's password\n" | 61 | " -r, --remove-password remove the GROUP's password\n" |
| 53 | " -R, --restrict restrict access to GROUP to its members\n" | 62 | " -R, --restrict restrict access to GROUP to its members\n" |
| 54 | " -M, --members USER,... set the list of members of GROUP\n" | 63 | " -M, --members USER,... set the list of members of GROUP\n" |
| 55 | @@ -226,6 +229,55 @@ | 64 | @@ -226,6 +229,57 @@ |
| 56 | } | 65 | } |
| 57 | 66 | ||
| 58 | /* | 67 | /* |
| @@ -68,23 +77,26 @@ diff -urN shadow-4.1.4.3.orig//src/gpasswd.c shadow-4.1.4.3//src/gpasswd.c | |||
| 68 | + /* | 77 | + /* |
| 69 | + * Parse the command line options. | 78 | + * Parse the command line options. |
| 70 | + */ | 79 | + */ |
| 71 | + int flag; | 80 | + int i; |
| 72 | + int option_index = 0; | 81 | + char *root; |
| 73 | + static struct option long_options[] = { | ||
| 74 | + {"root", required_argument, NULL, 'Q'}, | ||
| 75 | + {NULL, 0, NULL, '\0'} | ||
| 76 | + }; | ||
| 77 | + | 82 | + |
| 78 | + while ((flag = getopt_long (argc, argv, "a:A:d:gM:Q:rR", long_options, &option_index)) != -1) { | 83 | + for (i = 0; i < argc; i++) { |
| 79 | + switch (flag) { | 84 | + if (!strcmp (argv[i], "--root") || !strcmp (argv[i], "-Q")) { |
| 80 | + case 'Q': | 85 | + if (i + 1 == argc) { |
| 81 | + if ('/' != optarg[0]) { | 86 | + fprintf (stderr, |
| 87 | + _("%s: option '%s' requires an argument\n"), | ||
| 88 | + Prog, argv[i]); | ||
| 89 | + exit (E_BAD_ARG); | ||
| 90 | + } | ||
| 91 | + root = argv[i + 1]; | ||
| 92 | + | ||
| 93 | + if ('/' != root[0]) { | ||
| 82 | + fprintf (stderr, | 94 | + fprintf (stderr, |
| 83 | + _("%s: invalid chroot path '%s'\n"), | 95 | + _("%s: invalid chroot path '%s'\n"), |
| 84 | + Prog, optarg); | 96 | + Prog, root); |
| 85 | + exit (E_BAD_ARG); | 97 | + exit (E_BAD_ARG); |
| 86 | + } | 98 | + } |
| 87 | + newroot = optarg; | 99 | + newroot = root; |
| 88 | + | 100 | + |
| 89 | + if (access (newroot, F_OK) != 0) { | 101 | + if (access (newroot, F_OK) != 0) { |
| 90 | + fprintf(stderr, | 102 | + fprintf(stderr, |
| @@ -99,7 +111,6 @@ diff -urN shadow-4.1.4.3.orig//src/gpasswd.c shadow-4.1.4.3//src/gpasswd.c | |||
| 99 | + exit (E_BAD_ARG); | 111 | + exit (E_BAD_ARG); |
| 100 | + } | 112 | + } |
| 101 | + break; | 113 | + break; |
| 102 | + /* no-op on everything else - they will be hanled by process_flags() */ | ||
| 103 | + } | 114 | + } |
| 104 | + } | 115 | + } |
| 105 | +} | 116 | +} |
| @@ -108,7 +119,7 @@ diff -urN shadow-4.1.4.3.orig//src/gpasswd.c shadow-4.1.4.3//src/gpasswd.c | |||
| 108 | * process_flags - process the command line options and arguments | 119 | * process_flags - process the command line options and arguments |
| 109 | */ | 120 | */ |
| 110 | static void process_flags (int argc, char **argv) | 121 | static void process_flags (int argc, char **argv) |
| 111 | @@ -235,6 +287,7 @@ | 122 | @@ -235,6 +289,7 @@ |
| 112 | static struct option long_options[] = { | 123 | static struct option long_options[] = { |
| 113 | {"add", required_argument, NULL, 'a'}, | 124 | {"add", required_argument, NULL, 'a'}, |
| 114 | {"delete", required_argument, NULL, 'd'}, | 125 | {"delete", required_argument, NULL, 'd'}, |
| @@ -116,7 +127,7 @@ diff -urN shadow-4.1.4.3.orig//src/gpasswd.c shadow-4.1.4.3//src/gpasswd.c | |||
| 116 | {"remove-password", no_argument, NULL, 'r'}, | 127 | {"remove-password", no_argument, NULL, 'r'}, |
| 117 | {"restrict", no_argument, NULL, 'R'}, | 128 | {"restrict", no_argument, NULL, 'R'}, |
| 118 | {"administrators", required_argument, NULL, 'A'}, | 129 | {"administrators", required_argument, NULL, 'A'}, |
| 119 | @@ -242,7 +295,7 @@ | 130 | @@ -242,7 +297,7 @@ |
| 120 | {NULL, 0, NULL, '\0'} | 131 | {NULL, 0, NULL, '\0'} |
| 121 | }; | 132 | }; |
| 122 | 133 | ||
| @@ -125,7 +136,7 @@ diff -urN shadow-4.1.4.3.orig//src/gpasswd.c shadow-4.1.4.3//src/gpasswd.c | |||
| 125 | switch (flag) { | 136 | switch (flag) { |
| 126 | case 'a': /* add a user */ | 137 | case 'a': /* add a user */ |
| 127 | aflg = true; | 138 | aflg = true; |
| 128 | @@ -283,6 +336,9 @@ | 139 | @@ -283,6 +338,9 @@ |
| 129 | } | 140 | } |
| 130 | Mflg = true; | 141 | Mflg = true; |
| 131 | break; | 142 | break; |
| @@ -135,7 +146,7 @@ diff -urN shadow-4.1.4.3.orig//src/gpasswd.c shadow-4.1.4.3//src/gpasswd.c | |||
| 135 | case 'r': /* remove group password */ | 146 | case 'r': /* remove group password */ |
| 136 | rflg = true; | 147 | rflg = true; |
| 137 | break; | 148 | break; |
| 138 | @@ -995,6 +1051,8 @@ | 149 | @@ -995,6 +1053,8 @@ |
| 139 | setbuf (stdout, NULL); | 150 | setbuf (stdout, NULL); |
| 140 | setbuf (stderr, NULL); | 151 | setbuf (stderr, NULL); |
| 141 | 152 | ||
| @@ -145,8 +156,8 @@ diff -urN shadow-4.1.4.3.orig//src/gpasswd.c shadow-4.1.4.3//src/gpasswd.c | |||
| 145 | is_shadowgrp = sgr_file_present (); | 156 | is_shadowgrp = sgr_file_present (); |
| 146 | #endif | 157 | #endif |
| 147 | diff -urN shadow-4.1.4.3.orig//src/groupadd.c shadow-4.1.4.3//src/groupadd.c | 158 | diff -urN shadow-4.1.4.3.orig//src/groupadd.c shadow-4.1.4.3//src/groupadd.c |
| 148 | --- shadow-4.1.4.3.orig//src/groupadd.c 2011-02-13 09:58:16.000000000 -0800 | 159 | --- shadow-4.1.4.3.orig//src/groupadd.c 2011-09-29 12:00:45.212000091 +0100 |
| 149 | +++ shadow-4.1.4.3//src/groupadd.c 2011-06-28 15:12:03.539504372 -0700 | 160 | +++ shadow-4.1.4.3//src/groupadd.c 2011-09-29 11:59:28.386000092 +0100 |
| 150 | @@ -76,6 +76,7 @@ | 161 | @@ -76,6 +76,7 @@ |
| 151 | static gid_t group_id; | 162 | static gid_t group_id; |
| 152 | static /*@null@*/char *group_passwd; | 163 | static /*@null@*/char *group_passwd; |
| @@ -208,8 +219,8 @@ diff -urN shadow-4.1.4.3.orig//src/groupadd.c shadow-4.1.4.3//src/groupadd.c | |||
| 208 | rflg = true; | 219 | rflg = true; |
| 209 | break; | 220 | break; |
| 210 | diff -urN shadow-4.1.4.3.orig//src/groupdel.c shadow-4.1.4.3//src/groupdel.c | 221 | diff -urN shadow-4.1.4.3.orig//src/groupdel.c shadow-4.1.4.3//src/groupdel.c |
| 211 | --- shadow-4.1.4.3.orig//src/groupdel.c 2011-02-13 09:58:16.000000000 -0800 | 222 | --- shadow-4.1.4.3.orig//src/groupdel.c 2011-09-29 12:00:45.212000091 +0100 |
| 212 | +++ shadow-4.1.4.3//src/groupdel.c 2011-06-28 15:12:03.539504372 -0700 | 223 | +++ shadow-4.1.4.3//src/groupdel.c 2011-09-29 11:59:28.386000092 +0100 |
| 213 | @@ -36,6 +36,7 @@ | 224 | @@ -36,6 +36,7 @@ |
| 214 | 225 | ||
| 215 | #include <ctype.h> | 226 | #include <ctype.h> |
| @@ -340,8 +351,8 @@ diff -urN shadow-4.1.4.3.orig//src/groupdel.c shadow-4.1.4.3//src/groupdel.c | |||
| 340 | #ifdef USE_PAM | 351 | #ifdef USE_PAM |
| 341 | { | 352 | { |
| 342 | diff -urN shadow-4.1.4.3.orig//src/groupmod.c shadow-4.1.4.3//src/groupmod.c | 353 | diff -urN shadow-4.1.4.3.orig//src/groupmod.c shadow-4.1.4.3//src/groupmod.c |
| 343 | --- shadow-4.1.4.3.orig//src/groupmod.c 2011-02-13 09:58:16.000000000 -0800 | 354 | --- shadow-4.1.4.3.orig//src/groupmod.c 2011-09-29 12:00:45.212000091 +0100 |
| 344 | +++ shadow-4.1.4.3//src/groupmod.c 2011-06-28 15:12:03.539504372 -0700 | 355 | +++ shadow-4.1.4.3//src/groupmod.c 2011-09-29 11:59:28.387000092 +0100 |
| 345 | @@ -79,6 +79,7 @@ | 356 | @@ -79,6 +79,7 @@ |
| 346 | static char *group_passwd; | 357 | static char *group_passwd; |
| 347 | static gid_t group_id; | 358 | static gid_t group_id; |
| @@ -401,8 +412,8 @@ diff -urN shadow-4.1.4.3.orig//src/groupmod.c shadow-4.1.4.3//src/groupmod.c | |||
| 401 | usage (); | 412 | usage (); |
| 402 | } | 413 | } |
| 403 | diff -urN shadow-4.1.4.3.orig//src/grpconv.c shadow-4.1.4.3//src/grpconv.c | 414 | diff -urN shadow-4.1.4.3.orig//src/grpconv.c shadow-4.1.4.3//src/grpconv.c |
| 404 | --- shadow-4.1.4.3.orig//src/grpconv.c 2011-02-13 09:58:16.000000000 -0800 | 415 | --- shadow-4.1.4.3.orig//src/grpconv.c 2011-09-29 12:00:45.213000091 +0100 |
| 405 | +++ shadow-4.1.4.3//src/grpconv.c 2011-06-28 15:12:03.539504372 -0700 | 416 | +++ shadow-4.1.4.3//src/grpconv.c 2011-09-29 11:59:28.387000092 +0100 |
| 406 | @@ -39,6 +39,7 @@ | 417 | @@ -39,6 +39,7 @@ |
| 407 | 418 | ||
| 408 | #include <errno.h> | 419 | #include <errno.h> |
| @@ -527,8 +538,8 @@ diff -urN shadow-4.1.4.3.orig//src/grpconv.c shadow-4.1.4.3//src/grpconv.c | |||
| 527 | fprintf (stderr, | 538 | fprintf (stderr, |
| 528 | _("%s: cannot lock %s; try again later.\n"), | 539 | _("%s: cannot lock %s; try again later.\n"), |
| 529 | diff -urN shadow-4.1.4.3.orig//src/grpunconv.c shadow-4.1.4.3//src/grpunconv.c | 540 | diff -urN shadow-4.1.4.3.orig//src/grpunconv.c shadow-4.1.4.3//src/grpunconv.c |
| 530 | --- shadow-4.1.4.3.orig//src/grpunconv.c 2011-02-13 09:58:16.000000000 -0800 | 541 | --- shadow-4.1.4.3.orig//src/grpunconv.c 2011-09-29 12:00:45.213000091 +0100 |
| 531 | +++ shadow-4.1.4.3//src/grpunconv.c 2011-06-28 15:12:03.539504372 -0700 | 542 | +++ shadow-4.1.4.3//src/grpunconv.c 2011-09-29 11:59:28.387000092 +0100 |
| 532 | @@ -43,6 +43,7 @@ | 543 | @@ -43,6 +43,7 @@ |
| 533 | #include <stdlib.h> | 544 | #include <stdlib.h> |
| 534 | #include <string.h> | 545 | #include <string.h> |
| @@ -653,8 +664,8 @@ diff -urN shadow-4.1.4.3.orig//src/grpunconv.c shadow-4.1.4.3//src/grpunconv.c | |||
| 653 | exit (0); /* no /etc/gshadow, nothing to do */ | 664 | exit (0); /* no /etc/gshadow, nothing to do */ |
| 654 | } | 665 | } |
| 655 | diff -urN shadow-4.1.4.3.orig//src/passwd.c shadow-4.1.4.3//src/passwd.c | 666 | diff -urN shadow-4.1.4.3.orig//src/passwd.c shadow-4.1.4.3//src/passwd.c |
| 656 | --- shadow-4.1.4.3.orig//src/passwd.c 2011-02-13 09:58:16.000000000 -0800 | 667 | --- shadow-4.1.4.3.orig//src/passwd.c 2011-09-29 12:00:45.214000091 +0100 |
| 657 | +++ shadow-4.1.4.3//src/passwd.c 2011-06-28 15:12:03.539504372 -0700 | 668 | +++ shadow-4.1.4.3//src/passwd.c 2011-09-29 11:59:28.388000092 +0100 |
| 658 | @@ -75,6 +75,7 @@ | 669 | @@ -75,6 +75,7 @@ |
| 659 | static char *name; /* The name of user whose password is being changed */ | 670 | static char *name; /* The name of user whose password is being changed */ |
| 660 | static char *myname; /* The current user's name */ | 671 | static char *myname; /* The current user's name */ |
| @@ -718,8 +729,8 @@ diff -urN shadow-4.1.4.3.orig//src/passwd.c shadow-4.1.4.3//src/passwd.c | |||
| 718 | /* -r repository (files|nis|nisplus) */ | 729 | /* -r repository (files|nis|nisplus) */ |
| 719 | /* only "files" supported for now */ | 730 | /* only "files" supported for now */ |
| 720 | diff -urN shadow-4.1.4.3.orig//src/pwconv.c shadow-4.1.4.3//src/pwconv.c | 731 | diff -urN shadow-4.1.4.3.orig//src/pwconv.c shadow-4.1.4.3//src/pwconv.c |
| 721 | --- shadow-4.1.4.3.orig//src/pwconv.c 2011-02-13 09:58:16.000000000 -0800 | 732 | --- shadow-4.1.4.3.orig//src/pwconv.c 2011-09-29 12:00:45.214000091 +0100 |
| 722 | +++ shadow-4.1.4.3//src/pwconv.c 2011-06-28 15:12:03.539504372 -0700 | 733 | +++ shadow-4.1.4.3//src/pwconv.c 2011-09-29 11:59:28.388000092 +0100 |
| 723 | @@ -59,6 +59,7 @@ | 734 | @@ -59,6 +59,7 @@ |
| 724 | 735 | ||
| 725 | #include <errno.h> | 736 | #include <errno.h> |
| @@ -847,8 +858,8 @@ diff -urN shadow-4.1.4.3.orig//src/pwconv.c shadow-4.1.4.3//src/pwconv.c | |||
| 847 | fprintf (stderr, | 858 | fprintf (stderr, |
| 848 | _("%s: cannot lock %s; try again later.\n"), | 859 | _("%s: cannot lock %s; try again later.\n"), |
| 849 | diff -urN shadow-4.1.4.3.orig//src/pwunconv.c shadow-4.1.4.3//src/pwunconv.c | 860 | diff -urN shadow-4.1.4.3.orig//src/pwunconv.c shadow-4.1.4.3//src/pwunconv.c |
| 850 | --- shadow-4.1.4.3.orig//src/pwunconv.c 2011-02-13 09:58:16.000000000 -0800 | 861 | --- shadow-4.1.4.3.orig//src/pwunconv.c 2011-09-29 12:00:45.214000091 +0100 |
| 851 | +++ shadow-4.1.4.3//src/pwunconv.c 2011-06-28 15:12:03.539504372 -0700 | 862 | +++ shadow-4.1.4.3//src/pwunconv.c 2011-09-29 11:59:28.388000092 +0100 |
| 852 | @@ -35,6 +35,7 @@ | 863 | @@ -35,6 +35,7 @@ |
| 853 | #ident "$Id: pwunconv.c 2852 2009-04-30 21:44:35Z nekral-guest $" | 864 | #ident "$Id: pwunconv.c 2852 2009-04-30 21:44:35Z nekral-guest $" |
| 854 | 865 | ||
| @@ -969,8 +980,8 @@ diff -urN shadow-4.1.4.3.orig//src/pwunconv.c shadow-4.1.4.3//src/pwunconv.c | |||
| 969 | /* shadow not installed, do nothing */ | 980 | /* shadow not installed, do nothing */ |
| 970 | exit (0); | 981 | exit (0); |
| 971 | diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c | 982 | diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c |
| 972 | --- shadow-4.1.4.3.orig//src/useradd.c 2011-02-13 09:58:16.000000000 -0800 | 983 | --- shadow-4.1.4.3.orig//src/useradd.c 2011-09-29 12:00:45.215000091 +0100 |
| 973 | +++ shadow-4.1.4.3//src/useradd.c 2011-06-28 15:12:14.608787030 -0700 | 984 | +++ shadow-4.1.4.3//src/useradd.c 2011-09-29 11:59:28.520000092 +0100 |
| 974 | @@ -112,6 +112,7 @@ | 985 | @@ -112,6 +112,7 @@ |
| 975 | #ifdef WITH_SELINUX | 986 | #ifdef WITH_SELINUX |
| 976 | static const char *user_selinux = ""; | 987 | static const char *user_selinux = ""; |
| @@ -995,7 +1006,7 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c | |||
| 995 | (void) fputs (_(" -r, --system create a system account\n"), stderr); | 1006 | (void) fputs (_(" -r, --system create a system account\n"), stderr); |
| 996 | (void) fputs (_(" -s, --shell SHELL login shell of the new account\n"), stderr); | 1007 | (void) fputs (_(" -s, --shell SHELL login shell of the new account\n"), stderr); |
| 997 | (void) fputs (_(" -u, --uid UID user ID of the new account\n"), stderr); | 1008 | (void) fputs (_(" -u, --uid UID user ID of the new account\n"), stderr); |
| 998 | @@ -943,6 +946,59 @@ | 1009 | @@ -943,6 +946,57 @@ |
| 999 | } | 1010 | } |
| 1000 | 1011 | ||
| 1001 | /* | 1012 | /* |
| @@ -1011,27 +1022,26 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c | |||
| 1011 | + /* | 1022 | + /* |
| 1012 | + * Parse the command line options. | 1023 | + * Parse the command line options. |
| 1013 | + */ | 1024 | + */ |
| 1014 | + int c; | 1025 | + int i; |
| 1015 | + static struct option long_options[] = { | 1026 | + char *root; |
| 1016 | + {"root", required_argument, NULL, 'R'}, | 1027 | + |
| 1017 | + {NULL, 0, NULL, '\0'} | 1028 | + for (i = 0; i < argc; i++) { |
| 1018 | + }; | 1029 | + if (!strcmp (argv[i], "--root") || !strcmp (argv[i], "-R")) { |
| 1019 | + while ((c = getopt_long (argc, argv, | 1030 | + if (i + 1 == argc) { |
| 1020 | +#ifdef WITH_SELINUX | 1031 | + fprintf (stderr, |
| 1021 | + "b:c:d:De:f:g:G:k:K:lmMNop:R:rs:u:UZ:", | 1032 | + _("%s: option '%s' requires an argument\n"), |
| 1022 | +#else | 1033 | + Prog, argv[i]); |
| 1023 | + "b:c:d:De:f:g:G:k:K:lmMNop:R:rs:u:U", | 1034 | + exit (E_BAD_ARG); |
| 1024 | +#endif | 1035 | + } |
| 1025 | + long_options, NULL)) != -1) { | 1036 | + root = argv[i + 1]; |
| 1026 | + switch (c) { | 1037 | + |
| 1027 | + case 'R': | 1038 | + if ('/' != root[0]) { |
| 1028 | + if ('/' != optarg[0]) { | ||
| 1029 | + fprintf (stderr, | 1039 | + fprintf (stderr, |
| 1030 | + _("%s: invalid chroot path '%s'\n"), | 1040 | + _("%s: invalid chroot path '%s'\n"), |
| 1031 | + Prog, optarg); | 1041 | + Prog, root); |
| 1032 | + exit (E_BAD_ARG); | 1042 | + exit (E_BAD_ARG); |
| 1033 | + } | 1043 | + } |
| 1034 | + newroot = optarg; | 1044 | + newroot = root; |
| 1035 | + | 1045 | + |
| 1036 | + if (access (newroot, F_OK) != 0) { | 1046 | + if (access (newroot, F_OK) != 0) { |
| 1037 | + fprintf(stderr, | 1047 | + fprintf(stderr, |
| @@ -1046,7 +1056,6 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c | |||
| 1046 | + exit (E_BAD_ARG); | 1056 | + exit (E_BAD_ARG); |
| 1047 | + } | 1057 | + } |
| 1048 | + break; | 1058 | + break; |
| 1049 | + /* no-op on everything else - they will be hanled by process_flags() */ | ||
| 1050 | + } | 1059 | + } |
| 1051 | + } | 1060 | + } |
| 1052 | +} | 1061 | +} |
| @@ -1055,7 +1064,7 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c | |||
| 1055 | * process_flags - perform command line argument setting | 1064 | * process_flags - perform command line argument setting |
| 1056 | * | 1065 | * |
| 1057 | * process_flags() interprets the command line arguments and sets | 1066 | * process_flags() interprets the command line arguments and sets |
| 1058 | @@ -978,6 +1034,7 @@ | 1067 | @@ -978,6 +1032,7 @@ |
| 1059 | {"no-user-group", no_argument, NULL, 'N'}, | 1068 | {"no-user-group", no_argument, NULL, 'N'}, |
| 1060 | {"non-unique", no_argument, NULL, 'o'}, | 1069 | {"non-unique", no_argument, NULL, 'o'}, |
| 1061 | {"password", required_argument, NULL, 'p'}, | 1070 | {"password", required_argument, NULL, 'p'}, |
| @@ -1063,7 +1072,7 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c | |||
| 1063 | {"system", no_argument, NULL, 'r'}, | 1072 | {"system", no_argument, NULL, 'r'}, |
| 1064 | {"shell", required_argument, NULL, 's'}, | 1073 | {"shell", required_argument, NULL, 's'}, |
| 1065 | #ifdef WITH_SELINUX | 1074 | #ifdef WITH_SELINUX |
| 1066 | @@ -989,9 +1046,9 @@ | 1075 | @@ -989,9 +1044,9 @@ |
| 1067 | }; | 1076 | }; |
| 1068 | while ((c = getopt_long (argc, argv, | 1077 | while ((c = getopt_long (argc, argv, |
| 1069 | #ifdef WITH_SELINUX | 1078 | #ifdef WITH_SELINUX |
| @@ -1075,7 +1084,7 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c | |||
| 1075 | #endif | 1084 | #endif |
| 1076 | long_options, NULL)) != -1) { | 1085 | long_options, NULL)) != -1) { |
| 1077 | switch (c) { | 1086 | switch (c) { |
| 1078 | @@ -1156,6 +1213,9 @@ | 1087 | @@ -1156,6 +1211,9 @@ |
| 1079 | } | 1088 | } |
| 1080 | user_pass = optarg; | 1089 | user_pass = optarg; |
| 1081 | break; | 1090 | break; |
| @@ -1085,7 +1094,7 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c | |||
| 1085 | case 'r': | 1094 | case 'r': |
| 1086 | rflg = true; | 1095 | rflg = true; |
| 1087 | break; | 1096 | break; |
| 1088 | @@ -1735,6 +1795,36 @@ | 1097 | @@ -1735,6 +1793,36 @@ |
| 1089 | } | 1098 | } |
| 1090 | } | 1099 | } |
| 1091 | #endif | 1100 | #endif |
| @@ -1122,7 +1131,7 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c | |||
| 1122 | /* | 1131 | /* |
| 1123 | * create_home - create the user's home directory | 1132 | * create_home - create the user's home directory |
| 1124 | * | 1133 | * |
| 1125 | @@ -1748,34 +1838,31 @@ | 1134 | @@ -1748,34 +1836,31 @@ |
| 1126 | #ifdef WITH_SELINUX | 1135 | #ifdef WITH_SELINUX |
| 1127 | selinux_file_context (user_home); | 1136 | selinux_file_context (user_home); |
| 1128 | #endif | 1137 | #endif |
| @@ -1175,7 +1184,7 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c | |||
| 1175 | } | 1184 | } |
| 1176 | 1185 | ||
| 1177 | /* | 1186 | /* |
| 1178 | @@ -1861,6 +1948,7 @@ | 1187 | @@ -1861,6 +1946,7 @@ |
| 1179 | */ | 1188 | */ |
| 1180 | user_groups[0] = (char *) 0; | 1189 | user_groups[0] = (char *) 0; |
| 1181 | 1190 | ||
| @@ -1184,8 +1193,8 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c | |||
| 1184 | is_shadow_pwd = spw_file_present (); | 1193 | is_shadow_pwd = spw_file_present (); |
| 1185 | #ifdef SHADOWGRP | 1194 | #ifdef SHADOWGRP |
| 1186 | diff -urN shadow-4.1.4.3.orig//src/userdel.c shadow-4.1.4.3//src/userdel.c | 1195 | diff -urN shadow-4.1.4.3.orig//src/userdel.c shadow-4.1.4.3//src/userdel.c |
| 1187 | --- shadow-4.1.4.3.orig//src/userdel.c 2011-02-13 09:58:16.000000000 -0800 | 1196 | --- shadow-4.1.4.3.orig//src/userdel.c 2011-09-29 12:00:45.216000091 +0100 |
| 1188 | +++ shadow-4.1.4.3//src/userdel.c 2011-06-28 15:12:03.549503721 -0700 | 1197 | +++ shadow-4.1.4.3//src/userdel.c 2011-09-29 11:59:28.389000092 +0100 |
| 1189 | @@ -79,6 +79,7 @@ | 1198 | @@ -79,6 +79,7 @@ |
| 1190 | static char *user_name; | 1199 | static char *user_name; |
| 1191 | static uid_t user_id; | 1200 | static uid_t user_id; |
| @@ -1239,8 +1248,8 @@ diff -urN shadow-4.1.4.3.orig//src/userdel.c shadow-4.1.4.3//src/userdel.c | |||
| 1239 | rflg = true; | 1248 | rflg = true; |
| 1240 | break; | 1249 | break; |
| 1241 | diff -urN shadow-4.1.4.3.orig//src/usermod.c shadow-4.1.4.3//src/usermod.c | 1250 | diff -urN shadow-4.1.4.3.orig//src/usermod.c shadow-4.1.4.3//src/usermod.c |
| 1242 | --- shadow-4.1.4.3.orig//src/usermod.c 2011-02-13 09:58:16.000000000 -0800 | 1251 | --- shadow-4.1.4.3.orig//src/usermod.c 2011-09-29 12:00:45.216000091 +0100 |
| 1243 | +++ shadow-4.1.4.3//src/usermod.c 2011-06-28 15:12:03.549503721 -0700 | 1252 | +++ shadow-4.1.4.3//src/usermod.c 2011-09-29 11:59:28.390000092 +0100 |
| 1244 | @@ -110,6 +110,7 @@ | 1253 | @@ -110,6 +110,7 @@ |
| 1245 | static long user_newinactive; | 1254 | static long user_newinactive; |
| 1246 | static long sys_ngroups; | 1255 | static long sys_ngroups; |
| @@ -1265,7 +1274,7 @@ diff -urN shadow-4.1.4.3.orig//src/usermod.c shadow-4.1.4.3//src/usermod.c | |||
| 1265 | " -s, --shell SHELL new login shell for the user account\n" | 1274 | " -s, --shell SHELL new login shell for the user account\n" |
| 1266 | " -u, --uid UID new UID for the user account\n" | 1275 | " -u, --uid UID new UID for the user account\n" |
| 1267 | " -U, --unlock unlock the user account\n" | 1276 | " -U, --unlock unlock the user account\n" |
| 1268 | @@ -802,6 +805,60 @@ | 1277 | @@ -802,6 +805,58 @@ |
| 1269 | } | 1278 | } |
| 1270 | 1279 | ||
| 1271 | /* | 1280 | /* |
| @@ -1281,28 +1290,27 @@ diff -urN shadow-4.1.4.3.orig//src/usermod.c shadow-4.1.4.3//src/usermod.c | |||
| 1281 | + /* | 1290 | + /* |
| 1282 | + * Parse the command line options. | 1291 | + * Parse the command line options. |
| 1283 | + */ | 1292 | + */ |
| 1284 | + int c; | 1293 | + int i; |
| 1285 | + static struct option long_options[] = { | 1294 | + char *root; |
| 1286 | + {"root", required_argument, NULL, 'R'}, | 1295 | + |
| 1287 | + {NULL, 0, NULL, '\0'} | 1296 | + for (i = 0; i < argc; i++) { |
| 1288 | + }; | 1297 | + if (!strcmp (argv[i], "--root") || !strcmp (argv[i], "-R")) { |
| 1289 | + while ((c = getopt_long (argc, argv, | 1298 | + if (i + 1 == argc) { |
| 1290 | +#ifdef WITH_SELINUX | 1299 | + fprintf (stderr, |
| 1291 | + "ac:d:e:f:g:G:hl:Lmop:R:s:u:UZ:", | 1300 | + _("%s: option '%s' requires an argument\n"), |
| 1292 | +#else | 1301 | + Prog, argv[i]); |
| 1293 | + "ac:d:e:f:g:G:hl:Lmop:R:s:u:U", | 1302 | + exit (E_BAD_ARG); |
| 1294 | +#endif | 1303 | + } |
| 1295 | + long_options, NULL)) != -1) { | 1304 | + root = argv[i + 1]; |
| 1296 | + switch (c) { | 1305 | + |
| 1297 | + case 'R': | 1306 | + if ( (!VALID (root) ) |
| 1298 | + if ( (!VALID (optarg) ) | 1307 | + || ( ('/' != root[0]) ) ) { |
| 1299 | + || ( ('/' != optarg[0]) ) ) { | ||
| 1300 | + fprintf (stderr, | 1308 | + fprintf (stderr, |
| 1301 | + _("%s: invalid chroot path '%s'\n"), | 1309 | + _("%s: invalid chroot path '%s'\n"), |
| 1302 | + Prog, optarg); | 1310 | + Prog, root); |
| 1303 | + exit (E_BAD_ARG); | 1311 | + exit (E_BAD_ARG); |
| 1304 | + } | 1312 | + } |
| 1305 | + newroot = optarg; | 1313 | + newroot = root; |
| 1306 | + | 1314 | + |
| 1307 | + if (access (newroot, F_OK) != 0) { | 1315 | + if (access (newroot, F_OK) != 0) { |
| 1308 | + fprintf(stderr, | 1316 | + fprintf(stderr, |
| @@ -1317,7 +1325,6 @@ diff -urN shadow-4.1.4.3.orig//src/usermod.c shadow-4.1.4.3//src/usermod.c | |||
| 1317 | + exit (E_BAD_ARG); | 1325 | + exit (E_BAD_ARG); |
| 1318 | + } | 1326 | + } |
| 1319 | + break; | 1327 | + break; |
| 1320 | + /* no-op on everything else - they will be hanled by process_flags() */ | ||
| 1321 | + } | 1328 | + } |
| 1322 | + } | 1329 | + } |
| 1323 | +} | 1330 | +} |
| @@ -1326,7 +1333,7 @@ diff -urN shadow-4.1.4.3.orig//src/usermod.c shadow-4.1.4.3//src/usermod.c | |||
| 1326 | * process_flags - perform command line argument setting | 1333 | * process_flags - perform command line argument setting |
| 1327 | * | 1334 | * |
| 1328 | * process_flags() interprets the command line arguments and sets the | 1335 | * process_flags() interprets the command line arguments and sets the |
| 1329 | @@ -895,6 +952,7 @@ | 1336 | @@ -895,6 +950,7 @@ |
| 1330 | {"move-home", no_argument, NULL, 'm'}, | 1337 | {"move-home", no_argument, NULL, 'm'}, |
| 1331 | {"non-unique", no_argument, NULL, 'o'}, | 1338 | {"non-unique", no_argument, NULL, 'o'}, |
| 1332 | {"password", required_argument, NULL, 'p'}, | 1339 | {"password", required_argument, NULL, 'p'}, |
| @@ -1334,7 +1341,7 @@ diff -urN shadow-4.1.4.3.orig//src/usermod.c shadow-4.1.4.3//src/usermod.c | |||
| 1334 | #ifdef WITH_SELINUX | 1341 | #ifdef WITH_SELINUX |
| 1335 | {"selinux-user", required_argument, NULL, 'Z'}, | 1342 | {"selinux-user", required_argument, NULL, 'Z'}, |
| 1336 | #endif | 1343 | #endif |
| 1337 | @@ -905,9 +963,9 @@ | 1344 | @@ -905,9 +961,9 @@ |
| 1338 | }; | 1345 | }; |
| 1339 | while ((c = getopt_long (argc, argv, | 1346 | while ((c = getopt_long (argc, argv, |
| 1340 | #ifdef WITH_SELINUX | 1347 | #ifdef WITH_SELINUX |
| @@ -1346,7 +1353,7 @@ diff -urN shadow-4.1.4.3.orig//src/usermod.c shadow-4.1.4.3//src/usermod.c | |||
| 1346 | #endif | 1353 | #endif |
| 1347 | long_options, NULL)) != -1) { | 1354 | long_options, NULL)) != -1) { |
| 1348 | switch (c) { | 1355 | switch (c) { |
| 1349 | @@ -999,6 +1057,9 @@ | 1356 | @@ -999,6 +1055,9 @@ |
| 1350 | user_pass = optarg; | 1357 | user_pass = optarg; |
| 1351 | pflg = true; | 1358 | pflg = true; |
| 1352 | break; | 1359 | break; |
| @@ -1356,7 +1363,7 @@ diff -urN shadow-4.1.4.3.orig//src/usermod.c shadow-4.1.4.3//src/usermod.c | |||
| 1356 | case 's': | 1363 | case 's': |
| 1357 | if (!VALID (optarg)) { | 1364 | if (!VALID (optarg)) { |
| 1358 | fprintf (stderr, | 1365 | fprintf (stderr, |
| 1359 | @@ -1715,6 +1776,8 @@ | 1366 | @@ -1715,6 +1774,8 @@ |
| 1360 | 1367 | ||
| 1361 | OPENLOG ("usermod"); | 1368 | OPENLOG ("usermod"); |
| 1362 | 1369 | ||
