s3: Add SERVERID_UNIQUE_ID_NOT_TO_VERIFY, bug 8760
authorVolker Lendecke <vl@samba.org>
Thu, 16 Feb 2012 22:22:42 +0000 (14:22 -0800)
committerKarolin Seeger <kseeger@samba.org>
Tue, 21 Feb 2012 19:47:29 +0000 (20:47 +0100)
Back-port of commit dd5868d41eeaa304a471822d7783526d9f4c37f5
from master. Back-port done by Manoj Dahal <mdahal@novell.com>.

source3/include/serverid.h
source3/lib/serverid.c
source3/smbd/server.c

index 62bf6382140bac1deaf8e2fbbc40926a82fd96d5..435c88b892d6eac30edc82671556a14ab878aac7 100644 (file)
@@ -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
  */
@@ -64,4 +67,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
index 8cd7f5a82c881e8fba63b0c7a3154b9cdf16afb5..00dd6c4f8d208bad356171fbbff65a41bcc25bb4 100644 (file)
@@ -241,6 +241,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;
@@ -355,3 +359,15 @@ bool serverid_traverse(int (*fn)(struct db_record *rec,
        state.private_data = private_data;
        return db->traverse(db, serverid_traverse_fn, &state);
 }
+
+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;
+}
index db68ace839d4d16f2ee67b883d119e0db6592914..28bb9478d9f7030a93e87f1d9fc76063a2b66625 100644 (file)
@@ -447,7 +447,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) {
@@ -920,7 +920,6 @@ extern void build_options(bool screen);
        struct smbd_parent_context *parent = NULL;
        TALLOC_CTX *frame;
        NTSTATUS status;
-       uint64_t unique_id;
 
        /*
         * Do this before any other talloc operation
@@ -1119,8 +1118,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
        /*