]> git.cameronkatri.com Git - pw-darwin.git/commitdiff
Revert user comparison back to user names as some user can share uids (root/toor
authorBaptiste Daroussin <bapt@FreeBSD.org>
Tue, 19 Jun 2012 11:39:56 +0000 (11:39 +0000)
committerBaptiste Daroussin <bapt@FreeBSD.org>
Tue, 19 Jun 2012 11:39:56 +0000 (11:39 +0000)
for example)

get the username information from old_pw structures to still allow renaming of a
user.

Reported by: Claude Buisson <clbuisson@orange.fr>
Approved by: des (mentor)
MFC after: 3 weeks

libutil/pw_util.c

index 63c63de81aa68c755619ef69fc06b79fe9c8895f..4bf3001ffe79b6f2e7b98c829b98ca51aa1460aa 100644 (file)
@@ -437,14 +437,21 @@ pw_copy(int ffd, int tfd, const struct passwd *pw, struct passwd *old_pw)
        size_t len;
        int eof, readlen;
 
-       spw = pw;
+       if (old_pw == NULL && pw == NULL)
+                       return (-1);
+
+       spw = old_pw;
+       /* deleting a user */
        if (pw == NULL) {
                line = NULL;
-               if (old_pw == NULL)
+       } else {
+               if ((line = pw_make(pw)) == NULL)
                        return (-1);
-               spw = old_pw;
-       } else if ((line = pw_make(pw)) == NULL)
-               return (-1);
+       }
+
+       /* adding a user */
+       if (spw == NULL)
+               spw = pw;
 
        eof = 0;
        len = 0;
@@ -511,7 +518,7 @@ pw_copy(int ffd, int tfd, const struct passwd *pw, struct passwd *old_pw)
                 */
 
                *q = t;
-               if (fpw == NULL || fpw->pw_uid != spw->pw_uid) {
+               if (fpw == NULL || strcmp(fpw->pw_name, spw->pw_name) != 0) {
                        /* nope */
                        if (fpw != NULL)
                                free(fpw);