summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Allison <jra@samba.org>2002-08-12 16:20:54 +0000
committerJeremy Allison <jra@samba.org>2002-08-12 16:20:54 +0000
commitcebad9a48dfb0da13ab71bd861199ce26c31c947 (patch)
tree5a176dc82706b1302cd9370f356ba37c30e3c729
parent3e5939ccd5bb3347af8166c452e7540504691c92 (diff)
downloadsamba-cebad9a48dfb0da13ab71bd861199ce26c31c947.tar.gz
samba-cebad9a48dfb0da13ab71bd861199ce26c31c947.tar.bz2
samba-cebad9a48dfb0da13ab71bd861199ce26c31c947.zip
Bugfix for problem pointed out by Sean Trace <Sean.Trace@aveva.com>. We can't
check for POSIX errors in the blocking lock code as we may have never made a POSIX call (could have denied lock before POSIX checked). Jeremy. (This used to be commit 8403253f277299f566f2931fdec53b6e4ece376e)
-rw-r--r--source3/smbd/blocking.c23
1 files changed, 13 insertions, 10 deletions
diff --git a/source3/smbd/blocking.c b/source3/smbd/blocking.c
index d4a53d9a6d..6623c6df64 100644
--- a/source3/smbd/blocking.c
+++ b/source3/smbd/blocking.c
@@ -282,9 +282,10 @@ static BOOL process_lockread(blocking_lock_record *blr)
status = do_lock_spin( fsp, conn, SVAL(inbuf,smb_pid), (SMB_BIG_UINT)numtoread,
(SMB_BIG_UINT)startpos, READ_LOCK);
if (NT_STATUS_V(status)) {
- if ((errno != EACCES) && (errno != EAGAIN)) {
+ if (!NT_STATUS_EQUAL(status,NT_STATUS_LOCK_NOT_GRANTED) &&
+ !NT_STATUS_EQUAL(status,NT_STATUS_FILE_LOCK_CONFLICT)) {
/*
- * We have other than a "can't get lock" POSIX
+ * We have other than a "can't get lock"
* error. Send an error.
* Return True so we get dequeued.
*/
@@ -348,9 +349,10 @@ static BOOL process_lock(blocking_lock_record *blr)
status = do_lock_spin(fsp, conn, SVAL(inbuf,smb_pid), (SMB_BIG_UINT)count,
(SMB_BIG_UINT)offset, WRITE_LOCK);
if (NT_STATUS_IS_ERR(status)) {
- if((errno != EACCES) && (errno != EAGAIN)) {
+ if (!NT_STATUS_EQUAL(status,NT_STATUS_LOCK_NOT_GRANTED) &&
+ !NT_STATUS_EQUAL(status,NT_STATUS_FILE_LOCK_CONFLICT)) {
/*
- * We have other than a "can't get lock" POSIX
+ * We have other than a "can't get lock"
* error. Send an error.
* Return True so we get dequeued.
*/
@@ -432,12 +434,13 @@ static BOOL process_lockingX(blocking_lock_record *blr)
reply_lockingX_success(blr);
return True;
- } else if ((errno != EACCES) && (errno != EAGAIN)) {
- /*
- * We have other than a "can't get lock" POSIX
- * error. Free any locks we had and return an error.
- * Return True so we get dequeued.
- */
+ } else if (!NT_STATUS_EQUAL(status,NT_STATUS_LOCK_NOT_GRANTED) &&
+ !NT_STATUS_EQUAL(status,NT_STATUS_FILE_LOCK_CONFLICT)) {
+ /*
+ * We have other than a "can't get lock"
+ * error. Free any locks we had and return an error.
+ * Return True so we get dequeued.
+ */
blocking_lock_reply_error(blr, status);
return True;