diff options
author | Sumit Bose <sbose@redhat.com> | 2013-12-13 11:44:59 +0100 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2013-12-19 11:11:40 +0100 |
commit | cbbbde7a66e176871aae37ed323e53ac41859e8d (patch) | |
tree | 8be1b07e25c7d5bc76ee5e5be2024a9d5e7ef9c4 /src/util | |
parent | 2e96a84a2be53586db82a20287988a8a422c98ea (diff) | |
download | sssd-cbbbde7a66e176871aae37ed323e53ac41859e8d.tar.gz sssd-cbbbde7a66e176871aae37ed323e53ac41859e8d.tar.xz sssd-cbbbde7a66e176871aae37ed323e53ac41859e8d.zip |
Use lower-case name for case-insensitive searches
The patch makes sure that a completely lower-cased version of a fully
qualified name is used for case insensitive searches. Currently there
are code paths where the domain name was used as configured and was not
lower-cased.
To make sure this patch does not break with old entries in the cache or
case sensitive domains a third template was added to the related filters
templates which is either filled with a completely lower-cased version or
with the old version. The other two template values are unchanged.
Diffstat (limited to 'src/util')
-rw-r--r-- | src/util/sss_tc_utf8.c | 30 | ||||
-rw-r--r-- | src/util/util.h | 6 |
2 files changed, 36 insertions, 0 deletions
diff --git a/src/util/sss_tc_utf8.c b/src/util/sss_tc_utf8.c index 6a976211f..e1426a44f 100644 --- a/src/util/sss_tc_utf8.c +++ b/src/util/sss_tc_utf8.c @@ -55,3 +55,33 @@ sss_tc_utf8_tolower(TALLOC_CTX *mem_ctx, const uint8_t *s, size_t len, size_t *_ return ret; } +errno_t sss_filter_sanitize_for_dom(TALLOC_CTX *mem_ctx, + const char *input, + struct sss_domain_info *dom, + char **sanitized, + char **lc_sanitized) +{ + int ret; + + ret = sss_filter_sanitize(mem_ctx, input, sanitized); + if (ret != EOK) { + DEBUG(SSSDBG_OP_FAILURE, ("sss_filter_sanitize failed.\n")); + return ret; + } + + if (dom->case_sensitive) { + *lc_sanitized = talloc_strdup(mem_ctx, *sanitized); + } else { + *lc_sanitized = sss_tc_utf8_str_tolower(mem_ctx, *sanitized); + } + + if (*lc_sanitized == NULL) { + DEBUG(SSSDBG_OP_FAILURE, ("%s failed.\n", + dom->case_sensitive ? + "talloc_strdup" : + "sss_tc_utf8_str_tolower")); + return ENOMEM; + } + + return EOK; +} diff --git a/src/util/util.h b/src/util/util.h index 058c1c279..3334476ab 100644 --- a/src/util/util.h +++ b/src/util/util.h @@ -484,6 +484,12 @@ errno_t sss_filter_sanitize(TALLOC_CTX *mem_ctx, const char *input, char **sanitized); +errno_t sss_filter_sanitize_for_dom(TALLOC_CTX *mem_ctx, + const char *input, + struct sss_domain_info *dom, + char **sanitized, + char **lc_sanitized); + char * sss_escape_ip_address(TALLOC_CTX *mem_ctx, int family, const char *addr); |