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:
parent
b50d97cb4a
commit
1f7647c197
|
@ -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 ();
|
||||
}
|
|
@ -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"
|
||||
|
|
Loading…
Reference in New Issue