summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSumit Bose <sbose@redhat.com>2014-10-02 18:10:39 +0200
committerJakub Hrozek <jhrozek@redhat.com>2014-10-20 16:15:26 +0200
commita983272f1afa8dbae3ecd4425b04649601732a71 (patch)
tree7a7d49377fd903e202718a5c76c43e0c1154b0a7 /src
parentafbe298d8d99c037056c1d3878812d98783309b0 (diff)
downloadsssd-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')
-rw-r--r--src/db/sysdb_ops.c1
-rw-r--r--src/responder/nss/nsssrv_cmd.c24
2 files changed, 23 insertions, 2 deletions
diff --git a/src/db/sysdb_ops.c b/src/db/sysdb_ops.c
index 1d51119d7..c88ff9b4b 100644
--- a/src/db/sysdb_ops.c
+++ b/src/db/sysdb_ops.c
@@ -3507,6 +3507,7 @@ errno_t sysdb_search_object_by_sid(TALLOC_CTX *mem_ctx,
{
TALLOC_CTX *tmp_ctx;
const char *def_attrs[] = { SYSDB_NAME, SYSDB_UIDNUM, SYSDB_GIDNUM,
+ ORIGINALAD_PREFIX SYSDB_NAME,
SYSDB_OBJECTCLASS, NULL };
struct ldb_dn *basedn;
int ret;
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: