r2542: I really don't like the 'substitute' code, and I particularly don't
authorAndrew Bartlett <abartlet@samba.org>
Wed, 22 Sep 2004 23:50:28 +0000 (23:50 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:59:04 +0000 (12:59 -0500)
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

source/lib/substitute.c
source/smb_server/service.c
source/smb_server/sesssetup.c
source/smb_server/smb_server.c
source/smb_server/smb_server.h

index 7d3997ecd790b1b276f2c3b7c30540791771283e..3de2966f5652cb20eacbcf8da4f812e8a4541bcc 100644 (file)
@@ -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 
 */
index 843b0a3872528b2cbff2e1f857bd750c3fdd0cbd..275e625386d8861445e222d8a3919134cf7bad44 100644 (file)
@@ -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;
        }
 
index 88777d9673c1fa5b5c37d8dd0efe212f5702fa79..f9b2eee1b2c14371c4b8b9bc1bad9c8b5910e5e3 100644 (file)
@@ -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;
                }
index 13c0a9770f656695e37478776b987f4753631724..35c552c825836a909955bcb0d448d7d58fd494d6 100644 (file)
@@ -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;
 
index e69cf65c8c8c239d1f2fc7dc668fb3b250a650cf..59fb03ea2e8dedf7292225723e6fddfee553ded6 100644 (file)
@@ -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 {