[OE-core] [PATCH v2 1/2] Fix the --root option in shadow-native programs.

Saul Wold saul.wold at intel.com
Mon Oct 3 17:38:15 UTC 2011


On 09/30/2011 05:10 PM, Julian Pidancet wrote:
> The add_root_cmd_options.patch that we apply to shadow-native allow the
> various programs from the shadow utility package to chroot() so they can
> be used to modify etc/passwd and etc/group if they are located in a
> sysroot.
>
> Some of the shadow programs (gpasswd, useradd and usermod) need to parse
> the command line in two passes. But we can't use getopt_long() twice
> because getopt_long() reorders the command line arguments, and
> consequently corrupts the option parsing during the second pass.
>
> This patch fixes this issue by replacing the first pass by a very simple
> manual walk of the command line to handle the --root argument.
>
> This change is a patch of another patch, I apologize if it is
> difficult to read. But IMHO it wouldn't make sense to put the patch for
> this issue in another separated file.
>
> The --root options in groupadd and useradd are needed to make the
> useradd class work, and this issue was preventing to use useradd and
> groupadd long options while using the class.
>
> Signed-off-by: Julian Pidancet<julian.pidancet at gmail.com>
> ---
>   .../shadow/files/add_root_cmd_options.patch        |  180 ++++++++++----------
>   1 files changed, 89 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 c5f2bec..2604ad8 100644
> --- a/meta/recipes-extended/shadow/files/add_root_cmd_options.patch
> +++ b/meta/recipes-extended/shadow/files/add_root_cmd_options.patch
> @@ -26,8 +26,8 @@ Workaround is specific to our build system.
>   Signed-off-by: Scott Garman<scott.a.garman at intel.com>
>
Julian,

Since you modified this patch, it would be helpful to explain what you 
did in the patch itself and add an Signed-off-by line.

Thanks
	Sau!

