summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorJean-Sébastien Pedron <jean-sebastien@rabbitmq.com>2017-07-28 16:52:54 +0100
committerGerhard Lazu <gerhard@lazu.co.uk>2017-07-28 17:06:46 +0100
commitcf7baacd03775a99ee6b0dc7e368efca6a5cdbda (patch)
tree9402e51eb517923ee3588ace34d563d3c0da7754 /scripts
parent0eb3736a63170af8a2c761e479f0164d40fbfa75 (diff)
downloadrabbitmq-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-wrapper80
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 "$@"