Mercurial > dropbear
changeset 974:7c9377467934
Combine code for SSH_CONNECTION and SSH_CLIENT
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Tue, 21 Oct 2014 22:33:49 +0800 |
parents | 3fbb9a72fb75 |
children | bfc8e66ceacf 964d41e3aeb2 |
files | chansession.h svr-chansession.c |
diffstat | 2 files changed, 17 insertions(+), 26 deletions(-) [+] |
line wrap: on
line diff
--- a/chansession.h Tue Oct 21 21:43:20 2014 +0800 +++ b/chansession.h Tue Oct 21 22:33:49 2014 +0800 @@ -51,10 +51,10 @@ /* exit details */ struct exitinfo exit; - /* Used to set $SSH_CONNECTION in the child session. - Is only set temporarily before forking */ + + /* These are only set temporarily before forking */ + /* Used to set $SSH_CONNECTION in the child session. */ char *connection_string; - /* Used to set $SSH_CLIENT in the child session. */ char *client_string;
--- a/svr-chansession.c Tue Oct 21 21:43:20 2014 +0800 +++ b/svr-chansession.c Tue Oct 21 22:33:49 2014 +0800 @@ -603,34 +603,26 @@ return DROPBEAR_SUCCESS; } -static char* make_connection_string() { +static void make_connection_string(struct ChanSess *chansess) { char *local_ip, *local_port, *remote_ip, *remote_port; size_t len; - char *ret; get_socket_address(ses.sock_in, &local_ip, &local_port, &remote_ip, &remote_port, 0); - len = strlen(local_ip) + strlen(local_port) + strlen(remote_ip) + strlen(remote_port) + 4; - ret = m_malloc(len); - snprintf(ret, len, "%s %s %s %s", remote_ip, remote_port, local_ip, local_port); + + /* "remoteip remoteport localip localport" */ + len = strlen(local_ip) + strlen(remote_ip) + 20; + chansess->connection_string = m_malloc(len); + snprintf(chansess->connection_string, len, "%s %s %s %s", remote_ip, remote_port, local_ip, local_port); + + /* deprecated but bash only loads .bashrc if SSH_CLIENT is set */ + /* "remoteip remoteport localport" */ + len = strlen(remote_ip) + 20; + chansess->client_string = m_malloc(len); + snprintf(chansess->client_string, len, "%s %s %s", remote_ip, remote_port, local_port); + m_free(local_ip); m_free(local_port); m_free(remote_ip); m_free(remote_port); - return ret; -} - -static char* make_client_string() { - char *local_ip, *local_port, *remote_ip, *remote_port; - size_t len; - char *ret; - get_socket_address(ses.sock_in, &local_ip, &local_port, &remote_ip, &remote_port, 0); - len = strlen(local_ip) + strlen(local_port) + strlen(remote_ip) + strlen(remote_port) + 4; - ret = m_malloc(len); - snprintf(ret, len, "%s %s %s", remote_ip, remote_port, local_port); - m_free(local_ip); - m_free(local_port); - m_free(remote_ip); - m_free(remote_port); - return ret; } /* Handle a command request from the client. This is used for both shell @@ -693,8 +685,7 @@ /* uClinux will vfork(), so there'll be a race as connection_string is freed below. */ #ifndef USE_VFORK - chansess->connection_string = make_connection_string(); - chansess->client_string = make_client_string(); + make_connection_string(chansess); #endif if (chansess->term == NULL) {