summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2014-07-20 14:51:47 +0200
committerJeremy Allison <jra@samba.org>2014-08-11 23:57:13 +0200
commitd22bb34b7308794b721af7c62f3682b37d997f6b (patch)
tree3ec2a5f709f27ba8fe0347bc3dc7c0898cfc68ac
parenta1529c3302656fad3daf1247141a987d36801066 (diff)
downloadsamba-d22bb34b7308794b721af7c62f3682b37d997f6b.tar.gz
samba-d22bb34b7308794b721af7c62f3682b37d997f6b.tar.xz
samba-d22bb34b7308794b721af7c62f3682b37d997f6b.zip
messaging3: Protect messaging_dgm against multiple contexts
We can't rely on posix locking within a process Signed-off-by: Volker Lendecke <vl@samba.org> Reviewed-by: Jeremy Allison <jra@samba.org>
-rw-r--r--source3/lib/messages_dgm.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/source3/lib/messages_dgm.c b/source3/lib/messages_dgm.c
index dee1f6476b..e95aa9530d 100644
--- a/source3/lib/messages_dgm.c
+++ b/source3/lib/messages_dgm.c
@@ -40,6 +40,8 @@ struct messaging_dgm_context {
const uint8_t *msg, size_t msg_len,
void *private_data);
void *recv_cb_private_data;
+
+ bool *have_dgm_context;
};
struct messaging_dgm_hdr {
@@ -187,6 +189,11 @@ int messaging_dgm_init(TALLOC_CTX *mem_ctx,
struct sockaddr_un socket_address;
size_t sockname_len;
uint64_t cookie;
+ static bool have_dgm_context = false;
+
+ if (have_dgm_context) {
+ return EEXIST;
+ }
ctx = talloc_zero(mem_ctx, struct messaging_dgm_context);
if (ctx == NULL) {
@@ -255,6 +262,8 @@ int messaging_dgm_init(TALLOC_CTX *mem_ctx,
}
talloc_set_destructor(ctx, messaging_dgm_context_destructor);
+ ctx->have_dgm_context = &have_dgm_context;
+
*pctx = ctx;
return 0;
@@ -277,6 +286,11 @@ static int messaging_dgm_context_destructor(struct messaging_dgm_context *c)
(void)messaging_dgm_lockfile_remove(c, c->cache_dir, pid.pid);
}
close(c->lockfile_fd);
+
+ if (c->have_dgm_context != NULL) {
+ *c->have_dgm_context = false;
+ }
+
return 0;
}