URL: https://github.com/SSSD/sssd/pull/127
Author: pbrezina
 Title: #127: ssh: use cache_req
Action: synchronized

To pull the PR as Git branch:
git remote add ghsssd https://github.com/SSSD/sssd
git fetch ghsssd pull/127/head:pr127
git checkout pr127
From 557f79ba99251ce16b4e29b33a07de60eef01252 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <[email protected]>
Date: Tue, 17 Jan 2017 12:00:31 +0100
Subject: [PATCH 1/6] ssh: fix number of output certificates

All certificate are added into result so we should use addition here.
---
 src/responder/ssh/sshsrv_cmd.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/responder/ssh/sshsrv_cmd.c b/src/responder/ssh/sshsrv_cmd.c
index 2e64893..bd6270d 100644
--- a/src/responder/ssh/sshsrv_cmd.c
+++ b/src/responder/ssh/sshsrv_cmd.c
@@ -1012,7 +1012,7 @@ ssh_cmd_build_reply(struct ssh_cmd_ctx *cmd_ctx)
     el_orig = ldb_msg_find_element(cmd_ctx->result,
                                   ORIGINALAD_PREFIX SYSDB_SSH_PUBKEY);
     if (el_orig) {
-        count = el_orig->num_values;
+        count += el_orig->num_values;
     }
 
     if (DOM_HAS_VIEWS(cmd_ctx->domain)) {

From 8dbfe2e0025606e79ea5a1e28046c7a04df6d47d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <[email protected]>
Date: Tue, 17 Jan 2017 11:58:06 +0100
Subject: [PATCH 2/6] ssh: do not create again fq name

We have already qualified name in sysdb so there is not need to append
the domain part.
---
 src/responder/ssh/sshsrv_cmd.c | 20 ++++++--------------
 1 file changed, 6 insertions(+), 14 deletions(-)

diff --git a/src/responder/ssh/sshsrv_cmd.c b/src/responder/ssh/sshsrv_cmd.c
index bd6270d..195d576 100644
--- a/src/responder/ssh/sshsrv_cmd.c
+++ b/src/responder/ssh/sshsrv_cmd.c
@@ -982,8 +982,7 @@ ssh_cmd_build_reply(struct ssh_cmd_ctx *cmd_ctx)
     struct ldb_message_element *el_user_cert_keys = NULL;
     uint32_t count = 0;
     const char *name;
-    char *fqname;
-    uint32_t fqname_len;
+    uint32_t name_len;
     TALLOC_CTX *tmp_ctx;
     struct ssh_ctx *ssh_ctx;
     struct cli_protocol *pctx;
@@ -1060,38 +1059,31 @@ ssh_cmd_build_reply(struct ssh_cmd_ctx *cmd_ctx)
         goto done;
     }
 
