summaryrefslogtreecommitdiffhomepage
path: root/svr-chansession.c
diff options
context:
space:
mode:
authorRyan Cleere <ryan.cleere@rackspace.com>2014-10-20 12:59:47 -0500
committerRyan Cleere <ryan.cleere@rackspace.com>2014-10-20 12:59:47 -0500
commit957450582fbe8a655a0d6bed4643c7929b4e2626 (patch)
tree0a6fc8d8d931137fec6c449ce2fe08db62b4af31 /svr-chansession.c
parent6d2d3669f39f12182b79a0067f477b58948897f6 (diff)
Add SSH_CLIENT environment variable
Diffstat (limited to 'svr-chansession.c')
-rw-r--r--svr-chansession.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/svr-chansession.c b/svr-chansession.c
index 6c73778..b3c5c87 100644
--- a/svr-chansession.c
+++ b/svr-chansession.c
@@ -241,6 +241,7 @@ static int newchansess(struct Channel *channel) {
chansess = (struct ChanSess*)m_malloc(sizeof(struct ChanSess));
chansess->cmd = NULL;
chansess->connection_string = NULL;
+ chansess->client_string = NULL;
chansess->pid = 0;
/* pty details */
@@ -617,6 +618,21 @@ static char* make_connection_string() {
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
* and command-execution requests, and passes the command to
* noptycommand or ptycommand as appropriate.
@@ -678,6 +694,7 @@ static int sessioncommand(struct Channel *channel, struct ChanSess *chansess,
connection_string is freed below. */
#ifndef USE_VFORK
chansess->connection_string = make_connection_string();
+ chansess->client_string = make_client_string();
#endif
if (chansess->term == NULL) {
@@ -694,6 +711,7 @@ static int sessioncommand(struct Channel *channel, struct ChanSess *chansess,
#ifndef USE_VFORK
m_free(chansess->connection_string);
+ m_free(chansess->client_string);
#endif
if (ret == DROPBEAR_FAILURE) {
@@ -949,6 +967,10 @@ static void execchild(void *user_data) {
if (chansess->connection_string) {
addnewvar("SSH_CONNECTION", chansess->connection_string);
}
+
+ if (chansess->client_string) {
+ addnewvar("SSH_CLIENT", chansess->client_string);
+ }
#ifdef ENABLE_SVR_PUBKEY_OPTIONS
if (chansess->original_command) {