r24728: Use more stock torture functions.
authorJelmer Vernooij <jelmer@samba.org>
Tue, 28 Aug 2007 00:16:58 +0000 (00:16 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 20:02:58 +0000 (15:02 -0500)
(This used to be commit da3a7ee407a2b41bd01f45072cad12bf29250b33)

17 files changed:
source4/torture/basic/misc.c
source4/torture/ldap/cldapbench.c
source4/torture/libnet/libnet_BecomeDC.c
source4/torture/libnet/libnet_domain.c
source4/torture/nbench/nbench.c
source4/torture/nbt/browse.c
source4/torture/raw/close.c
source4/torture/raw/openbench.c
source4/torture/raw/samba3misc.c
source4/torture/rpc/handles.c
source4/torture/rpc/join.c
source4/torture/rpc/samsync.c
source4/torture/rpc/schannel.c
source4/torture/smbtorture.c
source4/torture/ui.c
source4/torture/ui.h
source4/torture/unix/unix_info2.c

index b4584fcf58c1843147343eff11bc6b418dbe4215..d72e3ca1cd7329886709abfc4662fed57f202cff 100644 (file)
@@ -556,7 +556,7 @@ static NTSTATUS benchrw_readwrite(struct torture_context *tctx,
        union smb_write wr;
        
        /* randomize between writes and reads*/
        union smb_write wr;
        
        /* randomize between writes and reads*/
-       if ( random() % state->lp_params->writeratio == 0) {
+       if (random() % state->lp_params->writeratio == 0) {
                torture_comment(tctx, "Callback WRITE file:%d (%d/%d)\n",
                                state->nr,state->completed,torture_numops);
                wr.generic.level = RAW_WRITE_WRITEX  ;
                torture_comment(tctx, "Callback WRITE file:%d (%d/%d)\n",
                                state->nr,state->completed,torture_numops);
                wr.generic.level = RAW_WRITE_WRITEX  ;
index 751f484cec2e23cb534e491a1e3e291023d45fd4..52d86899274b26d654bb7622cf8a418538ffa05f 100644 (file)
@@ -48,17 +48,17 @@ static void request_handler(struct cldap_request *req)
 /*
   benchmark cldap calls
 */
 /*
   benchmark cldap calls
 */
-static BOOL bench_cldap(TALLOC_CTX *mem_ctx, const char *address)
+static bool bench_cldap(struct torture_context *tctx, const char *address)
 {
 {
-       struct cldap_socket *cldap = cldap_socket_init(mem_ctx, NULL);
+       struct cldap_socket *cldap = cldap_socket_init(tctx, NULL);
        int num_sent=0;
        struct timeval tv = timeval_current();
        BOOL ret = True;
        int num_sent=0;
        struct timeval tv = timeval_current();
        BOOL ret = True;
-       int timelimit = lp_parm_int(-1, "torture", "timelimit", 10);
+       int timelimit = torture_setting_int(tctx, "timelimit", 10);
        struct cldap_netlogon search;
        struct bench_state *state;
 
        struct cldap_netlogon search;
        struct bench_state *state;
 
-       state = talloc_zero(mem_ctx, struct bench_state);
+       state = talloc_zero(tctx, struct bench_state);
 
        ZERO_STRUCT(search);
        search.in.dest_address = address;
 
        ZERO_STRUCT(search);
        search.in.dest_address = address;
@@ -75,7 +75,7 @@ static BOOL bench_cldap(TALLOC_CTX *mem_ctx, const char *address)
                        req->async.fn = request_handler;
                        num_sent++;
                        if (num_sent % 50 == 0) {
                        req->async.fn = request_handler;
                        num_sent++;
                        if (num_sent % 50 == 0) {
-                               if (lp_parm_bool(-1, "torture", "progress", true)) {
+                               if (torture_setting_bool(tctx, "progress", true)) {
                                        printf("%.1f queries per second (%d failures)  \r", 
                                               state->pass_count / timeval_elapsed(&tv),
                                               state->fail_count);
                                        printf("%.1f queries per second (%d failures)  \r", 
                                               state->pass_count / timeval_elapsed(&tv),
                                               state->fail_count);
@@ -104,28 +104,24 @@ static BOOL bench_cldap(TALLOC_CTX *mem_ctx, const char *address)
   benchmark how fast a CLDAP server can respond to a series of parallel
   requests 
 */
   benchmark how fast a CLDAP server can respond to a series of parallel
   requests 
 */
-BOOL torture_bench_cldap(struct torture_context *torture)
+bool torture_bench_cldap(struct torture_context *torture)
 {
        const char *address;
        struct nbt_name name;
 {
        const char *address;
        struct nbt_name name;
-       TALLOC_CTX *mem_ctx = talloc_new(NULL);
        NTSTATUS status;
        NTSTATUS status;
-       BOOL ret = True;
+       bool ret = true;
        
        make_nbt_name_server(&name, torture_setting_string(torture, "host", NULL));
 
        /* do an initial name resolution to find its IP */
        
        make_nbt_name_server(&name, torture_setting_string(torture, "host", NULL));
 
        /* do an initial name resolution to find its IP */
-       status = resolve_name(&name, mem_ctx, &address, event_context_find(mem_ctx));
+       status = resolve_name(&name, torture, &address, event_context_find(torture));
        if (!NT_STATUS_IS_OK(status)) {
                printf("Failed to resolve %s - %s\n",
                       name.name, nt_errstr(status));
        if (!NT_STATUS_IS_OK(status)) {
                printf("Failed to resolve %s - %s\n",
                       name.name, nt_errstr(status));
-               talloc_free(mem_ctx);
-               return False;
+               return false;
        }
 
        }
 
-       ret &= bench_cldap(mem_ctx, address);
-
-       talloc_free(mem_ctx);
+       ret &= bench_cldap(torture, address);
 
        return ret;
 }
 
        return ret;
 }
index ab50f91c1d70aa39ec8af451dfb71a99e5bc6924..9d67e093b10df510c65ac7e6f4a8666f82616a74 100644 (file)
@@ -763,7 +763,7 @@ BOOL torture_net_become_dc(struct torture_context *torture)
        b.in.domain_dns_name            = torture_join_dom_dns_name(s->tj);
        b.in.domain_netbios_name        = torture_join_dom_netbios_name(s->tj);
        b.in.domain_sid                 = torture_join_sid(s->tj);
        b.in.domain_dns_name            = torture_join_dom_dns_name(s->tj);
        b.in.domain_netbios_name        = torture_join_dom_netbios_name(s->tj);
        b.in.domain_sid                 = torture_join_sid(s->tj);
-       b.in.source_dsa_address         = lp_parm_string(-1, "torture", "host");
+       b.in.source_dsa_address         = torture_setting_string(torture, "host", NULL);
        b.in.dest_dsa_netbios_name      = s->netbios_name;
 
        b.in.callbacks.private_data     = s;
        b.in.dest_dsa_netbios_name      = s->netbios_name;
 
        b.in.callbacks.private_data     = s;
@@ -843,7 +843,7 @@ cleanup:
        ZERO_STRUCT(u);
        u.in.domain_dns_name            = torture_join_dom_dns_name(s->tj);
        u.in.domain_netbios_name        = torture_join_dom_netbios_name(s->tj);
        ZERO_STRUCT(u);
        u.in.domain_dns_name            = torture_join_dom_dns_name(s->tj);
        u.in.domain_netbios_name        = torture_join_dom_netbios_name(s->tj);
-       u.in.source_dsa_address         = lp_parm_string(-1, "torture", "host");
+       u.in.source_dsa_address         = torture_setting_string(torture, "host", NULL);
        u.in.dest_dsa_netbios_name      = s->netbios_name;
 
        status = libnet_UnbecomeDC(s->ctx, s, &u);
        u.in.dest_dsa_netbios_name      = s->netbios_name;
 
        status = libnet_UnbecomeDC(s->ctx, s, &u);
index 2ececa690a630cffa82c0710e1d489f142c879ac..915054bf508aa1084e6055e50d614bf5e88b0637 100644 (file)
@@ -120,8 +120,7 @@ static BOOL test_opendomain_lsa(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
        return True;
 }
 
        return True;
 }
 
-
-BOOL torture_domain_open_lsa(struct torture_context *torture)
+bool torture_domain_open_lsa(struct torture_context *torture)
 {
        NTSTATUS status;
        BOOL ret = True;
 {
        NTSTATUS status;
        BOOL ret = True;
index 79c5226fb1b3b492f4e46c852c8d9e27374f4ddf..d01c5a7ecdfb1f6b7de3889664f59b5f7fd18e99 100644 (file)
@@ -64,7 +64,7 @@ static BOOL run_netbench(struct torture_context *tctx, struct smbcli_state *cli,
        char *cname;
        FILE *f;
        BOOL correct = True;
        char *cname;
        FILE *f;
        BOOL correct = True;
-       double target_rate = lp_parm_double(-1, "torture", "targetrate", 0);    
+       double target_rate = torture_setting_double(tctx, "targetrate", 0);     
        int n;
 
        if (target_rate != 0 && client == 0) {
        int n;
 
        if (target_rate != 0 && client == 0) {
@@ -229,7 +229,7 @@ BOOL torture_nbench(struct torture_context *torture)
 
        read_only = torture_setting_bool(torture, "readonly", False);
 
 
        read_only = torture_setting_bool(torture, "readonly", False);
 
-       nb_max_retries = lp_parm_int(-1, "torture", "nretries", 1);
+       nb_max_retries = torture_setting_int(torture, "nretries", 1);
 
        p = torture_setting_string(torture, "timelimit", NULL);
        if (p && *p) {
 
        p = torture_setting_string(torture, "timelimit", NULL);
        if (p && *p) {
index dd9c623b416fc92bacb6ce09cb74232d5e6e5157..a9aac79469256a4c2c7231145aa0ea4ca40ac4ae 100644 (file)
@@ -27,7 +27,7 @@
 /*
   test nbt dgram operations
 */
 /*
   test nbt dgram operations
 */
-BOOL torture_nbt_browse(struct torture_context *torture)
+bool torture_nbt_browse(struct torture_context *torture)
 {
        const char *address;
        struct nbt_name name;
 {
        const char *address;
        struct nbt_name name;
index 0e2543cfcf8511b89992c4edd9fce3d0dc9cd8ee..6af234e4b4651f66b36b5f4071d41c33b0e7f082 100644 (file)
@@ -101,13 +101,13 @@ BOOL torture_raw_close(struct torture_context *torture)
                printf("Incorrect times after close - only write time should be set\n");
                dump_all_info(mem_ctx, &finfo);
 
                printf("Incorrect times after close - only write time should be set\n");
                dump_all_info(mem_ctx, &finfo);
 
-               if (!lp_parm_bool(-1, "torture", "samba3", False)) {
+               if (!torture_setting_bool(torture, "samba3", false)) {
                        /*
                         * In Samba3 as of 3.0.23d we don't yet support all
                         * file times, so don't mark this as a critical
                         * failure
                         */
                        /*
                         * In Samba3 as of 3.0.23d we don't yet support all
                         * file times, so don't mark this as a critical
                         * failure
                         */
-                       ret = False;
+                       ret = false;
                }
        }
            
                }
        }
            
index e5b47cebe1ae61a72fb07db697fd666833db09a3..fffb572d50b4a77aa4f18a6e46fa8668ce86c8a6 100644 (file)
@@ -351,7 +351,7 @@ BOOL torture_bench_open(struct torture_context *torture)
 
        progress = torture_setting_bool(torture, "progress", true);
        
 
        progress = torture_setting_bool(torture, "progress", true);
        
-       nprocs = lp_parm_int(-1, "torture", "nprocs", 4);
+       nprocs = torture_setting_int(torture, "nprocs", 4);
 
        state = talloc_zero_array(mem_ctx, struct benchopen_state, nprocs);
 
 
        state = talloc_zero_array(mem_ctx, struct benchopen_state, nprocs);
 
index c019c4e2ee663c3a13a1707398124335c51f1992..52ace05314946f107cd8764ae1ecdbd59f5cd822 100644 (file)
@@ -538,13 +538,13 @@ BOOL torture_samba3_badpath(struct torture_context *torture)
 
        status = raw_smbcli_t2open(cli_nt->tree, fpath, O_RDONLY | O_CREAT| O_EXCL, DENY_NONE, NULL);
        if (!NT_STATUS_EQUAL(status, NT_STATUS_EAS_NOT_SUPPORTED)
 
        status = raw_smbcli_t2open(cli_nt->tree, fpath, O_RDONLY | O_CREAT| O_EXCL, DENY_NONE, NULL);
        if (!NT_STATUS_EQUAL(status, NT_STATUS_EAS_NOT_SUPPORTED)
-           || !lp_parm_bool(-1, "torture", "samba3", False)) {
+           || !torture_setting_bool(torture, "samba3", false)) {
                /* Against samba3, treat EAS_NOT_SUPPORTED as acceptable */
                CHECK_STATUS(status, NT_STATUS_OBJECT_NAME_COLLISION);
        }
        status = raw_smbcli_t2open(cli_dos->tree, fpath, O_RDONLY | O_CREAT| O_EXCL, DENY_NONE, NULL);
        if (!NT_STATUS_EQUAL(status, NT_STATUS_DOS(ERRDOS,ERReasnotsupported))
                /* Against samba3, treat EAS_NOT_SUPPORTED as acceptable */
                CHECK_STATUS(status, NT_STATUS_OBJECT_NAME_COLLISION);
        }
        status = raw_smbcli_t2open(cli_dos->tree, fpath, O_RDONLY | O_CREAT| O_EXCL, DENY_NONE, NULL);
        if (!NT_STATUS_EQUAL(status, NT_STATUS_DOS(ERRDOS,ERReasnotsupported))
-           || !lp_parm_bool(-1, "torture", "samba3", False)) {
+           || !torture_setting_bool(torture, "samba3", false)) {
                /* Against samba3, treat EAS_NOT_SUPPORTED as acceptable */
                CHECK_STATUS(status, NT_STATUS_DOS(ERRDOS,ERRfilexists));
        }
                /* Against samba3, treat EAS_NOT_SUPPORTED as acceptable */
                CHECK_STATUS(status, NT_STATUS_DOS(ERRDOS,ERRfilexists));
        }
index 83462d3328625de7fd38369933691f9647b11fdf..f8cd1cd48810afe335932539238d7ffbbd634c06 100644 (file)
@@ -116,7 +116,7 @@ static bool test_handles_lsa_shared(struct torture_context *torture)
 
        torture_comment(torture, "RPC-HANDLE-LSARPC-SHARED\n");
 
 
        torture_comment(torture, "RPC-HANDLE-LSARPC-SHARED\n");
 
-       if (lp_parm_bool(-1, "torture", "samba4", False)) {
+       if (torture_setting_bool(torture, "samba4", false)) {
                torture_comment(torture, "LSA shared-policy-handle test against Samba4 - skipping\n");
                return true;
        }
                torture_comment(torture, "LSA shared-policy-handle test against Samba4 - skipping\n");
                return true;
        }
@@ -399,7 +399,7 @@ static bool test_handles_mixed_shared(struct torture_context *torture)
 
        torture_comment(torture, "RPC-HANDLE-MIXED-SHARED\n");
 
 
        torture_comment(torture, "RPC-HANDLE-MIXED-SHARED\n");
 
-       if (lp_parm_bool(-1, "torture", "samba4", False)) {
+       if (torture_setting_bool(torture, "samba4", false)) {
                torture_comment(torture, "Mixed shared-policy-handle test against Samba4 - skipping\n");
                return true;
        }
                torture_comment(torture, "Mixed shared-policy-handle test against Samba4 - skipping\n");
                return true;
        }
index a2a30e285a75ee7c037865dde60e7c38e5d45c71..23c43c525ed808ad723430a6b88ade40e4536139 100644 (file)
@@ -14,7 +14,7 @@ BOOL torture_rpc_join(struct torture_context *torture)
        struct test_join *tj;
        struct cli_credentials *machine_account;
        struct smbcli_state *cli;
        struct test_join *tj;
        struct cli_credentials *machine_account;
        struct smbcli_state *cli;
-       const char *host = lp_parm_string(-1, "torture", "host");
+       const char *host = torture_setting_string(torture, "host", NULL);
 
        /* Join domain as a member server. */
        tj = torture_join_domain(TORTURE_NETBIOS_NAME,
 
        /* Join domain as a member server. */
        tj = torture_join_domain(TORTURE_NETBIOS_NAME,
index cf08e857de51c9415005f9a4dc3705bcff499234..6a40cc5e46e4312b3d97f59dc8b57c92a142cec2 100644 (file)
@@ -1409,7 +1409,7 @@ BOOL torture_rpc_samsync(struct torture_context *torture)
        struct test_join *user_ctx;
        const char *machine_password;
        const char *wksta_machine_password;
        struct test_join *user_ctx;
        const char *machine_password;
        const char *wksta_machine_password;
-       const char *binding = lp_parm_string(-1, "torture", "binding");
+       const char *binding = torture_setting_string(torture, "binding", NULL);
        struct dcerpc_binding *b;
        struct dcerpc_binding *b_netlogon_wksta;
        struct samr_Connect c;
        struct dcerpc_binding *b;
        struct dcerpc_binding *b_netlogon_wksta;
        struct samr_Connect c;
index 416a469fc479654b9decb440419ba89b4afd8a78..e072e592d1d1d037a4c537218aa3d9f90dd7e613 100644 (file)
@@ -497,7 +497,7 @@ BOOL torture_rpc_schannel2(struct torture_context *torture)
        TALLOC_CTX *mem_ctx = talloc_new(torture);
        struct test_join *join_ctx;
        NTSTATUS status;
        TALLOC_CTX *mem_ctx = talloc_new(torture);
        struct test_join *join_ctx;
        NTSTATUS status;
-       const char *binding = lp_parm_string(-1, "torture", "binding");
+       const char *binding = torture_setting_string(torture, "binding", NULL);
        struct dcerpc_binding *b;
        struct dcerpc_pipe *p1 = NULL, *p2 = NULL;
        struct cli_credentials *credentials1, *credentials2;
        struct dcerpc_binding *b;
        struct dcerpc_pipe *p1 = NULL, *p2 = NULL;
        struct cli_credentials *credentials1, *credentials2;
index 3525f0d1374f8d8244df8d7364cb488592a570c4..43f6b67f1c77b72f959972b0c50e14d45d267c9e 100644 (file)
@@ -382,41 +382,6 @@ const static struct torture_ui_ops subunit_ui_ops = {
        .suite_start = subunit_suite_start
 };
 
        .suite_start = subunit_suite_start
 };
 
-static void harness_test_start (struct torture_context *ctx, 
-                                                           struct torture_tcase *tcase,
-                                                               struct torture_test *test)
-{
-}
-
-static void harness_test_result (struct torture_context *context, 
-                                                                enum torture_result res, const char *reason)
-{
-       switch (res) {
-       case TORTURE_OK:
-               printf("ok %s - %s\n", context->active_test->name, reason);
-               break;
-       case TORTURE_FAIL:
-       case TORTURE_ERROR:
-               printf("not ok %s - %s\n", context->active_test->name, reason);
-               break;
-       case TORTURE_SKIP:
-               printf("skip %s - %s\n", context->active_test->name, reason);
-               break;
-       }
-}
-
-static void harness_comment (struct torture_context *test, 
-                                                        const char *comment)
-{
-       printf("# %s\n", comment);
-}
-
-const static struct torture_ui_ops harness_ui_ops = {
-       .comment = harness_comment,
-       .test_start = harness_test_start,
-       .test_result = harness_test_result
-};
-
 static void quiet_suite_start(struct torture_context *ctx,
                                                  struct torture_suite *suite)
 {
 static void quiet_suite_start(struct torture_context *ctx,
                                                  struct torture_suite *suite)
 {
@@ -520,7 +485,7 @@ int main(int argc,char *argv[])
        
        struct poptOption long_options[] = {
                POPT_AUTOHELP
        
        struct poptOption long_options[] = {
                POPT_AUTOHELP
-               {"format", 0, POPT_ARG_STRING, &ui_ops_name, 0, "Output format (one of: simple, subunit, harness)", NULL },
+               {"format", 0, POPT_ARG_STRING, &ui_ops_name, 0, "Output format (one of: simple, subunit)", NULL },
                {"smb-ports",   'p', POPT_ARG_STRING, NULL,     OPT_SMB_PORTS,  "SMB ports",    NULL},
                {"basedir",       0, POPT_ARG_STRING, NULL, OPT_BASEDIR, "base directory", "BSAEDIR" },
                {"seed",          0, POPT_ARG_INT,  &torture_seed,      0,      "seed",         NULL},
                {"smb-ports",   'p', POPT_ARG_STRING, NULL,     OPT_SMB_PORTS,  "SMB ports",    NULL},
                {"basedir",       0, POPT_ARG_STRING, NULL, OPT_BASEDIR, "base directory", "BSAEDIR" },
                {"seed",          0, POPT_ARG_INT,  &torture_seed,      0,      "seed",         NULL},
@@ -662,8 +627,6 @@ int main(int argc,char *argv[])
                ui_ops = &std_ui_ops;
        } else if (!strcmp(ui_ops_name, "subunit")) {
                ui_ops = &subunit_ui_ops;
                ui_ops = &std_ui_ops;
        } else if (!strcmp(ui_ops_name, "subunit")) {
                ui_ops = &subunit_ui_ops;
-       } else if (!strcmp(ui_ops_name, "harness")) {
-               ui_ops = &harness_ui_ops;
        } else if (!strcmp(ui_ops_name, "quiet")) {
                ui_ops = &quiet_ui_ops;
        } else {
        } else if (!strcmp(ui_ops_name, "quiet")) {
                ui_ops = &quiet_ui_ops;
        } else {
index 683b0f114b6f5dabd6b96d865e5804cbc7913e20..23e761e5dc3bbbb66a6bbd6bfac5c7e084598d0a 100644 (file)
@@ -320,6 +320,12 @@ int torture_setting_int(struct torture_context *test, const char *name,
        return lp_parm_int(-1, "torture", name, default_value);
 }
 
        return lp_parm_int(-1, "torture", name, default_value);
 }
 
+double torture_setting_double(struct torture_context *test, const char *name, 
+                                                       double default_value)
+{
+       return lp_parm_double(-1, "torture", name, default_value);
+}
+
 bool torture_setting_bool(struct torture_context *test, const char *name, 
                                                        bool default_value)
 {
 bool torture_setting_bool(struct torture_context *test, const char *name, 
                                                        bool default_value)
 {
index c3b0092d48909e1119d1e726fa7bebaed946f1cf..289fad59304ffb3394854df573fa9041cfd26b73 100644 (file)
@@ -343,6 +343,10 @@ int torture_setting_int(struct torture_context *test,
                                                const char *name, 
                                                int default_value);
 
                                                const char *name, 
                                                int default_value);
 
+double torture_setting_double(struct torture_context *test, 
+                                               const char *name, 
+                                               double default_value);
+
 bool torture_setting_bool(struct torture_context *test, 
                                                  const char *name, 
                                                  bool default_value);
 bool torture_setting_bool(struct torture_context *test, 
                                                  const char *name, 
                                                  bool default_value);
index 4c4717909987023e0ce2ec0501cbc44fbc386d7c..1e063fbe8f8535492d1bbb7bbf2f8e97e8fa0ff6 100644 (file)
@@ -46,15 +46,15 @@ struct unix_info2 {
        uint32_t flags_mask;
 };
 
        uint32_t flags_mask;
 };
 
-static struct smbcli_state *connect_to_server(void *mem_ctx)
+static struct smbcli_state *connect_to_server(struct torture_context *tctx)
 {
        NTSTATUS status;
        struct smbcli_state *cli;
 
 {
        NTSTATUS status;
        struct smbcli_state *cli;
 
-       const char *host = lp_parm_string(-1, "torture", "host");
-       const char *share = lp_parm_string(-1, "torture", "share");
+       const char *host = torture_setting_string(tctx, "host", NULL);
+       const char *share = torture_setting_string(tctx, "share", NULL);
 
 
-       status = smbcli_full_connection(mem_ctx, &cli,
+       status = smbcli_full_connection(tctx, &cli,
                                        host, share, NULL,
                                        cmdline_credentials, NULL);
 
                                        host, share, NULL,
                                        cmdline_credentials, NULL);
 
@@ -399,7 +399,7 @@ BOOL unix_torture_unix_info2(struct torture_context *torture)
        mem_ctx = talloc_init("smb_query_unix_info2");
        torture_assert(torture, mem_ctx != NULL, "out of memory");
 
        mem_ctx = talloc_init("smb_query_unix_info2");
        torture_assert(torture, mem_ctx != NULL, "out of memory");
 
-       if (!(cli = connect_to_server(mem_ctx))) {
+       if (!(cli = connect_to_server(torture))) {
                talloc_free(mem_ctx);
                return False;
        }
                talloc_free(mem_ctx);
                return False;
        }