Mercurial > dropbear
diff svr-chansession.c @ 1830:c32976db772f
Merge
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Mon, 11 Oct 2021 15:46:49 +0800 |
parents | a7cc3332d8ab 1edf4f143e12 |
children | 90ac15aeac43 |
line wrap: on
line diff
--- a/svr-chansession.c Mon Oct 11 15:42:14 2021 +0800 +++ b/svr-chansession.c Mon Oct 11 15:46:49 2021 +0800 @@ -933,6 +933,11 @@ static void execchild(const void *user_data) { const struct ChanSess *chansess = user_data; char *usershell = NULL; + char *cp = NULL; + char *envcp = getenv("LANG"); + if (envcp != NULL) { + cp = m_strdup(envcp); + } /* with uClinux we'll have vfork()ed, so don't want to overwrite the * hostkey. can't think of a workaround to clear it */ @@ -945,19 +950,21 @@ seedrandom(); #endif - /* clear environment */ + /* clear environment if -e was not set */ /* if we're debugging using valgrind etc, we need to keep the LD_PRELOAD * etc. This is hazardous, so should only be used for debugging. */ + if ( !svr_opts.pass_on_env) { #ifndef DEBUG_VALGRIND #ifdef HAVE_CLEARENV - clearenv(); + clearenv(); #else /* don't HAVE_CLEARENV */ - /* Yay for posix. */ - if (environ) { - environ[0] = NULL; - } + /* Yay for posix. */ + if (environ) { + environ[0] = NULL; + } #endif /* HAVE_CLEARENV */ #endif /* DEBUG_VALGRIND */ + } #if DROPBEAR_SVR_MULTIUSER /* We can only change uid/gid as root ... */ @@ -991,6 +998,10 @@ addnewvar("HOME", ses.authstate.pw_dir); addnewvar("SHELL", get_user_shell()); addnewvar("PATH", DEFAULT_PATH); + if (cp != NULL) { + addnewvar("LANG", cp); + m_free(cp); + } if (chansess->term != NULL) { addnewvar("TERM", chansess->term); }