diff options
author | Jeremy Allison <jra@samba.org> | 2001-06-30 03:11:44 +0000 |
---|---|---|
committer | Jeremy Allison <jra@samba.org> | 2001-06-30 03:11:44 +0000 |
commit | 064b4904f9695a766acc0d87a630e18a59e5c540 (patch) | |
tree | 03feb3b6bccb247207ee77c617c15f38bdcbeb6f | |
parent | 6db4e7612070b8df8d126b596cb6665f0a582db0 (diff) | |
download | samba-064b4904f9695a766acc0d87a630e18a59e5c540.tar.gz samba-064b4904f9695a766acc0d87a630e18a59e5c540.tar.bz2 samba-064b4904f9695a766acc0d87a630e18a59e5c540.zip |
Ensure we return correct error on trying to unlock a region not locked.
Jeremy.
(This used to be commit 015a077acc49e59179dc10256fd32166ee4623e2)
-rw-r--r-- | source3/include/smb.h | 1 | ||||
-rw-r--r-- | source3/locking/locking.c | 4 | ||||
-rw-r--r-- | source3/torture/torture.c | 10 |
3 files changed, 12 insertions, 3 deletions
diff --git a/source3/include/smb.h b/source3/include/smb.h index 7a7c2bcede..1cceb88983 100644 --- a/source3/include/smb.h +++ b/source3/include/smb.h @@ -177,6 +177,7 @@ implemented */ #define ERRfilexists 80 /* File in operation already exists */ #define ERRcannotopen 110 /* Cannot open the file specified */ #define ERRunknownlevel 124 +#define ERRnotlocked 158 /* This region is not locked by this locking context. */ #define ERRrename 183 #define ERRbadpipe 230 /* Named pipe invalid */ #define ERRpipebusy 231 /* All instances of pipe are busy */ diff --git a/source3/locking/locking.c b/source3/locking/locking.c index 68c3c5b653..a75388081e 100644 --- a/source3/locking/locking.c +++ b/source3/locking/locking.c @@ -168,7 +168,7 @@ BOOL do_unlock(files_struct *fsp,connection_struct *conn, if (!OPEN_FSP(fsp) || !fsp->can_lock || (fsp->conn != conn)) { *eclass = ERRDOS; - *ecode = ERRlock; + *ecode = ERRbadfid; return False; } @@ -187,7 +187,7 @@ BOOL do_unlock(files_struct *fsp,connection_struct *conn, if (!ok) { DEBUG(10,("do_unlock: returning ERRlock.\n" )); *eclass = ERRDOS; - *ecode = ERRlock; + *ecode = ERRnotlocked; return False; } diff --git a/source3/torture/torture.c b/source3/torture/torture.c index a50c44b296..d7e169bdcc 100644 --- a/source3/torture/torture.c +++ b/source3/torture/torture.c @@ -909,8 +909,16 @@ static void run_locktest2(int dummy) cli_setpid(&cli, 2); - if (cli_unlock(&cli, fnum1, 0, 8)) { + if (cli_unlock(&cli, fnum1, 0, 4)) { printf("unlock1 succeeded! This is a locking bug\n"); + } else { + if (!check_error(&cli, ERRDOS, ERRnotlocked, 0)) return; + } + + if (cli_unlock(&cli, fnum1, 0, 8)) { + printf("unlock2 succeeded! This is a locking bug\n"); + } else { + if (!check_error(&cli, ERRDOS, ERRnotlocked, 0)) return; } if (cli_lock(&cli, fnum3, 0, 4, 0, WRITE_LOCK)) { |