2 Unix SMB/CIFS implementation.
6 Copyright (C) Andrew Tridgell 2003
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3 of the License, or
11 (at your option) any later version.
13 This program is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with this program. If not, see <http://www.gnu.org/licenses/>.
23 #include "system/filesys.h"
24 #include "libcli/libcli.h"
25 #include "torture/util.h"
27 #define BASEDIR "\\unlinktest"
32 1) the server does not allow an unlink on a file that is open
34 bool torture_unlinktest(struct torture_context
*tctx
, struct smbcli_state
*cli
)
36 const char *fname
= BASEDIR
"\\unlink.tst";
42 torture_assert(tctx
, torture_setup_dir(cli
, BASEDIR
),
43 talloc_asprintf(tctx
, "Failed setting up %s", BASEDIR
));
45 cli
->session
->pid
= 1;
47 torture_comment(tctx
, "Opening a file\n");
49 fnum
= smbcli_open(cli
->tree
, fname
, O_RDWR
|O_CREAT
|O_EXCL
, DENY_NONE
);
50 torture_assert(tctx
, fnum
!= -1, talloc_asprintf(tctx
, "open of %s failed (%s)", fname
, smbcli_errstr(cli
->tree
)));
52 torture_comment(tctx
, "Unlinking a open file\n");
54 torture_assert(tctx
, !NT_STATUS_IS_OK(smbcli_unlink(cli
->tree
, fname
)),
55 "server allowed unlink on an open file");
57 correct
= check_error(__location__
, cli
, ERRDOS
, ERRbadshare
,
58 NT_STATUS_SHARING_VIOLATION
);
60 smbcli_close(cli
->tree
, fnum
);
61 smbcli_unlink(cli
->tree
, fname
);
63 torture_comment(tctx
, "Testing unlink after ntcreatex with DELETE access\n");
65 io
.ntcreatex
.level
= RAW_OPEN_NTCREATEX
;
66 io
.ntcreatex
.in
.root_fid
.fnum
= 0;
67 io
.ntcreatex
.in
.flags
= NTCREATEX_FLAGS_EXTENDED
;
68 io
.ntcreatex
.in
.create_options
= NTCREATEX_OPTIONS_NON_DIRECTORY_FILE
;
69 io
.ntcreatex
.in
.file_attr
= 0;
70 io
.ntcreatex
.in
.alloc_size
= 0;
71 io
.ntcreatex
.in
.open_disposition
= NTCREATEX_DISP_CREATE
;
72 io
.ntcreatex
.in
.impersonation
= NTCREATEX_IMPERSONATION_IMPERSONATION
;
73 io
.ntcreatex
.in
.security_flags
= 0;
74 io
.ntcreatex
.in
.fname
= fname
;
75 io
.ntcreatex
.in
.share_access
= NTCREATEX_SHARE_ACCESS_DELETE
;
76 io
.ntcreatex
.in
.access_mask
= SEC_RIGHTS_FILE_ALL
;
78 status
= smb_raw_open(cli
->tree
, cli
, &io
);
79 torture_assert_ntstatus_ok(tctx
, status
, talloc_asprintf(tctx
, "failed to open %s", fname
));
81 torture_assert(tctx
, !NT_STATUS_IS_OK(smbcli_unlink(cli
->tree
, fname
)),
82 "server allowed unlink on an open file");
84 correct
= check_error(__location__
, cli
, ERRDOS
, ERRbadshare
,
85 NT_STATUS_SHARING_VIOLATION
);