mirror of
https://github.com/samba-team/samba.git
synced 2025-01-11 05:18:09 +03:00
s3: smbd: Ensure brl_get_locks_readonly() always returns a valid struct byte_range_lock even if there are no locks.
brl_get_locks_readonly() currently returns NULL when it can't find any byte range locks on the file. This is an error - it should return a valid struct byte_range_lock containing num_locks == 0 so it can be cached. Returning NULL when there are no locks causes POSIX lock tests to fail returning NT_STATUS_NO_MEMORY (as it thinks it can't allocate the struct) instead of NT_STATUS_OK. Fixes bug: Bug 10431 - STATUS_NO_MEMORY response from Query File Posix Lock request https://bugzilla.samba.org/show_bug.cgi?id=10431 Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Volker Lendecke <Volker.Lendecke@SerNet.DE>
This commit is contained in:
parent
f0030c619b
commit
abf08ed544
@ -2154,7 +2154,21 @@ struct byte_range_lock *brl_get_locks_readonly(files_struct *fsp)
|
||||
make_tdb_data((uint8_t *)&fsp->file_id,
|
||||
sizeof(fsp->file_id)),
|
||||
brl_get_locks_readonly_parser, &state);
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
|
||||
if (NT_STATUS_EQUAL(status,NT_STATUS_NOT_FOUND)) {
|
||||
/*
|
||||
* No locks on this file. Return an empty br_lock.
|
||||
*/
|
||||
br_lock = talloc(fsp, struct byte_range_lock);
|
||||
if (br_lock == NULL) {
|
||||
goto fail;
|
||||
}
|
||||
|
||||
br_lock->have_read_oplocks = false;
|
||||
br_lock->num_locks = 0;
|
||||
br_lock->lock_data = NULL;
|
||||
|
||||
} else if (!NT_STATUS_IS_OK(status)) {
|
||||
DEBUG(3, ("Could not parse byte range lock record: "
|
||||
"%s\n", nt_errstr(status)));
|
||||
goto fail;
|
||||
|
Loading…
Reference in New Issue
Block a user