[Bug 284777] usr.sbin/periodic/etc/weekly/340.noid: unhandled newline parsing jail output
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 284777] usr.sbin/periodic/etc/weekly/340.noid: unhandled newline parsing jail output"
- Reply: bugzilla-noreply_a_freebsd.org: "[Bug 284777] usr.sbin/periodic/etc/weekly/340.noid: unhandled newline parsing jail output"
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 13 Feb 2025 00:29:14 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=284777
Bug ID: 284777
Summary: usr.sbin/periodic/etc/weekly/340.noid: unhandled
newline parsing jail output
Product: Base System
Version: Unspecified
Hardware: Any
OS: Any
Status: New
Severity: Affects Many People
Priority: ---
Component: bin
Assignee: bugs@FreeBSD.org
Reporter: ports.maintainer@evilphi.com
Created attachment 257458
--> https://bugs.freebsd.org/bugzilla/attachment.cgi?id=257458&action=edit
fix jail output parsing in 340.noid
I was getting this error in the periodic weekly email:
Check for files with an unknown user or group:
find: name=pkgbuild: unknown primary or operator
That's from 340.noid, which appears to not handle jail -e output correctly when
there is more than one jail and path is the last jail variable defined. The
code in question:
28 sep=:
29 OIFS="$IFS"
30 IFS="$sep"
31 for param in $(jail -f "$jail_conf" -e "$sep" 2>/dev/null)
32 do
33 case "$param" in
34 path=*)
35 _p=${param#path=}
36 if [ -z "$_p" -o "$_p" = / ]; then
37 continue
38 fi
39
40 exclude="$exclude -path $_p -prune -or"
[...]
47 rc=$(find -H ${weekly_noid_dirs:-/} \
48 \( $exclude ! -fstype local -prune -or -name \* \) -and \
49 \( -nogroup -o -nouser \) -print | sed 's/^/ /' |
50 tee /dev/stderr | wc -l)
Adding 'echo "_p=$_p"' at line 39 and running 340.noid gives:
# ./340.noid
Check for files with an unknown user or group:
_p=/jails/containers/nginx
name=pkgbuild
_p=/jails/containers/pkgbuild
name=postgres
_p=/jails/containers/postgres
find: name=pkgbuild: unknown primary or operator
This is because I have three jails on my system, and the output of that jail
command is:
# jail -f /etc/jail.conf -e ":"
name=nginx:allow.raw_sockets:allow.sysvipc:exec.clean:exec.start="/bin/sh
/etc/rc":exec.stop="/bin/sh
/etc/rc.shutdown":host.hostname=nginx.amnesiac.local:ip4=inherit:ip6=inherit:mount.devfs:mount.fstab=/jails/etc/fstab.nginx:path=/jails/containers/nginx
name=pkgbuild:allow.raw_sockets:allow.sysvipc:exec.clean:exec.start="/bin/sh
/etc/rc":exec.stop="/bin/sh
/etc/rc.shutdown":host.hostname=pkgbuild.amnesiac.local:ip4=inherit:ip6=inherit:mount.devfs:mount.fstab=/jails/etc/fstab.pkgbuild:path=/jails/containers/pkgbuild
name=postgres:allow.raw_sockets:allow.sysvipc:exec.clean:exec.start="/bin/sh
/etc/rc":exec.stop="/bin/sh
/etc/rc.shutdown":host.hostname=postgres.amnesiac.local:ip4=inherit:ip6=inherit:mount.devfs:mount.fstab=/jails/etc/fstab.postgres:path=/jails/containers/postgres
I'm not sure what the best fix would be, but inserting
_p=${_p%$'\n'*}
after line 35 appears to fix it. Discovered in 13.4-R, but 340.noid appears to
be the same in -CURRENT. Patch against main attached.
Workaround:
This only happens if path is the last variable in a jail -e output line, which
only happens if it's the last variable defined for a jail in /etc/jail.conf.
This bug can be worked around by changing the order of variables in
/etc/jail.conf so that path is not the last variable defined.
--
You are receiving this mail because:
You are the assignee for the bug.