diff options
author | Stefan Metzmacher <metze@samba.org> | 2014-05-23 12:37:14 +0200 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2014-07-24 19:07:06 +0200 |
commit | 7ca5e83cad61a246aee6e415d604a97aa8729739 (patch) | |
tree | d34ce6e554f4160f1291c0a63a514e49e60bea31 | |
parent | 017db6d0f893a4169627c4e182ab84f4a6adb533 (diff) | |
download | samba-7ca5e83cad61a246aee6e415d604a97aa8729739.tar.gz samba-7ca5e83cad61a246aee6e415d604a97aa8729739.tar.xz samba-7ca5e83cad61a246aee6e415d604a97aa8729739.zip |
s3:smbd: avoid using client_get_tcp_info()
We already have the required information as stack variable
in the current function. There's no need to call get[peer|sock]name()
twice.
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Volker Lendecke <vl@samba.org>
-rw-r--r-- | source3/smbd/process.c | 42 |
1 files changed, 17 insertions, 25 deletions
diff --git a/source3/smbd/process.c b/source3/smbd/process.c index dd931e0225..5bc57dac50 100644 --- a/source3/smbd/process.c +++ b/source3/smbd/process.c @@ -3512,8 +3512,12 @@ void smbd_process(struct tevent_context *ev_ctx, TALLOC_CTX *frame = talloc_stackframe(); struct smbXsrv_connection *conn; struct smbd_server_connection *sconn; - struct sockaddr_storage ss; - struct sockaddr *sa = NULL; + struct sockaddr_storage ss_srv; + void *sp_srv = (void *)&ss_srv; + struct sockaddr *sa_srv = (struct sockaddr *)sp_srv; + struct sockaddr_storage ss_clnt; + void *sp_clnt = (void *)&ss_clnt; + struct sockaddr *sa_clnt = (struct sockaddr *)sp_clnt; socklen_t sa_socklen; struct tsocket_address *local_address = NULL; struct tsocket_address *remote_address = NULL; @@ -3580,16 +3584,15 @@ void smbd_process(struct tevent_context *ev_ctx, set_socket_options(sconn->sock, "SO_KEEPALIVE"); set_socket_options(sconn->sock, lp_socket_options()); - sa = (struct sockaddr *)(void *)&ss; - sa_socklen = sizeof(ss); - ret = getpeername(sconn->sock, sa, &sa_socklen); + sa_socklen = sizeof(ss_clnt); + ret = getpeername(sock_fd, sa_clnt, &sa_socklen); if (ret != 0) { int level = (errno == ENOTCONN)?2:0; DEBUG(level,("getpeername() failed - %s\n", strerror(errno))); exit_server_cleanly("getpeername() failed.\n"); } ret = tsocket_address_bsd_from_sockaddr(sconn, - sa, sa_socklen, + sa_clnt, sa_socklen, &remote_address); if (ret != 0) { DEBUG(0,("%s: tsocket_address_bsd_from_sockaddr remote failed - %s\n", @@ -3597,16 +3600,15 @@ void smbd_process(struct tevent_context *ev_ctx, exit_server_cleanly("tsocket_address_bsd_from_sockaddr remote failed.\n"); } - sa = (struct sockaddr *)(void *)&ss; - sa_socklen = sizeof(ss); - ret = getsockname(sconn->sock, sa, &sa_socklen); + sa_socklen = sizeof(ss_srv); + ret = getsockname(sock_fd, sa_srv, &sa_socklen); if (ret != 0) { int level = (errno == ENOTCONN)?2:0; DEBUG(level,("getsockname() failed - %s\n", strerror(errno))); exit_server_cleanly("getsockname() failed.\n"); } ret = tsocket_address_bsd_from_sockaddr(sconn, - sa, sa_socklen, + sa_srv, sa_socklen, &local_address); if (ret != 0) { DEBUG(0,("%s: tsocket_address_bsd_from_sockaddr remote failed - %s\n", @@ -3792,22 +3794,12 @@ void smbd_process(struct tevent_context *ev_ctx, * tickle acks, triggering a reconnection by the * client. */ + NTSTATUS status; - struct sockaddr_storage srv, clnt; - - if (client_get_tcp_info(sconn->sock, &srv, &clnt) == 0) { - NTSTATUS status; - status = smbd_register_ips(sconn, &srv, &clnt); - if (!NT_STATUS_IS_OK(status)) { - DEBUG(0, ("ctdbd_register_ips failed: %s\n", - nt_errstr(status))); - } - } else { - int level = (errno == ENOTCONN)?2:0; - DEBUG(level,("Unable to get tcp info for " - "smbd_register_ips: %s\n", - strerror(errno))); - exit_server_cleanly("client_get_tcp_info() failed.\n"); + status = smbd_register_ips(sconn, &ss_srv, &ss_clnt); + if (!NT_STATUS_IS_OK(status)) { + DEBUG(0, ("ctdbd_register_ips failed: %s\n", + nt_errstr(status))); } } |