]> granicus.if.org Git - shadow/commitdiff
Split check_grp_file() and check_sgr_file() out of main().
authornekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Tue, 1 Jan 2008 13:48:49 +0000 (13:48 +0000)
committernekral-guest <nekral-guest@5a98b0ae-9ef6-0310-add3-de5d479b70d7>
Tue, 1 Jan 2008 13:48:49 +0000 (13:48 +0000)
ChangeLog
src/grpck.c

index f6651b2ab7b57fb9008fb90b9f5da9b57264147b..8c9d042378250adc35074b794439a078a65e2b00 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -3,6 +3,8 @@
        * src/grpck.c: Split process_flags(), open_files(), and
        close_files() out of main(). New global variables is_shadow,
        sort_mode, use_system_grp_file, and use_system_sgr_file.
+       * src/grpck.c: Split check_grp_file() and check_sgr_file() out of
+       main().
 
 2007-12-31  Nicolas François  <nicolas.francois@centraliens.net>
 
index e63983c0a3c1c49b57b6009c6eb795b19f000deb..463ee0dc66eaabb25a237f3211ada70647627660 100644 (file)
@@ -260,47 +260,15 @@ static void close_files (int changed)
        (void) gr_unlock ();
 }
 
-/*
- * grpck - verify group file integrity
- */
-int main (int argc, char **argv)
+static void check_grp_file (int *errors, int *changed)
 {
-       int errors = 0;
-       int changed = 0;
-       int i;
        struct commonio_entry *gre, *tgre;
        struct group *grp;
-
-#ifdef SHADOWGRP
-       struct commonio_entry *sge, *tsge;
+       int i;
+#ifdef SHADOWGRP
        struct sgrp *sgr;
 #endif
 
-       /*
-        * Get my name so that I can use it to report errors.
-        */
-       Prog = Basename (argv[0]);
-
-       setlocale (LC_ALL, "");
-       bindtextdomain (PACKAGE, LOCALEDIR);
-       textdomain (PACKAGE);
-
-       OPENLOG ("grpck");
-
-       /* Parse the command line arguments */
-       process_flags (argc, argv);
-
-       open_files ();
-
-       if (sort_mode) {
-               gr_sort ();
-#ifdef SHADOWGRP
-               if (is_shadow)
-                       sgr_sort ();
-#endif
-               goto write_and_bye;
-       }
-
        /*
         * Loop through the entire group file.
         */
@@ -325,7 +293,7 @@ int main (int argc, char **argv)
                         */
                        printf (_("invalid group file entry\n"));
                        printf (_("delete line '%s'? "), gre->line);
-                       errors++;
+                       *errors += 1;
 
                        /*
                         * prompt the user to delete the entry or not
@@ -342,7 +310,7 @@ int main (int argc, char **argv)
                      delete_gr:
                        SYSLOG ((LOG_INFO, "delete group line `%s'",
                                 gre->line));
-                       changed++;
+                       *changed = 1;
 
                        __gr_del_entry (gre);
                        continue;
@@ -381,7 +349,7 @@ int main (int argc, char **argv)
                         */
                        printf (_("duplicate group entry\n"));
                        printf (_("delete line '%s'? "), gre->line);
-                       errors++;
+                       *errors += 1;
 
                        /*
                         * prompt the user to delete the entry or not
@@ -394,7 +362,7 @@ int main (int argc, char **argv)
                 * Check for invalid group names.  --marekm
                 */
                if (!check_group_name (grp->gr_name)) {
-                       errors++;
+                       *errors += 1;
                        printf (_("invalid group name '%s'\n"), grp->gr_name);
                }
 
@@ -418,7 +386,7 @@ int main (int argc, char **argv)
                         * Can't find this user. Remove them
                         * from the list.
                         */
-                       errors++;
+                       *errors += 1;
                        printf (_("group %s: no user %s\n"),
                                grp->gr_name, grp->gr_mem[i]);
                        printf (_("delete member '%s'? "), grp->gr_mem[i]);
@@ -428,7 +396,7 @@ int main (int argc, char **argv)
 
                        SYSLOG ((LOG_INFO, "delete member '%s' group '%s'",
                                 grp->gr_mem[i], grp->gr_name));
-                       changed++;
+                       *changed = 1;
                        delete_member (grp->gr_mem, grp->gr_mem[i]);
                        gre->changed = 1;
                        __gr_set_changed ();
@@ -447,7 +415,7 @@ int main (int argc, char **argv)
                                        sgr_file);
                                printf (_("add group '%s' in %s ?"),
                                        grp->gr_name, sgr_file);
