summaryrefslogtreecommitdiffstats
path: root/src/providers/ldap/sdap_async_enum.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/providers/ldap/sdap_async_enum.c')
-rw-r--r--src/providers/ldap/sdap_async_enum.c42
1 files changed, 41 insertions, 1 deletions
diff --git a/src/providers/ldap/sdap_async_enum.c b/src/providers/ldap/sdap_async_enum.c
index 0c20afa9d..0431d03c3 100644
--- a/src/providers/ldap/sdap_async_enum.c
+++ b/src/providers/ldap/sdap_async_enum.c
@@ -235,7 +235,7 @@ static void sdap_dom_enum_ex_posix_check_done(struct tevent_req *subreq)
ret = sdap_posix_check_recv(subreq, &has_posix);
talloc_zfree(subreq);
- if (ret != EOK) {
+ if (ret != EOK && ret != ERR_NO_POSIX) {
/* We can only finish the id_op on error as the connection
* is re-used by the user search
*/
@@ -248,6 +248,16 @@ static void sdap_dom_enum_ex_posix_check_done(struct tevent_req *subreq)
tevent_req_error(req, ret);
}
return;
+ } else if (dp_error == DP_ERR_OFFLINE) {
+ DEBUG(SSSDBG_TRACE_FUNC, ("Backend is offline, retrying later\n"));
+ tevent_req_done(req);
+ return;
+ } else {
+ /* Non-recoverable error */
+ DEBUG(SSSDBG_OP_FAILURE,
+ ("POSIX check failed: %d: %s\n", ret, sss_strerror(ret)));
+ tevent_req_error(req, ret);
+ return;
}
}
@@ -306,6 +316,16 @@ static void sdap_dom_enum_ex_users_done(struct tevent_req *subreq)
return;
}
return;
+ } else if (dp_error == DP_ERR_OFFLINE) {
+ DEBUG(SSSDBG_TRACE_FUNC, ("Backend is offline, retrying later\n"));
+ tevent_req_done(req);
+ return;
+ } else if (ret != EOK && ret != ENOENT) {
+ /* Non-recoverable error */
+ DEBUG(SSSDBG_OP_FAILURE,
+ ("User enumeration failed: %d: %s\n", ret, sss_strerror(ret)));
+ tevent_req_error(req, ret);
+ return;
}
state->group_op = sdap_id_op_create(state, state->group_conn->conn_cache);
@@ -367,6 +387,16 @@ static void sdap_dom_enum_ex_groups_done(struct tevent_req *subreq)
return;
}
return;
+ } else if (dp_error == DP_ERR_OFFLINE) {
+ DEBUG(SSSDBG_TRACE_FUNC, ("Backend is offline, retrying later\n"));
+ tevent_req_done(req);
+ return;
+ } else if (ret != EOK && ret != ENOENT) {
+ /* Non-recoverable error */
+ DEBUG(SSSDBG_OP_FAILURE,
+ ("Group enumeration failed: %d: %s\n", ret, sss_strerror(ret)));
+ tevent_req_error(req, ret);
+ return;
}
@@ -426,6 +456,16 @@ static void sdap_dom_enum_ex_svcs_done(struct tevent_req *subreq)
return;
}
return;
+ } else if (dp_error == DP_ERR_OFFLINE) {
+ DEBUG(SSSDBG_TRACE_FUNC, ("Backend is offline, retrying later\n"));
+ tevent_req_done(req);
+ return;
+ } else if (ret != EOK && ret != ENOENT) {
+ /* Non-recoverable error */
+ DEBUG(SSSDBG_OP_FAILURE,
+ ("Service enumeration failed: %d: %s\n", ret, sss_strerror(ret)));
+ tevent_req_error(req, ret);
+ return;
}
/* Ok, we've completed an enumeration. Save this to the