shadow-native: Add --root option in groupmems

Patch add_root_cmd_groupmems.patch that we apply to shadow-native
    allows program groupmems from the shadow utility package to chroot()
    so it can be used to modify etc/passwd and etc/group if they are
    located in a sysroot.

    The --root option in groupmems is needed for class useradd.

(From OE-Core rev: ae7aa0ef68372c15224c0c518cb90ba7350137b4)

Signed-off-by: Mikhail Durnev <mikhail_durnev@mentor.com>
Signed-off-by: Saul Wold <sgw@linux.intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Mikhail Durnev 2013-06-25 21:54:35 -05:00 committed by Richard Purdie
parent b50d97cb4a
commit 1f7647c197
2 changed files with 76 additions and 0 deletions

View File

@ -0,0 +1,75 @@
Add a --root command option to groupmems utility.
This option allows the utility to be chrooted when run under pseudo.
Signed-off-by: Mikhail Durnev <mikhail_durnev@mentor.com>
diff -Naur old/src/groupmems.c new/src/groupmems.c
--- old/src/groupmems.c 2011-02-13 11:58:16.000000000 -0600
+++ new/src/groupmems.c 2013-05-30 04:45:38.000000000 -0500
@@ -60,6 +60,7 @@
#define EXIT_MEMBER_EXISTS 7 /* member of group already exists */
#define EXIT_INVALID_USER 8 /* specified user does not exist */
#define EXIT_INVALID_GROUP 9 /* specified group does not exist */
+#define EXIT_BAD_ARG 10 /* invalid argument to option */
/*
* Global variables
@@ -79,6 +80,7 @@
static bool is_shadowgrp;
static bool sgr_locked = false;
#endif
+static const char *newroot = "";
/* local function prototypes */
static char *whoami (void);
@@ -368,6 +370,7 @@
"Options:\n"
" -g, --group groupname change groupname instead of the user's group\n"
" (root only)\n"
+ " -R, --root CHROOT_DIR directory to chroot into\n"
"\n"
"Actions:\n"
" -a, --add username add username to the members of the group\n"
@@ -391,10 +394,11 @@
{"group", required_argument, NULL, 'g'},
{"list", no_argument, NULL, 'l'},
{"purge", no_argument, NULL, 'p'},
+ {"root", required_argument, NULL, 'R'},
{NULL, 0, NULL, '\0'}
};
- while ((arg = getopt_long (argc, argv, "a:d:g:lp", long_options,
+ while ((arg = getopt_long (argc, argv, "a:d:g:lpR:", long_options,
&option_index)) != EOF) {
switch (arg) {
case 'a':
@@ -416,6 +420,28 @@
purge = true;
++exclusive;
break;
+ case 'R':
+ if ('/' != optarg[0]) {
+ fprintf (stderr,
+ _("%s: invalid chroot path '%s'\n"),
+ Prog, optarg);
+ exit (EXIT_BAD_ARG);
+ }
+ newroot = optarg;
+
+ if (access (newroot, F_OK) != 0) {
+ fprintf(stderr,
+ _("%s: chroot directory %s does not exist\n"),
+ Prog, newroot);
+ exit (EXIT_BAD_ARG);
+ }
+ if ( chroot(newroot) != 0 ) {
+ fprintf(stderr,
+ _("%s: unable to chroot to directory %s\n"),
+ Prog, newroot);
+ exit (EXIT_BAD_ARG);
+ }
+ break;
default:
usage ();
}

View File

@ -17,6 +17,7 @@ SRC_URI = "http://pkg-shadow.alioth.debian.org/releases/${BPN}-${PV}.tar.bz2 \
file://disable-syslog.patch \
file://useradd.patch \
file://shadow_fix_for_automake-1.12.patch \
file://add_root_cmd_groupmems.patch \
"
SRC_URI[md5sum] = "b8608d8294ac88974f27b20f991c0e79"