diff options
author | Volker Lendecke <vl@samba.org> | 2014-07-20 14:51:47 +0200 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2014-08-11 23:57:13 +0200 |
commit | d22bb34b7308794b721af7c62f3682b37d997f6b (patch) | |
tree | 3ec2a5f709f27ba8fe0347bc3dc7c0898cfc68ac | |
parent | a1529c3302656fad3daf1247141a987d36801066 (diff) | |
download | samba-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.c | 14 |
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; } |