[Pkg-shadow-commits] r1506 - in upstream/trunk: . src
nekral-guest at alioth.debian.org
nekral-guest at alioth.debian.org
Thu Dec 27 18:52:41 UTC 2007
Author: nekral-guest
Date: 2007-12-27 18:52:40 +0000 (Thu, 27 Dec 2007)
New Revision: 1506
Modified:
upstream/trunk/ChangeLog
upstream/trunk/src/gpasswd.c
Log:
Simplify gpasswd's main():
New functions: open_files(), close_files(), update_group(). Split out
from main() to simplify this (too) big function.
Modified: upstream/trunk/ChangeLog
===================================================================
--- upstream/trunk/ChangeLog 2007-12-27 18:27:57 UTC (rev 1505)
+++ upstream/trunk/ChangeLog 2007-12-27 18:52:40 UTC (rev 1506)
@@ -6,6 +6,9 @@
* src/gpasswd.c: Document global variables.
* src/gpasswd.c: New function: process_flags(). Split the processing
of options out of main().
+ * src/gpasswd.c: New functions: open_files(), close_files(),
+ update_group(). Split out from main() to simplify this (too) big
+ function.
2007-12-27 Nicolas François <nicolas.francois at centraliens.net>
Modified: upstream/trunk/src/gpasswd.c
===================================================================
--- upstream/trunk/src/gpasswd.c 2007-12-27 18:27:57 UTC (rev 1505)
+++ upstream/trunk/src/gpasswd.c 2007-12-27 18:52:40 UTC (rev 1506)
@@ -43,7 +43,7 @@
#include "groupio.h"
#include "nscd.h"
#include "prototypes.h"
-#ifdef SHADOWGRP
+#ifdef SHADOWGRP
#include "sgroupio.h"
#endif
/*
@@ -69,7 +69,7 @@
static char *members = NULL;
#ifdef SHADOWGRP
/* The new list of group administrators set with -A */
-static char*admins = NULL;
+static char *admins = NULL;
#endif
/* The name of the caller */
static char *myname = NULL;
@@ -88,6 +88,13 @@
static RETSIGTYPE catch_signals (int killed);
static int check_list (const char *users);
static void process_flags (int argc, char **argv);
+static void open_files (void);
+static void close_files (void);
+#ifdef SHADOWGRP
+static void update_group (struct group *gr, struct sgrp *sg);
+#else
+static void update_group (struct group *gr);
+#endif
/*
* usage - display usage message
@@ -97,7 +104,7 @@
fprintf (stderr, _("Usage: %s [-r|-R] group\n"), Prog);
fprintf (stderr, _(" %s [-a user] group\n"), Prog);
fprintf (stderr, _(" %s [-d user] group\n"), Prog);
-#ifdef SHADOWGRP
+#ifdef SHADOWGRP
fprintf (stderr,
_(" %s [-A user,...] [-M user,...] group\n"), Prog);
#else
@@ -255,6 +262,126 @@
}
/*
+ * open_files - lock and open the group databases
+ *
+ * It will call exit in case of error.
+ */
+static void open_files (void)
+{
+ if (gr_lock () == 0) {
+ fprintf (stderr, _("%s: can't get lock\n"), Prog);
+ SYSLOG ((LOG_WARN, "failed to get lock for /etc/group"));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "locking /etc/group", group, -1, 0);
+#endif
+ exit (1);
+ }
+#ifdef SHADOWGRP
+ if (is_shadowgrp && (sgr_lock () == 0)) {
+ fprintf (stderr, _("%s: can't get shadow lock\n"), Prog);
+ SYSLOG ((LOG_WARN, "failed to get lock for /etc/gshadow"));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "locking /etc/gshadow", group, -1, 0);
+#endif
+ exit (1);
+ }
+#endif
+ if (gr_open (O_RDWR) == 0) {
+ fprintf (stderr, _("%s: can't open file\n"), Prog);
+ SYSLOG ((LOG_WARN, "cannot open /etc/group"));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "opening /etc/group", group, -1, 0);
+#endif
+ exit (1);
+ }
+#ifdef SHADOWGRP
+ if (is_shadowgrp && (sgr_open (O_RDWR) == 0)) {
+ fprintf (stderr, _("%s: can't open shadow file\n"), Prog);
+ SYSLOG ((LOG_WARN, "cannot open /etc/gshadow"));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "opening /etc/gshadow", group, -1, 0);
+#endif
+ exit (1);
+ }
+#endif
+}
+
+/*
+ * close_files - close and unlock the group databases
+ *
+ * This cause any changes in the databases to be committed.
+ *
+ * It will call exit in case of error.
+ */
+static void close_files (void)
+{
+ if (gr_close () == 0) {
+ fprintf (stderr, _("%s: can't re-write file\n"), Prog);
+ SYSLOG ((LOG_WARN, "cannot re-write /etc/group"));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "rewriting /etc/group", group, -1, 0);
+#endif
+ exit (1);
+ }
+#ifdef SHADOWGRP
+ if (is_shadowgrp && (sgr_close () == 0)) {
+ fprintf (stderr, _("%s: can't re-write shadow file\n"), Prog);
+ SYSLOG ((LOG_WARN, "cannot re-write /etc/gshadow"));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "rewriting /etc/gshadow", group, -1, 0);
+#endif
+ exit (1);
+ }
+ if (is_shadowgrp) {
+ /* TODO: same logging as in open_files & for /etc/group */
+ sgr_unlock ();
+ }
+#endif
+ if (gr_unlock () == 0) {
+ fprintf (stderr, _("%s: can't unlock file\n"), Prog);
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "unlocking group file", group, -1, 0);
+#endif
+ exit (1);
+ }
+}
+
+#ifdef SHADOWGRP
+static void update_group (struct group *gr, struct sgrp *sg)
+#else
+static void update_group (struct group *gr)
+#endif
+{
+ if (!gr_update (gr)) {
+ fprintf (stderr, _("%s: can't update entry\n"), Prog);
+ SYSLOG ((LOG_WARN, "cannot update /etc/group"));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "updating /etc/group", group, -1, 0);
+#endif
+ exit (1);
+ }
+#ifdef SHADOWGRP
+ if (is_shadowgrp && !sgr_update (sg)) {
+ fprintf (stderr, _("%s: can't update shadow entry\n"), Prog);
+ SYSLOG ((LOG_WARN, "cannot update /etc/gshadow"));
+#ifdef WITH_AUDIT
+ audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
+ "updating /etc/gshadow", group, -1, 0);
+#endif
+ exit (1);
+ }
+#endif
+}
+
+/*
* gpasswd - administer the /etc/group file
*
* -a user add user to the named group
@@ -272,7 +399,7 @@
struct group grent;
static char pass[BUFSIZ];
-#ifdef SHADOWGRP
+#ifdef SHADOWGRP
struct sgrp const*sg = NULL;
struct sgrp sgent;
#endif
@@ -373,7 +500,7 @@
#endif
exit (1);
}
-#ifdef SHADOWGRP
+#ifdef SHADOWGRP
if (!sgr_open (O_RDONLY)) {
fprintf (stderr, _("%s: can't open shadow file\n"), Prog);
SYSLOG ((LOG_WARN, "cannot open /etc/gshadow"));
@@ -481,7 +608,7 @@
*/
if (rflg) {
grent.gr_passwd = ""; /* XXX warning: const */
-#ifdef SHADOWGRP
+#ifdef SHADOWGRP
sgent.sg_passwd = ""; /* XXX warning: const */
#endif
#ifdef WITH_AUDIT
@@ -497,7 +624,7 @@
* field to "!".
*/
grent.gr_passwd = "!"; /* XXX warning: const */
-#ifdef SHADOWGRP
+#ifdef SHADOWGRP
sgent.sg_passwd = "!"; /* XXX warning: const */
#endif
#ifdef WITH_AUDIT
@@ -516,7 +643,7 @@
if (aflg) {
printf (_("Adding user %s to group %s\n"), user, group);
grent.gr_mem = add_list (grent.gr_mem, user);
-#ifdef SHADOWGRP
+#ifdef SHADOWGRP
sgent.sg_mem = add_list (sgent.sg_mem, user);
#endif
#ifdef WITH_AUDIT
@@ -541,7 +668,7 @@
removed = 1;
grent.gr_mem = del_list (grent.gr_mem, user);
}
-#ifdef SHADOWGRP
+#ifdef SHADOWGRP
if (is_on_list (sgent.sg_mem, user)) {
removed = 1;
sgent.sg_mem = del_list (sgent.sg_mem, user);
@@ -564,7 +691,7 @@
user, group, myname));
goto output;
}
-#ifdef SHADOWGRP
+#ifdef SHADOWGRP
/*
* Replacing the entire list of administators is simple. Check the
* list to make sure everyone is a real user. Then slap the new list
@@ -621,7 +748,7 @@
signal (SIGINT, catch_signals);
signal (SIGQUIT, catch_signals);
signal (SIGTERM, catch_signals);
-#ifdef SIGTSTP
+#ifdef SIGTSTP
signal (SIGTSTP, catch_signals);
#endif
@@ -698,97 +825,16 @@
}
pwd_init ();
- if (!gr_lock ()) {
- fprintf (stderr, _("%s: can't get lock\n"), Prog);
- SYSLOG ((LOG_WARN, "failed to get lock for /etc/group"));
-#ifdef WITH_AUDIT
- audit_logger (AUDIT_USER_CHAUTHTOK, Prog, "locking /etc/group",
- group, -1, 0);
+ open_files ();
+
+#ifdef SHADOWGRP
+ update_group (&grent, &sgent);
+#else
+ update_group (&grent);
#endif
- exit (1);
- }
-#ifdef SHADOWGRP
- if (is_shadowgrp && !sgr_lock ()) {
- fprintf (stderr, _("%s: can't get shadow lock\n"), Prog);
- SYSLOG ((LOG_WARN, "failed to get lock for /etc/gshadow"));
-#ifdef WITH_AUDIT
- audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
- "locking /etc/gshadow", group, -1, 0);
-#endif
- exit (1);
- }
-#endif
- if (!gr_open (O_RDWR)) {
- fprintf (stderr, _("%s: can't open file\n"), Prog);
- SYSLOG ((LOG_WARN, "cannot open /etc/group"));
-#ifdef WITH_AUDIT
- audit_logger (AUDIT_USER_CHAUTHTOK, Prog, "opening /etc/group",
- group, -1, 0);
-#endif
- exit (1);
- }
-#ifdef SHADOWGRP
- if (is_shadowgrp && !sgr_open (O_RDWR)) {
- fprintf (stderr, _("%s: can't open shadow file\n"), Prog);
- SYSLOG ((LOG_WARN, "cannot open /etc/gshadow"));
-#ifdef WITH_AUDIT
- audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
- "opening /etc/gshadow", group, -1, 0);
-#endif
- exit (1);
- }
-#endif
- if (!gr_update (&grent)) {
- fprintf (stderr, _("%s: can't update entry\n"), Prog);
- SYSLOG ((LOG_WARN, "cannot update /etc/group"));
-#ifdef WITH_AUDIT
- audit_logger (AUDIT_USER_CHAUTHTOK, Prog, "updating /etc/group",
- group, -1, 0);
-#endif
- exit (1);
- }
-#ifdef SHADOWGRP
- if (is_shadowgrp && !sgr_update (&sgent)) {
- fprintf (stderr, _("%s: can't update shadow entry\n"), Prog);
- SYSLOG ((LOG_WARN, "cannot update /etc/gshadow"));
-#ifdef WITH_AUDIT
- audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
- "updating /etc/gshadow", group, -1, 0);
-#endif
- exit (1);
- }
-#endif
- if (!gr_close ()) {
- fprintf (stderr, _("%s: can't re-write file\n"), Prog);
- SYSLOG ((LOG_WARN, "cannot re-write /etc/group"));
-#ifdef WITH_AUDIT
- audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
- "rewriting /etc/group", group, -1, 0);
-#endif
- exit (1);
- }
-#ifdef SHADOWGRP
- if (is_shadowgrp && !sgr_close ()) {
- fprintf (stderr, _("%s: can't re-write shadow file\n"), Prog);
- SYSLOG ((LOG_WARN, "cannot re-write /etc/gshadow"));
-#ifdef WITH_AUDIT
- audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
- "rewriting /etc/gshadow", group, -1, 0);
-#endif
- exit (1);
- }
- if (is_shadowgrp)
- sgr_unlock ();
-#endif
- if (!gr_unlock ()) {
- fprintf (stderr, _("%s: can't unlock file\n"), Prog);
-#ifdef WITH_AUDIT
- audit_logger (AUDIT_USER_CHAUTHTOK, Prog,
- "unlocking group file", group, -1, 0);
-#endif
- exit (1);
- }
+ close_files ();
+
nscd_flush_cache ("group");
exit (E_SUCCESS);
More information about the Pkg-shadow-commits
mailing list