diff options
author | Pavel Březina <pbrezina@redhat.com> | 2012-02-22 16:41:45 +0100 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2012-02-23 20:53:46 -0500 |
commit | 278284224aa10805d58c978977e43b1d1126f9b1 (patch) | |
tree | f3f55699f37ef2bb95b006c81e74921f00f57635 /src/responder/sudo/sudosrv_cache.c | |
parent | b4adc08bcc1cc225133146163989301b607c79b5 (diff) | |
download | sssd-278284224aa10805d58c978977e43b1d1126f9b1.tar.gz sssd-278284224aa10805d58c978977e43b1d1126f9b1.tar.xz sssd-278284224aa10805d58c978977e43b1d1126f9b1.zip |
Honor case_sensitive option in sudo responder
https://fedorahosted.org/sssd/ticket/1205
Diffstat (limited to 'src/responder/sudo/sudosrv_cache.c')
-rw-r--r-- | src/responder/sudo/sudosrv_cache.c | 39 |
1 files changed, 33 insertions, 6 deletions
diff --git a/src/responder/sudo/sudosrv_cache.c b/src/responder/sudo/sudosrv_cache.c index a3a13cadf..ee44a5ad6 100644 --- a/src/responder/sudo/sudosrv_cache.c +++ b/src/responder/sudo/sudosrv_cache.c @@ -266,11 +266,23 @@ errno_t sudosrv_cache_lookup(hash_table_t *table, struct sysdb_attrs ***rules) { struct sss_domain_info *domain = dctx->domain; + char *name = NULL; errno_t ret; if (!check_next) { - return sudosrv_cache_lookup_internal(table, dctx->domain, username, - num_rules, rules); + if (username != NULL) { + name = sss_get_cased_name(NULL, username, + dctx->domain->case_sensitive); + if (name == NULL) { + DEBUG(SSSDBG_CRIT_FAILURE, ("Out of memory\n")); + ret = ENOMEM; + goto done; + } + } + + ret = sudosrv_cache_lookup_internal(table, dctx->domain, name, + num_rules, rules); + goto done; } while (domain != NULL) { @@ -279,15 +291,26 @@ errno_t sudosrv_cache_lookup(hash_table_t *table, continue; } - ret = sudosrv_cache_lookup_internal(table, domain, username, + if (username != NULL) { + talloc_free(name); + name = sss_get_cased_name(NULL, username, + dctx->domain->case_sensitive); + if (name == NULL) { + DEBUG(SSSDBG_CRIT_FAILURE, ("Out of memory\n")); + ret = ENOMEM; + goto done; + } + } + + ret = sudosrv_cache_lookup_internal(table, domain, name, num_rules, rules); if (ret == EOK) { /* user is in this domain */ dctx->domain = domain; - return ret; + goto done; } else if (ret != ENOENT) { /* error */ - return ret; + goto done; } /* user is not in this domain cache, check next */ @@ -295,5 +318,9 @@ errno_t sudosrv_cache_lookup(hash_table_t *table, } /* user is not in cache */ - return ENOENT; + ret = ENOENT; + +done: + talloc_free(name); + return ret; } |