svn commit: samba r12958 - in branches/SAMBA_4_0/source/nbt_server/dgram: .

metze at samba.org metze at samba.org
Mon Jan 16 14:01:35 GMT 2006


Author: metze
Date: 2006-01-16 14:01:34 +0000 (Mon, 16 Jan 2006)
New Revision: 12958

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=12958

Log:
don't bind to '255.255.255.255'

fix bug #3411

metze
Modified:
   branches/SAMBA_4_0/source/nbt_server/dgram/request.c


Changeset:
Modified: branches/SAMBA_4_0/source/nbt_server/dgram/request.c
===================================================================
--- branches/SAMBA_4_0/source/nbt_server/dgram/request.c	2006-01-16 05:47:43 UTC (rev 12957)
+++ branches/SAMBA_4_0/source/nbt_server/dgram/request.c	2006-01-16 14:01:34 UTC (rev 12958)
@@ -56,7 +56,7 @@
 */
 NTSTATUS nbtd_dgram_setup(struct nbtd_interface *iface, const char *bind_address)
 {
-	struct nbt_dgram_socket *bcast_dgmsock;
+	struct nbt_dgram_socket *bcast_dgmsock = NULL;
 	struct nbtd_server *nbtsrv = iface->nbtsrv;
 	struct socket_address *bcast_addr, *bind_addr;
 	NTSTATUS status;
@@ -68,32 +68,32 @@
 		return NT_STATUS_NO_MEMORY;
 	}
 
-	/* listen for broadcasts on port 138 */
-	bcast_dgmsock = nbt_dgram_socket_init(iface, nbtsrv->task->event_ctx);
-	if (!bcast_dgmsock) {
-		talloc_free(tmp_ctx);
-		return NT_STATUS_NO_MEMORY;
-	}
+	if (strcmp("0.0.0.0", iface->netmask) != 0) {
+		/* listen for broadcasts on port 138 */
+		bcast_dgmsock = nbt_dgram_socket_init(iface, nbtsrv->task->event_ctx);
+		if (!bcast_dgmsock) {
+			talloc_free(tmp_ctx);
+			return NT_STATUS_NO_MEMORY;
+		}
 	
-	bcast_addr = socket_address_from_strings(tmp_ctx, bcast_dgmsock->sock->backend_name, 
-						 iface->bcast_address, 
-						 lp_dgram_port());
+		bcast_addr = socket_address_from_strings(tmp_ctx, bcast_dgmsock->sock->backend_name, 
+							 iface->bcast_address, lp_dgram_port());
+		if (!bcast_addr) {
+			talloc_free(tmp_ctx);
+			return NT_STATUS_NO_MEMORY;
+		}
 
-	status = socket_listen(bcast_dgmsock->sock, bcast_addr, 0, 0);
-	if (!NT_STATUS_IS_OK(status)) {
-		talloc_free(tmp_ctx);
-		DEBUG(0,("Failed to bind to %s:%d - %s\n", 
-			 iface->bcast_address, lp_dgram_port(), nt_errstr(status)));
-		return status;
+		status = socket_listen(bcast_dgmsock->sock, bcast_addr, 0, 0);
+		if (!NT_STATUS_IS_OK(status)) {
+			talloc_free(tmp_ctx);
+			DEBUG(0,("Failed to bind to %s:%d - %s\n", 
+				 iface->bcast_address, lp_dgram_port(), nt_errstr(status)));
+			return status;
+		}
+	
+		dgram_set_incoming_handler(bcast_dgmsock, dgram_request_handler, iface);
 	}
-	talloc_free(bcast_addr);
-	
-	dgram_set_incoming_handler(bcast_dgmsock, dgram_request_handler, iface);
 
-	bind_addr = socket_address_from_strings(tmp_ctx, bcast_dgmsock->sock->backend_name, 
-						bind_address, 
-						lp_dgram_port());
-
 	/* listen for unicasts on port 138 */
 	iface->dgmsock = nbt_dgram_socket_init(iface, nbtsrv->task->event_ctx);
 	if (!iface->dgmsock) {
@@ -101,6 +101,13 @@
 		return NT_STATUS_NO_MEMORY;
 	}
 
+	bind_addr = socket_address_from_strings(tmp_ctx, iface->dgmsock->sock->backend_name, 
+						bind_address, lp_dgram_port());
+	if (!bind_addr) {
+		talloc_free(tmp_ctx);
+		return NT_STATUS_NO_MEMORY;
+	}
+
 	status = socket_listen(iface->dgmsock->sock, bind_addr, 0, 0);
 	if (!NT_STATUS_IS_OK(status)) {
 		talloc_free(tmp_ctx);
@@ -108,23 +115,23 @@
 			 bind_address, lp_dgram_port(), nt_errstr(status)));
 		return status;
 	}
-	talloc_free(bind_addr);
 
 	dgram_set_incoming_handler(iface->dgmsock, dgram_request_handler, iface);
 
 	talloc_free(tmp_ctx);
 
-
 	for (i=0;i<ARRAY_SIZE(mailslot_handlers);i++) {
 		/* note that we don't need to keep the pointer
 		   to the dgmslot around - the callback is all
 		   we need */
 		struct dgram_mailslot_handler *dgmslot;
 
-		dgmslot = dgram_mailslot_listen(bcast_dgmsock, 
+		if (bcast_dgmsock) {
+			dgmslot = dgram_mailslot_listen(bcast_dgmsock, 
 						mailslot_handlers[i].mailslot_name,
 						mailslot_handlers[i].handler, iface);
-		NT_STATUS_HAVE_NO_MEMORY(dgmslot);
+			NT_STATUS_HAVE_NO_MEMORY(dgmslot);
+		}
 
 		dgmslot = dgram_mailslot_listen(iface->dgmsock, 
 						mailslot_handlers[i].mailslot_name,



More information about the samba-cvs mailing list