s4-dns: dlz_bind9: Fix ipv6 updates
[samba.git] / source3 / torture / denytest.c
index 6930b8b91d4f6e67be4c6e2ab488fd84a9ea5e97..5b0eeec2fa75d8f1acbab1783d32866f7f2a1eed 100644 (file)
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
+#include "system/filesys.h"
+#include "torture/proto.h"
+#include "libsmb/libsmb.h"
 
-extern BOOL torture_showall;
+extern bool torture_showall;
 
 enum deny_result {A_0=0, A_X=1, A_R=2, A_W=3, A_RW=5};
 
@@ -1404,13 +1406,15 @@ static void progress_bar(unsigned i, unsigned total)
 /*
   this produces a matrix of deny mode behaviour for 1 connection
  */
-BOOL torture_denytest1(int dummy)
+bool torture_denytest1(int dummy)
 {
        struct cli_state *cli1;
-       int fnum1, fnum2;
+       uint16_t fnum1, fnum2;
        int i;
-       BOOL correct = True;
+       bool correct = True;
+       NTSTATUS ret1, ret2, status;
        const char *fnames[2] = {"\\denytest1.dat", "\\denytest1.exe"};
+       size_t nread;
 
        if (!torture_open_connection(&cli1, 0)) {
                return False;
@@ -1419,9 +1423,10 @@ BOOL torture_denytest1(int dummy)
        printf("starting denytest1\n");
 
        for (i=0;i<2;i++) {
-               cli_unlink(cli1, fnames[i]);
-               fnum1 = cli_open(cli1, fnames[i], O_RDWR|O_CREAT, DENY_NONE);
-               cli_write(cli1, fnum1, 0, fnames[i], 0, strlen(fnames[i]));
+               cli_unlink(cli1, fnames[i], FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
+               cli_openx(cli1, fnames[i], O_RDWR|O_CREAT, DENY_NONE, &fnum1);
+               cli_writeall(cli1, fnum1, 0, (const uint8_t *)fnames[i], 0,
+                            strlen(fnames[i]), NULL);
                cli_close(cli1, fnum1);
        }
 
@@ -1433,24 +1438,29 @@ BOOL torture_denytest1(int dummy)
 
                progress_bar(i, ARRAY_SIZE(denytable1));
 
-               fnum1 = cli_open(cli1, fname, 
+               ret1 = cli_openx(cli1, fname, 
                                 denytable1[i].mode1,
-                                denytable1[i].deny1);
-               fnum2 = cli_open(cli1, fname, 
+                                denytable1[i].deny1, &fnum1);
+               ret2 = cli_openx(cli1, fname, 
                                 denytable1[i].mode2,
-                                denytable1[i].deny2);
+                                denytable1[i].deny2, &fnum2);
 
-               if (fnum1 == -1) {
+               if (!NT_STATUS_IS_OK(ret1)) {
                        res = A_X;
-               } else if (fnum2 == -1) {
+               } else if (!NT_STATUS_IS_OK(ret2)) {
                        res = A_0;
                } else {
                        char x = 1;
                        res = A_0;
-                       if (cli_read(cli1, fnum2, (char *)&x, 0, 1) == 1) {
+
+                       status = cli_read(cli1, fnum2, (char *)&x, 0, 1,
+                                         &nread);
+                       if (NT_STATUS_IS_OK(status) && nread == 1) {
                                res += A_R;
                        }
-                       if (cli_write(cli1, fnum2, 0, (char *)&x, 0, 1) == 1) {
+                       if (NT_STATUS_IS_OK(cli_writeall(cli1, fnum2, 0,
+                                                        (uint8_t *)&x, 0, 1,
+                                                        NULL))) {
                                res += A_W;
                        }
                }
@@ -1470,12 +1480,16 @@ BOOL torture_denytest1(int dummy)
                               resultstr(denytable1[i].result));
                }
 
-               cli_close(cli1, fnum1);
-               cli_close(cli1, fnum2);
+               if (NT_STATUS_IS_OK(ret1)) {
+                       cli_close(cli1, fnum1);
+               }
+               if (NT_STATUS_IS_OK(ret2)) {
+                       cli_close(cli1, fnum2);
+               }
        }
 
        for (i=0;i<2;i++) {
-               cli_unlink(cli1, fnames[i]);
+               cli_unlink(cli1, fnames[i], FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
        }
                
        if (!torture_close_connection(cli1)) {
@@ -1490,13 +1504,15 @@ BOOL torture_denytest1(int dummy)
 /*
   this produces a matrix of deny mode behaviour with 2 connections
  */
-BOOL torture_denytest2(int dummy)
+bool torture_denytest2(int dummy)
 {
        static struct cli_state *cli1, *cli2;
-       int fnum1, fnum2;
+       uint16_t fnum1, fnum2;
        int i;
-       BOOL correct = True;
+       bool correct = True;
+       NTSTATUS ret1, ret2, status;
        const char *fnames[2] = {"\\denytest2.dat", "\\denytest2.exe"};
+       size_t nread;
 
        if (!torture_open_connection(&cli1, 0) || !torture_open_connection(&cli2, 1)) {
                return False;
@@ -1505,9 +1521,10 @@ BOOL torture_denytest2(int dummy)
        printf("starting denytest2\n");
 
        for (i=0;i<2;i++) {
-               cli_unlink(cli1, fnames[i]);
-               fnum1 = cli_open(cli1, fnames[i], O_RDWR|O_CREAT, DENY_NONE);
-               cli_write(cli1, fnum1, 0, fnames[i], 0, strlen(fnames[i]));
+               cli_unlink(cli1, fnames[i], FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
+               cli_openx(cli1, fnames[i], O_RDWR|O_CREAT, DENY_NONE, &fnum1);
+               cli_writeall(cli1, fnum1, 0, (const uint8_t *)fnames[i], 0,
+                            strlen(fnames[i]), NULL);
                cli_close(cli1, fnum1);
        }
 
@@ -1517,24 +1534,29 @@ BOOL torture_denytest2(int dummy)
 
                progress_bar(i, ARRAY_SIZE(denytable2));
 
-               fnum1 = cli_open(cli1, fname, 
+               ret1 = cli_openx(cli1, fname, 
                                 denytable2[i].mode1,
-                                denytable2[i].deny1);
-               fnum2 = cli_open(cli2, fname, 
+                                denytable2[i].deny1, &fnum1);
+               ret2 = cli_openx(cli2, fname, 
                                 denytable2[i].mode2,
-                                denytable2[i].deny2);
+                                denytable2[i].deny2, &fnum2);
 
-               if (fnum1 == -1) {
+               if (!NT_STATUS_IS_OK(ret1)) {
                        res = A_X;
-               } else if (fnum2 == -1) {
+               } else if (!NT_STATUS_IS_OK(ret2)) {
                        res = A_0;
                } else {
                        char x = 1;
                        res = A_0;
-                       if (cli_read(cli2, fnum2, (char *)&x, 0, 1) == 1) {
-                               res += A_R;
-                       }
-                       if (cli_write(cli2, fnum2, 0, (char *)&x, 0, 1) == 1) {
+
+                        status = cli_read(cli2, fnum2, (char *)&x, 0, 1,
+                                          &nread);
+                        if (NT_STATUS_IS_OK(status) && nread == 1) {
+                                res += A_R;
+                        }
+                       if (NT_STATUS_IS_OK(cli_writeall(cli2, fnum2, 0,
+                                                        (uint8_t *)&x, 0, 1,
+                                                        NULL))) {
                                res += A_W;
                        }
                }
@@ -1554,12 +1576,16 @@ BOOL torture_denytest2(int dummy)
                               resultstr(denytable2[i].result));
                }
 
-               if (fnum1 != -1) cli_close(cli1, fnum1);
-               if (fnum2 != -1) cli_close(cli2, fnum2);
+               if (NT_STATUS_IS_OK(ret1)) {
+                       cli_close(cli1, fnum1);
+               }
+               if (NT_STATUS_IS_OK(ret2)) {
+                       cli_close(cli2, fnum2);
+               }
        }
                
        for (i=0;i<2;i++) {
-               cli_unlink(cli1, fnames[i]);
+               cli_unlink(cli1, fnames[i], FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
        }
 
        if (!torture_close_connection(cli1)) {