summaryrefslogtreecommitdiffstats
path: root/src/providers/ldap/ldap_id.c
diff options
context:
space:
mode:
authorStephen Gallagher <sgallagh@redhat.com>2012-01-28 11:40:00 -0500
committerStephen Gallagher <sgallagh@redhat.com>2012-01-31 09:37:41 -0500
commit796463906a54e259bd5b582ce84af4297a58eafc (patch)
treeee032e15dd5d0b4bfd08d6db212e938d054cd9f0 /src/providers/ldap/ldap_id.c
parent48b6eab1b369107af0d568e016a87637b7affc55 (diff)
downloadsssd-796463906a54e259bd5b582ce84af4297a58eafc.tar.gz
sssd-796463906a54e259bd5b582ce84af4297a58eafc.tar.xz
sssd-796463906a54e259bd5b582ce84af4297a58eafc.zip
LDAP: Add support for service lookups (non-enum)
Diffstat (limited to 'src/providers/ldap/ldap_id.c')
-rw-r--r--src/providers/ldap/ldap_id.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/providers/ldap/ldap_id.c b/src/providers/ldap/ldap_id.c
index feac63b67..db49e77d9 100644
--- a/src/providers/ldap/ldap_id.c
+++ b/src/providers/ldap/ldap_id.c
@@ -756,6 +756,7 @@ static void sdap_account_info_users_done(struct tevent_req *req);
static void sdap_account_info_groups_done(struct tevent_req *req);
static void sdap_account_info_initgr_done(struct tevent_req *req);
static void sdap_account_info_netgroups_done(struct tevent_req *req);
+static void sdap_account_info_services_done(struct tevent_req *req);
void sdap_handle_account_info(struct be_req *breq, struct sdap_id_ctx *ctx);
void sdap_account_info_handler(struct be_req *breq)
@@ -858,6 +859,24 @@ void sdap_handle_account_info(struct be_req *breq, struct sdap_id_ctx *ctx)
tevent_req_set_callback(req, sdap_account_info_netgroups_done, breq);
break;
+ case BE_REQ_SERVICES:
+ /* skip enumerations on demand */
+ if (ar->filter_type == BE_FILTER_ENUM) {
+ return sdap_handler_done(breq, DP_ERR_OK, EOK, "Success");
+ }
+
+ req = services_get_send(breq, breq->be_ctx->ev, ctx,
+ ar->filter_value,
+ ar->extra_value,
+ ar->filter_type);
+ if (!req) {
+ return sdap_handler_done(breq, DP_ERR_FATAL,
+ ENOMEM, "Out of memory");
+ }
+ tevent_req_set_callback(req, sdap_account_info_services_done, breq);
+
+ break;
+
default: /*fail*/
ret = EINVAL;
err = "Invalid request type";
@@ -933,3 +952,14 @@ static void sdap_account_info_netgroups_done(struct tevent_req *req)
sdap_account_info_complete(breq, dp_error, ret, "Netgroup lookup failed");
}
+
+static void sdap_account_info_services_done(struct tevent_req *req)
+{
+ struct be_req *breq = tevent_req_callback_data(req, struct be_req);
+ int ret, dp_error;
+
+ ret = services_get_recv(req, &dp_error);
+ talloc_zfree(req);
+
+ sdap_account_info_complete(breq, dp_error, ret, "Service lookup failed");
+}