|
jvdias |
cfec38b |
--- mgetty-1.1.31/logname.c.161174_tcflush 2005-07-27 10:41:10.076619000 -0400
|
|
jvdias |
cfec38b |
+++ mgetty-1.1.31/logname.c 2005-07-27 10:44:39.675810000 -0400
|
|
jvdias |
cfec38b |
@@ -368,10 +368,12 @@
|
|
jvdias |
89fb67f |
{
|
|
jvdias |
89fb67f |
printf( "\r\n\07\r\nYour login time (%d minutes) ran out. Goodbye.\r\n",
|
|
jvdias |
89fb67f |
(max_login_time / 60)+1 );
|
|
jvdias |
89fb67f |
-
|
|
jvdias |
cfec38b |
+ signal(SIGALRM,SIG_DFL);/* turn off alarm */
|
|
jvdias |
cfec38b |
+ alarm(0);
|
|
jvdias |
89fb67f |
sleep(3); /* give message time to xmit */
|
|
jvdias |
89fb67f |
lprintf( L_AUDIT, "failed dev=%s, pid=%d, login time out",
|
|
jvdias |
89fb67f |
Device, getpid() );
|
|
jvdias |
89fb67f |
+ tcflush(1,TCOFLUSH); /* allow us to exit without hanging (bug 164002) */
|
|
jvdias |
89fb67f |
exit(0); /* bye bye... */
|
|
jvdias |
89fb67f |
}
|
|
jvdias |
89fb67f |
ch = CKILL; /* timeout #1 -> clear input */
|
|
jvdias |
cfec38b |
--- mgetty-1.1.31/mgetty.c.161174_tcflush 2003-11-17 14:09:41.000000000 -0500
|
|
jvdias |
cfec38b |
+++ mgetty-1.1.31/mgetty.c 2005-07-27 10:41:43.155507000 -0400
|
|
jvdias |
cfec38b |
@@ -94,6 +94,7 @@
|
|
jvdias |
cfec38b |
lprintf( L_AUDIT, "failed dev=%s, pid=%d, got signal %d, exiting",
|
|
jvdias |
cfec38b |
Device, getpid(), signo );
|
|
jvdias |
cfec38b |
rmlocks();
|
|
jvdias |
cfec38b |
+ tcflush(1,TCOFLUSH);
|
|
jvdias |
cfec38b |
exit(10);
|
|
jvdias |
cfec38b |
}
|
|
jvdias |
cfec38b |
|
|
jvdias |
cfec38b |
--- mgetty-1.1.31/logfile.c.161174_tcflush 2003-01-14 16:30:20.000000000 -0500
|
|
jvdias |
cfec38b |
+++ mgetty-1.1.31/logfile.c 2005-07-27 10:43:49.279257000 -0400
|
|
jvdias |
cfec38b |
@@ -22,6 +22,7 @@
|
|
jvdias |
cfec38b |
#endif
|
|
jvdias |
cfec38b |
|
|
jvdias |
cfec38b |
#ifdef SYSLOG
|
|
jvdias |
cfec38b |
+#include <signal.h>
|
|
jvdias |
cfec38b |
#include <syslog.h>
|
|
jvdias |
cfec38b |
|
|
jvdias |
cfec38b |
#if !defined(linux) && !defined(BSD) && !defined(_SCO_DS) && \
|
|
jvdias |
cfec38b |
@@ -212,6 +213,7 @@
|
|
jvdias |
cfec38b |
int errnr;
|
|
jvdias |
cfec38b |
char * p;
|
|
jvdias |
cfec38b |
static int first_open = TRUE;
|
|
jvdias |
cfec38b |
+sigset_t ss, oss;
|
|
jvdias |
cfec38b |
|
|
jvdias |
cfec38b |
if ( level > log_level ) /* log level high enough? */
|
|
jvdias |
cfec38b |
{
|
|
jvdias |
cfec38b |
@@ -315,7 +317,24 @@
|
|
jvdias |
cfec38b |
tm->tm_mon+1, tm->tm_mday,
|
|
jvdias |
cfec38b |
tm->tm_hour, tm->tm_min, tm->tm_sec, ws );
|
|
jvdias |
cfec38b |
#ifdef SYSLOG
|
|
jvdias |
cfec38b |
+ /* block all handled signals before syslog(), else an lprintf in
|
|
jvdias |
cfec38b |
+ * a signal handler could deadlock
|
|
jvdias |
cfec38b |
+ */
|
|
jvdias |
cfec38b |
+ sigemptyset(&ss);
|
|
jvdias |
cfec38b |
+ sigaddset(&ss, SIGALRM);
|
|
jvdias |
cfec38b |
+ sigaddset(&ss, SIGCHLD);
|
|
jvdias |
cfec38b |
+ sigaddset(&ss, SIGHUP);
|
|
jvdias |
cfec38b |
+ sigaddset(&ss, SIGINT);
|
|
jvdias |
cfec38b |
+ sigaddset(&ss, SIGPIPE);
|
|
jvdias |
cfec38b |
+ sigaddset(&ss, SIGQUIT);
|
|
jvdias |
cfec38b |
+ sigaddset(&ss, SIGTERM);
|
|
jvdias |
cfec38b |
+ sigaddset(&ss, SIGUSR1);
|
|
jvdias |
cfec38b |
+ sigaddset(&ss, SIGUSR2);
|
|
jvdias |
cfec38b |
+ sigprocmask(SIG_BLOCK, &ss, &oss;;
|
|
jvdias |
cfec38b |
+
|
|
jvdias |
cfec38b |
syslog( LOG_NOTICE, "%s", ws );
|
|
jvdias |
cfec38b |
+
|
|
jvdias |
cfec38b |
+ sigprocmask(SIG_SETMASK, &oss, 0L);
|
|
jvdias |
cfec38b |
#endif
|
|
jvdias |
cfec38b |
}
|
|
jvdias |
cfec38b |
else if ( level != L_ERROR && level != L_FATAL )
|
|
jvdias |
cfec38b |
@@ -334,7 +353,21 @@
|
|
jvdias |
cfec38b |
( errnr <= sys_nerr ) ? sys_errlist[errnr]:
|
|
jvdias |
cfec38b |
"<error not in list>" );
|
|
jvdias |
cfec38b |
#ifdef SYSLOG
|
|
jvdias |
cfec38b |
+ sigemptyset(&ss);
|
|
jvdias |
cfec38b |
+ sigaddset(&ss, SIGALRM);
|
|
jvdias |
cfec38b |
+ sigaddset(&ss, SIGCHLD);
|
|
jvdias |
cfec38b |
+ sigaddset(&ss, SIGHUP);
|
|
jvdias |
cfec38b |
+ sigaddset(&ss, SIGINT);
|
|
jvdias |
cfec38b |
+ sigaddset(&ss, SIGPIPE);
|
|
jvdias |
cfec38b |
+ sigaddset(&ss, SIGQUIT);
|
|
jvdias |
cfec38b |
+ sigaddset(&ss, SIGTERM);
|
|
jvdias |
cfec38b |
+ sigaddset(&ss, SIGUSR1);
|
|
jvdias |
cfec38b |
+ sigaddset(&ss, SIGUSR2);
|
|
jvdias |
cfec38b |
+ sigprocmask(SIG_BLOCK, &ss, &oss;;
|
|
jvdias |
cfec38b |
+
|
|
jvdias |
cfec38b |
syslog( level == L_FATAL? LOG_ALERT: LOG_ERR, "%s: %m", ws );
|
|
jvdias |
cfec38b |
+
|
|
jvdias |
cfec38b |
+ sigprocmask(SIG_SETMASK, &oss, 0L);
|
|
jvdias |
cfec38b |
#endif
|
|
jvdias |
cfec38b |
|
|
jvdias |
cfec38b |
#ifndef SYSLOG
|