diff --git a/src/main.c b/src/main.c index 0ad58f1..087e4fa 100644 --- a/src/main.c +++ b/src/main.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -483,8 +484,21 @@ int main(int argc, char **argv) if (quiet) to_dev_null(STDOUT_FILENO); + /* Preserve credentials while removing them from the environment. */ s.password = getenv(ENV_SSH_AUTH_PASSWORD); s.passphrase = getenv(ENV_SSH_AUTH_PASSPHRASE); + if (s.password) { + char *p = s.password; + s.password = strdup(p); + memset(p, 0, strlen(p)); + } + if (s.passphrase) { + char *p = s.passphrase; + s.passphrase = strdup(p); + memset(p, 0, strlen(p)); + } + unsetenv(ENV_SSH_AUTH_PASSWORD); + unsetenv(ENV_SSH_AUTH_PASSPHRASE); if ((m = mscp_init(&o, &s)) == NULL) { pr_err("mscp_init: %s", priv_get_err());