projects
/
unix-history
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
BSD 4_3 release
[unix-history]
/
usr
/
src
/
lib
/
libc
/
gen
/
syslog.c
diff --git
a/usr/src/lib/libc/gen/syslog.c
b/usr/src/lib/libc/gen/syslog.c
index
81554b5
..
f0dcc80
100644
(file)
--- a/
usr/src/lib/libc/gen/syslog.c
+++ b/
usr/src/lib/libc/gen/syslog.c
@@
-4,9
+4,9
@@
* specifies the terms and conditions for redistribution.
*/
* specifies the terms and conditions for redistribution.
*/
-#if
ndef lint
-static char sccsid[] = "@(#)syslog.c 5.
1 (Berkeley) %G%
";
-#endif not lint
+#if
defined(LIBC_SCCS) && !defined(lint)
+static char sccsid[] = "@(#)syslog.c 5.
9 (Berkeley) 5/7/86
";
+#endif
LIBC_SCCS and
not lint
/*
* SYSLOG -- print message on log file
/*
* SYSLOG -- print message on log file
@@
-28,28
+28,28
@@
static char sccsid[] = "@(#)syslog.c 5.1 (Berkeley) %G%";
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/file.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/file.h>
-#include <syslog.h>
+#include <sys/signal.h>
+#include <sys/syslog.h>
#include <netdb.h>
#include <netdb.h>
+#include <strings.h>
#define MAXLINE 1024 /* max message size */
#define NULL 0 /* manifest */
#define MAXLINE 1024 /* max message size */
#define NULL 0 /* manifest */
-#define mask(p) (1 << (p))
-#define IMPORTANT (mask(KERN_EMERG)|mask(KERN_ALERT)|mask(KERN_ERR)|mask(KERN_FAIL)\
- |mask(KERN_RECOV)|mask(KERN_INFO)|mask(LOG_EMERG)|mask(LOG_ALERT)\
- |mask(LOG_CRIT)|mask(LOG_ERR)|mask(LOG_FAIL))
+#define PRIMASK(p) (1 << ((p) & LOG_PRIMASK))
+#define PRIFAC(p) (((p) & LOG_FACMASK) >> 3)
+#define IMPORTANT LOG_ERR
static char logname[] = "/dev/log";
static char ctty[] = "/dev/console";
static int LogFile = -1; /* fd for log */
static int LogStat = 0; /* status bits, set by openlog() */
static char logname[] = "/dev/log";
static char ctty[] = "/dev/console";
static int LogFile = -1; /* fd for log */
static int LogStat = 0; /* status bits, set by openlog() */
-static char *LogTag = NULL; /* string to tag the entry with */
- /* mask of priorities to be logged */
-static int LogMask = ~(mask(KERN_EMERG)|mask(KERN_ALERT)|mask(KERN_ERR)|
- mask(KERN_FAIL)|mask(KERN_RECOV)|mask(KERN_INFO));
+static char *LogTag = "syslog"; /* string to tag the entry with */
+static int LogMask = 0xff; /* mask of priorities to be logged */
+static int LogFacility = LOG_USER; /* default facility code */
-static struct sockaddr SyslogAddr;
+static struct sockaddr SyslogAddr;
/* AF_UNIX address of local logger */
extern int errno, sys_nerr;
extern char *sys_errlist[];
extern int errno, sys_nerr;
extern char *sys_errlist[];
@@
-65,13
+65,22
@@
syslog(pri, fmt, p0, p1, p2, p3, p4)
int pid, olderrno = errno;
/* see if we should just throw out this message */
int pid, olderrno = errno;
/* see if we should just throw out this message */
- if (pri <= 0 ||
pri >= 32 || (mask
(pri) & LogMask) == 0)
+ if (pri <= 0 ||
PRIFAC(pri) >= LOG_NFACILITIES || (PRIMASK
(pri) & LogMask) == 0)
return;
if (LogFile < 0)
return;
if (LogFile < 0)
- openlog(LogTag, LogStat & ~LOG_ODELAY, 0);
+ openlog(LogTag, LogStat | LOG_NDELAY, 0);
+
+ /* set default facility if none specified */
+ if ((pri & LOG_FACMASK) == 0)
+ pri |= LogFacility;
+
+ /* build the message */
o = outline;
sprintf(o, "<%d>", pri);
o += strlen(o);
o = outline;
sprintf(o, "<%d>", pri);
o += strlen(o);
+ time(&now);
+ sprintf(o, "%.15s ", ctime(&now) + 4);
+ o += strlen(o);
if (LogTag) {
strcpy(o, LogTag);
o += strlen(o);
if (LogTag) {
strcpy(o, LogTag);
o += strlen(o);
@@
-80,9
+89,10
@@
syslog(pri, fmt, p0, p1, p2, p3, p4)
sprintf(o, "[%d]", getpid());
o += strlen(o);
}
sprintf(o, "[%d]", getpid());
o += strlen(o);
}
- time(&now);
- sprintf(o, ": %.15s-- ", ctime(&now) + 4);
- o += strlen(o);
+ if (LogTag) {
+ strcpy(o, ": ");
+ o += 2;
+ }
b = buf;
f = fmt;
b = buf;
f = fmt;
@@
-108,41
+118,54
@@
syslog(pri, fmt, p0, p1, p2, p3, p4)
c = strlen(outline);
if (c > MAXLINE)
c = MAXLINE;
c = strlen(outline);
if (c > MAXLINE)
c = MAXLINE;
+
+ /* output the message to the local logger */
if (sendto(LogFile, outline, c, 0, &SyslogAddr, sizeof SyslogAddr) >= 0)
return;
if (sendto(LogFile, outline, c, 0, &SyslogAddr, sizeof SyslogAddr) >= 0)
return;
- if (!(LogStat & LOG_CONS)
&& !(mask(pri) & IMPORTANT)
)
+ if (!(LogStat & LOG_CONS))
return;
return;
- pid = fork();
+
+ /* output the message to the console */
+ pid = vfork();
if (pid == -1)
return;
if (pid == 0) {
if (pid == -1)
return;
if (pid == 0) {
- LogFile = open(ctty, O_RDWR);
+ int fd;
+
+ signal(SIGALRM, SIG_DFL);
+ sigsetmask(sigblock(0) & ~sigmask(SIGALRM));
+ alarm(5);
+ fd = open(ctty, O_WRONLY);
+ alarm(0);
strcat(o, "\r");
strcat(o, "\r");
- write(LogFile, outline, c+1);
- close(LogFile);
- exit(0);
+ o = index(outline, '>') + 1;
+ write(fd, o, c + 1 - (o - outline));
+ close(fd);
+ _exit(0);
}
}
- while ((c = wait((int *)0)) > 0 && c != pid)
- ;
+ if (!(LogStat & LOG_NOWAIT))
+ while ((c = wait((int *)0)) > 0 && c != pid)
+ ;
}
/*
* OPENLOG -- open system log
*/
}
/*
* OPENLOG -- open system log
*/
-openlog(ident, logstat, logmask)
+
+openlog(ident, logstat, logfac)
char *ident;
char *ident;
- int logstat, log
mask
;
+ int logstat, log
fac
;
{
{
-
-
LogTag = (ident != NULL) ? ident : "syslog"
;
+ if (ident != NULL)
+
LogTag = ident
;
LogStat = logstat;
LogStat = logstat;
- if (log
mask
!= 0)
- Log
Mask = logmask
;
+ if (log
fac
!= 0)
+ Log
Facility = logfac & LOG_FACMASK
;
if (LogFile >= 0)
return;
SyslogAddr.sa_family = AF_UNIX;
strncpy(SyslogAddr.sa_data, logname, sizeof SyslogAddr.sa_data);
if (LogFile >= 0)
return;
SyslogAddr.sa_family = AF_UNIX;
strncpy(SyslogAddr.sa_data, logname, sizeof SyslogAddr.sa_data);
- if (
!(LogStat & LOG_ODELAY)
) {
+ if (
LogStat & LOG_NDELAY
) {
LogFile = socket(AF_UNIX, SOCK_DGRAM, 0);
fcntl(LogFile, F_SETFD, 1);
}
LogFile = socket(AF_UNIX, SOCK_DGRAM, 0);
fcntl(LogFile, F_SETFD, 1);
}
@@
-151,6
+174,7
@@
openlog(ident, logstat, logmask)
/*
* CLOSELOG -- close the system log
*/
/*
* CLOSELOG -- close the system log
*/
+
closelog()
{
closelog()
{