* src/groupmems.c: Added function open_°files and close_files to
authornekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sat, 30 Aug 2008 18:34:43 +0000 (18:34 +0000)
committernekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sat, 30 Aug 2008 18:34:43 +0000 (18:34 +0000)
ease the support of gshadow.
* src/groupmems.c: Always call check_perms(). This function now
succeed when the requested action is to list the members.

ChangeLog
src/groupmems.c

index 4b58a47a1c657973d6a27caddcb2ff110b1a92b2..044ae1000e930fd9ea71d8aedf3e4b1ab7e04b12 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,10 @@
 2008-08-27  Nicolas François  <nicolas.francois@centraliens.net>
 
-       * src/groupmems.c: Added functions add_user(), remove_user(), and
-       purge_members() to ease the support of gshadow.
+       * src/groupmems.c: Added functions add_user(), remove_user(),
+       purge_members(), open_files, and close_files to ease the support
+       of gshadow.
+       * src/groupmems.c: Always call check_perms(). This function now
+       succeed when the requested action is to list the members.
 
 2008-08-27  Nicolas François  <nicolas.francois@centraliens.net>
 
index 9701477150868b007e1d6352ba802bc62e919c39..0969f734108c0b2145b01824fe9ad384c009d4e0 100644 (file)
@@ -242,6 +242,10 @@ static void process_flags (int argc, char **argv)
 
 static void check_perms (void)
 {
+       if (list) {
+               return;
+       }
+
 #ifdef USE_PAM
        pam_handle_t *pamh = NULL;
        int retval = PAM_SUCCESS;
@@ -285,6 +289,41 @@ static void fail_exit (int code)
        exit (code);
 }
 
+static void open_files (void)
+{
+       if (!list) {
+               if (gr_lock () == 0) {
+                       fprintf (stderr,
+                                _("%s: cannot lock %s; try again later.\n"),
+                                Prog, gr_dbname ());
+                       fail_exit (EXIT_GROUP_FILE);
+               }
+               gr_locked = true;
+       }
+
+       if (gr_open (list ? O_RDONLY : O_RDWR) == 0) {
+               fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ());
+               fail_exit (EXIT_GROUP_FILE);
+       }
+}
+
+static void close_files (void)
+{
+       if (gr_close () == 0) {
+               fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, gr_dbname ());
+               SYSLOG ((LOG_ERR, "failure while writing changes to %s", gr_dbname ()));
+               fail_exit (EXIT_GROUP_FILE);
+       }
+       if (gr_locked) {
+               if (gr_unlock () == 0) {
+                       fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
+                       SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
+                       /* continue */
+               }
+               gr_locked = false;
+       }
+}
+
 int main (int argc, char **argv) 
 {
        char *name;
@@ -317,17 +356,9 @@ int main (int argc, char **argv)
                }
        }
 
-       if (!list) {
-               check_perms ();
+       check_perms ();
 
-               if (gr_lock () == 0) {
-                       fprintf (stderr,
-                                _("%s: cannot lock %s; try again later.\n"),
-                                Prog, gr_dbname ());
-                       fail_exit (EXIT_GROUP_FILE);
-               }
-               gr_locked = true;
-       }
+       open_files ();
 
        if (gr_open (list ? O_RDONLY : O_RDWR) == 0) {
                fprintf (stderr, _("%s: cannot open %s\n"), Prog, gr_dbname ());
@@ -352,16 +383,7 @@ int main (int argc, char **argv)
                purge_members (grp);
        }
 
-       if (gr_close () == 0) {
-               fprintf (stderr, _("%s: failure while writing changes to %s\n"), Prog, gr_dbname ());
-               SYSLOG ((LOG_ERR, "failure while writing %s", gr_dbname ()));
-               fail_exit (EXIT_GROUP_FILE);
-       }
-       if (gr_unlock () == 0) {
-               fprintf (stderr, _("%s: failed to unlock %s\n"), Prog, gr_dbname ());
-               SYSLOG ((LOG_ERR, "failed to unlock %s", gr_dbname ()));
-               /* continue */
-       }
+       close_files ();
 
        exit (EXIT_SUCCESS);
 }