Fix a bunch of "warning: variable ‘XXXX’ set but not used [-Wunused-but-set-variable...
[amitay/samba.git] / source4 / torture / basic / base.c
index 5fdc2cf421dd96ec818d6bf31c31887fa89bf62c..cd0f61b681deed86bd01b46710e588366b11fa70 100644 (file)
@@ -6,7 +6,7 @@
    
    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 2 of the License, or
+   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,
    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 "torture/torture.h"
+#include "torture/smbtorture.h"
 #include "torture/basic/proto.h"
 #include "libcli/libcli.h"
+#include "libcli/raw/raw_proto.h"
 #include "torture/util.h"
 #include "system/filesys.h"
 #include "system/time.h"
 #include "libcli/resolve/resolve.h"
-#include "librpc/gen_ndr/ndr_nbt.h"
 #include "lib/events/events.h"
-#include "lib/cmdline/popt_common.h"
+#include "param/param.h"
 
 
 #define CHECK_MAX_FAILURES(label) do { if (++failures >= torture_failures) goto label; } while (0)
@@ -40,8 +39,9 @@ static struct smbcli_state *open_nbt_connection(struct torture_context *tctx)
        struct nbt_name called, calling;
        struct smbcli_state *cli;
        const char *host = torture_setting_string(tctx, "host", NULL);
+       struct smbcli_options options;
 
-       make_nbt_name_client(&calling, lp_netbios_name());
+       make_nbt_name_client(&calling, lpcfg_netbios_name(tctx->lp_ctx));
 
        nbt_choose_called_name(NULL, &called, host, NBT_NAME_SERVER);
 
@@ -51,7 +51,11 @@ static struct smbcli_state *open_nbt_connection(struct torture_context *tctx)
                goto failed;
        }
 
-       if (!smbcli_socket_connect(cli, host)) {
+       lpcfg_smbcli_options(tctx->lp_ctx, &options);
+
+       if (!smbcli_socket_connect(cli, host, lpcfg_smb_ports(tctx->lp_ctx), tctx->ev,
+                                  lpcfg_resolve_context(tctx->lp_ctx), &options,
+                   lpcfg_socket_options(tctx->lp_ctx))) {
                torture_comment(tctx, "Failed to connect with %s\n", host);
                goto failed;
        }
@@ -68,12 +72,12 @@ failed:
        return NULL;
 }
 
