s3: Add smbd_server_connection->client_id
authorVolker Lendecke <vl@samba.org>
Mon, 16 Aug 2010 06:30:36 +0000 (08:30 +0200)
committerVolker Lendecke <vl@samba.org>
Wed, 18 Aug 2010 09:18:22 +0000 (11:18 +0200)
source3/include/smb.h
source3/smbd/globals.h
source3/smbd/server.c

index de104a51eb9286ecded23d78b60437b26230cb70..31ef910a70644154dbbd745fb1abf87383a969a0 100644 (file)
@@ -407,6 +407,11 @@ typedef struct files_struct {
 #include "ntquotas.h"
 #include "sysquotas.h"
 
+struct client_address {
+       char addr[INET6_ADDRSTRLEN];
+       const char *name;
+};
+
 struct vuid_cache_entry {
        struct auth_serversupplied_info *server_info;
        uint16_t vuid;
index cf23509060ad7fc82c63ba851ac1ef99860707ca..e4f4b790585d2bab798c1b21f078faed48668d1a 100644 (file)
@@ -458,6 +458,7 @@ struct pending_auth_data;
 
 struct smbd_server_connection {
        int sock;
+       struct client_address client_id;
        const struct tsocket_address *local_address;
        const struct tsocket_address *remote_address;
        struct messaging_context *msg_ctx;
index 8cb2f23e12c6499cde69786c4ac31ce38f801932..0f43022dd813c023b33d138c17cca99887954f6f 100644 (file)
@@ -59,8 +59,28 @@ int smbd_server_fd(void)
 
 static void smbd_set_server_fd(int fd)
 {
-       smbd_server_conn->sock = fd;
+       struct smbd_server_connection *sconn = smbd_server_conn;
+       const char *name;
+
        server_fd = fd;
+
+       sconn->sock = fd;
+
+       /*
+        * Initialize sconn->client_id: If we can't find the client's
+        * name, default to its address.
+        */
+
+       client_addr(fd, sconn->client_id.addr, sizeof(sconn->client_id.addr));
+
+       name = client_name(sconn->sock);
+       if (strcmp(name, "UNKNOWN") != 0) {
+               name = talloc_strdup(sconn, name);
+       } else {
+               name = NULL;
+       }
+       sconn->client_id.name =
+               (name != NULL) ? name : sconn->client_id.addr;
 }
 
 struct event_context *smbd_event_context(void)