summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatt Johnston <matt@ucc.asn.au>2014-10-21 22:33:49 +0800
committerMatt Johnston <matt@ucc.asn.au>2014-10-21 22:33:49 +0800
commitf871edf02b8da94efb39e2486823543dda73fa3e (patch)
treed31d69adc64027da83390ad30fd36b2c7d22aa23
parent2dd21f1ab1fe247a7ec89b06fcd871bef8964546 (diff)
downloaddropbear-f871edf02b8da94efb39e2486823543dda73fa3e.tar.gz
Combine code for SSH_CONNECTION and SSH_CLIENT
-rw-r--r--chansession.h6
-rw-r--r--svr-chansession.c35
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) {