* NEWS, src/groupadd.c, man/groupadd.8.xml: Add --root option. Open

audit after the potential chroot.
	* src/groupadd.c: Check atexit failures.
	* src/groupadd.c: Return E_SUCCESS instead of exit'ing at the end
	of main().
This commit is contained in:
nekral-guest 2011-11-06 18:37:45 +00:00
parent aa2957e62a
commit 057cbaa4ae
4 changed files with 40 additions and 12 deletions

View File

@ -10,6 +10,11 @@
audit and syslog after the potential chroot. userdel's usage split audit and syslog after the potential chroot. userdel's usage split
in smaller messages. in smaller messages.
* NEWS, src/usermod.c, man/usermod.8.xml: Likewise * NEWS, src/usermod.c, man/usermod.8.xml: Likewise
* NEWS, src/groupadd.c, man/groupadd.8.xml: Add --root option. Open
audit after the potential chroot.
* src/groupadd.c: Check atexit failures.
* src/groupadd.c: Return E_SUCCESS instead of exit'ing at the end
of main().
2011-10-22 Nicolas François <nicolas.francois@centraliens.net> 2011-10-22 Nicolas François <nicolas.francois@centraliens.net>

2
NEWS
View File

@ -31,6 +31,8 @@ shadow-4.1.4.3 -> shadow-4.1.5 UNRELEASED
- faillog - faillog
* The -l, -m, -r, -t options only act on the existing users, unless -a is * The -l, -m, -r, -t options only act on the existing users, unless -a is
specified. specified.
- groupadd
* Add --root option.
- groupmod - groupmod
* Fixed groupmod when configured with --enable-account-tools-setuid. * Fixed groupmod when configured with --enable-account-tools-setuid.
* When the gshadow file exists but there are no gshadow entries, an entry * When the gshadow file exists but there are no gshadow entries, an entry

View File

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- <!--
Copyright (c) 1991 , Julianne Frances Haugh Copyright (c) 1991 , Julianne Frances Haugh
Copyright (c) 2007 - 2009, Nicolas François Copyright (c) 2007 - 2011, Nicolas François
All rights reserved. All rights reserved.
Redistribution and use in source and binary forms, with or without Redistribution and use in source and binary forms, with or without
@ -180,6 +180,19 @@
</para> </para>
</listitem> </listitem>
</varlistentry> </varlistentry>
<varlistentry>
<term>
<option>-R</option>, <option>--root</option>
<replaceable>CHROOT_DIR</replaceable>
</term>
<listitem>
<para>
Apply changes in the <replaceable>CHROOT_DIR</replaceable>
directory and use the configuration files from the
<replaceable>CHROOT_DIR</replaceable> directory.
</para>
</listitem>
</varlistentry>
</variablelist> </variablelist>
</refsect1> </refsect1>

View File

@ -122,6 +122,7 @@ static void usage (int status)
" (non-unique) GID\n"), usageout); " (non-unique) GID\n"), usageout);
(void) fputs (_(" -p, --password PASSWORD use this encrypted password for the new group\n"), usageout); (void) fputs (_(" -p, --password PASSWORD use this encrypted password for the new group\n"), usageout);
(void) fputs (_(" -r, --system create a system account\n"), usageout); (void) fputs (_(" -r, --system create a system account\n"), usageout);
(void) fputs (_(" -R, --root CHROOT_DIR directory to chroot into\n"), usageout);
(void) fputs ("\n", usageout); (void) fputs ("\n", usageout);
exit (status); exit (status);
} }
@ -375,7 +376,6 @@ static void process_flags (int argc, char **argv)
* Parse the command line options. * Parse the command line options.
*/ */
char *cp; char *cp;
int option_index = 0;
int c; int c;
static struct option long_options[] = { static struct option long_options[] = {
{"force", no_argument, NULL, 'f'}, {"force", no_argument, NULL, 'f'},
@ -385,12 +385,12 @@ static void process_flags (int argc, char **argv)
{"non-unique", no_argument, NULL, 'o'}, {"non-unique", no_argument, NULL, 'o'},
{"password", required_argument, NULL, 'p'}, {"password", required_argument, NULL, 'p'},
{"system", no_argument, NULL, 'r'}, {"system", no_argument, NULL, 'r'},
{"root", required_argument, NULL, 'R'},
{NULL, 0, NULL, '\0'} {NULL, 0, NULL, '\0'}
}; };
while ((c = while ((c = getopt_long (argc, argv, "fg:hK:op:rR:",
getopt_long (argc, argv, "fg:hK:op:r", long_options, long_options, NULL)) != -1) {
&option_index)) != -1) {
switch (c) { switch (c) {
case 'f': case 'f':
/* /*
@ -444,6 +444,8 @@ static void process_flags (int argc, char **argv)
case 'r': case 'r':
rflg = true; rflg = true;
break; break;
case 'R': /* no-op, handled in process_root_flag () */
break;
default: default:
usage (E_USAGE); usage (E_USAGE);
} }
@ -563,11 +565,6 @@ static void check_perms (void)
*/ */
int main (int argc, char **argv) int main (int argc, char **argv)
{ {
#ifdef WITH_AUDIT
audit_help_open ();
#endif
atexit (do_cleanups);
/* /*
* Get my name so that I can use it to report errors. * Get my name so that I can use it to report errors.
*/ */
@ -577,7 +574,19 @@ int main (int argc, char **argv)
(void) bindtextdomain (PACKAGE, LOCALEDIR); (void) bindtextdomain (PACKAGE, LOCALEDIR);
(void) textdomain (PACKAGE); (void) textdomain (PACKAGE);
process_root_flag ("-R", argc, argv);
OPENLOG ("groupadd"); OPENLOG ("groupadd");
#ifdef WITH_AUDIT
audit_help_open ();
#endif
if (atexit (do_cleanups) != 0) {
fprintf (stderr,
_("%s: Cannot setup cleanup service.\n"),
Prog);
exit (1);
}
/* /*
* Parse the command line options. * Parse the command line options.
@ -607,7 +616,6 @@ int main (int argc, char **argv)
nscd_flush_cache ("group"); nscd_flush_cache ("group");
exit (E_SUCCESS); return E_SUCCESS;
/*@notreached@*/
} }