Hi,

I noticed the syspatch(8) and sysupgrade(8) ksh scripts test if the
invoking user has the right privileges i.e. (($(id -u) != 0))

The test for the effective user ID number can be bypassed in
syspatch(8) and sysupgrade(8) by sh e.g.
$ id -u
1000
$ sh /usr/sbin/sysupgrade -s
/usr/sbin/sysupgrade[90]: 1000: not found
install: /home/_sysupgrade: Permission denied
$ sh /usr/sbin/syspatch -r
[snip]
/usr/sbin/syspatch[280]: 1000: not found
Reverting patch 012_carp
[snip]

The syspatch(8) and sysupgrade(8) test for the EUID number could be
improved by adding "set +o sh" (see netstart(8)) or by using the
"[[expression]]" test (see sysmerge(8)) or "[expression]" test (see
rcctl(8)) instead of "((expression))" e.g. [ "$(id -u)" -ne 0 ]

Moreover, other scripts could benefit from the addition of the
above-mentioned test for the EUID number e.g. daily(8), weekly(8), and
monthly(8) which are intended to run as root e.g.
$ id -u
1000
$ sh /etc/weekly
install: /var/log/INS@FJvExvWnUh: Permission denied
[snip]

[1] http://man.openbsd.org/ksh#__
[2] http://man.openbsd.org/ksh#test~2
[3] http://man.openbsd.org/ksh#Strict_Bourne_shell_mode
Index: syspatch.sh
===================================================================
RCS file: /cvs/src/usr.sbin/syspatch/syspatch.sh,v
retrieving revision 1.167
diff -u -p -r1.167 syspatch.sh
--- syspatch.sh 7 Dec 2020 21:19:28 -0000       1.167
+++ syspatch.sh 29 Jan 2021 08:04:08 -0000
@@ -276,7 +276,7 @@ set -A _KERNV -- $(sysctl -n kern.versio
 ((${#_KERNV[*]} > 1)) && err "Unsupported release: ${_KERNV[0]}${_KERNV[1]}"
 
 [[ $@ == @(|-[[:alpha:]]) ]] || usage; [[ $@ == @(|-(c|R|r)) ]] &&
-       (($(id -u) != 0)) && err "need root privileges"
+       [ "$(id -u)" -ne 0 ] && err "need root privileges"
 [[ $@ == @(|-(R|r)) ]] && pgrep -qxf '/bin/ksh .*reorder_kernel' &&
        err "cannot apply patches while reorder_kernel is running"
 
Index: sysupgrade.sh
===================================================================
RCS file: /cvs/src/usr.sbin/sysupgrade/sysupgrade.sh,v
retrieving revision 1.44
diff -u -p -r1.44 sysupgrade.sh
--- sysupgrade.sh       22 Oct 2020 07:19:42 -0000      1.44
+++ sysupgrade.sh       29 Jan 2021 07:53:31 -0000
@@ -89,7 +89,7 @@ while getopts fknrs arg; do
        esac
 done
 
-(($(id -u) != 0)) && err "need root privileges"
+[ "$(id -u)" -ne 0 ] && err "need root privileges"
 
 if $RELEASE && $SNAP; then
        usage
Index: daily
===================================================================
RCS file: /cvs/src/etc/daily,v
retrieving revision 1.95
diff -u -p -r1.95 daily
--- daily       20 Oct 2020 22:42:29 -0000      1.95
+++ daily       29 Jan 2021 08:08:44 -0000
@@ -9,6 +9,7 @@ umask 022
 
 PARTOUT=/var/log/daily.part
 MAINOUT=/var/log/daily.out
+[ "$(id -u)" -ne 0 ] && echo "${0##*/}: need root privileges" && exit 1
 install -o 0 -g 0 -m 600    /dev/null $PARTOUT
 install -o 0 -g 0 -m 600 -b /dev/null $MAINOUT
 

Reply via email to