summaryrefslogtreecommitdiffstats
path: root/src/responder/sudo/sudosrv_cache.c
diff options
context:
space:
mode:
authorPavel Březina <pbrezina@redhat.com>2012-02-22 16:41:45 +0100
committerStephen Gallagher <sgallagh@redhat.com>2012-02-23 20:53:46 -0500
commit278284224aa10805d58c978977e43b1d1126f9b1 (patch)
treef3f55699f37ef2bb95b006c81e74921f00f57635 /src/responder/sudo/sudosrv_cache.c
parentb4adc08bcc1cc225133146163989301b607c79b5 (diff)
downloadsssd-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.c39
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;
}