|
|
researchv10 Norman
/*
* A first-shot at a syslog implementation on v10. Quite crude.
*/
#include <stdio.h>
#include <libc.h>
#include <errno.h>
#include "mail.h"
static char logname[128];
static int fd = -1;
static char id[67];
static int pid;
static char machine[64] = "<hostname>";
static logmask = -1;
openlog(name, flags, logord)
char *name;
int flags, logord;
{
char *cp;
int hnfd;
/* set up log file */
if ((cp=strrchr(name, '/'))!=NULL)
name = cp+1;
sprintf(logname, "%s%s.log", SMTPQROOT, name);
fd = open(logname, 1);
if (fd<0 && errno==ENOENT)
fd = creat(logname, 0666);
if (fd<0) {
fprintf(stderr, "cannot open log file, %s\n", logname);
close(2);
logmask = -1;
return;
}
strcpy(id, name);
pid = getpid();
#ifdef NOTDEF
/* real syslog has machine name here */
hnfd = open("/etc/whoami", 0);
if (hnfd > 0) {
char *cp;
read(hnfd, machine, sizeof(machine));
if ((cp = strchr(machine, '\n')) != NULL)
*cp = '\0';
close(hnfd);
}
#endif
logmask = LOG_UPTO(DEFAULT_LOG_LEVEL);
}
syslog(level, format, a1, a2, a3, a4, a5, a6, a7, a8 ,a9, a10)
char *format;
{
long now=time((long *)0);
char msg[20000], buf[20000];
if(((1<<level) & logmask) == 0)
return;
sprintf(msg, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10);
#ifdef NOTDEF
sprintf(buf, "%.15s %s %s[%d]: %s", ctime(&now)+4,
machine, id, pid, msg);
#endif
sprintf(buf, "%.15s %s[%d]: %s", ctime(&now)+4,
id, pid, msg);
if (buf[strlen(buf) - 1] != '\n')
strcat(buf, "\n");
lseek(fd, 0L, 2);
write(fd, buf, strlen(buf));
}
setlogmask(mask)
int mask;
{
int old = logmask;
if (logmask == -1)
return old;
logmask = mask;
return old;
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.