summaryrefslogtreecommitdiffhomepage
path: root/svr-session.c
diff options
context:
space:
mode:
Diffstat (limited to 'svr-session.c')
-rw-r--r--svr-session.c40
1 files changed, 31 insertions, 9 deletions
diff --git a/svr-session.c b/svr-session.c
index eaccfe5..da49e1a 100644
--- a/svr-session.c
+++ b/svr-session.c
@@ -74,23 +74,36 @@ static const struct ChanType *svr_chantypes[] = {
NULL /* Null termination is mandatory. */
};
-void svr_session(int sock, int childpipe,
- char* remotehost, char *addrstring) {
-
+void svr_session(int sock, int childpipe) {
+ char *host, *port;
+ size_t len;
reseedrandom();
crypto_init();
- common_session_init(sock, sock, remotehost);
+ common_session_init(sock, sock);
/* Initialise server specific parts of the session */
svr_ses.childpipe = childpipe;
- svr_ses.addrstring = addrstring;
+#ifdef __uClinux__
+ svr_ses.server_pid = getpid();
+#endif
svr_authinitialise();
chaninitialise(svr_chantypes);
svr_chansessinitialise();
ses.connect_time = time(NULL);
+ /* for logging the remote address */
+ get_socket_address(ses.sock_in, NULL, NULL, &host, &port, 0);
+ len = strlen(host) + strlen(port) + 2;
+ svr_ses.addrstring = m_malloc(len);
+ snprintf(svr_ses.addrstring, len, "%s:%s", host, port);
+ m_free(host);
+ m_free(port);
+
+ get_socket_address(ses.sock_in, NULL, NULL,
+ &svr_ses.remotehost, NULL, 1);
+
/* set up messages etc */
ses.remoteclosed = svr_remoteclosed;
@@ -144,11 +157,20 @@ void svr_dropbear_exit(int exitcode, const char* format, va_list param) {
_dropbear_log(LOG_INFO, fmtbuf, param);
- /* free potential public key options */
- svr_pubkey_options_cleanup();
+#ifdef __uClinux__
+ /* only the main server process should cleanup - we don't want
+ * forked children doing that */
+ if (svr_ses.server_pid == getpid())
+#else
+ if (1)
+#endif
+ {
+ /* free potential public key options */
+ svr_pubkey_options_cleanup();
- /* must be after we've done with username etc */
- common_session_cleanup();
+ /* must be after we've done with username etc */
+ common_session_cleanup();
+ }
exit(exitcode);