aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJamie Gritton <jamie@FreeBSD.org>2023-09-25 00:03:09 +0000
committerJamie Gritton <jamie@FreeBSD.org>2023-10-02 19:22:52 +0000
commit6a5113a8a1df5f93541d2e9af48fd2127bae0793 (patch)
tree49927b2d77230c90a4810bbf68c409ba07b755e4
parent857ce53d1d4689884b624c4ec596b1bb77843761 (diff)
downloadsrc-6a5113a8a1df5f93541d2e9af48fd2127bae0793.tar.gz
src-6a5113a8a1df5f93541d2e9af48fd2127bae0793.zip
MFS jail: avoid a clash with /etc/jail.conf.d between rc and jail(8)
Since 13.1, /etc/rc.d/jail has looked for a per-jail config file in /etc/jail.conf.d. For RELENG 14, the ".include" directive was added to jail(8), with a sample line in the jail.conf(5) man page that includes "/etc/jail.conf.d/*.conf". These two use cases don't work together. When the jail.conf.d files are included from a master jail.conf, the files in jail.conf.d are likely to hold only partial configurations, and shouldn't be directly loaded by rc.d/jail. But there are existing configurations that depend on the current rc.d behavior. While users could be advised not to include from /etc/jail.conf.d, it's the natural choice even if not mentioned in jail.conf.5. The workaround is for rc.d/jail to continue to load the individual files, but only when /etc/jail.conf doesn't include from that directory (via a simple grep test), This allows the current use while not breaking the previous use. Approved by: re (gjb) Reported by: antranigv at freebsd.am Differential Revision: https://reviews.freebsd.org/D41962 (cherry picked from commit a2440348eed75bb7682579af0905b652747fd016) (cherry picked from commit c96d5c97bb65a1b0bc135b452f13d0ca6a8d60c9)
-rwxr-xr-xlibexec/rc/rc.d/jail4
1 files changed, 3 insertions, 1 deletions
diff --git a/libexec/rc/rc.d/jail b/libexec/rc/rc.d/jail
index f8995c7e3b00..f12dae280bb0 100755
--- a/libexec/rc/rc.d/jail
+++ b/libexec/rc/rc.d/jail
@@ -126,7 +126,9 @@ parse_options()
if [ -r "$_jconf" ]; then
_conf="$_jconf"
return 0
- elif [ -r "$_jconfdir" ]; then
+ elif [ -r "$_jconfdir" ] && ! egrep -q \
+ '^\s*\.include\s*["'\'']?/etc/jail.conf.d/' "$jail_conf" \
+ 2>/dev/null; then
_conf="$_jconfdir"
return 0
elif [ -r "$jail_conf" ]; then