]> git.ipfire.org Git - thirdparty/shadow.git/commitdiff
* NEWS, src/groupadd.c, man/groupadd.8.xml: Add --root option. Open
authornekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sun, 6 Nov 2011 18:37:45 +0000 (18:37 +0000)
committernekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sun, 6 Nov 2011 18:37:45 +0000 (18:37 +0000)
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().

ChangeLog
NEWS
man/groupadd.8.xml
src/groupadd.c

index 0257d6fd38a55c71f64a18285ad57089ccaea23e..7c64359111e5e9430ca0ba4035ea4ee2d8ac6a11 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
        audit and syslog after the potential chroot. userdel's usage split
        in smaller messages.
        * 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>
 
diff --git a/NEWS b/NEWS
index 61f8fac1861d76336cfce077d861788507bdd4ed..43e3e933f8fec097348d012af474c2891f1ec31e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -31,6 +31,8 @@ shadow-4.1.4.3 -> shadow-4.1.5                                        UNRELEASED
 - faillog
   * The -l, -m, -r, -t options only act on the existing users, unless -a is
     specified.
+- groupadd
+  * Add --root option.
 - groupmod
   * Fixed groupmod when configured with --enable-account-tools-setuid.
   * When the gshadow file exists but there are no gshadow entries, an entry
index 78ae9a14d1ee272d46575728dd0c399dcef38812..2f07e6e1d599306038426e6f11e1516e8ac786df 100644 (file)
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!--
    Copyright (c) 1991       , Julianne Frances Haugh
-   Copyright (c) 2007 - 2009, Nicolas François
+   Copyright (c) 2007 - 2011, Nicolas François
    All rights reserved.
   
    Redistribution and use in source and binary forms, with or without
          </para>
        </listitem>
       </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>
   </refsect1>
 
index 7ec21e942d33bd95c3e8990f5ffb05593733b693..e42abdc84c6475d57f45f810af7f51bd12834c8f 100644 (file)
@@ -122,6 +122,7 @@ static void usage (int status)
                        "                                (non-unique) GID\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, --root CHROOT_DIR         directory to chroot into\n"), usageout);
        (void) fputs ("\n", usageout);
        exit (status);
 }
@@ -375,7 +376,6 @@ static void process_flags (int argc, char **argv)
         * Parse the command line options.
         */
        char *cp;
-       int option_index = 0;
        int c;
        static struct option long_options[] = {
                {"force", no_argument, NULL, 'f'},
@@ -385,12 +385,12 @@ static void process_flags (int argc, char **argv)
                {"non-unique", no_argument, NULL, 'o'},
                {"password", required_argument, NULL, 'p'},
                {"system", no_argument, NULL, 'r'},
+               {"root", required_argument, NULL, 'R'},
                {NULL, 0, NULL, '\0'}
        };
 
-       while ((c =
-               getopt_long (argc, argv, "fg:hK:op:r", long_options,
-                            &option_index)) != -1) {
+       while ((c = getopt_long (argc, argv, "fg:hK:op:rR:",
+                                long_options, NULL)) != -1) {
                switch (c) {
                case 'f':
                        /*
@@ -444,6 +444,8 @@ static void process_flags (int argc, char **argv)
                case 'r':
                        rflg = true;
                        break;
+               case 'R': /* no-op, handled in process_root_flag () */
+                       break;
                default:
                        usage (E_USAGE);
                }
@@ -563,11 +565,6 @@ static void check_perms (void)
  */
 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.
         */
@@ -577,7 +574,19 @@ int main (int argc, char **argv)
        (void) bindtextdomain (PACKAGE, LOCALEDIR);
        (void) textdomain (PACKAGE);
 
+       process_root_flag ("-R", argc, argv);
+
        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.
@@ -607,7 +616,6 @@ int main (int argc, char **argv)
 
        nscd_flush_cache ("group");
 
-       exit (E_SUCCESS);
-       /*@notreached@*/
+       return E_SUCCESS;
 }