This refactoring patch would allow both me and Honza to simplify sending
an empty packet back to client.
From 95d12cd3cd82e67e8767fbcd66a8226d3337c7f9 Mon Sep 17 00:00:00 2001
From: Jakub Hrozek <[email protected]>
Date: Tue, 31 Jan 2012 22:59:58 +0100
Subject: [PATCH] Refactor nss_cmd_send_empty

---
 src/responder/common/responder.h     |    2 +
 src/responder/common/responder_cmd.c |   37 ++++++++++++++++++++++++++++++++++
 src/responder/nss/nsssrv_cmd.c       |   37 ++-------------------------------
 src/responder/nss/nsssrv_netgroup.c  |    4 +-
 src/responder/nss/nsssrv_private.h   |    3 --
 src/responder/nss/nsssrv_services.c  |    4 +-
 6 files changed, 46 insertions(+), 41 deletions(-)

diff --git a/src/responder/common/responder.h b/src/responder/common/responder.h
index 
b8d7f8ab7892b625abf1e6061587385168cb4468..c60eeab235a3757f3fd1b46310f211b91cdbe80d
 100644
--- a/src/responder/common/responder.h
+++ b/src/responder/common/responder.h
@@ -155,6 +155,8 @@ struct sss_domain_info *
 responder_get_domain(struct sss_domain_info *doms, const char *domain);
 
 /* responder_cmd.c */
+int sss_cmd_empty_packet(struct sss_packet *packet);
+int sss_cmd_send_empty(struct cli_ctx *cctx, TALLOC_CTX *freectx);
 int sss_cmd_execute(struct cli_ctx *cctx, struct sss_cmd_table *sss_cmds);
 void sss_cmd_done(struct cli_ctx *cctx, void *freectx);
 int sss_cmd_get_version(struct cli_ctx *cctx);
diff --git a/src/responder/common/responder_cmd.c 
b/src/responder/common/responder_cmd.c
index 
cd9890305096a08bce9669d02edd359faa7c55d5..bf0bb82baced18df51ebc0c98bcf63d11e3f86ba
 100644
--- a/src/responder/common/responder_cmd.c
+++ b/src/responder/common/responder_cmd.c
@@ -23,6 +23,43 @@
 #include "responder/common/responder.h"
 #include "responder/common/responder_packet.h"
 
+int sss_cmd_empty_packet(struct sss_packet *packet)
+{
+    uint8_t *body;
+    size_t blen;
+    int ret;
+
+    ret = sss_packet_grow(packet, 2*sizeof(uint32_t));
+    if (ret != EOK) return ret;
+
+    sss_packet_get_body(packet, &body, &blen);
+    ((uint32_t *)body)[0] = 0; /* num results */
+    ((uint32_t *)body)[1] = 0; /* reserved */
+
+    return EOK;
+}
+
+int sss_cmd_send_empty(struct cli_ctx *cctx, TALLOC_CTX *freectx)
+{
+    int ret;
+
+    /* create response packet */
+    ret = sss_packet_new(cctx->creq, 0,
+                         sss_packet_get_cmd(cctx->creq->in),
+                         &cctx->creq->out);
+    if (ret != EOK) {
+        return ret;
+    }
+
+    ret = sss_cmd_empty_packet(cctx->creq->out);
+    if (ret != EOK) {
+        return ret;
+    }
+
+    sss_packet_set_error(cctx->creq->out, EOK);
+    sss_cmd_done(cctx, freectx);
+    return EOK;
+}
 
 void sss_cmd_done(struct cli_ctx *cctx, void *freectx)
 {
diff --git a/src/responder/nss/nsssrv_cmd.c b/src/responder/nss/nsssrv_cmd.c
index 
579c7602690711443a7b9bdf1b70f9113133c468..bbb115c8ccc478e1ed52e1d3617fb0e76629c0cf
 100644
--- a/src/responder/nss/nsssrv_cmd.c
+++ b/src/responder/nss/nsssrv_cmd.c
@@ -46,41 +46,10 @@ static int nss_cmd_send_error(struct nss_cmd_ctx *cmdctx, 
int err)
     return EOK;
 }
 
-int fill_empty(struct sss_packet *packet)
-{
-    uint8_t *body;
-    size_t blen;
-    int ret;
-
-    ret = sss_packet_grow(packet, 2*sizeof(uint32_t));
-    if (ret != EOK) return ret;
-
-    sss_packet_get_body(packet, &body, &blen);
-    ((uint32_t *)body)[0] = 0; /* num results */
-    ((uint32_t *)body)[1] = 0; /* reserved */
-
-    return EOK;
-}
-
 static int nss_cmd_send_empty(struct nss_cmd_ctx *cmdctx)
 {
     struct cli_ctx *cctx = cmdctx->cctx;
-    int ret;
-
-    /* create response packet */
-    ret = sss_packet_new(cctx->creq, 0,
-                         sss_packet_get_cmd(cctx->creq->in),
-                         &cctx->creq->out);
-    if (ret != EOK) {
-        return ret;
-    }
-    ret =  fill_empty(cctx->creq->out);
-    if (ret != EOK) {
-        return ret;
-    }
-    sss_packet_set_error(cctx->creq->out, EOK);
-    sss_cmd_done(cctx, cmdctx);
-    return EOK;
+    return sss_cmd_send_empty(cctx, cmdctx);
 }
 
 int nss_cmd_done(struct nss_cmd_ctx *cmdctx, int ret)
