diff options
author | Alexander Bokovoy <abokovoy@redhat.com> | 2014-05-13 11:22:29 +0300 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2014-05-21 15:35:05 +0200 |
commit | 503e1ebb9c36ecb978a28a5cefd94d24945ee39b (patch) | |
tree | 802c2a6881da8cb1f3324c2a89bdfb649e4bb6d9 | |
parent | 25193cfe110b328b428cde9641400f7dc999416e (diff) | |
download | sssd-503e1ebb9c36ecb978a28a5cefd94d24945ee39b.tar.gz sssd-503e1ebb9c36ecb978a28a5cefd94d24945ee39b.tar.xz sssd-503e1ebb9c36ecb978a28a5cefd94d24945ee39b.zip |
ipa subdomains provider: make sure search by SID works for homedir
Reviewed-by: Jakub Hrozek <jhrozek@redhat.com>
-rw-r--r-- | src/providers/ipa/ipa_subdomains_id.c | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/providers/ipa/ipa_subdomains_id.c b/src/providers/ipa/ipa_subdomains_id.c index 978ccc261..d8922a461 100644 --- a/src/providers/ipa/ipa_subdomains_id.c +++ b/src/providers/ipa/ipa_subdomains_id.c @@ -484,7 +484,11 @@ apply_subdomain_homedir(TALLOC_CTX *mem_ctx, struct sss_domain_info *dom, uint32_t uid; const char *fqname; const char *homedir = NULL; - struct ldb_result *res; + struct ldb_result *res = NULL; + struct ldb_message *msg = NULL; + const char *attrs[] = { SYSDB_NAME, + SYSDB_UIDNUM, + NULL }; if (filter_type == BE_FILTER_NAME) { ret = sysdb_getpwnam(mem_ctx, dom->sysdb, dom, filter_value, &res); @@ -496,6 +500,9 @@ apply_subdomain_homedir(TALLOC_CTX *mem_ctx, struct sss_domain_info *dom, goto done; } ret = sysdb_getpwuid(mem_ctx, dom->sysdb, dom, uid, &res); + } else if (filter_type == BE_FILTER_SECID) { + ret = sysdb_search_user_by_sid_str(mem_ctx, dom->sysdb, dom, + filter_value, attrs, &msg); } else { DEBUG(SSSDBG_OP_FAILURE, ("Unsupported filter type: [%d].\n", filter_type)); @@ -503,24 +510,27 @@ apply_subdomain_homedir(TALLOC_CTX *mem_ctx, struct sss_domain_info *dom, goto done; } - if (ret != EOK) { + if (ret != EOK && ret != ENOENT) { DEBUG(SSSDBG_OP_FAILURE, ("Failed to make request to our cache: [%d]: [%s]\n", ret, sss_strerror(ret))); goto done; } - if (res->count == 0) { + if ((res && res->count == 0) || (msg && msg->num_elements == 0)) { ret = ENOENT; goto done; } + if (res != NULL) { + msg = res->msgs[0]; + } /* * Homedir is always overriden by subdomain_homedir even if it was * explicitly set by user. */ - fqname = ldb_msg_find_attr_as_string(res->msgs[0], SYSDB_NAME, NULL); - uid = ldb_msg_find_attr_as_uint64(res->msgs[0], SYSDB_UIDNUM, 0); + fqname = ldb_msg_find_attr_as_string(msg, SYSDB_NAME, NULL); + uid = ldb_msg_find_attr_as_uint64(msg, SYSDB_UIDNUM, 0); if (uid == 0) { DEBUG(SSSDBG_OP_FAILURE, ("UID for user [%s] is not known.\n", filter_value)); |