version 1.1.1.2, 2012/05/29 12:26:49
|
version 1.1.1.3, 2012/10/09 09:29:52
|
Line 154 userlist_matches(struct passwd *pw, struct member_list
|
Line 154 userlist_matches(struct passwd *pw, struct member_list
|
* Returns ALLOW, DENY or UNSPEC. |
* Returns ALLOW, DENY or UNSPEC. |
*/ |
*/ |
static int |
static int |
_runaslist_matches(struct member_list *user_list, struct member_list *group_list) | _runaslist_matches(struct member_list *user_list, |
| struct member_list *group_list, struct member **matching_user, |
| struct member **matching_group) |
{ |
{ |
struct member *m; |
struct member *m; |
struct alias *a; |
struct alias *a; |
Line 183 _runaslist_matches(struct member_list *user_list, stru
|
Line 185 _runaslist_matches(struct member_list *user_list, stru
|
break; |
break; |
case ALIAS: |
case ALIAS: |
if ((a = alias_find(m->name, RUNASALIAS)) != NULL) { |
if ((a = alias_find(m->name, RUNASALIAS)) != NULL) { |
rval = _runaslist_matches(&a->members, &empty); | rval = _runaslist_matches(&a->members, &empty, |
| matching_user, NULL); |
if (rval != UNSPEC) |
if (rval != UNSPEC) |
user_matched = m->negated ? !rval : rval; |
user_matched = m->negated ? !rval : rval; |
break; |
break; |
Line 193 _runaslist_matches(struct member_list *user_list, stru
|
Line 196 _runaslist_matches(struct member_list *user_list, stru
|
if (userpw_matches(m->name, runas_pw->pw_name, runas_pw)) |
if (userpw_matches(m->name, runas_pw->pw_name, runas_pw)) |
user_matched = !m->negated; |
user_matched = !m->negated; |
break; |
break; |
|
case MYSELF: |
|
if (!ISSET(sudo_user.flags, RUNAS_USER_SPECIFIED) || |
|
strcmp(user_name, runas_pw->pw_name) == 0) |
|
user_matched = !m->negated; |
|
break; |
} |
} |
if (user_matched != UNSPEC) | if (user_matched != UNSPEC) { |
| if (matching_user != NULL && m->type != ALIAS) |
| *matching_user = m; |
break; |
break; |
|
} |
} |
} |
} |
} |
|
|
Line 211 _runaslist_matches(struct member_list *user_list, stru
|
Line 222 _runaslist_matches(struct member_list *user_list, stru
|
break; |
break; |
case ALIAS: |
case ALIAS: |
if ((a = alias_find(m->name, RUNASALIAS)) != NULL) { |
if ((a = alias_find(m->name, RUNASALIAS)) != NULL) { |
rval = _runaslist_matches(&empty, &a->members); | rval = _runaslist_matches(&empty, &a->members, |
| NULL, matching_group); |
if (rval != UNSPEC) |
if (rval != UNSPEC) |
group_matched = m->negated ? !rval : rval; |
group_matched = m->negated ? !rval : rval; |
break; |
break; |
Line 222 _runaslist_matches(struct member_list *user_list, stru
|
Line 234 _runaslist_matches(struct member_list *user_list, stru
|
group_matched = !m->negated; |
group_matched = !m->negated; |
break; |
break; |
} |
} |
if (group_matched != UNSPEC) | if (group_matched != UNSPEC) { |
| if (matching_group != NULL && m->type != ALIAS) |
| *matching_group = m; |
break; |
break; |
|
} |
} |
} |
if (group_matched == UNSPEC) { |
if (group_matched == UNSPEC) { |
if (runas_pw != NULL && runas_pw->pw_gid == runas_gr->gr_gid) |
if (runas_pw != NULL && runas_pw->pw_gid == runas_gr->gr_gid) |
Line 239 _runaslist_matches(struct member_list *user_list, stru
|
Line 254 _runaslist_matches(struct member_list *user_list, stru
|
} |
} |
|
|
int |
int |
runaslist_matches(struct member_list *user_list, struct member_list *group_list) | runaslist_matches(struct member_list *user_list, |
| struct member_list *group_list, struct member **matching_user, |
| struct member **matching_group) |
{ |
{ |
alias_seqno++; |
alias_seqno++; |
return _runaslist_matches(user_list ? user_list : &empty, |
return _runaslist_matches(user_list ? user_list : &empty, |
group_list ? group_list : &empty); | group_list ? group_list : &empty, matching_user, matching_group); |
} |
} |
|
|
/* |
/* |
Line 700 usergr_matches(char *group, char *user, struct passwd
|
Line 717 usergr_matches(char *group, char *user, struct passwd
|
|
|
done: |
done: |
if (pw0 != NULL) |
if (pw0 != NULL) |
pw_delref(pw0); | sudo_pw_delref(pw0); |
|
|
debug_return_bool(matched); |
debug_return_bool(matched); |
} |
} |