179 lines
5.2 KiB
Diff
179 lines
5.2 KiB
Diff
|
--- shadow-4.0.18.1/src/usermod.c.groupLoop 2007-05-25 11:51:33.000000000 +0200
|
||
|
+++ shadow-4.0.18.1/src/usermod.c 2007-05-25 11:51:33.000000000 +0200
|
||
|
@@ -628,7 +628,7 @@
|
||
|
continue;
|
||
|
|
||
|
changed = 0;
|
||
|
- if (!gr_update (ngrp)) {
|
||
|
+ if (!gr_update_entry (grp, ngrp)) {
|
||
|
fprintf (stderr,
|
||
|
_("%s: error adding new group entry\n"), Prog);
|
||
|
SYSLOG ((LOG_ERR, "error adding group entry"));
|
||
|
@@ -770,7 +770,7 @@
|
||
|
/*
|
||
|
* Update the group entry to reflect the changes.
|
||
|
*/
|
||
|
- if (!sgr_update (nsgrp)) {
|
||
|
+ if (!sgr_update_entry (sgrp, nsgrp)) {
|
||
|
fprintf (stderr,
|
||
|
_("%s: error adding new group entry\n"), Prog);
|
||
|
SYSLOG ((LOG_ERR, "error adding shadow group entry"));
|
||
|
--- shadow-4.0.18.1/src/userdel.c.groupLoop 2007-05-25 11:51:33.000000000 +0200
|
||
|
+++ shadow-4.0.18.1/src/userdel.c 2007-05-25 11:51:33.000000000 +0200
|
||
|
@@ -153,7 +153,7 @@
|
||
|
exit (13); /* XXX */
|
||
|
}
|
||
|
ngrp->gr_mem = del_list (ngrp->gr_mem, user_name);
|
||
|
- if (!gr_update (ngrp))
|
||
|
+ if (!gr_update_entry (grp, ngrp))
|
||
|
fprintf (stderr,
|
||
|
_("%s: error updating group entry\n"), Prog);
|
||
|
|
||
|
@@ -252,7 +252,7 @@
|
||
|
if (was_admin)
|
||
|
nsgrp->sg_adm = del_list (nsgrp->sg_adm, user_name);
|
||
|
|
||
|
- if (!sgr_update (nsgrp))
|
||
|
+ if (!sgr_update_entry (sgrp, nsgrp))
|
||
|
fprintf (stderr,
|
||
|
_("%s: error updating group entry\n"), Prog);
|
||
|
#ifdef WITH_AUDIT
|
||
|
--- shadow-4.0.18.1/src/useradd.c.groupLoop 2007-05-25 11:51:33.000000000 +0200
|
||
|
+++ shadow-4.0.18.1/src/useradd.c 2007-05-25 11:54:28.000000000 +0200
|
||
|
@@ -727,30 +727,6 @@
|
||
|
struct sgrp *nsgrp;
|
||
|
#endif
|
||
|
|
||
|
- /*
|
||
|
- * Test for unique entries of user_groups in /etc/group
|
||
|
- * pvrabec@redhat.com
|
||
|
- */
|
||
|
- char **user_groups_tmp = user_groups;
|
||
|
-
|
||
|
- while (*user_groups_tmp) {
|
||
|
- int count = 0;
|
||
|
-
|
||
|
- for (gr_rewind (), grp = gr_next (); grp && count < 2;
|
||
|
- grp = gr_next ()) {
|
||
|
- if (strcmp (*user_groups_tmp, grp->gr_name) == 0) {
|
||
|
- count++;
|
||
|
- }
|
||
|
- }
|
||
|
- if (count > 1) {
|
||
|
- fprintf (stderr,
|
||
|
- "%s: error not unique group names in group file\n",
|
||
|
- Prog);
|
||
|
- fail_exit (E_GRP_UPDATE);
|
||
|
- }
|
||
|
- user_groups_tmp++;
|
||
|
- }
|
||
|
-
|
||
|
/* Locking and opening of the group files moved to open_files() --gafton */
|
||
|
|
||
|
/*
|
||
|
@@ -780,7 +756,7 @@
|
||
|
* update the group entry to reflect the change.
|
||
|
*/
|
||
|
ngrp->gr_mem = add_list (ngrp->gr_mem, user_name);
|
||
|
- if (!gr_update (ngrp)) {
|
||
|
+ if (!gr_update_entry (grp, ngrp)) {
|
||
|
fprintf (stderr,
|
||
|
_("%s: error adding new group entry\n"), Prog);
|
||
|
fail_exit (E_GRP_UPDATE);
|
||
|
@@ -828,7 +804,7 @@
|
||
|
* update the group entry to reflect the change.
|
||
|
*/
|
||
|
nsgrp->sg_mem = add_list (nsgrp->sg_mem, user_name);
|
||
|
- if (!sgr_update (nsgrp)) {
|
||
|
+ if (!sgr_update_entry (sgrp, nsgrp)) {
|
||
|
fprintf (stderr,
|
||
|
_("%s: error adding new group entry\n"), Prog);
|
||
|
fail_exit (E_GRP_UPDATE);
|
||
|
--- shadow-4.0.18.1/lib/sgroupio.c.groupLoop 2005-08-31 19:24:56.000000000 +0200
|
||
|
+++ shadow-4.0.18.1/lib/sgroupio.c 2007-05-25 11:51:33.000000000 +0200
|
||
|
@@ -146,6 +146,13 @@
|
||
|
return commonio_update (&gshadow_db, (const void *) sg);
|
||
|
}
|
||
|
|
||
|
+int sgr_update_entry(const struct sgrp *oldgr, const struct sgrp *newgr)
|
||
|
+{
|
||
|
+ return commonio_update_entry(&gshadow_db, (const void *) oldgr,
|
||
|
+ (const void *) newgr);
|
||
|
+}
|
||
|
+
|
||
|
+
|
||
|
int sgr_remove (const char *name)
|
||
|
{
|
||
|
return commonio_remove (&gshadow_db, name);
|
||
|
--- shadow-4.0.18.1/lib/groupio.c.groupLoop 2005-08-31 19:24:56.000000000 +0200
|
||
|
+++ shadow-4.0.18.1/lib/groupio.c 2007-05-25 11:51:33.000000000 +0200
|
||
|
@@ -128,6 +128,12 @@
|
||
|
return commonio_remove (&group_db, name);
|
||
|
}
|
||
|
|
||
|
+int gr_update_entry(const struct group *oldgr, const struct group *newgr)
|
||
|
+{
|
||
|
+ return commonio_update_entry(&group_db, (const void *) oldgr,
|
||
|
+ (const void *) newgr);
|
||
|
+}
|
||
|
+
|
||
|
int gr_rewind (void)
|
||
|
{
|
||
|
return commonio_rewind (&group_db);
|
||
|
--- shadow-4.0.18.1/lib/sgroupio.h.groupLoop 2005-03-31 07:14:49.000000000 +0200
|
||
|
+++ shadow-4.0.18.1/lib/sgroupio.h 2007-05-25 11:51:33.000000000 +0200
|
||
|
@@ -11,4 +11,5 @@
|
||
|
extern int sgr_rewind (void);
|
||
|
extern int sgr_unlock (void);
|
||
|
extern int sgr_update (const struct sgrp *);
|
||
|
+extern int sgr_update_entry(const struct sgrp *oldgr, const struct sgrp *newgr);
|
||
|
extern int sgr_sort (void);
|
||
|
--- shadow-4.0.18.1/lib/commonio.c.groupLoop 2007-05-25 11:51:33.000000000 +0200
|
||
|
+++ shadow-4.0.18.1/lib/commonio.c 2007-05-25 11:51:33.000000000 +0200
|
||
|
@@ -826,6 +826,36 @@
|
||
|
return 1;
|
||
|
}
|
||
|
|
||
|
+int commonio_update_entry(struct commonio_db *db, const void *oldgr,
|
||
|
+ const void *newgr)
|
||
|
+{
|
||
|
+ struct commonio_entry *tmp;
|
||
|
+
|
||
|
+ if (!db->isopen || db->readonly) {
|
||
|
+ errno = EINVAL;
|
||
|
+ return 0;
|
||
|
+ }
|
||
|
+
|
||
|
+ tmp = db->head;
|
||
|
+ while (tmp != NULL) {
|
||
|
+ if (oldgr == tmp->eptr)
|
||
|
+ break;
|
||
|
+ tmp = tmp->next;
|
||
|
+ }
|
||
|
+
|
||
|
+ /* Didn't find this in the database; hop out */
|
||
|
+ if (tmp == NULL)
|
||
|
+ return 0;
|
||
|
+
|
||
|
+ tmp->eptr = db->ops->dup(newgr);
|
||
|
+ if (tmp->eptr == NULL)
|
||
|
+ return 1;
|
||
|
+ tmp->changed = 1;
|
||
|
+
|
||
|
+ db->changed = 1;
|
||
|
+
|
||
|
+ return 1;
|
||
|
+}
|
||
|
|
||
|
void commonio_del_entry (struct commonio_db *db, const struct commonio_entry *p)
|
||
|
{
|
||
|
--- shadow-4.0.18.1/lib/groupio.h.groupLoop 2005-03-31 07:14:49.000000000 +0200
|
||
|
+++ shadow-4.0.18.1/lib/groupio.h 2007-05-25 11:51:33.000000000 +0200
|
||
|
@@ -10,4 +10,6 @@
|
||
|
extern int gr_rewind (void);
|
||
|
extern int gr_unlock (void);
|
||
|
extern int gr_update (const struct group *);
|
||
|
+extern int gr_update_entry(const struct group *oldgr, const struct group *newgr);
|
||
|
extern int gr_sort (void);
|
||
|
+
|