# HG changeset patch # User Matt Johnston # Date 1413902029 -28800 # Node ID 7c9377467934bab9df11435638098d5b7e8ad132 # Parent 3fbb9a72fb75348f2b8fd9bf9b9c749b843e45ae Combine code for SSH_CONNECTION and SSH_CLIENT diff -r 3fbb9a72fb75 -r 7c9377467934 chansession.h --- 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; diff -r 3fbb9a72fb75 -r 7c9377467934 svr-chansession.c --- 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) {