From 8a4a2b87f51462ac22bf6db93927484841f098c6 Mon Sep 17 00:00:00 2001 From: Lukas Slebodnik Date: Jan 23 2017 17:40:49 +0000 Subject: sysdb: Search also aliases in sysdb_search_object_by_name sysdb_search_object_by_name did not work well case insensitive domain. Resolves: https://fedorahosted.org/sssd/ticket/3284 Reviewed-by: Pavel Březina --- diff --git a/src/db/sysdb.h b/src/db/sysdb.h index 03cb456..8a363d0 100644 --- a/src/db/sysdb.h +++ b/src/db/sysdb.h @@ -203,7 +203,7 @@ #define SYSDB_SID_FILTER "(&(|("SYSDB_UC")("SYSDB_GC"))("SYSDB_SID_STR"=%s))" #define SYSDB_UUID_FILTER "(&(|("SYSDB_UC")("SYSDB_GC"))("SYSDB_UUID"=%s))" -#define SYSDB_NAME_FILTER "(&(|("SYSDB_UC")("SYSDB_GC"))("SYSDB_NAME"=%s))" +#define SYSDB_NAME_FILTER "(&(|("SYSDB_UC")("SYSDB_GC"))(|("SYSDB_NAME_ALIAS"=%s)("SYSDB_NAME"=%s)))" #define SYSDB_ID_FILTER "(|(&("SYSDB_UC")("SYSDB_UIDNUM"=%u))(&("SYSDB_GC")("SYSDB_GIDNUM"=%u)))" #define SYSDB_USER_CERT_FILTER "(&("SYSDB_UC")%s)" diff --git a/src/db/sysdb_ops.c b/src/db/sysdb_ops.c index cfa1586..77e4c1a 100644 --- a/src/db/sysdb_ops.c +++ b/src/db/sysdb_ops.c @@ -4590,8 +4590,35 @@ errno_t sysdb_search_object_by_name(TALLOC_CTX *mem_ctx, const char **attrs, struct ldb_result **res) { - return sysdb_search_object_by_str_attr(mem_ctx, domain, SYSDB_NAME_FILTER, - name, attrs, res); + TALLOC_CTX *tmp_ctx; + char *filter; + char *sanitized_name; + char *sanitized_alias_name; + errno_t ret; + + tmp_ctx = talloc_new(NULL); + if (!tmp_ctx) { + return ENOMEM; + } + + ret = sss_filter_sanitize_for_dom(tmp_ctx, name, domain, &sanitized_name, + &sanitized_alias_name); + if (ret != EOK) { + goto done; + } + + filter = talloc_asprintf(tmp_ctx, SYSDB_NAME_FILTER, sanitized_alias_name, + sanitized_name); + if (filter == NULL) { + ret = ENOMEM; + goto done; + } + + ret = sysdb_search_object_attr(mem_ctx, domain, filter, attrs, res); + +done: + talloc_free(tmp_ctx); + return ret; } errno_t sysdb_search_object_by_sid(TALLOC_CTX *mem_ctx,