=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/ssh/ssh.c,v retrieving revision 1.214 retrieving revision 1.215 diff -u -r1.214 -r1.215 --- src/usr.bin/ssh/ssh.c 2004/06/13 15:03:02 1.214 +++ src/usr.bin/ssh/ssh.c 2004/06/17 14:52:48 1.215 @@ -40,7 +40,7 @@ */ #include "includes.h" -RCSID("$OpenBSD: ssh.c,v 1.214 2004/06/13 15:03:02 djm Exp $"); +RCSID("$OpenBSD: ssh.c,v 1.215 2004/06/17 14:52:48 djm Exp $"); #include #include @@ -1064,6 +1064,8 @@ static void ssh_session2_setup(int id, void *arg) { + extern char **environ; + int interactive = tty_flag; if (options.forward_x11 && getenv("DISPLAY") != NULL) { char *proto, *data; @@ -1084,7 +1086,7 @@ } client_session2_setup(id, tty_flag, subsystem_flag, getenv("TERM"), - NULL, fileno(stdin), &command, &ssh_subsystem_reply); + NULL, fileno(stdin), &command, environ, &ssh_subsystem_reply); packet_set_interactive(interactive); } @@ -1214,9 +1216,10 @@ control_client(const char *path) { struct sockaddr_un addr; - int r, sock, exitval; + int i, r, sock, exitval; Buffer m; char *cp; + extern char **environ; memset(&addr, '\0', sizeof(addr)); addr.sun_family = AF_UNIX; @@ -1249,8 +1252,6 @@ fatal("%s: wrong version", __func__); control_server_pid = buffer_get_int(&m); - /* XXX: env passing */ - buffer_clear(&m); buffer_put_int(&m, tty_flag); buffer_put_int(&m, subsystem_flag); @@ -1258,6 +1259,13 @@ buffer_append(&command, "\0", 1); buffer_put_cstring(&m, buffer_ptr(&command)); + + /* Pass environment */ + for (i = 0; environ != NULL && environ[i] != NULL; i++) + ; + buffer_put_int(&m, i); + for (i = 0; environ != NULL && environ[i] != NULL; i++) + buffer_put_cstring(&m, environ[i]); if (ssh_msg_send(sock, /* version */0, &m) == -1) fatal("%s: msg_send", __func__);