diff options
Diffstat (limited to 'src/providers')
-rw-r--r-- | src/providers/ldap/sdap_async_services.c | 18 | ||||
-rw-r--r-- | src/providers/proxy/proxy_services.c | 74 |
2 files changed, 34 insertions, 58 deletions
diff --git a/src/providers/ldap/sdap_async_services.c b/src/providers/ldap/sdap_async_services.c index ae96d8882..c87d07c44 100644 --- a/src/providers/ldap/sdap_async_services.c +++ b/src/providers/ldap/sdap_async_services.c @@ -351,6 +351,8 @@ sdap_save_service(TALLOC_CTX *mem_ctx, const char *name = NULL; const char **aliases; const char **protocols; + const char **cased_protocols; + const char **store_protocols; char **missing; uint16_t port; uint64_t cache_timeout; @@ -412,6 +414,20 @@ sdap_save_service(TALLOC_CTX *mem_ctx, goto done; } + if (dom->case_sensitive == false) { + /* Don't perform the extra mallocs if not necessary */ + ret = sss_get_cased_name_list(tmp_ctx, protocols, + dom->case_sensitive, &cased_protocols); + if (ret != EOK) { + DEBUG(SSSDBG_MINOR_FAILURE, + ("Failed to get case_sensitive protocols names: [%s]\n", + strerror(ret))); + goto done; + } + } + + store_protocols = dom->case_sensitive ? protocols : cased_protocols; + /* Get the USN value, if available */ ret = sysdb_attrs_get_el(attrs, opts->service_map[SDAP_AT_SERVICE_USN].sys_name, &el); @@ -456,7 +472,7 @@ sdap_save_service(TALLOC_CTX *mem_ctx, cache_timeout = dom->service_timeout; - ret = sysdb_store_service(sysdb, name, port, aliases, protocols, + ret = sysdb_store_service(sysdb, name, port, aliases, store_protocols, svc_attrs, missing, cache_timeout, now); if (ret != EOK) { DEBUG(SSSDBG_MINOR_FAILURE, diff --git a/src/providers/proxy/proxy_services.c b/src/providers/proxy/proxy_services.c index e5654d75b..2b606064c 100644 --- a/src/providers/proxy/proxy_services.c +++ b/src/providers/proxy/proxy_services.c @@ -38,7 +38,6 @@ proxy_save_service(struct sysdb_ctx *sysdb, const char **protocols; const char **cased_aliases; TALLOC_CTX *tmp_ctx; - size_t num_aliases, i; time_t now = time(NULL); tmp_ctx = talloc_new(NULL); @@ -65,26 +64,11 @@ proxy_save_service(struct sysdb_ctx *sysdb, protocols[1] = NULL; /* Count the aliases */ - for(num_aliases = 0; svc->s_aliases[num_aliases]; num_aliases++); - - if (num_aliases >= 1) { - cased_aliases = talloc_array(tmp_ctx, const char *, num_aliases + 1); - if (!cased_aliases) { - ret = ENOMEM; - goto done; - } - - for (i = 0; i < num_aliases; i++) { - cased_aliases[i] = sss_get_cased_name(tmp_ctx, svc->s_aliases[i], - !lowercase); - if (!cased_aliases[i]) { - ret = ENOMEM; - goto done; - } - } - cased_aliases[num_aliases] = NULL; - } else { - cased_aliases = NULL; + ret = sss_get_cased_name_list(tmp_ctx, + (const char * const *) svc->s_aliases, + !lowercase, &cased_aliases); + if (ret != EOK) { + goto done; } ret = sysdb_store_service(sysdb, @@ -199,38 +183,6 @@ done: return ret; } -static errno_t -get_const_aliases(TALLOC_CTX *mem_ctx, - char **aliases, - const char ***const_aliases) -{ - errno_t ret; - size_t i, num_aliases; - const char **alias_list = NULL; - - for (num_aliases = 0; aliases[num_aliases]; num_aliases++); - - alias_list = talloc_zero_array(mem_ctx, const char *, num_aliases + 1); - if (!alias_list) return ENOMEM; - - for (i = 0; aliases[i]; i++) { - alias_list[i] = talloc_strdup(alias_list, aliases[i]); - if (!alias_list[i]) { - ret = ENOMEM; - goto done; - } - } - - ret = EOK; - *const_aliases = alias_list; - -done: - if (ret != EOK) { - talloc_zfree(alias_list); - } - return ret; -} - errno_t enum_services(struct proxy_id_ctx *ctx, struct sysdb_ctx *sysdb, @@ -246,6 +198,7 @@ enum_services(struct proxy_id_ctx *ctx, errno_t ret, sret; time_t now = time(NULL); const char *protocols[2] = { NULL, NULL }; + const char **cased_aliases; DEBUG(SSSDBG_TRACE_FUNC, ("Enumerating services\n")); @@ -320,10 +273,17 @@ again: ("Service found (%s, %d/%s)\n", svc->s_name, svc->s_port, svc->s_proto)); - protocols[0] = svc->s_proto; + protocols[0] = sss_get_cased_name(protocols, svc->s_proto, + dom->case_sensitive); + if (!protocols[0]) { + ret = ENOMEM; + goto done; + } + protocols[1] = NULL; - const char **const_aliases; - ret = get_const_aliases(tmpctx, svc->s_aliases, &const_aliases); + ret = sss_get_cased_name_list(tmpctx, + (const char * const *) svc->s_aliases, + dom->case_sensitive, &cased_aliases); if (ret != EOK) { /* Do not fail completely on errors. * Just report the failure to save and go on */ @@ -336,7 +296,7 @@ again: ret = sysdb_store_service(sysdb, svc->s_name, svc->s_port, - const_aliases, + cased_aliases, protocols, NULL, NULL, dom->service_timeout, |