[SSSD] [PATCH] proxy: Do not try to store same alias twice
Pavel Reichl
preichl at redhat.com
Wed Nov 12 10:10:32 UTC 2014
On 11/06/2014 07:48 PM, Michal Židek wrote:
> 0001-proxy-Do-not-try-to-store-same-alias-twice.patch
>
>
> From f6c84c306cf921344ad2b23040588040ac407186 Mon Sep 17 00:00:00 2001
> From: Michal Zidek<mzidek at redhat.com>
> Date: Fri, 31 Oct 2014 16:39:25 +0100
> Subject: [PATCH 1/2] proxy: Do not try to store same alias twice
>
> LDB does not store attributes if they have the
> same name and value and errors out instead.
>
> Fixes:
> https://fedorahosted.org/sssd/ticket/2461
> ---
> src/providers/proxy/proxy_id.c | 68 ++++++++++++++++++++++++++----------------
> 1 file changed, 42 insertions(+), 26 deletions(-)
>
> diff --git a/src/providers/proxy/proxy_id.c b/src/providers/proxy/proxy_id.c
> index d867ec4..bb79202 100644
> --- a/src/providers/proxy/proxy_id.c
> +++ b/src/providers/proxy/proxy_id.c
> @@ -222,6 +222,7 @@ static int save_user(struct sss_domain_info *domain,
> struct sysdb_attrs *attrs = NULL;
> errno_t ret;
> const char *cased_alias;
> + const char *lc_pw_name = NULL;
>
> if (pwd->pw_shell && pwd->pw_shell[0] != '\0') {
> shell = pwd->pw_shell;
> @@ -239,31 +240,40 @@ static int save_user(struct sss_domain_info *domain,
> attrs = sysdb_new_attrs(NULL);
> if (!attrs) {
> DEBUG(SSSDBG_CRIT_FAILURE, "Allocation error ?!\n");
> - return ENOMEM;
> + ret = ENOMEM;
> + goto done;
> }
> }
>
> if (lowercase) {
> - ret = sysdb_attrs_add_lc_name_alias(attrs, pwd->pw_name);
> + lc_pw_name = sss_tc_utf8_str_tolower(attrs, pwd->pw_name);
> + if (lc_pw_name == NULL) {
> + DEBUG(SSSDBG_OP_FAILURE, "Cannot convert name to lowercase.\n");
> + ret = ENOMEM;
> + goto done;
> + }
> +
> + ret = sysdb_attrs_add_string(attrs, SYSDB_NAME_ALIAS, lc_pw_name);
> if (ret) {
> DEBUG(SSSDBG_OP_FAILURE, "Could not add name alias\n");
> - talloc_zfree(attrs);
> - return ret;
> + goto done;
> }
> +
> }
>
> if (alias) {
> cased_alias = sss_get_cased_name(attrs, alias, !lowercase);
> if (!cased_alias) {
> - talloc_zfree(attrs);
> - return ENOMEM;
ret = ENOMEM;
> + goto done;
> }
>
> - ret = sysdb_attrs_add_string(attrs, SYSDB_NAME_ALIAS, cased_alias);
> - if (ret) {
> - DEBUG(SSSDBG_OP_FAILURE, "Could not add name alias\n");
> - talloc_zfree(attrs);
> - return ret;
> + /* Add the alias only if it differs from lowercased pw_name */
> + if (lc_pw_name == NULL || strcmp(cased_alias, lc_pw_name) != 0) {
> + ret = sysdb_attrs_add_string(attrs, SYSDB_NAME_ALIAS, cased_alias);
> + if (ret) {
> + DEBUG(SSSDBG_OP_FAILURE, "Could not add name alias\n");
> + goto done;
> + }
> }
> }
>
> @@ -280,12 +290,13 @@ static int save_user(struct sss_domain_info *domain,
> NULL,
> cache_timeout,
> 0);
> - talloc_zfree(attrs);
> if (ret) {
> DEBUG(SSSDBG_OP_FAILURE, "Could not add user to cache\n");
> - return ret;
> + goto done;
> }
>
> +done:
> + talloc_zfree(attrs);
> return EOK;
Did you mean "return ret"?
> }
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.fedorahosted.org/pipermail/sssd-devel/attachments/20141112/be4522c7/attachment.html>
More information about the sssd-devel
mailing list