From 713567bce8ac5d730efbce01484b279fc9dde043 Mon Sep 17 00:00:00 2001 From: CyberLeo Date: Mon, 9 Jul 2012 06:25:41 -0500 Subject: [PATCH] sh/suexec: deprecate reexec and switch to suexec; that name fits better --- lib/sh/reexec.sh | 3 ++- lib/sh/suexec.sh | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 lib/sh/suexec.sh diff --git a/lib/sh/reexec.sh b/lib/sh/reexec.sh index d45f45a..fa84a25 100644 --- a/lib/sh/reexec.sh +++ b/lib/sh/reexec.sh @@ -3,7 +3,8 @@ if [ -z "${__reexec_sh_loaded}" ] then __reexec_sh_loaded=yes - + echo "**** Deprecated: Use suexec instead ****" >&2 + # exec a command via sudo/su # Can be used to reexec this process, if run like this from the top-level: # reexec "${0}" "${@}" diff --git a/lib/sh/suexec.sh b/lib/sh/suexec.sh new file mode 100644 index 0000000..2916eef --- /dev/null +++ b/lib/sh/suexec.sh @@ -0,0 +1,37 @@ +# suexec library script + +if [ -z "${__suexec_sh_loaded}" ] +then + __suexec_sh_loaded=yes + + # exec a command via sudo/su + # Can be used to reexec this process under su/sudo, if run like this from + # the top-level: + # + # suexec "${0}" "${@}" + # + # Specify target user name with -u as the first parameter + # + # suexec -u user "${0}" "${@}" + # + # Just as exec, this will replace the current process entirely, and will not + # return except upon error. + suexec() { + user="root" + # Set name if user provided + if [ "${1}" = "-u" ] + then + user="${2}" + shift 2 + fi + + # suexec if needed + if [ "$(id -un)" != "${user}" ] + then + # Find a su/sudo + cmd="sudo -u ${user}" + [ -x "$(which sudo 2>/dev/null)" ] || cmd="su ${user} -c" + exec ${cmd} "${@}" + fi + } +fi -- 2.42.0