I've hacked newsyslog(8) to accept a list of log files to process on
the command line (very useful in combination with -F). See attached
patches. I'll commit this in a few days if noone objects.

DES
-- 
Dag-Erling Smorgrav - [EMAIL PROTECTED]

Index: newsyslog.8
===================================================================
RCS file: /home/ncvs/src/usr.sbin/newsyslog/newsyslog.8,v
retrieving revision 1.24
diff -u -r1.24 newsyslog.8
--- newsyslog.8 2000/04/04 08:50:01     1.24
+++ newsyslog.8 2000/05/08 18:57:20
@@ -28,6 +28,7 @@
 .Op Fl Fnrv
 .Op Fl f Ar config_file
 .Op Fl a Ar directory
+.Op Ar file ...
 .Sh DESCRIPTION
 .Nm Newsyslog
 is a program that should be scheduled to run periodically by
@@ -355,6 +356,11 @@
 option is useful for diagnosing system problems by providing you with
 fresh logs that contain only the problems.
 .El
+.Pp
+If additional command line arguments are given,
+.Nm
+will only examine log files that match those arguments; otherwise, it
+will examine all files listed in the configuration file.
 .Sh FILES
 .Bl -tag -width /etc/newsyslog.confxxxx -compact
 .It Pa /etc/newsyslog.conf
Index: newsyslog.c
===================================================================
RCS file: /home/ncvs/src/usr.sbin/newsyslog/newsyslog.c,v
retrieving revision 1.27
diff -u -r1.27 newsyslog.c
--- newsyslog.c 2000/04/04 08:50:01     1.27
+++ newsyslog.c 2000/05/08 18:52:47
@@ -95,7 +95,7 @@
 char hostname[MAXHOSTNAMELEN + 1];     /* hostname */
 char *daytime;                 /* timenow in human readable form */
 
-static struct conf_entry *parse_file();
+static struct conf_entry *parse_file(char **files);
 static char *sob(char *p);
 static char *son(char *p);
 static char *missing_field(char *p, char *errline);
@@ -121,7 +121,7 @@
        PRS(argc, argv);
        if (needroot && getuid() && geteuid())
                errx(1, "must have root privs");
-       p = q = parse_file();
+       p = q = parse_file(argv + optind);
 
        while (p) {
                do_entry(p);
@@ -214,7 +214,6 @@
        if ((p = strchr(hostname, '.'))) {
                *p = '\0';
        }
-       optind = 1;             /* Start options parsing */
        while ((c = getopt(argc, argv, "nrvFf:a:t:")) != -1)
                switch (c) {
                case 'n':
@@ -253,11 +252,12 @@
  * process
  */
 static struct conf_entry *
-parse_file(void)
+parse_file(char **files)
 {
        FILE *f;
        char line[BUFSIZ], *parse, *q;
        char *errline, *group;
+       char **p;
        struct conf_entry *first = NULL;
        struct conf_entry *working = NULL;
        struct passwd *pass;
@@ -274,6 +274,21 @@
                if ((line[0] == '\n') || (line[0] == '#'))
                        continue;
                errline = strdup(line);
+
+               q = parse = missing_field(sob(line), errline);
+               parse = son(line);
+               if (!*parse)
+                       errx(1, "malformed line (missing fields):\n%s", errline);
+               *parse = '\0';
+
+               if (*files) {
+                       for (p = files; *p; ++p)
+                               if (strcmp(*p, q) == 0)
+                                       break;
+                       if (!*p)
+                               continue;
+               }
+
                if (!first) {
                        working = (struct conf_entry *) malloc(sizeof(struct 
conf_entry));
                        first = working;
@@ -281,12 +296,6 @@
                        working->next = (struct conf_entry *) malloc(sizeof(struct 
conf_entry));
                        working = working->next;
                }
-
-               q = parse = missing_field(sob(line), errline);
-               parse = son(line);
-               if (!*parse)
-                       errx(1, "malformed line (missing fields):\n%s", errline);
-               *parse = '\0';
                working->log = strdup(q);
 
                q = parse = missing_field(sob(++parse), errline);

Reply via email to