diff options
Diffstat (limited to 'source4/librpc/rpc')
-rw-r--r-- | source4/librpc/rpc/dcerpc.c | 4 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc.h | 2 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc_connect.c | 32 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc_sock.c | 51 | ||||
-rw-r--r-- | source4/librpc/rpc/pyrpc_util.c | 6 |
5 files changed, 30 insertions, 65 deletions
diff --git a/source4/librpc/rpc/dcerpc.c b/source4/librpc/rpc/dcerpc.c index cc72866866..110da57c93 100644 --- a/source4/librpc/rpc/dcerpc.c +++ b/source4/librpc/rpc/dcerpc.c @@ -76,9 +76,9 @@ struct rpc_request { } async; }; -_PUBLIC_ NTSTATUS dcerpc_init(struct loadparm_context *lp_ctx) +_PUBLIC_ NTSTATUS dcerpc_init(void) { - return gensec_init(lp_ctx); + return gensec_init(); } static void dcerpc_connection_dead(struct dcecli_connection *conn, NTSTATUS status); diff --git a/source4/librpc/rpc/dcerpc.h b/source4/librpc/rpc/dcerpc.h index 5ca6246343..22afdf880f 100644 --- a/source4/librpc/rpc/dcerpc.h +++ b/source4/librpc/rpc/dcerpc.h @@ -198,7 +198,7 @@ NTSTATUS dcerpc_bind_auth_schannel(TALLOC_CTX *tmp_ctx, struct loadparm_context *lp_ctx, uint8_t auth_level); struct tevent_context *dcerpc_event_context(struct dcerpc_pipe *p); -NTSTATUS dcerpc_init(struct loadparm_context *lp_ctx); +NTSTATUS dcerpc_init(void); struct smbcli_tree *dcerpc_smb_tree(struct dcecli_connection *c); uint16_t dcerpc_smb_fnum(struct dcecli_connection *c); NTSTATUS dcerpc_secondary_context(struct dcerpc_pipe *p, diff --git a/source4/librpc/rpc/dcerpc_connect.c b/source4/librpc/rpc/dcerpc_connect.c index 842ef43206..c236399b52 100644 --- a/source4/librpc/rpc/dcerpc_connect.c +++ b/source4/librpc/rpc/dcerpc_connect.c @@ -186,16 +186,18 @@ static void continue_pipe_open_smb2(struct composite_context *ctx) /* Stage 2 of ncacn_np_smb2: Open a named pipe after successful smb2 connection */ -static void continue_smb2_connect(struct composite_context *ctx) +static void continue_smb2_connect(struct tevent_req *subreq) { struct composite_context *open_req; - struct composite_context *c = talloc_get_type(ctx->async.private_data, - struct composite_context); + struct composite_context *c = + tevent_req_callback_data(subreq, + struct composite_context); struct pipe_np_smb2_state *s = talloc_get_type(c->private_data, struct pipe_np_smb2_state); /* receive result of smb2 connect request */ - c->status = smb2_connect_recv(ctx, c, &s->tree); + c->status = smb2_connect_recv(subreq, c, &s->tree); + TALLOC_FREE(subreq); if (!composite_is_ok(c)) return; /* prepare named pipe open parameters */ @@ -220,7 +222,7 @@ static struct composite_context *dcerpc_pipe_connect_ncacn_np_smb2_send( { struct composite_context *c; struct pipe_np_smb2_state *s; - struct composite_context *conn_req; + struct tevent_req *subreq; struct smbcli_options options; /* composite context allocation and setup */ @@ -247,17 +249,17 @@ static struct composite_context *dcerpc_pipe_connect_ncacn_np_smb2_send( lpcfg_smbcli_options(lp_ctx, &options); /* send smb2 connect request */ - conn_req = smb2_connect_send(mem_ctx, s->io.binding->host, + subreq = smb2_connect_send(s, c->event_ctx, + s->io.binding->host, lpcfg_parm_string_list(mem_ctx, lp_ctx, NULL, "smb2", "ports", NULL), - "IPC$", - s->io.resolve_ctx, - s->io.creds, - c->event_ctx, - &options, - lpcfg_socket_options(lp_ctx), - lpcfg_gensec_settings(mem_ctx, lp_ctx) - ); - composite_continue(c, conn_req, continue_smb2_connect, c); + "IPC$", + s->io.resolve_ctx, + s->io.creds, + &options, + lpcfg_socket_options(lp_ctx), + lpcfg_gensec_settings(mem_ctx, lp_ctx)); + if (composite_nomem(subreq, c)) return c; + tevent_req_set_callback(subreq, continue_smb2_connect, c); return c; } diff --git a/source4/librpc/rpc/dcerpc_sock.c b/source4/librpc/rpc/dcerpc_sock.c index f0451ac674..1dd993d94b 100644 --- a/source4/librpc/rpc/dcerpc_sock.c +++ b/source4/librpc/rpc/dcerpc_sock.c @@ -371,10 +371,7 @@ struct pipe_tcp_state { }; -#if 0 /* disabled till we can resolve names to ipv6 addresses */ -static void continue_ipv6_open_socket(struct composite_context *ctx); -#endif -static void continue_ipv4_open_socket(struct composite_context *ctx); +static void continue_ip_open_socket(struct composite_context *ctx); static void continue_ip_resolve_name(struct composite_context *ctx); static void continue_ip_resolve_name(struct composite_context *ctx) @@ -383,62 +380,28 @@ static void continue_ip_resolve_name(struct composite_context *ctx) struct composite_context); struct pipe_tcp_state *s = talloc_get_type(c->private_data, struct pipe_tcp_state); - struct composite_context *sock_ipv4_req; + struct composite_context *sock_ip_req; c->status = resolve_name_recv(ctx, s, &s->address); if (!composite_is_ok(c)) return; /* prepare server address using host ip:port and transport name */ - s->srvaddr = socket_address_from_strings(s->conn, "ipv4", s->address, s->port); + s->srvaddr = socket_address_from_strings(s->conn, "ip", s->address, s->port); if (composite_nomem(s->srvaddr, c)) return; - /* resolve_nbt_name gives only ipv4 ... - send socket open request */ - sock_ipv4_req = dcerpc_pipe_open_socket_send(c, s->conn, s->localaddr, + sock_ip_req = dcerpc_pipe_open_socket_send(c, s->conn, s->localaddr, s->srvaddr, s->target_hostname, NULL, NCACN_IP_TCP); - composite_continue(c, sock_ipv4_req, continue_ipv4_open_socket, c); + composite_continue(c, sock_ip_req, continue_ip_open_socket, c); } -/* - Stage 2 of dcerpc_pipe_open_tcp_send: receive result of pipe open request - on IPv6 and send the request on IPv4 unless IPv6 transport succeeded. -*/ -#if 0 /* disabled till we can resolve names to ipv6 addresses */ -static void continue_ipv6_open_socket(struct composite_context *ctx) -{ - struct composite_context *c = talloc_get_type(ctx->async.private_data, - struct composite_context); - struct pipe_tcp_state *s = talloc_get_type(c->private_data, - struct pipe_tcp_state); - struct composite_context *sock_ipv4_req; - - /* receive result of socket open request */ - c->status = dcerpc_pipe_open_socket_recv(ctx); - if (NT_STATUS_IS_OK(c->status)) { - composite_done(c); - return; - } - - talloc_free(s->srvaddr); - - /* prepare server address using host:ip and transport name */ - s->srvaddr = socket_address_from_strings(s->conn, "ipv4", s->address, s->port); - if (composite_nomem(s->srvaddr, c)) return; - - /* try IPv4 if IPv6 fails */ - sock_ipv4_req = dcerpc_pipe_open_socket_send(c, s->conn, s->localaddr, - s->srvaddr, s->target_hostname, - NCACN_IP_TCP); - composite_continue(c, sock_ipv4_req, continue_ipv4_open_socket, c); -} -#endif /* Stage 2 of dcerpc_pipe_open_tcp_send: receive result of pipe open request - on IPv4 transport. + on IP transport. */ -static void continue_ipv4_open_socket(struct composite_context *ctx) +static void continue_ip_open_socket(struct composite_context *ctx) { struct composite_context *c = talloc_get_type(ctx->async.private_data, struct composite_context); diff --git a/source4/librpc/rpc/pyrpc_util.c b/source4/librpc/rpc/pyrpc_util.c index 3821638fb3..385acc87e5 100644 --- a/source4/librpc/rpc/pyrpc_util.c +++ b/source4/librpc/rpc/pyrpc_util.c @@ -72,9 +72,9 @@ static NTSTATUS pyrpc_irpc_connect(TALLOC_CTX *mem_ctx, const char *irpc_server, struct loadparm_context *lp_ctx, struct dcerpc_binding_handle **binding_handle) { - struct messaging_context *msg; + struct imessaging_context *msg; - msg = messaging_client_init(mem_ctx, lpcfg_messaging_path(mem_ctx, lp_ctx), event_ctx); + msg = imessaging_client_init(mem_ctx, lpcfg_imessaging_path(mem_ctx, lp_ctx), event_ctx); NT_STATUS_HAVE_NO_MEMORY(msg); *binding_handle = irpc_binding_handle_by_name(mem_ctx, msg, irpc_server, table); @@ -119,7 +119,7 @@ PyObject *py_dcerpc_interface_init_helper(PyTypeObject *type, PyObject *args, Py return NULL; } - status = dcerpc_init(lp_ctx); + status = dcerpc_init(); if (!NT_STATUS_IS_OK(status)) { PyErr_SetNTSTATUS(status); talloc_free(mem_ctx); |