X-Git-Url: https://mattmccutchen.net/rsync/rsync.git/blobdiff_plain/d960af72b20341ef7bab576de9abb483b05377ef..56017d3150671e08b309a1b6171591b39166c3fa:/util.c diff --git a/util.c b/util.c index bad2faed..bec9a931 100644 --- a/util.c +++ b/util.c @@ -534,24 +534,32 @@ void kill_all(int sig) } } -/** Turn a user name into a uid */ -int name_to_uid(const char *name, uid_t *uid_p) +/* Parse a user name or (optionally) a number into a uid */ +int user_to_uid(const char *name, uid_t *uid_p, BOOL num_ok) { struct passwd *pass; if (!name || !*name) return 0; + if (num_ok && name[strspn(name, "0123456789")] == '\0') { + *uid_p = atol(name); + return 1; + } if (!(pass = getpwnam(name))) return 0; *uid_p = pass->pw_uid; return 1; } -/** Turn a group name into a gid */ -int name_to_gid(const char *name, gid_t *gid_p) +/* Parse a group name or (optionally) a number into a gid */ +int group_to_gid(const char *name, gid_t *gid_p, BOOL num_ok) { struct group *grp; if (!name || !*name) return 0; + if (num_ok && name[strspn(name, "0123456789")] == '\0') { + *gid_p = atol(name); + return 1; + } if (!(grp = getgrnam(name))) return 0; *gid_p = grp->gr_gid;