diff options
author | Matt Johnston <matt@ucc.asn.au> | 2014-10-21 22:33:49 +0800 |
---|---|---|
committer | Matt Johnston <matt@ucc.asn.au> | 2014-10-21 22:33:49 +0800 |
commit | 776d9087033b752a3dc82349e5d36cda3451de37 (patch) | |
tree | 33d5a771aaf6a88b6a50d0952d074579428d5887 | |
parent | 444b15889f8044d2ca158f76b70320a6bdcce064 (diff) |
Combine code for SSH_CONNECTION and SSH_CLIENT
-rw-r--r-- | chansession.h | 6 | ||||
-rw-r--r-- | svr-chansession.c | 35 |
2 files changed, 16 insertions, 25 deletions
diff --git a/chansession.h b/chansession.h index 50ba8f0..4078123 100644 --- a/chansession.h +++ b/chansession.h @@ -51,10 +51,10 @@ struct ChanSess { /* exit details */ struct exitinfo exit; - /* Used to set $SSH_CONNECTION in the child session. - Is only set temporarily before forking */ - char *connection_string; + /* 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 --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) { |