From: Ralph Boehme Date: Sat, 18 Oct 2025 10:45:49 +0000 (+0200) Subject: smbd: distinguish "no record" from "bad record" in smbXsrv_open_global_lookup() X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d42a41794152d0f78989b6c5cb29befbc8504e8a;p=thirdparty%2Fsamba.git smbd: distinguish "no record" from "bad record" in smbXsrv_open_global_lookup() Allows callers to distinguish between "no record" and "bad record" when smbXsrv_open_global_parse_record() fails. No change in behaviour, but might be useful in the future. Signed-off-by: Ralph Boehme Reviewed-by: Volker Lendecke --- diff --git a/source3/smbd/smbXsrv_open.c b/source3/smbd/smbXsrv_open.c index 17424300f12..c33508fd525 100644 --- a/source3/smbd/smbXsrv_open.c +++ b/source3/smbd/smbXsrv_open.c @@ -303,6 +303,12 @@ static void smbXsrv_open_global_lookup_fn(struct db_record *rec, struct smbXsrv_open_global_lookup_state *state = private_data; TDB_DATA key = dbwrap_record_get_key(rec); + if (val.dsize == 0) { + /* Likely a ctdb tombstone record */ + state->status = NT_STATUS_NOT_FOUND; + return; + } + state->status = smbXsrv_open_global_parse_record(state->mem_ctx, key, val, @@ -330,6 +336,10 @@ static NTSTATUS smbXsrv_open_global_lookup( DBG_ERR("dbwrap_do_locked failed\n"); return status; } + if (NT_STATUS_EQUAL(state.status, NT_STATUS_NOT_FOUND)) { + DBG_DEBUG("smbXsrv_open record not found\n"); + return state.status; + } if (!NT_STATUS_IS_OK(state.status)) { DBG_ERR("smbXsrv_open_global_lookup_fn failed\n"); return state.status;