}
static int
-sudo_ldap_check_runas_user(LDAP *ld, LDAPMessage *entry, int group_matched)
+sudo_ldap_check_runas_user(LDAP *ld, LDAPMessage *entry, int *group_matched)
{
struct berval **bv, **p;
char *val;
if (bv == NULL)
bv = ldap_get_values_len(ld, entry, "sudoRunAs"); /* old style */
if (bv == NULL) {
+ DPRINTF2("sudoRunAsUser: no result.");
+ if (*group_matched == UNSPEC) {
+ /* We haven't check for sudoRunAsGroup yet, check now. */
+ bv = ldap_get_values_len(ld, entry, "sudoRunAsGroup");
+ if (bv != NULL) {
+ *group_matched = false;
+ ldap_value_free_len(bv);
+ }
+ }
if (!ISSET(sudo_user.flags, RUNAS_USER_SPECIFIED))
debug_return_int(UNSPEC);
- switch (group_matched) {
+ switch (*group_matched) {
case UNSPEC:
/*
* No runas user or group entries. Match runas_default
/* get the values from the entry */
bv = ldap_get_values_len(ld, entry, "sudoRunAsGroup");
if (bv == NULL) {
+ DPRINTF2("sudoRunAsGroup: no result.");
if (!ISSET(sudo_user.flags, RUNAS_USER_SPECIFIED)) {
if (runas_pw->pw_gid == runas_gr->gr_gid)
ret = true; /* runas group matches passwd db */
if (ISSET(sudo_user.flags, RUNAS_GROUP_SPECIFIED))
group_matched = sudo_ldap_check_runas_group(ld, entry);
- user_matched = sudo_ldap_check_runas_user(ld, entry, group_matched);
+ user_matched = sudo_ldap_check_runas_user(ld, entry, &group_matched);
debug_return_bool(group_matched != false && user_matched != false);
}
}
static int
-sudo_sss_check_runas_user(struct sudo_sss_handle *handle, struct sss_sudo_rule *sss_rule, int group_matched)
+sudo_sss_check_runas_user(struct sudo_sss_handle *handle, struct sss_sudo_rule *sss_rule, int *group_matched)
{
const char *host = handle->ipa_host ? handle->ipa_host : user_runhost;
const char *shost = handle->ipa_shost ? handle->ipa_shost : user_srunhost;
break;
case ENOENT:
sudo_debug_printf(SUDO_DEBUG_INFO, "sudoRunAsUser: no result.");
+ if (*group_matched == UNSPEC) {
+ /* We haven't check for sudoRunAsGroup yet, check now. */
+ i = handle->fn_get_values(sss_rule, "sudoRunAsGroup", &val_array);
+ if (i == 0) {
+ *group_matched = false;
+ handle->fn_free_values(val_array);
+ }
+ }
if (!ISSET(sudo_user.flags, RUNAS_USER_SPECIFIED))
debug_return_int(UNSPEC);
- switch (group_matched) {
+ switch (*group_matched) {
case UNSPEC:
/*
* No runas user or group entries. Match runas_default
if (ISSET(sudo_user.flags, RUNAS_GROUP_SPECIFIED))
group_matched = sudo_sss_check_runas_group(handle, rule);
- user_matched = sudo_sss_check_runas_user(handle, rule, group_matched);
+ user_matched = sudo_sss_check_runas_user(handle, rule, &group_matched);
debug_return_bool(group_matched != false && user_matched != false);
}