fix a segfault in the notify subsystem
authorChristian Ambach <christian.ambach@de.ibm.com>
Mon, 5 Apr 2010 12:12:52 +0000 (14:12 +0200)
committerVolker Lendecke <vl@samba.org>
Tue, 6 Apr 2010 12:06:05 +0000 (14:06 +0200)
commitc0d8cc9093fb8f884497b6f19721ce40a7b4c6a4
tree38595ddb45e863e21416161cfa7b505d0b4551dc
parent8c0608f725c95409f2bb9f6340cfddcec56a613f
fix a segfault in the notify subsystem

When the notify_array cannot be loaded correctly,
do not keep the half-baked parsing results in the global variable.

This can lead to segfaults next time notify_load is entered and
the seqnum has not changed. This has been seen in a case
where mixed smbd versions were running in a CTDB cluster
(versions with and w/o commit c216d1e6 that changed the
notify_entry structure).
There will be missed notifications until all smbds are at the
same software level, but this should be acceptable and is better
than crashing and interrupting client operations.

This fix cleans up the notify_array, removes the unparseable data
from the TDB and returns a fresh notify_array that can be worked
with.

The NDR_PRINT_DEBUG had to be moved to only be called when the
parsing succeeded, it was seen to cause additional segfaults.

The status variable is intentionally left to NT_STATUS_OK to not
make callers abort and report errors to the clients and make them
disconnect.

Signed-off-by: Christian Ambach <christian.ambach@de.ibm.com>
source/smbd/notify_internal.c