Fix some nonempty blank lines
[nivanova/samba-autobuild/.git] / source3 / torture / torture.c
index 1b9e394a681249c564b3ed175e0c6ebaeb74a577..b0cf33ecafe297151d6389a7f55d1cd0978fc416 100644 (file)
@@ -2,17 +2,17 @@
    Unix SMB/CIFS implementation.
    SMB torture tester
    Copyright (C) Andrew Tridgell 1997-1998
-   
+
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
-   
+
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    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, see <http://www.gnu.org/licenses/>.
 */
@@ -94,7 +94,7 @@ void *shm_setup(int size)
           See Stevens "advanced programming in unix env" for details
           */
        shmctl(shmid, IPC_RMID, 0);
-       
+
        return ret;
 }
 
@@ -226,7 +226,7 @@ terminate_path_at_separator(char * path)
                *p = '\0';
                return p + 1;
        }
-       
+
        /* No separator. */
        return NULL;
 }
@@ -273,6 +273,10 @@ static bool torture_open_connection_share(struct cli_state **c,
 
        if (use_kerberos)
                flags |= CLI_FULL_CONNECTION_USE_KERBEROS;
+       if (use_oplocks)
+               flags |= CLI_FULL_CONNECTION_OPLOCKS;
+       if (use_level_II_oplocks)
+               flags |= CLI_FULL_CONNECTION_LEVEL_II_OPLOCKS;
 
        status = cli_full_connection(c, myname,
                                     hostname, NULL, port_to_use, 
@@ -285,8 +289,6 @@ static bool torture_open_connection_share(struct cli_state **c,
                return False;
        }
 
-       if (use_oplocks) (*c)->use_oplocks = True;
-       if (use_level_II_oplocks) (*c)->use_level_II_oplocks = True;
        (*c)->timeout = 120000; /* set a really long timeout (2 minutes) */
 
        if (do_encrypt) {
@@ -514,7 +516,7 @@ static bool run_torture(int dummy)
        cli_sockopt(cli, sockops);
 
        ret = rw_torture(cli);
-       
+
        if (!torture_close_connection(cli)) {
                ret = False;
        }
@@ -747,7 +749,7 @@ static bool run_readwritemulti(int dummy)
        if (!torture_close_connection(cli)) {
                test = False;
        }
-       
+
        return test;
 }
 
@@ -759,17 +761,17 @@ static bool run_readwritelarge(int dummy)
        SMB_OFF_T fsize;
        char buf[126*1024];
        bool correct = True;
+
        if (!torture_open_connection(&cli1, 0)) {
                return False;
        }
        cli_sockopt(cli1, sockops);
        memset(buf,'\0',sizeof(buf));
-       
+
        cli1->max_xmit = 128*1024;
-       
+
        printf("starting readwritelarge\n");
+
        cli_unlink(cli1, lockfname);
 
        fnum1 = cli_open(cli1, lockfname, O_RDWR | O_CREAT | O_EXCL, DENY_NONE);
@@ -777,7 +779,7 @@ static bool run_readwritelarge(int dummy)
                printf("open read/write of %s failed (%s)\n", lockfname, cli_errstr(cli1));
                return False;
        }
-   
+
        cli_write(cli1, fnum1, 0, buf, 0, sizeof(buf));
 
        if (!cli_qfileinfo(cli1, fnum1, NULL, &fsize, NULL, NULL, NULL, NULL, NULL)) {
@@ -809,11 +811,11 @@ static bool run_readwritelarge(int dummy)
                printf("open read/write of %s failed (%s)\n", lockfname, cli_errstr(cli1));
                return False;
        }
-       
+
        cli1->max_xmit = 4*1024;
-       
+
        cli_smbwrite(cli1, fnum1, buf, 0, sizeof(buf));
-       
+
        if (!cli_qfileinfo(cli1, fnum1, NULL, &fsize, NULL, NULL, NULL, NULL, NULL)) {
                printf("qfileinfo failed (%s)\n", cli_errstr(cli1));
                correct = False;
@@ -846,7 +848,7 @@ static bool run_readwritelarge(int dummy)
                printf("close failed (%s)\n", cli_errstr(cli1));
                correct = False;
        }
-       
+
        if (!torture_close_connection(cli1)) {
                correct = False;
        }
@@ -951,7 +953,7 @@ static bool run_netbench(int client)
        if (!torture_close_connection(cli)) {
                correct = False;
        }
-       
+
        return correct;
 }
 
@@ -1322,7 +1324,7 @@ static bool run_tcon_devtype_test(int dummy)
 
        if (!tcon_devtest(cli1, "IPC$", "IPC", "IPC", NT_STATUS_OK))
                ret = False;
-                       
+
        if (!tcon_devtest(cli1, "IPC$", "FOOBA", NULL, NT_STATUS_BAD_DEVICE_TYPE))
                ret = False;
 
@@ -1337,7 +1339,7 @@ static bool run_tcon_devtype_test(int dummy)
 
        if (!tcon_devtest(cli1, share, "IPC", NULL, NT_STATUS_BAD_DEVICE_TYPE))
                ret = False;
-                       
+
        if (!tcon_devtest(cli1, share, "FOOBA", NULL, NT_STATUS_BAD_DEVICE_TYPE))
                ret = False;
 
@@ -1605,7 +1607,7 @@ static bool run_locktest3(int dummy)
        if (!torture_close_connection(cli1)) {
                correct = False;
        }
-       
+
        if (!torture_close_connection(cli2)) {
                correct = False;
        }
@@ -1657,7 +1659,7 @@ static bool run_locktest4(int dummy)
              cli_lock(cli1, fnum1, 2, 4, 0, WRITE_LOCK);
        EXPECTED(ret, False);
        printf("the same process %s set overlapping write locks\n", ret?"can":"cannot");
-           
+
        ret = cli_lock(cli1, fnum1, 10, 4, 0, READ_LOCK) &&
              cli_lock(cli1, fnum1, 12, 4, 0, READ_LOCK);
        EXPECTED(ret, True);
