From 13ff428b862b90fcbe2eb697565854442d489042 Mon Sep 17 00:00:00 2001 From: Sumit Bose Date: Tue, 9 Oct 2012 21:16:41 +0200 Subject: [PATCH 02/18] s2n: save user principal name of sub-domain user If a sub-domain user of a IPA is looked up via the LDAP extdom extended operation we also add a generated user principal name to the cached entry. This can be used e.g. for password authentication later on. --- src/providers/ipa/ipa_s2n_exop.c | 33 ++++++++++++++++++++++++++++++++- 1 files changed, 32 insertions(+), 1 deletions(-) diff --git a/src/providers/ipa/ipa_s2n_exop.c b/src/providers/ipa/ipa_s2n_exop.c index 004cdab..a5e23fb 100644 --- a/src/providers/ipa/ipa_s2n_exop.c +++ b/src/providers/ipa/ipa_s2n_exop.c @@ -585,6 +585,9 @@ static void ipa_s2n_get_user_done(struct tevent_req *subreq) time_t now; uint64_t timeout = 10*60*60; /* FIXME: find a better timeout ! */ const char *homedir = NULL; + char *uc_realm; + char *upn; + struct sysdb_attrs *user_attrs; ret = ipa_s2n_exop_recv(subreq, state, &result, &retoid, &retdata); talloc_zfree(subreq); @@ -627,11 +630,39 @@ static void ipa_s2n_get_user_done(struct tevent_req *subreq) } } + uc_realm = get_uppercase_realm(state, state->dom->name); + if (uc_realm == NULL) { + DEBUG(SSSDBG_OP_FAILURE, ("get_uppercase_realm failed.\n")); + ret = ENOMEM; + goto done; + } + + upn = talloc_asprintf(state, "%s@%s", attrs->a.user.pw_name, + uc_realm); + if (upn == NULL) { + DEBUG(SSSDBG_OP_FAILURE, ("talloc_asprintf failed.\n")); + ret = ENOMEM; + goto done; + } + + user_attrs = sysdb_new_attrs(state); + if (user_attrs == NULL) { + DEBUG(SSSDBG_OP_FAILURE, ("sysdb_new_attrs failed.\n")); + ret = ENOMEM; + goto done; + } + + ret = sysdb_attrs_add_string(user_attrs, SYSDB_UPN, upn); + if (ret != EOK) { + DEBUG(SSSDBG_OP_FAILURE, ("sysdb_attrs_add_string failed.\n")); + goto done; + } + ret = sysdb_store_domuser(state->dom, attrs->a.user.pw_name, NULL, attrs->a.user.pw_uid, 0, NULL, /* gecos */ homedir, NULL, - NULL, NULL, timeout, now); + user_attrs, NULL, timeout, now); break; case RESP_GROUP: ret = sysdb_store_domgroup(state->dom, attrs->a.group.gr_name, -- 1.7.7.6