Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F107188206
D8402.id21848.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
D8402.id21848.diff
View Options
Index: etc/mtree/BSD.root.dist
===================================================================
--- etc/mtree/BSD.root.dist
+++ etc/mtree/BSD.root.dist
@@ -78,6 +78,8 @@
..
ssl
..
+ syslog.d
+ ..
zfs
..
..
Index: etc/syslog.conf
===================================================================
--- etc/syslog.conf
+++ etc/syslog.conf
@@ -34,3 +34,5 @@
!ppp
*.* /var/log/ppp.log
!*
+include /etc/syslog.d
+include /usr/local/etc/syslog.d
Index: usr.sbin/syslogd/syslog.conf.5
===================================================================
--- usr.sbin/syslogd/syslog.conf.5
+++ usr.sbin/syslogd/syslog.conf.5
@@ -28,7 +28,7 @@
.\" @(#)syslog.conf.5 8.1 (Berkeley) 6/9/93
.\" $FreeBSD$
.\"
-.Dd September 12, 2012
+.Dd October 31, 2016
.Dt SYSLOG.CONF 5
.Os
.Sh NAME
@@ -62,6 +62,14 @@
.Em action
field by one or more tab characters or spaces.
.Pp
+A special
+.Em include
+keyword can be used to include all the files finishing with '.conf' and not
+starting with a '.', available
+in the
+.Pa directory
+specified in argument.
+.Pp
Note that if you use spaces as separators, your
.Nm
might be incompatible with other Unices or Unix-like systems.
Index: usr.sbin/syslogd/syslogd.c
===================================================================
--- usr.sbin/syslogd/syslogd.c
+++ usr.sbin/syslogd/syslogd.c
@@ -95,6 +95,7 @@
#include <arpa/inet.h>
#include <ctype.h>
+#include <dirent.h>
#include <err.h>
#include <errno.h>
#include <fcntl.h>
@@ -1601,6 +1602,132 @@
exit(1);
}
+static int
+nodots(const struct dirent *dp)
+{
+
+ return (dp->d_name[0] != '.');
+}
+
+static void
+readconfigfile(FILE *cf, struct filed **nextp)
+{
+ FILE *cf2;
+ struct filed *f;
+ struct dirent **ent;
+ char cline[LINE_MAX];
+ char host[MAXHOSTNAMELEN];
+ char prog[LINE_MAX];
+ char file[MAXPATHLEN];
+ char *p, *tmp;
+ int i, nents, n;
+
+ /*
+ * Foreach line in the conf table, open that file.
+ */
+ f = NULL;
+ (void)strlcpy(host, "*", sizeof(host));
+ (void)strlcpy(prog, "*", sizeof(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 (strncmp(p, "include", 7) == 0) {
+ p += 7;
+ while (isspace(*p))
+ p++;
+ tmp = p;
+ while (*tmp != '\0' && !isspace(*tmp))
+ tmp++;
+ *tmp = '\0';
+ dprintf("Trying to include files in '%s'", p);
+ nents = scandir(p, &ent, nodots, alphasort);
+ for (i = 0; i < nents; i++) {
+ if ((n = strlen(ent[i]->d_name)) <= 5)
+ continue;
+ tmp = &ent[i]->d_name[n - 5];
+ if (strcmp(tmp, ".conf") != 0)
+ continue;
+ snprintf(file, sizeof(file), "%s/%s", p,
+ ent[i]->d_name);
+ cf2 = fopen(file, "r");
+ if (cf2 == NULL)
+ continue;
+ dprintf("reading %s\n", file);
+ readconfigfile(cf2, nextp);
+ fclose(cf2);
+ }
+ continue;
+ }
+ if (*p == '#') {
+ p++;
+ if (*p != '!' && *p != '+' && *p != '-')
+ continue;
+ }
+ if (*p == '+' || *p == '-') {
+ host[0] = *p++;
+ while (isspace(*p))
+ p++;
+ if ((!*p) || (*p == '*')) {
+ (void)strlcpy(host, "*", sizeof(host));
+ continue;
+ }
+ if (*p == '@')
+ p = LocalHostName;
+ for (i = 1; i < MAXHOSTNAMELEN - 1; i++) {
+ if (!isalnum(*p) && *p != '.' && *p != '-'
+ && *p != ',' && *p != ':' && *p != '%')
+ break;
+ host[i] = *p++;
+ }
+ host[i] = '\0';
+ continue;
+ }
+ if (*p == '!') {
+ p++;
+ while (isspace(*p)) p++;
+ if ((!*p) || (*p == '*')) {
+ (void)strlcpy(prog, "*", sizeof(prog));
+ continue;
+ }
+ for (i = 0; i < LINE_MAX - 1; i++) {
+ if (!isprint(p[i]) || isspace(p[i]))
+ break;
+ prog[i] = p[i];
+ }
+ prog[i] = 0;
+ continue;
+ }
+ for (p = cline + 1; *p != '\0'; p++) {
+ if (*p != '#')
+ continue;
+ if (*(p - 1) == '\\') {
+ strcpy(p - 1, p);
+ p--;
+ continue;
+ }
+ *p = '\0';
+ break;
+ }
+ for (i = strlen(cline) - 1; i >= 0 && isspace(cline[i]); i--)
+ cline[i] = '\0';
+ f = (struct filed *)calloc(1, sizeof(*f));
+ if (f == NULL) {
+ logerror("calloc");
+ exit(1);
+ }
+ *nextp = f;
+ nextp = &f->f_next;
+ cfline(cline, f, prog, host);
+ }
+}
+
/*
* INIT -- Initialize syslogd from configuration table
*/
@@ -1611,9 +1738,6 @@
FILE *cf;
struct filed *f, *next, **nextp;
char *p;
- char cline[LINE_MAX];
- char prog[LINE_MAX];
- char host[MAXHOSTNAMELEN];
char oldLocalHostName[MAXHOSTNAMELEN];
char hostMsg[2*MAXHOSTNAMELEN+40];
char bootfileMsg[LINE_MAX];
@@ -1684,7 +1808,6 @@
free((char *)f);
}
Files = NULL;
- nextp = &Files;
/* open the configuration file */
if ((cf = fopen(ConfFile, "r")) == NULL) {
@@ -1705,83 +1828,7 @@
return;
}
- /*
- * Foreach line in the conf table, open that file.
- */
- f = NULL;
- (void)strlcpy(host, "*", sizeof(host));
- (void)strlcpy(prog, "*", sizeof(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 != '!' && *p != '+' && *p != '-')
- continue;
- }
- if (*p == '+' || *p == '-') {
- host[0] = *p++;
- while (isspace(*p))
- p++;
- if ((!*p) || (*p == '*')) {
- (void)strlcpy(host, "*", sizeof(host));
- continue;
- }
- if (*p == '@')
- p = LocalHostName;
- for (i = 1; i < MAXHOSTNAMELEN - 1; i++) {
- if (!isalnum(*p) && *p != '.' && *p != '-'
- && *p != ',' && *p != ':' && *p != '%')
- break;
- host[i] = *p++;
- }
- host[i] = '\0';
- continue;
- }
- if (*p == '!') {
- p++;
- while (isspace(*p)) p++;
- if ((!*p) || (*p == '*')) {
- (void)strlcpy(prog, "*", sizeof(prog));
- continue;
- }
- for (i = 0; i < LINE_MAX - 1; i++) {
- if (!isprint(p[i]) || isspace(p[i]))
- break;
- prog[i] = p[i];
- }
- prog[i] = 0;
- continue;
- }
- for (p = cline + 1; *p != '\0'; p++) {
- if (*p != '#')
- continue;
- if (*(p - 1) == '\\') {
- strcpy(p - 1, p);
- p--;
- continue;
- }
- *p = '\0';
- break;
- }
- for (i = strlen(cline) - 1; i >= 0 && isspace(cline[i]); i--)
- cline[i] = '\0';
- f = (struct filed *)calloc(1, sizeof(*f));
- if (f == NULL) {
- logerror("calloc");
- exit(1);
- }
- *nextp = f;
- nextp = &f->f_next;
- cfline(cline, f, prog, host);
- }
+ readconfigfile(cf, &Files);
/* close the configuration file */
(void)fclose(cf);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Jan 12, 9:47 AM (21 h, 6 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
15767110
Default Alt Text
D8402.id21848.diff (6 KB)
Attached To
Mode
D8402: Add a new 'include' keyword to syslog.conf
Attached
Detach File
Event Timeline
Log In to Comment