From 254c02041cf937a90343df760396bc6e2ac766c5 Mon Sep 17 00:00:00 2001 From: Andreas Schneider Date: Tue, 22 Feb 2011 16:48:15 +0100 Subject: s3-rpc_server: Added server address to pipes struct. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Günther Deschner --- source3/include/ntdomain.h | 1 + source3/rpc_server/rpc_server.c | 41 ++++++++++++++++++++++++++++++++++------- 2 files changed, 35 insertions(+), 7 deletions(-) (limited to 'source3') diff --git a/source3/include/ntdomain.h b/source3/include/ntdomain.h index 48ad876e34..e1be93c4ba 100644 --- a/source3/include/ntdomain.h +++ b/source3/include/ntdomain.h @@ -118,6 +118,7 @@ struct pipes_struct { struct pipes_struct *next, *prev; struct client_address *client_id; + struct client_address *server_id; struct auth_serversupplied_info *session_info; struct messaging_context *msg_ctx; diff --git a/source3/rpc_server/rpc_server.c b/source3/rpc_server/rpc_server.c index c622de5880..0ba945a37e 100644 --- a/source3/rpc_server/rpc_server.c +++ b/source3/rpc_server/rpc_server.c @@ -77,6 +77,7 @@ static int make_server_pipes_struct(TALLOC_CTX *mem_ctx, const char *pipe_name, const struct ndr_syntax_id id, const char *client_address, + const char *server_address, struct auth_session_info_transport *session_info, struct pipes_struct **_p, int *perrno) @@ -186,6 +187,27 @@ static int make_server_pipes_struct(TALLOC_CTX *mem_ctx, return -1; } + if (server_address != NULL) { + p->server_id = talloc_zero(p, struct client_address); + if (p->client_id == NULL) { + TALLOC_FREE(p); + *perrno = ENOMEM; + return -1; + } + + strlcpy(p->server_id->addr, + server_address, + sizeof(p->server_id->addr)); + + p->server_id->name = talloc_strdup(p->server_id, + server_address); + if (p->server_id->name == NULL) { + TALLOC_FREE(p); + *perrno = ENOMEM; + return -1; + } + } + talloc_set_destructor(p, close_internal_rpc_pipe_hnd); *_p = p; @@ -519,7 +541,7 @@ static void named_pipe_accept_done(struct tevent_req *subreq) ret = make_server_pipes_struct(npc, npc->pipe_name, npc->pipe_id, - cli_addr, npc->session_info, + cli_addr, NULL, npc->session_info, &npc->p, &error); if (ret != 0) { DEBUG(2, ("Failed to create pipes_struct! (%s)\n", @@ -941,6 +963,7 @@ static void dcerpc_ncacn_accept(struct tevent_context *ev_ctx, struct dcerpc_ncacn_conn *ncacn_conn; struct tevent_req *subreq; const char *cli_str; + const char *srv_str = NULL; char *pipe_name; NTSTATUS status; int sys_errno; @@ -1044,16 +1067,19 @@ static void dcerpc_ncacn_accept(struct tevent_context *ev_ctx, } if (tsocket_address_is_inet(ncacn_conn->client, "ip")) { - cli_str = tsocket_address_inet_addr_string(ncacn_conn->client, - ncacn_conn); - if (cli_str == NULL) { - talloc_free(ncacn_conn); - return; - } + cli_str = ncacn_conn->client_name; } else { cli_str = ""; } + if (ncacn_conn->server != NULL) { + if (tsocket_address_is_inet(ncacn_conn->server, "ip")) { + srv_str = ncacn_conn->server_name; + } else { + srv_str = NULL; + } + } + if (ncacn_conn->session_info == NULL) { status = auth_anonymous_session_info(ncacn_conn, &ncacn_conn->session_info); @@ -1070,6 +1096,7 @@ static void dcerpc_ncacn_accept(struct tevent_context *ev_ctx, pipe_name, ncacn_conn->syntax_id, cli_str, + srv_str, ncacn_conn->session_info, &ncacn_conn->p, &sys_errno); -- cgit