]> granicus.if.org Git - shadow/commitdiff
* src/groupmems.c: Added functions add_user(), remove_user(), and
authornekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sat, 30 Aug 2008 18:34:24 +0000 (18:34 +0000)
committernekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Sat, 30 Aug 2008 18:34:24 +0000 (18:34 +0000)
purge_members() to ease the support of gshadow.

ChangeLog
src/groupmems.c

index 47c2ee48a9aeb45ba415904953bb9bd5a68c627e..4b58a47a1c657973d6a27caddcb2ff110b1a92b2 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+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.
+
 2008-08-27  Nicolas François  <nicolas.francois@centraliens.net>
 
        * src/expiry.c: Use Basename for Prog.
index 5f1dcb0309e474b9e3770dc5f0e9a4a741c6dec6..9701477150868b007e1d6352ba802bc62e919c39 100644 (file)
@@ -71,6 +71,11 @@ static char *Prog;
 static bool gr_locked = false;
 
 static char *whoami (void);
+static void add_user (const char *user,
+                      struct group *grp);
+static void remove_user (const char *user, 
+                         struct group *grp);
+static void purge_members (struct group *grp);
 static void display_members (char **members);
 static void usage (void);
 static void process_flags (int argc, char **argv);
@@ -94,6 +99,69 @@ static char *whoami (void)
        }
 }
 
+/*
+ * add_user - Add an user to the specified group
+ */
+static void add_user (const char *user,
+                      struct group *grp)
+{
+       /* Make sure the user is not already part of the group */
+       if (is_on_list (grp->gr_mem, user)) {
+               fprintf (stderr,
+                        _("%s: user '%s' is already a member of '%s'\n"),
+                        Prog, user, grp->gr_name);
+               fail_exit (EXIT_MEMBER_EXISTS);
+       }
+
+       /* Add the user to the /etc/group group */
+       grp->gr_mem = add_list (grp->gr_mem, user);
+       if (gr_update (grp) == 0) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                        Prog, gr_dbname (), grp->gr_name);
+               fail_exit (13);
+       }
+}
+
+/*
+ * remove_user - Remove an user from a given group
+ */
+static void remove_user (const char *user, 
+                         struct group *grp)
+{
+       /* Check if the user is a member of the specified group */
+       if (!is_on_list (grp->gr_mem, user)) {
+               fprintf (stderr,
+                        _("%s: user '%s' is not a member of '%s'\n"),
+                        Prog, user, grp->gr_name);
+               fail_exit (EXIT_NOT_MEMBER);
+       }
+
+       /* Remove the user from the /etc/group group */
+       grp->gr_mem = del_list (grp->gr_mem, user);
+       if (gr_update (grp) == 0) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                        Prog, gr_dbname (), grp->gr_name);
+               fail_exit (13);
+       }
+}
+
+/*
+ * purge_members - Rmeove every members of the specified group
+ */
+static void purge_members (struct group *grp)
+{
+       /* Remove all the members of the /etc/group group */
+       grp->gr_mem[0] = NULL;
+       if (gr_update (grp) == 0) {
+               fprintf (stderr,
+                        _("%s: failed to prepare the new %s entry '%s'\n"),
+                        Prog, gr_dbname (), grp->gr_name);
+               fail_exit (13);
+       }
+}
+
 static void display_members (char **members)
 {
        int i;
@@ -277,41 +345,11 @@ int main (int argc, char **argv)
        if (list) {
                display_members (grp->gr_mem);
        } else if (NULL != adduser) {
-               if (is_on_list (grp->gr_mem, adduser)) {
-                       fprintf (stderr,
-                                _("%s: user '%s' is already a member of '%s'\n"),
-                                Prog, adduser, grp->gr_name);
-                       fail_exit (EXIT_MEMBER_EXISTS);
-               }
-               grp->gr_mem = add_list (grp->gr_mem, adduser);
-               if (gr_update (grp) == 0) {
-                       fprintf (stderr,
-                                _("%s: failed to prepare the new %s entry '%s'\n"),
-                                Prog, gr_dbname (), grp->gr_name);
-                       fail_exit (13);
-               }
+               add_user (adduser, grp);
        } else if (NULL != deluser) {
-               if (!is_on_list (grp->gr_mem, deluser)) {
-                       fprintf (stderr,
-                                _("%s: user '%s' is not a member of '%s'\n"),
-                                Prog, deluser, grp->gr_name);
-                       fail_exit (EXIT_NOT_MEMBER);
-               }
-               grp->gr_mem = del_list (grp->gr_mem, deluser);
-               if (gr_update (grp) == 0) {
-                       fprintf (stderr,
-                                _("%s: failed to prepare the new %s entry '%s'\n"),
-                                Prog, gr_dbname (), grp->gr_name);
-                       fail_exit (13);
-               }
+               remove_user (deluser, grp);
        } else if (purge) {
-               grp->gr_mem[0] = NULL;
-               if (gr_update (grp) == 0) {
-                       fprintf (stderr,
-                                _("%s: failed to prepare the new %s entry '%s'\n"),
-                                Prog, gr_dbname (), grp->gr_name);
-                       fail_exit (13);
-               }
+               purge_members (grp);
        }
 
        if (gr_close () == 0) {