summaryrefslogtreecommitdiffstats
path: root/src/providers/ipa/ipa_id.c
diff options
context:
space:
mode:
authorJan Zeleny <jzeleny@redhat.com>2012-02-16 09:55:13 -0500
committerStephen Gallagher <sgallagh@redhat.com>2012-04-24 09:19:43 -0400
commit881c4ba834b23ae651ac01db667801f314eb0a5d (patch)
treeea5eb2d490b9e72692d122d8422cc2877f16a10c /src/providers/ipa/ipa_id.c
parent36a12aea020a935ffa40505fa02860c3d921ad0c (diff)
downloadsssd-881c4ba834b23ae651ac01db667801f314eb0a5d.tar.gz
sssd-881c4ba834b23ae651ac01db667801f314eb0a5d.tar.xz
sssd-881c4ba834b23ae651ac01db667801f314eb0a5d.zip
Add ID operations in subdomains
Diffstat (limited to 'src/providers/ipa/ipa_id.c')
-rw-r--r--src/providers/ipa/ipa_id.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/providers/ipa/ipa_id.c b/src/providers/ipa/ipa_id.c
index c3ec983e0..f2a27c74e 100644
--- a/src/providers/ipa/ipa_id.c
+++ b/src/providers/ipa/ipa_id.c
@@ -57,6 +57,7 @@ static int ipa_netgroup_get_retry(struct tevent_req *req);
static void ipa_netgroup_get_connect_done(struct tevent_req *subreq);
static void ipa_netgroup_get_done(struct tevent_req *subreq);
static void ipa_account_info_netgroups_done(struct tevent_req *req);
+static void ipa_account_info_users_done(struct tevent_req *req);
void ipa_account_info_handler(struct be_req *breq)
{
@@ -76,6 +77,24 @@ void ipa_account_info_handler(struct be_req *breq)
ar = talloc_get_type(breq->req_data, struct be_acct_req);
+ if (strcasecmp(ar->domain, breq->be_ctx->domain->name) != 0) {
+ if (! ((ar->entry_type & BE_REQ_USER) ||
+ (ar->entry_type & BE_REQ_GROUP))) {
+ return sdap_handler_done(breq, DP_ERR_FATAL, EINVAL,
+ "Invalid sub-domain request type");
+ }
+
+ req = ipa_get_subdomain_account_info_send(breq, breq->be_ctx->ev, ctx,
+ ar);
+ if (!req) {
+ return sdap_handler_done(breq, DP_ERR_FATAL, ENOMEM, "Out of memory");
+ }
+
+ tevent_req_set_callback(req, ipa_account_info_users_done, breq);
+
+ return;
+ }
+
switch (ar->entry_type & 0xFFF) {
case BE_REQ_USER: /* user */
case BE_REQ_GROUP: /* group */
@@ -130,6 +149,17 @@ static void ipa_account_info_complete(struct be_req *breq, int dp_error,
sdap_handler_done(breq, dp_error, ret, error_text);
}
+static void ipa_account_info_users_done(struct tevent_req *req)
+{
+ struct be_req *breq = tevent_req_callback_data(req, struct be_req);
+ int ret, dp_error;
+
+ ret = ipa_user_get_recv(req, &dp_error);
+ talloc_zfree(req);
+
+ ipa_account_info_complete(breq, dp_error, ret, "User lookup failed");
+}
+
/* Request for netgroups
* - first start here and then go to ipa_netgroups.c
*/