diff options
Diffstat (limited to 'source/smb_server')
-rw-r--r-- | source/smb_server/management.c | 21 | ||||
-rw-r--r-- | source/smb_server/smb/sesssetup.c | 19 | ||||
-rw-r--r-- | source/smb_server/tcon.c | 4 |
3 files changed, 36 insertions, 8 deletions
diff --git a/source/smb_server/management.c b/source/smb_server/management.c index 19e20906826..bb153d3c5e4 100644 --- a/source/smb_server/management.c +++ b/source/smb_server/management.c @@ -48,10 +48,19 @@ static NTSTATUS smbsrv_session_information(struct irpc_message *msg, for (sess=smb_conn->sessions.list; sess; sess=sess->next) { struct smbsrv_session_info *info = &r->out.info.sessions.sessions[i]; + struct socket_address *client_addr; + client_addr = socket_get_peer_addr(smb_conn->connection->socket, r); + + if (client_addr) { + info->client_ip = client_addr->addr; + } else { + info->client_ip = NULL; + } + info->vuid = sess->vuid; info->account_name = sess->session_info->server_info->account_name; info->domain_name = sess->session_info->server_info->domain_name; - info->client_ip = socket_get_peer_addr(smb_conn->connection->socket, r); + info->connect_time = timeval_to_nttime(&sess->statistics.connect_time); info->auth_time = timeval_to_nttime(&sess->statistics.auth_time); i++; @@ -81,10 +90,18 @@ static NTSTATUS smbsrv_tcon_information(struct irpc_message *msg, for (tcon=smb_conn->smb_tcons.list; tcon; tcon=tcon->next) { struct smbsrv_tcon_info *info = &r->out.info.tcons.tcons[i]; + struct socket_address *client_addr; + client_addr = socket_get_peer_addr(smb_conn->connection->socket, r); + + if (client_addr) { + info->client_ip = client_addr->addr; + } else { + info->client_ip = NULL; + } + info->tid = tcon->tid; info->share_name = lp_servicename(tcon->service); info->connect_time = timeval_to_nttime(&tcon->statistics.connect_time); - info->client_ip = socket_get_peer_addr(smb_conn->connection->socket, r); i++; } diff --git a/source/smb_server/smb/sesssetup.c b/source/smb_server/smb/sesssetup.c index 4bafc6cbf4f..225f0f7c479 100644 --- a/source/smb_server/smb/sesssetup.c +++ b/source/smb_server/smb/sesssetup.c @@ -1,3 +1,4 @@ + /* Unix SMB/CIFS implementation. handle SMBsessionsetup @@ -50,6 +51,7 @@ 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; struct smbsrv_session *smb_sess; + struct socket_address *remote_address; const char *remote_machine = NULL; sess->old.out.vuid = 0; @@ -63,8 +65,11 @@ static NTSTATUS sesssetup_old(struct smbsrv_request *req, union smb_sesssetup *s remote_machine = req->smb_conn->negotiate.calling_name->name; } + remote_address = socket_get_peer_addr(req->smb_conn->connection->socket, req); + NT_STATUS_HAVE_NO_MEMORY(remote_address); + if (!remote_machine) { - remote_machine = socket_get_peer_addr(req->smb_conn->connection->socket, req); + remote_machine = remote_address->addr; } user_info = talloc(req, struct auth_usersupplied_info); @@ -76,7 +81,7 @@ static NTSTATUS sesssetup_old(struct smbsrv_request *req, union smb_sesssetup *s user_info->client.account_name = sess->old.in.user; user_info->client.domain_name = sess->old.in.domain; user_info->workstation_name = remote_machine; - user_info->remote_host = socket_get_peer_addr(req->smb_conn->connection->socket, user_info); + user_info->remote_host = talloc_steal(user_info, remote_address); user_info->password_state = AUTH_PASSWORD_RESPONSE; user_info->password.response.lanman = sess->old.in.password; @@ -133,6 +138,7 @@ static NTSTATUS sesssetup_nt1(struct smbsrv_request *req, union smb_sesssetup *s struct auth_serversupplied_info *server_info = NULL; struct auth_session_info *session_info; struct smbsrv_session *smb_sess; + struct socket_address *remote_address; const char *remote_machine = NULL; sess->nt1.out.vuid = 0; @@ -163,10 +169,13 @@ static NTSTATUS sesssetup_nt1(struct smbsrv_request *req, union smb_sesssetup *s remote_machine = req->smb_conn->negotiate.calling_name->name; } + remote_address = socket_get_peer_addr(req->smb_conn->connection->socket, req); + NT_STATUS_HAVE_NO_MEMORY(remote_address); + if (!remote_machine) { - remote_machine = socket_get_peer_addr(req->smb_conn->connection->socket, req); + remote_machine = remote_address->addr; } - + user_info = talloc(req, struct auth_usersupplied_info); NT_STATUS_HAVE_NO_MEMORY(user_info); @@ -176,7 +185,7 @@ static NTSTATUS sesssetup_nt1(struct smbsrv_request *req, union smb_sesssetup *s user_info->client.account_name = sess->nt1.in.user; user_info->client.domain_name = sess->nt1.in.domain; user_info->workstation_name = remote_machine; - user_info->remote_host = socket_get_peer_addr(req->smb_conn->connection->socket, user_info); + user_info->remote_host = talloc_steal(user_info, remote_address); user_info->password_state = AUTH_PASSWORD_RESPONSE; user_info->password.response.lanman = sess->nt1.in.password1; diff --git a/source/smb_server/tcon.c b/source/smb_server/tcon.c index 1c934baf8c6..e0def0ab3f6 100644 --- a/source/smb_server/tcon.c +++ b/source/smb_server/tcon.c @@ -94,8 +94,10 @@ static int smbsrv_tcon_destructor(void *ptr) struct smbsrv_tcon *tcon = talloc_get_type(ptr, struct smbsrv_tcon); struct smbsrv_tcons_context *tcons_ctx; + struct socket_address *client_addr; + client_addr = socket_get_peer_addr(tcon->smb_conn->connection->socket, ptr); DEBUG(3,("%s closed connection to service %s\n", - socket_get_peer_addr(tcon->smb_conn->connection->socket, tcon), + client_addr ? client_addr->addr : "(unknown)", lp_servicename(tcon->service))); /* tell the ntvfs backend that we are disconnecting */ |