-                               errors++;
+                               *errors += 1;
                                if (yes_or_no (read_only)) {
                                        struct sgrp sg;
                                        struct group gr;
@@ -460,7 +428,7 @@ int main (int argc, char **argv)
                                        SYSLOG ((LOG_INFO,
                                                 "add group `%s' to `%s'",
                                                 grp->gr_name, sgr_file));
-                                       changed++;
+                                       *changed = 1;
 
                                        if (!sgr_update (&sg)) {
                                                fprintf (stderr,
@@ -507,10 +475,15 @@ int main (int argc, char **argv)
 #endif
 
        }
+}
 
-#ifdef SHADOWGRP
-       if (!is_shadow)
-               goto shadow_done;
+#ifdef SHADOWGRP
+static void check_sgr_file (int *errors, int *changed)
+{
+       struct group *grp;
+       struct commonio_entry *sge, *tsge;
+       struct sgrp *sgr;
+       int i;
 
        /*
         * Loop through the entire shadow group file.
@@ -530,7 +503,7 @@ int main (int argc, char **argv)
                         */
                        printf (_("invalid shadow group file entry\n"));
                        printf (_("delete line '%s'? "), sge->line);
-                       errors++;
+                       *errors += 1;
 
                        /*
                         * prompt the user to delete the entry or not
@@ -547,7 +520,7 @@ int main (int argc, char **argv)
                      delete_sg:
                        SYSLOG ((LOG_INFO, "delete shadow line `%s'",
                                 sge->line));
-                       changed++;
+                       *changed = 1;
 
                        __sgr_del_entry (sge);
                        continue;
@@ -586,7 +559,7 @@ int main (int argc, char **argv)
                         */
                        printf (_("duplicate shadow group entry\n"));
                        printf (_("delete line '%s'? "), sge->line);
-                       errors++;
+                       *errors += 1;
 
                        /*
                         * prompt the user to delete the entry or not
@@ -603,7 +576,7 @@ int main (int argc, char **argv)
                        printf (_("no matching group file entry in %s\n"),
                                grp_file);
                        printf (_("delete line '%s'? "), sge->line);
-                       errors++;
+                       *errors += 1;
                        if (yes_or_no (read_only))
                                goto delete_sg;
                } else {
@@ -639,7 +612,7 @@ int main (int argc, char **argv)
                         * Can't find this user. Remove them
                         * from the list.
                         */
-                       errors++;
+                       *errors += 1;
                        printf (_
                                ("shadow group %s: no administrative user %s\n"),
                                sgr->sg_name, sgr->sg_adm[i]);
@@ -652,7 +625,7 @@ int main (int argc, char **argv)
                        SYSLOG ((LOG_INFO,
                                 "delete admin `%s' from shadow group `%s'",
                                 sgr->sg_adm[i], sgr->sg_name));
-                       changed++;
+                       *changed = 1;
                        delete_member (sgr->sg_adm, sgr->sg_adm[i]);
                        sge->changed = 1;
                        __sgr_set_changed ();
@@ -669,7 +642,7 @@ int main (int argc, char **argv)
                        /*
                         * Can't find this user. Remove them from the list.
                         */
-                       errors++;
+                       *errors += 1;
                        printf (_("shadow group %s: no user %s\n"),
                                sgr->sg_name, sgr->sg_mem[i]);
                        printf (_("delete member '%s'? "), sgr->sg_mem[i]);
@@ -680,17 +653,55 @@ int main (int argc, char **argv)
                        SYSLOG ((LOG_INFO,
                                 "delete member `%s' from shadow group `%s'",
                                 sgr->sg_mem[i], sgr->sg_name));
-                       changed++;
+                       *changed = 1;
                        delete_member (sgr->sg_mem, sgr->sg_mem[i]);
                        sge->changed = 1;
                        __sgr_set_changed ();
                }
        }
-
-      shadow_done:
+}
 #endif                         /* SHADOWGRP */
 
-      write_and_bye:
+/*
+ * grpck - verify group file integrity
+ */
+int main (int argc, char **argv)
+{
+       int errors = 0;
+       int changed = 0;
+
+       /*
+        * Get my name so that I can use it to report errors.
+        */
+       Prog = Basename (argv[0]);
+
+       setlocale (LC_ALL, "");
+       bindtextdomain (PACKAGE, LOCALEDIR);
+       textdomain (PACKAGE);
+
+       OPENLOG ("grpck");
+
+       /* Parse the command line arguments */
+       process_flags (argc, argv);
+
+       open_files ();
+
+       if (sort_mode) {
+               gr_sort ();
+#ifdef SHADOWGRP
+               if (is_shadow)
+                       sgr_sort ();
+               changed = 1;
+#endif
+       } else {
+               check_grp_file (&errors, &changed);
+#ifdef SHADOWGRP
+               if (is_shadow) {
+                       check_sgr_file (&errors, &changed);
+               }
+#endif
+       }
+
        /* Commit the change in the database if needed */
        close_files (changed);