The Samba-Bugzilla – Attachment 7322 Details for
Bug 8760
Smbd wipes out the share mode lock entries of other file servers which are unregistered
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch for master
8760.patch (text/plain), 3.98 KB, created by
Volker Lendecke
on 2012-02-15 10:24:45 UTC
(
hide
)
Description:
Patch for master
Filename:
MIME Type:
Creator:
Volker Lendecke
Created:
2012-02-15 10:24:45 UTC
Size:
3.98 KB
patch
obsolete
>From 67aeb3ec4f8e216bec2763543b347ebf7830c447 Mon Sep 17 00:00:00 2001 >From: Volker Lendecke <vl@samba.org> >Date: Wed, 15 Feb 2012 11:22:45 +0100 >Subject: [PATCH] s3: Add SERVERID_UNIQUE_ID_NOT_TO_VERIFY, bug 8760 > >--- > source3/include/serverid.h | 9 +++++++++ > source3/lib/ctdbd_conn.c | 11 +++++++++-- > source3/lib/serverid.c | 20 ++++++++++++++++++++ > source3/smbd/server.c | 6 ++---- > 4 files changed, 40 insertions(+), 6 deletions(-) > >diff --git a/source3/include/serverid.h b/source3/include/serverid.h >index babb21b..8fc06a1 100644 >--- a/source3/include/serverid.h >+++ b/source3/include/serverid.h >@@ -22,6 +22,9 @@ > > #include "includes.h" > >+/** Don't verify this unique id */ >+#define SERVERID_UNIQUE_ID_NOT_TO_VERIFY 0xFFFFFFFFFFFFFFFFULL >+ > /* > * Register a server with its unique id > */ >@@ -69,4 +72,10 @@ bool serverid_traverse_read(int (*fn)(const struct server_id *id, > */ > bool serverid_parent_init(TALLOC_CTX *mem_ctx); > >+/* >+ * Get a random unique_id and make sure that it is not >+ * SERVERID_UNIQUE_ID_NOT_TO_VERIFY >+ */ >+uint64_t serverid_get_random_unique_id(void); >+ > #endif >diff --git a/source3/lib/ctdbd_conn.c b/source3/lib/ctdbd_conn.c >index d5c365a..4270481 100644 >--- a/source3/lib/ctdbd_conn.c >+++ b/source3/lib/ctdbd_conn.c >@@ -20,6 +20,7 @@ > > #include "includes.h" > #include "util_tdb.h" >+#include "serverid.h" > > #ifdef CLUSTER_SUPPORT > >@@ -1255,8 +1256,14 @@ bool ctdb_serverids_exist(struct ctdbd_connection *conn, > } > > for (i=0; i<vnn->num_srvids; i++) { >- results[vnn->pid_indexes[i]] = >- ((reply->data[i/8] & (1<<(i%8))) != 0); >+ int idx = vnn->pid_indexes[i]; >+ >+ if (pids[i].unique_id == >+ SERVERID_UNIQUE_ID_NOT_TO_VERIFY) { >+ results[idx] = true; >+ continue; >+ } >+ results[idx] = ((reply->data[i/8] & (1<<(i%8))) != 0); > } > > TALLOC_FREE(reply); >diff --git a/source3/lib/serverid.c b/source3/lib/serverid.c >index 6a8083a..02de2b4 100644 >--- a/source3/lib/serverid.c >+++ b/source3/lib/serverid.c >@@ -265,6 +265,10 @@ bool serverid_exists(const struct server_id *id) > return false; > } > >+ if (id->unique_id == SERVERID_UNIQUE_ID_NOT_TO_VERIFY) { >+ return true; >+ } >+ > db = serverid_db(); > if (db == NULL) { > return false; >@@ -308,6 +312,10 @@ bool serverids_exist(const struct server_id *ids, int num_ids, bool *results) > struct serverid_key key; > TDB_DATA tdbkey; > >+ if (ids[i].unique_id == SERVERID_UNIQUE_ID_NOT_TO_VERIFY) { >+ results[i] = true; >+ continue; >+ } > if (!results[i]) { > continue; > } >@@ -433,3 +441,15 @@ bool serverid_traverse(int (*fn)(struct db_record *rec, > status = dbwrap_traverse(db, serverid_traverse_fn, &state, NULL); > return NT_STATUS_IS_OK(status); > } >+ >+uint64_t serverid_get_random_unique_id(void) >+{ >+ uint64_t unique_id = SERVERID_UNIQUE_ID_NOT_TO_VERIFY; >+ >+ while (unique_id == SERVERID_UNIQUE_ID_NOT_TO_VERIFY) { >+ generate_random_buffer((uint8_t *)&unique_id, >+ sizeof(unique_id)); >+ } >+ >+ return unique_id; >+} >diff --git a/source3/smbd/server.c b/source3/smbd/server.c >index 10d59ad..4f0adfb 100644 >--- a/source3/smbd/server.c >+++ b/source3/smbd/server.c >@@ -481,7 +481,7 @@ static void smbd_accept_connection(struct tevent_context *ev, > * Generate a unique id in the parent process so that we use > * the global random state in the parent. > */ >- generate_random_buffer((uint8_t *)&unique_id, sizeof(unique_id)); >+ unique_id = serverid_get_random_unique_id(); > > pid = sys_fork(); > if (pid == 0) { >@@ -973,7 +973,6 @@ extern void build_options(bool screen); > struct smbd_parent_context *parent = NULL; > TALLOC_CTX *frame; > NTSTATUS status; >- uint64_t unique_id; > struct tevent_context *ev_ctx; > struct messaging_context *msg_ctx; > struct tevent_signal *se; >@@ -1191,8 +1190,7 @@ extern void build_options(bool screen); > become_daemon(Fork, no_process_group, log_stdout); > } > >- generate_random_buffer((uint8_t *)&unique_id, sizeof(unique_id)); >- set_my_unique_id(unique_id); >+ set_my_unique_id(serverid_get_random_unique_id()); > > #if HAVE_SETPGID > /* >-- >1.7.9 >
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Raw
Actions:
View
Attachments on
bug 8760
:
7313
|
7319
|
7320
| 7322 |
7326
|
7328