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"
26 #include "torture/basic/proto.h"
28 #define BASEDIR "\\unlinktest"
33 1) the server does not allow an unlink on a file that is open
35 bool torture_unlinktest(struct torture_context
*tctx
, struct smbcli_state
*cli
)
37 const char *fname
= BASEDIR
"\\unlink.tst";
43 torture_assert(tctx
, torture_setup_dir(cli
, BASEDIR
),
44 talloc_asprintf(tctx
, "Failed setting up %s", BASEDIR
));
46 cli
->session
->pid
= 1;
48 torture_comment(tctx
, "Opening a file\n");
50 fnum
= smbcli_open(cli
->tree
, fname
, O_RDWR
|O_CREAT
|O_EXCL
, DENY_NONE
);
51 torture_assert(tctx
, fnum
!= -1, talloc_asprintf(tctx
, "open of %s failed (%s)", fname
, smbcli_errstr(cli
->tree
)));
53 torture_comment(tctx
, "Unlinking a open file\n");
55 torture_assert(tctx
, !NT_STATUS_IS_OK(smbcli_unlink(cli
->tree
, fname
)),
56 "server allowed unlink on an open file");
58 correct
= check_error(__location__
, cli
, ERRDOS
, ERRbadshare
,
59 NT_STATUS_SHARING_VIOLATION
);
61 smbcli_close(cli
->tree
, fnum
);
62 smbcli_unlink(cli
->tree
, fname
);
64 torture_comment(tctx
, "Testing unlink after ntcreatex with DELETE access\n");
66 io
.ntcreatex
.level
= RAW_OPEN_NTCREATEX
;
67 io
.ntcreatex
.in
.root_fid
.fnum
= 0;
68 io
.ntcreatex
.in
.flags
= NTCREATEX_FLAGS_EXTENDED
;
69 io
.ntcreatex
.in
.create_options
= NTCREATEX_OPTIONS_NON_DIRECTORY_FILE
;
70 io
.ntcreatex
.in
.file_attr
= 0;
71 io
.ntcreatex
.in
.alloc_size
= 0;
72 io
.ntcreatex
.in
.open_disposition
= NTCREATEX_DISP_CREATE
;
73 io
.ntcreatex
.in
.impersonation
= NTCREATEX_IMPERSONATION_IMPERSONATION
;
74 io
.ntcreatex
.in
.security_flags
= 0;
75 io
.ntcreatex
.in
.fname
= fname
;
76 io
.ntcreatex
.in
.share_access
= NTCREATEX_SHARE_ACCESS_DELETE
;
77 io
.ntcreatex
.in
.access_mask
= SEC_RIGHTS_FILE_ALL
;
79 status
= smb_raw_open(cli
->tree
, cli
, &io
);
80 torture_assert_ntstatus_ok(tctx
, status
, talloc_asprintf(tctx
, "failed to open %s", fname
));
82 torture_assert(tctx
, !NT_STATUS_IS_OK(smbcli_unlink(cli
->tree
, fname
)),
83 "server allowed unlink on an open file");
85 correct
= check_error(__location__
, cli
, ERRDOS
, ERRbadshare
,
86 NT_STATUS_SHARING_VIOLATION
);