s3: Add two tests a CLEAR_IF_FIRST crash
[kai/samba.git] / source3 / torture / test_case_insensitive.c
1 /*
2    Unix SMB/CIFS implementation.
3    reproducer for bug 8042
4    Copyright (C) Volker Lendecke 2011
5
6    This program is free software; you can redistribute it and/or modify
7    it under the terms of the GNU General Public License as published by
8    the Free Software Foundation; either version 3 of the License, or
9    (at your option) any later version.
10
11    This program is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14    GNU General Public License for more details.
15
16    You should have received a copy of the GNU General Public License
17    along with this program.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #include "includes.h"
21 #include "torture/proto.h"
22 #include "system/filesys.h"
23 #include "libsmb/libsmb.h"
24
25 /*
26  * Regression test file creates on case insensitive file systems (e.g. OS/X)
27  * https://bugzilla.samba.org/show_bug.cgi?id=8042
28  */
29
30 bool run_case_insensitive_create(int dummy)
31 {
32         struct cli_state *cli;
33         uint16_t fnum;
34         NTSTATUS status;
35
36         printf("Starting case_insensitive_create\n");
37
38         if (!torture_open_connection(&cli, 0)) {
39                 return false;
40         }
41
42         status = cli_mkdir(cli, "x");
43         if (!NT_STATUS_IS_OK(status)) {
44                 printf("cli_mkdir failed: %s\n", nt_errstr(status));
45                 goto done;
46         }
47         status = cli_chkpath(cli, "X");
48         if (!NT_STATUS_IS_OK(status)) {
49                 printf("cli_chkpath failed: %s\n", nt_errstr(status));
50                 goto rmdir;
51         }
52         status = cli_openx(cli, "x\\y", O_RDWR|O_CREAT, 0, &fnum);
53         if (!NT_STATUS_IS_OK(status)) {
54                 printf("cli_openx failed: %s\n", nt_errstr(status));
55
56                 if (NT_STATUS_EQUAL(status, NT_STATUS_FILE_IS_A_DIRECTORY)) {
57                         printf("Bug 8042 reappeared!!\n");
58                 }
59                 goto unlink;
60         }
61         status = cli_close(cli, fnum);
62         if (!NT_STATUS_IS_OK(status)) {
63                 printf("cli_close failed: %s\n", nt_errstr(status));
64                 goto done;
65         }
66 unlink:
67         status = cli_unlink(cli, "x\\y", 0);
68         if (!NT_STATUS_IS_OK(status)) {
69                 printf("cli_unlink failed: %s\n", nt_errstr(status));
70                 goto done;
71         }
72 rmdir:
73         status = cli_rmdir(cli, "x");
74         if (!NT_STATUS_IS_OK(status)) {
75                 printf("cli_close failed: %s\n", nt_errstr(status));
76         }
77 done:
78         torture_close_connection(cli);
79         return NT_STATUS_IS_OK(status);
80 }