r24027: merge from http://people.samba.org/bzr/metze/samba/3_2-ctdb-metze/:
authorStefan Metzmacher <metze@samba.org>
Tue, 24 Jul 2007 10:24:27 +0000 (10:24 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:28:57 +0000 (12:28 -0500)
add in any cluster addresses. We need to response to these,
but not listen on them. This allows us to run nmbd on every
node in the cluster, and have all of them register with a
WINS server correctly

metze
(This used to be commit 98c57562c4dcf04b72a1e4ad5d9f5cf48e7d0b28)

source3/nmbd/nmbd_mynames.c
source3/param/loadparm.c

index 5ebd42ce87badae8544d4c7e2c5be0b8ac276d38..8fa5439ee39a32636892b958174c7cee209dbcca 100644 (file)
@@ -114,6 +114,7 @@ BOOL register_my_workgroup_and_names(void)
 {
        struct subnet_record *subrec;
        int i;
+       const char **cluster_addresses = NULL;
 
        for(subrec = FIRST_SUBNET; subrec; subrec = NEXT_SUBNET_INCLUDING_UNICAST(subrec)) {
                register_my_workgroup_one_subnet(subrec);
@@ -144,6 +145,35 @@ BOOL register_my_workgroup_and_names(void)
                }
        }
 
+       /*
+        * add in any cluster addresses. We need to response to these,
+        * but not listen on them. This allows us to run nmbd on every
+        * node in the cluster, and have all of them register with a
+        * WINS server correctly
+        */
+       if (lp_clustering()) {
+               cluster_addresses = lp_cluster_addresses();
+       }
+       if (cluster_addresses) {
+               int a, n;
+               unsigned name_types[] = {0x20, 0x3, 0x0};
+               
+               for (i=0; my_netbios_names(i); i++) {
+                       for(subrec = FIRST_SUBNET; subrec; subrec = subrec->next) {
+                               for (n=0;n<ARRAY_SIZE(name_types);n++) {
+                                       struct name_record *namerec;
+                                       struct nmb_name nmbname;                        
+                                       make_nmb_name(&nmbname, my_netbios_names(i), name_types[n]);
+                                       namerec = find_name_on_subnet(unicast_subnet, &nmbname, FIND_SELF_NAME);
+                                       if (namerec == NULL) continue;
+                                       for (a=0;cluster_addresses[a];a++) {
+                                               add_ip_to_name_record(namerec, *interpret_addr2(cluster_addresses[a]));
+                                       }
+                               }
+                       }
+               }
+       }
+
        /*
         * Add the WORKGROUP<0> and WORKGROUP<1e> group names to the unicast subnet
         * also for the same reasons.
index e62eaaf3fbbdf52a7d8a8b564b5124bcc4375480..372cfd529d42df60e1e12561be4dde72b28e4b66 100644 (file)
@@ -252,6 +252,7 @@ typedef struct {
        char *szCupsServer;
        char *szIPrintServer;
        char *ctdbdSocket;
+       char **szClusterAddresses;
        BOOL clustering;
        int ldap_passwd_sync; 
        int ldap_replication_sleep;
@@ -1046,6 +1047,7 @@ static struct parm_struct parm_table[] = {
 
        {"name cache timeout", P_INTEGER, P_GLOBAL, &Globals.name_cache_timeout, NULL, NULL, FLAG_ADVANCED}, 
        {"ctdbd socket", P_STRING, P_GLOBAL, &Globals.ctdbdSocket, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL}, 
+       {"cluster addresses", P_LIST, P_GLOBAL, &Globals.szClusterAddresses, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL}, 
        {"clustering", P_BOOL, P_GLOBAL, &Globals.clustering, NULL, NULL, FLAG_ADVANCED | FLAG_GLOBAL}, 
 
        {N_("Printing Options"), P_SEP, P_SEPARATOR}, 
@@ -1645,6 +1647,7 @@ static void init_globals(BOOL first_time_only)
        string_set(&Globals.szIPrintServer, "");
 
        string_set(&Globals.ctdbdSocket, "");
+       Globals.szClusterAddresses = NULL;
        Globals.clustering = False;
 
        Globals.winbind_cache_time = 300;       /* 5 minutes */
@@ -2061,6 +2064,7 @@ FN_LOCAL_STRING(lp_cups_options, szCupsOptions)
 FN_GLOBAL_STRING(lp_cups_server, &Globals.szCupsServer)
 FN_GLOBAL_STRING(lp_iprint_server, &Globals.szIPrintServer)
 FN_GLOBAL_CONST_STRING(lp_ctdbd_socket, &Globals.ctdbdSocket)
+FN_GLOBAL_LIST(lp_cluster_addresses, &Globals.szClusterAddresses)
 FN_GLOBAL_BOOL(lp_clustering, &Globals.clustering);
 FN_LOCAL_STRING(lp_printcommand, szPrintcommand)
 FN_LOCAL_STRING(lp_lpqcommand, szLpqcommand)