@@ -1667,17 +1669,17 @@ static bool run_locktest4(int dummy)
              cli_lock(cli2, fnum2, 22, 4, 0, WRITE_LOCK);
        EXPECTED(ret, False);
        printf("a different connection %s set overlapping write locks\n", ret?"can":"cannot");
-           
+
        ret = cli_lock(cli1, fnum1, 30, 4, 0, READ_LOCK) &&
              cli_lock(cli2, fnum2, 32, 4, 0, READ_LOCK);
        EXPECTED(ret, True);
        printf("a different connection %s set overlapping read locks\n", ret?"can":"cannot");
-       
+
        ret = (cli_setpid(cli1, 1), cli_lock(cli1, fnum1, 40, 4, 0, WRITE_LOCK)) &&
              (cli_setpid(cli1, 2), cli_lock(cli1, fnum1, 42, 4, 0, WRITE_LOCK));
        EXPECTED(ret, False);
        printf("a different pid %s set overlapping write locks\n", ret?"can":"cannot");
-           
+
        ret = (cli_setpid(cli1, 1), cli_lock(cli1, fnum1, 50, 4, 0, READ_LOCK)) &&
              (cli_setpid(cli1, 2), cli_lock(cli1, fnum1, 52, 4, 0, READ_LOCK));
        EXPECTED(ret, True);
@@ -1910,7 +1912,7 @@ static bool run_locktest5(int dummy)
        }
 
        printf("finished locktest5\n");
-       
+
        return correct;
 }
 
@@ -2272,7 +2274,7 @@ static bool run_unlinktest(int dummy)
        }
 
        printf("unlink test finished\n");
-       
+
        return correct;
 }
 
@@ -2392,7 +2394,7 @@ static bool run_randomipc(int dummy)
                param_len = (sys_random() % 64);
 
                rand_buf(param, param_len);
-  
+
                SSVAL(param,0,api); 
 
                cli_api(cli, 
@@ -2623,7 +2625,7 @@ static bool run_trans2test(int dummy)
 
        /* check if the server updates the directory modification time
            when creating a new file */
-       if (!cli_mkdir(cli, dname)) {
+       if (!NT_STATUS_IS_OK(cli_mkdir(cli, dname))) {
                printf("ERROR: mkdir failed (%s)\n", cli_errstr(cli));
                correct = False;
        }
@@ -2711,7 +2713,7 @@ static bool run_w2ktest(int dummy)
        }
 
        printf("w2k test finished\n");
-       
+
        return correct;
 }
 
@@ -2973,24 +2975,24 @@ static bool run_deletetest(int dummy)
        int fnum1 = -1;
        int fnum2 = -1;
        bool correct = True;
-       
+
        printf("starting delete test\n");
-       
+
        if (!torture_open_connection(&cli1, 0)) {
                return False;
        }
-       
+
        cli_sockopt(cli1, sockops);
 
        /* Test 1 - this should delete the file on close. */
-       
+
        cli_setatr(cli1, fname, 0, 0);
        cli_unlink(cli1, fname);
-       
+
        fnum1 = cli_nt_create_full(cli1, fname, 0, GENERIC_ALL_ACCESS|DELETE_ACCESS, FILE_ATTRIBUTE_NORMAL,
                                   0, FILE_OVERWRITE_IF, 
                                   FILE_DELETE_ON_CLOSE, 0);
-       
+
        if (fnum1 == -1) {
                printf("[1] open of %s failed (%s)\n", fname, cli_errstr(cli1));
                correct = False;
@@ -3020,36 +3022,36 @@ static bool run_deletetest(int dummy)
                correct = False;
                goto fail;
        }
-       
+
        printf("first delete on close test succeeded.\n");
-       
+
        /* Test 2 - this should delete the file on close. */
-       
+
        cli_setatr(cli1, fname, 0, 0);
        cli_unlink(cli1, fname);
-       
+
        fnum1 = cli_nt_create_full(cli1, fname, 0, GENERIC_ALL_ACCESS,
                                   FILE_ATTRIBUTE_NORMAL, FILE_SHARE_NONE, 
                                   FILE_OVERWRITE_IF, 0, 0);
-       
+
        if (fnum1 == -1) {
                printf("[2] open of %s failed (%s)\n", fname, cli_errstr(cli1));
                correct = False;
                goto fail;
        }
-       
+
        if (!cli_nt_delete_on_close(cli1, fnum1, True)) {
                printf("[2] setting delete_on_close failed (%s)\n", cli_errstr(cli1));
                correct = False;
                goto fail;
        }
-       
+
        if (!cli_close(cli1, fnum1)) {
                printf("[2] close failed (%s)\n", cli_errstr(cli1));
                correct = False;
                goto fail;
        }
-       
+
        fnum1 = cli_open(cli1, fname, O_RDONLY, DENY_NONE);
        if (fnum1 != -1) {
                printf("[2] open of %s succeeded should have been deleted on close !\n", fname);
@@ -3061,7 +3063,7 @@ static bool run_deletetest(int dummy)
                cli_unlink(cli1, fname);
        } else
                printf("second delete on close test succeeded.\n");
-       
+
        /* Test 3 - ... */
        cli_setatr(cli1, fname, 0, 0);
        cli_unlink(cli1, fname);
@@ -3103,19 +3105,19 @@ static bool run_deletetest(int dummy)
                correct = False;
                goto fail;
        }
-       
+
        if (!cli_close(cli1, fnum1)) {
                printf("[3] close 1 failed (%s)\n", cli_errstr(cli1));
                correct = False;
                goto fail;
        }
-       
+
        if (!cli_close(cli1, fnum2)) {
                printf("[3] close 2 failed (%s)\n", cli_errstr(cli1));
                correct = False;
                goto fail;
        }
-       
+
        /* This should fail - file should no longer be there. */
 
        fnum1 = cli_open(cli1, fname, O_RDONLY, DENY_NONE);
