s3: libsmb: Rename cli_close_create() -> cli_smb1_close_create().
[samba.git] / source3 / torture / torture.c
index 2bdb079f83ae907a3cd501d855736f22d8a9a90e..87276c09cb348db512eb313f33786b65d24296d3 100644 (file)
@@ -31,7 +31,6 @@
 #include "dbwrap/dbwrap.h"
 #include "dbwrap/dbwrap_open.h"
 #include "dbwrap/dbwrap_rbt.h"
-#include "talloc_dict.h"
 #include "async_smb.h"
 #include "libsmb/libsmb.h"
 #include "libsmb/clirap.h"
@@ -326,16 +325,11 @@ bool smbcli_parse_unc(const char *unc_name, TALLOC_CTX *mem_ctx,
 
 static bool torture_open_connection_share(struct cli_state **c,
                                   const char *hostname, 
-                                  const char *sharename)
+                                  const char *sharename,
+                                  int flags)
 {
-       int flags = 0;
        NTSTATUS status;
 
-       if (use_oplocks)
-               flags |= CLI_FULL_CONNECTION_OPLOCKS;
-       if (use_level_II_oplocks)
-               flags |= CLI_FULL_CONNECTION_LEVEL_II_OPLOCKS;
-
        status = cli_full_connection_creds(c,
                                           myname,
                                           hostname,
@@ -361,7 +355,7 @@ static bool torture_open_connection_share(struct cli_state **c,
        return True;
 }
 
-bool torture_open_connection(struct cli_state **c, int conn_index)
+bool torture_open_connection_flags(struct cli_state **c, int conn_index, int flags)
 {
        char **unc_list = NULL;
        int num_unc_names = 0;
@@ -383,14 +377,28 @@ bool torture_open_connection(struct cli_state **c, int conn_index)
                        exit(1);
                }
 
-               result = torture_open_connection_share(c, h, s);
+               result = torture_open_connection_share(c, h, s, flags);
 
                /* h, s were copied earlier */
                TALLOC_FREE(unc_list);
                return result;
        }
 
-       return torture_open_connection_share(c, host, share);
+       return torture_open_connection_share(c, host, share, flags);
+}
+
+bool torture_open_connection(struct cli_state **c, int conn_index)
+{
+       int flags = CLI_FULL_CONNECTION_FORCE_SMB1;
+
+       if (use_oplocks) {
+               flags |= CLI_FULL_CONNECTION_OPLOCKS;
+       }
+       if (use_level_II_oplocks) {
+               flags |= CLI_FULL_CONNECTION_LEVEL_II_OPLOCKS;
+       }
+
+       return torture_open_connection_flags(c, conn_index, flags);
 }
 
 bool torture_init_connection(struct cli_state **pcli)
@@ -1301,7 +1309,8 @@ static bool run_tcon_test(int dummy)
        static struct cli_state *cli;
        const char *fname = "\\tcontest.tmp";
        uint16_t fnum1;
-       uint16_t cnum1, cnum2, cnum3;
+       uint32_t cnum1, cnum2, cnum3;
+       struct smbXcli_tcon *orig_tcon = NULL;
        uint16_t vuid1, vuid2;
        char buf[4];
        bool ret = True;
@@ -1333,6 +1342,11 @@ static bool run_tcon_test(int dummy)
                return False;
        }
 
