From eb71c5edcbb983ed4a1b0f57139bd66b671c67fa Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Tue, 24 Feb 1998 20:05:39 +0000 Subject: [PATCH] Fixed bug reported by Janne.Harju@nmp.nokia.com. When used in broadcast 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 | 2 ++ source/nmbd/nmbd_become_lmb.c | 2 +- source/nmbd/nmbd_mynames.c | 40 +++++++++++++++++++++++++++++------ 3 files changed, 37 insertions(+), 7 deletions(-) diff --git a/source/include/proto.h b/source/include/proto.h index a5a7ceec691..6f8edb445eb 100644 --- a/source/include/proto.h +++ b/source/include/proto.h @@ -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, diff --git a/source/nmbd/nmbd_become_lmb.c b/source/nmbd/nmbd_become_lmb.c index 2420b2ec4b7..b58244104dc 100644 --- a/source/nmbd/nmbd_become_lmb.c +++ b/source/nmbd/nmbd_become_lmb.c @@ -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; diff --git a/source/nmbd/nmbd_mynames.c b/source/nmbd/nmbd_mynames.c index 9441449beda..30804ab807b 100644 --- a/source/nmbd/nmbd_mynames.c +++ b/source/nmbd/nmbd_mynames.c @@ -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); } } -- 2.34.1