Page MenuHomeFreeBSD

D32993.1776902837.diff
No OneTemporary

Size
1 KB
Referenced Files
None
Subscribers
None

D32993.1776902837.diff

Index: mountd.c
===================================================================
--- mountd.c
+++ mountd.c
@@ -3518,6 +3518,8 @@
struct group *gr;
gid_t groups[NGROUPS_MAX + 1];
int ngroups;
+ unsigned long name_ul;
+ char *end = NULL;
/*
* Set up the unprivileged user.
@@ -3532,10 +3534,11 @@
names = namelist;
name = strsep_quote(&names, ":");
/* Bug? name could be NULL here */
- if (isdigit(*name) || *name == '-')
- pw = getpwuid(atoi(name));
- else
+ name_ul = strtoul(name, &end, 10);
+ if (*end != '\0' || end == name)
pw = getpwnam(name);
+ else
+ pw = getpwuid((uid_t)name_ul);
/*
* Credentials specified as those of a user.
*/
@@ -3557,8 +3560,9 @@
if (ngroups > 1 && groups[0] == groups[1]) {
ngroups--;
inpos = 2;
- } else
+ } else {
inpos = 1;
+ }
if (ngroups > NGROUPS_MAX)
ngroups = NGROUPS_MAX;
if (ngroups > SMALLNGROUPS)
@@ -3575,23 +3579,21 @@
*/
if (pw != NULL)
cr->cr_uid = pw->pw_uid;
- else if (isdigit(*name) || *name == '-')
- cr->cr_uid = atoi(name);
- else {
- syslog(LOG_ERR, "unknown user: %s", name);
- return;
- }
+ else
+ cr->cr_uid = name_ul;
+
cr->cr_ngroups = 0;
while (names != NULL && *names != '\0' && cr->cr_ngroups < NGROUPS_MAX) {
name = strsep_quote(&names, ":");
- if (isdigit(*name) || *name == '-') {
- groups[cr->cr_ngroups++] = atoi(name);
- } else {
+ name_ul = strtoul(name, &end, 10);
+ if (*end != '\0' || end == name) {
if ((gr = getgrnam(name)) == NULL) {
syslog(LOG_ERR, "unknown group: %s", name);
continue;
}
groups[cr->cr_ngroups++] = gr->gr_gid;
+ } else {
+ groups[cr->cr_ngroups++] = name_ul;
}
}
if (names != NULL && *names != '\0' && cr->cr_ngroups == NGROUPS_MAX)

File Metadata

Mime Type
text/plain
Expires
Thu, Apr 23, 12:07 AM (8 s ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28412385
Default Alt Text
D32993.1776902837.diff (1 KB)

Event Timeline