~ubuntu-branches/ubuntu/saucy/sudo/saucy

« back to all changes in this revision

Viewing changes to plugins/sudoers/match.c

  • Committer: Package Import Robot
  • Author(s): Stéphane Graber
  • Date: 2012-11-16 09:31:32 UTC
  • mfrom: (1.4.13)
  • Revision ID: package-import@ubuntu.com-20121116093132-ptext55adlzbrq6y
Tags: 1.8.6p3-0ubuntu1
* New upstream release (1.8.6p3).
* Add patch to fix building with sssd when ldap is disabled.
* Drop sudo.manpages and sudo-ldap.manpages as the upstream build system
  now does the right thing here.
* Build the main sudo package with support for sssd, this doesn't add any
  additional build time or runtime dependency. sudo will dynamically load
  the sssd library if 'sss' is listed for the 'sudoers' nss service.

Show diffs side-by-side

added added

removed removed

Lines of Context:
154
154
 * Returns ALLOW, DENY or UNSPEC.
155
155
 */
156
156
static int
157
 
_runaslist_matches(struct member_list *user_list, struct member_list *group_list)
 
157
_runaslist_matches(struct member_list *user_list,
 
158
    struct member_list *group_list, struct member **matching_user,
 
159
    struct member **matching_group)
158
160
{
159
161
    struct member *m;
160
162
    struct alias *a;
183
185
                    break;
184
186
                case ALIAS:
185
187
                    if ((a = alias_find(m->name, RUNASALIAS)) != NULL) {
186
 
                        rval = _runaslist_matches(&a->members, &empty);
 
188
                        rval = _runaslist_matches(&a->members, &empty,
 
189
                            matching_user, NULL);
187
190
                        if (rval != UNSPEC)
188
191
                            user_matched = m->negated ? !rval : rval;
189
192
                        break;
193
196
                    if (userpw_matches(m->name, runas_pw->pw_name, runas_pw))
194
197
                        user_matched = !m->negated;
195
198
                    break;
 
199
                case MYSELF:
 
200
                    if (!ISSET(sudo_user.flags, RUNAS_USER_SPECIFIED) ||
 
201
                        strcmp(user_name, runas_pw->pw_name) == 0)
 
202
                        user_matched = !m->negated;
 
203
                    break;
196
204
            }
197
 
            if (user_matched != UNSPEC)
 
205
            if (user_matched != UNSPEC) {
 
206
                if (matching_user != NULL && m->type != ALIAS)
 
207
                    *matching_user = m;
198
208
                break;
 
209
            }
199
210
        }
200
211
    }
201
212
 
211
222
                    break;
212
223
                case ALIAS:
213
224
                    if ((a = alias_find(m->name, RUNASALIAS)) != NULL) {
214
 
                        rval = _runaslist_matches(&empty, &a->members);
 
225
                        rval = _runaslist_matches(&empty, &a->members,
 
226
                            NULL, matching_group);
215
227
                        if (rval != UNSPEC)
216
228
                            group_matched = m->negated ? !rval : rval;
217
229
                        break;
222
234
                        group_matched = !m->negated;
223
235
                    break;
224
236
            }
225
 
            if (group_matched != UNSPEC)
 
237
            if (group_matched != UNSPEC) {
 
238
                if (matching_group != NULL && m->type != ALIAS)
 
239
                    *matching_group = m;
226
240
                break;
 
241
            }
227
242
        }
228
243
        if (group_matched == UNSPEC) {
229
244
            if (runas_pw != NULL && runas_pw->pw_gid == runas_gr->gr_gid)
239
254
}
240
255
 
241
256
int
242
 
runaslist_matches(struct member_list *user_list, struct member_list *group_list)
 
257
runaslist_matches(struct member_list *user_list,
 
258
    struct member_list *group_list, struct member **matching_user,
 
259
    struct member **matching_group)
243
260
{
244
261
    alias_seqno++;
245
262
    return _runaslist_matches(user_list ? user_list : &empty,
246
 
        group_list ? group_list : &empty);
 
263
        group_list ? group_list : &empty, matching_user, matching_group);
247
264
}
248
265
 
249
266
/*
700
717
 
701
718
done:
702
719
    if (pw0 != NULL)
703
 
        pw_delref(pw0);
 
720
        sudo_pw_delref(pw0);
704
721
 
705
722
    debug_return_bool(matched);
706
723
}