[RFC PATCH v3 0/5] add JSON output to net ads
Ralph Böhme
slow at samba.org
Thu Jul 12 09:21:20 UTC 2018
Hi Philipp,
On Thu, Jul 12, 2018 at 10:46:05AM +0200, Philipp Gesang wrote:
>-<| Quoting Ralph Böhme <slow at samba.org>, on Thursday, 2018-07-12 09:43:54 AM |>-
>> can you please send your patch as
>>
>> $ git format-patch --stdout > patch.patch
>
>noted for the next submission.
>
>However, that creates an mbox.
Where? On my box
$ git format-patch COMMIT_RANGE --stdout > patch.patch
creates just a file, eg
$ git format-patch -2 origin/master --stdout > patch.patch
example attached.
Once you get to know it, you will never look back. :)
>Do you prefer it attached or pasted inline?
Attached.
>> instead of sending one mail per patch?
>
>Since that is a rather unusual policy you may want to mention it
>somewhere here: https://wiki.samba.org/index.php/Contribute
Well, that's certainly a good idea! :)
-slow
--
Ralph Boehme, Samba Team https://samba.org/
Samba Developer, SerNet GmbH https://sernet.de/en/samba/
GPG Key Fingerprint: FAE2 C608 8A24 2520 51C5
59E4 AA1E 9B71 2639 9E46
-------------- next part --------------
From a08ab2940051ae47ce71149087a24d060227ef19 Mon Sep 17 00:00:00 2001
From: Stefan Metzmacher <metze at samba.org>
Date: Sat, 19 May 2018 10:14:25 +0200
Subject: [PATCH 1/2] s4:messaging: allow imessaging_post_handler() to free the
messaging context from a handler
In usecases like using messaging_client_init() with irpc processing we may
free the imessaging_context during the messaging handler.
imessaging_post_handler() is not yet really used, but it will change in
the next commits. imessaging_post_state is a child of imessaging_context
and might be implicitly free'ed before the explicit TALLOC_FREE(state).
Signed-off-by: Stefan Metzmacher <metze at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
---
source4/lib/messaging/messaging.c | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/source4/lib/messaging/messaging.c b/source4/lib/messaging/messaging.c
index b8d4e50f12c..8903322bdc7 100644
--- a/source4/lib/messaging/messaging.c
+++ b/source4/lib/messaging/messaging.c
@@ -433,18 +433,48 @@ struct imessaging_context *imessaging_init(TALLOC_CTX *mem_ctx,
struct imessaging_post_state {
struct imessaging_context *msg_ctx;
+ struct imessaging_post_state **busy_ref;
size_t buf_len;
uint8_t buf[];
};
+static int imessaging_post_state_destructor(struct imessaging_post_state *state)
+{
+ if (state->busy_ref != NULL) {
+ *state->busy_ref = NULL;
+ state->busy_ref = NULL;
+ }
+ return 0;
+}
+
static void imessaging_post_handler(struct tevent_context *ev,
struct tevent_immediate *ti,
void *private_data)
{
struct imessaging_post_state *state = talloc_get_type_abort(
private_data, struct imessaging_post_state);
+
+ /*
+ * In usecases like using messaging_client_init() with irpc processing
+ * we may free the imessaging_context during the messaging handler.
+ * imessaging_post_state is a child of imessaging_context and
+ * might be implicitly free'ed before the explicit TALLOC_FREE(state).
+ *
+ * The busy_ref pointer makes sure the destructor clears
+ * the local 'state' variable.
+ */
+
+ SMB_ASSERT(state->busy_ref == NULL);
+ state->busy_ref = &state;
+
imessaging_dgm_recv(ev, state->buf, state->buf_len, NULL, 0,
state->msg_ctx);
+
+ if (state == NULL) {
+ return;
+ }
+
+ state->busy_ref = NULL;
TALLOC_FREE(state);
}
@@ -461,6 +491,8 @@ static int imessaging_post_self(struct imessaging_context *msg,
}
talloc_set_name_const(state, "struct imessaging_post_state");
+ talloc_set_destructor(state, imessaging_post_state_destructor);
+
ti = tevent_create_immediate(state);
if (ti == NULL) {
TALLOC_FREE(state);
@@ -468,6 +500,7 @@ static int imessaging_post_self(struct imessaging_context *msg,
}
state->msg_ctx = msg;
+ state->busy_ref = NULL;
state->buf_len = buf_len;
memcpy(state->buf, buf, buf_len);
--
2.13.6
From e186d6a06b1b300256a2cb4138f0532d518d0597 Mon Sep 17 00:00:00 2001
From: Stefan Metzmacher <metze at samba.org>
Date: Fri, 18 May 2018 16:28:47 +0200
Subject: [PATCH 2/2] s4:messaging: make sure only imessaging_client_init() can
be used with a wrapper tevent_context wrapper
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
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 at samba.org>
Reviewed-by: Ralph Boehme <slow at samba.org>
Autobuild-User(master): Ralph Böhme <slow at samba.org>
Autobuild-Date(master): Thu Jul 12 02:23:37 CEST 2018 on sn-devel-144
---
source4/lib/messaging/messaging.c | 28 ++++++++++++++++++++++++++--
1 file changed, 26 insertions(+), 2 deletions(-)
diff --git a/source4/lib/messaging/messaging.c b/source4/lib/messaging/messaging.c
index 8903322bdc7..935951f3fba 100644
--- a/source4/lib/messaging/messaging.c
+++ b/source4/lib/messaging/messaging.c
@@ -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
--
2.13.6
More information about the samba-technical
mailing list