diff options
author | Jean-Sébastien Pedron <jean-sebastien@rabbitmq.com> | 2017-07-28 16:52:54 +0100 |
---|---|---|
committer | Gerhard Lazu <gerhard@lazu.co.uk> | 2017-07-28 17:06:46 +0100 |
commit | cf7baacd03775a99ee6b0dc7e368efca6a5cdbda (patch) | |
tree | 9402e51eb517923ee3588ace34d563d3c0da7754 /scripts | |
parent | 0eb3736a63170af8a2c761e479f0164d40fbfa75 (diff) | |
download | rabbitmq-server-git-cf7baacd03775a99ee6b0dc7e368efca6a5cdbda.tar.gz |
Refactor rabbitmq-script-wrapper
The logic is a bit crazy, and the whole purpose of this script is
questionable, but until we get rid of it, we've refactor it to make it
more obvious just how crazy it actually is.
[#149425921]
Signed-off-by: Gerhard Lazu <gerhard@rabbitmq.com>
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/rabbitmq-script-wrapper | 80 |
1 files changed, 59 insertions, 21 deletions
diff --git a/scripts/rabbitmq-script-wrapper b/scripts/rabbitmq-script-wrapper index 8b17ef3107..2b02a3ab1c 100644 --- a/scripts/rabbitmq-script-wrapper +++ b/scripts/rabbitmq-script-wrapper @@ -21,27 +21,65 @@ for arg in "$@" ; do CMDLINE="${CMDLINE} '${arg}'" done -cd /var/lib/rabbitmq +SCRIPT="$(basename "$0")" +RABBITMQ_ENV=/usr/lib/rabbitmq/bin/rabbitmq-env +RABBITMQ_SCRIPTS_DIR="$(dirname "$RABBITMQ_ENV")" -SCRIPT=`basename $0` +main() { + if current_user_is_rabbitmq + then + if calling_rabbitmq_server + then + exec_rabbitmq_server "$@" + else + exec_script_as_rabbitmq "$@" + fi + elif current_user_is_root + then + exec_script_as_root + else + run_script_help_and_fail + fi +} -if [ `id -u` = `id -u rabbitmq` -a "$SCRIPT" = "rabbitmq-server" ] ; then - RABBITMQ_ENV=/usr/lib/rabbitmq/bin/rabbitmq-env - RABBITMQ_SCRIPTS_DIR=$(dirname "$RABBITMQ_ENV") - . "$RABBITMQ_ENV" +current_user_is_rabbitmq() { + [ "$(id -un)" = "rabbitmq" ] +} - exec /usr/lib/rabbitmq/bin/rabbitmq-server "$@" @STDOUT_STDERR_REDIRECTION@ -elif [ `id -u` = `id -u rabbitmq` ] ; then - if [ -f $PWD/.erlang.cookie ] ; then - export HOME=`pwd` - fi - exec /usr/lib/rabbitmq/bin/${SCRIPT} "$@" -elif [ `id -u` = 0 ] ; then - @SU_RABBITMQ_SH_C@ "/usr/lib/rabbitmq/bin/${SCRIPT} ${CMDLINE}" -else - /usr/lib/rabbitmq/bin/${SCRIPT} - echo - echo "Only root or rabbitmq should run ${SCRIPT}" - echo - exit 1 -fi +current_user_is_root() { + [ "$(id -u)" = 0 ] +} + +calling_rabbitmq_server() { + [ "$SCRIPT" = "rabbitmq-server" ] +} + +exec_rabbitmq_server() { + RABBITMQ_ENV=/usr/lib/rabbitmq/bin/rabbitmq-env + # RABBITMQ_SCRIPTS_DIR is used in rabbitmq-env + # shellcheck disable=SC2034 + RABBITMQ_SCRIPTS_DIR="$(dirname "$RABBITMQ_ENV")" + # shellcheck source=/dev/null + . "$RABBITMQ_ENV" + + exec /usr/lib/rabbitmq/bin/rabbitmq-server "$@" @STDOUT_STDERR_REDIRECTION@ +} + +exec_script_as_rabbitmq() { + HOME="$(cd ~rabbitmq && pwd)" exec "/usr/lib/rabbitmq/bin/$SCRIPT" "$@" +} + +exec_script_as_root() { + @SU_RABBITMQ_SH_C@ "/usr/lib/rabbitmq/bin/$SCRIPT $CMDLINE" +} + +run_script_help_and_fail() { + "/usr/lib/rabbitmq/bin/$SCRIPT" help + + echo " +Only root or rabbitmq can run $SCRIPT +" + exit 1 +} + +main "$@" |