+       orig_tcon = cli_state_save_tcon(cli);
+       if (orig_tcon == NULL) {
+               return false;
+       }
+
        status = cli_tree_connect_creds(cli, share, "?????", torture_creds);
        if (!NT_STATUS_IS_OK(status)) {
                printf("%s refused 2nd tree connect (%s)\n", host,
@@ -1400,6 +1414,8 @@ static bool run_tcon_test(int dummy)
                return False;
        }
 
+       cli_state_restore_tcon(cli, orig_tcon);
+
        cli_state_set_tid(cli, cnum1);
 
        if (!torture_close_connection(cli)) {
@@ -1462,7 +1478,8 @@ static bool tcon_devtest(struct cli_state *cli,
 
        if (NT_STATUS_IS_OK(expected_error)) {
                if (NT_STATUS_IS_OK(status)) {
-                       if (strcmp(cli->dev, return_devtype) == 0) {
+                       if (return_devtype != NULL &&
+                           strequal(cli->dev, return_devtype)) {
                                ret = True;
                        } else { 
                                printf("tconX to share %s with type %s "
@@ -1502,7 +1519,7 @@ static bool tcon_devtest(struct cli_state *cli,
 static bool run_tcon_devtype_test(int dummy)
 {
        static struct cli_state *cli1 = NULL;
-       int flags = 0;
+       int flags = CLI_FULL_CONNECTION_FORCE_SMB1;
        NTSTATUS status;
        bool ret = True;
 
@@ -2764,8 +2781,8 @@ static bool run_fdsesstest(int dummy)
        struct cli_state *cli;
        uint16_t new_vuid;
        uint16_t saved_vuid;
-       uint16_t new_cnum;
-       uint16_t saved_cnum;
+       uint32_t new_cnum;
+       uint32_t saved_cnum;
        const char *fname = "\\fdsess.tst";
        const char *fname1 = "\\fdsess1.tst";
        uint16_t fnum1;
@@ -3145,6 +3162,29 @@ static bool run_browsetest(int dummy)
 
 }
 
+static bool check_attributes(struct cli_state *cli,
+                               const char *fname,
+                               uint16_t expected_attrs)
+{
+       uint16_t attrs = 0;
+       NTSTATUS status = cli_getatr(cli,
+                               fname,
+                               &attrs,
+                               NULL,
+                               NULL);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("cli_getatr failed with %s\n",
+                       nt_errstr(status));
+               return false;
+       }
+       if (attrs != expected_attrs) {
+               printf("Attributes incorrect 0x%x, should be 0x%x\n",
+                       (unsigned int)attrs,
+                       (unsigned int)expected_attrs);
+               return false;
+       }
+       return true;
+}
 
 /*
   This checks how the getatr calls works
@@ -3175,7 +3215,7 @@ static bool run_attrtest(int dummy)
                correct = False;
        }
 
-       if (abs(t - time(NULL)) > 60*60*24*10) {
+       if (labs(t - time(NULL)) > 60*60*24*10) {
                printf("ERROR: SMBgetatr bug. time is %s",
                       ctime(&t));
                t = time(NULL);
@@ -3205,6 +3245,120 @@ static bool run_attrtest(int dummy)
 
        cli_unlink(cli, fname, FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN);
 
+       /* Check cli_setpathinfo_basic() */
+       /* Re-create the file. */
+       status = cli_openx(cli, fname,
+                       O_RDWR | O_CREAT | O_TRUNC, DENY_NONE, &fnum);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("Failed to recreate %s (%s)\n",
+                       fname, nt_errstr(status));
+               correct = false;
+       }
+       cli_close(cli, fnum);
+
+       status = cli_setpathinfo_basic(cli,
+                                       fname,
+                                       0, /* create */
+                                       0, /* access */
+                                       0, /* write */
+                                       0, /* change */
+                                       FILE_ATTRIBUTE_SYSTEM |
+                                       FILE_ATTRIBUTE_HIDDEN |
+                                       FILE_ATTRIBUTE_READONLY);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("cli_setpathinfo_basic failed with %s\n",
+                       nt_errstr(status));
+               correct = false;
+       }
+
+       /* Check attributes are correct. */
+       correct = check_attributes(cli,
+                       fname,
+                       FILE_ATTRIBUTE_SYSTEM |
+                       FILE_ATTRIBUTE_HIDDEN |
+                       FILE_ATTRIBUTE_READONLY);
+       if (correct == false) {
+               goto out;
+       }
+
+       /* Setting to FILE_ATTRIBUTE_NORMAL should be ignored. */
+       status = cli_setpathinfo_basic(cli,
+                                       fname,
+                                       0, /* create */
+                                       0, /* access */
+                                       0, /* write */
+                                       0, /* change */
+                                       FILE_ATTRIBUTE_NORMAL);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("cli_setpathinfo_basic failed with %s\n",
+                       nt_errstr(status));
+               correct = false;
+       }
+
+       /* Check attributes are correct. */
+       correct = check_attributes(cli,
+                       fname,
+                       FILE_ATTRIBUTE_SYSTEM |
+                       FILE_ATTRIBUTE_HIDDEN |
+                       FILE_ATTRIBUTE_READONLY);
+       if (correct == false) {
+               goto out;
+       }
+
+       /* Setting to (uint16_t)-1 should also be ignored. */
+       status = cli_setpathinfo_basic(cli,
+                                       fname,
+                                       0, /* create */
+                                       0, /* access */
+                                       0, /* write */
+                                       0, /* change */
+                                       (uint16_t)-1);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("cli_setpathinfo_basic failed with %s\n",
+                       nt_errstr(status));
+               correct = false;
+       }
+
+       /* Check attributes are correct. */
+       correct = check_attributes(cli,
+                       fname,
+                       FILE_ATTRIBUTE_SYSTEM |
+                       FILE_ATTRIBUTE_HIDDEN |
+                       FILE_ATTRIBUTE_READONLY);
+       if (correct == false) {
+               goto out;
+       }
+
+       /* Setting to 0 should clear them all. */
+       status = cli_setpathinfo_basic(cli,
+                                       fname,
+                                       0, /* create */
+                                       0, /* access */
+                                       0, /* write */
+                                       0, /* change */
+                                       0);
+       if (!NT_STATUS_IS_OK(status)) {
+               printf("cli_setpathinfo_basic failed with %s\n",
+                       nt_errstr(status));
+               correct = false;
+       }
+
+       /* Check attributes are correct. */
+       correct = check_attributes(cli,
+                       fname,
+                       FILE_ATTRIBUTE_NORMAL);
+       if (correct == false) {
+               goto out;
+       }
+
+  out:
+
+       cli_unlink(cli,
+               fname,
+               FILE_ATTRIBUTE_SYSTEM |
+               FILE_ATTRIBUTE_HIDDEN|
+               FILE_ATTRIBUTE_READONLY);
+
        if (!torture_close_connection(cli)) {
                correct = False;
        }
@@ -3292,13 +3446,13 @@ static bool run_trans2test(int dummy)
                        printf("modify time=%s", ctime(&m_time));
                        printf("This system appears to have sticky create times\n");
                }
-               if ((abs(a_time - t) > 60) && (a_time % (60*60) == 0)) {
+               if ((labs(a_time - t) > 60) && (a_time % (60*60) == 0)) {
                        printf("access time=%s", ctime(&a_time));
                        printf("This system appears to set a midnight access time\n");
                        correct = False;
                }
 
-               if (abs(m_time - t) > 60*60*24*7) {
+               if (labs(m_time - t) > 60*60*24*7) {
                        printf("ERROR: totally incorrect times - maybe word reversed? mtime=%s", ctime(&m_time));
                        correct = False;
                }
@@ -5066,7 +5220,7 @@ static bool run_rename_access(int dummy)
        }
 
        if (cli) {
-               if (fnum != (uint64_t)-1) {
+               if (fnum != (uint16_t)-1) {
                        cli_close(cli, fnum);
                }
                cli_unlink(cli, src,
@@ -7912,7 +8066,7 @@ static bool run_chain1(int dummy)
        if (reqs[1] == NULL) return false;
        tevent_req_set_callback(reqs[1], chain1_write_completion, NULL);
 
-       reqs[2] = cli_close_create(talloc_tos(), evt, cli1, 0, &smbreqs[2]);
+       reqs[2] = cli_smb1_close_create(talloc_tos(), evt, cli1, 0, &smbreqs[2]);
        if (reqs[2] == NULL) return false;
        tevent_req_set_callback(reqs[2], chain1_close_completion, &done);
 
@@ -7952,10 +8106,11 @@ static bool run_chain2(int dummy)
        struct tevent_req *reqs[2], *smbreqs[2];
        bool done = false;
        NTSTATUS status;
+       int flags = CLI_FULL_CONNECTION_FORCE_SMB1;
 
        printf("starting chain2 test\n");
        status = cli_start_connection(&cli1, lp_netbios_name(), host, NULL,
-                                     port_to_use, SMB_SIGNING_DEFAULT, 0);
+                                     port_to_use, SMB_SIGNING_DEFAULT, flags);
        if (!NT_STATUS_IS_OK(status)) {
                return False;
        }
@@ -9015,8 +9170,9 @@ static bool run_uid_regression_test(int dummy)
 {
        static struct cli_state *cli;
        int16_t old_vuid;
-       int16_t old_cnum;
+       int32_t old_cnum;
        bool correct = True;
+       struct smbXcli_tcon *orig_tcon = NULL;
        NTSTATUS status;
 
        printf("starting uid regression test\n");
@@ -9057,6 +9213,11 @@ static bool run_uid_regression_test(int dummy)
        }
 
        old_cnum = cli_state_get_tid(cli);
+       orig_tcon = cli_state_save_tcon(cli);
+       if (orig_tcon == NULL) {
+               correct = false;
+               goto out;
+       }
 
        /* Now try a SMBtdis with the invald vuid set to zero. */
        cli_state_set_uid(cli, 0);
@@ -9069,9 +9230,11 @@ static bool run_uid_regression_test(int dummy)
        } else {
                d_printf("First tdis failed (%s)\n", nt_errstr(status));
                correct = false;
+               cli_state_restore_tcon(cli, orig_tcon);
                goto out;
        }
 
+       cli_state_restore_tcon(cli, orig_tcon);
        cli_state_set_uid(cli, old_vuid);
        cli_state_set_tid(cli, old_cnum);
 
@@ -9871,7 +10034,7 @@ static bool run_local_gencache(int dummy)
        blob = data_blob_string_const_null("bar");
        tm = time(NULL) + 60;
 
-       if (!gencache_set_data_blob("foo", &blob, tm)) {
+       if (!gencache_set_data_blob("foo", blob, tm)) {
                d_printf("%s: gencache_set_data_blob() failed\n", __location__);
                return False;
        }
@@ -9910,7 +10073,7 @@ static bool run_local_gencache(int dummy)
        blob.data = (uint8_t *)&v;
        blob.length = sizeof(v);
 
-       if (!gencache_set_data_blob("blob", &blob, tm)) {
+       if (!gencache_set_data_blob("blob", blob, tm)) {
                d_printf("%s: gencache_set_data_blob() failed\n",
                         __location__);
                return false;
@@ -10151,61 +10314,6 @@ failed:
        return false;
 }
 
-
-struct talloc_dict_test {
-       int content;
-};
-
-static int talloc_dict_traverse_fn(DATA_BLOB key, void *data, void *priv)
-{
-       int *count = (int *)priv;
-       *count += 1;
-       return 0;
-}
-
-static bool run_local_talloc_dict(int dummy)
-{
-       struct talloc_dict *dict;
-       struct talloc_dict_test *t;
-       int key, count, res;
-       bool ok;
-
-       dict = talloc_dict_init(talloc_tos());
-       if (dict == NULL) {
-               return false;
-       }
-
-       t = talloc(talloc_tos(), struct talloc_dict_test);
-       if (t == NULL) {
-               return false;
-       }
-
-       key = 1;
-       t->content = 1;
-       ok = talloc_dict_set(dict, data_blob_const(&key, sizeof(key)), &t);
-       if (!ok) {
-               return false;
-       }
-
-       count = 0;
-       res = talloc_dict_traverse(dict, talloc_dict_traverse_fn, &count);
-       if (res == -1) {
-               return false;
-       }
-
-       if (count != 1) {
-               return false;
-       }
-
-       if (count != res) {
-               return false;
-       }
-
-       TALLOC_FREE(dict);
-
-       return true;
-}
-
 static bool run_local_string_to_sid(int dummy) {
        struct dom_sid sid;
 
@@ -10554,15 +10662,25 @@ static bool data_blob_equal(DATA_BLOB a, DATA_BLOB b)
 static bool run_local_memcache(int dummy)
 {
        struct memcache *cache;
-       DATA_BLOB k1, k2;
-       DATA_BLOB d1, d2, d3;
-       DATA_BLOB v1, v2, v3;
+       DATA_BLOB k1, k2, k3;
+       DATA_BLOB d1, d3;
+       DATA_BLOB v1, v3;
 
        TALLOC_CTX *mem_ctx;
+       char *ptr1 = NULL;
+       char *ptr2 = NULL;
+
        char *str1, *str2;
        size_t size1, size2;
        bool ret = false;
 
+       mem_ctx = talloc_init("foo");
+       if (mem_ctx == NULL) {
+               return false;
+       }
+
+       /* STAT_CACHE TESTS */
+
        cache = memcache_init(NULL, sizeof(void *) == 8 ? 200 : 100);
 
        if (cache == NULL) {
@@ -10571,14 +10689,13 @@ static bool run_local_memcache(int dummy)
        }
 
        d1 = data_blob_const("d1", 2);
-       d2 = data_blob_const("d2", 2);
        d3 = data_blob_const("d3", 2);
 
        k1 = data_blob_const("d1", 2);
        k2 = data_blob_const("d2", 2);
+       k3 = data_blob_const("d3", 2);
 
        memcache_add(cache, STAT_CACHE, k1, d1);
-       memcache_add(cache, GETWD_CACHE, k2, d2);
 
        if (!memcache_lookup(cache, STAT_CACHE, k1, &v1)) {
                printf("could not find k1\n");
@@ -10588,40 +10705,79 @@ static bool run_local_memcache(int dummy)
                return false;
        }
 
-       if (!memcache_lookup(cache, GETWD_CACHE, k2, &v2)) {
-               printf("could not find k2\n");
+       memcache_add(cache, STAT_CACHE, k1, d3);
+
+       if (!memcache_lookup(cache, STAT_CACHE, k1, &v3)) {
+               printf("could not find replaced k1\n");
                return false;
        }
-       if (!data_blob_equal(d2, v2)) {
+       if (!data_blob_equal(d3, v3)) {
                return false;
        }
 
-       memcache_add(cache, STAT_CACHE, k1, d3);
+       TALLOC_FREE(cache);
 
-       if (!memcache_lookup(cache, STAT_CACHE, k1, &v3)) {
-               printf("could not find replaced k1\n");
+       /* GETWD_CACHE TESTS */
+       str1 = talloc_strdup(mem_ctx, "string1");
+       if (str1 == NULL) {
                return false;
        }
-       if (!data_blob_equal(d3, v3)) {
+       ptr2 = str1; /* Keep an alias for comparison. */
+
+       str2 = talloc_strdup(mem_ctx, "string2");
+       if (str2 == NULL) {
                return false;
        }
 
-       memcache_add(cache, GETWD_CACHE, k1, d1);
+       cache = memcache_init(NULL, sizeof(void *) == 8 ? 200 : 100);
+       if (cache == NULL) {
+               printf("memcache_init failed\n");
+               return false;
+       }
+
+       memcache_add_talloc(cache, GETWD_CACHE, k2, &str1);
+       /* str1 == NULL now. */
+       ptr1 = memcache_lookup_talloc(cache, GETWD_CACHE, k2);
+       if (ptr1 == NULL) {
+               printf("could not find k2\n");
+               return false;
+       }
+       if (ptr1 != ptr2) {
+               printf("fetch of k2 got wrong string\n");
+               return false;
+       }
+
+       /* Add a blob to ensure k2 gets purged. */
+       d3 = data_blob_talloc_zero(mem_ctx, 180);
+       memcache_add(cache, STAT_CACHE, k3, d3);
 
-       if (memcache_lookup(cache, GETWD_CACHE, k2, &v2)) {
+       ptr2 = memcache_lookup_talloc(cache, GETWD_CACHE, k2);
+       if (ptr2 != NULL) {
                printf("Did find k2, should have been purged\n");
                return false;
        }
 
        TALLOC_FREE(cache);
-
-       cache = memcache_init(NULL, 0);
+       TALLOC_FREE(mem_ctx);
 
        mem_ctx = talloc_init("foo");
+       if (mem_ctx == NULL) {
+               return false;
+       }
+
+       cache = memcache_init(NULL, 0);
+       if (cache == NULL) {
+               return false;
+       }
 
        str1 = talloc_strdup(mem_ctx, "string1");
+       if (str1 == NULL) {
+               return false;
+       }
        str2 = talloc_strdup(mem_ctx, "string2");
-
+       if (str2 == NULL) {
+               return false;
+       }
        memcache_add_talloc(cache, SINGLETON_CACHE_TALLOC,
                            data_blob_string_const("torture"), &str1);
        size1 = talloc_total_size(cache);
@@ -10708,59 +10864,6 @@ static bool run_wbclient_multi_ping(int dummy)
        return result;
 }
 
-static void getaddrinfo_finished(struct tevent_req *req)
-{
-       char *name = (char *)tevent_req_callback_data_void(req);
-       struct addrinfo *ainfo;
-       int res;
-
-       res = getaddrinfo_recv(req, &ainfo);
-       if (res != 0) {
-               d_printf("gai(%s) returned %s\n", name, gai_strerror(res));
-               return;
-       }
-       d_printf("gai(%s) succeeded\n", name);
-       freeaddrinfo(ainfo);
-}
-
-static bool run_getaddrinfo_send(int dummy)
-{
-       TALLOC_CTX *frame = talloc_stackframe();
-       struct fncall_context *ctx;
-       struct tevent_context *ev;
-       bool result = false;
-       const char *names[4] = { "www.samba.org", "notfound.samba.org",
-                                "www.slashdot.org", "heise.de" };
-       struct tevent_req *reqs[4];
-       int i;
-
-       ev = samba_tevent_context_init(frame);
-       if (ev == NULL) {
-               goto fail;
-       }
-
-       ctx = fncall_context_init(frame, 4);
-
-       for (i=0; i<ARRAY_SIZE(names); i++) {
-               reqs[i] = getaddrinfo_send(frame, ev, ctx, names[i], NULL,
-                                          NULL);
-               if (reqs[i] == NULL) {
-                       goto fail;
-               }
-               tevent_req_set_callback(reqs[i], getaddrinfo_finished,
-                                       discard_const_p(void, names[i]));
-       }
-
-       for (i=0; i<ARRAY_SIZE(reqs); i++) {
-               tevent_loop_once(ev);
-       }
-
-       result = true;
-fail:
-       TALLOC_FREE(frame);
-       return result;
-}
-
 static bool dbtrans_inc(struct db_context *db)
 {
        struct db_record *rec;
@@ -10903,17 +11006,17 @@ static bool run_local_dbtrans(int dummy)
 
 /*
  * Just a dummy test to be run under a debugger. There's no real way
- * to inspect the tevent_select specific function from outside of
- * tevent_select.c.
+ * to inspect the tevent_poll specific function from outside of
+ * tevent_poll.c.
  */
 
-static bool run_local_tevent_select(int dummy)
+static bool run_local_tevent_poll(int dummy)
 {
        struct tevent_context *ev;
        struct tevent_fd *fd1, *fd2;
        bool result = false;
 
-       ev = tevent_context_init_byname(NULL, "select");
+       ev = tevent_context_init_byname(NULL, "poll");
        if (ev == NULL) {
                d_fprintf(stderr, "tevent_context_init_byname failed\n");
                goto fail;
@@ -11421,7 +11524,6 @@ static struct {
        { "NTTRANS-CREATE", run_nttrans_create, 0},
        { "NTTRANS-FSCTL", run_nttrans_fsctl, 0},
        { "CLI_ECHO", run_cli_echo, 0},
-       { "GETADDRINFO", run_getaddrinfo_send, 0},
        { "TLDAP", run_tldap },
        { "STREAMERROR", run_streamerror },
        { "NOTIFY-BENCH", run_notify_bench },
@@ -11446,9 +11548,9 @@ static struct {
        { "PIDHIGH", run_pidhigh },
        { "LOCAL-SUBSTITUTE", run_local_substitute, 0},
        { "LOCAL-GENCACHE", run_local_gencache, 0},
-       { "LOCAL-TALLOC-DICT", run_local_talloc_dict, 0},
        { "LOCAL-DBWRAP-WATCH1", run_dbwrap_watch1, 0 },
        { "LOCAL-DBWRAP-WATCH2", run_dbwrap_watch2, 0 },
+       { "LOCAL-DBWRAP-DO-LOCKED1", run_dbwrap_do_locked1, 0 },
        { "LOCAL-MESSAGING-READ1", run_messaging_read1, 0 },
        { "LOCAL-MESSAGING-READ2", run_messaging_read2, 0 },
        { "LOCAL-MESSAGING-READ3", run_messaging_read3, 0 },
@@ -11466,7 +11568,7 @@ static struct {
        { "LOCAL-sid_to_string", run_local_sid_to_string, 0},
        { "LOCAL-binary_to_sid", run_local_binary_to_sid, 0},
        { "LOCAL-DBTRANS", run_local_dbtrans, 0},
-       { "LOCAL-TEVENT-SELECT", run_local_tevent_select, 0},
+       { "LOCAL-TEVENT-POLL", run_local_tevent_poll, 0},
        { "LOCAL-CONVERT-STRING", run_local_convert_string, 0},
        { "LOCAL-CONV-AUTH-INFO", run_local_conv_auth_info, 0},
        { "LOCAL-hex_encode_buf", run_local_hex_encode_buf, 0},
@@ -11479,19 +11581,15 @@ static struct {
        { "LOCAL-PTHREADPOOL-TEVENT", run_pthreadpool_tevent, 0 },
        { "LOCAL-G-LOCK1", run_g_lock1, 0 },
        { "LOCAL-G-LOCK2", run_g_lock2, 0 },
+       { "LOCAL-G-LOCK3", run_g_lock3, 0 },
+       { "LOCAL-G-LOCK4", run_g_lock4, 0 },
+       { "LOCAL-G-LOCK5", run_g_lock5, 0 },
+       { "LOCAL-G-LOCK-PING-PONG", run_g_lock_ping_pong, 0 },
        { "LOCAL-CANONICALIZE-PATH", run_local_canonicalize_path, 0 },
+       { "LOCAL-NAMEMAP-CACHE1", run_local_namemap_cache1, 0 },
        { "qpathinfo-bufsize", run_qpathinfo_bufsize, 0 },
        {NULL, NULL, 0}};
 
-/*
- * dummy function to satisfy linker dependency
- */
-struct tevent_context *winbind_event_context(void);
-struct tevent_context *winbind_event_context(void)
-{
-       return NULL;
-}
-
 /****************************************************************************
 run a specified test or "ALL"
 ****************************************************************************/