Prevent rewriting /etc/rc.conf.local unconditionnally. Compare the new and old
authorajacoutot <ajacoutot@openbsd.org>
Mon, 8 Jul 2024 14:32:44 +0000 (14:32 +0000)
committerajacoutot <ajacoutot@openbsd.org>
Mon, 8 Jul 2024 14:32:44 +0000 (14:32 +0000)
ones and do nothing is they match.
This mean that "rcctl enable foobar" will not touch anything is foobar is
already enabled.

spotted by robert@ using Saltstack (that runs "rcctl enable ..." on a regular
basis).
ok robert@

usr.sbin/rcctl/rcctl.sh

index eda191f..56ee8cb 100644 (file)
@@ -1,6 +1,6 @@
 #!/bin/ksh
 #
-# $OpenBSD: rcctl.sh,v 1.117 2023/07/13 13:54:27 ajacoutot Exp $
+# $OpenBSD: rcctl.sh,v 1.118 2024/07/08 14:32:44 ajacoutot Exp $
 #
 # Copyright (c) 2014, 2015-2022 Antoine Jacoutot <ajacoutot@openbsd.org>
 # Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
@@ -127,8 +127,10 @@ rcconf_edit_end()
 {
        sort -u -o ${_TMP_RCCONF} ${_TMP_RCCONF} || \
                rcctl_err "cannot modify ${_TMP_RCCONF}"
-       cat ${_TMP_RCCONF} >/etc/rc.conf.local || \
-               rcctl_err "cannot append to /etc/rc.conf.local"
+       if ! cmp -s ${_TMP_RCCONF} /etc/rc.conf.local; then
+               cat ${_TMP_RCCONF} >/etc/rc.conf.local || \
+                       rcctl_err "cannot write to /etc/rc.conf.local"
+       fi
        if [ ! -s /etc/rc.conf.local ]; then
                rm /etc/rc.conf.local || \
                        rcctl_err "cannot remove /etc/rc.conf.local"