- Updated the address for the FSF in the opening comment.
[rsync/rsync.git] / uidlist.c
index dbffb05..5b25243 100644 (file)
--- a/uidlist.c
+++ b/uidlist.c
@@ -1,32 +1,33 @@
 /*
-   Copyright (C) Andrew Tridgell 1996
-   Copyright (C) Paul Mackerras 1996
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   (at your option) any later version.
-
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-/* handle the mapping of uid/gid and user/group names between systems.
-   If the source username/group does not exist on the target then use
-   the numeric IDs. Never do any mapping for uid=0 or gid=0 as these
-   are special.
-*/
+ * Handle the mapping of uid/gid and user/group names between systems.
+ *
+ * Copyright (C) 1996 Andrew Tridgell
+ * Copyright (C) 1996 Paul Mackerras
+ * Copyright (C) 2004, 2005, 2006 Wayne Davison
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/* If the source username/group does not exist on the target then use
+ * the numeric IDs.  Never do any mapping for uid=0 or gid=0 as these
+ * are special. */
 
 #include "rsync.h"
 
 #ifdef HAVE_GETGROUPS
-# if !defined(GETGROUPS_T)
+# ifndef GETGROUPS_T
 #  define GETGROUPS_T gid_t
 # endif
 #endif
@@ -81,7 +82,7 @@ static char *gid_to_name(gid_t gid)
 static int map_uid(int id, char *name)
 {
        uid_t uid;
-       if (uid != 0 && name_to_uid(name, &uid))
+       if (id != 0 && name_to_uid(name, &uid))
                return uid;
        return id;
 }
@@ -89,7 +90,7 @@ static int map_uid(int id, char *name)
 static int map_gid(int id, char *name)
 {
        gid_t gid;
-       if (gid != 0 && name_to_gid(name, &gid))
+       if (id != 0 && name_to_gid(name, &gid))
                return gid;
        return id;
 }
@@ -161,7 +162,7 @@ static struct idlist *recv_add_uid(int id, char *name)
        int id2 = name ? map_uid(id, name) : id;
        struct idlist *node;
 
-       node = add_to_list(&uidlist, id, name, map_uid(id, name));
+       node = add_to_list(&uidlist, id, name, id2);
 
        if (verbose > 3) {
                rprintf(FINFO, "uid %d(%s) maps to %d\n",
@@ -324,7 +325,6 @@ void recv_uid_list(int f, struct file_list *flist)
                }
        }
 
-
        if (preserve_gid && !numeric_ids) {
                /* read the gid list */
                while ((id = read_int(f)) != 0) {
@@ -337,8 +337,7 @@ void recv_uid_list(int f, struct file_list *flist)
                }
        }
 
-       /* now convert the uid/gid of all files in the list to the mapped
-        * uid/gid */
+       /* Now convert all the uids/gids from sender values to our values. */
        if (am_root && preserve_uid && !numeric_ids) {
                for (i = 0; i < flist->count; i++)
                        flist->files[i]->uid = match_uid(flist->files[i]->uid);