mirror of
https://github.com/samba-team/samba.git
synced 2024-12-23 17:34:34 +03:00
r22969: fix some more places where we could end up with more than one event
context. We now have an event context on the torture_context, and we
can also get one from the cli_credentials structure
(This used to be commit c0f65eb656
)
This commit is contained in:
parent
ad1cde253e
commit
c42219d735
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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",
|
||||
|
@ -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,
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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));
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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)));
|
||||
|
@ -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",
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
|
@ -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),
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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++) {
|
||||
|
@ -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);
|
||||
|
@ -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;
|
||||
|
@ -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);
|
||||
|
@ -90,6 +90,7 @@ struct torture_context
|
||||
|
||||
char *outputdir;
|
||||
int level;
|
||||
struct event_context *ev;
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -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));
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user