summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Friedl <markus@cvs.openbsd.org>2001-06-12 10:58:30 +0000
committerMarkus Friedl <markus@cvs.openbsd.org>2001-06-12 10:58:30 +0000
commit8c76fd03d4027538bdf9e37ad1182cb50a9a45b3 (patch)
treef76f158a66bb9f7b4d64c682e0695dfe7b9c842b
parent144e0b2174f1d64e51129992a4accc462d116d9c (diff)
merge session_free into session_close()
merge pty_cleanup_proc into session_pty_cleanup()
-rw-r--r--usr.bin/ssh/session.c68
1 files changed, 26 insertions, 42 deletions
diff --git a/usr.bin/ssh/session.c b/usr.bin/ssh/session.c
index c9adf58853c..cd1fc21c553 100644
--- a/usr.bin/ssh/session.c
+++ b/usr.bin/ssh/session.c
@@ -33,7 +33,7 @@
*/
#include "includes.h"
-RCSID("$OpenBSD: session.c,v 1.84 2001/06/11 10:18:24 markus Exp $");
+RCSID("$OpenBSD: session.c,v 1.85 2001/06/12 10:58:29 markus Exp $");
#include "ssh.h"
#include "ssh1.h"
@@ -86,7 +86,7 @@ struct Session {
Session *session_new(void);
void session_set_fds(Session *s, int fdin, int fdout, int fderr);
-void session_pty_cleanup(Session *s);
+void session_pty_cleanup(void *session);
void session_proctitle(Session *s);
int session_setup_x11fwd(Session *s);
void session_close(Session *s);
@@ -189,27 +189,6 @@ xauthfile_cleanup_proc(void *_pw)
}
/*
- * Function to perform cleanup if we get aborted abnormally (e.g., due to a
- * dropped connection).
- */
-void
-pty_cleanup_proc(void *session)
-{
- Session *s=session;
- if (s == NULL)
- fatal("pty_cleanup_proc: no session");
- debug("pty_cleanup_proc: %s", s->tty);
-
- if (s->pid != 0) {
- /* Record that the user has logged out. */
- record_logout(s->pid, s->tty);
- }
-
- /* Release the pseudo-tty. */
- pty_release(s->tty);
-}
-
-/*
* Prepares for an interactive session. This is called after the user has
* been successfully authenticated. During this message exchange, pseudo
* terminals are allocated, X11, TCP/IP, and authentication agent forwardings
@@ -268,7 +247,7 @@ do_authenticated1(Authctxt *authctxt)
error("Failed to allocate pty.");
break;
}
- fatal_add_cleanup(pty_cleanup_proc, (void *)s);
+ fatal_add_cleanup(session_pty_cleanup, (void *)s);
pty_setowner(s->pw, s->tty);
/* Get TERM from the packet. Note that the value may be of arbitrary length. */
@@ -1174,7 +1153,6 @@ session_new(void)
debug("session_new: init");
for(i = 0; i < MAX_SESSIONS; i++) {
sessions[i].used = 0;
- sessions[i].self = i;
}
did_init = 1;
}
@@ -1186,6 +1164,7 @@ session_new(void)
s->ptyfd = -1;
s->ttyfd = -1;
s->used = 1;
+ s->self = i;
debug("session_new: session %d", i);
return s;
}
@@ -1302,7 +1281,7 @@ session_pty_req(Session *s)
* Add a cleanup function to clear the utmp entry and record logout
* time in case we call fatal() (e.g., the connection gets closed).
*/
- fatal_add_cleanup(pty_cleanup_proc, (void *)s);
+ fatal_add_cleanup(session_pty_cleanup, (void *)s);
pty_setowner(s->pw, s->tty);
/* Get window size from the packet. */
pty_change_window_size(s->ptyfd, s->row, s->col, s->xpixel, s->ypixel);
@@ -1486,19 +1465,27 @@ session_set_fds(Session *s, int fdin, int fdout, int fderr)
1);
}
+/*
+ * Function to perform pty cleanup. Also called if we get aborted abnormally
+ * (e.g., due to a dropped connection).
+ */
void
-session_pty_cleanup(Session *s)
+session_pty_cleanup(void *session)
{
- if (s == NULL || s->ttyfd == -1)
+ Session *s = session;
+
+ if (s == NULL) {
+ error("session_pty_cleanup: no session");
+ return;
+ }
+ if (s->ttyfd == -1)
return;
debug("session_pty_cleanup: session %d release %s", s->self, s->tty);
- /* Cancel the cleanup function. */
- fatal_remove_cleanup(pty_cleanup_proc, (void *)s);
-
/* Record that the user has logged out. */
- record_logout(s->pid, s->tty);
+ if (s->pid != 0)
+ record_logout(s->pid, s->tty);
/* Release the pseudo-tty. */
pty_release(s->tty);
@@ -1520,7 +1507,7 @@ session_exit_message(Session *s, int status)
fatal("session_close: no session");
c = channel_lookup(s->chanid);
if (c == NULL)
- fatal("session_close: session %d: no channel %d",
+ fatal("session_exit_message: session %d: no channel %d",
s->self, s->chanid);
debug("session_exit_message: session %d channel %d pid %d",
s->self, s->chanid, s->pid);
@@ -1558,9 +1545,13 @@ session_exit_message(Session *s, int status)
}
void
-session_free(Session *s)
+session_close(Session *s)
{
- debug("session_free: session %d pid %d", s->self, s->pid);
+ debug("session_close: session %d pid %d", s->self, s->pid);
+ if (s->ttyfd != -1) {
+ fatal_remove_cleanup(session_pty_cleanup, (void *)s);
+ session_pty_cleanup(s);
+ }
if (s->term)
xfree(s->term);
if (s->display)
@@ -1570,13 +1561,6 @@ session_free(Session *s)
if (s->auth_proto)
xfree(s->auth_proto);
s->used = 0;
-}
-
-void
-session_close(Session *s)
-{
- session_pty_cleanup(s);
- session_free(s);
session_proctitle(s);
}