diff options
-rw-r--r-- | source3/include/proto.h | 1 | ||||
-rw-r--r-- | source3/namepacket.c | 27 | ||||
-rw-r--r-- | source3/param/loadparm.c | 4 |
3 files changed, 13 insertions, 19 deletions
diff --git a/source3/include/proto.h b/source3/include/proto.h index fa689d1c90..e0ddee8943 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -185,6 +185,7 @@ BOOL lp_browse_list(void); BOOL lp_unix_realname(void); BOOL lp_nis_home_map(void); BOOL lp_time_server(void); +BOOL lp_interfaces_only(void); int lp_os_level(void); int lp_max_ttl(void); int lp_max_log_size(void); diff --git a/source3/namepacket.c b/source3/namepacket.c index 55c850f254..ba1c4044a3 100644 --- a/source3/namepacket.c +++ b/source3/namepacket.c @@ -622,18 +622,12 @@ BOOL listen_for_packets(BOOL run_election) struct packet_struct *packet = read_packet(sock_array[i], NMB_PACKET); if (packet) { - /* - * If we got a packet on the broadcast socket check it - * came from one of our local nets. We should only be - * receiving broadcasts from nets we have subnets for. - * - * Note that this filter precludes remote announces. - * If we need this to work we will have to add an - * 'allow local announce' parameter that gives a - * list of networks we will allow through the filter. + * If we got a packet on the broadcast socket and interfaces + * only is set then check it came from one of our local nets. */ - if((sock_array[i] == ClientNMB) && (!is_local_net(packet->ip))) + if(lp_interfaces_only() && (sock_array[i] == ClientNMB) && + (!is_local_net(packet->ip))) { DEBUG(7,("discarding nmb packet sent to broadcast socket from %s:%d\n", inet_ntoa(packet->ip),packet->port)); @@ -663,16 +657,11 @@ BOOL listen_for_packets(BOOL run_election) if (packet) { /* - * If we got a packet on the broadcast socket check it - * came from one of our local nets. We should only be - * receiving broadcasts from nets we have subnets for. - * - * Note that this filter precludes remote announces. - * If we need this to work we will have to add an - * 'allow local announce' parameter that gives a - * list of networks we will allow through the filter. + * If we got a packet on the broadcast socket and interfaces + * only is set then check it came from one of our local nets. */ - if((sock_array[i] == ClientDGRAM) && (!is_local_net(packet->ip))) + if(lp_interfaces_only() && (sock_array[i] == ClientDGRAM) && + (!is_local_net(packet->ip))) { DEBUG(7,("discarding dgram packet sent to broadcast socket from %s:%d\n", inet_ntoa(packet->ip),packet->port)); diff --git a/source3/param/loadparm.c b/source3/param/loadparm.c index b877650078..1568e3abf5 100644 --- a/source3/param/loadparm.c +++ b/source3/param/loadparm.c @@ -183,6 +183,7 @@ typedef struct BOOL bUnixRealname; BOOL bNISHomeMap; BOOL bTimeServer; + BOOL bInterfacesOnly; } global; static global Globals; @@ -410,6 +411,7 @@ struct parm_struct {"null passwords", P_BOOL, P_GLOBAL, &Globals.bNullPasswords, NULL}, {"strip dot", P_BOOL, P_GLOBAL, &Globals.bStripDot, NULL}, {"interfaces", P_STRING, P_GLOBAL, &Globals.szInterfaces, NULL}, + {"interfaces only", P_BOOL, P_GLOBAL, &Globals.bInterfacesOnly, NULL}, {"password server", P_STRING, P_GLOBAL, &Globals.szPasswordServer, NULL}, {"socket options", P_GSTRING, P_GLOBAL, user_socket_options, NULL}, {"netbios name", P_UGSTRING,P_GLOBAL, myname, NULL}, @@ -655,6 +657,7 @@ static void init_globals(void) coding_system = interpret_coding_system (KANJI, SJIS_CODE); Globals.client_code_page = DEFAULT_CLIENT_CODE_PAGE; Globals.bTimeServer = False; + Globals.bInterfacesOnly = False; /* these parameters are set to defaults that are more appropriate for the increasing samba install base: @@ -867,6 +870,7 @@ FN_GLOBAL_BOOL(lp_browse_list,&Globals.bBrowseList) FN_GLOBAL_BOOL(lp_unix_realname,&Globals.bUnixRealname) FN_GLOBAL_BOOL(lp_nis_home_map,&Globals.bNISHomeMap) FN_GLOBAL_BOOL(lp_time_server,&Globals.bTimeServer) +FN_GLOBAL_BOOL(lp_interfaces_only,&Globals.bInterfacesOnly) FN_GLOBAL_INTEGER(lp_os_level,&Globals.os_level) FN_GLOBAL_INTEGER(lp_max_ttl,&Globals.max_ttl) |