-    fqname = talloc_asprintf(cmd_ctx, "%s@%s",
-                             name, cmd_ctx->domain->name);
-    if (!fqname) {
-        ret = ENOMEM;
-        goto done;
-    }
-
-    fqname_len = strlen(fqname)+1;
+    name_len = strlen(name) + 1;
 
     ret = decode_and_add_base64_data(cmd_ctx, el, false, ssh_ctx,
-                                     fqname_len, fqname, &c);
+                                     name_len, name, &c);
     if (ret != EOK) {
         DEBUG(SSSDBG_OP_FAILURE, "decode_and_add_base64_data failed.\n");
         goto done;
     }
 
     ret = decode_and_add_base64_data(cmd_ctx, el_orig, false, ssh_ctx,
-                                     fqname_len, fqname, &c);
+                                     name_len, name, &c);
     if (ret != EOK) {
         DEBUG(SSSDBG_OP_FAILURE, "decode_and_add_base64_data failed.\n");
         goto done;
     }
 
     ret = decode_and_add_base64_data(cmd_ctx, el_override, false, ssh_ctx,
-                                     fqname_len, fqname, &c);
+                                     name_len, name, &c);
     if (ret != EOK) {
         DEBUG(SSSDBG_OP_FAILURE, "decode_and_add_base64_data failed.\n");
         goto done;
     }
 
     ret = decode_and_add_base64_data(cmd_ctx, el_user_cert_keys, true, ssh_ctx,
-                                     fqname_len, fqname, &c);
+                                     name_len, name, &c);
     if (ret != EOK) {
         DEBUG(SSSDBG_OP_FAILURE, "decode_and_add_base64_data failed.\n");
         goto done;

From b639cf98160271dff76676ba7117fc186c3f6cc9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <[email protected]>
Date: Wed, 11 Jan 2017 11:36:50 +0100
Subject: [PATCH 3/6] cache_req: search user by name with attrs

---
 src/responder/common/cache_req/cache_req.h         | 13 +++++++++
 .../cache_req/plugins/cache_req_user_by_name.c     | 31 ++++++++++++++++++++--
 2 files changed, 42 insertions(+), 2 deletions(-)

diff --git a/src/responder/common/cache_req/cache_req.h b/src/responder/common/cache_req/cache_req.h
index 7700091..2740c21 100644
--- a/src/responder/common/cache_req/cache_req.h
+++ b/src/responder/common/cache_req/cache_req.h
@@ -186,6 +186,19 @@ cache_req_user_by_name_send(TALLOC_CTX *mem_ctx,
     cache_req_single_domain_recv(mem_ctx, req, _result)
 
 struct tevent_req *
+cache_req_user_by_name_attrs_send(TALLOC_CTX *mem_ctx,
+                                  struct tevent_context *ev,
+                                  struct resp_ctx *rctx,
+                                  struct sss_nc_ctx *ncache,
+                                  int cache_refresh_percent,
+                                  const char *domain,
+                                  const char *name,
+                                  const char **attrs);
+
+#define cache_req_user_by_name_attrs_recv(mem_ctx, req, _result) \
+    cache_req_single_domain_recv(mem_ctx, req, _result)
+
+struct tevent_req *
 cache_req_user_by_id_send(TALLOC_CTX *mem_ctx,
                           struct tevent_context *ev,
                           struct resp_ctx *rctx,
diff --git a/src/responder/common/cache_req/plugins/cache_req_user_by_name.c b/src/responder/common/cache_req/plugins/cache_req_user_by_name.c
index 46dd943..540ee70 100644
--- a/src/responder/common/cache_req/plugins/cache_req_user_by_name.c
+++ b/src/responder/common/cache_req/plugins/cache_req_user_by_name.c
@@ -105,8 +105,13 @@ cache_req_user_by_name_lookup(TALLOC_CTX *mem_ctx,
                               struct sss_domain_info *domain,
                               struct ldb_result **_result)
 {
-    return sysdb_getpwnam_with_views(mem_ctx, domain, data->name.lookup,
-                                     _result);
+    if (data->attrs == NULL) {
+        return sysdb_getpwnam_with_views(mem_ctx, domain, data->name.lookup,
+                                         _result);
+    }
+
+    return sysdb_get_user_attr_with_views(mem_ctx, domain, data->name.lookup,
+                                          data->attrs, _result);
 }
 
 static errno_t
@@ -195,3 +200,25 @@ cache_req_user_by_name_send(TALLOC_CTX *mem_ctx,
     return cache_req_steal_data_and_send(mem_ctx, ev, rctx, ncache,
                                          cache_refresh_percent, domain, data);
 }
+
+struct tevent_req *
+cache_req_user_by_name_attrs_send(TALLOC_CTX *mem_ctx,
+                                  struct tevent_context *ev,
+                                  struct resp_ctx *rctx,
+                                  struct sss_nc_ctx *ncache,
+                                  int cache_refresh_percent,
+                                  const char *domain,
+                                  const char *name,
+                                  const char **attrs)
+{
+    struct cache_req_data *data;
+
+    data = cache_req_data_name_attrs(mem_ctx, CACHE_REQ_USER_BY_NAME,
+                                     name, attrs);
+    if (data == NULL) {
+        return NULL;
+    }
+
+    return cache_req_steal_data_and_send(mem_ctx, ev, rctx, ncache,
+                                         cache_refresh_percent, domain, data);
+}

From fe079d28f3a886262cbd515a50548c6a445d776e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <[email protected]>
Date: Tue, 17 Jan 2017 14:11:32 +0100
Subject: [PATCH 4/6] cache_req: add api to create ldb_result from message

---
 src/responder/common/cache_req/cache_req.c | 47 ++++++++++++++++++------------
 1 file changed, 28 insertions(+), 19 deletions(-)

diff --git a/src/responder/common/cache_req/cache_req.c b/src/responder/common/cache_req/cache_req.c
index f546e61..ec39118 100644
--- a/src/responder/common/cache_req/cache_req.c
+++ b/src/responder/common/cache_req/cache_req.c
@@ -78,7 +78,6 @@ static errno_t cache_req_set_plugin(struct cache_req *cr,
     }
 
     cr->reqname = plugin->name;
-    cr->dp_type = plugin->dp_type;
     cr->plugin = plugin;
 
     CACHE_REQ_DEBUG(SSSDBG_TRACE_INTERNAL, cr, "Setting \"%s\" plugin\n",
@@ -813,16 +812,11 @@ cache_req_create_result(TALLOC_CTX *mem_ctx,
     return result;
 }
 
-struct cache_req_result *
-cache_req_create_result_from_msg(TALLOC_CTX *mem_ctx,
-                                 struct sss_domain_info *domain,
-                                 struct ldb_message *ldb_msg,
-                                 const char *lookup_name,
-                                 const char *well_known_domain)
+struct ldb_result *
+cache_req_create_ldb_result_from_msg(TALLOC_CTX *mem_ctx,
+                                     struct ldb_message *ldb_msg)
 {
-    struct cache_req_result *result;
     struct ldb_result *ldb_result;
-    errno_t ret;
 
     if (ldb_msg == NULL) {
         DEBUG(SSSDBG_CRIT_FAILURE, "No message set!\n");
@@ -840,23 +834,38 @@ cache_req_create_result_from_msg(TALLOC_CTX *mem_ctx,
     ldb_result->count = 1;
     ldb_result->msgs = talloc_zero_array(ldb_result, struct ldb_message *, 2);
     if (ldb_result->msgs == NULL) {
-        ret = ENOMEM;
-        goto done;
+        talloc_free(ldb_result);
+        return NULL;
     }
 
     ldb_result->msgs[0] = talloc_steal(ldb_result->msgs, ldb_msg);
 
-    result = cache_req_create_result(mem_ctx, domain, ldb_result,
-                                     lookup_name, well_known_domain);
-    if (result == NULL) {
-        ret = ENOMEM;
-        goto done;
+    return ldb_result;
+}
+
+struct cache_req_result *
+cache_req_create_result_from_msg(TALLOC_CTX *mem_ctx,
+                                 struct sss_domain_info *domain,
+                                 struct ldb_message *ldb_msg,
+                                 const char *lookup_name,
+                                 const char *well_known_domain)
+{
+    struct cache_req_result *result;
+    struct ldb_result *ldb_result;
+
+    if (ldb_msg == NULL) {
+        DEBUG(SSSDBG_CRIT_FAILURE, "No message set!\n");
+        return NULL;
     }
 
-    ret = EOK;
+    ldb_result = cache_req_create_ldb_result_from_msg(mem_ctx, ldb_msg);
+    if (ldb_result == NULL) {
+        return NULL;
+    }
 
-done:
-    if (ret != EOK) {
+    result = cache_req_create_result(mem_ctx, domain, ldb_result,
+                                     lookup_name, well_known_domain);
+    if (result == NULL) {
         talloc_free(ldb_result);
         return NULL;
     }

From 1818049241333071708dbf2929217149be69d26a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <[email protected]>
Date: Tue, 17 Jan 2017 14:11:58 +0100
Subject: [PATCH 5/6] cache_req: move dp request to plugin

This will allow to use cache req even for object that do not use
account request such as hosts.
---
 src/responder/common/cache_req/cache_req_plugin.h  |  39 ++++----
 src/responder/common/cache_req/cache_req_private.h |  13 ++-
 src/responder/common/cache_req/cache_req_search.c  | 106 ++++-----------------
 .../common/cache_req/plugins/cache_req_common.c    |  40 ++++++++
 .../cache_req/plugins/cache_req_enum_groups.c      |  24 ++---
 .../common/cache_req/plugins/cache_req_enum_svc.c  |  24 ++---
 .../cache_req/plugins/cache_req_enum_users.c       |  24 ++---
 .../cache_req/plugins/cache_req_group_by_filter.c  |  25 +++--
 .../cache_req/plugins/cache_req_group_by_id.c      |  26 ++++-
 .../cache_req/plugins/cache_req_group_by_name.c    |  26 ++++-
 .../plugins/cache_req_initgroups_by_name.c         |  26 ++++-
 .../plugins/cache_req_initgroups_by_upn.c          |  25 +++--
 .../cache_req/plugins/cache_req_netgroup_by_name.c |  25 +++--
 .../cache_req/plugins/cache_req_object_by_id.c     |  25 +++--
 .../cache_req/plugins/cache_req_object_by_name.c   |  25 +++--
 .../cache_req/plugins/cache_req_object_by_sid.c    |  24 ++---
 .../cache_req/plugins/cache_req_svc_by_name.c      |  25 +++--
 .../cache_req/plugins/cache_req_svc_by_port.c      |  25 +++--
 .../cache_req/plugins/cache_req_user_by_cert.c     |  24 ++---
 .../cache_req/plugins/cache_req_user_by_filter.c   |  25 +++--
 .../cache_req/plugins/cache_req_user_by_id.c       |  26 ++++-
 .../cache_req/plugins/cache_req_user_by_name.c     |  26 ++++-
 .../cache_req/plugins/cache_req_user_by_upn.c      |  25 +++--
 src/tests/cmocka/common_mock_resp_dp.c             |  31 +++++-
 src/tests/cmocka/test_responder_cache_req.c        |  28 +++---
 25 files changed, 400 insertions(+), 332 deletions(-)

diff --git a/src/responder/common/cache_req/cache_req_plugin.h b/src/responder/common/cache_req/cache_req_plugin.h
index e4d5eef..7b0c489 100644
--- a/src/responder/common/cache_req/cache_req_plugin.h
+++ b/src/responder/common/cache_req/cache_req_plugin.h
@@ -117,18 +117,29 @@ typedef errno_t
                        struct ldb_result **_result);
 
 /**
- * Return parameters for Data Provider request.
+ * Send Data Provider request.
  *
- * @return EOK If everything went fine.
- * @return Other errno code in case of an error.
+ * @return Tevent request on success.
+ * @return NULL on error.
  */
-typedef errno_t
-(*cache_req_dpreq_params_fn)(TALLOC_CTX *mem_ctx,
-                             struct cache_req *cr,
-                             struct ldb_result *result,
-                             const char **_string,
-                             uint32_t *_id,
-                             const char **_flag);
+typedef struct tevent_req *
+(*cache_req_dp_send_fn)(TALLOC_CTX *mem_ctx,
+                        struct cache_req *cr,
+                        struct cache_req_data *data,
+                        struct sss_domain_info *domain,
+                        struct ldb_result *result);
+
+/**
+ * Process result of Data Provider request.
+ *
+ * Do not free subreq! It will be freed in the caller.
+ *
+ * @return True if data provider request succeeded.
+ * @return False if there was an error.
+ */
+typedef bool
+(*cache_req_dp_recv_fn)(struct tevent_req *subreq,
+                        struct cache_req *cr);
 
 struct cache_req_plugin {
     /**
@@ -137,11 +148,6 @@ struct cache_req_plugin {
     const char *name;
 
     /**
-     * Data provider request type.
-     */
-    enum sss_dp_acct_type dp_type;
-
-    /**
      * Expiration timestamp attribute name.
      */
     const char *attr_expiration;
@@ -197,7 +203,8 @@ struct cache_req_plugin {
     cache_req_ncache_check_fn ncache_check_fn;
     cache_req_ncache_add_fn ncache_add_fn;
     cache_req_lookup_fn lookup_fn;
-    cache_req_dpreq_params_fn dpreq_params_fn;
+    cache_req_dp_send_fn dp_send_fn;
+    cache_req_dp_recv_fn dp_recv_fn;
 };
 
 extern const struct cache_req_plugin cache_req_user_by_name;
diff --git a/src/responder/common/cache_req/cache_req_private.h b/src/responder/common/cache_req/cache_req_private.h
index e79fe86..b544b73 100644
--- a/src/responder/common/cache_req/cache_req_private.h
+++ b/src/responder/common/cache_req/cache_req_private.h
@@ -38,11 +38,6 @@ struct cache_req {
     struct sss_nc_ctx *ncache;
     int midpoint;
 
-    /* Data Provider request type resolved from @type.
-     * FIXME: This is currently needed for data provider calls. We should
-     * refactor responder_dp.c to get rid of this member. */
-    enum sss_dp_acct_type dp_type;
-
     /* Domain related informations. */
     struct sss_domain_info *domain;
 
@@ -116,6 +111,10 @@ cache_req_create_result(TALLOC_CTX *mem_ctx,
                         const char *lookup_name,
                         const char *well_known_domain);
 
+struct ldb_result *
+cache_req_create_ldb_result_from_msg(TALLOC_CTX *mem_ctx,
+                                     struct ldb_message *ldb_msg);
+
 struct cache_req_result *
 cache_req_create_result_from_msg(TALLOC_CTX *mem_ctx,
                                  struct sss_domain_info *domain,
@@ -132,4 +131,8 @@ cache_req_well_known_sid_result(TALLOC_CTX *mem_ctx,
                                 const char *sid,
                                 const char *name);
 
+bool
+cache_req_common_dp_recv(struct tevent_req *subreq,
+                         struct cache_req *cr);
+
 #endif /* _CACHE_REQ_PRIVATE_H_ */
diff --git a/src/responder/common/cache_req/cache_req_search.c b/src/responder/common/cache_req/cache_req_search.c
index aabff38..eed82cf 100644
--- a/src/responder/common/cache_req/cache_req_search.c
+++ b/src/responder/common/cache_req/cache_req_search.c
@@ -138,70 +138,6 @@ static errno_t cache_req_search_cache(TALLOC_CTX *mem_ctx,
     return ret;
 }
 
-static errno_t cache_req_dpreq_params(TALLOC_CTX *mem_ctx,
-                                      struct cache_req *cr,
-                                      struct ldb_result *result,
-                                      const char **_string,
-                                      uint32_t *_id,
-                                      const char **_flag)
-{
-    errno_t ret;
-
-    if (cr->plugin->dpreq_params_fn == NULL) {
-        CACHE_REQ_DEBUG(SSSDBG_CRIT_FAILURE, cr,
-                        "Bug: No dpreq params function specified\n");
-        return ERR_INTERNAL;
-    }
-
-
-    CACHE_REQ_DEBUG(SSSDBG_TRACE_INTERNAL, cr,
-                    "Creating DP request parameters\n");
-
-    ret = cr->plugin->dpreq_params_fn(mem_ctx, cr, result, _string, _id, _flag);
-    if (ret != EOK) {
-        CACHE_REQ_DEBUG(SSSDBG_CRIT_FAILURE, cr,
-                        "Unable to create DP request parameters [%d]: %s\n",
-                        ret, sss_strerror(ret));
-        return ret;
-    }
-
-    return EOK;
-}
-
-static bool cache_req_search_process_dp(TALLOC_CTX *mem_ctx,
-                                        struct tevent_req *subreq,
-                                        struct cache_req *cr)
-{
-    char *err_msg;
-    dbus_uint16_t err_maj;
-    dbus_uint32_t err_min;
-    errno_t ret;
-
-    ret = sss_dp_get_account_recv(mem_ctx, subreq, &err_maj, &err_min, &err_msg);
-    talloc_zfree(subreq);
-    if (ret != EOK) {
-        CACHE_REQ_DEBUG(SSSDBG_OP_FAILURE, cr,
-                        "Could not get account info [%d]: %s\n",
-                        ret, sss_strerror(ret));
-        CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, cr,
-                        "Due to an error we will return cached data\n");
-
-        return false;
-    }
-
-    if (err_maj) {
-        CACHE_REQ_DEBUG(SSSDBG_OP_FAILURE, cr,
-                        "Data Provider Error: %u, %u, %s\n",
-                        (unsigned int)err_maj, (unsigned int)err_min, err_msg);
-        CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, cr,
-                        "Due to an error we will return cached data\n");
-
-        return false;
-    }
-
-    return true;
-}
-
 static enum cache_object_status
 cache_req_expiration_status(struct cache_req *cr,
                             struct ldb_result *result)
@@ -316,19 +252,10 @@ static errno_t cache_req_search_dp(struct tevent_req *req,
 {
     struct cache_req_search_state *state;
     struct tevent_req *subreq;
-    const char *extra_flag;
-    const char *search_str;
-    uint32_t search_id;
     errno_t ret;
 
     state = tevent_req_data(req, struct cache_req_search_state);
 
-    ret = cache_req_dpreq_params(state, state->cr, state->result,
-                                 &search_str, &search_id, &extra_flag);
-    if (ret != EOK) {
-        return ret;
-    }
-
     switch (status) {
     case CACHE_OBJECT_MIDPOINT:
         /* Out of band update. The calling function will return the cached
@@ -339,10 +266,10 @@ static errno_t cache_req_search_dp(struct tevent_req *req,
                         "Performing midpoint cache update of [%s]\n",
                         state->cr->debugobj);
 
-        subreq = sss_dp_get_account_send(state->cr->rctx, state->cr->rctx,
-                                         state->cr->domain, true,
-                                         state->cr->dp_type,
-                                         search_str, search_id, extra_flag);
+        subreq = state->cr->plugin->dp_send_fn(state->cr, state->cr,
+                                               state->cr->data,
+                                               state->cr->domain,
+                                               state->result);
         if (subreq == NULL) {
             DEBUG(SSSDBG_CRIT_FAILURE, "Out of memory sending out-of-band "
                                        "data provider request\n");
@@ -351,31 +278,37 @@ static errno_t cache_req_search_dp(struct tevent_req *req,
             tevent_req_set_callback(subreq, cache_req_search_oob_done, req);
         }
 
-        return EOK;
+        ret = EOK;
+        break;
     case CACHE_OBJECT_EXPIRED:
     case CACHE_OBJECT_MISSING:
         CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, state->cr,
                         "Looking up [%s] in data provider\n",
                         state->cr->debugobj);
 
-        subreq = sss_dp_get_account_send(state, state->cr->rctx,
-                                         state->cr->domain, true,
-                                         state->cr->dp_type,
-                                         search_str, search_id, extra_flag);
+        subreq = state->cr->plugin->dp_send_fn(state->cr, state->cr,
+                                               state->cr->data,
+                                               state->cr->domain,
+                                               state->result);
         if (subreq == NULL) {
             DEBUG(SSSDBG_CRIT_FAILURE,
                   "Out of memory sending data provider request\n");
-            return ENOMEM;
+            ret = ENOMEM;
+            break;
         }
 
         tevent_req_set_callback(subreq, cache_req_search_done, req);
-        return EAGAIN;
+        ret = EAGAIN;
+        break;
     default:
         /* error */
         CACHE_REQ_DEBUG(SSSDBG_CRIT_FAILURE, state->cr,
                         "Unexpected status [%d]\n", status);
-        return ret;
+        ret = ERR_INTERNAL;
+        break;
     }
+
+    return ret;
 }
 
 static void cache_req_search_oob_done(struct tevent_req *subreq)
@@ -395,7 +328,8 @@ static void cache_req_search_done(struct tevent_req *subreq)
     req = tevent_req_callback_data(subreq, struct tevent_req);
     state = tevent_req_data(req, struct cache_req_search_state);
 
-    state->dp_success = cache_req_search_process_dp(state, subreq, state->cr);
+    state->dp_success = state->cr->plugin->dp_recv_fn(subreq, state->cr);
+    talloc_zfree(subreq);
 
     /* Get result from cache again. */
     ret = cache_req_search_cache(state, state->cr, &state->result);
diff --git a/src/responder/common/cache_req/plugins/cache_req_common.c b/src/responder/common/cache_req/plugins/cache_req_common.c
index 4c0f358..b80f310 100644
--- a/src/responder/common/cache_req/plugins/cache_req_common.c
+++ b/src/responder/common/cache_req/plugins/cache_req_common.c
@@ -107,3 +107,43 @@ cache_req_well_known_sid_result(TALLOC_CTX *mem_ctx,
 
     return result;
 }
+
+bool
+cache_req_common_dp_recv(struct tevent_req *subreq,
+                         struct cache_req *cr)
+{
+    char *err_msg;
+    dbus_uint16_t err_maj;
+    dbus_uint32_t err_min;
+    errno_t ret;
+    bool bret;
+
+    ret = sss_dp_req_recv(NULL, subreq, &err_maj, &err_min, &err_msg);
+    if (ret != EOK) {
+        CACHE_REQ_DEBUG(SSSDBG_OP_FAILURE, cr,
+                        "Could not get account info [%d]: %s\n",
+                        ret, sss_strerror(ret));
+        CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, cr,
+                        "Due to an error we will return cached data\n");
+
+        bret = false;
+        goto done;
+    }
+
+    if (err_maj) {
+        CACHE_REQ_DEBUG(SSSDBG_OP_FAILURE, cr,
+                        "Data Provider Error: %u, %u, %s\n",
+                        (unsigned int)err_maj, (unsigned int)err_min, err_msg);
+        CACHE_REQ_DEBUG(SSSDBG_TRACE_FUNC, cr,
+                        "Due to an error we will return cached data\n");
+
+        bret = false;
+        goto done;
+    }
+
+    bret = true;
+
+done:
+    talloc_free(err_msg);
+    return bret;
+}
diff --git a/src/responder/common/cache_req/plugins/cache_req_enum_groups.c b/src/responder/common/cache_req/plugins/cache_req_enum_groups.c
index de4bd96..f14f52b 100644
--- a/src/responder/common/cache_req/plugins/cache_req_enum_groups.c
+++ b/src/responder/common/cache_req/plugins/cache_req_enum_groups.c
@@ -44,24 +44,19 @@ cache_req_enum_groups_lookup(TALLOC_CTX *mem_ctx,
     return sysdb_enumgrent_with_views(mem_ctx, domain, _result);
 }
 
-static errno_t
-cache_req_enum_groups_dpreq_params(TALLOC_CTX *mem_ctx,
-                                   struct cache_req *cr,
-                                   struct ldb_result *result,
-                                   const char **_string,
-                                   uint32_t *_id,
-                                   const char **_flag)
+static struct tevent_req *
+cache_req_enum_groups_dp_send(TALLOC_CTX *mem_ctx,
+                              struct cache_req *cr,
+                              struct cache_req_data *data,
+                              struct sss_domain_info *domain,
+                              struct ldb_result *result)
 {
-    *_id = 0;
-    *_string = NULL;
-    *_flag = NULL;
-
-    return EOK;
+    return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+                                   SSS_DP_GROUP, NULL, 0, NULL);
 }
 
 const struct cache_req_plugin cache_req_enum_groups = {
     .name = "Enumerate groups",
-    .dp_type = SSS_DP_GROUP,
     .attr_expiration = SYSDB_CACHE_EXPIRE,
     .parse_name = false,
     .bypass_cache = true,
@@ -80,7 +75,8 @@ const struct cache_req_plugin cache_req_enum_groups = {
     .ncache_check_fn = NULL,
     .ncache_add_fn = NULL,
     .lookup_fn = cache_req_enum_groups_lookup,
-    .dpreq_params_fn = cache_req_enum_groups_dpreq_params
+    .dp_send_fn = cache_req_enum_groups_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
 };
 
 struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_enum_svc.c b/src/responder/common/cache_req/plugins/cache_req_enum_svc.c
index c83564f..89ee124 100644
--- a/src/responder/common/cache_req/plugins/cache_req_enum_svc.c
+++ b/src/responder/common/cache_req/plugins/cache_req_enum_svc.c
@@ -45,24 +45,19 @@ cache_req_enum_svc_lookup(TALLOC_CTX *mem_ctx,
     return sysdb_enumservent(mem_ctx, domain, _result);
 }
 
-static errno_t
-cache_req_enum_svc_dpreq_params(TALLOC_CTX *mem_ctx,
-                                struct cache_req *cr,
-                                struct ldb_result *result,
-                                const char **_string,
-                                uint32_t *_id,
-                                const char **_flag)
+static struct tevent_req *
+cache_req_enum_svc_dp_send(TALLOC_CTX *mem_ctx,
+                           struct cache_req *cr,
+                           struct cache_req_data *data,
+                           struct sss_domain_info *domain,
+                           struct ldb_result *result)
 {
-    *_id = 0;
-    *_string = NULL;
-    *_flag = NULL;
-
-    return EOK;
+    return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+                                   SSS_DP_SERVICES, NULL, 0, NULL);
 }
 
 const struct cache_req_plugin cache_req_enum_svc = {
     .name = "Enumerate services",
-    .dp_type = SSS_DP_SERVICES,
     .attr_expiration = SYSDB_CACHE_EXPIRE,
     .parse_name = false,
     .bypass_cache = true,
@@ -81,7 +76,8 @@ const struct cache_req_plugin cache_req_enum_svc = {
     .ncache_check_fn = NULL,
     .ncache_add_fn = NULL,
     .lookup_fn = cache_req_enum_svc_lookup,
-    .dpreq_params_fn = cache_req_enum_svc_dpreq_params
+    .dp_send_fn = cache_req_enum_svc_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
 };
 
 struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_enum_users.c b/src/responder/common/cache_req/plugins/cache_req_enum_users.c
index c4eeed7..5dbe3c1 100644
--- a/src/responder/common/cache_req/plugins/cache_req_enum_users.c
+++ b/src/responder/common/cache_req/plugins/cache_req_enum_users.c
@@ -44,24 +44,19 @@ cache_req_enum_users_lookup(TALLOC_CTX *mem_ctx,
     return sysdb_enumpwent_with_views(mem_ctx, domain, _result);
 }
 
-static errno_t
-cache_req_enum_users_dpreq_params(TALLOC_CTX *mem_ctx,
-                                  struct cache_req *cr,
-                                  struct ldb_result *result,
-                                  const char **_string,
-                                  uint32_t *_id,
-                                  const char **_flag)
+static struct tevent_req *
+cache_req_enum_users_dp_send(TALLOC_CTX *mem_ctx,
+                             struct cache_req *cr,
+                             struct cache_req_data *data,
+                             struct sss_domain_info *domain,
+                             struct ldb_result *result)
 {
-    *_id = 0;
-    *_string = NULL;
-    *_flag = NULL;
-
-    return EOK;
+    return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+                                   SSS_DP_USER, NULL, 0, NULL);
 }
 
 const struct cache_req_plugin cache_req_enum_users = {
     .name = "Enumerate users",
-    .dp_type = SSS_DP_USER,
     .attr_expiration = SYSDB_CACHE_EXPIRE,
     .parse_name = false,
     .bypass_cache = true,
@@ -80,7 +75,8 @@ const struct cache_req_plugin cache_req_enum_users = {
     .ncache_check_fn = NULL,
     .ncache_add_fn = NULL,
     .lookup_fn = cache_req_enum_users_lookup,
-    .dpreq_params_fn = cache_req_enum_users_dpreq_params
+    .dp_send_fn = cache_req_enum_users_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
 };
 
 struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_group_by_filter.c b/src/responder/common/cache_req/plugins/cache_req_group_by_filter.c
index 1619cf7..272f7ed 100644
--- a/src/responder/common/cache_req/plugins/cache_req_group_by_filter.c
+++ b/src/responder/common/cache_req/plugins/cache_req_group_by_filter.c
@@ -99,24 +99,20 @@ cache_req_group_by_filter_lookup(TALLOC_CTX *mem_ctx,
     return ret;
 }
 
-static errno_t
-cache_req_group_by_filter_dpreq_params(TALLOC_CTX *mem_ctx,
-                                       struct cache_req *cr,
-                                       struct ldb_result *result,
-                                       const char **_string,
-                                       uint32_t *_id,
-                                       const char **_flag)
+static struct tevent_req *
+cache_req_group_by_filter_dp_send(TALLOC_CTX *mem_ctx,
+                                  struct cache_req *cr,
+                                  struct cache_req_data *data,
+                                  struct sss_domain_info *domain,
+                                  struct ldb_result *result)
 {
-    *_id = cr->data->id;
-    *_string = cr->data->name.lookup;
-    *_flag = NULL;
-
-    return EOK;
+    return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+                                   SSS_DP_WILDCARD_GROUP,
+                                   cr->data->name.lookup, cr->data->id, NULL);
 }
 
 const struct cache_req_plugin cache_req_group_by_filter = {
     .name = "Group by filter",
-    .dp_type = SSS_DP_WILDCARD_GROUP,
     .attr_expiration = SYSDB_CACHE_EXPIRE,
     .parse_name = true,
     .bypass_cache = true,
@@ -135,7 +131,8 @@ const struct cache_req_plugin cache_req_group_by_filter = {
     .ncache_check_fn = NULL,
     .ncache_add_fn = NULL,
     .lookup_fn = cache_req_group_by_filter_lookup,
-    .dpreq_params_fn = cache_req_group_by_filter_dpreq_params
+    .dp_send_fn = cache_req_group_by_filter_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
 };
 
 struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_group_by_id.c b/src/responder/common/cache_req/plugins/cache_req_group_by_id.c
index 293994f..5be8432 100644
--- a/src/responder/common/cache_req/plugins/cache_req_group_by_id.c
+++ b/src/responder/common/cache_req/plugins/cache_req_group_by_id.c
@@ -102,9 +102,30 @@ cache_req_group_by_id_dpreq_params(TALLOC_CTX *mem_ctx,
     return EOK;
 }
 
+static struct tevent_req *
+cache_req_group_by_id_dp_send(TALLOC_CTX *mem_ctx,
+                              struct cache_req *cr,
+                              struct cache_req_data *data,
+                              struct sss_domain_info *domain,
+                              struct ldb_result *result)
+{
+    const char *string;
+    const char *flag;
+    uint32_t id;
+    errno_t ret;
+
+    ret = cache_req_group_by_id_dpreq_params(mem_ctx, cr, result,
+                                             &string, &id, &flag);
+    if (ret != EOK) {
+        return NULL;
+    }
+
+    return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+                                   SSS_DP_GROUP, string, id, flag);
+}
+
 const struct cache_req_plugin cache_req_group_by_id = {
     .name = "Group by ID",
-    .dp_type = SSS_DP_GROUP,
     .attr_expiration = SYSDB_CACHE_EXPIRE,
     .parse_name = false,
     .bypass_cache = false,
@@ -123,7 +144,8 @@ const struct cache_req_plugin cache_req_group_by_id = {
     .ncache_check_fn = cache_req_group_by_id_ncache_check,
     .ncache_add_fn = NULL,
     .lookup_fn = cache_req_group_by_id_lookup,
-    .dpreq_params_fn = cache_req_group_by_id_dpreq_params
+    .dp_send_fn = cache_req_group_by_id_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
 };
 
 struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_group_by_name.c b/src/responder/common/cache_req/plugins/cache_req_group_by_name.c
index c88dbd4..d82cf80 100644
--- a/src/responder/common/cache_req/plugins/cache_req_group_by_name.c
+++ b/src/responder/common/cache_req/plugins/cache_req_group_by_name.c
@@ -152,9 +152,30 @@ cache_req_group_by_name_dpreq_params(TALLOC_CTX *mem_ctx,
     return EOK;
 }
 
+static struct tevent_req *
+cache_req_group_by_name_dp_send(TALLOC_CTX *mem_ctx,
+                                struct cache_req *cr,
+                                struct cache_req_data *data,
+                                struct sss_domain_info *domain,
+                                struct ldb_result *result)
+{
+    const char *string;
+    const char *flag;
+    uint32_t id;
+    errno_t ret;
+
+    ret = cache_req_group_by_name_dpreq_params(mem_ctx, cr, result,
+                                             &string, &id, &flag);
+    if (ret != EOK) {
+        return NULL;
+    }
+
+    return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+                                   SSS_DP_GROUP, string, id, flag);
+}
+
 const struct cache_req_plugin cache_req_group_by_name = {
     .name = "Group by name",
-    .dp_type = SSS_DP_GROUP,
     .attr_expiration = SYSDB_CACHE_EXPIRE,
     .parse_name = true,
     .bypass_cache = false,
@@ -173,7 +194,8 @@ const struct cache_req_plugin cache_req_group_by_name = {
     .ncache_check_fn = cache_req_group_by_name_ncache_check,
     .ncache_add_fn = cache_req_group_by_name_ncache_add,
     .lookup_fn = cache_req_group_by_name_lookup,
-    .dpreq_params_fn = cache_req_group_by_name_dpreq_params
+    .dp_send_fn = cache_req_group_by_name_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
 };
 
 struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_initgroups_by_name.c b/src/responder/common/cache_req/plugins/cache_req_initgroups_by_name.c
index 9575ae7..2604732 100644
--- a/src/responder/common/cache_req/plugins/cache_req_initgroups_by_name.c
+++ b/src/responder/common/cache_req/plugins/cache_req_initgroups_by_name.c
@@ -167,9 +167,30 @@ cache_req_initgroups_by_name_dpreq_params(TALLOC_CTX *mem_ctx,
     return EOK;
 }
 
+static struct tevent_req *
+cache_req_initgroups_by_name_dp_send(TALLOC_CTX *mem_ctx,
+                                     struct cache_req *cr,
+                                     struct cache_req_data *data,
+                                     struct sss_domain_info *domain,
+                                     struct ldb_result *result)
+{
+    const char *string;
+    const char *flag;
+    uint32_t id;
+    errno_t ret;
+
+    ret = cache_req_initgroups_by_name_dpreq_params(mem_ctx, cr, result,
+                                                    &string, &id, &flag);
+    if (ret != EOK) {
+        return NULL;
+    }
+
+    return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+                                   SSS_DP_INITGROUPS, string, id, flag);
+}
+
 const struct cache_req_plugin cache_req_initgroups_by_name = {
     .name = "Initgroups by name",
-    .dp_type = SSS_DP_INITGROUPS,
     .attr_expiration = SYSDB_INITGR_EXPIRE,
     .parse_name = true,
     .bypass_cache = false,
@@ -188,7 +209,8 @@ const struct cache_req_plugin cache_req_initgroups_by_name = {
     .ncache_check_fn = cache_req_initgroups_by_name_ncache_check,
     .ncache_add_fn = cache_req_initgroups_by_name_ncache_add,
     .lookup_fn = cache_req_initgroups_by_name_lookup,
-    .dpreq_params_fn = cache_req_initgroups_by_name_dpreq_params
+    .dp_send_fn = cache_req_initgroups_by_name_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
 };
 
 struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_initgroups_by_upn.c b/src/responder/common/cache_req/plugins/cache_req_initgroups_by_upn.c
index 7a0b96b..d967973 100644
--- a/src/responder/common/cache_req/plugins/cache_req_initgroups_by_upn.c
+++ b/src/responder/common/cache_req/plugins/cache_req_initgroups_by_upn.c
@@ -88,24 +88,20 @@ cache_req_initgroups_by_upn_lookup(TALLOC_CTX *mem_ctx,
                                    _result);
 }
 
-static errno_t
-cache_req_initgroups_by_upn_dpreq_params(TALLOC_CTX *mem_ctx,
-                                         struct cache_req *cr,
-                                         struct ldb_result *result,
-                                         const char **_string,
-                                         uint32_t *_id,
-                                         const char **_flag)
+static struct tevent_req *
+cache_req_initgroups_by_upn_dp_send(TALLOC_CTX *mem_ctx,
+                                    struct cache_req *cr,
+                                    struct cache_req_data *data,
+                                    struct sss_domain_info *domain,
+                                    struct ldb_result *result)
 {
-    *_id = 0;
-    *_string = cr->data->name.lookup;
-    *_flag = EXTRA_NAME_IS_UPN;
-
-    return EOK;
+    return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+                                   SSS_DP_INITGROUPS, cr->data->name.lookup,
+                                   0, EXTRA_NAME_IS_UPN);
 }
 
 const struct cache_req_plugin cache_req_initgroups_by_upn = {
     .name = "Initgroups by UPN",
-    .dp_type = SSS_DP_INITGROUPS,
     .attr_expiration = SYSDB_INITGR_EXPIRE,
     .parse_name = false,
     .bypass_cache = false,
@@ -124,5 +120,6 @@ const struct cache_req_plugin cache_req_initgroups_by_upn = {
     .ncache_check_fn = cache_req_initgroups_by_upn_ncache_check,
     .ncache_add_fn = cache_req_initgroups_by_upn_ncache_add,
     .lookup_fn = cache_req_initgroups_by_upn_lookup,
-    .dpreq_params_fn = cache_req_initgroups_by_upn_dpreq_params
+    .dp_send_fn = cache_req_initgroups_by_upn_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
 };
diff --git a/src/responder/common/cache_req/plugins/cache_req_netgroup_by_name.c b/src/responder/common/cache_req/plugins/cache_req_netgroup_by_name.c
index 15549ad..d874057 100644
--- a/src/responder/common/cache_req/plugins/cache_req_netgroup_by_name.c
+++ b/src/responder/common/cache_req/plugins/cache_req_netgroup_by_name.c
@@ -96,24 +96,20 @@ cache_req_netgroup_by_name_lookup(TALLOC_CTX *mem_ctx,
     return sysdb_getnetgr(mem_ctx, domain, data->name.lookup, _result);
 }
 
-static errno_t
-cache_req_netgroup_by_name_dpreq_params(TALLOC_CTX *mem_ctx,
-                                        struct cache_req *cr,
-                                        struct ldb_result *result,
-                                        const char **_string,
-                                        uint32_t *_id,
-                                        const char **_flag)
+static struct tevent_req *
+cache_req_netgroup_by_name_dp_send(TALLOC_CTX *mem_ctx,
+                                   struct cache_req *cr,
+                                   struct cache_req_data *data,
+                                   struct sss_domain_info *domain,
+                                   struct ldb_result *result)
 {
-    *_id = 0;
-    *_string = cr->data->name.lookup;
-    *_flag = NULL;
-
-    return EOK;
+    return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+                                   SSS_DP_NETGR, cr->data->name.lookup,
+                                   0, NULL);
 }
 
 const struct cache_req_plugin cache_req_netgroup_by_name = {
     .name = "Netgroup by name",
-    .dp_type = SSS_DP_NETGR,
     .attr_expiration = SYSDB_CACHE_EXPIRE,
     .parse_name = true,
     .bypass_cache = false,
@@ -132,7 +128,8 @@ const struct cache_req_plugin cache_req_netgroup_by_name = {
     .ncache_check_fn = cache_req_netgroup_by_name_ncache_check,
     .ncache_add_fn = cache_req_netgroup_by_name_ncache_add,
     .lookup_fn = cache_req_netgroup_by_name_lookup,
-    .dpreq_params_fn = cache_req_netgroup_by_name_dpreq_params
+    .dp_send_fn = cache_req_netgroup_by_name_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
 };
 
 struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_object_by_id.c b/src/responder/common/cache_req/plugins/cache_req_object_by_id.c
index b8ad3b5..42adc81 100644
--- a/src/responder/common/cache_req/plugins/cache_req_object_by_id.c
+++ b/src/responder/common/cache_req/plugins/cache_req_object_by_id.c
@@ -79,24 +79,20 @@ cache_req_object_by_id_lookup(TALLOC_CTX *mem_ctx,
                                      data->attrs, _result);
 }
 
-static errno_t
-cache_req_object_by_id_dpreq_params(TALLOC_CTX *mem_ctx,
-                                    struct cache_req *cr,
-                                    struct ldb_result *result,
-                                    const char **_string,
-                                    uint32_t *_id,
-                                    const char **_flag)
+static struct tevent_req *
+cache_req_object_by_id_dp_send(TALLOC_CTX *mem_ctx,
+                              struct cache_req *cr,
+                              struct cache_req_data *data,
+                              struct sss_domain_info *domain,
+                              struct ldb_result *result)
 {
-    *_id = cr->data->id;
-    *_string = NULL;
-    *_flag = NULL;
-
-    return EOK;
+    return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+                                   SSS_DP_USER_AND_GROUP, NULL,
+                                   cr->data->id, NULL);
 }
 
 const struct cache_req_plugin cache_req_object_by_id = {
     .name = "Object by ID",
-    .dp_type = SSS_DP_USER_AND_GROUP,
     .attr_expiration = SYSDB_CACHE_EXPIRE,
     .parse_name = false,
     .bypass_cache = false,
@@ -115,7 +111,8 @@ const struct cache_req_plugin cache_req_object_by_id = {
     .ncache_check_fn = cache_req_object_by_id_ncache_check,
     .ncache_add_fn = NULL,
     .lookup_fn = cache_req_object_by_id_lookup,
-    .dpreq_params_fn = cache_req_object_by_id_dpreq_params
+    .dp_send_fn = cache_req_object_by_id_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
 };
 
 struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_object_by_name.c b/src/responder/common/cache_req/plugins/cache_req_object_by_name.c
index 1ec906c..bbddeea 100644
--- a/src/responder/common/cache_req/plugins/cache_req_object_by_name.c
+++ b/src/responder/common/cache_req/plugins/cache_req_object_by_name.c
@@ -172,24 +172,20 @@ cache_req_object_by_name_lookup(TALLOC_CTX *mem_ctx,
                                        data->attrs, _result);
 }
 
-static errno_t
-cache_req_object_by_name_dpreq_params(TALLOC_CTX *mem_ctx,
-                                      struct cache_req *cr,
-                                      struct ldb_result *result,
-                                      const char **_string,
-                                      uint32_t *_id,
-                                      const char **_flag)
+static struct tevent_req *
+cache_req_object_by_name_dp_send(TALLOC_CTX *mem_ctx,
+                                 struct cache_req *cr,
+                                 struct cache_req_data *data,
+                                 struct sss_domain_info *domain,
+                                 struct ldb_result *result)
 {
-    *_id = 0;
-    *_string = cr->data->name.lookup;
-    *_flag = NULL;
-
-    return EOK;
+    return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+                                   SSS_DP_USER_AND_GROUP,
+                                   cr->data->name.lookup, 0, NULL);
 }
 
 const struct cache_req_plugin cache_req_object_by_name = {
     .name = "Object by name",
-    .dp_type = SSS_DP_USER_AND_GROUP,
     .attr_expiration = SYSDB_CACHE_EXPIRE,
     .parse_name = true,
     .bypass_cache = false,
@@ -208,7 +204,8 @@ const struct cache_req_plugin cache_req_object_by_name = {
     .ncache_check_fn = cache_req_object_by_name_ncache_check,
     .ncache_add_fn = cache_req_object_by_name_ncache_add,
     .lookup_fn = cache_req_object_by_name_lookup,
-    .dpreq_params_fn = cache_req_object_by_name_dpreq_params
+    .dp_send_fn = cache_req_object_by_name_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
 };
 
 struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_object_by_sid.c b/src/responder/common/cache_req/plugins/cache_req_object_by_sid.c
index 35cb74f..99f3dbb 100644
--- a/src/responder/common/cache_req/plugins/cache_req_object_by_sid.c
+++ b/src/responder/common/cache_req/plugins/cache_req_object_by_sid.c
@@ -89,24 +89,19 @@ cache_req_object_by_sid_lookup(TALLOC_CTX *mem_ctx,
                                      _result);
 }
 
-static errno_t
-cache_req_object_by_sid_dpreq_params(TALLOC_CTX *mem_ctx,
-                                     struct cache_req *cr,
-                                     struct ldb_result *result,
-                                     const char **_string,
-                                     uint32_t *_id,
-                                     const char **_flag)
+static struct tevent_req *
+cache_req_object_by_sid_dp_send(TALLOC_CTX *mem_ctx,
+                                struct cache_req *cr,
+                                struct cache_req_data *data,
+                                struct sss_domain_info *domain,
+                                struct ldb_result *result)
 {
-    *_id = 0;
-    *_string = cr->data->sid;
-    *_flag = NULL;
-
-    return EOK;
+    return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+                                   SSS_DP_SECID, cr->data->sid, 0, NULL);
 }
 
 const struct cache_req_plugin cache_req_object_by_sid = {
     .name = "Object by SID",
-    .dp_type = SSS_DP_SECID,
     .attr_expiration = SYSDB_CACHE_EXPIRE,
     .parse_name = false,
     .bypass_cache = false,
@@ -125,7 +120,8 @@ const struct cache_req_plugin cache_req_object_by_sid = {
     .ncache_check_fn = cache_req_object_by_sid_ncache_check,
     .ncache_add_fn = NULL,
     .lookup_fn = cache_req_object_by_sid_lookup,
-    .dpreq_params_fn = cache_req_object_by_sid_dpreq_params
+    .dp_send_fn = cache_req_object_by_sid_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
 };
 
 struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_svc_by_name.c b/src/responder/common/cache_req/plugins/cache_req_svc_by_name.c
index 4de2757..3c25f4f 100644
--- a/src/responder/common/cache_req/plugins/cache_req_svc_by_name.c
+++ b/src/responder/common/cache_req/plugins/cache_req_svc_by_name.c
@@ -120,24 +120,20 @@ cache_req_svc_by_name_lookup(TALLOC_CTX *mem_ctx,
                                data->svc.protocol.lookup, _result);
 }
 
-static errno_t
-cache_req_svc_by_name_dpreq_params(TALLOC_CTX *mem_ctx,
-                                   struct cache_req *cr,
-                                   struct ldb_result *result,
-                                   const char **_string,
-                                   uint32_t *_id,
-                                   const char **_flag)
+static struct tevent_req *
+cache_req_svc_by_name_dp_send(TALLOC_CTX *mem_ctx,
+                              struct cache_req *cr,
+                              struct cache_req_data *data,
+                              struct sss_domain_info *domain,
+                              struct ldb_result *result)
 {
-    *_id = 0;
-    *_string = cr->data->svc.name->lookup;
-    *_flag = cr->data->svc.protocol.lookup;
-
-    return EOK;
+    return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+                                   SSS_DP_SERVICES, cr->data->svc.name->lookup,
+                                   0, cr->data->svc.protocol.lookup);
 }
 
 const struct cache_req_plugin cache_req_svc_by_name = {
     .name = "Service by name",
-    .dp_type = SSS_DP_SERVICES,
     .attr_expiration = SYSDB_CACHE_EXPIRE,
     .parse_name = true,
     .bypass_cache = false,
@@ -156,7 +152,8 @@ const struct cache_req_plugin cache_req_svc_by_name = {
     .ncache_check_fn = cache_req_svc_by_name_ncache_check,
     .ncache_add_fn = cache_req_svc_by_name_ncache_add,
     .lookup_fn = cache_req_svc_by_name_lookup,
-    .dpreq_params_fn = cache_req_svc_by_name_dpreq_params
+    .dp_send_fn = cache_req_svc_by_name_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
 };
 
 struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_svc_by_port.c b/src/responder/common/cache_req/plugins/cache_req_svc_by_port.c
index 1b17c71..b16de59 100644
--- a/src/responder/common/cache_req/plugins/cache_req_svc_by_port.c
+++ b/src/responder/common/cache_req/plugins/cache_req_svc_by_port.c
@@ -93,24 +93,20 @@ cache_req_svc_by_port_lookup(TALLOC_CTX *mem_ctx,
                                data->svc.protocol.lookup, _result);
 }
 
-static errno_t
-cache_req_svc_by_port_dpreq_params(TALLOC_CTX *mem_ctx,
-                                   struct cache_req *cr,
-                                   struct ldb_result *result,
-                                   const char **_string,
-                                   uint32_t *_id,
-                                   const char **_flag)
+static struct tevent_req *
+cache_req_svc_by_port_dp_send(TALLOC_CTX *mem_ctx,
+                              struct cache_req *cr,
+                              struct cache_req_data *data,
+                              struct sss_domain_info *domain,
+                              struct ldb_result *result)
 {
-    *_id = cr->data->svc.port;
-    *_string = NULL;
-    *_flag = cr->data->svc.protocol.lookup;
-
-    return EOK;
+    return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+                                   SSS_DP_SERVICES, NULL, cr->data->svc.port,
+                                   cr->data->svc.protocol.lookup);
 }
 
 const struct cache_req_plugin cache_req_svc_by_port = {
     .name = "Service by port",
-    .dp_type = SSS_DP_SERVICES,
     .attr_expiration = SYSDB_CACHE_EXPIRE,
     .parse_name = false,
     .bypass_cache = false,
@@ -129,7 +125,8 @@ const struct cache_req_plugin cache_req_svc_by_port = {
     .ncache_check_fn = cache_req_svc_by_port_ncache_check,
     .ncache_add_fn = cache_req_svc_by_port_ncache_add,
     .lookup_fn = cache_req_svc_by_port_lookup,
-    .dpreq_params_fn = cache_req_svc_by_port_dpreq_params
+    .dp_send_fn = cache_req_svc_by_port_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
 };
 
 struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_user_by_cert.c b/src/responder/common/cache_req/plugins/cache_req_user_by_cert.c
index 9a1bcc6..321eca2 100644
--- a/src/responder/common/cache_req/plugins/cache_req_user_by_cert.c
+++ b/src/responder/common/cache_req/plugins/cache_req_user_by_cert.c
@@ -63,24 +63,19 @@ cache_req_user_by_cert_lookup(TALLOC_CTX *mem_ctx,
                                                 _result);
 }
 
-static errno_t
-cache_req_user_by_cert_dpreq_params(TALLOC_CTX *mem_ctx,
-                                    struct cache_req *cr,
-                                    struct ldb_result *result,
-                                    const char **_string,
-                                    uint32_t *_id,
-                                    const char **_flag)
+static struct tevent_req *
+cache_req_user_by_cert_dp_send(TALLOC_CTX *mem_ctx,
+                               struct cache_req *cr,
+                               struct cache_req_data *data,
+                               struct sss_domain_info *domain,
+                               struct ldb_result *result)
 {
-    *_id = 0;
-    *_string = cr->data->cert;
-    *_flag = NULL;
-
-    return EOK;
+    return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+                                   SSS_DP_CERT, cr->data->cert, 0, NULL);
 }
 
 const struct cache_req_plugin cache_req_user_by_cert = {
     .name = "User by certificate",
-    .dp_type = SSS_DP_CERT,
     .attr_expiration = SYSDB_CACHE_EXPIRE,
     .parse_name = false,
     .bypass_cache = false,
@@ -99,7 +94,8 @@ const struct cache_req_plugin cache_req_user_by_cert = {
     .ncache_check_fn = cache_req_user_by_cert_ncache_check,
     .ncache_add_fn = NULL,
     .lookup_fn = cache_req_user_by_cert_lookup,
-    .dpreq_params_fn = cache_req_user_by_cert_dpreq_params
+    .dp_send_fn = cache_req_user_by_cert_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
 };
 
 struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_user_by_filter.c b/src/responder/common/cache_req/plugins/cache_req_user_by_filter.c
index ee9f60b..d89d526 100644
--- a/src/responder/common/cache_req/plugins/cache_req_user_by_filter.c
+++ b/src/responder/common/cache_req/plugins/cache_req_user_by_filter.c
@@ -99,24 +99,20 @@ cache_req_user_by_filter_lookup(TALLOC_CTX *mem_ctx,
     return ret;
 }
 
-static errno_t
-cache_req_user_by_filter_dpreq_params(TALLOC_CTX *mem_ctx,
-                                      struct cache_req *cr,
-                                      struct ldb_result *result,
-                                      const char **_string,
-                                      uint32_t *_id,
-                                      const char **_flag)
+static struct tevent_req *
+cache_req_user_by_filter_dp_send(TALLOC_CTX *mem_ctx,
+                                 struct cache_req *cr,
+                                 struct cache_req_data *data,
+                                 struct sss_domain_info *domain,
+                                 struct ldb_result *result)
 {
-    *_id = cr->data->id;
-    *_string = cr->data->name.lookup;
-    *_flag = NULL;
-
-    return EOK;
+    return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+                                   SSS_DP_WILDCARD_USER, cr->data->name.lookup,
+                                   cr->data->id, NULL);
 }
 
 const struct cache_req_plugin cache_req_user_by_filter = {
     .name = "User by filter",
-    .dp_type = SSS_DP_WILDCARD_USER,
     .attr_expiration = SYSDB_CACHE_EXPIRE,
     .parse_name = true,
     .bypass_cache = true,
@@ -135,7 +131,8 @@ const struct cache_req_plugin cache_req_user_by_filter = {
     .ncache_check_fn = NULL,
     .ncache_add_fn = NULL,
     .lookup_fn = cache_req_user_by_filter_lookup,
-    .dpreq_params_fn = cache_req_user_by_filter_dpreq_params
+    .dp_send_fn = cache_req_user_by_filter_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
 };
 
 struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_user_by_id.c b/src/responder/common/cache_req/plugins/cache_req_user_by_id.c
index d710986..59f4b6b 100644
--- a/src/responder/common/cache_req/plugins/cache_req_user_by_id.c
+++ b/src/responder/common/cache_req/plugins/cache_req_user_by_id.c
@@ -102,9 +102,30 @@ cache_req_user_by_id_dpreq_params(TALLOC_CTX *mem_ctx,
     return EOK;
 }
 
+static struct tevent_req *
+cache_req_user_by_id_dp_send(TALLOC_CTX *mem_ctx,
+                             struct cache_req *cr,
+                             struct cache_req_data *data,
+                             struct sss_domain_info *domain,
+                             struct ldb_result *result)
+{
+    const char *string;
+    const char *flag;
+    uint32_t id;
+    errno_t ret;
+
+    ret = cache_req_user_by_id_dpreq_params(mem_ctx, cr, result,
+                                            &string, &id, &flag);
+    if (ret != EOK) {
+        return NULL;
+    }
+
+    return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+                                   SSS_DP_USER, string, id, flag);
+}
+
 const struct cache_req_plugin cache_req_user_by_id = {
     .name = "User by ID",
-    .dp_type = SSS_DP_USER,
     .attr_expiration = SYSDB_CACHE_EXPIRE,
     .parse_name = false,
     .bypass_cache = false,
@@ -123,7 +144,8 @@ const struct cache_req_plugin cache_req_user_by_id = {
     .ncache_check_fn = cache_req_user_by_id_ncache_check,
     .ncache_add_fn = NULL,
     .lookup_fn = cache_req_user_by_id_lookup,
-    .dpreq_params_fn = cache_req_user_by_id_dpreq_params
+    .dp_send_fn = cache_req_user_by_id_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
 };
 
 struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_user_by_name.c b/src/responder/common/cache_req/plugins/cache_req_user_by_name.c
index 540ee70..64259d6 100644
--- a/src/responder/common/cache_req/plugins/cache_req_user_by_name.c
+++ b/src/responder/common/cache_req/plugins/cache_req_user_by_name.c
@@ -157,9 +157,30 @@ cache_req_user_by_name_dpreq_params(TALLOC_CTX *mem_ctx,
     return EOK;
 }
 
+static struct tevent_req *
+cache_req_user_by_name_dp_send(TALLOC_CTX *mem_ctx,
+                             struct cache_req *cr,
+                             struct cache_req_data *data,
+                             struct sss_domain_info *domain,
+                             struct ldb_result *result)
+{
+    const char *string;
+    const char *flag;
+    uint32_t id;
+    errno_t ret;
+
+    ret = cache_req_user_by_name_dpreq_params(mem_ctx, cr, result,
+                                             &string, &id, &flag);
+    if (ret != EOK) {
+        return NULL;
+    }
+
+    return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+                                   SSS_DP_USER, string, id, flag);
+}
+
 const struct cache_req_plugin cache_req_user_by_name = {
     .name = "User by name",
-    .dp_type = SSS_DP_USER,
     .attr_expiration = SYSDB_CACHE_EXPIRE,
     .parse_name = true,
     .bypass_cache = false,
@@ -178,7 +199,8 @@ const struct cache_req_plugin cache_req_user_by_name = {
     .ncache_check_fn = cache_req_user_by_name_ncache_check,
     .ncache_add_fn = cache_req_user_by_name_ncache_add,
     .lookup_fn = cache_req_user_by_name_lookup,
-    .dpreq_params_fn = cache_req_user_by_name_dpreq_params
+    .dp_send_fn = cache_req_user_by_name_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
 };
 
 struct tevent_req *
diff --git a/src/responder/common/cache_req/plugins/cache_req_user_by_upn.c b/src/responder/common/cache_req/plugins/cache_req_user_by_upn.c
index 9d1e703..18fe601 100644
--- a/src/responder/common/cache_req/plugins/cache_req_user_by_upn.c
+++ b/src/responder/common/cache_req/plugins/cache_req_user_by_upn.c
@@ -92,24 +92,20 @@ cache_req_user_by_upn_lookup(TALLOC_CTX *mem_ctx,
                                         data->attrs, _result);
 }
 
-static errno_t
-cache_req_user_by_upn_dpreq_params(TALLOC_CTX *mem_ctx,
-                                   struct cache_req *cr,
-                                   struct ldb_result *result,
-                                   const char **_string,
-                                   uint32_t *_id,
-                                   const char **_flag)
+static struct tevent_req *
+cache_req_user_by_upn_dp_send(TALLOC_CTX *mem_ctx,
+                              struct cache_req *cr,
+                              struct cache_req_data *data,
+                              struct sss_domain_info *domain,
+                              struct ldb_result *result)
 {
-    *_id = 0;
-    *_string = cr->data->name.lookup;
-    *_flag = EXTRA_NAME_IS_UPN;
-
-    return EOK;
+    return sss_dp_get_account_send(mem_ctx, cr->rctx, domain, true,
+                                   SSS_DP_USER, cr->data->name.lookup,
+                                   0, EXTRA_NAME_IS_UPN);
 }
 
 const struct cache_req_plugin cache_req_user_by_upn = {
     .name = "User by UPN",
-    .dp_type = SSS_DP_USER,
     .attr_expiration = SYSDB_CACHE_EXPIRE,
     .parse_name = false,
     .bypass_cache = false,
@@ -128,5 +124,6 @@ const struct cache_req_plugin cache_req_user_by_upn = {
     .ncache_check_fn = cache_req_user_by_upn_ncache_check,
     .ncache_add_fn = cache_req_user_by_upn_ncache_add,
     .lookup_fn = cache_req_user_by_upn_lookup,
-    .dpreq_params_fn = cache_req_user_by_upn_dpreq_params
+    .dp_send_fn = cache_req_user_by_upn_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
 };
diff --git a/src/tests/cmocka/common_mock_resp_dp.c b/src/tests/cmocka/common_mock_resp_dp.c
index f62606e..61792eb 100644
--- a/src/tests/cmocka/common_mock_resp_dp.c
+++ b/src/tests/cmocka/common_mock_resp_dp.c
@@ -61,16 +61,37 @@ sss_dp_get_account_recv(TALLOC_CTX *mem_ctx,
     return test_request_recv(req);
 }
 
+errno_t
+sss_dp_req_recv(TALLOC_CTX *mem_ctx,
+                struct tevent_req *req,
+                dbus_uint16_t *dp_err,
+                dbus_uint32_t *dp_ret,
+                char **err_msg)
+{
+    acct_cb_t cb;
+
+    *dp_err = sss_mock_type(dbus_uint16_t);
+    *dp_ret = sss_mock_type(dbus_uint32_t);
+    *err_msg = sss_mock_ptr_type(char *);
+
+    cb = sss_mock_ptr_type(acct_cb_t);
+    if (cb) {
+        (cb)(sss_mock_ptr_type(void *));
+    }
+
+    return test_request_recv(req);
+}
+
 void mock_account_recv(uint16_t dp_err, uint32_t dp_ret, char *msg,
                        acct_cb_t acct_cb, void *pvt)
 {
-    will_return(sss_dp_get_account_recv, dp_err);
-    will_return(sss_dp_get_account_recv, dp_ret);
-    will_return(sss_dp_get_account_recv, msg);
+    will_return(sss_dp_req_recv, dp_err);
+    will_return(sss_dp_req_recv, dp_ret);
+    will_return(sss_dp_req_recv, msg);
 
-    will_return(sss_dp_get_account_recv, acct_cb);
+    will_return(sss_dp_req_recv, acct_cb);
     if (acct_cb) {
-        will_return(sss_dp_get_account_recv, pvt);
+        will_return(sss_dp_req_recv, pvt);
     }
 }
 
diff --git a/src/tests/cmocka/test_responder_cache_req.c b/src/tests/cmocka/test_responder_cache_req.c
index d4e54cd..94a902c 100644
--- a/src/tests/cmocka/test_responder_cache_req.c
+++ b/src/tests/cmocka/test_responder_cache_req.c
@@ -530,7 +530,7 @@ void test_user_by_name_multiple_domains_found(void **state)
 
     /* Mock values. */
     will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
-    will_return_always(sss_dp_get_account_recv, 0);
+    will_return_always(sss_dp_req_recv, 0);
     mock_parse_inp(users[0].short_name, NULL, ERR_OK);
 
     /* Test. */
@@ -547,7 +547,7 @@ void test_user_by_name_multiple_domains_notfound(void **state)
 
     /* Mock values. */
     will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
-    will_return_always(sss_dp_get_account_recv, 0);
+    will_return_always(sss_dp_req_recv, 0);
     mock_parse_inp(users[0].short_name, NULL, ERR_OK);
 
     /* Test. */
@@ -749,7 +749,7 @@ void test_user_by_upn_multiple_domains_found(void **state)
 
     /* Mock values. */
     will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
-    will_return_always(sss_dp_get_account_recv, 0);
+    will_return_always(sss_dp_req_recv, 0);
     mock_parse_inp(NULL, NULL, ERR_DOMAIN_NOT_FOUND);
 
     /* Test. */
@@ -766,7 +766,7 @@ void test_user_by_upn_multiple_domains_notfound(void **state)
 
     /* Mock values. */
     will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
-    will_return_always(sss_dp_get_account_recv, 0);
+    will_return_always(sss_dp_req_recv, 0);
     mock_parse_inp(NULL, NULL, ERR_DOMAIN_NOT_FOUND);
 
     /* Test. */
@@ -904,7 +904,7 @@ void test_user_by_id_multiple_domains_found(void **state)
 
     /* Mock values. */
     will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
-    will_return_always(sss_dp_get_account_recv, 0);
+    will_return_always(sss_dp_req_recv, 0);
 
     /* Test. */
     run_user_by_id(test_ctx, NULL, 0, ERR_OK);
@@ -920,7 +920,7 @@ void test_user_by_id_multiple_domains_notfound(void **state)
 
     /* Mock values. */
     will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
-    will_return_always(sss_dp_get_account_recv, 0);
+    will_return_always(sss_dp_req_recv, 0);
 
     /* Test. */
     run_user_by_id(test_ctx, NULL, 0, ENOENT);
@@ -1045,7 +1045,7 @@ void test_group_by_name_multiple_domains_found(void **state)
 
     /* Mock values. */
     will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
-    will_return_always(sss_dp_get_account_recv, 0);
+    will_return_always(sss_dp_req_recv, 0);
     mock_parse_inp(groups[0].short_name, NULL, ERR_OK);
 
     /* Test. */
@@ -1062,7 +1062,7 @@ void test_group_by_name_multiple_domains_notfound(void **state)
 
     /* Mock values. */
     will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
-    will_return_always(sss_dp_get_account_recv, 0);
+    will_return_always(sss_dp_req_recv, 0);
     mock_parse_inp(groups[0].short_name, NULL, ERR_OK);
 
     /* Test. */
@@ -1261,7 +1261,7 @@ void test_group_by_id_multiple_domains_found(void **state)
 
     /* Mock values. */
     will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
-    will_return_always(sss_dp_get_account_recv, 0);
+    will_return_always(sss_dp_req_recv, 0);
 
     /* Test. */
     run_group_by_id(test_ctx, NULL, 0, ERR_OK);
@@ -1277,7 +1277,7 @@ void test_group_by_id_multiple_domains_notfound(void **state)
 
     /* Mock values. */
     will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
-    will_return_always(sss_dp_get_account_recv, 0);
+    will_return_always(sss_dp_req_recv, 0);
 
     /* Test. */
     run_group_by_id(test_ctx, NULL, 0, ENOENT);
@@ -1912,7 +1912,7 @@ void test_object_by_sid_user_multiple_domains_found(void **state)
 
     /* Mock values. */
     will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
-    will_return_always(sss_dp_get_account_recv, 0);
+    will_return_always(sss_dp_req_recv, 0);
 
     /* Test. */
     run_object_by_sid(test_ctx, NULL, users[0].sid, attrs, 0, ERR_OK);
@@ -1929,7 +1929,7 @@ void test_object_by_sid_user_multiple_domains_notfound(void **state)
 
     /* Mock values. */
     will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
-    will_return_always(sss_dp_get_account_recv, 0);
+    will_return_always(sss_dp_req_recv, 0);
 
     /* Test. */
     run_object_by_sid(test_ctx, NULL, users[0].sid, attrs, 0, ENOENT);
@@ -2068,7 +2068,7 @@ void test_object_by_sid_group_multiple_domains_found(void **state)
 
     /* Mock values. */
     will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
-    will_return_always(sss_dp_get_account_recv, 0);
+    will_return_always(sss_dp_req_recv, 0);
 
     /* Test. */
     run_object_by_sid(test_ctx, NULL, groups[0].sid, attrs, 0, ERR_OK);
@@ -2085,7 +2085,7 @@ void test_object_by_sid_group_multiple_domains_notfound(void **state)
 
     /* Mock values. */
     will_return_always(__wrap_sss_dp_get_account_send, test_ctx);
-    will_return_always(sss_dp_get_account_recv, 0);
+    will_return_always(sss_dp_req_recv, 0);
 
     /* Test. */
     run_object_by_sid(test_ctx, NULL, groups[0].sid, attrs, 0, ENOENT);

From ec8cd7806ef91947f02a71375b9e21d13d1ff4ed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pavel=20B=C5=99ezina?= <[email protected]>
Date: Wed, 18 Jan 2017 12:12:01 +0100
Subject: [PATCH 6/6] cache_req: add host by name search

---
 Makefile.am                                        |   3 +-
 src/responder/common/cache_req/cache_req.c         |   2 +
 src/responder/common/cache_req/cache_req.h         |  23 +++
 src/responder/common/cache_req/cache_req_data.c    |  39 ++++++
 src/responder/common/cache_req/cache_req_plugin.h  |   1 +
 src/responder/common/cache_req/cache_req_private.h |   1 +
 .../cache_req/plugins/cache_req_host_by_name.c     | 120 ++++++++++++++++
 src/responder/common/responder.h                   |  15 ++
 src/responder/common/responder_dp_ssh.c            | 155 ++++++++++++++++++++
 src/responder/ssh/sshsrv_dp.c                      | 156 ---------------------
 src/responder/ssh/sshsrv_private.h                 |  15 --
 src/tests/cmocka/common_mock_resp_dp.c             |  33 +++++
 src/tests/cwrap/Makefile.am                        |   2 +
 13 files changed, 393 insertions(+), 172 deletions(-)
 create mode 100644 src/responder/common/cache_req/plugins/cache_req_host_by_name.c
 create mode 100644 src/responder/common/responder_dp_ssh.c
 delete mode 100644 src/responder/ssh/sshsrv_dp.c

diff --git a/Makefile.am b/Makefile.am
index 674d328..d25e578 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -513,6 +513,7 @@ SSSD_CACHE_REQ_OBJ = \
 	src/responder/common/cache_req/plugins/cache_req_svc_by_name.c \
 	src/responder/common/cache_req/plugins/cache_req_svc_by_port.c \
 	src/responder/common/cache_req/plugins/cache_req_netgroup_by_name.c \
+	src/responder/common/cache_req/plugins/cache_req_host_by_name.c \
 	$(NULL)
 
 SSSD_RESPONDER_OBJ = \
@@ -521,6 +522,7 @@ SSSD_RESPONDER_OBJ = \
     src/responder/common/responder_cmd.c \
     src/responder/common/responder_common.c \
     src/responder/common/responder_dp.c \
+    src/responder/common/responder_dp_ssh.c \
     src/responder/common/responder_packet.c \
     src/responder/common/responder_get_domains.c \
     src/responder/common/responder_utils.c \
@@ -1333,7 +1335,6 @@ endif
 if BUILD_SSH
 sssd_ssh_SOURCES = \
     src/responder/ssh/sshsrv.c \
-    src/responder/ssh/sshsrv_dp.c \
     src/responder/ssh/sshsrv_cmd.c \
     $(SSSD_RESPONDER_OBJ) \
     $(NULL)
diff --git a/src/responder/common/cache_req/cache_req.c b/src/responder/common/cache_req/cache_req.c
index ec39118..796a1fc 100644
--- a/src/responder/common/cache_req/cache_req.c
+++ b/src/responder/common/cache_req/cache_req.c
@@ -56,6 +56,8 @@ cache_req_get_plugin(enum cache_req_type type)
         &cache_req_svc_by_port,
 
         &cache_req_netgroup_by_name,
+
+        &cache_req_host_by_name,
     };
 
     if (type >= CACHE_REQ_SENTINEL) {
diff --git a/src/responder/common/cache_req/cache_req.h b/src/responder/common/cache_req/cache_req.h
index 2740c21..185558d 100644
--- a/src/responder/common/cache_req/cache_req.h
+++ b/src/responder/common/cache_req/cache_req.h
@@ -52,6 +52,8 @@ enum cache_req_type {
 
     CACHE_REQ_NETGROUP_BY_NAME,
 
+    CACHE_REQ_HOST_BY_NAME,
+
     CACHE_REQ_SENTINEL
 };
 
@@ -103,6 +105,13 @@ cache_req_data_svc(TALLOC_CTX *mem_ctx,
                    const char *protocol,
                    uint16_t port);
 
+struct cache_req_data *
+cache_req_data_host(TALLOC_CTX *mem_ctx,
+                    enum cache_req_type type,
+                    const char *name,
+                    const char *alias,
+                    const char **attrs);
+
 /* Output data. */
 
 struct cache_req_result {
@@ -377,4 +386,18 @@ cache_req_netgroup_by_name_send(TALLOC_CTX *mem_ctx,
 #define cache_req_netgroup_by_name_recv(mem_ctx, req, _result) \
     cache_req_single_domain_recv(mem_ctx, req, _result)
 
+struct tevent_req *
+cache_req_host_by_name_send(TALLOC_CTX *mem_ctx,
+                            struct tevent_context *ev,
+                            struct resp_ctx *rctx,
+                            struct sss_nc_ctx *ncache,
+                            int cache_refresh_percent,
+                            const char *domain,
+                            const char *name,
+                            const char *alias,
+                            const char **attrs);
+
+#define cache_req_host_by_name_recv(mem_ctx, req, _result) \
+    cache_req_single_domain_recv(mem_ctx, req, _result)
+
 #endif /* _CACHE_REQ_H_ */
diff --git a/src/responder/common/cache_req/cache_req_data.c b/src/responder/common/cache_req/cache_req_data.c
index d056478..b2e22ec 100644
--- a/src/responder/common/cache_req/cache_req_data.c
+++ b/src/responder/common/cache_req/cache_req_data.c
@@ -188,6 +188,29 @@ cache_req_data_create(TALLOC_CTX *mem_ctx,
         }
 
         break;
+    case CACHE_REQ_HOST_BY_NAME:
+        if (input->name.input == NULL) {
+            DEBUG(SSSDBG_CRIT_FAILURE, "Bug: name cannot be NULL!\n");
+            ret = ERR_INTERNAL;
+            goto done;
+        }
+
+        data->name.input = talloc_strdup(data, input->name.input);
+        if (data->name.input == NULL) {
+            ret = ENOMEM;
+            goto done;
+        }
+
+        if (input->alias == NULL) {
+            break;
+        }
+
+        data->alias = talloc_strdup(data, input->alias);
+        if (data->alias == NULL) {
+            ret = ENOMEM;
+            goto done;
+        }
+        break;
     case CACHE_REQ_SENTINEL:
         DEBUG(SSSDBG_CRIT_FAILURE, "Invalid cache request type!\n");
         ret = ERR_INTERNAL;
@@ -318,3 +341,19 @@ cache_req_data_svc(TALLOC_CTX *mem_ctx,
 
     return cache_req_data_create(mem_ctx, type, &input);
 }
+
+struct cache_req_data *
+cache_req_data_host(TALLOC_CTX *mem_ctx,
+                    enum cache_req_type type,
+                    const char *name,
+                    const char *alias,
+                    const char **attrs)
+{
+    struct cache_req_data input = {0};
+
+    input.name.input = name;
+    input.alias = alias;
+    input.attrs = attrs;
+
+    return cache_req_data_create(mem_ctx, type, &input);
+}
diff --git a/src/responder/common/cache_req/cache_req_plugin.h b/src/responder/common/cache_req/cache_req_plugin.h
index 7b0c489..da4a2d9 100644
--- a/src/responder/common/cache_req/cache_req_plugin.h
+++ b/src/responder/common/cache_req/cache_req_plugin.h
@@ -226,5 +226,6 @@ extern const struct cache_req_plugin cache_req_enum_svc;
 extern const struct cache_req_plugin cache_req_svc_by_name;
 extern const struct cache_req_plugin cache_req_svc_by_port;
 extern const struct cache_req_plugin cache_req_netgroup_by_name;
+extern const struct cache_req_plugin cache_req_host_by_name;
 
 #endif /* _CACHE_REQ_PLUGIN_H_ */
diff --git a/src/responder/common/cache_req/cache_req_private.h b/src/responder/common/cache_req/cache_req_private.h
index b544b73..cc47375 100644
--- a/src/responder/common/cache_req/cache_req_private.h
+++ b/src/responder/common/cache_req/cache_req_private.h
@@ -76,6 +76,7 @@ struct cache_req_data {
     uint32_t id;
     const char *cert;
     const char *sid;
+    const char *alias;
     const char **attrs;
 
     struct {
diff --git a/src/responder/common/cache_req/plugins/cache_req_host_by_name.c b/src/responder/common/cache_req/plugins/cache_req_host_by_name.c
new file mode 100644
index 0000000..402efca
--- /dev/null
+++ b/src/responder/common/cache_req/plugins/cache_req_host_by_name.c
@@ -0,0 +1,120 @@
+/*
+    Authors:
+        Pavel Březina <[email protected]>
+
+    Copyright (C) 2016 Red Hat
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <talloc.h>
+#include <ldb.h>
+
+#include "db/sysdb_ssh.h"
+#include "util/util.h"
+#include "providers/data_provider.h"
+#include "responder/common/cache_req/cache_req_plugin.h"
+
+static const char *
+cache_req_host_by_name_create_debug_name(TALLOC_CTX *mem_ctx,
+                                         struct cache_req_data *data,
+                                         struct sss_domain_info *domain)
+{
+    return talloc_strdup(mem_ctx, data->name.name);
+}
+
+static errno_t
+cache_req_host_by_name_lookup(TALLOC_CTX *mem_ctx,
+                              struct cache_req *cr,
+                              struct cache_req_data *data,
+                              struct sss_domain_info *domain,
+                              struct ldb_result **_result)
+{
+    struct ldb_result *result;
+    struct ldb_message *msg;
+    errno_t ret;
+
+    ret = sysdb_get_ssh_host(mem_ctx, domain, data->name.name,
+                             data->attrs, &msg);
+    if (ret != EOK) {
+        return ret;
+    }
+
+    result = cache_req_create_ldb_result_from_msg(mem_ctx, msg);
+    if (result == NULL) {
+        return ENOMEM;
+    }
+
+    *_result = result;
+
+    return EOK;
+}
+
+struct tevent_req *
+cache_req_host_by_name_dp_send(TALLOC_CTX *mem_ctx,
+                               struct cache_req *cr,
+                               struct cache_req_data *data,
+                               struct sss_domain_info *domain,
+                               struct ldb_result *result)
+{
+    return sss_dp_get_ssh_host_send(mem_ctx, cr->rctx, domain, false,
+                                    data->name.name, data->alias);
+}
+
+const struct cache_req_plugin cache_req_host_by_name = {
+    .name = "Host by name",
+    .attr_expiration = SYSDB_CACHE_EXPIRE,
+    .parse_name = true,
+    .bypass_cache = false,
+    .only_one_result = true,
+    .search_all_domains = false,
+    .require_enumeration = false,
+    .allow_missing_fqn = false,
+    .allow_switch_to_upn = false,
+    .upn_equivalent = CACHE_REQ_SENTINEL,
+    .get_next_domain_flags = 0,
+
+    .is_well_known_fn = NULL,
+    .prepare_domain_data_fn = NULL,
+    .create_debug_name_fn = cache_req_host_by_name_create_debug_name,
+    .global_ncache_add_fn = NULL,
+    .ncache_check_fn = NULL,
+    .ncache_add_fn = NULL,
+    .lookup_fn = cache_req_host_by_name_lookup,
+    .dp_send_fn = cache_req_host_by_name_dp_send,
+    .dp_recv_fn = cache_req_common_dp_recv
+};
+
+struct tevent_req *
+cache_req_host_by_name_send(TALLOC_CTX *mem_ctx,
+                            struct tevent_context *ev,
+                            struct resp_ctx *rctx,
+                            struct sss_nc_ctx *ncache,
+                            int cache_refresh_percent,
+                            const char *domain,
+                            const char *name,
+                            const char *alias,
+                            const char **attrs)
+{
+    struct cache_req_data *data;
+
+    data = cache_req_data_host(mem_ctx, CACHE_REQ_HOST_BY_NAME, name,
+                               alias, attrs);
+    if (data == NULL) {
+        return NULL;
+    }
+
+    return cache_req_steal_data_and_send(mem_ctx, ev, rctx, ncache,
+                                         cache_refresh_percent, domain, data);
+}
diff --git a/src/responder/common/responder.h b/src/responder/common/responder.h
index d1fa532..68071f1 100644
--- a/src/responder/common/responder.h
+++ b/src/responder/common/responder.h
@@ -318,6 +318,21 @@ sss_dp_get_account_recv(TALLOC_CTX *mem_ctx,
                         dbus_uint32_t *err_min,
                         char **err_msg);
 
+struct tevent_req *
+sss_dp_get_ssh_host_send(TALLOC_CTX *mem_ctx,
+                         struct resp_ctx *rctx,
+                         struct sss_domain_info *dom,
+                         bool fast_reply,
+                         const char *name,
+                         const char *alias);
+
+errno_t
+sss_dp_get_ssh_host_recv(TALLOC_CTX *mem_ctx,
+                         struct tevent_req *req,
+                         dbus_uint16_t *dp_err,
+                         dbus_uint32_t *dp_ret,
+                         char **err_msg);
+
 bool sss_utf8_check(const uint8_t *s, size_t n);
 
 void responder_set_fd_limit(rlim_t fd_limit);
diff --git a/src/responder/common/responder_dp_ssh.c b/src/responder/common/responder_dp_ssh.c
new file mode 100644
index 0000000..303ba15
--- /dev/null
+++ b/src/responder/common/responder_dp_ssh.c
@@ -0,0 +1,155 @@
+/*
+    Authors:
+        Jakub Hrozek <[email protected]>
+
+    Copyright (C) 2012 Red Hat
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#include <talloc.h>
+#include <tevent.h>
+#include <dbus/dbus.h>
+
+#include "util/util.h"
+#include "sbus/sbus_client.h"
+#include "sbus/sssd_dbus.h"
+#include "providers/data_provider/dp_responder_iface.h"
+#include "responder/common/responder.h"
+
+struct sss_dp_get_ssh_host_info {
+    struct sss_domain_info *dom;
+
+    bool fast_reply;
+    const char *name;
+    const char *alias;
+};
+
+static DBusMessage *
+sss_dp_get_ssh_host_msg(void *pvt);
+
+struct tevent_req *
+sss_dp_get_ssh_host_send(TALLOC_CTX *mem_ctx,
+                         struct resp_ctx *rctx,
+                         struct sss_domain_info *dom,
+                         bool fast_reply,
+                         const char *name,
+                         const char *alias)
+{
+    errno_t ret;
+    struct tevent_req *req;
+    struct sss_dp_get_ssh_host_info *info;
+    struct sss_dp_req_state *state;
+    char *key;
+
+    req = tevent_req_create(mem_ctx, &state, struct sss_dp_req_state);
+    if (!req) {
+        return NULL;
+    }
+
+    if (!dom) {
+        ret = EINVAL;
+        goto error;
+    }
+
+    info = talloc_zero(state, struct sss_dp_get_ssh_host_info);
+    info->fast_reply = fast_reply;
+    info->name = name;
+    info->alias = alias;
+    info->dom = dom;
+
+    if (alias) {
+        key = talloc_asprintf(state, "%s:%s@%s", name, alias, dom->name);
+    } else {
+        key = talloc_asprintf(state, "%s@%s", name, dom->name);
+    }
+    if (!key) {
+        ret = ENOMEM;
+        goto error;
+    }
+
+    ret = sss_dp_issue_request(state, rctx, key, dom, sss_dp_get_ssh_host_msg,
+                               info, req);
+    talloc_free(key);
+    if (ret != EOK) {
+        DEBUG(SSSDBG_OP_FAILURE,
+              "Could not issue DP request [%d]: %s\n",
+               ret, strerror(ret));
+        goto error;
+    }
+
+    return req;
+
+error:
+    tevent_req_error(req, ret);
+    tevent_req_post(req, rctx->ev);
+    return req;
+}
+
+static DBusMessage *
+sss_dp_get_ssh_host_msg(void *pvt)
+{
+    DBusMessage *msg;
+    dbus_bool_t dbret;
+    struct sss_dp_get_ssh_host_info *info;
+    uint32_t dp_flags = 0;
+
+    info = talloc_get_type(pvt, struct sss_dp_get_ssh_host_info);
+
+    if (info->fast_reply) {
+        dp_flags |= DP_FAST_REPLY;
+    }
+
+    msg = dbus_message_new_method_call(NULL,
+                                       DP_PATH,
+                                       IFACE_DP,
+                                       IFACE_DP_HOSTHANDLER);
+    if (msg == NULL) {
+        DEBUG(SSSDBG_CRIT_FAILURE, "Out of memory?!\n");
+        return NULL;
+    }
+
+    /* create the message */
+    DEBUG(SSSDBG_TRACE_FUNC,
+          "Creating SSH host request for [%s][%u][%s][%s]\n",
+           info->dom->name, dp_flags, info->name,
+           info->alias == NULL ? "-" : info->alias);
+
+    if (info->alias == NULL) {
+        info->alias = "";
+    }
+
+    dbret = dbus_message_append_args(msg,
+                                     DBUS_TYPE_UINT32, &dp_flags,
+                                     DBUS_TYPE_STRING, &info->name,
+                                     DBUS_TYPE_STRING, &info->alias,
+                                     DBUS_TYPE_INVALID);
+    if (!dbret) {
+        DEBUG(SSSDBG_CRIT_FAILURE, "Failed to build message\n");
+        dbus_message_unref(msg);
+        return NULL;
+    }
+
+    return msg;
+}
+
+errno_t
+sss_dp_get_ssh_host_recv(TALLOC_CTX *mem_ctx,
+                         struct tevent_req *req,
+                         dbus_uint16_t *dp_err,
+                         dbus_uint32_t *dp_ret,
+                         char **err_msg)
+{
+    return sss_dp_req_recv(mem_ctx, req, dp_err, dp_ret, err_msg);
+}
diff --git a/src/responder/ssh/sshsrv_dp.c b/src/responder/ssh/sshsrv_dp.c
deleted file mode 100644
index f02c3f4..0000000
--- a/src/responder/ssh/sshsrv_dp.c
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
-    Authors:
-        Jakub Hrozek <[email protected]>
-
-    Copyright (C) 2012 Red Hat
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 3 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#include <talloc.h>
-#include <tevent.h>
-#include <dbus/dbus.h>
-#include "sbus/sssd_dbus.h"
-
-#include "util/util.h"
-#include "sbus/sbus_client.h"
-#include "providers/data_provider/dp_responder_iface.h"
-#include "responder/common/responder.h"
-#include "responder/ssh/sshsrv_private.h"
-
-struct sss_dp_get_ssh_host_info {
-    struct sss_domain_info *dom;
-
-    bool fast_reply;
-    const char *name;
-    const char *alias;
-};
-
-static DBusMessage *
-sss_dp_get_ssh_host_msg(void *pvt);
-
-struct tevent_req *
-sss_dp_get_ssh_host_send(TALLOC_CTX *mem_ctx,
-                         struct resp_ctx *rctx,
-                         struct sss_domain_info *dom,
-                         bool fast_reply,
-                         const char *name,
-                         const char *alias)
-{
-    errno_t ret;
-    struct tevent_req *req;
-    struct sss_dp_get_ssh_host_info *info;
-    struct sss_dp_req_state *state;
-    char *key;
-
-    req = tevent_req_create(mem_ctx, &state, struct sss_dp_req_state);
-    if (!req) {
-        return NULL;
-    }
-
-    if (!dom) {
-        ret = EINVAL;
-        goto error;
-    }
-
-    info = talloc_zero(state, struct sss_dp_get_ssh_host_info);
-    info->fast_reply = fast_reply;
-    info->name = name;
-    info->alias = alias;
-    info->dom = dom;
-
-    if (alias) {
-        key = talloc_asprintf(state, "%s:%s@%s", name, alias, dom->name);
-    } else {
-        key = talloc_asprintf(state, "%s@%s", name, dom->name);
-    }
-    if (!key) {
-        ret = ENOMEM;
-        goto error;
-    }
-
-    ret = sss_dp_issue_request(state, rctx, key, dom, sss_dp_get_ssh_host_msg,
-                               info, req);
-    talloc_free(key);
-    if (ret != EOK) {
-        DEBUG(SSSDBG_OP_FAILURE,
-              "Could not issue DP request [%d]: %s\n",
-               ret, strerror(ret));
-        goto error;
-    }
-
-    return req;
-
-error:
-    tevent_req_error(req, ret);
-    tevent_req_post(req, rctx->ev);
-    return req;
-}
-
-static DBusMessage *
-sss_dp_get_ssh_host_msg(void *pvt)
-{
-    DBusMessage *msg;
-    dbus_bool_t dbret;
-    struct sss_dp_get_ssh_host_info *info;
-    uint32_t dp_flags = 0;
-
-    info = talloc_get_type(pvt, struct sss_dp_get_ssh_host_info);
-
-    if (info->fast_reply) {
-        dp_flags |= DP_FAST_REPLY;
-    }
-
-    msg = dbus_message_new_method_call(NULL,
-                                       DP_PATH,
-                                       IFACE_DP,
-                                       IFACE_DP_HOSTHANDLER);
-    if (msg == NULL) {
-        DEBUG(SSSDBG_CRIT_FAILURE, "Out of memory?!\n");
-        return NULL;
-    }
-
-    /* create the message */
-    DEBUG(SSSDBG_TRACE_FUNC,
-          "Creating SSH host request for [%s][%u][%s][%s]\n",
-           info->dom->name, dp_flags, info->name,
-           info->alias == NULL ? "-" : info->alias);
-
-    if (info->alias == NULL) {
-        info->alias = "";
-    }
-
-    dbret = dbus_message_append_args(msg,
-                                     DBUS_TYPE_UINT32, &dp_flags,
-                                     DBUS_TYPE_STRING, &info->name,
-                                     DBUS_TYPE_STRING, &info->alias,
-                                     DBUS_TYPE_INVALID);
-    if (!dbret) {
-        DEBUG(SSSDBG_CRIT_FAILURE, "Failed to build message\n");
-        dbus_message_unref(msg);
-        return NULL;
-    }
-
-    return msg;
-}
-
-errno_t
-sss_dp_get_ssh_host_recv(TALLOC_CTX *mem_ctx,
-                         struct tevent_req *req,
-                         dbus_uint16_t *dp_err,
-                         dbus_uint32_t *dp_ret,
-                         char **err_msg)
-{
-    return sss_dp_req_recv(mem_ctx, req, dp_err, dp_ret, err_msg);
-}
diff --git a/src/responder/ssh/sshsrv_private.h b/src/responder/ssh/sshsrv_private.h
index 9553cd7..3ea8955 100644
--- a/src/responder/ssh/sshsrv_private.h
+++ b/src/responder/ssh/sshsrv_private.h
@@ -51,19 +51,4 @@ struct ssh_cmd_ctx {
 
 struct sss_cmd_table *get_ssh_cmds(void);
 
-struct tevent_req *
-sss_dp_get_ssh_host_send(TALLOC_CTX *mem_ctx,
-                         struct resp_ctx *rctx,
-                         struct sss_domain_info *dom,
-                         bool fast_reply,
-                         const char *name,
-                         const char *alias);
-
-errno_t
-sss_dp_get_ssh_host_recv(TALLOC_CTX *mem_ctx,
-                         struct tevent_req *req,
-                         dbus_uint16_t *dp_err,
-                         dbus_uint32_t *dp_ret,
-                         char **err_msg);
-
 #endif /* _SSHSRV_PRIVATE_H_ */
diff --git a/src/tests/cmocka/common_mock_resp_dp.c b/src/tests/cmocka/common_mock_resp_dp.c
index 61792eb..a5ed1f5 100644
--- a/src/tests/cmocka/common_mock_resp_dp.c
+++ b/src/tests/cmocka/common_mock_resp_dp.c
@@ -61,6 +61,39 @@ sss_dp_get_account_recv(TALLOC_CTX *mem_ctx,
     return test_request_recv(req);
 }
 
+struct tevent_req *
+sss_dp_get_ssh_host_send(TALLOC_CTX *mem_ctx,
+                         struct resp_ctx *rctx,
+                         struct sss_domain_info *dom,
+                         bool fast_reply,
+                         const char *name,
+                         const char *alias)
+{
+    return test_req_succeed_send(mem_ctx, rctx->ev);
+}
+
+
+errno_t
+sss_dp_get_ssh_host_recv(TALLOC_CTX *mem_ctx,
+                         struct tevent_req *req,
+                         dbus_uint16_t *dp_err,
+                         dbus_uint32_t *dp_ret,
+                         char **err_msg)
+{
+    acct_cb_t cb;
+
+    *dp_err = sss_mock_type(dbus_uint16_t);
+    *dp_ret = sss_mock_type(dbus_uint32_t);
+    *err_msg = sss_mock_ptr_type(char *);
+
+    cb = sss_mock_ptr_type(acct_cb_t);
+    if (cb) {
+        (cb)(sss_mock_ptr_type(void *));
+    }
+
+    return test_request_recv(req);
+}
+
 errno_t
 sss_dp_req_recv(TALLOC_CTX *mem_ctx,
                 struct tevent_req *req,
diff --git a/src/tests/cwrap/Makefile.am b/src/tests/cwrap/Makefile.am
index 8ca0026..09a8b53 100644
--- a/src/tests/cwrap/Makefile.am
+++ b/src/tests/cwrap/Makefile.am
@@ -60,6 +60,7 @@ SSSD_CACHE_REQ_OBJ = \
     ../../../src/responder/common/cache_req/plugins/cache_req_svc_by_name.c \
     ../../../src/responder/common/cache_req/plugins/cache_req_svc_by_port.c \
     ../../../src/responder/common/cache_req/plugins/cache_req_netgroup_by_name.c \
+    ../../../src/responder/common/cache_req/plugins/cache_req_host_by_name.c \
     $(NULL)
 
 SSSD_RESPONDER_OBJ = \
@@ -68,6 +69,7 @@ SSSD_RESPONDER_OBJ = \
     ../../../src/responder/common/responder_cmd.c \
     ../../../src/responder/common/responder_common.c \
     ../../../src/responder/common/responder_dp.c \
+    ../../../src/responder/common/responder_dp_ssh.c \
     ../../../src/responder/common/responder_packet.c \
     ../../../src/responder/common/responder_get_domains.c \
     ../../../src/responder/common/responder_utils.c \
_______________________________________________
sssd-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to