From 9a6636a56e3565202d71ae7049431e3764575b79 Mon Sep 17 00:00:00 2001 From: Stefan Metzmacher Date: Tue, 27 Apr 2010 15:12:32 +0200 Subject: s3:rpc_server: pass down local and remote tsocket_address to np_open() metze --- source3/include/proto.h | 4 +++- source3/rpc_server/srv_pipe_hnd.c | 16 +++++++++++++++- source3/smbd/pipes.c | 5 ++++- 3 files changed, 22 insertions(+), 3 deletions(-) diff --git a/source3/include/proto.h b/source3/include/proto.h index 116db698e6..6c9790bc12 100644 --- a/source3/include/proto.h +++ b/source3/include/proto.h @@ -5205,8 +5205,10 @@ pipes_struct *get_first_internal_pipe(void); pipes_struct *get_next_internal_pipe(pipes_struct *p); bool fsp_is_np(struct files_struct *fsp); +struct tsocket_address; NTSTATUS np_open(TALLOC_CTX *mem_ctx, const char *name, - const char *client_address, + const struct tsocket_address *local_address, + const struct tsocket_address *remote_address, struct auth_serversupplied_info *server_info, struct fake_file_handle **phandle); bool np_read_in_progress(struct fake_file_handle *handle); diff --git a/source3/rpc_server/srv_pipe_hnd.c b/source3/rpc_server/srv_pipe_hnd.c index b5b8379efa..215557dd7b 100644 --- a/source3/rpc_server/srv_pipe_hnd.c +++ b/source3/rpc_server/srv_pipe_hnd.c @@ -1132,7 +1132,8 @@ static struct np_proxy_state *make_external_rpc_pipe_p(TALLOC_CTX *mem_ctx, } NTSTATUS np_open(TALLOC_CTX *mem_ctx, const char *name, - const char *client_address, + const struct tsocket_address *local_address, + const struct tsocket_address *remote_address, struct auth_serversupplied_info *server_info, struct fake_file_handle **phandle) { @@ -1156,12 +1157,25 @@ NTSTATUS np_open(TALLOC_CTX *mem_ctx, const char *name, } else { struct pipes_struct *p; struct ndr_syntax_id syntax; + const char *client_address; if (!is_known_pipename(name, &syntax)) { TALLOC_FREE(handle); return NT_STATUS_OBJECT_NAME_NOT_FOUND; } + if (tsocket_address_is_inet(remote_address, "ip")) { + client_address = tsocket_address_inet_addr_string( + remote_address, + talloc_tos()); + if (client_address == NULL) { + TALLOC_FREE(handle); + return NT_STATUS_NO_MEMORY; + } + } else { + client_address = ""; + } + p = make_internal_rpc_pipe_p(handle, &syntax, client_address, server_info); diff --git a/source3/smbd/pipes.c b/source3/smbd/pipes.c index e2c0cdc2f3..17d2678e35 100644 --- a/source3/smbd/pipes.c +++ b/source3/smbd/pipes.c @@ -26,6 +26,7 @@ #include "includes.h" +#include "smbd/globals.h" #define PIPE "\\PIPE\\" #define PIPELEN strlen(PIPE) @@ -65,7 +66,9 @@ NTSTATUS open_np_file(struct smb_request *smb_req, const char *name, return status; } - status = np_open(fsp, name, conn->client_address, + status = np_open(fsp, name, + conn->sconn->local_address, + conn->sconn->remote_address, conn->server_info, &fsp->fake_file_handle); if (!NT_STATUS_IS_OK(status)) { DEBUG(10, ("np_open(%s) returned %s\n", name, -- cgit