X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/a2687b64a2eccb39cff400eafdedcaf0f9a2875a..6fe05820ff8597107d6e57b624f0e8417ba8fc05:/uidlist.c diff --git a/uidlist.c b/uidlist.c index d4cb7a03..170b9e62 100644 --- a/uidlist.c +++ b/uidlist.c @@ -32,6 +32,7 @@ # endif #endif +extern int verbose; extern int preserve_uid; extern int preserve_gid; extern int numeric_ids; @@ -125,7 +126,7 @@ static int is_in_group(gid_t gid) if (gid == last_in) return last_out; if (ngroups < -1) { - gid_t mygid = getgid(); + gid_t mygid = MY_GID(); ngroups = getgroups(0, 0); /* If that didn't work, perhaps 0 isn't treated specially? */ if (ngroups <= 0) @@ -140,6 +141,18 @@ static int is_in_group(gid_t gid) } if (n == ngroups) gidset[ngroups++] = mygid; + if (verbose > 3) { + char gidbuf[NGROUPS_MAX*16+32]; + int pos; + sprintf(gidbuf, "process has %d gid%s: ", + ngroups, ngroups == 1? "" : "s"); + pos = strlen(gidbuf); + for (n = 0; n < ngroups; n++) { + sprintf(gidbuf+pos, " %ld", (long)gidset[n]); + pos += strlen(gidbuf+pos); + } + rprintf(FINFO, "%s\n", gidbuf); + } } last_in = gid; @@ -151,8 +164,11 @@ static int is_in_group(gid_t gid) #else static gid_t mygid = GID_NONE; - if (mygid == GID_NONE) - mygid = getgid(); + if (mygid == GID_NONE) { + mygid = MY_GID(); + if (verbose > 3) + rprintf(FINFO, "process has gid %ld\n", (long)mygid); + } return gid == mygid; #endif } @@ -260,7 +276,7 @@ void send_uid_list(int f) } /* terminate the uid list with a 0 uid. We explicitly exclude - 0 from the list */ + * 0 from the list */ write_int(f, 0); } @@ -278,7 +294,7 @@ void send_uid_list(int f) } /* recv a complete uid/gid mapping from the peer and map the uid/gid - in the file list to local names */ + * in the file list to local names */ void recv_uid_list(int f, struct file_list *flist) { int id, i; @@ -305,6 +321,13 @@ void recv_uid_list(int f, struct file_list *flist) list->id2 = map_uid(id, name); free(name); } + if (verbose > 3) { + for (list = uidlist; list; list = list->next) { + rprintf(FINFO, "uid %ld (%s) maps to %ld\n", + (long)list->id, list->name, + (long)list->id2); + } + } } @@ -328,12 +351,19 @@ void recv_uid_list(int f, struct file_list *flist) list->id2 = GID_NONE; free(name); } + if (verbose > 3) { + for (list = gidlist; list; list = list->next) { + rprintf(FINFO, "gid %ld (%s) maps to %ld\n", + (long)list->id, list->name, + (long)list->id2); + } + } } if (!(am_root && preserve_uid) && !preserve_gid) return; /* now convert the uid/gid of all files in the list to the mapped - uid/gid */ + * uid/gid */ for (i = 0; i < flist->count; i++) { if (am_root && preserve_uid && flist->files[i]->uid != 0) flist->files[i]->uid = match_uid(flist->files[i]->uid);