r22969: fix some more places where we could end up with more than one event
authorAndrew Tridgell <tridge@samba.org>
Thu, 17 May 2007 08:47:04 +0000 (08:47 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 19:52:34 +0000 (14:52 -0500)
context. We now have an event context on the torture_context, and we
can also get one from the cli_credentials structure

22 files changed:
source/auth/credentials/credentials.c
source/auth/credentials/credentials.h
source/auth/credentials/credentials_krb5.c
source/auth/gensec/gensec_gssapi.c
source/auth/kerberos/krb5_init_context.c
source/auth/kerberos/krb5_init_context.h
source/client/client.c
source/dsdb/samdb/cracknames.c
source/dsdb/samdb/ldb_modules/password_hash.c
source/kdc/kdc.c
source/torture/auth/pac.c
source/torture/basic/misc.c
source/torture/libnet/libnet_BecomeDC.c
source/torture/local/irpc.c
source/torture/local/messaging.c
source/torture/local/resolve.c
source/torture/raw/composite.c
source/torture/raw/open.c
source/torture/rpc/async_bind.c
source/torture/torture.c
source/torture/ui.h
source/torture/util_smb.c

index c76c170c6dbd5b15d4d305977225401039e019b8..39b22df729a0ccfb109dc6792d1dd2f782ea9465 100644 (file)
@@ -27,6 +27,7 @@
 #include "auth/credentials/credentials.h"
 #include "auth/credentials/credentials_krb5.h"
 #include "libcli/auth/libcli_auth.h"
+#include "lib/events/events.h"
 
 /**
  * Create a new credentials structure
@@ -61,6 +62,7 @@ struct cli_credentials *cli_credentials_init(TALLOC_CTX *mem_ctx)
 
        cred->tries = 3;
        cred->callback_running = False;
+       cred->ev = NULL;
 
        cli_credentials_set_kerberos_state(cred, CRED_AUTO_USE_KERBEROS);
        cli_credentials_set_gensec_features(cred, 0);
@@ -747,3 +749,22 @@ BOOL cli_credentials_wrong_password(struct cli_credentials *cred)
 
        return (cred->tries > 0);
 }
+
+/*
+  set the common event context for this set of credentials
+ */
+void cli_credentials_set_event_context(struct cli_credentials *cred, struct event_context *ev)
+{
+       cred->ev = ev;
+}
+
+/*
+  set the common event context for this set of credentials
+ */
+struct event_context *cli_credentials_get_event_context(struct cli_credentials *cred)
+{
+       if (cred->ev == NULL) {
+               cred->ev = event_context_find(cred);
+       }
+       return cred->ev;
+}
index ce63a55bb3c6eff72aaeb3a0f6e5686b4ef701e4..e20c6015e953b0392ba3694f3f3af31e534ffc54 100644 (file)
@@ -114,6 +114,9 @@ struct cli_credentials {
 
        /* Whether any callback is currently running */
        BOOL callback_running;
+
+       /* an event context for anyone wanting to use the credentials */
+       struct event_context *ev;
 };
 
 struct ldb_context;
index 69fb9e7b33f034079b8d4a0bcb75b5b22402869a..58b5c1df3bf2a288a05729cd055c704abc194386 100644 (file)
@@ -37,7 +37,8 @@ int cli_credentials_get_krb5_context(struct cli_credentials *cred,
                return 0;
        }
 
-       ret = smb_krb5_init_context(cred, &cred->smb_krb5_context);
+       ret = smb_krb5_init_context(cred, cli_credentials_get_event_context(cred), 
+                                   &cred->smb_krb5_context);
        if (ret) {
                return ret;
        }
index 4dd5905480f3a992b97b36f7f4a3cf8a62428e4b..b8040df7eb8c084766648c9e9ffd627915902d47 100644 (file)
@@ -23,6 +23,7 @@
 */
 
 #include "includes.h"
+#include "lib/events/events.h"
 #include "system/kerberos.h"
 #include "heimdal/lib/gssapi/gssapi/gssapi.h"
 #include "auth/kerberos/kerberos.h"
@@ -226,6 +227,7 @@ static NTSTATUS gensec_gssapi_start(struct gensec_security *gensec_security)
        }
 
        ret = smb_krb5_init_context(gensec_gssapi_state, 
+                                   gensec_security->event_ctx,
                                    &gensec_gssapi_state->smb_krb5_context);
        if (ret) {
                DEBUG(1,("gensec_krb5_start: krb5_init_context failed (%s)\n",
index 92de176e84e548a4a99eff367d06fda1056647be..9eccd459fa8512ad9553d5e752ce7b1edc0a4a7b 100644 (file)
@@ -355,11 +355,11 @@ krb5_error_code smb_krb5_send_and_recv_func(krb5_context context,
 }
 
 krb5_error_code smb_krb5_init_context(void *parent_ctx, 
+                                     struct event_context *ev,
                                       struct smb_krb5_context **smb_krb5_context) 
 {
        krb5_error_code ret;
        TALLOC_CTX *tmp_ctx;
-       struct event_context *ev;
        char **config_files;
        const char *config_file;
        
@@ -446,7 +446,6 @@ krb5_error_code smb_krb5_init_context(void *parent_ctx,
        }
        krb5_set_warn_dest((*smb_krb5_context)->krb5_context, (*smb_krb5_context)->logf);
 
-       ev = event_context_find(*smb_krb5_context);
        /* Set use of our socket lib */
        ret = krb5_set_send_to_kdc_func((*smb_krb5_context)->krb5_context, 
                                        smb_krb5_send_and_recv_func, 
index 7aad97e2ca58c9885f4222eb4b6048ac3eeef24c..3c012aa2750ef4cf53663e137133d5c87fc92644 100644 (file)
@@ -23,7 +23,8 @@ struct smb_krb5_context {
        krb5_log_facility *logf;
 };
        
-krb5_error_code smb_krb5_init_context(void *parent_ctx, 
+struct event_context;
+krb5_error_code smb_krb5_init_context(void *parent_ctx, struct event_context *ev,
                                      struct smb_krb5_context **smb_krb5_context); 
 void smb_krb5_free_context(struct smb_krb5_context *smb_krb5_context);
 
index 557767022c9561a78362efced8e8f82a8e1a2c1b..2de071a195894e46b8c14feb5f4630a98a44036d 100644 (file)
@@ -2994,7 +2994,8 @@ static struct smbclient_context *do_connect(TALLOC_CTX *mem_ctx,
        ctx->remote_cur_dir = talloc_strdup(ctx, "\\");
        
        status = smbcli_full_connection(ctx, &ctx->cli, server,
-                                       share, NULL, cred, NULL);
+                                       share, NULL, cred, 
+                                       cli_credentials_get_event_context(cred));
        if (!NT_STATUS_IS_OK(status)) {
                d_printf("Connection to \\\\%s\\%s failed - %s\n", 
                         server, share, nt_errstr(status));
index eec27c6668812a3839fe26190ed75c44ea6053ee..2e26f1c308da3e2abd0fbe8baa8602ac22dbee56 100644 (file)
@@ -348,7 +348,9 @@ WERROR DsCrackNameOneName(struct ldb_context *sam_ctx, TALLOC_CTX *mem_ctx,
        struct ldb_dn *name_dn = NULL;
 
        struct smb_krb5_context *smb_krb5_context;
-       ret = smb_krb5_init_context(mem_ctx, &smb_krb5_context);
+       ret = smb_krb5_init_context(mem_ctx, 
+                                   ldb_get_opaque(sam_ctx, "EventContext"), 
+                                   &smb_krb5_context);
                                
        if (ret) {
                return WERR_NOMEM;
index 780dc69b239d6fb66ff677312ed36ea2fdbf6ea0..2db76f84395a9e5ba07dead45be321a94ec002c5 100644 (file)
@@ -1430,7 +1430,9 @@ static int password_hash_add_do_add(struct ldb_handle *h) {
        }
 
        /* Some operations below require kerberos contexts */
-       if (smb_krb5_init_context(ac->down_req, &smb_krb5_context) != 0) {
+       if (smb_krb5_init_context(ac->down_req, 
+                                 ldb_get_opaque(h->module->ldb, "EventContext"), 
+                                 &smb_krb5_context) != 0) {
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
@@ -1760,7 +1762,9 @@ static int password_hash_mod_do_mod(struct ldb_handle *h) {
        msg->dn = ac->orig_req->op.mod.message->dn;
 
        /* Some operations below require kerberos contexts */
-       if (smb_krb5_init_context(ac->mod_req, &smb_krb5_context) != 0) {
+       if (smb_krb5_init_context(ac->mod_req, 
+                                 ldb_get_opaque(h->module->ldb, "EventContext"), 
+                                 &smb_krb5_context) != 0) {
                return LDB_ERR_OPERATIONS_ERROR;
        }
 
index 1cb9ed198147077ae55c9642349ef22bf7991dd4..0cb05dee348412fdf3cafb3ddf84eaace1923f46 100644 (file)
@@ -582,7 +582,7 @@ static void kdc_task_init(struct task_server *task)
 
        initialize_krb5_error_table();
 
-       ret = smb_krb5_init_context(kdc, &kdc->smb_krb5_context);
+       ret = smb_krb5_init_context(kdc, task->event_ctx, &kdc->smb_krb5_context);
        if (ret) {
                DEBUG(1,("kdc_task_init: krb5_init_context failed (%s)\n", 
                         error_message(ret)));
index d23a9c1b5a696c69fe93168381103b429d291c19..46690890fa2d062ca90b068d4457ad1200d78aa7 100644 (file)
@@ -56,7 +56,9 @@ static bool torture_pac_self_check(struct torture_context *tctx)
 
        TALLOC_CTX *mem_ctx = tctx;
 
-       torture_assert(tctx, 0 == smb_krb5_init_context(mem_ctx, &smb_krb5_context), 
+       torture_assert(tctx, 0 == smb_krb5_init_context(mem_ctx, 
+                                                       NULL,
+                                                       &smb_krb5_context), 
                       "smb_krb5_init_context");
 
        generate_random_buffer(server_bytes, 16);
@@ -282,7 +284,8 @@ static bool torture_pac_saved_check(struct torture_context *tctx)
        time_t authtime;
        TALLOC_CTX *mem_ctx = tctx;
 
-       torture_assert(tctx, 0 == smb_krb5_init_context(mem_ctx, &smb_krb5_context),
+       torture_assert(tctx, 0 == smb_krb5_init_context(mem_ctx, NULL,
+                                                       &smb_krb5_context),
                       "smb_krb5_init_context");
 
        pac_kdc_key = torture_setting_string(tctx, "pac_kdc_key", 
index 33f0b9eff605f7c7678ab81edc79084280e2ded0..933e4334c03b8a47f6c07a45eb07bffa45eb2f5b 100644 (file)
@@ -843,7 +843,7 @@ BOOL run_benchrw(struct torture_context *tctx)
                        torture_numops, torture_nprocs);
 
        /*init talloc context*/
-       ev = event_context_init(tctx);
+       ev = tctx->ev;
        state = talloc_array(tctx, struct benchrw_state *, torture_nprocs);
 
        /* init params using lp_parm_xxx */
index b164ee4906f55e1dc6460739918e56d8bb385fb6..a2b65e260c7ef90fb0b10bbd6bba3aa05abcf1f9 100644 (file)
@@ -755,7 +755,7 @@ BOOL torture_net_become_dc(struct torture_context *torture)
                return False;
        }
 
-       s->ctx = libnet_context_init(event_context_init(s));
+       s->ctx = libnet_context_init(torture->ev);
        s->ctx->cred = cmdline_credentials;
 
        s->ldb = ldb_init(s);
index bd52be09e2f86b777549659cd5504f52ef3bd7d7..3c177c4ecee950fc9d530bfab1a75fe01394950f 100644 (file)
@@ -217,7 +217,7 @@ static BOOL irpc_setup(struct torture_context *tctx, void **_data)
 
        lp_set_cmdline("lock dir", "lockdir.tmp");
 
-       data->ev = event_context_init(tctx);
+       data->ev = tctx->ev;
        torture_assert(tctx, data->msg_ctx1 = 
                       messaging_init(tctx, 
                                      cluster_id(MSG_ID1), data->ev),
index f6ae8a3e8cc3199d7cd9a7143b4302ab7c677d7a..ce9928d91dc053c0d11680e0aef4cc1b3b9b7f92 100644 (file)
@@ -70,7 +70,7 @@ static bool test_ping_speed(struct torture_context *tctx)
 
        lp_set_cmdline("pid directory", "piddir.tmp");
 
-       ev = event_context_init(mem_ctx);
+       ev = tctx->ev;
 
        msg_server_ctx = messaging_init(mem_ctx, cluster_id(1), ev);
        
index 21a7392a147cbd066a1fb37bb3dc03dbe324c1c1..d3bae2118410e9f64105ceb9aeebe0235ab7fc87 100644 (file)
@@ -35,7 +35,7 @@ static bool test_async_resolve(struct torture_context *tctx)
        struct timeval tv = timeval_current();
        TALLOC_CTX *mem_ctx = tctx;
 
-       ev = event_context_init(mem_ctx);
+       ev = tctx->ev;
 
        ZERO_STRUCT(n);
        n.name = host;
index b551af00b123aa13b03bd25d8f837ce5948c985c..e68ebcc824b615437727fd694ccd804101a7c4e2 100644 (file)
@@ -164,7 +164,7 @@ static BOOL test_fetchfile(struct smbcli_state *cli, TALLOC_CTX *mem_ctx)
 
        printf("testing parallel fetchfile with %d ops\n", torture_numops);
 
-       event_ctx = event_context_init(mem_ctx);
+       event_ctx = cli->transport->socket->event.ctx;
        c = talloc_array(mem_ctx, struct composite_context *, torture_numops);
 
        for (i=0; i<torture_numops; i++) {
index 3c6b1e2fa58f64576b29a47ff65bd4f9e165a245..035d6890163d40bb40b0f72eee9b0a1dd84632ac 100644 (file)
@@ -27,6 +27,8 @@
 #include "lib/events/events.h"
 #include "libcli/libcli.h"
 #include "torture/util.h"
+#include "auth/credentials/credentials.h"
+#include "lib/cmdline/popt_common.h"
 
 /* enum for whether reads/writes are possible on a file */
 enum rdwr_mode {RDWR_NONE, RDWR_RDONLY, RDWR_WRONLY, RDWR_RDWR};
@@ -1351,7 +1353,7 @@ static BOOL test_raw_open_multi(void)
        int num_ok = 0;
        int num_collision = 0;
        
-       ev = event_context_init(mem_ctx);
+       ev = cli_credentials_get_event_context(cmdline_credentials);
        clients = talloc_array(mem_ctx, struct smbcli_state *, num_files);
        requests = talloc_array(mem_ctx, struct smbcli_request *, num_files);
        ios = talloc_array(mem_ctx, union smb_open, num_files);
index 70333845ff97771fffa5c45535c0453165e40731..e5ff25ed8533e234543a235bc1e7dc3fe417a621 100644 (file)
@@ -68,13 +68,13 @@ BOOL torture_async_bind(struct torture_context *torture)
        table    = talloc_array(torture, const struct dcerpc_interface_table*, torture_numasync);
        if (table == NULL) return False;
        
-       /* event context */
-       evt_ctx = event_context_init(mem_ctx);
-       if (evt_ctx == NULL) return False;
-
        /* credentials */
        creds = cmdline_credentials;
 
+       /* event context */
+       evt_ctx = cli_credentials_get_event_context(creds);
+       if (evt_ctx == NULL) return False;
+
        /* send bind requests */
        for (i = 0; i < torture_numasync; i++) {
                table[i] = &dcerpc_table_lsarpc;
index 66d7bbb1018d87bc0366d05a914fd12117aedebf..b48bf78e7ee965e0269f015d23d5b1fdad097225 100644 (file)
@@ -24,6 +24,8 @@
 #include "torture/torture.h"
 #include "build.h"
 #include "lib/util/dlinklist.h"
+#include "auth/credentials/credentials.h"
+#include "lib/cmdline/popt_common.h"
 
 _PUBLIC_ int torture_numops=10;
 _PUBLIC_ int torture_entries=1000;
@@ -42,12 +44,13 @@ bool torture_register_suite(struct torture_suite *suite)
 }
 
 struct torture_context *torture_context_init(TALLOC_CTX *mem_ctx, 
-                                                                                        const struct torture_ui_ops *ui_ops)
+                                            const struct torture_ui_ops *ui_ops)
 {
        struct torture_context *torture = talloc_zero(mem_ctx, 
-                                                                                                 struct torture_context);
+                                                     struct torture_context);
        torture->ui_ops = ui_ops;
        torture->returncode = true;
+       torture->ev = cli_credentials_get_event_context(cmdline_credentials);
 
        if (ui_ops->init)
                ui_ops->init(torture);
index 70b86b042475decd77b69d828a9282d97116d0dd..b41da771381eab4328d2f3a2c767250509d5d22b 100644 (file)
@@ -90,6 +90,7 @@ struct torture_context
 
        char *outputdir;
        int level;
+       struct event_context *ev;
 };
 
 /* 
index 4cadbe20fee5e51b0da371dc6f6ff0fa6da98d9b..23b98fc7b6d004d7b63e37e744ff5139ce8a1e23 100644 (file)
@@ -31,6 +31,7 @@
 #include "torture/ui.h"
 #include "torture/torture.h"
 #include "util/dlinklist.h"
+#include "auth/credentials/credentials.h"
 
 
 /**
@@ -541,7 +542,8 @@ _PUBLIC_ bool torture_open_connection_ev(struct smbcli_state **c,
 
 _PUBLIC_ bool torture_open_connection(struct smbcli_state **c, int conn_index)
 {
-       return torture_open_connection_ev(c, conn_index, NULL);
+       return torture_open_connection_ev(c, conn_index, 
+                                         cli_credentials_get_event_context(cmdline_credentials));
 }