summaryrefslogtreecommitdiffstats
path: root/source4/torture
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2004-11-05 01:14:06 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:05:29 -0500
commit80eef3ea6647a9f8600466b2b468d38bd2eb0664 (patch)
treea2fd3a82ae58ce98746001762954197a106376e0 /source4/torture
parent96ffc6d945e9318f749796e63a76e6b52a289daa (diff)
downloadsamba-80eef3ea6647a9f8600466b2b468d38bd2eb0664.tar.gz
samba-80eef3ea6647a9f8600466b2b468d38bd2eb0664.tar.xz
samba-80eef3ea6647a9f8600466b2b468d38bd2eb0664.zip
r3539: much nicer async open delay code.
The previous code didn't handle the case where the file got renamed or deleted while waiting for the sharing violation delay. To handle this we need to make the 2nd open a full open call, including the name resolve call etc. Luckily this simplifies the logic. I also expanded the RAW-MUX test to include the case where we do open/open/open/close/close, with the 3rd open async, and that open gets retried after both the first close and the 2nd close, with the first retry failing and the 2nd retry working. The tests the "async reply after a async reply" logic in pvfs_open(). (This used to be commit eded2ad9c91f5ba587ef4f7f5f5a6dceb4b51ff3)
Diffstat (limited to 'source4/torture')
-rw-r--r--source4/torture/raw/mux.c23
1 files changed, 16 insertions, 7 deletions
diff --git a/source4/torture/raw/mux.c b/source4/torture/raw/mux.c
index 7dddd0602c0..6f9426490eb 100644
--- a/source4/torture/raw/mux.c
+++ b/source4/torture/raw/mux.c
@@ -39,7 +39,7 @@ static BOOL test_mux_open(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
{
union smb_open io;
NTSTATUS status;
- int fnum;
+ int fnum1, fnum2;
BOOL ret = True;
struct smbcli_request *req;
struct timeval tv;
@@ -53,10 +53,10 @@ static BOOL test_mux_open(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
io.generic.level = RAW_OPEN_NTCREATEX;
io.ntcreatex.in.root_fid = 0;
io.ntcreatex.in.flags = 0;
- io.ntcreatex.in.access_mask = SEC_RIGHT_MAXIMUM_ALLOWED;
+ io.ntcreatex.in.access_mask = SA_RIGHT_FILE_READ_DATA;
io.ntcreatex.in.create_options = 0;
io.ntcreatex.in.file_attr = FILE_ATTRIBUTE_NORMAL;
- io.ntcreatex.in.share_access = 0;
+ io.ntcreatex.in.share_access = NTCREATEX_SHARE_ACCESS_READ;
io.ntcreatex.in.alloc_size = 0;
io.ntcreatex.in.open_disposition = NTCREATEX_DISP_CREATE;
io.ntcreatex.in.impersonation = NTCREATEX_IMPERSONATION_ANONYMOUS;
@@ -64,12 +64,18 @@ static BOOL test_mux_open(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
io.ntcreatex.in.fname = BASEDIR "\\open.dat";
status = smb_raw_open(cli->tree, mem_ctx, &io);
CHECK_STATUS(status, NT_STATUS_OK);
- fnum = io.ntcreatex.out.fnum;
+ fnum1 = io.ntcreatex.out.fnum;
+
+ /* and a 2nd open, this will not conflict */
+ io.ntcreatex.in.open_disposition = NTCREATEX_DISP_OPEN;
+ status = smb_raw_open(cli->tree, mem_ctx, &io);
+ CHECK_STATUS(status, NT_STATUS_OK);
+ fnum2 = io.ntcreatex.out.fnum;
tv = timeval_current();
/* send an open that will conflict */
- io.ntcreatex.in.open_disposition = NTCREATEX_DISP_OPEN;
+ io.ntcreatex.in.share_access = 0;
status = smb_raw_open(cli->tree, mem_ctx, &io);
CHECK_STATUS(status, NT_STATUS_SHARING_VIOLATION);
@@ -87,8 +93,11 @@ static BOOL test_mux_open(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
tv = timeval_current();
req = smb_raw_open_send(cli->tree, &io);
- /* and close the file */
- smbcli_close(cli->tree, fnum);
+ /* and close the first file */
+ smbcli_close(cli->tree, fnum1);
+
+ /* then the 2nd file */
+ smbcli_close(cli->tree, fnum2);
/* see if the async open succeeded */
status = smb_raw_open_recv(req, mem_ctx, &io);