diff options
author | Sumit Bose <sbose@redhat.com> | 2015-02-17 04:41:21 +0100 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2015-03-27 16:17:08 +0100 |
commit | 21edb030269837885407b3de55bad2fe901d6cf7 (patch) | |
tree | af1a88ab6e2491249754dd2b8287ecafbb6ded8f /src/providers/ldap/sdap_async_users.c | |
parent | 066289994b51fc5e57a7a02389a43046430b4ca2 (diff) | |
download | sssd-21edb030269837885407b3de55bad2fe901d6cf7.tar.gz sssd-21edb030269837885407b3de55bad2fe901d6cf7.tar.xz sssd-21edb030269837885407b3de55bad2fe901d6cf7.zip |
sdap: properly handle binary objectGuid attribute
Although in the initial processing SSSD treats the binary value right at
some point it mainly assumes that it is a string. Depending on the value
this might end up with the correct binary value stored in the cache but
in most cases there will be only a broken entry in the cache.
This patch converts the binary value into a string representation which
is described in [MS-DTYP] and stores the result in the cache.
Resolves https://fedorahosted.org/sssd/ticket/2588
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
(cherry picked from commit 4619742836ec22edf8f9d274d928bc896c5b0883)
Diffstat (limited to 'src/providers/ldap/sdap_async_users.c')
-rw-r--r-- | src/providers/ldap/sdap_async_users.c | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/src/providers/ldap/sdap_async_users.c b/src/providers/ldap/sdap_async_users.c index 367e3d795..82b4df479 100644 --- a/src/providers/ldap/sdap_async_users.c +++ b/src/providers/ldap/sdap_async_users.c @@ -140,7 +140,6 @@ int sdap_save_user(TALLOC_CTX *memctx, TALLOC_CTX *tmpctx = NULL; bool use_id_mapping; char *sid_str; - const char *uuid; char *dom_sid_str = NULL; struct sss_domain_info *subdomain; @@ -179,21 +178,13 @@ int sdap_save_user(TALLOC_CTX *memctx, } /* Always store UUID if available */ - ret = sysdb_attrs_get_string(attrs, - opts->user_map[SDAP_AT_USER_UUID].sys_name, - &uuid); - if (ret == EOK) { - ret = sysdb_attrs_add_string(user_attrs, SYSDB_UUID, uuid); - if (ret != EOK) { - DEBUG(SSSDBG_MINOR_FAILURE, "Could not add UUID string: [%s]\n", - sss_strerror(ret)); - goto done; - } - } else if (ret == ENOENT) { - DEBUG(SSSDBG_TRACE_ALL, "UUID not available for user.\n"); - } else { - DEBUG(SSSDBG_MINOR_FAILURE, "Could not identify UUID [%s]\n", - sss_strerror(ret)); + ret = sysdb_handle_original_uuid(opts->user_map[SDAP_AT_USER_UUID].def_name, + attrs, + opts->user_map[SDAP_AT_USER_UUID].sys_name, + user_attrs, SYSDB_UUID); + if (ret != EOK) { + DEBUG((ret == ENOENT) ? SSSDBG_TRACE_ALL : SSSDBG_MINOR_FAILURE, + "Failed to retrieve UUID [%d][%s].\n", ret, sss_strerror(ret)); } /* If this object has a SID available, we will determine the correct |