summaryrefslogtreecommitdiff
path: root/usr.bin/ssh/monitor.c
diff options
context:
space:
mode:
authorDarren Tucker <dtucker@cvs.openbsd.org>2004-07-17 05:31:42 +0000
committerDarren Tucker <dtucker@cvs.openbsd.org>2004-07-17 05:31:42 +0000
commitcd1da93fdcb77629b53207e84d167d697e2a2b78 (patch)
treea111290710eda38a16e5725daba7cc1e7d75b4e4 /usr.bin/ssh/monitor.c
parenta1b7ba98885586ea761d0a2809d683fae1ab8e86 (diff)
Move "Last logged in at.." message generation to the monitor, right
before recording the new login. Fixes missing lastlog message when /var/log/lastlog is not world-readable and incorrect datestamp when multiple sessions are used (bz #463); much assistance & ok markus@
Diffstat (limited to 'usr.bin/ssh/monitor.c')
-rw-r--r--usr.bin/ssh/monitor.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/usr.bin/ssh/monitor.c b/usr.bin/ssh/monitor.c
index 604366225f0..a4dc59c7e6c 100644
--- a/usr.bin/ssh/monitor.c
+++ b/usr.bin/ssh/monitor.c
@@ -25,7 +25,7 @@
*/
#include "includes.h"
-RCSID("$OpenBSD: monitor.c,v 1.60 2004/06/22 05:05:45 dtucker Exp $");
+RCSID("$OpenBSD: monitor.c,v 1.61 2004/07/17 05:31:41 dtucker Exp $");
#include <openssl/dh.h>
@@ -73,6 +73,7 @@ extern u_char session_id[];
extern Buffer input, output;
extern Buffer auth_debug;
extern int auth_debug_init;
+extern Buffer loginmsg;
/* State exported from the child */
@@ -1051,10 +1052,6 @@ mm_answer_pty(int sock, Buffer *m)
buffer_put_int(m, 1);
buffer_put_cstring(m, s->tty);
- mm_request_send(sock, MONITOR_ANS_PTY, m);
-
- mm_send_fd(sock, s->ptyfd);
- mm_send_fd(sock, s->ttyfd);
/* We need to trick ttyslot */
if (dup2(s->ttyfd, 0) == -1)
@@ -1065,6 +1062,15 @@ mm_answer_pty(int sock, Buffer *m)
/* Now we can close the file descriptor again */
close(0);
+ /* send messages generated by record_login */
+ buffer_put_string(m, buffer_ptr(&loginmsg), buffer_len(&loginmsg));
+ buffer_clear(&loginmsg);
+
+ mm_request_send(sock, MONITOR_ANS_PTY, m);
+
+ mm_send_fd(sock, s->ptyfd);
+ mm_send_fd(sock, s->ttyfd);
+
/* make sure nothing uses fd 0 */
if ((fd0 = open(_PATH_DEVNULL, O_RDONLY)) < 0)
fatal("%s: open(/dev/null): %s", __func__, strerror(errno));