summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam <adam@adast.xyz>2022-06-09 00:02:27 +0200
committerAdam <adam@adast.xyz>2022-06-13 16:44:15 +0200
commit23890e021f7994c89c21e611c5585846738abe02 (patch)
tree592a952ea9ab5ca31c03f3714434d3cd39b2e52e
parent330d3f92d4dfc04e34366f6500423a226497060d (diff)
Added doasedit script to repo
-rwxr-xr-x.local/bin/doasedit47
1 files changed, 47 insertions, 0 deletions
diff --git a/.local/bin/doasedit b/.local/bin/doasedit
new file mode 100755
index 0000000..0d2c9c9
--- /dev/null
+++ b/.local/bin/doasedit
@@ -0,0 +1,47 @@
+#!/bin/sh -e
+
+help() {
+ cat - >&2 <<EOF
+doasedit - like sudoedit, but for doas
+
+doasedit file...
+
+Every argument will be treated as a file to edit. There's no support for
+passing arguments to doas, so you can only doas root.
+
+This script is SECURITY SENSITIVE! Special care has been taken to correctly
+preserve file attributes. Please exercise CAUTION when modifying AND using
+this script.
+EOF
+}
+
+case "$1" in --help|-h) help; exit 0;; esac
+
+export TMPDIR=/dev/shm/
+trap 'trap - EXIT HUP QUIT TERM INT ABRT; rm -f "$tmp" "$tmpcopy"' EXIT HUP QUIT TERM INT ABRT
+
+for file; do
+ case "$file" in -*) file=./"$file" ;; esac
+
+ tmp="$(mktemp)"
+ if [ -f "$file" ] && [ ! -r "$file" ]; then
+ doas cat "$file" > "$tmp"
+ elif [ -r "$file" ]; then
+ cat "$file" > "$tmp"
+ fi
+
+ tmpcopy="$(mktemp)"
+ cat "$tmp" > "$tmpcopy"
+
+ ${EDITOR:-vi} "$tmp"
+
+ if cmp -s "$tmp" "$tmpcopy"; then
+ echo 'File unchanged, exiting...'
+ else
+ doas dd if="$tmp" of="$file"
+ echo 'Done, changes written'
+ fi
+
+ rm "$tmp" "$tmpcopy"
+done
+