summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/include/proto.h1
-rw-r--r--source/namepacket.c27
-rw-r--r--source/param/loadparm.c4
3 files changed, 13 insertions, 19 deletions
diff --git a/source/include/proto.h b/source/include/proto.h
index fa689d1c90f..e0ddee89439 100644
--- a/source/include/proto.h
+++ b/source/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/source/namepacket.c b/source/namepacket.c
index 55c850f2544..ba1c4044a3b 100644
--- a/source/namepacket.c
+++ b/source/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/source/param/loadparm.c b/source/param/loadparm.c
index b8776500781..1568e3abf51 100644
--- a/source/param/loadparm.c
+++ b/source/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)