+@@ -229,7 +229,7 @@ gid_t match_gid(gid_t gid)
+ return last_out = (gid_t)list->id2;
+ }
+
+- return last_out = recv_add_gid(gid, NULL);
++ return last_out = (gid_t)recv_add_id(&gidmap, (int)gid, NULL);
+ }
+
+ /* Add a uid to the list of uids. Only called on sending side. */
+@@ -311,7 +311,7 @@ uid_t recv_user_name(int f, uid_t uid)
+ if (!name)
+ out_of_memory("recv_user_name");
+ read_sbuf(f, name, len);
+- return recv_add_uid(uid, name); /* node keeps name's memory */
++ return (uid_t)recv_add_id(&uidmap, (int)uid, name); /* node keeps name's memory */
+ }
+
+ gid_t recv_group_name(int f, gid_t gid)
+@@ -321,7 +321,7 @@ gid_t recv_group_name(int f, gid_t gid)
+ if (!name)
+ out_of_memory("recv_group_name");
+ read_sbuf(f, name, len);
+- return recv_add_gid(gid, name); /* node keeps name's memory */
++ return (gid_t)recv_add_id(&gidmap, (int)gid, name); /* node keeps name's memory */
+ }
+
+ /* recv a complete uid/gid mapping from the peer and map the uid/gid
+@@ -344,15 +344,88 @@ void recv_uid_list(int f, struct file_li