diff options
author | Sumit Bose <sbose@redhat.com> | 2014-10-02 18:10:39 +0200 |
---|---|---|
committer | Jakub Hrozek <jhrozek@redhat.com> | 2014-10-20 16:15:26 +0200 |
commit | a983272f1afa8dbae3ecd4425b04649601732a71 (patch) | |
tree | 7a7d49377fd903e202718a5c76c43e0c1154b0a7 /src/responder/nss/nsssrv_cmd.c | |
parent | afbe298d8d99c037056c1d3878812d98783309b0 (diff) | |
download | sssd-a983272f1afa8dbae3ecd4425b04649601732a71.tar.gz sssd-a983272f1afa8dbae3ecd4425b04649601732a71.tar.xz sssd-a983272f1afa8dbae3ecd4425b04649601732a71.zip |
sid2name: return name without views applied
Make sure that the original name of an object without any overrides
applied is returned by sid2name requests.
Reviewed-by: Pavel Březina <pbrezina@redhat.com>
Diffstat (limited to 'src/responder/nss/nsssrv_cmd.c')
-rw-r--r-- | src/responder/nss/nsssrv_cmd.c | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c index bf0f25275..3def57fd0 100644 --- a/src/responder/nss/nsssrv_cmd.c +++ b/src/responder/nss/nsssrv_cmd.c @@ -4615,11 +4615,12 @@ static errno_t fill_orig(struct sss_packet *packet, static errno_t fill_name(struct sss_packet *packet, struct sss_domain_info *dom, enum sss_id_type id_type, + bool apply_no_view, struct ldb_message *msg) { int ret; TALLOC_CTX *tmp_ctx = NULL; - const char *orig_name; + const char *orig_name = NULL; const char *cased_name; const char *fq_name; struct sized_string name; @@ -4628,7 +4629,25 @@ static errno_t fill_name(struct sss_packet *packet, size_t blen; size_t pctr = 0; - orig_name = ldb_msg_find_attr_as_string(msg, SYSDB_NAME, NULL); + if (apply_no_view) { + orig_name = ldb_msg_find_attr_as_string(msg, + ORIGINALAD_PREFIX SYSDB_NAME, + NULL); + } else { + if (DOM_HAS_VIEWS(dom)) { + orig_name = ldb_msg_find_attr_as_string(msg, + OVERRIDE_PREFIX SYSDB_NAME, + NULL); + if (orig_name != NULL && IS_SUBDOMAIN(dom)) { + /* Override names are un-qualified */ + add_domain = true; + } + } + } + + if (orig_name == NULL) { + orig_name = ldb_msg_find_attr_as_string(msg, SYSDB_NAME, NULL); + } if (orig_name == NULL) { DEBUG(SSSDBG_CRIT_FAILURE, "Missing name.\n"); return EINVAL; @@ -4747,6 +4766,7 @@ static errno_t nss_cmd_getbysid_send_reply(struct nss_dom_ctx *dctx) ret = fill_name(cctx->creq->out, dctx->domain, id_type, + true, dctx->res->msgs[0]); break; case SSS_NSS_GETIDBYSID: |