diff options
Diffstat (limited to 'source3/nmbd')
-rw-r--r-- | source3/nmbd/nmbd.c | 4 | ||||
-rw-r--r-- | source3/nmbd/nmbd_packets.c | 7 |
2 files changed, 8 insertions, 3 deletions
diff --git a/source3/nmbd/nmbd.c b/source3/nmbd/nmbd.c index d6943b19e6..30bbeaadee 100644 --- a/source3/nmbd/nmbd.c +++ b/source3/nmbd/nmbd.c @@ -460,7 +460,9 @@ static void msg_nmbd_send_packet(struct messaging_context *msg, p->packet.dgram.header.source_port = 138; } - send_packet(p); + if (store_outstanding_send_packet(p)) { + send_packet(p); + } } /**************************************************************************** ** diff --git a/source3/nmbd/nmbd_packets.c b/source3/nmbd/nmbd_packets.c index c80bac46b5..401eb25267 100644 --- a/source3/nmbd/nmbd_packets.c +++ b/source3/nmbd/nmbd_packets.c @@ -1909,6 +1909,7 @@ bool listen_for_packets(bool run_election) const char *packet_name; int client_fd; int client_port; + bool is_requested_send_reply = false; if (sock_array[i] == -1) { continue; @@ -1937,6 +1938,8 @@ bool listen_for_packets(bool run_election) continue; } + is_requested_send_reply = is_requested_send_packet(packet); + /* * If we got a packet on the broadcast socket and interfaces * only is set then check it came from one of our local nets. @@ -1950,7 +1953,8 @@ bool listen_for_packets(bool run_election) continue; } - if ((is_loopback_ip_v4(packet->ip) || ismyip_v4(packet->ip)) && + if (!is_requested_send_reply && + (is_loopback_ip_v4(packet->ip) || ismyip_v4(packet->ip)) && packet->port == client_port) { if (client_port == DGRAM_PORT) { @@ -1968,7 +1972,6 @@ bool listen_for_packets(bool run_election) } } - if (is_processed_packet(processed_packet_list, packet)) { DEBUG(7,("discarding duplicate packet from %s:%d\n", inet_ntoa(packet->ip),packet->port)); |