diff options
author | Andrew Bartlett <abartlet@samba.org> | 2006-01-09 22:12:53 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:49:57 -0500 |
commit | 88198c4881d8620a37086f80e4da5a5b71c5bbb2 (patch) | |
tree | 4b01d31dddcb700add8de84e9d8b5ffa51f8b6d4 /source/smb_server/smb/sesssetup.c | |
parent | ab58decf8248f3923703fabdaab697f1a8d116c8 (diff) | |
download | samba-88198c4881d8620a37086f80e4da5a5b71c5bbb2.tar.gz |
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
Diffstat (limited to 'source/smb_server/smb/sesssetup.c')
-rw-r--r-- | source/smb_server/smb/sesssetup.c | 19 |
1 files changed, 14 insertions, 5 deletions
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; |