>   diff -urN shadow-4.1.4.3.orig//src/gpasswd.c shadow-4.1.4.3//src/gpasswd.c
> ---- shadow-4.1.4.3.orig//src/gpasswd.c	2011-02-13 09:58:16.000000000 -0800
> -+++ shadow-4.1.4.3//src/gpasswd.c	2011-06-28 15:12:03.539504372 -0700
> +--- shadow-4.1.4.3.orig//src/gpasswd.c	2011-09-29 12:00:45.211000091 +0100
> ++++ shadow-4.1.4.3//src/gpasswd.c	2011-09-29 12:09:54.590000090 +0100
>   @@ -63,6 +63,7 @@
>     * (/etc/gshadow present) */
>    static bool is_shadowgrp;
> @@ -52,7 +52,7 @@ diff -urN shadow-4.1.4.3.orig//src/gpasswd.c shadow-4.1.4.3//src/gpasswd.c
>    	           "  -r, --remove-password         remove the GROUP's password\n"
>    	           "  -R, --restrict                restrict access to GROUP to its members\n"
>    	           "  -M, --members USER,...        set the list of members of GROUP\n"
> -@@ -226,6 +229,55 @@
> +@@ -226,6 +229,57 @@
>    }
>
>    /*
> @@ -68,23 +68,26 @@ diff -urN shadow-4.1.4.3.orig//src/gpasswd.c shadow-4.1.4.3//src/gpasswd.c
>   +	/*
>   +	 * Parse the command line options.
>   +	 */
> -+	int flag;
> -+	int option_index = 0;
> -+	static struct option long_options[] = {
> -+		{"root", required_argument, NULL, 'Q'},
> -+		{NULL, 0, NULL, '\0'}
> -+	};
> ++	int i;
> ++        char *root;
>   +
> -+	while ((flag = getopt_long (argc, argv, "a:A:d:gM:Q:rR", long_options,&option_index)) != -1) {
> -+		switch (flag) {
> -+		case 'Q':
> -+			if ('/' != optarg[0]) {
> ++        for (i = 0; i<  argc; i++) {
> ++		if (!strcmp (argv[i], "--root") || !strcmp (argv[i], "-Q")) {
> ++			if (i + 1 == argc) {
> ++				fprintf (stderr,
> ++				         _("%s: option '%s' requires an argument\n"),
> ++				         Prog, argv[i]);
> ++				exit (E_BAD_ARG);
> ++			}
> ++			root = argv[i + 1];
> ++
> ++			if ('/' != root[0]) {
>   +				fprintf (stderr,
>   +				         _("%s: invalid chroot path '%s'\n"),
> -+				         Prog, optarg);
> ++				         Prog, root);
>   +				exit (E_BAD_ARG);
>   +			}
> -+			newroot = optarg;
> ++			newroot = root;
>   +
>   +			if (access (newroot, F_OK) != 0) {
>   +				fprintf(stderr,
> @@ -99,7 +102,6 @@ diff -urN shadow-4.1.4.3.orig//src/gpasswd.c shadow-4.1.4.3//src/gpasswd.c
>   +				exit (E_BAD_ARG);
>   +			}
>   +			break;
> -+		/* no-op on everything else - they will be hanled by process_flags() */
>   +		}
>   +	}
>   +}
> @@ -108,7 +110,7 @@ diff -urN shadow-4.1.4.3.orig//src/gpasswd.c shadow-4.1.4.3//src/gpasswd.c
>     * process_flags - process the command line options and arguments
>     */
>    static void process_flags (int argc, char **argv)
> -@@ -235,6 +287,7 @@
> +@@ -235,6 +289,7 @@
>    	static struct option long_options[] = {
>    		{"add", required_argument, NULL, 'a'},
>    		{"delete", required_argument, NULL, 'd'},
> @@ -116,7 +118,7 @@ diff -urN shadow-4.1.4.3.orig//src/gpasswd.c shadow-4.1.4.3//src/gpasswd.c
>    		{"remove-password", no_argument, NULL, 'r'},
>    		{"restrict", no_argument, NULL, 'R'},
>    		{"administrators", required_argument, NULL, 'A'},
> -@@ -242,7 +295,7 @@
> +@@ -242,7 +297,7 @@
>    		{NULL, 0, NULL, '\0'}
>    		};
>
> @@ -125,7 +127,7 @@ diff -urN shadow-4.1.4.3.orig//src/gpasswd.c shadow-4.1.4.3//src/gpasswd.c
>    		switch (flag) {
>    		case 'a':	/* add a user */
>    			aflg = true;
> -@@ -283,6 +336,9 @@
> +@@ -283,6 +338,9 @@
>    			}
>    			Mflg = true;
>    			break;
> @@ -135,7 +137,7 @@ diff -urN shadow-4.1.4.3.orig//src/gpasswd.c shadow-4.1.4.3//src/gpasswd.c
>    		case 'r':	/* remove group password */
>    			rflg = true;
>    			break;
> -@@ -995,6 +1051,8 @@
> +@@ -995,6 +1053,8 @@
>    	setbuf (stdout, NULL);
>    	setbuf (stderr, NULL);
>
> @@ -145,8 +147,8 @@ diff -urN shadow-4.1.4.3.orig//src/gpasswd.c shadow-4.1.4.3//src/gpasswd.c
>    	is_shadowgrp = sgr_file_present ();
>    #endif
>   diff -urN shadow-4.1.4.3.orig//src/groupadd.c shadow-4.1.4.3//src/groupadd.c
> ---- shadow-4.1.4.3.orig//src/groupadd.c	2011-02-13 09:58:16.000000000 -0800
> -+++ shadow-4.1.4.3//src/groupadd.c	2011-06-28 15:12:03.539504372 -0700
> +--- shadow-4.1.4.3.orig//src/groupadd.c	2011-09-29 12:00:45.212000091 +0100
> ++++ shadow-4.1.4.3//src/groupadd.c	2011-09-29 11:59:28.386000092 +0100
>   @@ -76,6 +76,7 @@
>    static gid_t group_id;
>    static /*@null@*/char *group_passwd;
> @@ -208,8 +210,8 @@ diff -urN shadow-4.1.4.3.orig//src/groupadd.c shadow-4.1.4.3//src/groupadd.c
>    			rflg = true;
>    			break;
>   diff -urN shadow-4.1.4.3.orig//src/groupdel.c shadow-4.1.4.3//src/groupdel.c
> ---- shadow-4.1.4.3.orig//src/groupdel.c	2011-02-13 09:58:16.000000000 -0800
> -+++ shadow-4.1.4.3//src/groupdel.c	2011-06-28 15:12:03.539504372 -0700
> +--- shadow-4.1.4.3.orig//src/groupdel.c	2011-09-29 12:00:45.212000091 +0100
> ++++ shadow-4.1.4.3//src/groupdel.c	2011-09-29 11:59:28.386000092 +0100
>   @@ -36,6 +36,7 @@
>
>    #include<ctype.h>
> @@ -340,8 +342,8 @@ diff -urN shadow-4.1.4.3.orig//src/groupdel.c shadow-4.1.4.3//src/groupdel.c
>    #ifdef USE_PAM
>    	{
>   diff -urN shadow-4.1.4.3.orig//src/groupmod.c shadow-4.1.4.3//src/groupmod.c
> ---- shadow-4.1.4.3.orig//src/groupmod.c	2011-02-13 09:58:16.000000000 -0800
> -+++ shadow-4.1.4.3//src/groupmod.c	2011-06-28 15:12:03.539504372 -0700
> +--- shadow-4.1.4.3.orig//src/groupmod.c	2011-09-29 12:00:45.212000091 +0100
> ++++ shadow-4.1.4.3//src/groupmod.c	2011-09-29 11:59:28.387000092 +0100
>   @@ -79,6 +79,7 @@
>    static char *group_passwd;
>    static gid_t group_id;
> @@ -401,8 +403,8 @@ diff -urN shadow-4.1.4.3.orig//src/groupmod.c shadow-4.1.4.3//src/groupmod.c
>    			usage ();
>    		}
>   diff -urN shadow-4.1.4.3.orig//src/grpconv.c shadow-4.1.4.3//src/grpconv.c
> ---- shadow-4.1.4.3.orig//src/grpconv.c	2011-02-13 09:58:16.000000000 -0800
> -+++ shadow-4.1.4.3//src/grpconv.c	2011-06-28 15:12:03.539504372 -0700
> +--- shadow-4.1.4.3.orig//src/grpconv.c	2011-09-29 12:00:45.213000091 +0100
> ++++ shadow-4.1.4.3//src/grpconv.c	2011-09-29 11:59:28.387000092 +0100
>   @@ -39,6 +39,7 @@
>
>    #include<errno.h>
> @@ -527,8 +529,8 @@ diff -urN shadow-4.1.4.3.orig//src/grpconv.c shadow-4.1.4.3//src/grpconv.c
>    		fprintf (stderr,
>    		         _("%s: cannot lock %s; try again later.\n"),
>   diff -urN shadow-4.1.4.3.orig//src/grpunconv.c shadow-4.1.4.3//src/grpunconv.c
> ---- shadow-4.1.4.3.orig//src/grpunconv.c	2011-02-13 09:58:16.000000000 -0800
> -+++ shadow-4.1.4.3//src/grpunconv.c	2011-06-28 15:12:03.539504372 -0700
> +--- shadow-4.1.4.3.orig//src/grpunconv.c	2011-09-29 12:00:45.213000091 +0100
> ++++ shadow-4.1.4.3//src/grpunconv.c	2011-09-29 11:59:28.387000092 +0100
>   @@ -43,6 +43,7 @@
>    #include<stdlib.h>
>    #include<string.h>
> @@ -653,8 +655,8 @@ diff -urN shadow-4.1.4.3.orig//src/grpunconv.c shadow-4.1.4.3//src/grpunconv.c
>    		exit (0);	/* no /etc/gshadow, nothing to do */
>    	}
>   diff -urN shadow-4.1.4.3.orig//src/passwd.c shadow-4.1.4.3//src/passwd.c
> ---- shadow-4.1.4.3.orig//src/passwd.c	2011-02-13 09:58:16.000000000 -0800
> -+++ shadow-4.1.4.3//src/passwd.c	2011-06-28 15:12:03.539504372 -0700
> +--- shadow-4.1.4.3.orig//src/passwd.c	2011-09-29 12:00:45.214000091 +0100
> ++++ shadow-4.1.4.3//src/passwd.c	2011-09-29 11:59:28.388000092 +0100
>   @@ -75,6 +75,7 @@
>    static char *name;		/* The name of user whose password is being changed */
>    static char *myname;		/* The current user's name */
> @@ -718,8 +720,8 @@ diff -urN shadow-4.1.4.3.orig//src/passwd.c shadow-4.1.4.3//src/passwd.c
>    				/* -r repository (files|nis|nisplus) */
>    				/* only "files" supported for now */
>   diff -urN shadow-4.1.4.3.orig//src/pwconv.c shadow-4.1.4.3//src/pwconv.c
> ---- shadow-4.1.4.3.orig//src/pwconv.c	2011-02-13 09:58:16.000000000 -0800
> -+++ shadow-4.1.4.3//src/pwconv.c	2011-06-28 15:12:03.539504372 -0700
> +--- shadow-4.1.4.3.orig//src/pwconv.c	2011-09-29 12:00:45.214000091 +0100
> ++++ shadow-4.1.4.3//src/pwconv.c	2011-09-29 11:59:28.388000092 +0100
>   @@ -59,6 +59,7 @@
>
>    #include<errno.h>
> @@ -847,8 +849,8 @@ diff -urN shadow-4.1.4.3.orig//src/pwconv.c shadow-4.1.4.3//src/pwconv.c
>    		fprintf (stderr,
>    		         _("%s: cannot lock %s; try again later.\n"),
>   diff -urN shadow-4.1.4.3.orig//src/pwunconv.c shadow-4.1.4.3//src/pwunconv.c
> ---- shadow-4.1.4.3.orig//src/pwunconv.c	2011-02-13 09:58:16.000000000 -0800
> -+++ shadow-4.1.4.3//src/pwunconv.c	2011-06-28 15:12:03.539504372 -0700
> +--- shadow-4.1.4.3.orig//src/pwunconv.c	2011-09-29 12:00:45.214000091 +0100
> ++++ shadow-4.1.4.3//src/pwunconv.c	2011-09-29 11:59:28.388000092 +0100
>   @@ -35,6 +35,7 @@
>    #ident "$Id: pwunconv.c 2852 2009-04-30 21:44:35Z nekral-guest $"
>
> @@ -969,8 +971,8 @@ diff -urN shadow-4.1.4.3.orig//src/pwunconv.c shadow-4.1.4.3//src/pwunconv.c
>    		/* shadow not installed, do nothing */
>    		exit (0);
>   diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c
> ---- shadow-4.1.4.3.orig//src/useradd.c	2011-02-13 09:58:16.000000000 -0800
> -+++ shadow-4.1.4.3//src/useradd.c	2011-06-28 15:12:14.608787030 -0700
> +--- shadow-4.1.4.3.orig//src/useradd.c	2011-09-29 12:00:45.215000091 +0100
> ++++ shadow-4.1.4.3//src/useradd.c	2011-09-29 11:59:28.520000092 +0100
>   @@ -112,6 +112,7 @@
>    #ifdef WITH_SELINUX
>    static const char *user_selinux = "";
> @@ -995,7 +997,7 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c
>    	(void) fputs (_("  -r, --system                  create a system account\n"), stderr);
>    	(void) fputs (_("  -s, --shell SHELL             login shell of the new account\n"), stderr);
>    	(void) fputs (_("  -u, --uid UID                 user ID of the new account\n"), stderr);
> -@@ -943,6 +946,59 @@
> +@@ -943,6 +946,57 @@
>    }
>
>    /*
> @@ -1011,27 +1013,26 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c
>   +	/*
>   +	 * Parse the command line options.
>   +	 */
> -+	int c;
> -+	static struct option long_options[] = {
> -+		{"root", required_argument, NULL, 'R'},
> -+		{NULL, 0, NULL, '\0'}
> -+	};
> -+	while ((c = getopt_long (argc, argv,
> -+#ifdef WITH_SELINUX
> -+	                         "b:c:d:De:f:g:G:k:K:lmMNop:R:rs:u:UZ:",
> -+#else
> -+	                         "b:c:d:De:f:g:G:k:K:lmMNop:R:rs:u:U",
> -+#endif
> -+	                         long_options, NULL)) != -1) {
> -+		switch (c) {
> -+		case 'R':
> -+			if ('/' != optarg[0]) {
> ++	int i;
> ++        char *root;
> ++
> ++        for (i = 0; i<  argc; i++) {
> ++		if (!strcmp (argv[i], "--root") || !strcmp (argv[i], "-R")) {
> ++			if (i + 1 == argc) {
> ++				fprintf (stderr,
> ++				         _("%s: option '%s' requires an argument\n"),
> ++				         Prog, argv[i]);
> ++				exit (E_BAD_ARG);
> ++			}
> ++			root = argv[i + 1];
> ++
> ++			if ('/' != root[0]) {
>   +				fprintf (stderr,
>   +				         _("%s: invalid chroot path '%s'\n"),
> -+				         Prog, optarg);
> ++				         Prog, root);
>   +				exit (E_BAD_ARG);
>   +			}
> -+			newroot = optarg;
> ++			newroot = root;
>   +
>   +			if (access (newroot, F_OK) != 0) {
>   +				fprintf(stderr,
> @@ -1046,7 +1047,6 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c
>   +				exit (E_BAD_ARG);
>   +			}
>   +			break;
> -+		/* no-op on everything else - they will be hanled by process_flags() */
>   +		}
>   +	}
>   +}
> @@ -1055,7 +1055,7 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c
>     * process_flags - perform command line argument setting
>     *
>     *	process_flags() interprets the command line arguments and sets
> -@@ -978,6 +1034,7 @@
> +@@ -978,6 +1032,7 @@
>    			{"no-user-group", no_argument, NULL, 'N'},
>    			{"non-unique", no_argument, NULL, 'o'},
>    			{"password", required_argument, NULL, 'p'},
> @@ -1063,7 +1063,7 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c
>    			{"system", no_argument, NULL, 'r'},
>    			{"shell", required_argument, NULL, 's'},
>    #ifdef WITH_SELINUX
> -@@ -989,9 +1046,9 @@
> +@@ -989,9 +1044,9 @@
>    		};
>    		while ((c = getopt_long (argc, argv,
>    #ifdef WITH_SELINUX
> @@ -1075,7 +1075,7 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c
>    #endif
>    		                         long_options, NULL)) != -1) {
>    			switch (c) {
> -@@ -1156,6 +1213,9 @@
> +@@ -1156,6 +1211,9 @@
>    				}
>    				user_pass = optarg;
>    				break;
> @@ -1085,7 +1085,7 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c
>    			case 'r':
>    				rflg = true;
>    				break;
> -@@ -1735,6 +1795,36 @@
> +@@ -1735,6 +1793,36 @@
>    	}
>    }
>    #endif
> @@ -1122,7 +1122,7 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c
>    /*
>     * create_home - create the user's home directory
>     *
> -@@ -1748,34 +1838,31 @@
> +@@ -1748,34 +1836,31 @@
>    #ifdef WITH_SELINUX
>    		selinux_file_context (user_home);
>    #endif
> @@ -1175,7 +1175,7 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c
>    }
>
>    /*
> -@@ -1861,6 +1948,7 @@
> +@@ -1861,6 +1946,7 @@
>    	 */
>    	user_groups[0] = (char *) 0;
>
> @@ -1184,8 +1184,8 @@ diff -urN shadow-4.1.4.3.orig//src/useradd.c shadow-4.1.4.3//src/useradd.c
>    	is_shadow_pwd = spw_file_present ();
>    #ifdef SHADOWGRP
>   diff -urN shadow-4.1.4.3.orig//src/userdel.c shadow-4.1.4.3//src/userdel.c
> ---- shadow-4.1.4.3.orig//src/userdel.c	2011-02-13 09:58:16.000000000 -0800
> -+++ shadow-4.1.4.3//src/userdel.c	2011-06-28 15:12:03.549503721 -0700
> +--- shadow-4.1.4.3.orig//src/userdel.c	2011-09-29 12:00:45.216000091 +0100
> ++++ shadow-4.1.4.3//src/userdel.c	2011-09-29 11:59:28.389000092 +0100
>   @@ -79,6 +79,7 @@
>    static char *user_name;
>    static uid_t user_id;
> @@ -1239,8 +1239,8 @@ diff -urN shadow-4.1.4.3.orig//src/userdel.c shadow-4.1.4.3//src/userdel.c
>    				rflg = true;
>    				break;
>   diff -urN shadow-4.1.4.3.orig//src/usermod.c shadow-4.1.4.3//src/usermod.c
> ---- shadow-4.1.4.3.orig//src/usermod.c	2011-02-13 09:58:16.000000000 -0800
> -+++ shadow-4.1.4.3//src/usermod.c	2011-06-28 15:12:03.549503721 -0700
> +--- shadow-4.1.4.3.orig//src/usermod.c	2011-09-29 12:00:45.216000091 +0100
> ++++ shadow-4.1.4.3//src/usermod.c	2011-09-29 11:59:28.390000092 +0100
>   @@ -110,6 +110,7 @@
>    static long user_newinactive;
>    static long sys_ngroups;
> @@ -1265,7 +1265,7 @@ diff -urN shadow-4.1.4.3.orig//src/usermod.c shadow-4.1.4.3//src/usermod.c
>    	         "  -s, --shell SHELL             new login shell for the user account\n"
>    	         "  -u, --uid UID                 new UID for the user account\n"
>    	         "  -U, --unlock                  unlock the user account\n"
> -@@ -802,6 +805,60 @@
> +@@ -802,6 +805,58 @@
>    }
>
>    /*
> @@ -1281,28 +1281,27 @@ diff -urN shadow-4.1.4.3.orig//src/usermod.c shadow-4.1.4.3//src/usermod.c
>   +	/*
>   +	 * Parse the command line options.
>   +	 */
> -+	int c;
> -+	static struct option long_options[] = {
> -+		{"root", required_argument, NULL, 'R'},
> -+		{NULL, 0, NULL, '\0'}
> -+	};
> -+	while ((c = getopt_long (argc, argv,
> -+#ifdef WITH_SELINUX
> -+                             "ac:d:e:f:g:G:hl:Lmop:R:s:u:UZ:",
> -+#else
> -+	                         "ac:d:e:f:g:G:hl:Lmop:R:s:u:U",
> -+#endif
> -+	                         long_options, NULL)) != -1) {
> -+		switch (c) {
> -+		case 'R':
> -+			if (    (!VALID (optarg) )
> -+				|| (   ('/' != optarg[0]) ) ) {
> ++	int i;
> ++        char *root;
> ++
> ++        for (i = 0; i<  argc; i++) {
> ++		if (!strcmp (argv[i], "--root") || !strcmp (argv[i], "-R")) {
> ++			if (i + 1 == argc) {
> ++				fprintf (stderr,
> ++				         _("%s: option '%s' requires an argument\n"),
> ++				         Prog, argv[i]);
> ++				exit (E_BAD_ARG);
> ++			}
> ++			root = argv[i + 1];
> ++
> ++			if (    (!VALID (root) )
> ++				|| (   ('/' != root[0]) ) ) {
>   +				fprintf (stderr,
>   +				         _("%s: invalid chroot path '%s'\n"),
> -+				         Prog, optarg);
> ++				         Prog, root);
>   +				exit (E_BAD_ARG);
>   +			}
> -+			newroot = optarg;
> ++			newroot = root;
>   +
>   +			if (access (newroot, F_OK) != 0) {
>   +				fprintf(stderr,
> @@ -1317,7 +1316,6 @@ diff -urN shadow-4.1.4.3.orig//src/usermod.c shadow-4.1.4.3//src/usermod.c
>   +				exit (E_BAD_ARG);
>   +			}
>   +			break;
> -+		/* no-op on everything else - they will be hanled by process_flags() */
>   +		}
>   +	}
>   +}
> @@ -1326,7 +1324,7 @@ diff -urN shadow-4.1.4.3.orig//src/usermod.c shadow-4.1.4.3//src/usermod.c
>     * process_flags - perform command line argument setting
>     *
>     *	process_flags() interprets the command line arguments and sets the
> -@@ -895,6 +952,7 @@
> +@@ -895,6 +950,7 @@
>    			{"move-home", no_argument, NULL, 'm'},
>    			{"non-unique", no_argument, NULL, 'o'},
>    			{"password", required_argument, NULL, 'p'},
> @@ -1334,7 +1332,7 @@ diff -urN shadow-4.1.4.3.orig//src/usermod.c shadow-4.1.4.3//src/usermod.c
>    #ifdef WITH_SELINUX
>    			{"selinux-user", required_argument, NULL, 'Z'},
>    #endif
> -@@ -905,9 +963,9 @@
> +@@ -905,9 +961,9 @@
>    		};
>    		while ((c = getopt_long (argc, argv,
>    #ifdef WITH_SELINUX
> @@ -1346,7 +1344,7 @@ diff -urN shadow-4.1.4.3.orig//src/usermod.c shadow-4.1.4.3//src/usermod.c
>    #endif
>    			                 long_options, NULL)) != -1) {
>    			switch (c) {
> -@@ -999,6 +1057,9 @@
> +@@ -999,6 +1055,9 @@
>    				user_pass = optarg;
>    				pflg = true;
>    				break;
> @@ -1356,7 +1354,7 @@ diff -urN shadow-4.1.4.3.orig//src/usermod.c shadow-4.1.4.3//src/usermod.c
>    			case 's':
>    				if (!VALID (optarg)) {
>    					fprintf (stderr,
> -@@ -1715,6 +1776,8 @@
> +@@ -1715,6 +1774,8 @@
>
>    	OPENLOG ("usermod");
>





More information about the Openembedded-core mailing list