Fixed bug reported by Janne.Harju@nmp.nokia.com. When used in broadcast
authorJeremy Allison <jra@samba.org>
Tue, 24 Feb 1998 20:05:39 +0000 (20:05 +0000)
committerJeremy Allison <jra@samba.org>
Tue, 24 Feb 1998 20:05:39 +0000 (20:05 +0000)
only mode nmbd was not reporting WORKGROUP<0> and WORKGROUP<1e> names
to a unicast node status query (although it was registering these names
on the network). Also tidied up code in nmbd_mynames.c so that all
known IP addresses are registered in the unicast subnet in this case
rather than just the first, as was previously done.
Jeremy.

source/include/proto.h
source/nmbd/nmbd_become_lmb.c
source/nmbd/nmbd_mynames.c

index a5a7ceec6917f3dfe29900524d5e843a20388fab..6f8edb445eb08771f92a1affccf90a14c8e242b1 100644 (file)
@@ -483,6 +483,8 @@ void add_domain_names(time_t t);
 
 /*The following definitions come from  nmbd_become_lmb.c  */
 
+void insert_permanent_name_into_unicast( struct subnet_record *subrec, 
+                                                struct nmb_name *nmbname, uint16 nb_type );
 void unbecome_local_master_success(struct subnet_record *subrec,
                              struct userdata_struct *userdata,
                              struct nmb_name *released_name,
index 2420b2ec4b73187982a2c08223b1a09bc27e4589..b58244104dcfbda9081fb2a41bf17f6670f08cbf 100644 (file)
@@ -35,7 +35,7 @@ extern uint16 samba_nb_type; /* Samba's NetBIOS name type. */
  our IP address if it already exists.
 ******************************************************************/
 
-static void insert_permanent_name_into_unicast( struct subnet_record *subrec, 
+void insert_permanent_name_into_unicast( struct subnet_record *subrec, 
                                                 struct nmb_name *nmbname, uint16 nb_type )
 {
   struct name_record *namerec;
index 9441449bedaf6d0bfecd16309e1822b17792ee6b..30804ab807b28e0604052d3f32ae207ecf73827d 100644 (file)
@@ -29,6 +29,7 @@ extern int DEBUGLEVEL;
 extern char **my_netbios_names;
 extern pstring myname;
 extern fstring myworkgroup;
+extern pstring scope;
 
 extern uint16 samba_nb_type; /* Samba's NetBIOS type. */
 
@@ -97,14 +98,41 @@ Exiting.\n", myworkgroup, subrec->subnet_name));
 
     for (i=0; my_netbios_names[i]; i++)
     {
-      add_name_to_subnet(unicast_subnet, my_netbios_names[i],0x20,samba_nb_type, PERMANENT_TTL,
-                     SELF_NAME, 1, &FIRST_SUBNET->myip);
+      for(subrec = FIRST_SUBNET; subrec; subrec = NEXT_SUBNET_EXCLUDING_UNICAST(subrec))
+      {
+        /*
+         * Ensure all the IP addresses are added if we are multihomed.
+         */
+        struct nmb_name nmbname;
+
+        make_nmb_name(&nmbname, my_netbios_names[i],0x20, scope);
+        insert_permanent_name_into_unicast(subrec, &nmbname, samba_nb_type);
+
+        make_nmb_name(&nmbname, my_netbios_names[i],0x3, scope);
+        insert_permanent_name_into_unicast(subrec, &nmbname, samba_nb_type);
+
+        make_nmb_name(&nmbname, my_netbios_names[i],0x0, scope);
+        insert_permanent_name_into_unicast(subrec, &nmbname, samba_nb_type);
+      }
+    }
+
+    /*
+     * Add the WORKGROUP<0> and WORKGROUP<1e> group names to the unicast subnet
+     * also for the same reasons.
+     */
+
+    for(subrec = FIRST_SUBNET; subrec; subrec = NEXT_SUBNET_EXCLUDING_UNICAST(subrec))
+    {
+      /*
+       * Ensure all the IP addresses are added if we are multihomed.
+       */
+      struct nmb_name nmbname;
 
-      add_name_to_subnet(unicast_subnet, my_netbios_names[i],0x3,samba_nb_type, PERMANENT_TTL,
-                     SELF_NAME, 1, &FIRST_SUBNET->myip);
+      make_nmb_name(&nmbname, myworkgroup, 0x0, scope);
+      insert_permanent_name_into_unicast(subrec, &nmbname, samba_nb_type|NB_GROUP);
 
-      add_name_to_subnet(unicast_subnet, my_netbios_names[i],0x0,samba_nb_type, PERMANENT_TTL,
-                     SELF_NAME, 1, &FIRST_SUBNET->myip);
+      make_nmb_name(&nmbname, myworkgroup, 0x1e, scope);
+      insert_permanent_name_into_unicast(subrec, &nmbname, samba_nb_type|NB_GROUP);
     }
   }