Files
Arquivotheca.SunOS-4.1.4/old/syslog.c
seta75D ff309bfe1c Init
2021-10-11 18:37:13 -03:00

113 lines
2.0 KiB
C

#ifndef lint
static char sccsid[] = "@(#)syslog.c 1.1 94/10/31 Copyr 1984 Sun Micro";
#endif
/*
* Copyright (c) 1984 by Sun Microsystems, Inc.
*/
/*
* syslog - make a syslog entry
*/
#include <stdio.h>
#include <ctype.h>
#include <syslog.h>
char *lnames[] = {
"EMERG", "ALERT", "CRIT", "ERROR",
"WARNING", "NOTICE", "INFO", "DEBUG", 0
};
int level; /* logging level */
int flags; /* flags for openlog */
char *ident; /* tag for log */
char *name; /* our name */
char buf[BUFSIZ];
main(argc, argv)
int argc;
char **argv;
{
int logstdin = 0;
name = argv[0];
while (--argc > 0 && (++argv)[0][0] == '-')
switch (argv[0][1]) {
case 'p': /* log pid */
flags |= LOG_PID;
break;
case 'i': /* ident */
if (argc > 1 && argv[1][0] != '-') {
ident = argv[1];
argv++;
argc--;
} else
ident = name;
break;
case '\0': /* log stdin */
logstdin = 1;
break;
default:
setlevel(&argv[0][1]);
break;
}
(void) openlog(ident, flags, 0);
if (logstdin) {
while (fgets(buf, sizeof (buf) - 1, stdin) != NULL)
syslog(level, buf);
} else {
while (argc-- > 0) {
strcat(buf, " ");
strcat(buf, *argv++);
}
syslog(level, buf+1);
}
exit(0);
/* NOTREACHED */
}
setlevel(s)
register char *s;
{
register char **cp;
if (isdigit(*s)) {
level = atoi(s);
if (level < LOG_EMERG || level > LOG_DEBUG) {
fprintf(stderr, "%s: level must be in range %d - %d\n",
name, LOG_EMERG, LOG_DEBUG);
exit(1);
}
} else {
if (!isupper(*s)) {
fprintf(stderr, "%s: unknown option '%s'\n", name, s);
exit(1);
}
for (cp = lnames; *cp; cp++)
if (strcmp(*cp, s) == 0)
break;
if (*cp)
level = cp - lnames + 1;
else {
fprintf(stderr,
"%s: unknown level name, valid names are:\n", name);
for (cp = lnames; *cp; cp++)
fprintf(stderr, "%s%s",
cp == lnames ? "" : ", ", *cp);
fprintf(stderr, "\n");
exit(1);
}
}
if (getuid() && level <= LOG_ALERT) {
fprintf(stderr, "%s: must be superuser to log at level %d\n",
name, level);
exit(1);
}
}