[Pkg-shadow-commits] r1560 - in upstream/trunk: . src

nekral-guest at alioth.debian.org nekral-guest at alioth.debian.org
Sat Dec 29 17:26:28 UTC 2007


Author: nekral-guest
Date: 2007-12-29 17:26:28 +0000 (Sat, 29 Dec 2007)
New Revision: 1560

Modified:
   upstream/trunk/ChangeLog
   upstream/trunk/NEWS
   upstream/trunk/src/newusers.c
Log:
Added support for gshadow.


Modified: upstream/trunk/ChangeLog
===================================================================
--- upstream/trunk/ChangeLog	2007-12-29 17:05:13 UTC (rev 1559)
+++ upstream/trunk/ChangeLog	2007-12-29 17:26:28 UTC (rev 1560)
@@ -1,5 +1,9 @@
 2007-12-29  Nicolas François  <nicolas.francois at centraliens.net>
 
+	* NEWS, src/newusers.c: Added support for gshadow.
+
+2007-12-29  Nicolas François  <nicolas.francois at centraliens.net>
+
 	* NEWS, src/newusers.c: Do not add the new user to the group's
 	members, because the group is already the primary group of the new
 	user.

Modified: upstream/trunk/NEWS
===================================================================
--- upstream/trunk/NEWS	2007-12-29 17:05:13 UTC (rev 1559)
+++ upstream/trunk/NEWS	2007-12-29 17:26:28 UTC (rev 1560)
@@ -31,6 +31,7 @@
 - newusers
   * The new users are no more added to the list of members of their groups
     because the membership is already set by their primary group.
+  * Added support for gshadow.
 
 shadow-4.0.18.2 -> shadow-4.1.0						09-12-2008
 

Modified: upstream/trunk/src/newusers.c
===================================================================
--- upstream/trunk/src/newusers.c	2007-12-29 17:05:13 UTC (rev 1559)
+++ upstream/trunk/src/newusers.c	2007-12-29 17:26:28 UTC (rev 1560)
@@ -53,6 +53,7 @@
 #include "groupio.h"
 #include "nscd.h"
 #include "pwio.h"
+#include "sgroupio.h"
 #include "shadowio.h"
 /*
  * Global variables
@@ -65,6 +66,9 @@
 static long sha_rounds = 5000;
 
 static int is_shadow;
+#ifdef SHADOWGRP
+static int is_shadow_grp;
+#endif
 
 /* local function prototypes */
 static void usage (void);
@@ -110,6 +114,9 @@
 	struct group grent;
 	char *members[1];
 	int i;
+#ifdef SHADOWGRP
+	const struct sgrp *sg;
+#endif
 
 	/*
 	 * Start by seeing if the named group already exists. This will be
@@ -119,6 +126,7 @@
 	if (NULL != grp) {
 		/* The user will use this ID for her primary group */
 		*ngid = grp->gr_gid;
+		/* Don't check gshadow */
 		return 0;
 	}
 
@@ -152,6 +160,7 @@
 				/* The user will use this ID for her
 				 * primary group */
 				*ngid = grp->gr_gid;
+				/* Don't check gshadow */
 				return 0;
 			}
 		}
@@ -191,7 +200,42 @@
 	grent.gr_mem = members;
 
 	*ngid = grent.gr_gid;
-	return !gr_update (&grent);
+
+#ifdef SHADOWGRP
+	if (is_shadow_grp) {
+		sg = sgr_locate (grp->gr_name);
+
+		if (NULL != sg) {
+			fprintf (stderr,
+			         _("%s: group %s is a shadow group, but does not exist in /etc/group\n"),
+			         Prog, grp->gr_name);
+			return -1;
+		}
+	}
+#endif
+
+	if (gr_update (&grent) == 0) {
+		return -1;
+	}
+
+#ifdef SHADOWGRP
+	if (is_shadow_grp) {
+		struct sgrp sgrent;
+		sgrent.sg_name = grent.gr_name;
+		sgrent.sg_passwd = "*";	/* XXX warning: const */
+		sgrent.sg_adm = NULL;
+		sgrent.sg_mem = members;
+
+		if (sgr_update (&sgrent) == 0) {
+			fprintf (stderr,
+			         _("%s: group %s created, failure during the creation of the corresponding gshadow group\n"),
+			         Prog, grent.gr_name);
+			return -1;
+		}
+	}
+#endif
+
+	return 0;
 }
 
 /*
@@ -557,6 +601,10 @@
 
 	is_shadow = spw_file_present ();
 
+#ifdef SHADOWGRP
+	is_shadow_grp = sgr_file_present ();
+#endif
+
 	open_files ();
 
 	/*




More information about the Pkg-shadow-commits mailing list