gentest: Fix a warning.
[ira/wip.git] / source / torture / gentest.c
index 80b09ee6be7be1e61beee2a73fc275d3491ca9ca..d50393baf0e884b6a9f3b91e6c20516ef7663639 100644 (file)
@@ -5,7 +5,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,
@@ -14,8 +14,7 @@
    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 "libcli/libcli.h"
 #include "libcli/raw/libcliraw.h"
 #include "librpc/gen_ndr/security.h"
+#include "auth/credentials/credentials.h"
+#include "libcli/resolve/resolve.h"
 #include "auth/gensec/gensec.h"
+#include "param/param.h"
+#include "dynconfig.h"
 
 #define NSERVERS 2
 #define NINSTANCES 2
 
 /* global options */
 static struct gentest_options {
-       BOOL showall;
-       BOOL analyze;
-       BOOL analyze_always;
-       BOOL analyze_continuous;
+       bool showall;
+       bool analyze;
+       bool analyze_always;
+       bool analyze_continuous;
        uint_t max_open_handles;
        uint_t seed;
        uint_t numops;
-       BOOL use_oplocks;
+       bool use_oplocks;
        char **ignore_patterns;
        const char *seeds_file;
-       BOOL use_preset_seeds;
-       BOOL fast_reconnect;
+       bool use_preset_seeds;
+       bool fast_reconnect;
 } options;
 
 /* mapping between open handles on the server and local handles */
 static struct {
-       BOOL active;
+       bool active;
        uint_t instance;
        uint_t server_fnum[NSERVERS];
        const char *name;
@@ -67,24 +70,24 @@ static struct {
 /* the seeds and flags for each operation */
 static struct {
        uint_t seed;
-       BOOL disabled;
+       bool disabled;
 } *op_parms;
 
 
 /* oplock break info */
 static struct {
-       BOOL got_break;
+       bool got_break;
        uint16_t fnum;
        uint16_t handle;
        uint8_t level;
-       BOOL do_close;
+       bool do_close;
 } oplocks[NSERVERS][NINSTANCES];
 
 /* change notify reply info */
 static struct {
        int notify_count;
        NTSTATUS status;
-       struct smb_notify notify;
+       union smb_notify notify;
 } notifies[NSERVERS][NINSTANCES];
 
 /* info relevant to the current operation */
@@ -100,32 +103,32 @@ static struct {
 
 #define BAD_HANDLE 0xFFFE
 
-static BOOL oplock_handler(struct smbcli_transport *transport, uint16_t tid, uint16_t fnum, uint8_t level, void *private);
+static bool oplock_handler(struct smbcli_transport *transport, uint16_t tid, uint16_t fnum, uint8_t level, void *private);
 static void idle_func(struct smbcli_transport *transport, void *private);
 
 /*
   check if a string should be ignored. This is used as the basis
   for all error ignore settings
 */
-static BOOL ignore_pattern(const char *str)
+static bool ignore_pattern(const char *str)
 {
        int i;
-       if (!options.ignore_patterns) return False;
+       if (!options.ignore_patterns) return false;
 
        for (i=0;options.ignore_patterns[i];i++) {
                if (strcmp(options.ignore_patterns[i], str) == 0 ||
                    gen_fnmatch(options.ignore_patterns[i], str) == 0) {
                        DEBUG(2,("Ignoring '%s'\n", str));
-                       return True;
+                       return true;
                }
        }
-       return False;
+       return false;
 }
 
 /***************************************************** 
 connect to the servers
 *******************************************************/
-static BOOL connect_servers_fast(void)
+static bool connect_servers_fast(void)
 {
        int h, i;
 
@@ -135,13 +138,13 @@ static BOOL connect_servers_fast(void)
                for (i=0;i<NSERVERS;i++) {
                        if (NT_STATUS_IS_ERR((smbcli_close(servers[i].cli[open_handles[h].instance]->tree,
                                       open_handles[h].server_fnum[i])))) {
-                               return False;
+                               return false;
                        }
-                       open_handles[h].active = False;
+                       open_handles[h].active = false;
                }
        }
 
-       return True;
+       return true;
 }
 
 
@@ -150,13 +153,13 @@ static BOOL connect_servers_fast(void)
 /***************************************************** 
 connect to the servers
 *******************************************************/
-static BOOL connect_servers(void)
+static bool connect_servers(struct loadparm_context *lp_ctx)
 {
        int i, j;
 
        if (options.fast_reconnect && servers[0].cli[0]) {
                if (connect_servers_fast()) {
-                       return True;
+                       return true;
                }
        }
 
@@ -173,6 +176,7 @@ static BOOL connect_servers(void)
 
        for (i=0;i<NSERVERS;i++) {
                for (j=0;j<NINSTANCES;j++) {
+                       struct smbcli_options smb_options;
                        NTSTATUS status;
                        printf("Connecting to \\\\%s\\%s as %s - instance %d\n",
                               servers[i].server_name, servers[i].share_name, 
@@ -181,15 +185,19 @@ static BOOL connect_servers(void)
                        cli_credentials_set_workstation(servers[i].credentials, 
                                                        "gentest", CRED_SPECIFIED);
 
+                       lp_smbcli_options(lp_ctx, &smb_options);
                        status = smbcli_full_connection(NULL, &servers[i].cli[j],
                                                        servers[i].server_name, 
+                                                       lp_smb_ports(lp_ctx),
                                                        servers[i].share_name, NULL, 
-                                                       servers[i].credentials, NULL);
+                                                       servers[i].credentials, 
+                                                       lp_resolve_context(lp_ctx), 
+                                                       NULL, &smb_options);
                        if (!NT_STATUS_IS_OK(status)) {
                                printf("Failed to connect to \\\\%s\\%s - %s\n",
                                       servers[i].server_name, servers[i].share_name,
                                       nt_errstr(status));
-                               return False;
+                               return false;
                        }
 
                        smbcli_oplock_handler(servers[i].cli[j]->transport, oplock_handler, NULL);
@@ -197,7 +205,7 @@ static BOOL connect_servers(void)
                }
        }
 
-       return True;
+       return true;
 }
 
 /*
@@ -206,7 +214,7 @@ static BOOL connect_servers(void)
 static uint_t time_skew(void)
 {
        uint_t ret;
-       ret = ABS(servers[0].cli[0]->transport->negotiate.server_time -
+       ret = labs(servers[0].cli[0]->transport->negotiate.server_time -
                  servers[1].cli[0]->transport->negotiate.server_time);
        return ret + 300;
 }
@@ -254,7 +262,7 @@ static void gen_add_handle(int instance, const char *name, uint16_t fnums[NSERVE
        for (i=0;i<NSERVERS;i++) {
                open_handles[h].server_fnum[i] = fnums[i];
                open_handles[h].instance = instance;
-               open_handles[h].active = True;
+               open_handles[h].active = true;
                open_handles[h].name = name;
        }
        num_open_handles++;
@@ -274,7 +282,7 @@ static void gen_remove_handle(int instance, uint16_t fnums[NSERVERS])
        for (h=0;h<options.max_open_handles;h++) {
                if (instance == open_handles[h].instance &&
                    open_handles[h].server_fnum[0] == fnums[0]) {
-                       open_handles[h].active = False;                 
+                       open_handles[h].active = false;                 
                        num_open_handles--;
                        printf("CLOSE num_open_handles=%d h=%d s1=0x%x s2=0x%x (%s)\n", 
                               num_open_handles, h, 
@@ -288,9 +296,9 @@ static void gen_remove_handle(int instance, uint16_t fnums[NSERVERS])
 }
 
 /*
-  return True with 'chance' probability as a percentage
+  return true with 'chance' probability as a percentage
 */
-static BOOL gen_chance(uint_t chance)
+static bool gen_chance(uint_t chance)
 {
        return ((random() % 100) <= chance);
 }
@@ -472,7 +480,7 @@ static uint32_t gen_bits_mask2(uint32_t mask1, uint32_t mask2)
 /*
   generate a boolean
 */
-static BOOL gen_bool(void)
+static bool gen_bool(void)
 {
        return gen_bits_mask2(0x1, 0xFF);
 }
@@ -656,6 +664,8 @@ static struct ea_struct gen_ea_struct(void)
                               "ASOMEWHATLONGERATTRIBUTEVALUE"};
        int i;
 
+       ZERO_STRUCT(ea);
+
        do {
                i = gen_int_range(0, ARRAY_SIZE(names)-1);
        } while (ignore_pattern(names[i]));
@@ -680,7 +690,7 @@ static struct ea_struct gen_ea_struct(void)
 */
 static void async_notify(struct smbcli_request *req)
 {
-       struct smb_notify notify;
+       union smb_notify notify;
        NTSTATUS status;
        int i, j;
        uint16_t tid;
@@ -688,13 +698,14 @@ static void async_notify(struct smbcli_request *req)
 
        tid = SVAL(req->in.hdr, HDR_TID);
 
+       notify.nttrans.level = RAW_NOTIFY_NTTRANS;
        status = smb_raw_changenotify_recv(req, current_op.mem_ctx, &notify);
        if (NT_STATUS_IS_OK(status)) {
                printf("notify tid=%d num_changes=%d action=%d name=%s\n", 
                       tid, 
-                      notify.out.num_changes,
-                      notify.out.changes[0].action,
-                      notify.out.changes[0].name.s);
+                      notify.nttrans.out.num_changes,
+                      notify.nttrans.out.changes[0].action,
+                      notify.nttrans.out.changes[0].name.s);
        }
 
        for (i=0;i<NSERVERS;i++) {
@@ -722,12 +733,11 @@ static void oplock_handler_close_recv(struct smbcli_request *req)
 /*
   the oplock handler will either ack the break or close the file
 */
-static BOOL oplock_handler(struct smbcli_transport *transport, uint16_t tid, uint16_t fnum, uint8_t level, void *private)
+static bool oplock_handler(struct smbcli_transport *transport, uint16_t tid, uint16_t fnum, uint8_t level, void *private)
 {
        union smb_close io;
-       NTSTATUS status;
        int i, j;
-       BOOL do_close;
+       bool do_close;
        struct smbcli_tree *tree = NULL;
        struct smbcli_request *req;
 
@@ -738,7 +748,7 @@ static BOOL oplock_handler(struct smbcli_transport *transport, uint16_t tid, uin
                for (j=0;j<NINSTANCES;j++) {
                        if (transport == servers[i].cli[j]->transport &&
                            tid == servers[i].cli[j]->tree->tid) {
-                               oplocks[i][j].got_break = True;
+                               oplocks[i][j].got_break = true;
                                oplocks[i][j].fnum = fnum;
                                oplocks[i][j].handle = fnum_to_handle(i, j, fnum);
                                oplocks[i][j].level = level;
@@ -750,7 +760,7 @@ static BOOL oplock_handler(struct smbcli_transport *transport, uint16_t tid, uin
 
        if (!tree) {
                printf("Oplock break not for one of our trees!?\n");
-               return False;
+               return false;
        }
 
        if (!do_close) {
@@ -766,15 +776,14 @@ static BOOL oplock_handler(struct smbcli_transport *transport, uint16_t tid, uin
        req = smb_raw_close_send(tree, &io);
 
        if (req == NULL) {
-               printf("WARNING: close failed in oplock_handler_close - %s\n", 
-                      nt_errstr(status));
-               return False;
+               printf("WARNING: close failed in oplock_handler_close\n");
+               return false;
        }
 
        req->async.fn = oplock_handler_close_recv;
        req->async.private = NULL;
 
-       return True;
+       return true;
 }
 
 
@@ -801,19 +810,19 @@ static void idle_func(struct smbcli_transport *transport, void *private)
 /*
   compare NTSTATUS, using checking ignored patterns
 */
-static BOOL compare_status(NTSTATUS status1, NTSTATUS status2)
+static bool compare_status(NTSTATUS status1, NTSTATUS status2)
 {
-       if (NT_STATUS_EQUAL(status1, status2)) return True;
+       if (NT_STATUS_EQUAL(status1, status2)) return true;
 
        /* one code being an error and the other OK is always an error */
-       if (NT_STATUS_IS_OK(status1) || NT_STATUS_IS_OK(status2)) return False;
+       if (NT_STATUS_IS_OK(status1) || NT_STATUS_IS_OK(status2)) return false;
 
        /* if we are ignoring one of the status codes then consider this a match */
        if (ignore_pattern(nt_errstr(status1)) ||
            ignore_pattern(nt_errstr(status2))) {
-               return True;
+               return true;
        }
-       return False;
+       return false;
 }
 
 
@@ -836,7 +845,7 @@ static void check_pending(void)
 /*
   check that the same oplock breaks have been received by all instances
 */
-static BOOL check_oplocks(const char *call)
+static bool check_oplocks(const char *call)
 {
        int i, j;
        int tries = 0;
@@ -857,7 +866,7 @@ again:
                                       oplocks[i][j].got_break, 
                                       oplocks[i][j].handle, 
                                       oplocks[i][j].level);
-                               return False;
+                               return false;
                        }
                }
        }
@@ -874,14 +883,14 @@ again:
                        break;
                }
        }       
-       return True;
+       return true;
 }
 
 
 /*
   check that the same change notify info has been received by all instances
 */
-static BOOL check_notifies(const char *call)
+static bool check_notifies(const char *call)
 {
        int i, j;
        int tries = 0;
@@ -892,14 +901,14 @@ again:
        for (j=0;j<NINSTANCES;j++) {
                for (i=1;i<NSERVERS;i++) {
                        int n;
-                       struct smb_notify not1, not2;
+                       union smb_notify not1, not2;
 
                        if (notifies[0][j].notify_count != notifies[i][j].notify_count) {
                                if (tries++ < 10) goto again;
                                printf("Notify count inconsistent %d %d\n",
                                       notifies[0][j].notify_count,
                                       notifies[i][j].notify_count);
-                               return False;
+                               return false;
                        }
 
                        if (notifies[0][j].notify_count == 0) continue;
@@ -909,7 +918,7 @@ again:
                                printf("Notify status mismatch - %s - %s\n",
                                       nt_errstr(notifies[0][j].status),
                                       nt_errstr(notifies[i][j].status));
-                               return False;
+                               return false;
                        }
 
                        if (!NT_STATUS_IS_OK(notifies[0][j].status)) {
@@ -919,27 +928,27 @@ again:
                        not1 = notifies[0][j].notify;
                        not2 = notifies[i][j].notify;
 
-                       for (n=0;n<not1.out.num_changes;n++) {
-                               if (not1.out.changes[n].action != 
-                                   not2.out.changes[n].action) {
+                       for (n=0;n<not1.nttrans.out.num_changes;n++) {
+                               if (not1.nttrans.out.changes[n].action != 
+                                   not2.nttrans.out.changes[n].action) {
                                        printf("Notify action %d inconsistent %d %d\n", n,
-                                              not1.out.changes[n].action,
-                                              not2.out.changes[n].action);
-                                       return False;
+                                              not1.nttrans.out.changes[n].action,
+                                              not2.nttrans.out.changes[n].action);
+                                       return false;
                                }
-                               if (strcmp(not1.out.changes[n].name.s,
-                                          not2.out.changes[n].name.s)) {
+                               if (strcmp(not1.nttrans.out.changes[n].name.s,
+                                          not2.nttrans.out.changes[n].name.s)) {
                                        printf("Notify name %d inconsistent %s %s\n", n,
-                                              not1.out.changes[n].name.s,
-                                              not2.out.changes[n].name.s);
-                                       return False;
+                                              not1.nttrans.out.changes[n].name.s,
+                                              not2.nttrans.out.changes[n].name.s);
+                                       return false;
                                }
-                               if (not1.out.changes[n].name.private_length !=
-                                   not2.out.changes[n].name.private_length) {
+                               if (not1.nttrans.out.changes[n].name.private_length !=
+                                   not2.nttrans.out.changes[n].name.private_length) {
                                        printf("Notify name length %d inconsistent %d %d\n", n,
-                                              not1.out.changes[n].name.private_length,
-                                              not2.out.changes[n].name.private_length);
-                                       return False;
+                                              not1.nttrans.out.changes[n].name.private_length,
+                                              not2.nttrans.out.changes[n].name.private_length);
+                                       return false;
                                }
                        }
                }
@@ -947,7 +956,7 @@ again:
 
        ZERO_STRUCT(notifies);
 
-       return True;
+       return true;
 }
 
 
@@ -971,13 +980,13 @@ again:
                if (!compare_status(status[i], status[0])) { \
                        printf("status different in %s - %s %s\n", #call, \
                               nt_errstr(status[0]), nt_errstr(status[i])); \
-                       return False; \
+                       return false; \
                } \
        } \
-       if (!check_oplocks(#call)) return False; \
-       if (!check_notifies(#call)) return False; \
+       if (!check_oplocks(#call)) return false; \
+       if (!check_notifies(#call)) return false; \
        if (!NT_STATUS_IS_OK(status[0])) { \
-               return True; \
+               return true; \
        } \
 } while(0)
 
@@ -1010,19 +1019,19 @@ again:
        if (parm[0].field != parm[1].field && !ignore_pattern(#field)) { \
                printf("Mismatch in %s - 0x%x 0x%x\n", #field, \
                       (int)parm[0].field, (int)parm[1].field); \
-               return False; \
+               return false; \
        } \
 } while(0)
 
 #define CHECK_WSTR_EQUAL(field) do { \
        if ((!parm[0].field.s && parm[1].field.s) || (parm[0].field.s && !parm[1].field.s)) { \
                printf("%s is NULL!\n", #field); \
-               return False; \
+               return false; \
        } \
        if (parm[0].field.s && strcmp(parm[0].field.s, parm[1].field.s) != 0 && !ignore_pattern(#field)) { \
                printf("Mismatch in %s - %s %s\n", #field, \
                       parm[0].field.s, parm[1].field.s); \
-               return False; \
+               return false; \
        } \
        CHECK_EQUAL(field.private_length); \
 } while(0)
@@ -1030,35 +1039,35 @@ again:
 #define CHECK_BLOB_EQUAL(field) do { \
        if (memcmp(parm[0].field.data, parm[1].field.data, parm[0].field.length) != 0 && !ignore_pattern(#field)) { \
                printf("Mismatch in %s\n", #field); \
-               return False; \
+               return false; \
        } \
        CHECK_EQUAL(field.length); \
 } while(0)
 
 #define CHECK_TIMES_EQUAL(field) do { \
-       if (ABS(parm[0].field - parm[1].field) > time_skew() && \
+       if (labs(parm[0].field - parm[1].field) > time_skew() && \
            !ignore_pattern(#field)) { \
                printf("Mismatch in %s - 0x%x 0x%x\n", #field, \
                       (int)parm[0].field, (int)parm[1].field); \
-               return False; \
+               return false; \
        } \
 } while(0)
 
 #define CHECK_NTTIMES_EQUAL(field) do { \
-       if (ABS(nt_time_to_unix(parm[0].field) - \
+       if (labs(nt_time_to_unix(parm[0].field) - \
                nt_time_to_unix(parm[1].field)) > time_skew() && \
            !ignore_pattern(#field)) { \
                printf("Mismatch in %s - 0x%x 0x%x\n", #field, \
                       (int)nt_time_to_unix(parm[0].field), \
                       (int)nt_time_to_unix(parm[1].field)); \
-               return False; \
+               return false; \
        } \
 } while(0)
 
 /*
   generate openx operations
 */
-static BOOL handler_openx(int instance)
+static bool handler_openx(int instance)
 {
        union smb_open parm[NSERVERS];
        NTSTATUS status[NSERVERS];
@@ -1096,14 +1105,14 @@ static BOOL handler_openx(int instance)
        /* open creates a new file handle */
        ADD_HANDLE(parm[0].openx.in.fname, openx.out.file.fnum);
 
-       return True;
+       return true;
 }
 
 
 /*
   generate open operations
 */
-static BOOL handler_open(int instance)
+static bool handler_open(int instance)
 {
        union smb_open parm[NSERVERS];
        NTSTATUS status[NSERVERS];
@@ -1130,14 +1139,14 @@ static BOOL handler_open(int instance)
        /* open creates a new file handle */
        ADD_HANDLE(parm[0].openold.in.fname, openold.out.file.fnum);
 
-       return True;
+       return true;
 }
 
 
 /*
   generate ntcreatex operations
 */
-static BOOL handler_ntcreatex(int instance)
+static bool handler_ntcreatex(int instance)
 {
        union smb_open parm[NSERVERS];
        NTSTATUS status[NSERVERS];
@@ -1183,13 +1192,13 @@ static BOOL handler_ntcreatex(int instance)
        /* ntcreatex creates a new file handle */
        ADD_HANDLE(parm[0].ntcreatex.in.fname, ntcreatex.out.file.fnum);
 
-       return True;
+       return true;
 }
 
 /*
   generate close operations
 */
-static BOOL handler_close(int instance)
+static bool handler_close(int instance)
 {
        union smb_close parm[NSERVERS];
        NTSTATUS status[NSERVERS];
@@ -1204,13 +1213,13 @@ static BOOL handler_close(int instance)
 
        REMOVE_HANDLE(close.in.file.fnum);
 
-       return True;
+       return true;
 }
 
 /*
   generate unlink operations
 */
-static BOOL handler_unlink(int instance)
+static bool handler_unlink(int instance)
 {
        union smb_unlink parm[NSERVERS];
        NTSTATUS status[NSERVERS];
@@ -1221,13 +1230,13 @@ static BOOL handler_unlink(int instance)
        GEN_COPY_PARM;
        GEN_CALL(smb_raw_unlink(tree, &parm[i]));
 
-       return True;
+       return true;
 }
 
 /*
   generate chkpath operations
 */
-static BOOL handler_chkpath(int instance)
+static bool handler_chkpath(int instance)
 {
        union smb_chkpath parm[NSERVERS];
        NTSTATUS status[NSERVERS];
@@ -1237,13 +1246,13 @@ static BOOL handler_chkpath(int instance)
        GEN_COPY_PARM;
        GEN_CALL(smb_raw_chkpath(tree, &parm[i]));
 
-       return True;
+       return true;
 }
 
 /*
   generate mkdir operations
 */
-static BOOL handler_mkdir(int instance)
+static bool handler_mkdir(int instance)
 {
        union smb_mkdir parm[NSERVERS];
        NTSTATUS status[NSERVERS];
@@ -1254,13 +1263,13 @@ static BOOL handler_mkdir(int instance)
        GEN_COPY_PARM;
        GEN_CALL(smb_raw_mkdir(tree, &parm[i]));
 
-       return True;
+       return true;
 }
 
 /*
   generate rmdir operations
 */
-static BOOL handler_rmdir(int instance)
+static bool handler_rmdir(int instance)
 {
        struct smb_rmdir parm[NSERVERS];
        NTSTATUS status[NSERVERS];
@@ -1270,13 +1279,13 @@ static BOOL handler_rmdir(int instance)
        GEN_COPY_PARM;
        GEN_CALL(smb_raw_rmdir(tree, &parm[i]));
 
-       return True;
+       return true;
 }
 
 /*
   generate rename operations
 */
-static BOOL handler_rename(int instance)
+static bool handler_rename(int instance)
 {
        union smb_rename parm[NSERVERS];
        NTSTATUS status[NSERVERS];
@@ -1289,13 +1298,13 @@ static BOOL handler_rename(int instance)
        GEN_COPY_PARM;
        GEN_CALL(smb_raw_rename(tree, &parm[i]));
 
-       return True;
+       return true;
 }
 
 /*
   generate ntrename operations
 */
-static BOOL handler_ntrename(int instance)
+static bool handler_ntrename(int instance)
 {
        union smb_rename parm[NSERVERS];
        NTSTATUS status[NSERVERS];
@@ -1310,14 +1319,14 @@ static BOOL handler_ntrename(int instance)
        GEN_COPY_PARM;
        GEN_CALL(smb_raw_rename(tree, &parm[i]));
 
-       return True;
+       return true;
 }
 
 
 /*
   generate seek operations
 */
-static BOOL handler_seek(int instance)
+static bool handler_seek(int instance)
 {
        union smb_seek parm[NSERVERS];
        NTSTATUS status[NSERVERS];
@@ -1332,14 +1341,14 @@ static BOOL handler_seek(int instance)
 
        CHECK_EQUAL(lseek.out.offset);
 
-       return True;
+       return true;
 }
 
 
 /*
   generate readx operations
 */
-static BOOL handler_readx(int instance)
+static bool handler_readx(int instance)
 {
        union smb_read parm[NSERVERS];
        NTSTATUS status[NSERVERS];
@@ -1351,7 +1360,7 @@ static BOOL handler_readx(int instance)
        parm[0].readx.in.maxcnt = gen_io_count();
        parm[0].readx.in.remaining = gen_io_count();
        parm[0].readx.in.read_for_execute = gen_bool();
-       parm[0].readx.out.data = talloc_size(current_op.mem_ctx,
+       parm[0].readx.out.data = talloc_array(current_op.mem_ctx, uint8_t,
                                             MAX(parm[0].readx.in.mincnt, parm[0].readx.in.maxcnt));
 
        GEN_COPY_PARM;
@@ -1362,13 +1371,13 @@ static BOOL handler_readx(int instance)
        CHECK_EQUAL(readx.out.compaction_mode);
        CHECK_EQUAL(readx.out.nread);
 
-       return True;
+       return true;
 }
 
 /*
   generate writex operations
 */
-static BOOL handler_writex(int instance)
+static bool handler_writex(int instance)
 {
        union smb_write parm[NSERVERS];
        NTSTATUS status[NSERVERS];
@@ -1379,7 +1388,7 @@ static BOOL handler_writex(int instance)
        parm[0].writex.in.wmode = gen_bits_mask(0xFFFF);
        parm[0].writex.in.remaining = gen_io_count();
        parm[0].writex.in.count = gen_io_count();
-       parm[0].writex.in.data = talloc_zero_size(current_op.mem_ctx, parm[0].writex.in.count);
+       parm[0].writex.in.data = talloc_zero_array(current_op.mem_ctx, uint8_t, parm[0].writex.in.count);
 
        GEN_COPY_PARM;
        GEN_SET_FNUM(writex.in.file.fnum);
@@ -1388,13 +1397,13 @@ static BOOL handler_writex(int instance)
        CHECK_EQUAL(writex.out.nwritten);
        CHECK_EQUAL(writex.out.remaining);
 
-       return True;
+       return true;
 }
 
 /*
   generate lockingx operations
 */
-static BOOL handler_lockingx(int instance)
+static bool handler_lockingx(int instance)
 {
        union smb_lock parm[NSERVERS];
        NTSTATUS status[NSERVERS];
@@ -1427,7 +1436,7 @@ static BOOL handler_lockingx(int instance)
        GEN_SET_FNUM(lockx.in.file.fnum);
        GEN_CALL(smb_raw_lock(tree, &parm[i]));
 
-       return True;
+       return true;
 }
 
 /*
@@ -1462,7 +1471,7 @@ static void gen_fileinfo(int instance, union smb_fileinfo *info)
 /*
   compare returned fileinfo structures
 */
-static BOOL cmp_fileinfo(int instance, 
+static bool cmp_fileinfo(int instance, 
                         union smb_fileinfo parm[NSERVERS],
                         NTSTATUS status[NSERVERS])
 {
@@ -1470,7 +1479,7 @@ static BOOL cmp_fileinfo(int instance,
 
        switch (parm[0].generic.level) {
        case RAW_FILEINFO_GENERIC:
-               return False;
+               return false;
 
        case RAW_FILEINFO_GETATTR:
                CHECK_EQUAL(getattr.out.attrib);
@@ -1627,16 +1636,19 @@ static BOOL cmp_fileinfo(int instance,
        case RAW_FILEINFO_EA_LIST:
        case RAW_FILEINFO_UNIX_BASIC:
        case RAW_FILEINFO_UNIX_LINK:
+       case RAW_FILEINFO_SMB2_ALL_EAS:
+       case RAW_FILEINFO_SMB2_ALL_INFORMATION:
+       case RAW_FILEINFO_UNIX_INFO2:
                break;
        }
 
-       return True;
+       return true;
 }
 
 /*
   generate qpathinfo operations
 */
-static BOOL handler_qpathinfo(int instance)
+static bool handler_qpathinfo(int instance)
 {
        union smb_fileinfo parm[NSERVERS];
        NTSTATUS status[NSERVERS];
@@ -1654,7 +1666,7 @@ static BOOL handler_qpathinfo(int instance)
 /*
   generate qfileinfo operations
 */
-static BOOL handler_qfileinfo(int instance)
+static bool handler_qfileinfo(int instance)
 {
        union smb_fileinfo parm[NSERVERS];
        NTSTATUS status[NSERVERS];
@@ -1764,6 +1776,7 @@ static void gen_setfileinfo(int instance, union smb_setfileinfo *info)
        case RAW_SFILEINFO_1032:
        case RAW_SFILEINFO_1039:
        case RAW_SFILEINFO_1040:
+       case RAW_SFILEINFO_UNIX_INFO2:
                /* Untested */
                break;
        }
@@ -1772,7 +1785,7 @@ static void gen_setfileinfo(int instance, union smb_setfileinfo *info)
 /*
   generate setpathinfo operations
 */
-static BOOL handler_spathinfo(int instance)
+static bool handler_spathinfo(int instance)
 {
        union smb_setfileinfo parm[NSERVERS];
        NTSTATUS status[NSERVERS];
@@ -1791,14 +1804,14 @@ static BOOL handler_spathinfo(int instance)
 
        GEN_CALL(smb_raw_setpathinfo(tree, &parm[i]));
 
-       return True;
+       return true;
 }
 
 
 /*
   generate setfileinfo operations
 */
-static BOOL handler_sfileinfo(int instance)
+static bool handler_sfileinfo(int instance)
 {
        union smb_setfileinfo parm[NSERVERS];
        NTSTATUS status[NSERVERS];
@@ -1811,25 +1824,27 @@ static BOOL handler_sfileinfo(int instance)
        GEN_SET_FNUM(generic.in.file.fnum);
        GEN_CALL(smb_raw_setfileinfo(tree, &parm[i]));
 
-       return True;
+       return true;
 }
 
 
 /*
   generate change notify operations
 */
-static BOOL handler_notify(int instance)
+static bool handler_notify(int instance)
 {
-       struct smb_notify parm[NSERVERS];
+       union smb_notify parm[NSERVERS];
        int n;
 
-       parm[0].in.buffer_size = gen_io_count();
-       parm[0].in.completion_filter = gen_bits_mask(0xFF);
-       parm[0].in.file.fnum = gen_fnum(instance);
-       parm[0].in.recursive = gen_bool();
+       ZERO_STRUCT(parm[0]);
+       parm[0].nttrans.level                   = RAW_NOTIFY_NTTRANS;
+       parm[0].nttrans.in.buffer_size          = gen_io_count();
+       parm[0].nttrans.in.completion_filter    = gen_bits_mask(0xFF);
+       parm[0].nttrans.in.file.fnum            = gen_fnum(instance);
+       parm[0].nttrans.in.recursive            = gen_bool();
 
        GEN_COPY_PARM;
-       GEN_SET_FNUM(in.file.fnum);
+       GEN_SET_FNUM(nttrans.in.file.fnum);
 
        for (n=0;n<NSERVERS;n++) {
                struct smbcli_request *req;
@@ -1837,7 +1852,7 @@ static BOOL handler_notify(int instance)
                req->async.fn = async_notify;
        }
 
-       return True;
+       return true;
 }
 
 /*
@@ -1891,7 +1906,7 @@ static void dump_seeds(void)
 */
 static struct {
        const char *name;
-       BOOL (*handler)(int instance);
+       bool (*handler)(int instance);
        int count, success_count;
 } gen_ops[] = {
        {"OPEN",       handler_open},
@@ -1920,11 +1935,11 @@ static struct {
   run the test with the current set of op_parms parameters
   return the number of operations that completed successfully
 */
-static int run_test(void)
+static int run_test(struct loadparm_context *lp_ctx)
 {
        int op, i;
 
-       if (!connect_servers()) {
+       if (!connect_servers(lp_ctx)) {
                printf("Failed to connect to servers\n");
                exit(1);
        }
@@ -1945,7 +1960,7 @@ static int run_test(void)
 
        for (op=0; op<options.numops; op++) {
                int instance, which_op;
-               BOOL ret;
+               bool ret;
 
                if (op_parms[op].disabled) continue;
 
@@ -1965,7 +1980,7 @@ static int run_test(void)
                current_op.opnum = op;
                current_op.name = gen_ops[which_op].name;
                current_op.status = NT_STATUS_OK;
-               current_op.mem_ctx = talloc_init("%s", current_op.name);
+               current_op.mem_ctx = talloc_named(NULL, 0, "%s", current_op.name);
 
                ret = gen_ops[which_op].handler(instance);
 
@@ -2001,7 +2016,7 @@ static int run_test(void)
    perform a backtracking analysis of the minimal set of operations
    to generate an error
 */
-static void backtrack_analyze(void)
+static void backtrack_analyze(struct loadparm_context *lp_ctx)
 {
        int chunk, ret;
 
@@ -2018,14 +2033,14 @@ static void backtrack_analyze(void)
                        /* mark this range as disabled */
                        max = MIN(options.numops, base+chunk);
                        for (i=base;i<max; i++) {
-                               op_parms[i].disabled = True;
+                               op_parms[i].disabled = true;
                        }
                        printf("Testing %d ops with %d-%d disabled\n", 
                               options.numops, base, max-1);
-                       ret = run_test();
+                       ret = run_test(lp_ctx);
                        printf("Completed %d of %d ops\n", ret, options.numops);
                        for (i=base;i<max; i++) {
-                               op_parms[i].disabled = False;
+                               op_parms[i].disabled = false;
                        }
                        if (ret == options.numops) {
                                /* this chunk is needed */
@@ -2054,7 +2069,7 @@ static void backtrack_analyze(void)
        } while (chunk > 0);
 
        printf("Reduced to %d ops\n", options.numops);
-       ret = run_test();
+       ret = run_test(lp_ctx);
        if (ret != options.numops - 1) {
                printf("Inconsistent result? ret=%d numops=%d\n", ret, options.numops);
        }
@@ -2063,7 +2078,7 @@ static void backtrack_analyze(void)
 /* 
    start the main gentest process
 */
-static BOOL start_gentest(void)
+static bool start_gentest(struct loadparm_context *lp_ctx)
 {
        int op;
        int ret;
@@ -2099,15 +2114,15 @@ static BOOL start_gentest(void)
                }
        }
 
-       ret = run_test();
+       ret = run_test(lp_ctx);
 
        if (ret != options.numops && options.analyze) {
                options.numops = ret+1;
-               backtrack_analyze();
+               backtrack_analyze(lp_ctx);
        } else if (options.analyze_always) {
-               backtrack_analyze();
+               backtrack_analyze(lp_ctx);
        } else if (options.analyze_continuous) {
-               while (run_test() == options.numops) ;
+               while (run_test(lp_ctx) == options.numops) ;
        }
 
        return ret == options.numops;
@@ -2138,21 +2153,21 @@ static void usage(void)
 /**
   split a UNC name into server and share names
 */
-static BOOL split_unc_name(const char *unc, char **server, char **share)
+static bool split_unc_name(const char *unc, char **server, char **share)
 {
        char *p = strdup(unc);
-       if (!p) return False;
+       if (!p) return false;
        all_string_sub(p, "\\", "/", 0);
-       if (strncmp(p, "//", 2) != 0) return False;
+       if (strncmp(p, "//", 2) != 0) return false;
 
        (*server) = p+2;
        p = strchr(*server, '/');
-       if (!p) return False;
+       if (!p) return false;
 
        *p = 0;
        (*share) = p+1;
        
-       return True;
+       return true;
 }
 
 
@@ -2164,7 +2179,8 @@ static BOOL split_unc_name(const char *unc, char **server, char **share)
 {
        int opt;
        int i, username_count=0;
-       BOOL ret;
+       bool ret;
+       struct loadparm_context *lp_ctx;
 
        setlinebuf(stdout);
 
@@ -2189,12 +2205,13 @@ static BOOL split_unc_name(const char *unc, char **server, char **share)
        argc -= NSERVERS;
        argv += NSERVERS;
 
-       lp_load();
+       lp_ctx = loadparm_init(talloc_autofree_context());
+       lp_load(lp_ctx, dyn_CONFIGFILE);
 
        servers[0].credentials = cli_credentials_init(talloc_autofree_context());
        servers[1].credentials = cli_credentials_init(talloc_autofree_context());
-       cli_credentials_guess(servers[0].credentials);
-       cli_credentials_guess(servers[1].credentials);
+       cli_credentials_guess(servers[0].credentials, lp_ctx);
+       cli_credentials_guess(servers[1].credentials, lp_ctx);
 
        options.seed = time(NULL);
        options.numops = 1000;
@@ -2223,28 +2240,28 @@ static BOOL split_unc_name(const char *unc, char **server, char **share)
                        options.seeds_file = optarg;
                        break;
                case 'L':
-                       options.use_preset_seeds = True;
+                       options.use_preset_seeds = true;
                        break;
                case 'F':
-                       options.fast_reconnect = True;
+                       options.fast_reconnect = true;
                        break;
                case 'o':
                        options.numops = atoi(optarg);
                        break;
                case 'O':
-                       options.use_oplocks = True;
+                       options.use_oplocks = true;
                        break;
                case 'a':
-                       options.showall = True;
+                       options.showall = true;
                        break;
                case 'A':
-                       options.analyze = True;
+                       options.analyze = true;
                        break;
                case 'X':
-                       options.analyze_always = True;
+                       options.analyze_always = true;
                        break;
                case 'C':
-                       options.analyze_continuous = True;
+                       options.analyze_continuous = true;
                        break;
                case 'i':
                        options.ignore_patterns = file_lines_load(optarg, NULL, NULL);
@@ -2258,7 +2275,7 @@ static BOOL split_unc_name(const char *unc, char **server, char **share)
                }
        }
 
-       gensec_init();
+       gensec_init(lp_ctx);
 
        if (username_count == 0) {
                usage();
@@ -2270,7 +2287,7 @@ static BOOL split_unc_name(const char *unc, char **server, char **share)
 
        printf("seed=%u\n", options.seed);
 
-       ret = start_gentest();
+       ret = start_gentest(lp_ctx);
 
        if (ret) {
                printf("gentest completed - no errors\n");