|
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); |
| } |
} |