diff options
author | Erich Eckner <git@eckner.net> | 2020-02-28 07:07:40 +0100 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2020-02-28 07:07:40 +0100 |
commit | d5ac6072166ea362f314dd91ca4bc2a47841a239 (patch) | |
tree | fff2a0c65561ed272760a577b58b91c5209b7362 /update-me.in | |
parent | 18a24712dc5a068ad055a0a8ccaf290c62221ebd (diff) | |
download | update-all-d5ac6072166ea362f314dd91ca4bc2a47841a239.tar.xz |
update-me: pass arguments through "su", -u new
Diffstat (limited to 'update-me.in')
-rw-r--r-- | update-me.in | 61 |
1 files changed, 31 insertions, 30 deletions
diff --git a/update-me.in b/update-me.in index 4c59d66..c872600 100644 --- a/update-me.in +++ b/update-me.in @@ -1,43 +1,41 @@ #!/bin/bash usage() { - >&2 echo 'usage: update-me [-s|-c]' + >&2 echo 'usage: update-me [-s|-c] [-u[ ]$user]' >&2 echo ' -s: play it save' >&2 echo ' -c: clear for exit' + >&2 echo ' -u$user: safety-file should be owned by $user' exit 1 } play_it_safe=false safety_file='/tmp/update-me.do-not-exit' +flags="$*" -case $# in - 0) - ;; - 1) - case "x$1" in - 'x-s') - play_it_safe=true - ;; - 'x-c') - if [ -f "${safety_file}" ] && kill -0 $(cat "${safety_file}"); then - rm "${safety_file}" - exit 0 - fi - if pgrep -x update-me | grep -vxF $$; then - exit 1 - else - exit 2 - fi - ;; - *) - usage - ;; - esac - ;; - *) - usage - ;; -esac +while [ $# -gt 0 ]; do + case "x$1" in + 'x-s') + play_it_safe=true + ;; + 'x-c') + if [ -f "${safety_file}" ] && kill -0 $(cat "${safety_file}"); then + rm "${safety_file}" + exit 0 + fi + if pgrep -x update-me | grep -vxF $$; then + exit 1 + else + exit 2 + fi + ;; + 'x-u'*) + user="${1#-u}" + ;; + *) + usage + ;; + esac +done preCmds=('hostname') cmds=() @@ -62,6 +60,9 @@ fi exit_or_rescue_shell() { if "${play_it_safe}"; then printf '%s' "$$" >"${safety_file}" + if [ -n "${user}" ] && [ "$(whoami)" != "${user}" ]; then + chown "${user}" "${safety_file}" + fi >&2 printf '%s: waiting for clearance ...' "$(hostname)" while [ -f "${safety_file}" ] && [ "$(cat "${safety_file}")" = "$$" ]; do if read -t 1; then @@ -97,7 +98,7 @@ if [ ! "$(whoami)" == "root" ]; then maxCount=3 while [ ${err} -eq 1 ] && [ ${maxCount} -gt 0 ] do - su -c "$(readlink -f "$0") || exit 2" + su -c "$(readlink -f "$0") ${flags} || exit 2" err=$? maxCount=$[${maxCount} - 1] done |