summaryrefslogtreecommitdiffstats
path: root/src/providers/ldap/ldap_id_services.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/providers/ldap/ldap_id_services.c')
-rw-r--r--src/providers/ldap/ldap_id_services.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/providers/ldap/ldap_id_services.c b/src/providers/ldap/ldap_id_services.c
index 8b331cac4..1f3fd8043 100644
--- a/src/providers/ldap/ldap_id_services.c
+++ b/src/providers/ldap/ldap_id_services.c
@@ -48,6 +48,8 @@ struct sdap_services_get_state {
int filter_type;
int dp_error;
+ int sdap_ret;
+ bool noexist_delete;
};
static errno_t
@@ -65,7 +67,8 @@ services_get_send(TALLOC_CTX *mem_ctx,
struct sdap_id_conn_ctx *conn,
const char *name,
const char *protocol,
- int filter_type)
+ int filter_type,
+ bool noexist_delete)
{
errno_t ret;
struct tevent_req *req;
@@ -87,6 +90,7 @@ services_get_send(TALLOC_CTX *mem_ctx,
state->name = name;
state->protocol = protocol;
state->filter_type = filter_type;
+ state->noexist_delete = noexist_delete;
state->op = sdap_id_op_create(state, state->conn->conn_cache);
if (!state->op) {
@@ -237,6 +241,7 @@ services_get_done(struct tevent_req *subreq)
/* Return to the mainloop to retry */
return;
}
+ state->sdap_ret = ret;
/* An error occurred. */
if (ret && ret != ENOENT) {
@@ -245,7 +250,7 @@ services_get_done(struct tevent_req *subreq)
return;
}
- if (ret == ENOENT) {
+ if (ret == ENOENT && state->noexist_delete == true) {
/* Ensure that this entry is removed from the sysdb */
switch(state->filter_type) {
case BE_FILTER_NAME:
@@ -283,7 +288,7 @@ services_get_done(struct tevent_req *subreq)
}
errno_t
-services_get_recv(struct tevent_req *req, int *dp_error_out)
+services_get_recv(struct tevent_req *req, int *dp_error_out, int *sdap_ret)
{
struct sdap_services_get_state *state =
tevent_req_data(req, struct sdap_services_get_state);
@@ -292,6 +297,10 @@ services_get_recv(struct tevent_req *req, int *dp_error_out)
*dp_error_out = state->dp_error;
}
+ if (sdap_ret) {
+ *sdap_ret = state->sdap_ret;
+ }
+
TEVENT_REQ_RETURN_ON_ERROR(req);
return EOK;