A struct member of type ALL should have its name field set to NULL.

This commit is contained in:
Todd C. Miller
2020-03-11 11:17:52 -06:00
parent 4eca443246
commit 3edd30a27d
2 changed files with 31 additions and 26 deletions

View File

@@ -148,19 +148,9 @@ array_to_member_list(void *a, sudo_ldap_iter_t iter)
break; break;
case '+': case '+':
m->type = NETGROUP; m->type = NETGROUP;
m->name = strdup(val);
if (m->name == NULL) {
free(m);
goto bad;
}
break; break;
case '%': case '%':
m->type = USERGROUP; m->type = USERGROUP;
m->name = strdup(val);
if (m->name == NULL) {
free(m);
goto bad;
}
break; break;
case 'A': case 'A':
if (strcmp(val, "ALL") == 0) { if (strcmp(val, "ALL") == 0) {
@@ -170,12 +160,13 @@ array_to_member_list(void *a, sudo_ldap_iter_t iter)
/* FALLTHROUGH */ /* FALLTHROUGH */
default: default:
m->type = WORD; m->type = WORD;
m->name = strdup(val); break;
if (m->name == NULL) { }
if (m->type != ALL && m->type != MYSELF) {
if ((m->name = strdup(val)) == NULL) {
free(m); free(m);
goto bad; goto bad;
} }
break;
} }
if (m->negated) if (m->negated)
TAILQ_INSERT_TAIL(&negated_members, m, entries); TAILQ_INSERT_TAIL(&negated_members, m, entries);
@@ -227,9 +218,6 @@ host_to_member(char *host)
if ((m = calloc(1, sizeof(*m))) == NULL) if ((m = calloc(1, sizeof(*m))) == NULL)
goto oom; goto oom;
m->negated = sudo_ldap_is_negated(&host); m->negated = sudo_ldap_is_negated(&host);
m->name = strdup(host);
if (m->name == NULL)
goto oom;
switch (*host) { switch (*host) {
case '+': case '+':
m->type = NETGROUP; m->type = NETGROUP;
@@ -248,6 +236,10 @@ host_to_member(char *host)
} }
break; break;
} }
if (m->type != ALL) {
if ((m->name = strdup(host)) == NULL)
goto oom;
}
debug_return_ptr(m); debug_return_ptr(m);
oom: oom:

View File

@@ -355,19 +355,32 @@ role_to_sudoers(struct sudoers_parse_tree *parse_tree, struct sudo_role *role,
U_("unable to allocate memory")); U_("unable to allocate memory"));
} }
m->negated = sudo_ldap_is_negated(&user); m->negated = sudo_ldap_is_negated(&user);
m->name = strdup(user); switch (*user) {
if (m->name == NULL) { case '\0':
sudo_fatalx(U_("%s: %s"), __func__, /* Empty RunAsUser means run as the invoking user. */
U_("unable to allocate memory")); m->type = MYSELF;
} break;
if (strcmp(user, "ALL") == 0) { case '+':
m->type = ALL;
} else if (*user == '+') {
m->type = NETGROUP; m->type = NETGROUP;
} else if (*user == '%') { break;
case '%':
m->type = USERGROUP; m->type = USERGROUP;
} else { break;
case 'A':
if (strcmp(user, "ALL") == 0) {
m->type = ALL;
break;
}
/* FALLTHROUGH */
default:
m->type = WORD; m->type = WORD;
break;
}
if (m->type != ALL && m->type != MYSELF) {
if ((m->name = strdup(user)) == NULL) {
sudo_fatalx(U_("%s: %s"), __func__,
U_("unable to allocate memory"));
}
} }
TAILQ_INSERT_TAIL(&us->users, m, entries); TAILQ_INSERT_TAIL(&us->users, m, entries);
} }