Date: Thu, 29 Dec 1994 12:25:51 -0600 From: Peter da Silva <peter@bonkers.taronga.com> To: Wankle Rotary Engine <wpaul@skynet.ctr.columbia.edu> Cc: hackers@freebsd.org, current@freebsd.org Subject: Re: syslogd changes, second cut Message-ID: <199412291825.MAA03581@bonkers.taronga.com> In-Reply-To: Your message of "Thu, 29 Dec 94 12:03:51 EST." <199412291703.MAA02510@skynet.ctr.columbia.edu>
next in thread | previous in thread | raw e-mail | index | archive | help
OK, here's the same set of changes with respect to the 2.0-current syslogd. UNTESTED. Changing the code from (void)strcpy(line, "kernel: "); To using getbootfile() should be a piece of cake, if you have specs on getbootfile(). As I said, getbootfile isn't in 1.1 or 4.4 and it's kinda hard to find the docco over FTP. The 2.0-current syslogd doesn't compile vanilla on 1.1.5.1 but this one produces the same warnings as the 2.0-current one so I assume it's OK. *** syslogd.c.orig Sat Aug 6 00:09:00 1994 --- syslogd.c Thu Dec 29 12:17:33 1994 *************** *** 61,66 **** --- 61,68 ---- * Author: Eric Allman * extensive changes by Ralph Campbell * more extensive changes by Eric Allman (again) + * Extension to log by program name as well as facility and priority + * by Peter da Silva. */ #define MAXLINE 1024 /* maximum line length */ *************** *** 79,84 **** --- 81,87 ---- #include <sys/un.h> #include <sys/time.h> #include <sys/resource.h> + #include <sys/syslimits.h> #include <netinet/in.h> #include <netdb.h> *************** *** 130,135 **** --- 133,139 ---- short f_file; /* file descriptor */ time_t f_time; /* time this was last written */ u_char f_pmask[LOG_NFACILITIES+1]; /* priority mask */ + char *f_program; /* program this applies to */ union { char f_uname[MAXUNAMES][UT_NAMESIZE+1]; struct { *************** *** 186,192 **** int MarkInterval = 20 * 60; /* interval between marks in seconds */ int MarkSeq = 0; /* mark sequence number */ ! void cfline __P((char *, struct filed *)); char *cvthname __P((struct sockaddr_in *)); int decode __P((const char *, CODE *)); void die __P((int)); --- 190,196 ---- int MarkInterval = 20 * 60; /* interval between marks in seconds */ int MarkSeq = 0; /* mark sequence number */ ! void cfline __P((char *, struct filed *, char *)); char *cvthname __P((struct sockaddr_in *)); int decode __P((const char *, CODE *)); void die __P((int)); *************** *** 469,474 **** --- 473,480 ---- struct filed *f; int fac, msglen, omask, prilev; char *timestamp; + char prog[NAME_MAX+1]; + int i; dprintf("logmsg: pri %o, flags %x, from %s, msg %s\n", pri, flags, from, msg); *************** *** 492,497 **** --- 498,509 ---- msglen -= 16; } + /* skip leading blanks */ + while(isspace(*msg)) { + msg++; + msglen--; + } + /* extract facility and priority level */ if (flags & MARK) fac = LOG_NFACILITIES; *************** *** 499,504 **** --- 511,524 ---- fac = LOG_FAC(pri); prilev = LOG_PRI(pri); + /* extract program name */ + for(i = 0; i < NAME_MAX; i++) { + if(!isalnum(msg[i])) + break; + prog[i] = msg[i]; + } + prog[i] = 0; + /* log the message to the particular outputs */ if (!Initialized) { f = &consfile; *************** *** 516,521 **** --- 536,545 ---- if (f->f_pmask[fac] < prilev || f->f_pmask[fac] == INTERNAL_NOPRI) continue; + /* skip messages with the incorrect program name */ + if(f->f_program) + if(strcmp(prog, f->f_program) != 0) + continue; if (f->f_type == F_CONSOLE && (flags & IGN_CONS)) continue; *************** *** 866,871 **** --- 890,896 ---- struct filed *f, *next, **nextp; char *p; char cline[LINE_MAX]; + char prog[NAME_MAX+1]; dprintf("init\n"); *************** *** 887,892 **** --- 912,918 ---- break; } next = f->f_next; + if(f->f_program) free(f->f_program); free((char *)f); } Files = NULL; *************** *** 896,904 **** if ((cf = fopen(ConfFile, "r")) == NULL) { dprintf("cannot open %s\n", ConfFile); *nextp = (struct filed *)calloc(1, sizeof(*f)); ! cfline("*.ERR\t/dev/console", *nextp); (*nextp)->f_next = (struct filed *)calloc(1, sizeof(*f)); ! cfline("*.PANIC\t*", (*nextp)->f_next); Initialized = 1; return; } --- 922,930 ---- if ((cf = fopen(ConfFile, "r")) == NULL) { dprintf("cannot open %s\n", ConfFile); *nextp = (struct filed *)calloc(1, sizeof(*f)); ! cfline("*.ERR\t/dev/console", *nextp, "*"); (*nextp)->f_next = (struct filed *)calloc(1, sizeof(*f)); ! cfline("*.PANIC\t*", (*nextp)->f_next, "*"); Initialized = 1; return; } *************** *** 907,928 **** * Foreach line in the conf table, open that file. */ f = NULL; while (fgets(cline, sizeof(cline), cf) != NULL) { /* * check for end-of-section, comments, strip off trailing ! * spaces and newline character. */ for (p = cline; isspace(*p); ++p) continue; ! if (*p == NULL || *p == '#') continue; for (p = strchr(cline, '\0'); isspace(*--p);) continue; *++p = '\0'; f = (struct filed *)calloc(1, sizeof(*f)); *nextp = f; nextp = &f->f_next; ! cfline(cline, f); } /* close the configuration file */ --- 933,976 ---- * Foreach line in the conf table, open that file. */ f = NULL; + strcpy(prog, "*"); while (fgets(cline, sizeof(cline), cf) != NULL) { /* * check for end-of-section, comments, strip off trailing ! * spaces and newline character. #!prog is treated specially: ! * following lines apply only to that program. */ for (p = cline; isspace(*p); ++p) continue; ! if (*p == 0) continue; + if(*p == '#') { + p++; + if(*p!='!') + continue; + } + if(*p=='!') { + p++; + while(isspace(*p)) p++; + if(!*p) { + strcpy(prog, "*"); + continue; + } + for(i = 0; i < NAME_MAX; i++) { + if(!isalnum(p[i])) + break; + prog[i] = p[i]; + } + prog[i] = 0; + continue; + } for (p = strchr(cline, '\0'); isspace(*--p);) continue; *++p = '\0'; f = (struct filed *)calloc(1, sizeof(*f)); *nextp = f; nextp = &f->f_next; ! cfline(cline, f, prog); } /* close the configuration file */ *************** *** 954,959 **** --- 1002,1010 ---- printf("%s, ", f->f_un.f_uname[i]); break; } + if(f->f_program) { + printf(" (%s)", f->f_program); + } printf("\n"); } } *************** *** 966,981 **** * Crack a configuration file line */ void ! cfline(line, f) char *line; struct filed *f; { struct hostent *hp; int i, pri; char *bp, *p, *q; char buf[MAXLINE], ebuf[100]; ! dprintf("cfline(%s)\n", line); errno = 0; /* keep strerror() stuff out of logerror messages */ --- 1017,1033 ---- * Crack a configuration file line */ void ! cfline(line, f, prog) char *line; struct filed *f; + char *prog; { struct hostent *hp; int i, pri; char *bp, *p, *q; char buf[MAXLINE], ebuf[100]; ! dprintf("cfline(\"%s\", f, \"%s\")\n", line, prog); errno = 0; /* keep strerror() stuff out of logerror messages */ *************** *** 983,988 **** --- 1035,1049 ---- memset(f, 0, sizeof(*f)); for (i = 0; i <= LOG_NFACILITIES; i++) f->f_pmask[i] = INTERNAL_NOPRI; + + /* save program name if any */ + if(prog && *prog=='*') prog = NULL; + if(prog) { + f->f_program = calloc(1, strlen(prog)+1); + if(f->f_program) { + strcpy(f->f_program, prog); + } + } /* scan through the list of selectors */ for (p = line; *p && *p != '\t';) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199412291825.MAA03581>