@@ -3136,7 +3138,7 @@ static bool run_deletetest(int dummy)
 
        fnum1 = cli_nt_create_full(cli1, fname, 0, FILE_READ_DATA|FILE_WRITE_DATA|DELETE_ACCESS,
                        FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ|FILE_SHARE_WRITE, FILE_OVERWRITE_IF, 0, 0);
-                                                               
+
        if (fnum1 == -1) {
                printf("[4] open of %s failed (%s)\n", fname, cli_errstr(cli1));
                correct = False;
@@ -3151,19 +3153,19 @@ static bool run_deletetest(int dummy)
                correct = False;
                goto fail;
        }
-       
+
        if (!cli_close(cli1, fnum2)) {
                printf("[4] close - 1 failed (%s)\n", cli_errstr(cli1));
                correct = False;
                goto fail;
        }
-       
+
        if (!cli_nt_delete_on_close(cli1, fnum1, True)) {
                printf("[4] setting delete_on_close failed (%s)\n", cli_errstr(cli1));
                correct = False;
                goto fail;
        }
-       
+
        /* This should fail - no more opens once delete on close set. */
        fnum2 = cli_nt_create_full(cli1, fname, 0, GENERIC_READ_ACCESS,
                                   FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
@@ -3174,17 +3176,17 @@ static bool run_deletetest(int dummy)
                goto fail;
        } else
                printf("fourth delete on close test succeeded.\n");
-       
+
        if (!cli_close(cli1, fnum1)) {
                printf("[4] close - 2 failed (%s)\n", cli_errstr(cli1));
                correct = False;
                goto fail;
        }
-       
+
        /* Test 5 ... */
        cli_setatr(cli1, fname, 0, 0);
        cli_unlink(cli1, fname);
-       
+
        fnum1 = cli_open(cli1, fname, O_RDWR|O_CREAT, DENY_NONE);
        if (fnum1 == -1) {
                printf("[5] open of %s failed (%s)\n", fname, cli_errstr(cli1));
@@ -3205,25 +3207,25 @@ static bool run_deletetest(int dummy)
                correct = False;
                goto fail;
        }
-       
+
        printf("fifth delete on close test succeeded.\n");
-       
+
        /* Test 6 ... */
        cli_setatr(cli1, fname, 0, 0);
        cli_unlink(cli1, fname);
-       
+
        fnum1 = cli_nt_create_full(cli1, fname, 0, FILE_READ_DATA|FILE_WRITE_DATA,
                                   FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
                                   FILE_OVERWRITE_IF, 0, 0);
-       
+
        if (fnum1 == -1) {
                printf("[6] open of %s failed (%s)\n", fname, cli_errstr(cli1));
                correct = False;
                goto fail;
        }
-       
+
        /* This should fail - only allowed on NT opens with DELETE access. */
-       
+
        if (cli_nt_delete_on_close(cli1, fnum1, True)) {
                printf("[6] setting delete_on_close on file with no delete access succeeded - should fail !\n");
                correct = False;
@@ -3237,14 +3239,14 @@ static bool run_deletetest(int dummy)
        }
 
        printf("sixth delete on close test succeeded.\n");
-       
+
        /* Test 7 ... */
        cli_setatr(cli1, fname, 0, 0);
        cli_unlink(cli1, fname);
-       
+
        fnum1 = cli_nt_create_full(cli1, fname, 0, FILE_READ_DATA|FILE_WRITE_DATA|DELETE_ACCESS,
                                   FILE_ATTRIBUTE_NORMAL, 0, FILE_OVERWRITE_IF, 0, 0);
-                                                               
+
        if (fnum1 == -1) {
                printf("[7] open of %s failed (%s)\n", fname, cli_errstr(cli1));
                correct = False;
@@ -3256,7 +3258,7 @@ static bool run_deletetest(int dummy)
                correct = False;
                goto fail;
        }
-       
+
        if (!cli_nt_delete_on_close(cli1, fnum1, False)) {
                printf("[7] unsetting delete_on_close on file failed !\n");
                correct = False;
@@ -3268,9 +3270,9 @@ static bool run_deletetest(int dummy)
                correct = False;
                goto fail;
        }
-       
+
        /* This next open should succeed - we reset the flag. */
-       
+
        fnum1 = cli_open(cli1, fname, O_RDONLY, DENY_NONE);
        if (fnum1 == -1) {
                printf("[5] open of %s failed (%s)\n", fname, cli_errstr(cli1));
@@ -3285,11 +3287,11 @@ static bool run_deletetest(int dummy)
        }
 
        printf("seventh delete on close test succeeded.\n");
-       
+
        /* Test 7 ... */
        cli_setatr(cli1, fname, 0, 0);
        cli_unlink(cli1, fname);
-       
+
        if (!torture_open_connection(&cli2, 1)) {
                printf("[8] failed to open second connection.\n");
                correct = False;
@@ -3297,11 +3299,11 @@ static bool run_deletetest(int dummy)
        }
 
        cli_sockopt(cli1, sockops);
-       
+
        fnum1 = cli_nt_create_full(cli1, fname, 0, FILE_READ_DATA|FILE_WRITE_DATA|DELETE_ACCESS,
                                   FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
                                   FILE_OVERWRITE_IF, 0, 0);
