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://disable-syslog.patch \
|
||||||
file://useradd.patch \
|
file://useradd.patch \
|
||||||
file://shadow_fix_for_automake-1.12.patch \
|
file://shadow_fix_for_automake-1.12.patch \
|
||||||
|
file://add_root_cmd_groupmems.patch \
|
||||||
"
|
"
|
||||||
|
|
||||||
SRC_URI[md5sum] = "b8608d8294ac88974f27b20f991c0e79"
|
SRC_URI[md5sum] = "b8608d8294ac88974f27b20f991c0e79"
|
||||||
|
|
Loading…
Reference in New Issue