summaryrefslogtreecommitdiff
path: root/source4/smb_server
diff options
context:
space:
mode:
authorAndrew Bartlett <abartlet@samba.org>2006-01-09 22:12:53 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:49:57 -0500
commitf55ea8bb3dca868e21663cd90eaea7a35cd7886c (patch)
tree80aab2a3f10310e1946821603752cd407e435214 /source4/smb_server
parent806b3fdbc12b3284ab9872a4ecae3a7ee34ea171 (diff)
downloadsamba-f55ea8bb3dca868e21663cd90eaea7a35cd7886c.tar.gz
samba-f55ea8bb3dca868e21663cd90eaea7a35cd7886c.tar.bz2
samba-f55ea8bb3dca868e21663cd90eaea7a35cd7886c.zip
r12804: This patch reworks the Samba4 sockets layer to use a socket_address
structure that is more generic than just 'IP/port'. It now passes make test, and has been reviewed and updated by metze. (Thankyou *very* much). This passes 'make test' as well as kerberos use (not currently in the testsuite). The original purpose of this patch was to have Samba able to pass a socket address stucture from the BSD layer into the kerberos routines and back again. It also removes nbt_peer_addr, which was being used for a similar purpose. It is a large change, but worthwhile I feel. Andrew Bartlett (This used to be commit 88198c4881d8620a37086f80e4da5a5b71c5bbb2)
Diffstat (limited to 'source4/smb_server')
-rw-r--r--source4/smb_server/management.c21
-rw-r--r--source4/smb_server/smb/sesssetup.c19
-rw-r--r--source4/smb_server/tcon.c4
3 files changed, 36 insertions, 8 deletions
diff --git a/source4/smb_server/management.c b/source4/smb_server/management.c
index 19e2090682..bb153d3c5e 100644
--- a/source4/smb_server/management.c
+++ b/source4/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/source4/smb_server/smb/sesssetup.c b/source4/smb_server/smb/sesssetup.c
index 4bafc6cbf4..225f0f7c47 100644
--- a/source4/smb_server/smb/sesssetup.c
+++ b/source4/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/source4/smb_server/tcon.c b/source4/smb_server/tcon.c
index 1c934baf8c..e0def0ab3f 100644
--- a/source4/smb_server/tcon.c
+++ b/source4/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 */