merge 2016.74
... | @@ -98,29 +98,30 @@ int main(int argc, char ** argv) { | ... | @@ -98,29 +98,30 @@ int main(int argc, char ** argv) { |
#endif /* DBMULTI stuff */ | #endif /* DBMULTI stuff */ | ||
static void cli_dropbear_exit(int exitcode, const char* format, va_list param) { | static void cli_dropbear_exit(int exitcode, const char* format, va_list param) { | ||
char exitmsg[150]; | |||
char fullmsg[300]; | |||
char fmtbuf[300]; | /* Note that exit message must be rendered before session cleanup */ | ||
char exitmsg[500]; | |||
/* Render the formatted exit message */ | |||
vsnprintf(exitmsg, sizeof(exitmsg), format, param); | |||
/* Add the prefix depending on session/auth state */ | |||
if (!sessinitdone) { | if (!sessinitdone) { | ||
snprintf(fmtbuf, sizeof(fmtbuf), "Exited: %s", | snprintf(fullmsg, sizeof(fullmsg), "Exited: %s", exitmsg); | ||
format); | |||
} else { | } else { | ||
snprintf(fmtbuf, sizeof(fmtbuf), | snprintf(fullmsg, sizeof(fullmsg), | ||
"Connection to %[email protected]%s:%s exited: %s", | "Connection to %[email protected]%s:%s exited: %s", | ||
cli_opts.username, cli_opts.remotehost, | cli_opts.username, cli_opts.remotehost, | ||
cli_opts.remoteport, format); | cli_opts.remoteport, exitmsg); | ||
} | } | ||
/* Arguments to the exit printout may be unsafe to use after session_cleanup() */ | |||
vsnprintf(exitmsg, sizeof(exitmsg), fmtbuf, param); | |||
/* Do the cleanup first, since then the terminal will be reset */ | /* Do the cleanup first, since then the terminal will be reset */ | ||
session_cleanup(); | session_cleanup(); | ||
/* Avoid printing onwards from terminal cruft */ | /* Avoid printing onwards from terminal cruft */ | ||
fprintf(stderr, "\n"); | fprintf(stderr, "\n"); | ||
dropbear_log(LOG_INFO, "%s", exitmsg);; | dropbear_log(LOG_INFO, "%s", fullmsg); | ||
exit(exitcode); | exit(exitcode); | ||
} | } | ||
... | ... |