Bug 202190

Summary: newsyslog include processing tries to parse directories as files
Product: Base System Reporter: Gregory Neil Shapiro <gshapiro>
Component: binAssignee: freebsd-bugs (Nobody) <bugs>
Status: Closed FIXED    
Severity: Affects Some People    
Priority: ---    
Version: 10.2-STABLE   
Hardware: i386   
OS: Any   
Attachments:
Description Flags
newsyslog.c patch to skip directories for includes none

Description Gregory Neil Shapiro freebsd_committer 2015-08-09 01:13:25 UTC
Created attachment 159681 [details]
newsyslog.c patch to skip directories for includes

If a directory exists under /etc/newsyslog.conf.d/ or /usr/local/etc/newsyslog.conf.d/, newsyslog tries to parse the directory as a file:

# grep include /etc/newsyslog.conf
# rotated, then the entry for that file should include the 'N' flag.
<include> /etc/newsyslog.conf.d/*
<include> /usr/local/etc/newsyslog.conf.d/*
# ls -al /etc/newsyslog.conf.d/
total 10
drwxr-xr-x   3 root  wheel   512 Aug  8 18:05 .
drwxr-xr-x  25 root  wheel  2560 Aug  8 10:42 ..
drwxr-xr-x   2 root  wheel   512 Aug  7 23:44 CVS
-rw-r--r--   1 root  wheel   190 Aug  7 20:01 local.conf
# /usr/sbin/newsyslog
newsyslog: malformed line (missing fields):
��

The attached patch skips directories when including files.

If for some reason, this change isn't desirable, a workaround is to change the default /etc/newsyslog.conf to only include configuration files instead of all files by replacing:

<include> /etc/newsyslog.conf.d/*
<include> /usr/local/etc/newsyslog.conf.d/*

with:

<include> /etc/newsyslog.conf.d/*.conf
<include> /usr/local/etc/newsyslog.conf.d/*.conf
Comment 1 Gregory Neil Shapiro freebsd_committer 2020-08-01 04:40:06 UTC
This was fixed:

Revision 340318 - (view) (download) (annotate) - [select for diffs]
Modified Sat Nov 10 10:46:38 2018 UTC (20 months, 3 weeks ago) by woodsb02
File length: 1664 byte(s)
Diff to previous 340253
newsyslog.conf: Restrict included files in default config to [!.]*.conf

The new default config will only include files from the following
directories which end with '.conf' and do not beginning with a '.'
character:
- /etc/newsyslog.conf.d/
- /usr/local/etc/newsyslog.conf.d/

This matches the syslog.conf(5) functionality, and also prevents '.sample' or
'.pkgnew' files being included. This is important for ports which install files
in /usr/local/etc/newsyslog.conf.d/ and also for pkgbase.

Approved by:	eadler
Approved by:	bapt
Relnotes:	yes
Differential Revision:	https://reviews.freebsd.org/D17086