summaryrefslogtreecommitdiffhomepage
path: root/svr-session.c
diff options
context:
space:
mode:
authorMatt Johnston <matt@ucc.asn.au>2009-07-29 02:58:33 +0000
committerMatt Johnston <matt@ucc.asn.au>2009-07-29 02:58:33 +0000
commitbacd2a8c795f49822146c1eea0d66c2438c26d7f (patch)
tree36dd8173372f0ffe1fba1f1bb75facd3066ef1cf /svr-session.c
parent8a19a049b25f72062cc38a0940d9dc5f928cdb0e (diff)
parent0dcecfa52612df18dd051f72d31d18e76d7848b7 (diff)
propagate from branch 'au.asn.ucc.matt.dropbear' (head bbe4e11695a7b22bd89a722600eb4a4020b6fdf3)
to branch 'au.asn.ucc.matt.dropbear.cli-agent' (head 276cf5e82276b6c879d246ba64739ec6868f5150) --HG-- branch : agent-client extra : convert_revision : d23b0c21649eb2f0b2d13dbf33c0a9faca25628a
Diffstat (limited to 'svr-session.c')
-rw-r--r--svr-session.c21
1 files changed, 17 insertions, 4 deletions
diff --git a/svr-session.c b/svr-session.c
index eaccfe5..89b16cb 100644
--- a/svr-session.c
+++ b/svr-session.c
@@ -85,6 +85,10 @@ void svr_session(int sock, int childpipe,
/* Initialise server specific parts of the session */
svr_ses.childpipe = childpipe;
svr_ses.addrstring = addrstring;
+#ifdef __uClinux__
+ svr_ses.server_pid = getpid();
+#endif
+ svr_ses.addrstring = addrstring;
svr_authinitialise();
chaninitialise(svr_chantypes);
svr_chansessinitialise();
@@ -144,11 +148,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);