summaryrefslogtreecommitdiffstats
path: root/src/providers/ldap
diff options
context:
space:
mode:
authorSumit Bose <sbose@redhat.com>2010-11-24 14:17:36 +0100
committerStephen Gallagher <sgallagh@redhat.com>2010-12-01 16:16:01 -0500
commitd8e3d9b5fb5f269ef7a0cf4b70f3ba4c8051429c (patch)
tree5ed4faf0e0b39019d4e866434539761bbe3d2973 /src/providers/ldap
parent5de0dda3e3ee131000c5f2155416b98f22a86313 (diff)
downloadsssd-d8e3d9b5fb5f269ef7a0cf4b70f3ba4c8051429c.tar.gz
sssd-d8e3d9b5fb5f269ef7a0cf4b70f3ba4c8051429c.tar.xz
sssd-d8e3d9b5fb5f269ef7a0cf4b70f3ba4c8051429c.zip
Add check_online method to LDAP ID provider
Diffstat (limited to 'src/providers/ldap')
-rw-r--r--src/providers/ldap/ldap_common.h1
-rw-r--r--src/providers/ldap/ldap_id.c41
-rw-r--r--src/providers/ldap/ldap_init.c3
3 files changed, 44 insertions, 1 deletions
diff --git a/src/providers/ldap/ldap_common.h b/src/providers/ldap/ldap_common.h
index 63192fb46..5c298d1b2 100644
--- a/src/providers/ldap/ldap_common.h
+++ b/src/providers/ldap/ldap_common.h
@@ -67,6 +67,7 @@ struct sdap_auth_ctx {
struct sdap_service *service;
};
+void sdap_check_online(struct be_req *breq);
/* id */
void sdap_account_info_handler(struct be_req *breq);
int sdap_id_setup_tasks(struct sdap_id_ctx *ctx);
diff --git a/src/providers/ldap/ldap_id.c b/src/providers/ldap/ldap_id.c
index 07e3ae179..1a9b2e09d 100644
--- a/src/providers/ldap/ldap_id.c
+++ b/src/providers/ldap/ldap_id.c
@@ -650,7 +650,48 @@ int groups_by_user_recv(struct tevent_req *req, int *dp_error_out)
return EOK;
}
+static void sdap_check_online_done(struct tevent_req *req);
+void sdap_check_online(struct be_req *be_req)
+{
+ struct sdap_id_ctx *ctx;
+ struct tevent_req *req;
+
+ ctx = talloc_get_type(be_req->be_ctx->bet_info[BET_ID].pvt_bet_data,
+ struct sdap_id_ctx);
+
+ req = sdap_cli_connect_send(be_req, be_req->be_ctx->ev, ctx->opts,
+ be_req->be_ctx, ctx->service, false);
+ if (req == NULL) {
+ DEBUG(1, ("sdap_cli_connect_send failed.\n"));
+ goto done;
+ }
+ tevent_req_set_callback(req, sdap_check_online_done, be_req);
+
+ return;
+done:
+ sdap_handler_done(be_req, DP_ERR_FATAL, 0, NULL);
+}
+static void sdap_check_online_done(struct tevent_req *req)
+{
+ struct be_req *be_req = tevent_req_callback_data(req, struct be_req);
+ int ret;
+ int dp_err = DP_ERR_FATAL;
+ bool can_retry;
+
+ ret = sdap_cli_connect_recv_ext(req, NULL, &can_retry, NULL);
+ talloc_zfree(req);
+
+ if (ret != EOK) {
+ if (!can_retry) {
+ dp_err = DP_ERR_OFFLINE;
+ }
+ } else {
+ dp_err = DP_ERR_OK;
+ }
+
+ sdap_handler_done(be_req, dp_err, 0, NULL);
+}
/* =Get-Account-Info-Call================================================= */
diff --git a/src/providers/ldap/ldap_init.c b/src/providers/ldap/ldap_init.c
index dcfb55390..b6176a9f1 100644
--- a/src/providers/ldap/ldap_init.c
+++ b/src/providers/ldap/ldap_init.c
@@ -32,7 +32,8 @@ static void sdap_shutdown(struct be_req *req);
/* Id Handler */
struct bet_ops sdap_id_ops = {
.handler = sdap_account_info_handler,
- .finalize = sdap_shutdown
+ .finalize = sdap_shutdown,
+ .check_online = sdap_check_online
};
/* Auth Handler */