A struct member of type ALL should have its name field set to NULL.
This commit is contained in:
@@ -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:
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user