[SCM] Samba Shared Repository - branch master updated

Jeremy Allison jra at samba.org
Wed Feb 15 13:11:02 MST 2012


The branch, master has been updated
       via  dd5868d s3: Add SERVERID_UNIQUE_ID_NOT_TO_VERIFY, bug 8760
      from  a6bd7f3 s3-printing: fix crash in printer_list_set_printer()

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit dd5868d41eeaa304a471822d7783526d9f4c37f5
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Feb 15 11:22:45 2012 +0100

    s3: Add SERVERID_UNIQUE_ID_NOT_TO_VERIFY, bug 8760
    
    Autobuild-User: Jeremy Allison <jra at samba.org>
    Autobuild-Date: Wed Feb 15 21:10:22 CET 2012 on sn-devel-104

-----------------------------------------------------------------------

Summary of changes:
 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(-)


Changeset truncated at 500 lines:

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 12b736d..9c73002 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
 
@@ -1228,8 +1229,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..182b346 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
 	/*


-- 
Samba Shared Repository


More information about the samba-cvs mailing list