-       
+
        if (fnum1 == -1) {
                printf("[8] open 1 of %s failed (%s)\n", fname, cli_errstr(cli1));
                correct = False;
@@ -3311,7 +3313,7 @@ static bool run_deletetest(int dummy)
        fnum2 = cli_nt_create_full(cli2, fname, 0, FILE_READ_DATA|FILE_WRITE_DATA|DELETE_ACCESS,
                                   FILE_ATTRIBUTE_NORMAL, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
                                   FILE_OPEN, 0, 0);
-       
+
        if (fnum2 == -1) {
                printf("[8] open 2 of %s failed (%s)\n", fname, cli_errstr(cli2));
                correct = False;
@@ -3323,7 +3325,7 @@ static bool run_deletetest(int dummy)
                correct = False;
                goto fail;
        }
-       
+
        if (!cli_close(cli1, fnum1)) {
                printf("[8] close - 1 failed (%s)\n", cli_errstr(cli1));
                correct = False;
@@ -3348,7 +3350,7 @@ static bool run_deletetest(int dummy)
        /* This should fail - we need to set DELETE_ACCESS. */
        fnum1 = cli_nt_create_full(cli1, fname, 0,FILE_READ_DATA|FILE_WRITE_DATA,
                                   FILE_ATTRIBUTE_NORMAL, FILE_SHARE_NONE, FILE_OVERWRITE_IF, FILE_DELETE_ON_CLOSE, 0);
-       
+
        if (fnum1 != -1) {
                printf("[9] open of %s succeeded should have failed!\n", fname);
                correct = False;
@@ -3406,7 +3408,7 @@ static bool run_deletetest(int dummy)
        fnum1 = cli_nt_create_full(cli1, fname, 0, FILE_READ_ATTRIBUTES|DELETE_ACCESS,
                                   0, FILE_SHARE_READ|FILE_SHARE_WRITE|FILE_SHARE_DELETE,
                                   FILE_OVERWRITE_IF, 0, 0);
-       
+
        if (fnum1 != -1) {
                printf("[11] open of %s succeeded should have been denied with ACCESS_DENIED!\n", fname);
                cli_close(cli1, fnum1);
@@ -3422,14 +3424,14 @@ static bool run_deletetest(int dummy)
                        printf("eleventh delete on close test succeeded.\n");
                }
        }
-       
+
        printf("finished delete test\n");
 
   fail:
        /* FIXME: This will crash if we aborted before cli2 got
         * intialized, because these functions don't handle
         * uninitialized connections. */
-               
+
        if (fnum1 != -1) cli_close(cli1, fnum1);
        if (fnum2 != -1) cli_close(cli1, fnum2);
        cli_setatr(cli1, fname, 0, 0);
@@ -3452,15 +3454,15 @@ static bool run_properties(int dummy)
 {
        static struct cli_state *cli;
        bool correct = True;
-       
+
        printf("starting properties test\n");
-       
+
        ZERO_STRUCT(cli);
 
        if (!torture_open_connection(&cli, 0)) {
                return False;
        }
-       
+
        cli_sockopt(cli, sockops);
 
        d_printf("Capabilities 0x%08x\n", cli->capabilities);
@@ -3504,11 +3506,11 @@ static bool run_xcopy(int dummy)
        int fnum1, fnum2;
 
        printf("starting xcopy test\n");
-       
+
        if (!torture_open_connection(&cli1, 0)) {
                return False;
        }
-       
+
        fnum1 = cli_nt_create_full(cli1, fname, 0,
                                   FIRST_DESIRED_ACCESS, FILE_ATTRIBUTE_ARCHIVE,
                                   FILE_SHARE_NONE, FILE_OVERWRITE_IF, 
@@ -3527,11 +3529,11 @@ static bool run_xcopy(int dummy)
                printf("second open failed - %s\n", cli_errstr(cli1));
                return False;
        }
-       
+
        if (!torture_close_connection(cli1)) {
                correct = False;
        }
-       
+
        return correct;
 }
 
@@ -3547,11 +3549,11 @@ static bool run_rename(int dummy)
        int fnum1;
 
        printf("starting rename test\n");
-       
+
        if (!torture_open_connection(&cli1, 0)) {
                return False;
        }
-       
+
        cli_unlink(cli1, fname);
        cli_unlink(cli1, fname1);
        fnum1 = cli_nt_create_full(cli1, fname, 0, GENERIC_READ_ACCESS, FILE_ATTRIBUTE_NORMAL,
@@ -3627,7 +3629,7 @@ static bool run_rename(int dummy)
                printf("[8] setting delete_on_close on file failed !\n");
                return False;
        }
-       
+
        if (!cli_close(cli1, fnum2)) {
                printf("close - 4 failed (%s)\n", cli_errstr(cli1));
                return False;
@@ -3719,11 +3721,11 @@ static bool run_rename(int dummy)
 
        cli_unlink(cli1, fname);
        cli_unlink(cli1, fname1);
-        
+
        if (!torture_close_connection(cli1)) {
                correct = False;
        }
-       
+
        return correct;
 }
 
@@ -3772,16 +3774,16 @@ static bool run_opentest(int dummy)
        char *tmp_path;
 
        printf("starting open test\n");
-       
+
        if (!torture_open_connection(&cli1, 0)) {
                return False;
        }
-       
+
        cli_setatr(cli1, fname, 0, 0);
        cli_unlink(cli1, fname);
-       
+
        cli_sockopt(cli1, sockops);
-       
+
        fnum1 = cli_open(cli1, fname, O_RDWR|O_CREAT|O_EXCL, DENY_NONE);
        if (fnum1 == -1) {
                printf("open of %s failed (%s)\n", fname, cli_errstr(cli1));
@@ -3792,67 +3794,67 @@ static bool run_opentest(int dummy)
                printf("close2 failed (%s)\n", cli_errstr(cli1));
                return False;
        }
-       
+
        if (!cli_setatr(cli1, fname, aRONLY, 0)) {
                printf("cli_setatr failed (%s)\n", cli_errstr(cli1));
                return False;
        }
-       
+
        fnum1 = cli_open(cli1, fname, O_RDONLY, DENY_WRITE);
        if (fnum1 == -1) {
                printf("open of %s failed (%s)\n", fname, cli_errstr(cli1));
                return False;
        }
-       
+
        /* This will fail - but the error should be ERRnoaccess, not ERRbadshare. */
        fnum2 = cli_open(cli1, fname, O_RDWR, DENY_ALL);
-       
+
         if (check_error(__LINE__, cli1, ERRDOS, ERRnoaccess, 
                        NT_STATUS_ACCESS_DENIED)) {
                printf("correct error code ERRDOS/ERRnoaccess returned\n");
        }
-       
+
        printf("finished open test 1\n");
-       
+
        cli_close(cli1, fnum1);
-       
+
        /* Now try not readonly and ensure ERRbadshare is returned. */
-       
+
        cli_setatr(cli1, fname, 0, 0);
-       
+
        fnum1 = cli_open(cli1, fname, O_RDONLY, DENY_WRITE);
        if (fnum1 == -1) {
                printf("open of %s failed (%s)\n", fname, cli_errstr(cli1));
                return False;
        }
-       
+
        /* This will fail - but the error should be ERRshare. */
        fnum2 = cli_open(cli1, fname, O_RDWR, DENY_ALL);
-       
+
        if (check_error(__LINE__, cli1, ERRDOS, ERRbadshare, 
                        NT_STATUS_SHARING_VIOLATION)) {
                printf("correct error code ERRDOS/ERRbadshare returned\n");
        }
-       
+
        if (!cli_close(cli1, fnum1)) {
                printf("close2 failed (%s)\n", cli_errstr(cli1));
                return False;
        }
-       
+
        cli_unlink(cli1, fname);
-       
+
        printf("finished open test 2\n");
-       
+
        /* Test truncate open disposition on file opened for read. */
-       
+
        fnum1 = cli_open(cli1, fname, O_RDWR|O_CREAT|O_EXCL, DENY_NONE);
        if (fnum1 == -1) {
                printf("(3) open (1) of %s failed (%s)\n", fname, cli_errstr(cli1));
                return False;
        }
-       
+
        /* write 20 bytes. */
-       
+
        memset(buf, '\0', 20);
 
        if (cli_write(cli1, fnum1, 0, buf, 0, 20) != 20) {
@@ -3864,26 +3866,26 @@ static bool run_opentest(int dummy)
                printf("(3) close1 failed (%s)\n", cli_errstr(cli1));
                return False;
        }
-       
+
        /* Ensure size == 20. */
        if (!cli_getatr(cli1, fname, NULL, &fsize, NULL)) {
                printf("(3) getatr failed (%s)\n", cli_errstr(cli1));
                return False;
        }
-       
+
        if (fsize != 20) {
                printf("(3) file size != 20\n");
                return False;
        }
 
        /* Now test if we can truncate a file opened for readonly. */
-       
+
        fnum1 = cli_open(cli1, fname, O_RDONLY|O_TRUNC, DENY_NONE);
        if (fnum1 == -1) {
                printf("(3) open (2) of %s failed (%s)\n", fname, cli_errstr(cli1));
                return False;
        }
-       
+
        if (!cli_close(cli1, fnum1)) {
                printf("close2 failed (%s)\n", cli_errstr(cli1));
                return False;
@@ -3900,7 +3902,7 @@ static bool run_opentest(int dummy)
                return False;
        }
        printf("finished open test 3\n");
-       
+
        cli_unlink(cli1, fname);
 
 
@@ -3917,20 +3919,20 @@ static bool run_opentest(int dummy)
        if (!cli_unlink(cli1, tmp_path)) {
                printf("unlink of temp failed (%s)\n", cli_errstr(cli1));
        }
-       
+
        /* Test the non-io opens... */
 
        if (!torture_open_connection(&cli2, 1)) {
                return False;
        }
-       
+
        cli_setatr(cli2, fname, 0, 0);
        cli_unlink(cli2, fname);
-       
+
        cli_sockopt(cli2, sockops);
 
        printf("TEST #1 testing 2 non-io opens (no delete)\n");
-       
+
        fnum1 = cli_nt_create_full(cli1, fname, 0, FILE_READ_ATTRIBUTES, FILE_ATTRIBUTE_NORMAL,
                                   FILE_SHARE_NONE, FILE_OVERWRITE_IF, 0, 0);
 
@@ -3961,7 +3963,7 @@ static bool run_opentest(int dummy)
        cli_unlink(cli1, fname);
 
        printf("TEST #2 testing 2 non-io opens (first with delete)\n");
-       
+
        fnum1 = cli_nt_create_full(cli1, fname, 0, DELETE_ACCESS|FILE_READ_ATTRIBUTES, FILE_ATTRIBUTE_NORMAL,
                                   FILE_SHARE_NONE, FILE_OVERWRITE_IF, 0, 0);
 
@@ -3992,7 +3994,7 @@ static bool run_opentest(int dummy)
        cli_unlink(cli1, fname);
 
        printf("TEST #3 testing 2 non-io opens (second with delete)\n");
-       
+
        fnum1 = cli_nt_create_full(cli1, fname, 0, FILE_READ_ATTRIBUTES, FILE_ATTRIBUTE_NORMAL,
                                   FILE_SHARE_NONE, FILE_OVERWRITE_IF, 0, 0);
 
@@ -4023,7 +4025,7 @@ static bool run_opentest(int dummy)
        cli_unlink(cli1, fname);
 
        printf("TEST #4 testing 2 non-io opens (both with delete)\n");
-       
+
        fnum1 = cli_nt_create_full(cli1, fname, 0, DELETE_ACCESS|FILE_READ_ATTRIBUTES, FILE_ATTRIBUTE_NORMAL,
                                   FILE_SHARE_NONE, FILE_OVERWRITE_IF, 0, 0);
 
@@ -4052,7 +4054,7 @@ static bool run_opentest(int dummy)
        cli_unlink(cli1, fname);
 
        printf("TEST #5 testing 2 non-io opens (both with delete - both with file share delete)\n");
-       
+
        fnum1 = cli_nt_create_full(cli1, fname, 0, DELETE_ACCESS|FILE_READ_ATTRIBUTES, FILE_ATTRIBUTE_NORMAL,
                                   FILE_SHARE_DELETE, FILE_OVERWRITE_IF, 0, 0);
 
@@ -4082,7 +4084,7 @@ static bool run_opentest(int dummy)
        printf("non-io open test #5 passed.\n");
 
        printf("TEST #6 testing 1 non-io open, one io open\n");
-       
+
        cli_unlink(cli1, fname);
 
        fnum1 = cli_nt_create_full(cli1, fname, 0, FILE_READ_DATA, FILE_ATTRIBUTE_NORMAL,
@@ -4150,7 +4152,7 @@ static bool run_opentest(int dummy)
        if (!torture_close_connection(cli2)) {
                correct = False;
        }
-       
+
        return correct;
 }
 
@@ -4333,11 +4335,11 @@ static bool run_openattrtest(int dummy)
        unsigned int i, j, k, l;
 
        printf("starting open attr test\n");
-       
+
        if (!torture_open_connection(&cli1, 0)) {
                return False;
        }
-       
+
        cli_sockopt(cli1, sockops);
 
        for (k = 0, i = 0; i < sizeof(open_attrs_table)/sizeof(uint32); i++) {
@@ -4430,7 +4432,7 @@ static bool run_openattrtest(int dummy)
 
 static void list_fn(const char *mnt, file_info *finfo, const char *name, void *state)
 {
-       
+
 }
 
 /*
@@ -4498,7 +4500,7 @@ static void del_fn(const char *mnt, file_info *finfo, const char *mask, void *st
                return;
 
        if (finfo->mode & aDIR) {
-               if (!cli_rmdir(pcli, fname))
+               if (!NT_STATUS_IS_OK(cli_rmdir(pcli, fname)))
                        printf("del_fn: failed to rmdir %s\n,", fname );
        } else {
                if (!cli_unlink(pcli, fname))
@@ -4582,12 +4584,12 @@ bool torture_chkpath_test(int dummy)
        cli_unlink(cli, "\\chkpath.dir\\*");
        cli_rmdir(cli, "\\chkpath.dir");
 
-       if (!cli_mkdir(cli, "\\chkpath.dir")) {
+       if (!NT_STATUS_IS_OK(cli_mkdir(cli, "\\chkpath.dir"))) {
                printf("mkdir1 failed : %s\n", cli_errstr(cli));
                return False;
        }
 
-       if (!cli_mkdir(cli, "\\chkpath.dir\\dir2")) {
+       if (!NT_STATUS_IS_OK(cli_mkdir(cli, "\\chkpath.dir\\dir2"))) {
                printf("mkdir2 failed : %s\n", cli_errstr(cli));
                return False;
        }
@@ -4655,12 +4657,12 @@ static bool run_eatest(int dummy)
        TALLOC_CTX *mem_ctx = talloc_init("eatest");
 
        printf("starting eatest\n");
-       
+
        if (!torture_open_connection(&cli, 0)) {
                talloc_destroy(mem_ctx);
                return False;
        }
-       
+
        cli_unlink(cli, fname);
        fnum = cli_nt_create_full(cli, fname, 0,
                                   FIRST_DESIRED_ACCESS, FILE_ATTRIBUTE_ARCHIVE,
@@ -4684,7 +4686,7 @@ static bool run_eatest(int dummy)
                        return False;
                }
        }
-       
+
        cli_close(cli, fnum);
        for (i = 0; i < 10; i++) {
                fstring ea_name, ea_val;
@@ -4697,7 +4699,7 @@ static bool run_eatest(int dummy)
                        return False;
                }
        }
-       
+
        if (!cli_get_ea_list_path(cli, fname, mem_ctx, &num_eas, &ea_list)) {
                printf("ea_get list failed - %s\n", cli_errstr(cli));
                correct = False;
@@ -4760,7 +4762,7 @@ static bool run_eatest(int dummy)
        if (!torture_close_connection(cli)) {
                correct = False;
        }
-       
+
        return correct;
 }
 
@@ -4799,7 +4801,7 @@ static bool run_dirtest1(int dummy)
        for (i=0;i<1000;i++) {
                fstring fname;
                slprintf(fname, sizeof(fname), "\\LISTDIR\\d%d", i);
-               if (!cli_mkdir(cli, fname)) {
+               if (!NT_STATUS_IS_OK(cli_mkdir(cli, fname))) {
                        fprintf(stderr,"Failed to open %s\n", fname);
                        return False;
                }
@@ -4846,7 +4848,7 @@ static bool run_dirtest1(int dummy)
 }
 
 static bool run_error_map_extract(int dummy) {
-       
+
        static struct cli_state *c_dos;
        static struct cli_state *c_nt;
        NTSTATUS status;
@@ -4915,9 +4917,9 @@ static bool run_error_map_extract(int dummy) {
                                                      workgroup))) {
                        printf("/** Session setup succeeded.  This shouldn't happen...*/\n");
                }
-               
+
                flgs2 = SVAL(c_nt->inbuf,smb_flg2);
-               
+
                /* Case #1: 32-bit NT errors */
                if (flgs2 & FLAGS2_32_BIT_ERROR_CODES) {
                        nt_status = NT_STATUS(IVAL(c_nt->inbuf,smb_rcls));
@@ -4934,7 +4936,7 @@ static bool run_error_map_extract(int dummy) {
                        printf("/** Session setup succeeded.  This shouldn't happen...*/\n");
                }
                flgs2 = SVAL(c_dos->inbuf,smb_flg2), errnum;
-               
+
                /* Case #1: 32-bit NT errors */
                if (flgs2 & FLAGS2_32_BIT_ERROR_CODES) {
                        printf("/** NT error on DOS connection! (%s) */\n", 
@@ -4949,7 +4951,7 @@ static bool run_error_map_extract(int dummy) {
                               get_nt_error_c_code(NT_STATUS(error)), 
                               get_nt_error_c_code(nt_status));
                }
-               
+
                printf("\t{%s,\t%s,\t%s},\n", 
                       smb_dos_err_class(errclass), 
                       smb_dos_err_name(errclass, errnum), 
@@ -5023,11 +5025,10 @@ static bool subst_test(const char *str, const char *user, const char *domain,
        return result;
 }
 
-static void chain1_open_completion(struct async_req *req)
+static void chain1_open_completion(struct tevent_req *req)
 {
        int fnum;
        NTSTATUS status;
-
        status = cli_open_recv(req, &fnum);
        TALLOC_FREE(req);
 
@@ -5036,48 +5037,25 @@ static void chain1_open_completion(struct async_req *req)
                 NT_STATUS_IS_OK(status) ? fnum : -1);
 }
 
-static void chain1_read_completion(struct async_req *req)
-{
-       NTSTATUS status;
-       ssize_t received;
-       uint8_t *rcvbuf;
-
-       status = cli_read_andx_recv(req, &received, &rcvbuf);
-       if (!NT_STATUS_IS_OK(status)) {
-               TALLOC_FREE(req);
-               d_printf("cli_read_andx_recv returned %s\n",
-                        nt_errstr(status));
-               return;
-       }
-
-       d_printf("got %d bytes: %.*s\n", (int)received, (int)received,
-                (char *)rcvbuf);
-       TALLOC_FREE(req);
-}
-
-static void chain1_write_completion(struct async_req *req)
+static void chain1_write_completion(struct tevent_req *req)
 {
-       NTSTATUS status;
        size_t written;
-
+       NTSTATUS status;
        status = cli_write_andx_recv(req, &written);
-       if (!NT_STATUS_IS_OK(status)) {
-               TALLOC_FREE(req);
-               d_printf("cli_write_andx_recv returned %s\n",
-                        nt_errstr(status));
-               return;
-       }
-
-       d_printf("wrote %d bytes\n", (int)written);
        TALLOC_FREE(req);
+
+       d_printf("cli_write_andx_recv returned %s: %d\n",
+                nt_errstr(status),
+                NT_STATUS_IS_OK(status) ? (int)written : -1);
 }
 
-static void chain1_close_completion(struct async_req *req)
+static void chain1_close_completion(struct tevent_req *req)
 {
        NTSTATUS status;
+       bool *done = (bool *)tevent_req_callback_data_void(req);
 
        status = cli_close_recv(req);
-       *((bool *)(req->async.priv)) = true;
+       *done = true;
 
        TALLOC_FREE(req);
 
@@ -5088,9 +5066,9 @@ static bool run_chain1(int dummy)
 {
        struct cli_state *cli1;
        struct event_context *evt = event_context_init(NULL);
-       struct async_req *reqs[4];
+       struct tevent_req *reqs[3], *smbreqs[3];
        bool done = false;
-       const char *text = "hallo";
+       const char *str = "foobar";
 
        printf("starting chain1 test\n");
        if (!torture_open_connection(&cli1, 0)) {
@@ -5099,19 +5077,25 @@ static bool run_chain1(int dummy)
 
        cli_sockopt(cli1, sockops);
 
-       cli_chain_cork(cli1, evt, 0);
-       reqs[0] = cli_open_send(talloc_tos(), evt, cli1, "\\test",
-                               O_CREAT|O_RDWR, 0);
-       reqs[0]->async.fn = chain1_open_completion;
-       reqs[1] = cli_write_andx_send(talloc_tos(), evt, cli1, 0, 0,
-                                     (uint8_t *)text, 0, strlen(text));
-       reqs[1]->async.fn = chain1_write_completion;
-       reqs[2] = cli_read_andx_send(talloc_tos(), evt, cli1, 0, 1, 10);
-       reqs[2]->async.fn = chain1_read_completion;
-       reqs[3] = cli_close_send(talloc_tos(), evt, cli1, 0);
-       reqs[3]->async.fn = chain1_close_completion;
-       reqs[3]->async.priv = (void *)&done;
-       cli_chain_uncork(cli1);
+       reqs[0] = cli_open_create(talloc_tos(), evt, cli1, "\\test",
+                                 O_CREAT|O_RDWR, 0, &smbreqs[0]);
+       if (reqs[0] == NULL) return false;
+       tevent_req_set_callback(reqs[0], chain1_open_completion, NULL);
+
+
+       reqs[1] = cli_write_andx_create(talloc_tos(), evt, cli1, 0, 0,
+                                       (uint8_t *)str, 0, strlen(str)+1,
+                                       smbreqs, 1, &smbreqs[1]);
+       if (reqs[1] == NULL) return false;
+       tevent_req_set_callback(reqs[1], chain1_write_completion, NULL);
+
+       reqs[2] = cli_close_create(talloc_tos(), evt, cli1, 0, &smbreqs[2]);
+       if (reqs[2] == NULL) return false;
+       tevent_req_set_callback(reqs[2], chain1_close_completion, &done);
+
+       if (!cli_smb_chain_send(smbreqs, ARRAY_SIZE(smbreqs))) {
+               return false;
+       }
 
        while (!done) {
                event_loop_once(evt);
@@ -5121,6 +5105,59 @@ static bool run_chain1(int dummy)
        return True;
 }
 
+static bool run_mangle1(int dummy)
+{
+       struct cli_state *cli;
+       const char *fname = "this_is_a_long_fname_to_be_mangled.txt";
+       int fnum;
+       fstring alt_name;
+       NTSTATUS status;
+       time_t change_time, access_time, write_time;
+       SMB_OFF_T size;
+       uint16_t mode;
+
+       printf("starting chain1 test\n");
+       if (!torture_open_connection(&cli, 0)) {
+               return False;
+       }
+
+       cli_sockopt(cli, sockops);
+
+       fnum = cli_nt_create_full(
+               cli, fname, 0, GENERIC_ALL_ACCESS|DELETE_ACCESS,
+               FILE_ATTRIBUTE_NORMAL, 0, FILE_OVERWRITE_IF, 0, 0);
+       if (fnum == -1) {
+               d_printf("open %s failed: %s\n", fname, cli_errstr(cli));
+               return false;
+       }
+       cli_close(cli, fnum);
+
+       status = cli_qpathinfo_alt_name(cli, fname, alt_name);
+       if (!NT_STATUS_IS_OK(status)) {
+               d_printf("cli_qpathinfo_alt_name failed: %s\n",
+                        nt_errstr(status));
+               return false;
+       }
+       d_printf("alt_name: %s\n", alt_name);
+
+       fnum = cli_open(cli, alt_name, O_RDONLY, DENY_NONE);
+       if (fnum == -1) {
+               d_printf("cli_open(%s) failed: %s\n", alt_name,
+                        cli_errstr(cli));
+               return false;
+       }
+       cli_close(cli, fnum);
+
+       if (!cli_qpathinfo(cli, alt_name, &change_time, &access_time,
+                          &write_time, &size, &mode)) {
+               d_printf("cli_qpathinfo(%s) failed: %s\n", alt_name,
+                        cli_errstr(cli));
+               return false;
+       }
+
+       return true;
+}
+
 static size_t null_source(uint8_t *buf, size_t n, void *priv)
 {
        size_t *to_pull = (size_t *)priv;
@@ -5199,8 +5236,6 @@ static bool run_windows_write(int dummy)
 static bool run_cli_echo(int dummy)
 {
        struct cli_state *cli;
-       struct event_context *ev = event_context_init(NULL);
-       struct async_req *req;
        NTSTATUS status;
 
        printf("starting cli_echo test\n");
@@ -5209,23 +5244,56 @@ static bool run_cli_echo(int dummy)
        }
        cli_sockopt(cli, sockops);
 
-       req = cli_echo_send(ev, ev, cli, 5, data_blob_const("hello", 5));
-       if (req == NULL) {
-               d_printf("cli_echo_send failed\n");
-               return false;
+       status = cli_echo(cli, 5, data_blob_const("hello", 5));
+
+       d_printf("cli_echo returned %s\n", nt_errstr(status));
+
+       torture_close_connection(cli);
+       return NT_STATUS_IS_OK(status);
+}
+
+static bool run_uid_regression_test(int dummy)
+{
+       static struct cli_state *cli;
+       int16_t old_vuid;
+       bool correct = True;
+
+       printf("starting uid regression test\n");
+
+       if (!torture_open_connection(&cli, 0)) {
+               return False;
        }
 
-       while (req->state < ASYNC_REQ_DONE) {
-               event_loop_once(ev);
+       cli_sockopt(cli, sockops);
+
+       /* Ok - now save then logoff our current user. */
+       old_vuid = cli->vuid;
+
+       if (!cli_ulogoff(cli)) {
+               d_printf("(%s) cli_ulogoff failed: %s\n",
+                       __location__, cli_errstr(cli));
+               correct = false;
+               goto out;
        }
 
-       status = cli_echo_recv(req);
-       d_printf("cli_echo returned %s\n", nt_errstr(status));
+       cli->vuid = old_vuid;
 
-       TALLOC_FREE(req);
+       /* Try an operation. */
+       if (!NT_STATUS_IS_OK(cli_mkdir(cli, "\\uid_reg_test"))) {
+               /* We expect bad uid. */
+               if (!check_error(__LINE__, cli, ERRSRV, ERRbaduid,
+                               NT_STATUS_NO_SUCH_USER)) {
+                       return False;
+               }
+               goto out;
+       }
+
+       cli_rmdir(cli, "\\uid_reg_test");
+
+  out:
 
        torture_close_connection(cli);
-       return NT_STATUS_IS_OK(status);
+       return correct;
 }
 
 static bool run_local_substitute(int dummy)
@@ -5288,7 +5356,7 @@ static bool run_local_gencache(int dummy)
                         __location__);
                return False;
        }
-                       
+
        if (gencache_get("foo", &val, &tm)) {
                d_printf("%s: gencache_get() on deleted entry "
                         "succeeded\n", __location__);
@@ -5760,7 +5828,7 @@ static double create_procs(bool (*fn)(int), bool *result)
        }
 
        printf("\n");
-       
+
        for (i=0;i<nprocs;i++) {
                if (!child_status_out[i]) {
                        *result = False;
@@ -5807,6 +5875,7 @@ static struct {
        {"RW3",  run_readwritelarge, 0},
        {"OPEN", run_opentest, 0},
        {"POSIX", run_simple_posix_open_test, 0},
+       { "UID-REGRESSION-TEST", run_uid_regression_test, 0},
 #if 1
        {"OPENATTR", run_openattrtest, 0},
 #endif
@@ -5815,6 +5884,7 @@ static struct {
        {"DELETE", run_deletetest, 0},
        {"PROPERTIES", run_properties, 0},
        {"MANGLE", torture_mangle, 0},
+       {"MANGLE1", run_mangle1, 0},
        {"W2K", run_w2ktest, 0},
        {"TRANS2SCAN", torture_trans2_scan, 0},
        {"NTTRANSSCAN", torture_nttrans_scan, 0},
@@ -5857,7 +5927,7 @@ static bool run_test(const char *name)
                }
                found = True;
        }
-       
+
        for (i=0;torture_ops[i].name;i++) {
                fstr_sprintf(randomfname, "\\XX%x", 
                         (unsigned)random());
@@ -5871,7 +5941,6 @@ static bool run_test(const char *name)
                                        ret = False;
                                        printf("TEST %s FAILED!\n", name);
                                }
-                                        
                        } else {
                                start_timer();
                                if (!torture_ops[i].fn(0)) {
@@ -5926,7 +5995,7 @@ static void usage(void)
        printf("\n");
 
        printf("default test is ALL\n");
-       
+
        exit(1);
 }
 
@@ -5966,7 +6035,7 @@ static void usage(void)
         for(p = argv[1]; *p; p++)
           if(*p == '\\')
             *p = '/';
+
        if (strncmp(argv[1], "//", 2)) {
                usage();
        }