From 79ae828819193dd9ed5e060f78a88752e30bd1c3 Mon Sep 17 00:00:00 2001 From: Andrew Bartlett Date: Wed, 22 Sep 2004 23:50:28 +0000 Subject: r2542: I really don't like the 'substitute' code, and I particularly don't like it in the mainline code (outside the smb.conf magic). We will need to have a more useful 'helper' routine for this, but for now we at least get a reliable IP address. Also remove the unused 'socket' structure in the smb server - it seems to have been replaced by the socket library. Andrew Bartlett (This used to be commit d8fd19a2020da6cce691c0db2b00f42e31d672cc) --- source4/lib/substitute.c | 25 ------------------------- source4/smb_server/service.c | 3 +-- source4/smb_server/sesssetup.c | 19 ++++++++++++++++++- source4/smb_server/smb_server.c | 7 ------- source4/smb_server/smb_server.h | 18 +++--------------- 5 files changed, 22 insertions(+), 50 deletions(-) diff --git a/source4/lib/substitute.c b/source4/lib/substitute.c index 7d3997ecd7..3de2966f56 100644 --- a/source4/lib/substitute.c +++ b/source4/lib/substitute.c @@ -52,18 +52,6 @@ static void setup_string(char **dest, const char *str) (*dest) = s; } -void sub_set_local_machine(const char *local_machine) -{ - if (!sub) return; - setup_string(&sub->local_machine, local_machine); -} - -void sub_set_remote_machine(const char *remote_machine) -{ - if (!sub) return; - setup_string(&sub->remote_machine, remote_machine); -} - void sub_set_remote_proto(const char *str) { if (!sub) return; @@ -76,19 +64,6 @@ void sub_set_remote_arch(const char *str) setup_string(&sub->remote_arch, str); } -const char *sub_get_remote_machine(void) -{ - if (!sub) return "UNKNOWN"; - return sub->remote_machine; -} - -const char *sub_get_local_machine(void) -{ - if (!sub) return "UNKNOWN"; - return sub->local_machine; -} - - /* setup the string used by %U substitution */ diff --git a/source4/smb_server/service.c b/source4/smb_server/service.c index 843b0a3872..275e625386 100644 --- a/source4/smb_server/service.c +++ b/source4/smb_server/service.c @@ -218,8 +218,7 @@ static NTSTATUS make_connection(struct smbsrv_request *req, snum = find_service(service); if (snum == -1) { - DEBUG(0,("%s couldn't find service %s\n", - sub_get_remote_machine(), service)); + DEBUG(0,("couldn't find service %s\n", service)); return NT_STATUS_BAD_NETWORK_NAME; } diff --git a/source4/smb_server/sesssetup.c b/source4/smb_server/sesssetup.c index 88777d9673..f9b2eee1b2 100644 --- a/source4/smb_server/sesssetup.c +++ b/source4/smb_server/sesssetup.c @@ -45,14 +45,23 @@ static NTSTATUS sesssetup_old(struct smbsrv_request *req, union smb_sesssetup *s struct auth_serversupplied_info *server_info = NULL; struct auth_session_info *session_info; + TALLOC_CTX *mem_ctx = talloc_init("NT1 session setup"); + char *remote_machine; + if (!mem_ctx) { + return NT_STATUS_NO_MEMORY; + } + if (!req->smb_conn->negotiate.done_sesssetup) { req->smb_conn->negotiate.max_send = sess->old.in.bufsize; } - + + remote_machine = socket_get_peer_addr(req->smb_conn->connection->socket, mem_ctx); status = make_user_info_for_reply_enc(&user_info, sess->old.in.user, sess->old.in.domain, + remote_machine, sess->old.in.password, data_blob(NULL, 0)); + talloc_free(mem_ctx); if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_ACCESS_DENIED; } @@ -122,10 +131,18 @@ static NTSTATUS sesssetup_nt1(struct smbsrv_request *req, union smb_sesssetup *s free_auth_context(&auth_context); } else { + TALLOC_CTX *mem_ctx = talloc_init("NT1 session setup"); + char *remote_machine; + if (!mem_ctx) { + return NT_STATUS_NO_MEMORY; + } + remote_machine = socket_get_peer_addr(req->smb_conn->connection->socket, mem_ctx); status = make_user_info_for_reply_enc(&user_info, sess->nt1.in.user, sess->nt1.in.domain, + remote_machine, sess->nt1.in.password1, sess->nt1.in.password2); + talloc_free(mem_ctx); if (!NT_STATUS_IS_OK(status)) { return NT_STATUS_ACCESS_DENIED; } diff --git a/source4/smb_server/smb_server.c b/source4/smb_server/smb_server.c index 13c0a9770f..35c552c825 100644 --- a/source4/smb_server/smb_server.c +++ b/source4/smb_server/smb_server.c @@ -838,13 +838,6 @@ void smbsrv_accept(struct server_connection *conn) sub_set_context(&smb_conn->substitute); - /* set an initial client name based on its IP address. This will be replaced with - the netbios name later if it gives us one */ - socket_addr = socket_get_peer_addr(conn->socket, smb_conn); - if (socket_addr) { - sub_set_remote_machine(socket_addr); - } - /* now initialise a few default values associated with this smb socket */ smb_conn->negotiate.max_send = 0xFFFF; diff --git a/source4/smb_server/smb_server.h b/source4/smb_server/smb_server.h index e69cf65c8c..59fb03ea2e 100644 --- a/source4/smb_server/smb_server.h +++ b/source4/smb_server/smb_server.h @@ -168,21 +168,9 @@ struct substitute_context { * information associated with a SMB server connection */ struct smbsrv_connection { - /* this is the context for a SMB socket associated with the socket itself */ - struct { - /* the open file descriptor */ - int fd; - - /* the last read error on the socket, if any (replaces smb_read_error global) */ - int read_error; - - /* a count of the number of packets we have received. We - * actually only care about zero/non-zero at this stage */ - unsigned pkt_count; - - /* the network address of the client */ - char *client_addr; - } socket; + /* a count of the number of packets we have received. We + * actually only care about zero/non-zero at this stage */ + unsigned pkt_count; /* context that has been negotiated between the client and server */ struct { -- cgit