aboutsummaryrefslogtreecommitdiffstats
path: root/main/doas/doas.post-upgrade
diff options
context:
space:
mode:
Diffstat (limited to 'main/doas/doas.post-upgrade')
-rw-r--r--main/doas/doas.post-upgrade65
1 files changed, 65 insertions, 0 deletions
diff --git a/main/doas/doas.post-upgrade b/main/doas/doas.post-upgrade
new file mode 100644
index 00000000000..113f801d39f
--- /dev/null
+++ b/main/doas/doas.post-upgrade
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+ver_old="$2"
+
+if [ "$(apk version -t "$ver_old" '6.8.1-r6')" = '<' ]; then
+ if [ "$(stat -c "%a" /etc/doas.d)" = "755" ]; then
+ chmod 0750 /etc/doas.d
+ fi
+fi
+
+if [ "$(apk version -t "$ver_old" '6.8.1-r4')" = '<' ]; then
+ : # do nothing, this is prior renaming /etc/doas.conf to /etc/doas.d/doas.conf
+
+# Undo what was done by the previous post-{install,upgrade} script.
+elif [ "$(apk version -t "$ver_old" '6.8.2-r5')" = '<' ]; then
+ cat >&2 <<-EOF
+ *
+ * Since 6.8.2-r5, doas reads both /etc/doas.conf and /etc/doas.d/*.conf
+ * (if exists), in this order, and /etc/doas.conf is required to exist.
+ *
+ EOF
+ if [ -L /etc/doas.conf ] && [ "$(readlink -f /etc/doas.conf)" = '/etc/doas.d/doas.conf' ]; then
+ cat >&2 <<-EOF
+ * Removing /etc/doas.conf symlink and moving /etc/doas.d/doas.conf
+ * to /etc/doas.conf.
+ *
+ EOF
+ rm /etc/doas.conf # symlink
+ mv /etc/doas.d/doas.conf /etc/doas.conf # user's config
+
+ # Remove outdated comment added by the previous post-upgrade script.
+ # Note: /etc/doas.conf.apk-new has been created by the upgrade,
+ # so it already has correct perms.
+ cat /etc/doas.conf \
+ | tr '\n' '\f' \
+ | sed 's|# This file is actually located at /etc/doas.d/doas.conf, and reflects\f# the system doas configuration. It may have been migrated from its\f# previous location, /etc/doas.conf, automatically.\f||' \
+ | tr '\f' '\n' \
+ > /etc/doas.conf.apk-new
+
+ # Note: If /etc/doas.conf existed, the package upgrade has created
+ # doas.conf.apk-new.
+ elif [ -f /etc/doas.conf ] && [ -f /etc/doas.conf.apk-new ] && [ "$(ls /etc/doas.d/*.conf 2>/dev/null)" ]; then
+ bakfile='/etc/doas.conf.bak'
+ [ -e "$bakfile" ] && bakfile="$bakfile$(date +%s)"
+
+ cat >&2 <<-EOF
+ *! CAUTION: /etc/doas.conf already exists and /etc/doas.d is not empty,
+ *! so it's been ignored until now! Renaming it to $bakfile.
+ *! It's strongly recommended that you check your configuration!
+ *
+ EOF
+ mv /etc/doas.conf "$bakfile" # user's config
+ mv /etc/doas.conf.apk-new /etc/doas.conf # new config
+
+ elif [ -f /etc/doas.d/doas.conf ]; then
+ cat >&2 <<-EOF
+ * Moving /etc/doas.d/doas.conf to /etc/doas.conf.
+ *
+ EOF
+ mv /etc/doas.conf /etc/doas.conf.apk-new # new config
+ mv /etc/doas.d/doas.conf /etc/doas.conf # user's config
+ fi
+fi
+
+exit 0