@@ -1674,7 +1643,7 @@ static int nss_cmd_retpwent(struct cli_ctx *cctx, int num)
 
 none:
     if (ret == ENOENT) {
-        ret = fill_empty(cctx->creq->out);
+        ret = sss_cmd_empty_packet(cctx->creq->out);
     }
     return ret;
 }
@@ -2913,7 +2882,7 @@ static int nss_cmd_retgrent(struct cli_ctx *cctx, int num)
 
 none:
     if (ret == ENOENT) {
-        ret = fill_empty(cctx->creq->out);
+        ret = sss_cmd_empty_packet(cctx->creq->out);
     }
     return ret;
 }
diff --git a/src/responder/nss/nsssrv_netgroup.c 
b/src/responder/nss/nsssrv_netgroup.c
index 
bb047d6a3b0f083be3166f6e0f200489c95c2190..093329fa3cc95e60bea52f1a6150818bc2cb0c4a
 100644
--- a/src/responder/nss/nsssrv_netgroup.c
+++ b/src/responder/nss/nsssrv_netgroup.c
@@ -618,7 +618,7 @@ static void nss_cmd_setnetgrent_done(struct tevent_req *req)
     if (ret == EOK) {
         if (reqret == ENOENT) {
             /* Notify the caller that this entry wasn't found */
-            fill_empty(cmdctx->cctx->creq->out);
+            sss_cmd_empty_packet(cmdctx->cctx->creq->out);
         } else {
             packet = cmdctx->cctx->creq->out;
             ret = sss_packet_grow(packet, 2*sizeof(uint32_t));
@@ -803,7 +803,7 @@ static errno_t nss_cmd_getnetgrent_process(struct 
nss_cmd_ctx *cmdctx,
     if (!netgr->entries || netgr->entries[0] == NULL) {
         /* No entries */
         DEBUG(5, ("No entries found\n"));
-        ret = fill_empty(client->creq->out);
+        ret = sss_cmd_empty_packet(client->creq->out);
         if (ret != EOK) {
             return nss_cmd_done(cmdctx, ret);
         }
diff --git a/src/responder/nss/nsssrv_private.h 
b/src/responder/nss/nsssrv_private.h
index 
83936fac74e8bc2f082807269053d374753b58a8..876552fb93fb8ec14209afdea41927386fca5b47
 100644
--- a/src/responder/nss/nsssrv_private.h
+++ b/src/responder/nss/nsssrv_private.h
@@ -109,9 +109,6 @@ struct setent_step_ctx {
 /* Finish the request */
 int nss_cmd_done(struct nss_cmd_ctx *cmdctx, int ret);
 
-/* Respond with no entries */
-int fill_empty(struct sss_packet *packet);
-
 int setent_remove_ref(TALLOC_CTX *ctx);
 errno_t setent_add_ref(TALLOC_CTX *memctx,
                        struct getent_ctx *getent_ctx,
diff --git a/src/responder/nss/nsssrv_services.c 
b/src/responder/nss/nsssrv_services.c
index 
9013c682d66ac19b5b88fa76d3c141015448eb68..da37708b4b554df7fb84b9aebc39cea3fa5dd8ff
 100644
--- a/src/responder/nss/nsssrv_services.c
+++ b/src/responder/nss/nsssrv_services.c
@@ -994,7 +994,7 @@ nss_cmd_getserv_done(struct tevent_req *req)
     if (ret == EOK) {
         if (reqret == ENOENT) {
             /* Notify the caller that this entry wasn't found */
-            ret = fill_empty(cmdctx->cctx->creq->out);
+            ret = sss_cmd_empty_packet(cmdctx->cctx->creq->out);
         } else {
             i = dctx->res->count;
             ret = fill_service(cmdctx->cctx->creq->out,
@@ -1793,7 +1793,7 @@ retservent(struct cli_ctx *cctx, int num)
 
 none:
     if (ret == ENOENT) {
-        ret = fill_empty(cctx->creq->out);
+        ret = sss_cmd_empty_packet(cctx->creq->out);
     }
     return ret;
 }
-- 
1.7.7.6

_______________________________________________
sssd-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/sssd-devel

Reply via email to