More of the fix for bug #7118 - nmbd problems with socket address.
commit6fe7ee1d216fcf722b3efa23fd80782ce0dd0e9f
authorJeremy Allison <jra@samba.org>
Wed, 10 Feb 2010 20:32:05 +0000 (10 12:32 -0800)
committerKarolin Seeger <kseeger@samba.org>
Thu, 11 Feb 2010 11:41:33 +0000 (11 12:41 +0100)
tree0db530c9492e384ed2f8a2ba8adc56a3707a9304
parent05123ef78c903de2a12b95fb30632f03ac919a4d
More of the fix for bug #7118 - nmbd problems with socket address.

Add a simple "processed packet queue" cache to stop nmbd responding to
packets received on the broadcast and non-broadcast socket (which
it has opened when "nmbd bind explicit broadcast = yes").

This is a very simple packet queue - it only keeps the packets
processed during a single call to listen_for_packets() (i.e. one
select call). This means that if the delivery notification for a
packet received on both broadcast and non-broadcast addresses
is done in two different select calls, the packet will still be
processed twice. This is a very rare occurrance and we can just
live with it when it does as the protocol is stateless. If this
is ever flagged as a repeatable problem then we can add a longer
lived cache, using timeout processing to clear etc. etc. But without
storing all packets processed we can never be *sure* we've eliminated
the race condition so I'm going to go with this simple solution until
someone proves a more complex one is needed :-).

Jeremy.
source3/nmbd/nmbd_packets.c