diff options
Diffstat (limited to 'svr-chansession.c')
-rw-r--r-- | svr-chansession.c | 35 |
1 files changed, 13 insertions, 22 deletions
diff --git a/svr-chansession.c b/svr-chansession.c index b3c5c87..67122bb 100644 --- a/svr-chansession.c +++ b/svr-chansession.c @@ -603,34 +603,26 @@ static int sessionpty(struct ChanSess * chansess) { 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); - 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); + /* "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; } /* Handle a command request from the client. This is used for both shell @@ -693,8 +685,7 @@ static int sessioncommand(struct Channel *channel, struct ChanSess *chansess, /* 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) { |