-static BOOL tcon_devtest(struct torture_context *tctx, 
+static bool tcon_devtest(struct torture_context *tctx, 
                                                 struct smbcli_state *cli,
                                                 const char *myshare, const char *devtype,
                                                 NTSTATUS expected_error)
 {
-       BOOL status;
+       bool status;
        const char *password = torture_setting_string(tctx, "password", NULL);
 
        status = NT_STATUS_IS_OK(smbcli_tconX(cli, myshare, devtype, 
@@ -158,13 +162,13 @@ static bool run_fdpasstest(struct torture_context *tctx,
 /**
   This checks how the getatr calls works
 */
-static BOOL run_attrtest(struct torture_context *tctx, 
+static bool run_attrtest(struct torture_context *tctx, 
                                                 struct smbcli_state *cli)
 {
        int fnum;
        time_t t, t2;
        const char *fname = "\\attrib123456789.tst";
-       BOOL correct = True;
+       bool correct = true;
 
        smbcli_unlink(cli->tree, fname);
        fnum = smbcli_open(cli->tree, fname, 
@@ -173,7 +177,7 @@ static BOOL run_attrtest(struct torture_context *tctx,
 
        if (NT_STATUS_IS_ERR(smbcli_getatr(cli->tree, fname, NULL, NULL, &t))) {
                torture_comment(tctx, "getatr failed (%s)\n", smbcli_errstr(cli->tree));
-               correct = False;
+               correct = false;
        }
 
        torture_comment(tctx, "New file time is %s", ctime(&t));
@@ -182,7 +186,7 @@ static BOOL run_attrtest(struct torture_context *tctx,
                torture_comment(tctx, "ERROR: SMBgetatr bug. time is %s",
                       ctime(&t));
                t = time(NULL);
-               correct = False;
+               correct = false;
        }
 
        t2 = t-60*60*24; /* 1 day ago */
@@ -191,12 +195,12 @@ static BOOL run_attrtest(struct torture_context *tctx,
 
        if (NT_STATUS_IS_ERR(smbcli_setatr(cli->tree, fname, 0, t2))) {
                torture_comment(tctx, "setatr failed (%s)\n", smbcli_errstr(cli->tree));
-               correct = True;
+               correct = true;
        }
 
        if (NT_STATUS_IS_ERR(smbcli_getatr(cli->tree, fname, NULL, NULL, &t))) {
                torture_comment(tctx, "getatr failed (%s)\n", smbcli_errstr(cli->tree));
-               correct = True;
+               correct = true;
        }
 
        torture_comment(tctx, "Retrieved file time as %s", ctime(&t));
@@ -205,7 +209,7 @@ static BOOL run_attrtest(struct torture_context *tctx,
                torture_comment(tctx, "ERROR: getatr/setatr bug. times are\n%s",
                       ctime(&t));
                torture_comment(tctx, "%s", ctime(&t2));
-               correct = True;
+               correct = true;
        }
 
        smbcli_unlink(cli->tree, fname);
@@ -216,7 +220,7 @@ static BOOL run_attrtest(struct torture_context *tctx,
 /**
   This checks a couple of trans2 calls
 */
-static BOOL run_trans2test(struct torture_context *tctx, 
+static bool run_trans2test(struct torture_context *tctx, 
                                                   struct smbcli_state *cli)
 {
        int fnum;
@@ -226,7 +230,7 @@ static BOOL run_trans2test(struct torture_context *tctx,
        const char *dname = "\\trans2";
        const char *fname2 = "\\trans2\\trans2.tst";
        const char *pname;
-       BOOL correct = True;
+       bool correct = true;
 
        smbcli_unlink(cli->tree, fname);
 
@@ -237,20 +241,20 @@ static BOOL run_trans2test(struct torture_context *tctx,
        if (NT_STATUS_IS_ERR(smbcli_qfileinfo(cli->tree, fnum, NULL, &size, &c_time, &a_time, &m_time,
                           NULL, NULL))) {
                torture_comment(tctx, "ERROR: qfileinfo failed (%s)\n", smbcli_errstr(cli->tree));
-               correct = False;
+               correct = false;
        }
 
        torture_comment(tctx, "Testing NAME_INFO\n");
 
        if (NT_STATUS_IS_ERR(smbcli_qfilename(cli->tree, fnum, &pname))) {
                torture_comment(tctx, "ERROR: qfilename failed (%s)\n", smbcli_errstr(cli->tree));
-               correct = False;
+               correct = false;
        }
 
        if (!pname || strcmp(pname, fname)) {
                torture_comment(tctx, "qfilename gave different name? [%s] [%s]\n",
                       fname, pname);
-               correct = False;
+               correct = false;
        }
 
        smbcli_close(cli->tree, fnum);
@@ -260,7 +264,7 @@ static BOOL run_trans2test(struct torture_context *tctx,
                        O_RDWR | O_CREAT | O_TRUNC, DENY_NONE);
        if (fnum == -1) {
                torture_comment(tctx, "open of %s failed (%s)\n", fname, smbcli_errstr(cli->tree));
-               return False;
+               return false;
        }
        smbcli_close(cli->tree, fnum);
 
@@ -268,22 +272,24 @@ static BOOL run_trans2test(struct torture_context *tctx,
 
        if (NT_STATUS_IS_ERR(smbcli_qpathinfo(cli->tree, fname, &c_time, &a_time, &m_time, &size, NULL))) {
                torture_comment(tctx, "ERROR: qpathinfo failed (%s)\n", smbcli_errstr(cli->tree));
-               correct = False;
+               correct = false;
        } else {
+               time_t t = time(NULL);
+
                if (c_time != m_time) {
                        torture_comment(tctx, "create time=%s", ctime(&c_time));
                        torture_comment(tctx, "modify time=%s", ctime(&m_time));
                        torture_comment(tctx, "This system appears to have sticky create times\n");
                }
-               if (a_time % (60*60) == 0) {
+               if ((abs(a_time - t) > 60) && (a_time % (60*60) == 0)) {
                        torture_comment(tctx, "access time=%s", ctime(&a_time));
                        torture_comment(tctx, "This system appears to set a midnight access time\n");
-                       correct = False;
+                       correct = false;
                }
 
-               if (abs(m_time - time(NULL)) > 60*60*24*7) {
+               if (abs(m_time - t) > 60*60*24*7) {
                        torture_comment(tctx, "ERROR: totally incorrect times - maybe word reversed? mtime=%s", ctime(&m_time));
-                       correct = False;
+                       correct = false;
                }
        }
 
@@ -294,12 +300,12 @@ static BOOL run_trans2test(struct torture_context *tctx,
        smbcli_close(cli->tree, fnum);
        if (NT_STATUS_IS_ERR(smbcli_qpathinfo2(cli->tree, fname, &c_time, &a_time, &m_time, &w_time, &size, NULL, NULL))) {
                torture_comment(tctx, "ERROR: qpathinfo2 failed (%s)\n", smbcli_errstr(cli->tree));
-               correct = False;
+               correct = false;
        } else {
                if (w_time < 60*60*24*2) {
                        torture_comment(tctx, "write time=%s", ctime(&w_time));
                        torture_comment(tctx, "This system appears to set a initial 0 write time\n");
-                       correct = False;
+                       correct = false;
                }
        }
 
@@ -310,12 +316,12 @@ static BOOL run_trans2test(struct torture_context *tctx,
            when creating a new file */
        if (NT_STATUS_IS_ERR(smbcli_mkdir(cli->tree, dname))) {
                torture_comment(tctx, "ERROR: mkdir failed (%s)\n", smbcli_errstr(cli->tree));
-               correct = False;
+               correct = false;
        }
        sleep(3);
        if (NT_STATUS_IS_ERR(smbcli_qpathinfo2(cli->tree, "\\trans2\\", &c_time, &a_time, &m_time, &w_time, &size, NULL, NULL))) {
                torture_comment(tctx, "ERROR: qpathinfo2 failed (%s)\n", smbcli_errstr(cli->tree));
-               correct = False;
+               correct = false;
        }
 
        fnum = smbcli_open(cli->tree, fname2, 
@@ -324,11 +330,11 @@ static BOOL run_trans2test(struct torture_context *tctx,
        smbcli_close(cli->tree, fnum);
        if (NT_STATUS_IS_ERR(smbcli_qpathinfo2(cli->tree, "\\trans2\\", &c_time, &a_time, &m_time2, &w_time, &size, NULL, NULL))) {
                torture_comment(tctx, "ERROR: qpathinfo2 failed (%s)\n", smbcli_errstr(cli->tree));
-               correct = False;
+               correct = false;
        } else {
                if (m_time2 == m_time) {
                        torture_comment(tctx, "This system does not update directory modification times\n");
-                       correct = False;
+                       correct = false;
                }
        }
        smbcli_unlink(cli->tree, fname2);
@@ -338,25 +344,25 @@ static BOOL run_trans2test(struct torture_context *tctx,
 }
 
 /* send smb negprot commands, not reading the response */
-static BOOL run_negprot_nowait(struct torture_context *tctx)
+static bool run_negprot_nowait(struct torture_context *tctx)
 {
        int i;
        struct smbcli_state *cli, *cli2;
-       BOOL correct = True;
+       bool correct = true;
 
        torture_comment(tctx, "starting negprot nowait test\n");
 
        cli = open_nbt_connection(tctx);
        if (!cli) {
-               return False;
+               return false;
        }
 
        torture_comment(tctx, "Filling send buffer\n");
 
        for (i=0;i<100;i++) {
                struct smbcli_request *req;
-               req = smb_raw_negotiate_send(cli->transport, PROTOCOL_NT1);
-               event_loop_once(cli->transport->socket->event.ctx);
+               req = smb_raw_negotiate_send(cli->transport, lpcfg_unicode(tctx->lp_ctx), PROTOCOL_NT1);
+               tevent_loop_once(cli->transport->socket->event.ctx);
                if (req->state == SMBCLI_REQUEST_ERROR) {
                        if (i > 0) {
                                torture_comment(tctx, "Failed to fill pipe packet[%d] - %s (ignored)\n", i+1, nt_errstr(req->status));
@@ -364,26 +370,24 @@ static BOOL run_negprot_nowait(struct torture_context *tctx)
                        } else {
                                torture_comment(tctx, "Failed to fill pipe - %s \n", nt_errstr(req->status));
                                torture_close_connection(cli);
-                               return False;
+                               return false;
                        }
                }
        }
 
        torture_comment(tctx, "Opening secondary connection\n");
-       if (!torture_open_connection(&cli2, 1)) {
+       if (!torture_open_connection(&cli2, tctx, 1)) {
                torture_comment(tctx, "Failed to open secondary connection\n");
-               correct = False;
+               correct = false;
        }
 
        if (!torture_close_connection(cli2)) {
                torture_comment(tctx, "Failed to close secondary connection\n");
-               correct = False;
+               correct = false;
        }
 
        torture_close_connection(cli);
 
-       torture_comment(tctx, "finished negprot nowait test\n");
-
        return correct;
 }
 
@@ -391,14 +395,14 @@ static BOOL run_negprot_nowait(struct torture_context *tctx)
   this checks to see if a secondary tconx can use open files from an
   earlier tconx
  */
-static BOOL run_tcon_test(struct torture_context *tctx, struct smbcli_state *cli)
+static bool run_tcon_test(struct torture_context *tctx, struct smbcli_state *cli)
 {
        const char *fname = "\\tcontest.tmp";
        int fnum1;
        uint16_t cnum1, cnum2, cnum3;
        uint16_t vuid1, vuid2;
        uint8_t buf[4];
-       BOOL ret = True;
+       bool ret = true;
        struct smbcli_tree *tree1;
        const char *host = torture_setting_string(tctx, "host", NULL);
        const char *share = torture_setting_string(tctx, "share", NULL);
@@ -411,16 +415,16 @@ static BOOL run_tcon_test(struct torture_context *tctx, struct smbcli_state *cli
        fnum1 = smbcli_open(cli->tree, fname, O_RDWR|O_CREAT|O_EXCL, DENY_NONE);
        if (fnum1 == -1) {
                torture_comment(tctx, "open of %s failed (%s)\n", fname, smbcli_errstr(cli->tree));
-               return False;
+               return false;
        }
 
        cnum1 = cli->tree->tid;
        vuid1 = cli->session->vuid;
 
-       memset(&buf, 0, 4); /* init buf so valgrind won't complain */
+       memset(buf, 0, 4); /* init buf so valgrind won't complain */
        if (smbcli_write(cli->tree, fnum1, 0, buf, 130, 4) != 4) {
                torture_comment(tctx, "initial write failed (%s)\n", smbcli_errstr(cli->tree));
-               return False;
+               return false;
        }
 
        tree1 = cli->tree;      /* save old tree connection */
@@ -428,7 +432,7 @@ static BOOL run_tcon_test(struct torture_context *tctx, struct smbcli_state *cli
                torture_comment(tctx, "%s refused 2nd tree connect (%s)\n", host,
                           smbcli_errstr(cli->tree));
                talloc_free(cli);
-               return False;
+               return false;
        }
 
        cnum2 = cli->tree->tid;
@@ -440,7 +444,7 @@ static BOOL run_tcon_test(struct torture_context *tctx, struct smbcli_state *cli
 
        if (smbcli_write(cli->tree, fnum1, 0, buf, 130, 4) == 4) {
                torture_comment(tctx, "* server allows write with wrong TID\n");
-               ret = False;
+               ret = false;
        } else {
                torture_comment(tctx, "server fails write with wrong TID : %s\n", smbcli_errstr(cli->tree));
        }
@@ -451,7 +455,7 @@ static BOOL run_tcon_test(struct torture_context *tctx, struct smbcli_state *cli
 
        if (smbcli_write(cli->tree, fnum1, 0, buf, 130, 4) == 4) {
                torture_comment(tctx, "* server allows write with invalid TID\n");
-               ret = False;
+               ret = false;
        } else {
                torture_comment(tctx, "server fails write with invalid TID : %s\n", smbcli_errstr(cli->tree));
        }
@@ -462,7 +466,7 @@ static BOOL run_tcon_test(struct torture_context *tctx, struct smbcli_state *cli
 
        if (smbcli_write(cli->tree, fnum1, 0, buf, 130, 4) == 4) {
                torture_comment(tctx, "* server allows write with invalid VUID\n");
-               ret = False;
+               ret = false;
        } else {
                torture_comment(tctx, "server fails write with invalid VUID : %s\n", smbcli_errstr(cli->tree));
        }
@@ -472,14 +476,14 @@ static BOOL run_tcon_test(struct torture_context *tctx, struct smbcli_state *cli
 
        if (NT_STATUS_IS_ERR(smbcli_close(cli->tree, fnum1))) {
                torture_comment(tctx, "close failed (%s)\n", smbcli_errstr(cli->tree));
-               return False;
+               return false;
        }
 
        cli->tree->tid = cnum2;
 
        if (NT_STATUS_IS_ERR(smbcli_tdis(cli))) {
                torture_comment(tctx, "secondary tdis failed (%s)\n", smbcli_errstr(cli->tree));
-               return False;
+               return false;
        }
 
        cli->tree = tree1;  /* restore initial tree */
@@ -493,7 +497,7 @@ static BOOL run_tcon_test(struct torture_context *tctx, struct smbcli_state *cli
 /**
  checks for correct tconX support
  */
-static BOOL run_tcon_devtype_test(struct torture_context *tctx, 
+static bool run_tcon_devtype_test(struct torture_context *tctx, 
                                                                  struct smbcli_state *cli1)
 {
        const char *share = torture_setting_string(tctx, "share", NULL);
@@ -531,7 +535,7 @@ static BOOL run_tcon_devtype_test(struct torture_context *tctx,
        return true;
 }
 
-static BOOL rw_torture2(struct torture_context *tctx,
+static bool rw_torture2(struct torture_context *tctx,
                                                struct smbcli_state *c1, struct smbcli_state *c2)
 {
        const char *lockfname = "\\torture2.lck";
@@ -540,7 +544,7 @@ static BOOL rw_torture2(struct torture_context *tctx,
        int i;
        uint8_t buf[131072];
        uint8_t buf_rd[131072];
-       BOOL correct = True;
+       bool correct = true;
        ssize_t bytes_read, bytes_written;
 
        torture_assert(tctx, smbcli_deltree(c1->tree, lockfname) != -1,
@@ -565,7 +569,7 @@ static BOOL rw_torture2(struct torture_context *tctx,
 
        for (i=0;i<torture_numops;i++)
        {
-               size_t buf_size = ((uint_t)random()%(sizeof(buf)-1))+ 1;
+               size_t buf_size = ((unsigned int)random()%(sizeof(buf)-1))+ 1;
                if (i % 10 == 0) {
                        if (torture_setting_bool(tctx, "progress", true)) {
                                torture_comment(tctx, "%d\r", i); fflush(stdout);
@@ -577,18 +581,18 @@ static BOOL rw_torture2(struct torture_context *tctx,
                if ((bytes_written = smbcli_write(c1->tree, fnum1, 0, buf, 0, buf_size)) != buf_size) {
                        torture_comment(tctx, "write failed (%s)\n", smbcli_errstr(c1->tree));
                        torture_comment(tctx, "wrote %d, expected %d\n", (int)bytes_written, (int)buf_size); 
-                       correct = False;
+                       correct = false;
                        break;
                }
 
                if ((bytes_read = smbcli_read(c2->tree, fnum2, buf_rd, 0, buf_size)) != buf_size) {
                        torture_comment(tctx, "read failed (%s)\n", smbcli_errstr(c2->tree));
                        torture_comment(tctx, "read %d, expected %d\n", (int)bytes_read, (int)buf_size); 
-                       correct = False;
+                       correct = false;
                        break;
                }
 
-               torture_assert(tctx, memcmp(buf_rd, buf, buf_size) == 0
+               torture_assert_mem_equal(tctx, buf_rd, buf, buf_size
                        "read/write compare failed\n");
        }
 
@@ -600,6 +604,8 @@ static BOOL rw_torture2(struct torture_context *tctx,
        torture_assert_ntstatus_ok(tctx, smbcli_unlink(c1->tree, lockfname),
                talloc_asprintf(tctx, "unlink failed (%s)", smbcli_errstr(c1->tree)));
 
+       torture_comment(tctx, "\n");
+
        return correct;
 }
 
@@ -624,16 +630,23 @@ static bool run_readwritetest(struct torture_context *tctx,
 /*
 test the timing of deferred open requests
 */
-static BOOL run_deferopen(struct torture_context *tctx, struct smbcli_state *cli, int dummy)
+static bool run_deferopen(struct torture_context *tctx, struct smbcli_state *cli, int dummy)
 {
        const char *fname = "\\defer_open_test.dat";
        int retries=4;
        int i = 0;
-       BOOL correct = True;
+       bool correct = true;
+       int nsec;
+       int msec;
+       double sec;
+
+       nsec = torture_setting_int(tctx, "sharedelay", 1000000);
+       msec = nsec / 1000;
+       sec = ((double)nsec) / ((double) 1000000);
 
        if (retries <= 0) {
                torture_comment(tctx, "failed to connect\n");
-               return False;
+               return false;
        }
 
        torture_comment(tctx, "Testing deferred open requests.\n");
@@ -654,34 +667,39 @@ static BOOL run_deferopen(struct torture_context *tctx, struct smbcli_state *cli
                        }
                        if (NT_STATUS_EQUAL(smbcli_nt_error(cli->tree),NT_STATUS_SHARING_VIOLATION)) {
                                double e = timeval_elapsed(&tv);
-                               if (e < 0.5 || e > 1.5) {
-                                       torture_comment(tctx,"Timing incorrect %.2f violation\n",
-                                               e);
+                               if (e < (0.5 * sec) || e > ((1.5 * sec) + 1)) {
+                                       torture_comment(tctx,"Timing incorrect %.2f violation 1 sec == %.2f\n",
+                                               e, sec);
+                                       return false;
                                }
                        }
                } while (NT_STATUS_EQUAL(smbcli_nt_error(cli->tree),NT_STATUS_SHARING_VIOLATION));
 
                if (fnum == -1) {
                        torture_comment(tctx,"Failed to open %s, error=%s\n", fname, smbcli_errstr(cli->tree));
-                       return False;
+                       return false;
                }
 
                torture_comment(tctx, "pid %u open %d\n", (unsigned)getpid(), i);
 
-               sleep(10);
+               smb_msleep(10 * msec);
                i++;
                if (NT_STATUS_IS_ERR(smbcli_close(cli->tree, fnum))) {
                        torture_comment(tctx,"Failed to close %s, error=%s\n", fname, smbcli_errstr(cli->tree));
-                       return False;
+                       return false;
                }
-               sleep(2);
+               smb_msleep(2 * msec);
        }
 
        if (NT_STATUS_IS_ERR(smbcli_unlink(cli->tree, fname))) {
-               /* All until the last unlink will fail with sharing violation. */
-               if (!NT_STATUS_EQUAL(smbcli_nt_error(cli->tree),NT_STATUS_SHARING_VIOLATION)) {
+               /* All until the last unlink will fail with sharing violation
+                  but also the last request can fail since the file could have
+                  been successfully deleted by another (test) process */
+               NTSTATUS status = smbcli_nt_error(cli->tree);
+               if ((!NT_STATUS_EQUAL(status, NT_STATUS_SHARING_VIOLATION))
+                       && (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_NOT_FOUND))) {
                        torture_comment(tctx, "unlink of %s failed (%s)\n", fname, smbcli_errstr(cli->tree));
-                       correct = False;
+                       correct = false;
                }
        }
 
@@ -693,7 +711,7 @@ static BOOL run_deferopen(struct torture_context *tctx, struct smbcli_state *cli
   Try with a wrong vuid and check error message.
  */
 
-static BOOL run_vuidtest(struct torture_context *tctx, 
+static bool run_vuidtest(struct torture_context *tctx, 
                                                 struct smbcli_state *cli)
 {
        const char *fname = "\\vuid.tst";
@@ -701,7 +719,6 @@ static BOOL run_vuidtest(struct torture_context *tctx,
        size_t size;
        time_t c_time, a_time, m_time;
 
-       uint16_t orig_vuid;
        NTSTATUS result;
 
        smbcli_unlink(cli->tree, fname);
@@ -709,8 +726,6 @@ static BOOL run_vuidtest(struct torture_context *tctx,
        fnum = smbcli_open(cli->tree, fname, 
                        O_RDWR | O_CREAT | O_TRUNC, DENY_NONE);
 
-       orig_vuid = cli->session->vuid;
-
        cli->session->vuid += 1234;
 
        torture_comment(tctx, "Testing qfileinfo with wrong vuid\n");
@@ -744,7 +759,7 @@ static BOOL run_vuidtest(struct torture_context *tctx,
 /*
   Test open mode returns on read-only files.
  */
- static BOOL run_opentest(struct torture_context *tctx, struct smbcli_state *cli1, 
+ static bool run_opentest(struct torture_context *tctx, struct smbcli_state *cli1, 
                                                  struct smbcli_state *cli2)
 {
        const char *fname = "\\readonly.file";
@@ -752,7 +767,7 @@ static BOOL run_vuidtest(struct torture_context *tctx,
        int fnum1, fnum2;
        uint8_t buf[20];
        size_t fsize;
-       BOOL correct = True;
+       bool correct = true;
        char *tmp_path;
        int failures = 0;
        int i;
@@ -787,25 +802,27 @@ static BOOL run_vuidtest(struct torture_context *tctx,
        fnum1 = smbcli_open(cli1->tree, fname, O_RDWR|O_CREAT|O_EXCL, DENY_NONE);
        if (fnum1 == -1) {
                torture_comment(tctx, "open of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
-               return False;
+               return false;
        }
 
        if (NT_STATUS_IS_ERR(smbcli_close(cli1->tree, fnum1))) {
                torture_comment(tctx, "close2 failed (%s)\n", smbcli_errstr(cli1->tree));
-               return False;
+               return false;
        }
        
        if (NT_STATUS_IS_ERR(smbcli_setatr(cli1->tree, fname, FILE_ATTRIBUTE_READONLY, 0))) {
-               torture_comment(tctx, "smbcli_setatr failed (%s)\n", smbcli_errstr(cli1->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": smbcli_setatr failed (%s)\n", smbcli_errstr(cli1->tree));
                CHECK_MAX_FAILURES(error_test1);
-               return False;
+               return false;
        }
        
        fnum1 = smbcli_open(cli1->tree, fname, O_RDONLY, DENY_WRITE);
        if (fnum1 == -1) {
-               torture_comment(tctx, "open of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": open of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
                CHECK_MAX_FAILURES(error_test1);
-               return False;
+               return false;
        }
        
        /* This will fail - but the error should be ERRnoaccess, not ERRbadshare. */
@@ -817,6 +834,7 @@ static BOOL run_vuidtest(struct torture_context *tctx,
        }
        
        torture_comment(tctx, "finished open test 1\n");
+
 error_test1:
        smbcli_close(cli1->tree, fnum1);
        
@@ -827,7 +845,7 @@ error_test1:
        fnum1 = smbcli_open(cli1->tree, fname, O_RDONLY, DENY_WRITE);
        if (fnum1 == -1) {
                torture_comment(tctx, "open of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
-               return False;
+               return false;
        }
        
        /* This will fail - but the error should be ERRshare. */
@@ -840,7 +858,7 @@ error_test1:
        
        if (NT_STATUS_IS_ERR(smbcli_close(cli1->tree, fnum1))) {
                torture_comment(tctx, "close2 failed (%s)\n", smbcli_errstr(cli1->tree));
-               return False;
+               return false;
        }
        
        smbcli_unlink(cli1->tree, fname);
@@ -852,7 +870,7 @@ error_test1:
        fnum1 = smbcli_open(cli1->tree, fname, O_RDWR|O_CREAT|O_EXCL, DENY_NONE);
        if (fnum1 == -1) {
                torture_comment(tctx, "(3) open (1) of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
-               return False;
+               return false;
        }
        
        /* write 20 bytes. */
@@ -861,314 +879,339 @@ error_test1:
 
        if (smbcli_write(cli1->tree, fnum1, 0, buf, 0, 20) != 20) {
                torture_comment(tctx, "write failed (%s)\n", smbcli_errstr(cli1->tree));
-               correct = False;
+               correct = false;
        }
 
        if (NT_STATUS_IS_ERR(smbcli_close(cli1->tree, fnum1))) {
                torture_comment(tctx, "(3) close1 failed (%s)\n", smbcli_errstr(cli1->tree));
-               return False;
+               return false;
        }
        
        /* Ensure size == 20. */
        if (NT_STATUS_IS_ERR(smbcli_getatr(cli1->tree, fname, NULL, &fsize, NULL))) {
-               torture_comment(tctx, "(3) getatr failed (%s)\n", smbcli_errstr(cli1->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": (3) getatr failed (%s)\n", smbcli_errstr(cli1->tree));
                CHECK_MAX_FAILURES(error_test3);
-               return False;
+               return false;
        }
        
        if (fsize != 20) {
-               torture_comment(tctx, "(3) file size != 20\n");
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": (3) file size != 20\n");
                CHECK_MAX_FAILURES(error_test3);
-               return False;
+               return false;
        }
 
        /* Now test if we can truncate a file opened for readonly. */
        
        fnum1 = smbcli_open(cli1->tree, fname, O_RDONLY|O_TRUNC, DENY_NONE);
        if (fnum1 == -1) {
-               torture_comment(tctx, "(3) open (2) of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": (3) open (2) of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
                CHECK_MAX_FAILURES(error_test3);
-               return False;
+               return false;
        }
        
        if (NT_STATUS_IS_ERR(smbcli_close(cli1->tree, fnum1))) {
-               torture_comment(tctx, "close2 failed (%s)\n", smbcli_errstr(cli1->tree));
-               return False;
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": close2 failed (%s)\n", smbcli_errstr(cli1->tree));
+               return false;
        }
 
        /* Ensure size == 0. */
        if (NT_STATUS_IS_ERR(smbcli_getatr(cli1->tree, fname, NULL, &fsize, NULL))) {
-               torture_comment(tctx, "(3) getatr failed (%s)\n", smbcli_errstr(cli1->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": (3) getatr failed (%s)\n", smbcli_errstr(cli1->tree));
                CHECK_MAX_FAILURES(error_test3);
-               return False;
+               return false;
        }
 
        if (fsize != 0) {
-               torture_comment(tctx, "(3) file size != 0\n");
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": (3) file size != 0\n");
                CHECK_MAX_FAILURES(error_test3);
-               return False;
+               return false;
        }
        torture_comment(tctx, "finished open test 3\n");
 error_test3:   
+
+       fnum1 = fnum2 = -1;
        smbcli_unlink(cli1->tree, fname);
 
 
-       torture_comment(tctx, "testing ctemp\n");
+       torture_comment(tctx, "Testing ctemp\n");
        fnum1 = smbcli_ctemp(cli1->tree, "\\", &tmp_path);
        if (fnum1 == -1) {
-               torture_comment(tctx, "ctemp failed (%s)\n", smbcli_errstr(cli1->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": ctemp failed (%s)\n", smbcli_errstr(cli1->tree));
                CHECK_MAX_FAILURES(error_test4);
-               return False;
+               return false;
        }
        torture_comment(tctx, "ctemp gave path %s\n", tmp_path);
+
+error_test4:
        if (NT_STATUS_IS_ERR(smbcli_close(cli1->tree, fnum1))) {
                torture_comment(tctx, "close of temp failed (%s)\n", smbcli_errstr(cli1->tree));
        }
        if (NT_STATUS_IS_ERR(smbcli_unlink(cli1->tree, tmp_path))) {
                torture_comment(tctx, "unlink of temp failed (%s)\n", smbcli_errstr(cli1->tree));
        }
-error_test4:   
+
        /* Test the non-io opens... */
 
+       torture_comment(tctx, "Test #1 testing 2 non-io opens (no delete)\n");
+       fnum1 = fnum2 = -1;
        smbcli_setatr(cli2->tree, fname, 0, 0);
        smbcli_unlink(cli2->tree, fname);
-       
-       torture_comment(tctx, "TEST #1 testing 2 non-io opens (no delete)\n");
-       
+
        fnum1 = smbcli_nt_create_full(cli1->tree, fname, 0, SEC_FILE_READ_ATTRIBUTE, FILE_ATTRIBUTE_NORMAL,
                                   NTCREATEX_SHARE_ACCESS_NONE, NTCREATEX_DISP_OVERWRITE_IF, 0, 0);
 
        if (fnum1 == -1) {
-               torture_comment(tctx, "test 1 open 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": Test 1 open 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
                CHECK_MAX_FAILURES(error_test10);
-               return False;
+               return false;
        }
 
        fnum2 = smbcli_nt_create_full(cli2->tree, fname, 0, SEC_FILE_READ_ATTRIBUTE, FILE_ATTRIBUTE_NORMAL,
                                   NTCREATEX_SHARE_ACCESS_NONE, NTCREATEX_DISP_OPEN_IF, 0, 0);
        if (fnum2 == -1) {
-               torture_comment(tctx, "test 1 open 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": Test 1 open 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
                CHECK_MAX_FAILURES(error_test10);
-               return False;
+               return false;
        }
 
+       torture_comment(tctx, "non-io open test #1 passed.\n");
+error_test10:
+
        if (NT_STATUS_IS_ERR(smbcli_close(cli1->tree, fnum1))) {
-               torture_comment(tctx, "test 1 close 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
-               return False;
+               torture_comment(tctx, "Test 1 close 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
        }
        if (NT_STATUS_IS_ERR(smbcli_close(cli2->tree, fnum2))) {
-               torture_comment(tctx, "test 1 close 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
-               return False;
+               torture_comment(tctx, "Test 1 close 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
        }
 
-       torture_comment(tctx, "non-io open test #1 passed.\n");
-error_test10:
+       torture_comment(tctx, "Test #2 testing 2 non-io opens (first with delete)\n");
+       fnum1 = fnum2 = -1;
        smbcli_unlink(cli1->tree, fname);
 
-       torture_comment(tctx, "TEST #2 testing 2 non-io opens (first with delete)\n");
-       
        fnum1 = smbcli_nt_create_full(cli1->tree, fname, 0, SEC_STD_DELETE|SEC_FILE_READ_ATTRIBUTE, FILE_ATTRIBUTE_NORMAL,
                                   NTCREATEX_SHARE_ACCESS_NONE, NTCREATEX_DISP_OVERWRITE_IF, 0, 0);
 
        if (fnum1 == -1) {
-               torture_comment(tctx, "test 2 open 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": Test 2 open 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
                CHECK_MAX_FAILURES(error_test20);
-               return False;
+               return false;
        }
 
        fnum2 = smbcli_nt_create_full(cli2->tree, fname, 0, SEC_FILE_READ_ATTRIBUTE, FILE_ATTRIBUTE_NORMAL,
                                   NTCREATEX_SHARE_ACCESS_NONE, NTCREATEX_DISP_OPEN_IF, 0, 0);
 
        if (fnum2 == -1) {
-               torture_comment(tctx, "test 2 open 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": Test 2 open 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
                CHECK_MAX_FAILURES(error_test20);
-               return False;
+               return false;
        }
 
+       torture_comment(tctx, "non-io open test #2 passed.\n");
+error_test20:
+
        if (NT_STATUS_IS_ERR(smbcli_close(cli1->tree, fnum1))) {
-               torture_comment(tctx, "test 1 close 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
-               return False;
+               torture_comment(tctx, "Test 1 close 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
        }
        if (NT_STATUS_IS_ERR(smbcli_close(cli2->tree, fnum2))) {
-               torture_comment(tctx, "test 1 close 2 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
-               return False;
+               torture_comment(tctx, "Test 1 close 2 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
        }
 
-       torture_comment(tctx, "non-io open test #2 passed.\n");
-error_test20:
+       fnum1 = fnum2 = -1;
        smbcli_unlink(cli1->tree, fname);
 
-       torture_comment(tctx, "TEST #3 testing 2 non-io opens (second with delete)\n");
-       
+       torture_comment(tctx, "Test #3 testing 2 non-io opens (second with delete)\n");
+
        fnum1 = smbcli_nt_create_full(cli1->tree, fname, 0, SEC_FILE_READ_ATTRIBUTE, FILE_ATTRIBUTE_NORMAL,
                                   NTCREATEX_SHARE_ACCESS_NONE, NTCREATEX_DISP_OVERWRITE_IF, 0, 0);
 
        if (fnum1 == -1) {
-               torture_comment(tctx, "test 3 open 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": Test 3 open 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
                CHECK_MAX_FAILURES(error_test30);
-               return False;
+               return false;
        }
 
        fnum2 = smbcli_nt_create_full(cli2->tree, fname, 0, SEC_STD_DELETE|SEC_FILE_READ_ATTRIBUTE, FILE_ATTRIBUTE_NORMAL,
                                   NTCREATEX_SHARE_ACCESS_NONE, NTCREATEX_DISP_OPEN_IF, 0, 0);
 
        if (fnum2 == -1) {
-               torture_comment(tctx, "test 3 open 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": Test 3 open 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
                CHECK_MAX_FAILURES(error_test30);
-               return False;
+               return false;
        }
 
+       torture_comment(tctx, "non-io open test #3 passed.\n");
+error_test30:
+
        if (NT_STATUS_IS_ERR(smbcli_close(cli1->tree, fnum1))) {
-               torture_comment(tctx, "test 3 close 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
-               return False;
+               torture_comment(tctx, "Test 3 close 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
        }
        if (NT_STATUS_IS_ERR(smbcli_close(cli2->tree, fnum2))) {
-               torture_comment(tctx, "test 3 close 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
-               return False;
+               torture_comment(tctx, "Test 3 close 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
        }
 
-       torture_comment(tctx, "non-io open test #3 passed.\n");
-error_test30:
+       torture_comment(tctx, "Test #4 testing 2 non-io opens (both with delete)\n");
+       fnum1 = fnum2 = -1;
        smbcli_unlink(cli1->tree, fname);
 
-       torture_comment(tctx, "TEST #4 testing 2 non-io opens (both with delete)\n");
-       
        fnum1 = smbcli_nt_create_full(cli1->tree, fname, 0, SEC_STD_DELETE|SEC_FILE_READ_ATTRIBUTE, FILE_ATTRIBUTE_NORMAL,
                                   NTCREATEX_SHARE_ACCESS_NONE, NTCREATEX_DISP_OVERWRITE_IF, 0, 0);
 
        if (fnum1 == -1) {
-               torture_comment(tctx, "test 4 open 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": Test 4 open 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
                CHECK_MAX_FAILURES(error_test40);
-               return False;
+               return false;
        }
 
        fnum2 = smbcli_nt_create_full(cli2->tree, fname, 0, SEC_STD_DELETE|SEC_FILE_READ_ATTRIBUTE, FILE_ATTRIBUTE_NORMAL,
                                   NTCREATEX_SHARE_ACCESS_NONE, NTCREATEX_DISP_OPEN_IF, 0, 0);
 
        if (fnum2 != -1) {
-               torture_comment(tctx, "test 4 open 2 of %s SUCCEEDED - should have failed (%s)\n", fname, smbcli_errstr(cli2->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": Test 4 open 2 of %s SUCCEEDED - should have failed (%s)\n", fname, smbcli_errstr(cli2->tree));
                CHECK_MAX_FAILURES(error_test40);
-               return False;
+               return false;
        }
 
-       torture_comment(tctx, "test 4 open 2 of %s gave %s (correct error should be %s)\n", fname, smbcli_errstr(cli2->tree), "sharing violation");
+       torture_comment(tctx, "Test 4 open 2 of %s gave %s (correct error should be %s)\n", fname, smbcli_errstr(cli2->tree), "sharing violation");
+
+       torture_comment(tctx, "non-io open test #4 passed.\n");
+error_test40:
 
        if (NT_STATUS_IS_ERR(smbcli_close(cli1->tree, fnum1))) {
-               torture_comment(tctx, "test 4 close 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
-               return False;
+               torture_comment(tctx, "Test 4 close 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
+       }
+       if (fnum2 != -1 && NT_STATUS_IS_ERR(smbcli_close(cli2->tree, fnum2))) {
+               torture_comment(tctx, "Test 4 close 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
        }
 
-       torture_comment(tctx, "non-io open test #4 passed.\n");
-error_test40:
+       torture_comment(tctx, "Test #5 testing 2 non-io opens (both with delete - both with file share delete)\n");
+       fnum1 = fnum2 = -1;
        smbcli_unlink(cli1->tree, fname);
 
-       torture_comment(tctx, "TEST #5 testing 2 non-io opens (both with delete - both with file share delete)\n");
-       
        fnum1 = smbcli_nt_create_full(cli1->tree, fname, 0, SEC_STD_DELETE|SEC_FILE_READ_ATTRIBUTE, FILE_ATTRIBUTE_NORMAL,
                                   NTCREATEX_SHARE_ACCESS_DELETE, NTCREATEX_DISP_OVERWRITE_IF, 0, 0);
 
        if (fnum1 == -1) {
-               torture_comment(tctx, "test 5 open 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": Test 5 open 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
                CHECK_MAX_FAILURES(error_test50);
-               return False;
+               return false;
        }
 
        fnum2 = smbcli_nt_create_full(cli2->tree, fname, 0, SEC_STD_DELETE|SEC_FILE_READ_ATTRIBUTE, FILE_ATTRIBUTE_NORMAL,
                                   NTCREATEX_SHARE_ACCESS_DELETE, NTCREATEX_DISP_OPEN_IF, 0, 0);
 
        if (fnum2 == -1) {
-               torture_comment(tctx, "test 5 open 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": Test 5 open 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
                CHECK_MAX_FAILURES(error_test50);
-               return False;
+               return false;
        }
 
+       torture_comment(tctx, "non-io open test #5 passed.\n");
+error_test50:
+
        if (NT_STATUS_IS_ERR(smbcli_close(cli1->tree, fnum1))) {
-               torture_comment(tctx, "test 5 close 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
-               return False;
+               torture_comment(tctx, "Test 5 close 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
        }
 
        if (NT_STATUS_IS_ERR(smbcli_close(cli2->tree, fnum2))) {
-               torture_comment(tctx, "test 5 close 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
-               return False;
+               torture_comment(tctx, "Test 5 close 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
        }
 
-       torture_comment(tctx, "non-io open test #5 passed.\n");
-error_test50:
-       torture_comment(tctx, "TEST #6 testing 1 non-io open, one io open\n");
-       
+       torture_comment(tctx, "Test #6 testing 1 non-io open, one io open\n");
+       fnum1 = fnum2 = -1;
        smbcli_unlink(cli1->tree, fname);
 
        fnum1 = smbcli_nt_create_full(cli1->tree, fname, 0, SEC_FILE_READ_DATA, FILE_ATTRIBUTE_NORMAL,
                                   NTCREATEX_SHARE_ACCESS_NONE, NTCREATEX_DISP_OVERWRITE_IF, 0, 0);
 
        if (fnum1 == -1) {
-               torture_comment(tctx, "test 6 open 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": Test 6 open 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
                CHECK_MAX_FAILURES(error_test60);
-               return False;
+               return false;
        }
 
        fnum2 = smbcli_nt_create_full(cli2->tree, fname, 0, SEC_FILE_READ_ATTRIBUTE, FILE_ATTRIBUTE_NORMAL,
                                   NTCREATEX_SHARE_ACCESS_READ, NTCREATEX_DISP_OPEN_IF, 0, 0);
 
        if (fnum2 == -1) {
-               torture_comment(tctx, "test 6 open 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": Test 6 open 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
                CHECK_MAX_FAILURES(error_test60);
-               return False;
+               return false;
        }
 
+       torture_comment(tctx, "non-io open test #6 passed.\n");
+error_test60:
+
        if (NT_STATUS_IS_ERR(smbcli_close(cli1->tree, fnum1))) {
-               torture_comment(tctx, "test 6 close 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
-               return False;
+               torture_comment(tctx, "Test 6 close 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
        }
 
        if (NT_STATUS_IS_ERR(smbcli_close(cli2->tree, fnum2))) {
-               torture_comment(tctx, "test 6 close 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
-               return False;
+               torture_comment(tctx, "Test 6 close 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
        }
 
-       torture_comment(tctx, "non-io open test #6 passed.\n");
-error_test60:
-       torture_comment(tctx, "TEST #7 testing 1 non-io open, one io open with delete\n");
-
+       torture_comment(tctx, "Test #7 testing 1 non-io open, one io open with delete\n");
+       fnum1 = fnum2 = -1;
        smbcli_unlink(cli1->tree, fname);
 
        fnum1 = smbcli_nt_create_full(cli1->tree, fname, 0, SEC_FILE_READ_DATA, FILE_ATTRIBUTE_NORMAL,
                                   NTCREATEX_SHARE_ACCESS_NONE, NTCREATEX_DISP_OVERWRITE_IF, 0, 0);
 
        if (fnum1 == -1) {
-               torture_comment(tctx, "test 7 open 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": Test 7 open 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
                CHECK_MAX_FAILURES(error_test70);
-               return False;
+               return false;
        }
 
        fnum2 = smbcli_nt_create_full(cli2->tree, fname, 0, SEC_STD_DELETE|SEC_FILE_READ_ATTRIBUTE, FILE_ATTRIBUTE_NORMAL,
                                   NTCREATEX_SHARE_ACCESS_READ|NTCREATEX_SHARE_ACCESS_DELETE, NTCREATEX_DISP_OPEN_IF, 0, 0);
 
        if (fnum2 != -1) {
-               torture_comment(tctx, "test 7 open 2 of %s SUCCEEDED - should have failed (%s)\n", fname, smbcli_errstr(cli2->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": Test 7 open 2 of %s SUCCEEDED - should have failed (%s)\n", fname, smbcli_errstr(cli2->tree));
                CHECK_MAX_FAILURES(error_test70);
-               return False;
+               return false;
        }
 
-       torture_comment(tctx, "test 7 open 2 of %s gave %s (correct error should be %s)\n", fname, smbcli_errstr(cli2->tree), "sharing violation");
-
-       if (NT_STATUS_IS_ERR(smbcli_close(cli1->tree, fnum1))) {
-               torture_comment(tctx, "test 7 close 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
-               return False;
-       }
+       torture_comment(tctx, "Test 7 open 2 of %s gave %s (correct error should be %s)\n", fname, smbcli_errstr(cli2->tree), "sharing violation");
 
        torture_comment(tctx, "non-io open test #7 passed.\n");
-
 error_test70:
 
-       torture_comment(tctx, "TEST #8 testing one normal open, followed by lock, followed by open with truncate\n");
+       if (NT_STATUS_IS_ERR(smbcli_close(cli1->tree, fnum1))) {
+               torture_comment(tctx, "Test 7 close 1 of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
+       }
+       if (fnum2 != -1 && NT_STATUS_IS_ERR(smbcli_close(cli2->tree, fnum2))) {
+               torture_comment(tctx, "Test 7 close 2 of %s failed (%s)\n", fname, smbcli_errstr(cli2->tree));
+       }
 
+       torture_comment(tctx, "Test #8 testing one normal open, followed by lock, followed by open with truncate\n");
+       fnum1 = fnum2 = -1;
        smbcli_unlink(cli1->tree, fname);
 
        fnum1 = smbcli_open(cli1->tree, fname, O_RDWR|O_CREAT, DENY_NONE);
        if (fnum1 == -1) {
                torture_comment(tctx, "(8) open (1) of %s failed (%s)\n", fname, smbcli_errstr(cli1->tree));
-               return False;
+               return false;
        }
        
        /* write 20 bytes. */
@@ -1177,56 +1220,61 @@ error_test70:
 
        if (smbcli_write(cli1->tree, fnum1, 0, buf, 0, 20) != 20) {
                torture_comment(tctx, "(8) write failed (%s)\n", smbcli_errstr(cli1->tree));
-               correct = False;
+               correct = false;
        }
 
        /* Ensure size == 20. */
        if (NT_STATUS_IS_ERR(smbcli_getatr(cli1->tree, fname, NULL, &fsize, NULL))) {
-               torture_comment(tctx, "(8) getatr (1) failed (%s)\n", smbcli_errstr(cli1->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": (8) getatr (1) failed (%s)\n", smbcli_errstr(cli1->tree));
                CHECK_MAX_FAILURES(error_test80);
-               return False;
+               return false;
        }
        
        if (fsize != 20) {
-               torture_comment(tctx, "(8) file size != 20\n");
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": (8) file size %lu != 20\n", (unsigned long)fsize);
                CHECK_MAX_FAILURES(error_test80);
-               return False;
+               return false;
        }
 
        /* Get an exclusive lock on the open file. */
        if (NT_STATUS_IS_ERR(smbcli_lock(cli1->tree, fnum1, 0, 4, 0, WRITE_LOCK))) {
-               torture_comment(tctx, "(8) lock1 failed (%s)\n", smbcli_errstr(cli1->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": (8) lock1 failed (%s)\n", smbcli_errstr(cli1->tree));
                CHECK_MAX_FAILURES(error_test80);
-               return False;
+               return false;
        }
 
        fnum2 = smbcli_open(cli1->tree, fname, O_RDWR|O_TRUNC, DENY_NONE);
        if (fnum1 == -1) {
                torture_comment(tctx, "(8) open (2) of %s with truncate failed (%s)\n", fname, smbcli_errstr(cli1->tree));
-               return False;
+               return false;
        }
 
        /* Ensure size == 0. */
        if (NT_STATUS_IS_ERR(smbcli_getatr(cli1->tree, fname, NULL, &fsize, NULL))) {
-               torture_comment(tctx, "(8) getatr (2) failed (%s)\n", smbcli_errstr(cli1->tree));
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": (8) getatr (2) failed (%s)\n", smbcli_errstr(cli1->tree));
                CHECK_MAX_FAILURES(error_test80);
-               return False;
+               return false;
        }
        
        if (fsize != 0) {
-               torture_comment(tctx, "(8) file size != 0\n");
+               torture_result(tctx, TORTURE_FAIL,
+                       __location__ ": (8) file size %lu != 0\n", (unsigned long)fsize);
                CHECK_MAX_FAILURES(error_test80);
-               return False;
+               return false;
        }
 
        if (NT_STATUS_IS_ERR(smbcli_close(cli1->tree, fnum1))) {
                torture_comment(tctx, "(8) close1 failed (%s)\n", smbcli_errstr(cli1->tree));
-               return False;
+               return false;
        }
        
        if (NT_STATUS_IS_ERR(smbcli_close(cli1->tree, fnum2))) {
                torture_comment(tctx, "(8) close1 failed (%s)\n", smbcli_errstr(cli1->tree));
-               return False;
+               return false;
        }
        
 error_test80:
@@ -1235,7 +1283,7 @@ error_test80:
 
        smbcli_unlink(cli1->tree, fname);
 
-       return correct;
+       return failures > 0 ? false : correct;
 }
 
 /* FIRST_DESIRED_ACCESS   0xf019f */
@@ -1315,7 +1363,7 @@ static bool run_iometer(struct torture_context *tctx,
 
        ops = 0;
 
-       while (True) {
+       while (true) {
                int i, num_reads, num_writes;
 
                num_reads = random() % 10;
@@ -1344,18 +1392,16 @@ static bool run_iometer(struct torture_context *tctx,
                                       smbcli_errstr(cli->tree)));
                }
        }
-
-       return true;
 }
 
 /**
   tries variants of chkpath
  */
-static BOOL torture_chkpath_test(struct torture_context *tctx, 
+static bool torture_chkpath_test(struct torture_context *tctx, 
                                                                 struct smbcli_state *cli)
 {
        int fnum;
-       BOOL ret;
+       bool ret;
 
        torture_comment(tctx, "Testing valid and invalid paths\n");
 
@@ -1366,29 +1412,29 @@ static BOOL torture_chkpath_test(struct torture_context *tctx,
 
        if (NT_STATUS_IS_ERR(smbcli_mkdir(cli->tree, "\\chkpath.dir"))) {
                torture_comment(tctx, "mkdir1 failed : %s\n", smbcli_errstr(cli->tree));
-               return False;
+               return false;
        }
 
        if (NT_STATUS_IS_ERR(smbcli_mkdir(cli->tree, "\\chkpath.dir\\dir2"))) {
                torture_comment(tctx, "mkdir2 failed : %s\n", smbcli_errstr(cli->tree));
-               return False;
+               return false;
        }
 
        fnum = smbcli_open(cli->tree, "\\chkpath.dir\\foo.txt", O_RDWR|O_CREAT|O_EXCL, DENY_NONE);
        if (fnum == -1) {
                torture_comment(tctx, "open1 failed (%s)\n", smbcli_errstr(cli->tree));
-               return False;
+               return false;
        }
        smbcli_close(cli->tree, fnum);
 
        if (NT_STATUS_IS_ERR(smbcli_chkpath(cli->tree, "\\chkpath.dir"))) {
                torture_comment(tctx, "chkpath1 failed: %s\n", smbcli_errstr(cli->tree));
-               ret = False;
+               ret = false;
        }
 
        if (NT_STATUS_IS_ERR(smbcli_chkpath(cli->tree, "\\chkpath.dir\\dir2"))) {
                torture_comment(tctx, "chkpath2 failed: %s\n", smbcli_errstr(cli->tree));
-               ret = False;
+               ret = false;
        }
 
        if (NT_STATUS_IS_ERR(smbcli_chkpath(cli->tree, "\\chkpath.dir\\foo.txt"))) {
@@ -1396,7 +1442,7 @@ static BOOL torture_chkpath_test(struct torture_context *tctx,
                                  NT_STATUS_NOT_A_DIRECTORY);
        } else {
                torture_comment(tctx, "* chkpath on a file should fail\n");
-               ret = False;
+               ret = false;
        }
 
        if (NT_STATUS_IS_ERR(smbcli_chkpath(cli->tree, "\\chkpath.dir\\bar.txt"))) {
@@ -1404,7 +1450,7 @@ static BOOL torture_chkpath_test(struct torture_context *tctx,
                                  NT_STATUS_OBJECT_NAME_NOT_FOUND);
        } else {
                torture_comment(tctx, "* chkpath on a non existent file should fail\n");
-               ret = False;
+               ret = false;
        }
 
        if (NT_STATUS_IS_ERR(smbcli_chkpath(cli->tree, "\\chkpath.dir\\dirxx\\bar.txt"))) {
@@ -1412,7 +1458,7 @@ static BOOL torture_chkpath_test(struct torture_context *tctx,
                                  NT_STATUS_OBJECT_PATH_NOT_FOUND);
        } else {
                torture_comment(tctx, "* chkpath on a non existent component should fail\n");
-               ret = False;
+               ret = false;
        }
 
        smbcli_rmdir(cli->tree, "\\chkpath.dir\\dir2");
@@ -1426,44 +1472,38 @@ static BOOL torture_chkpath_test(struct torture_context *tctx,
  * This is a test to excercise some weird Samba3 error paths.
  */
 
-static BOOL torture_samba3_errorpaths(struct torture_context *tctx)
+static bool torture_samba3_errorpaths(struct torture_context *tctx)
 {
-       BOOL nt_status_support;
+       bool nt_status_support;
        struct smbcli_state *cli_nt = NULL, *cli_dos = NULL;
-       BOOL result = False;
+       bool result = false;
        int fnum;
        const char *os2_fname = ".+,;=[].";
        const char *dname = "samba3_errordir";
        union smb_open io;
-       TALLOC_CTX *mem_ctx = talloc_init("samba3_errorpaths");
        NTSTATUS status;
 
-       if (mem_ctx == NULL) {
-               torture_comment(tctx, "talloc_init failed\n");
-               return False;
-       }
+       nt_status_support = lpcfg_nt_status_support(tctx->lp_ctx);
 
-       nt_status_support = lp_nt_status_support();
-
-       if (!lp_set_cmdline("nt status support", "yes")) {
+       if (!lpcfg_set_cmdline(tctx->lp_ctx, "nt status support", "yes")) {
                torture_comment(tctx, "Could not set 'nt status support = yes'\n");
                goto fail;
        }
 
-       if (!torture_open_connection(&cli_nt, 0)) {
+       if (!torture_open_connection(&cli_nt, tctx, 0)) {
                goto fail;
        }
 
-       if (!lp_set_cmdline("nt status support", "no")) {
+       if (!lpcfg_set_cmdline(tctx->lp_ctx, "nt status support", "no")) {
                torture_comment(tctx, "Could not set 'nt status support = yes'\n");
                goto fail;
        }
 
-       if (!torture_open_connection(&cli_dos, 1)) {
+       if (!torture_open_connection(&cli_dos, tctx, 1)) {
                goto fail;
        }
 
-       if (!lp_set_cmdline("nt status support",
+       if (!lpcfg_set_cmdline(tctx->lp_ctx, "nt status support",
                            nt_status_support ? "yes":"no")) {
                torture_comment(tctx, "Could not reset 'nt status support = yes'");
                goto fail;
@@ -1480,7 +1520,7 @@ static BOOL torture_samba3_errorpaths(struct torture_context *tctx)
 
        io.generic.level = RAW_OPEN_NTCREATEX;
        io.ntcreatex.in.flags = NTCREATEX_FLAGS_EXTENDED;
-       io.ntcreatex.in.root_fid = 0;
+       io.ntcreatex.in.root_fid.fnum = 0;
        io.ntcreatex.in.access_mask = SEC_RIGHTS_FILE_ALL;
        io.ntcreatex.in.alloc_size = 1024*1024;
        io.ntcreatex.in.file_attr = FILE_ATTRIBUTE_DIRECTORY;
@@ -1491,14 +1531,14 @@ static BOOL torture_samba3_errorpaths(struct torture_context *tctx)
        io.ntcreatex.in.security_flags = 0;
        io.ntcreatex.in.fname = dname;
 
-       status = smb_raw_open(cli_nt->tree, mem_ctx, &io);
+       status = smb_raw_open(cli_nt->tree, tctx, &io);
        if (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
                torture_comment(tctx, "(%s) incorrect status %s should be %s\n",
                       __location__, nt_errstr(status),
                       nt_errstr(NT_STATUS_OBJECT_NAME_COLLISION));
                goto fail;
        }
-       status = smb_raw_open(cli_dos->tree, mem_ctx, &io);
+       status = smb_raw_open(cli_dos->tree, tctx, &io);
        if (!NT_STATUS_EQUAL(status, NT_STATUS_DOS(ERRDOS, ERRfilexists))) {
                torture_comment(tctx, "(%s) incorrect status %s should be %s\n",
                       __location__, nt_errstr(status),
@@ -1548,7 +1588,7 @@ static BOOL torture_samba3_errorpaths(struct torture_context *tctx)
        }
 
        io.ntcreatex.in.create_options = NTCREATEX_OPTIONS_DIRECTORY;
-       status = smb_raw_open(cli_nt->tree, mem_ctx, &io);
+       status = smb_raw_open(cli_nt->tree, tctx, &io);
        if (!NT_STATUS_EQUAL(status, NT_STATUS_OBJECT_NAME_COLLISION)) {
                torture_comment(tctx, "(%s) incorrect status %s should be %s\n",
                       __location__, nt_errstr(status),
@@ -1556,7 +1596,7 @@ static BOOL torture_samba3_errorpaths(struct torture_context *tctx)
                goto fail;
        }
 
-       status = smb_raw_open(cli_dos->tree, mem_ctx, &io);
+       status = smb_raw_open(cli_dos->tree, tctx, &io);
        if (!NT_STATUS_EQUAL(status, NT_STATUS_DOS(ERRDOS, ERRfilexists))) {
                torture_comment(tctx, "(%s) incorrect status %s should be %s\n",
                       __location__, nt_errstr(status),
@@ -1614,7 +1654,7 @@ static BOOL torture_samba3_errorpaths(struct torture_context *tctx)
                smbcli_close(cli_nt->tree, fnum);
 
                io.generic.level = RAW_OPEN_NTCREATEX;
-               io.ntcreatex.in.root_fid = 0;
+               io.ntcreatex.in.root_fid.fnum = 0;
                io.ntcreatex.in.access_mask = SEC_RIGHTS_FILE_ALL;
                io.ntcreatex.in.alloc_size = 0;
                io.ntcreatex.in.file_attr = FILE_ATTRIBUTE_DIRECTORY;
@@ -1629,25 +1669,25 @@ static BOOL torture_samba3_errorpaths(struct torture_context *tctx)
                io.ntcreatex.in.fname = fname;
                io.ntcreatex.in.flags = 0;
 
-               status = smb_raw_open(cli_nt->tree, mem_ctx, &io);
+               status = smb_raw_open(cli_nt->tree, tctx, &io);
                if (!NT_STATUS_EQUAL(status, NT_STATUS_NOT_A_DIRECTORY)) {
                        torture_comment(tctx, "ntcreate as dir gave %s, "
                                        "expected NT_STATUS_NOT_A_DIRECTORY\n",
                                        nt_errstr(status));
-                       result = False;
+                       result = false;
                }
 
                if (NT_STATUS_IS_OK(status)) {
                        smbcli_close(cli_nt->tree, io.ntcreatex.out.file.fnum);
                }
 
-               status = smb_raw_open(cli_dos->tree, mem_ctx, &io);
+               status = smb_raw_open(cli_dos->tree, tctx, &io);
                if (!NT_STATUS_EQUAL(status, NT_STATUS_DOS(ERRDOS,
                                                           ERRbaddirectory))) {
                        torture_comment(tctx, "ntcreate as dir gave %s, "
                                        "expected NT_STATUS_NOT_A_DIRECTORY\n",
                                        nt_errstr(status));
-                       result = False;
+                       result = false;
                }
 
                if (NT_STATUS_IS_OK(status)) {
@@ -1658,7 +1698,7 @@ static BOOL torture_samba3_errorpaths(struct torture_context *tctx)
                smbcli_unlink(cli_nt->tree, fname);
        }
 
-       if (!torture_setting_bool(tctx, "samba3", False)) {
+       if (!torture_setting_bool(tctx, "samba3", false)) {
                goto done;
        }
 
@@ -1697,7 +1737,7 @@ static BOOL torture_samba3_errorpaths(struct torture_context *tctx)
        }
 
  done:
-       result = True;
+       result = true;
 
  fail:
        if (cli_dos != NULL) {
@@ -1710,59 +1750,179 @@ static BOOL torture_samba3_errorpaths(struct torture_context *tctx)
        return result;
 }
 
+/**
+  This checks file/dir birthtime
+*/
+static void list_fn(struct clilist_file_info *finfo, const char *name,
+                       void *state){
+
+       /* Just to change dir access time*/
+       sleep(5);
+
+}
+
+static bool run_birthtimetest(struct torture_context *tctx,
+                                                  struct smbcli_state *cli)
+{
+       int fnum;
+       size_t size;
+       time_t c_time, a_time, m_time, w_time, c_time1;
+       const char *fname = "\\birthtime.tst";
+       const char *dname = "\\birthtime";
+       const char *fname2 = "\\birthtime\\birthtime.tst";
+       bool correct = true;
+       uint8_t buf[16];
+
+
+       smbcli_unlink(cli->tree, fname);
+
+       torture_comment(tctx, "Testing Birthtime for File\n");
+
+       /* Save File birthtime/creationtime */
+       fnum = smbcli_open(cli->tree, fname, O_RDWR | O_CREAT | O_TRUNC,
+                               DENY_NONE);
+       if (NT_STATUS_IS_ERR(smbcli_qfileinfo(cli->tree, fnum, NULL, &size,
+                               &c_time, &a_time, &m_time, NULL, NULL))) {
+               torture_comment(tctx, "ERROR: qfileinfo failed (%s)\n",
+                               smbcli_errstr(cli->tree));
+               correct = false;
+       }
+       smbcli_close(cli->tree, fnum);
+
+       sleep(10);
+
+       /* Change in File attribute changes file change time*/
+       smbcli_setatr(cli->tree, fname, FILE_ATTRIBUTE_SYSTEM, 0);
+
+       fnum = smbcli_open(cli->tree, fname, O_RDWR | O_CREAT , DENY_NONE);
+       /* Writing updates modification time*/
+       smbcli_smbwrite(cli->tree, fnum,  &fname, 0, sizeof(fname));
+       /*Reading updates access time */
+       smbcli_read(cli->tree, fnum, buf, 0, 13);
+       smbcli_close(cli->tree, fnum);
+
+       if (NT_STATUS_IS_ERR(smbcli_qpathinfo2(cli->tree, fname, &c_time1,
+                       &a_time, &m_time, &w_time, &size, NULL, NULL))) {
+               torture_comment(tctx, "ERROR: qpathinfo2 failed (%s)\n",
+                       smbcli_errstr(cli->tree));
+               correct = false;
+       } else {
+               fprintf(stdout, "c_time = %li, c_time1 = %li\n",
+                       (long) c_time, (long) c_time1);
+               if (c_time1 != c_time) {
+                       torture_comment(tctx, "This system updated file \
+                                       birth times! Not expected!\n");
+                       correct = false;
+               }
+       }
+       smbcli_unlink(cli->tree, fname);
+
+       torture_comment(tctx, "Testing Birthtime for Directory\n");
+
+       /* check if the server does not update the directory birth time
+          when creating a new file */
+       if (NT_STATUS_IS_ERR(smbcli_mkdir(cli->tree, dname))) {
+               torture_comment(tctx, "ERROR: mkdir failed (%s)\n",
+                               smbcli_errstr(cli->tree));
+               correct = false;
+       }
+       sleep(3);
+       if (NT_STATUS_IS_ERR(smbcli_qpathinfo2(cli->tree, "\\birthtime\\",
+                       &c_time,&a_time,&m_time,&w_time, &size, NULL, NULL))){
+               torture_comment(tctx, "ERROR: qpathinfo2 failed (%s)\n",
+                               smbcli_errstr(cli->tree));
+               correct = false;
+       }
+
+       /* Creating a new file changes dir modification time and change time*/
+       smbcli_unlink(cli->tree, fname2);
+       fnum = smbcli_open(cli->tree, fname2, O_RDWR | O_CREAT | O_TRUNC,
+                       DENY_NONE);
+       smbcli_smbwrite(cli->tree, fnum,  &fnum, 0, sizeof(fnum));
+       smbcli_read(cli->tree, fnum, buf, 0, 13);
+       smbcli_close(cli->tree, fnum);
+
+       /* dir listing changes dir access time*/
+       smbcli_list(cli->tree, "\\birthtime\\*", 0, list_fn, cli );
+
+       if (NT_STATUS_IS_ERR(smbcli_qpathinfo2(cli->tree, "\\birthtime\\",
+                       &c_time1, &a_time, &m_time,&w_time,&size,NULL,NULL))){
+               torture_comment(tctx, "ERROR: qpathinfo2 failed (%s)\n",
+                               smbcli_errstr(cli->tree));
+               correct = false;
+       } else {
+               fprintf(stdout, "c_time = %li, c_time1 = %li\n",
+                       (long) c_time, (long) c_time1);
+               if (c_time1 != c_time) {
+                       torture_comment(tctx, "This system  updated directory \
+                                       birth times! Not Expected!\n");
+                       correct = false;
+               }
+       }
+       smbcli_unlink(cli->tree, fname2);
+       smbcli_rmdir(cli->tree, dname);
+
+       return correct;
+}
+
 
 NTSTATUS torture_base_init(void)
 {
-       struct torture_suite *suite = torture_suite_create(
-                                                                       talloc_autofree_context(), "BASE");
-
-       torture_suite_add_2smb_test(suite, "FDPASS", run_fdpasstest);
-       torture_suite_add_suite(suite, torture_base_locktest());
-       torture_suite_add_1smb_test(suite, "UNLINK", torture_unlinktest);
-       torture_suite_add_1smb_test(suite, "ATTR",   run_attrtest);
-       torture_suite_add_1smb_test(suite, "TRANS2", run_trans2test);
-       torture_suite_add_simple_test(suite, "NEGNOWAIT", run_negprot_nowait);
-       torture_suite_add_1smb_test(suite, "DIR1",  torture_dirtest1);
-       torture_suite_add_1smb_test(suite, "DIR2",  torture_dirtest2);
-       torture_suite_add_1smb_test(suite, "DENY1",  torture_denytest1);
-       torture_suite_add_2smb_test(suite, "DENY2",  torture_denytest2);
-       torture_suite_add_2smb_test(suite, "DENY3",  torture_denytest3);
-       torture_suite_add_1smb_test(suite, "DENYDOS",  torture_denydos_sharing);
-       torture_suite_add_smb_multi_test(suite, "NTDENY1", torture_ntdenytest1);
-       torture_suite_add_2smb_test(suite, "NTDENY2",  torture_ntdenytest2);
-       torture_suite_add_1smb_test(suite, "TCON",  run_tcon_test);
-       torture_suite_add_1smb_test(suite, "TCONDEV",  run_tcon_devtype_test);
-       torture_suite_add_1smb_test(suite, "VUID", run_vuidtest);
-       torture_suite_add_2smb_test(suite, "RW1",  run_readwritetest);
-       torture_suite_add_2smb_test(suite, "OPEN", run_opentest);
-       torture_suite_add_smb_multi_test(suite, "DEFER_OPEN", run_deferopen);
-       torture_suite_add_1smb_test(suite, "XCOPY", run_xcopy);
-       torture_suite_add_1smb_test(suite, "IOMETER", run_iometer);
-       torture_suite_add_1smb_test(suite, "RENAME", torture_test_rename);
+       struct torture_suite *suite = torture_suite_create(talloc_autofree_context(), "base");
+
+       torture_suite_add_2smb_test(suite, "fdpass", run_fdpasstest);
+       torture_suite_add_suite(suite, torture_base_locktest(suite));
+       torture_suite_add_1smb_test(suite, "unlink", torture_unlinktest);
+       torture_suite_add_1smb_test(suite, "attr",   run_attrtest);
+       torture_suite_add_1smb_test(suite, "trans2", run_trans2test);
+       torture_suite_add_1smb_test(suite, "birthtime", run_birthtimetest);
+       torture_suite_add_simple_test(suite, "negnowait", run_negprot_nowait);
+       torture_suite_add_1smb_test(suite, "dir1",  torture_dirtest1);
+       torture_suite_add_1smb_test(suite, "dir2",  torture_dirtest2);
+       torture_suite_add_1smb_test(suite, "deny1",  torture_denytest1);
+       torture_suite_add_2smb_test(suite, "deny2",  torture_denytest2);
+       torture_suite_add_2smb_test(suite, "deny3",  torture_denytest3);
+       torture_suite_add_1smb_test(suite, "denydos",  torture_denydos_sharing);
+       torture_suite_add_smb_multi_test(suite, "ntdeny1", torture_ntdenytest1);
+       torture_suite_add_2smb_test(suite, "ntdeny2",  torture_ntdenytest2);
+       torture_suite_add_1smb_test(suite, "tcon",  run_tcon_test);
+       torture_suite_add_1smb_test(suite, "tcondev",  run_tcon_devtype_test);
+       torture_suite_add_1smb_test(suite, "vuid", run_vuidtest);
+       torture_suite_add_2smb_test(suite, "rw1",  run_readwritetest);
+       torture_suite_add_2smb_test(suite, "open", run_opentest);
+       torture_suite_add_smb_multi_test(suite, "defer_open", run_deferopen);
+       torture_suite_add_1smb_test(suite, "xcopy", run_xcopy);
+       torture_suite_add_1smb_test(suite, "iometer", run_iometer);
+       torture_suite_add_1smb_test(suite, "rename", torture_test_rename);
        torture_suite_add_suite(suite, torture_test_delete());
-       torture_suite_add_1smb_test(suite, "PROPERTIES", torture_test_properties);
-       torture_suite_add_1smb_test(suite, "MANGLE", torture_mangle);
-       torture_suite_add_1smb_test(suite, "OPENATTR", torture_openattrtest);
-       torture_suite_add_1smb_test(suite, "CHARSET", torture_charset);
-       torture_suite_add_1smb_test(suite, "CHKPATH",  torture_chkpath_test);
-       torture_suite_add_1smb_test(suite, "SECLEAK",  torture_sec_leak);
-       torture_suite_add_simple_test(suite, "DISCONNECT",  torture_disconnect);
+       torture_suite_add_1smb_test(suite, "properties", torture_test_properties);
+       torture_suite_add_1smb_test(suite, "mangle", torture_mangle);
+       torture_suite_add_1smb_test(suite, "openattr", torture_openattrtest);
+       torture_suite_add_1smb_test(suite, "winattr", torture_winattrtest);
+       torture_suite_add_suite(suite, torture_charset(suite));
+       torture_suite_add_1smb_test(suite, "chkpath",  torture_chkpath_test);
+       torture_suite_add_1smb_test(suite, "secleak",  torture_sec_leak);
+       torture_suite_add_simple_test(suite, "disconnect",  torture_disconnect);
        torture_suite_add_suite(suite, torture_delay_write());
-       torture_suite_add_simple_test(suite, "SAMBA3ERROR", torture_samba3_errorpaths);
-
-       torture_suite_add_1smb_test(suite, "CASETABLE", torture_casetable);
-       torture_suite_add_1smb_test(suite, "UTABLE", torture_utable);
-       torture_suite_add_simple_test(suite, "SMB", torture_smb_scan);
-       torture_suite_add_suite(suite, torture_trans2_aliases());
-       torture_suite_add_1smb_test(suite, "TRANS2-SCAN", torture_trans2_scan);
-       torture_suite_add_1smb_test(suite, "NTTRANS", torture_nttrans_scan);
-
-       torture_suite_add_simple_test(suite, "BENCH-HOLDCON", torture_holdcon);
-       torture_suite_add_simple_test(suite, "BENCH-READWRITE", run_benchrw);
-       torture_suite_add_smb_multi_test(suite, "BENCH-TORTURE", run_torture);
-       torture_suite_add_1smb_test(suite, "SCAN-PIPE_NUMBER", run_pipe_number);
-       torture_suite_add_1smb_test(suite, "SCAN-IOCTL", torture_ioctl_test);
-       torture_suite_add_smb_multi_test(suite, "SCAN-MAXFID", run_maxfidtest);
+       torture_suite_add_simple_test(suite, "samba3error", torture_samba3_errorpaths);
+       torture_suite_add_1smb_test(suite, "casetable", torture_casetable);
+       torture_suite_add_1smb_test(suite, "utable", torture_utable);
+       torture_suite_add_simple_test(suite, "smb", torture_smb_scan);
+       torture_suite_add_suite(suite, torture_trans2_aliases(suite));
+       torture_suite_add_1smb_test(suite, "trans2-scan", torture_trans2_scan);
+       torture_suite_add_1smb_test(suite, "nttrans", torture_nttrans_scan);
+       torture_suite_add_1smb_test(suite, "createx_access", torture_createx_access);
+       torture_suite_add_2smb_test(suite, "createx_sharemodes_file", torture_createx_sharemodes_file);
+       torture_suite_add_2smb_test(suite, "createx_sharemodes_dir", torture_createx_sharemodes_dir);
+       torture_suite_add_1smb_test(suite, "maximum_allowed", torture_maximum_allowed);
+
+       torture_suite_add_simple_test(suite, "bench-holdcon", torture_holdcon);
+       torture_suite_add_1smb_test(suite, "bench-holdopen", torture_holdopen);
+       torture_suite_add_simple_test(suite, "bench-readwrite", run_benchrw);
+       torture_suite_add_smb_multi_test(suite, "bench-torture", run_torture);
+       torture_suite_add_1smb_test(suite, "scan-pipe_number", run_pipe_number);
+       torture_suite_add_1smb_test(suite, "scan-ioctl", torture_ioctl_test);
+       torture_suite_add_smb_multi_test(suite, "scan-maxfid", run_maxfidtest);
 
        suite->description = talloc_strdup(suite, 
                                        "Basic SMB tests (imported from the original smbtorture)");