s4:messaging: make sure only imessaging_client_init() can be used with a wrapper...
authorStefan Metzmacher <metze@samba.org>
Fri, 18 May 2018 14:28:47 +0000 (16:28 +0200)
committerRalph Boehme <slow@samba.org>
Thu, 12 Jul 2018 00:23:37 +0000 (02:23 +0200)
imessaging_client_init() can be used with a wrapper tevent_context,
but only if a global messaging_dgm_ref() already exist.

All other uses of imessaging_init() and imessaging_client_init()
require a raw tevent_context.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
Autobuild-User(master): Ralph B√∂hme <slow@samba.org>
Autobuild-Date(master): Thu Jul 12 02:23:37 CEST 2018 on sn-devel-144

source4/lib/messaging/messaging.c

index 8903322bdc7f47957531ea1e710310ca88f620df..935951f3fbae075b1324b1f15c80c8b6935663a6 100644 (file)
@@ -319,7 +319,7 @@ NTSTATUS imessaging_reinit_all(void)
 /*
   create the listening socket and setup the dispatcher
 */
-struct imessaging_context *imessaging_init(TALLOC_CTX *mem_ctx,
+static struct imessaging_context *imessaging_init_internal(TALLOC_CTX *mem_ctx,
                                           struct loadparm_context *lp_ctx,
                                           struct server_id server_id,
                                           struct tevent_context *ev)
@@ -573,6 +573,30 @@ static void imessaging_dgm_recv(struct tevent_context *ev,
        }
 }
 
+struct imessaging_context *imessaging_init(TALLOC_CTX *mem_ctx,
+                                          struct loadparm_context *lp_ctx,
+                                          struct server_id server_id,
+                                          struct tevent_context *ev)
+{
+       if (ev == NULL) {
+               return NULL;
+       }
+
+       if (tevent_context_is_wrapper(ev)) {
+               /*
+                * This is really a programmer error!
+                *
+                * The main/raw tevent context should
+                * have been registered first!
+                */
+               DBG_ERR("Should not be used with a wrapper tevent context\n");
+               errno = EINVAL;
+               return NULL;
+       }
+
+       return imessaging_init_internal(mem_ctx, lp_ctx, server_id, ev);
+}
+
 /*
    A hack, for the short term until we get 'client only' messaging in place
 */
@@ -589,7 +613,7 @@ struct imessaging_context *imessaging_client_init(TALLOC_CTX *mem_ctx,
        /* This is because we are not in the s3 serverid database */
        id.unique_id = SERVERID_UNIQUE_ID_NOT_TO_VERIFY;
 
-       return imessaging_init(mem_ctx, lp_ctx, id, ev);
+       return imessaging_init_internal(mem_ctx, lp_ctx, id, ev);
 }
 /*
   a list of registered irpc server functions