summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/rabbit_cli.hrl10
-rw-r--r--packaging/Makefile27
-rw-r--r--packaging/RPMS/Fedora/Makefile3
-rw-r--r--packaging/debs/Debian/Makefile3
-rw-r--r--packaging/debs/apt-repository/Makefile21
-rw-r--r--packaging/generic-unix/Makefile7
-rw-r--r--packaging/standalone/Makefile12
-rw-r--r--packaging/windows-exe/Makefile2
-rw-r--r--packaging/windows/Makefile12
-rwxr-xr-x[-rw-r--r--]scripts/rabbitmq-server-ha.ocf19
-rw-r--r--src/rabbit_access_control.erl8
-rw-r--r--src/rabbit_cli.erl36
-rw-r--r--src/rabbit_direct.erl4
13 files changed, 107 insertions, 57 deletions
diff --git a/include/rabbit_cli.hrl b/include/rabbit_cli.hrl
index 737bb4ea3d..e49adf5b5a 100644
--- a/include/rabbit_cli.hrl
+++ b/include/rabbit_cli.hrl
@@ -48,3 +48,13 @@
-define(ONLINE_DEF, {?ONLINE_OPT, flag}).
-define(RPC_TIMEOUT, infinity).
+
+%% Subset of standartized exit codes from sysexits.h
+-define(EX_OK , 0).
+-define(EX_USAGE , 64). % Bad command-line arguments.
+-define(EX_DATAERR , 65). % Wrong data in command-line arguments.
+-define(EX_NOUSER , 67). % The user specified does not exist.
+-define(EX_UNAVAILABLE, 69). % Could not connect to the target node.
+-define(EX_SOFTWARE , 70). % Failed to execute command.
+-define(EX_TEMPFAIL , 75). % Temporary error (e.g. something has timed out).
+-define(EX_CONFIG , 78). % Misconfiguration detected
diff --git a/packaging/Makefile b/packaging/Makefile
index 151791152f..edb876770f 100644
--- a/packaging/Makefile
+++ b/packaging/Makefile
@@ -41,6 +41,7 @@ all: packages
PACKAGES_DIR ?= ../PACKAGES
SOURCE_DIST_FILE ?= $(wildcard $(PACKAGES_DIR)/rabbitmq-server-*.tar.xz)
+ifneq ($(filter-out clean,$(MAKECMDGOALS)),)
ifeq ($(SOURCE_DIST_FILE),)
$(error Cannot find source archive; please specify SOURCE_DIST_FILE)
endif
@@ -53,6 +54,11 @@ endif
ifeq ($(wildcard $(SOURCE_DIST_FILE)),)
$(error The source archive must exist)
endif
+endif
+
+ifndef NO_CLEAN
+DO_CLEAN := clean
+endif
packages: package-deb package-rpm package-windows package-generic-unix
@:
@@ -61,7 +67,7 @@ package-deb: $(SOURCE_DIST_FILE)
$(gen_verbose) $(MAKE) -C debs/Debian \
SOURCE_DIST_FILE=$(abspath $(SOURCE_DIST_FILE)) \
PACKAGES_DIR=$(abspath $(PACKAGES_DIR)) \
- all clean
+ all $(DO_CLEAN)
package-rpm: package-rpm-fedora package-rpm-suse
@:
@@ -70,30 +76,30 @@ package-rpm-fedora: $(SOURCE_DIST_FILE)
$(gen_verbose) $(MAKE) -C RPMS/Fedora \
SOURCE_DIST_FILE=$(abspath $(SOURCE_DIST_FILE)) \
PACKAGES_DIR=$(abspath $(PACKAGES_DIR)) \
- all clean
+ all $(DO_CLEAN)
package-rpm-suse: $(SOURCE_DIST_FILE)
$(gen_verbose) $(MAKE) -C RPMS/Fedora \
SOURCE_DIST_FILE=$(abspath $(SOURCE_DIST_FILE)) \
PACKAGES_DIR=$(abspath $(PACKAGES_DIR)) \
RPM_OS=suse \
- all clean
+ all $(DO_CLEAN)
package-windows: $(SOURCE_DIST_FILE)
$(gen_verbose) $(MAKE) -C windows \
SOURCE_DIST_FILE=$(abspath $(SOURCE_DIST_FILE)) \
PACKAGES_DIR=$(abspath $(PACKAGES_DIR)) \
- all clean
+ all $(DO_CLEAN)
$(verbose) $(MAKE) -C windows-exe \
SOURCE_DIST_FILE=$(abspath $(SOURCE_DIST_FILE)) \
PACKAGES_DIR=$(abspath $(PACKAGES_DIR)) \
- all clean
+ all $(DO_CLEAN)
package-generic-unix: $(SOURCE_DIST_FILE)
$(gen_verbose) $(MAKE) -C generic-unix \
SOURCE_DIST_FILE=$(abspath $(SOURCE_DIST_FILE)) \
PACKAGES_DIR=$(abspath $(PACKAGES_DIR)) \
- all clean
+ all $(DO_CLEAN)
ifeq ($(PLATFORM),darwin)
packages: package-standalone-macosx
@@ -102,5 +108,12 @@ package-standalone-macosx: $(SOURCE_DIST_FILE)
$(gen_verbose) $(MAKE) -C standalone OS=mac \
SOURCE_DIST_FILE=$(abspath $(SOURCE_DIST_FILE)) \
PACKAGES_DIR=$(abspath $(PACKAGES_DIR)) \
- all clean
+ all $(DO_CLEAN)
endif
+
+.PHONY: clean
+
+clean:
+ for subdir in debs/Debian RPMS/Fedora windows windows-exe generic-unix standalone; do \
+ $(MAKE) -C "$$subdir" clean; \
+ done
diff --git a/packaging/RPMS/Fedora/Makefile b/packaging/RPMS/Fedora/Makefile
index 9b2061b47a..5763cadf04 100644
--- a/packaging/RPMS/Fedora/Makefile
+++ b/packaging/RPMS/Fedora/Makefile
@@ -1,4 +1,6 @@
SOURCE_DIST_FILE ?= $(wildcard ../../../rabbitmq-server-*.tar.xz)
+
+ifneq ($(filter-out clean,$(MAKECMDGOALS)),)
ifeq ($(SOURCE_DIST_FILE),)
$(error Cannot find source archive; please specify SOURCE_DIST_FILE)
endif
@@ -10,6 +12,7 @@ VERSION ?= $(patsubst rabbitmq-server-%.tar.xz,%,$(notdir $(SOURCE_DIST_FILE)))
ifeq ($(VERSION),)
$(error Cannot determine version; please specify VERSION)
endif
+endif
TOP_DIR = $(shell pwd)
# Under debian we do not want to check build dependencies, since that
diff --git a/packaging/debs/Debian/Makefile b/packaging/debs/Debian/Makefile
index 8328660ae7..a35b869d4f 100644
--- a/packaging/debs/Debian/Makefile
+++ b/packaging/debs/Debian/Makefile
@@ -1,4 +1,6 @@
SOURCE_DIST_FILE ?= $(wildcard ../../../rabbitmq-server-*.tar.xz)
+
+ifneq ($(filter-out clean,$(MAKECMDGOALS)),)
ifeq ($(SOURCE_DIST_FILE),)
$(error Cannot find source archive; please specify SOURCE_DIST_FILE)
endif
@@ -10,6 +12,7 @@ VERSION ?= $(patsubst rabbitmq-server-%.tar.xz,%,$(notdir $(SOURCE_DIST_FILE)))
ifeq ($(VERSION),)
$(error Cannot determine version; please specify VERSION)
endif
+endif
DEBIAN_ORIG_TARBALL = rabbitmq-server_$(VERSION).orig.tar.xz
UNPACKED_DIR = rabbitmq-server-$(VERSION)
diff --git a/packaging/debs/apt-repository/Makefile b/packaging/debs/apt-repository/Makefile
index ce4347bcb4..bbddc15a4e 100644
--- a/packaging/debs/apt-repository/Makefile
+++ b/packaging/debs/apt-repository/Makefile
@@ -1,27 +1,30 @@
-SIGNING_USER_EMAIL=info@rabbitmq.com
+PACKAGES_DIR ?= ../../../PACKAGES
+REPO_DIR ?= debian
+
+SIGNING_USER_EMAIL ?= info@rabbitmq.com
ifeq "$(UNOFFICIAL_RELEASE)" ""
-HOME_ARG=HOME=$(GNUPG_PATH)
+HOME_ARG = HOME=$(GNUPG_PATH)
endif
all: debian_apt_repository
clean:
- rm -rf debian
+ rm -rf $(REPO_DIR)
CAN_HAS_REPREPRO=$(shell [ -f /usr/bin/reprepro ] && echo true)
ifeq ($(CAN_HAS_REPREPRO), true)
debian_apt_repository: clean
- mkdir -p debian/conf
- cp -a distributions debian/conf
+ mkdir -p $(REPO_DIR)/conf
+ cp -a distributions $(REPO_DIR)/conf
ifeq "$(UNOFFICIAL_RELEASE)" ""
- echo SignWith: $(SIGNING_USER_EMAIL) >> debian/conf/distributions
+ echo SignWith: $(SIGNING_USER_EMAIL) >> $(REPO_DIR)/conf/distributions
endif
- for FILE in ../Debian/*.changes ; do \
+ for FILE in $(PACKAGES_DIR)/*.changes ; do \
$(HOME_ARG) reprepro --ignore=wrongdistribution \
- -Vb debian include kitten $${FILE} ; \
+ -Vb $(REPO_DIR) include kitten $${FILE} ; \
done
- reprepro -Vb debian createsymlinks
+ reprepro -Vb $(REPO_DIR) createsymlinks
else
debian_apt_repository:
@echo Not building APT repository as reprepro could not be found
diff --git a/packaging/generic-unix/Makefile b/packaging/generic-unix/Makefile
index 8d483582ec..fb8b3a9e68 100644
--- a/packaging/generic-unix/Makefile
+++ b/packaging/generic-unix/Makefile
@@ -1,4 +1,6 @@
SOURCE_DIST_FILE ?= $(wildcard ../../../rabbitmq-server-*.tar.xz)
+
+ifneq ($(filter-out clean,$(MAKECMDGOALS)),)
ifeq ($(SOURCE_DIST_FILE),)
$(error Cannot find source archive; please specify SOURCE_DIST_FILE)
endif
@@ -10,6 +12,7 @@ VERSION ?= $(patsubst rabbitmq-server-%.tar.xz,%,$(notdir $(SOURCE_DIST_FILE)))
ifeq ($(VERSION),)
$(error Cannot determine version; please specify VERSION)
endif
+endif
SOURCE_DIR = rabbitmq-server-$(VERSION)
TARGET_DIR = rabbitmq_server-$(VERSION)
@@ -38,7 +41,6 @@ dist:
mkdir -p $(TARGET_DIR)/etc/rabbitmq
tar -zcf $(TARGET_TARBALL).tar.gz $(TARGET_DIR)
- rm -rf $(SOURCE_DIR) $(TARGET_DIR)
if test "$(PACKAGES_DIR)"; then \
mkdir -p "$(PACKAGES_DIR)"; \
@@ -49,5 +51,4 @@ clean: clean_partial
rm -f rabbitmq-server-generic-unix-*.tar.gz
clean_partial:
- rm -rf $(SOURCE_DIR)
- rm -rf $(TARGET_DIR)
+ rm -rf rabbitmq-server-* rabbitmq_server-*
diff --git a/packaging/standalone/Makefile b/packaging/standalone/Makefile
index 5f2cb90440..578ed57345 100644
--- a/packaging/standalone/Makefile
+++ b/packaging/standalone/Makefile
@@ -1,4 +1,6 @@
SOURCE_DIST_FILE ?= $(wildcard ../../rabbitmq-server-*.tar.xz)
+
+ifneq ($(filter-out clean,$(MAKECMDGOALS)),)
ifeq ($(SOURCE_DIST_FILE),)
$(error Cannot find source archive; please specify SOURCE_DIST_FILE)
endif
@@ -10,6 +12,7 @@ VERSION ?= $(patsubst rabbitmq-server-%.tar.xz,%,$(notdir $(SOURCE_DIST_FILE)))
ifeq ($(VERSION),)
$(error Cannot determine version; please specify VERSION)
endif
+endif
SOURCE_DIR=rabbitmq-server-$(VERSION)
TARGET_DIR=rabbitmq_server-$(VERSION)
@@ -92,19 +95,14 @@ dist:
cd $(TARGET_DIR)/release && \
find $(TARGET_DIR) -print0 | LC_COLLATE=C sort -z | \
xargs -0 tar -cnf - | xz > $(CURDIR)/$(TARGET_TARBALL).tar.xz
- rm -rf $(SOURCE_DIR) $(TARGET_DIR)
if test "$(PACKAGES_DIR)"; then \
mkdir -p "$(PACKAGES_DIR)"; \
mv $(TARGET_TARBALL).tar.xz "$(PACKAGES_DIR)"; \
fi
-clean: clean_partial
- rm -f rabbitmq-server-$(OS)-standalone-*.tar.gz
-
-clean_partial:
- rm -rf $(SOURCE_DIR)
- rm -rf $(TARGET_DIR)
+clean:
+ rm -rf rabbitmq-server-* rabbitmq_server-*
.PHONY : generate_release
generate_release:
diff --git a/packaging/windows-exe/Makefile b/packaging/windows-exe/Makefile
index fad0eae5f5..26ef4585c3 100644
--- a/packaging/windows-exe/Makefile
+++ b/packaging/windows-exe/Makefile
@@ -3,7 +3,7 @@ ZIP_DIR = ../windows
else
ZIP_DIR = $(PACKAGES_DIR)
endif
-ZIP = $(notdir $(wildcard $(ZIP_DIR)/rabbitmq-server-windows-$(VERSION).zip))
+ZIP = $(notdir $(wildcard $(ZIP_DIR)/rabbitmq-server-windows-*.zip))
VERSION = $(patsubst rabbitmq-server-windows-%.zip,%,$(ZIP))
diff --git a/packaging/windows/Makefile b/packaging/windows/Makefile
index 4fc72b95c4..beda5752be 100644
--- a/packaging/windows/Makefile
+++ b/packaging/windows/Makefile
@@ -1,4 +1,6 @@
SOURCE_DIST_FILE ?= $(wildcard ../../../rabbitmq-server-*.tar.xz)
+
+ifneq ($(filter-out clean,$(MAKECMDGOALS)),)
ifeq ($(SOURCE_DIST_FILE),)
$(error Cannot find source archive; please specify SOURCE_DIST_FILE)
endif
@@ -10,6 +12,7 @@ VERSION ?= $(patsubst rabbitmq-server-%.tar.xz,%,$(notdir $(SOURCE_DIST_FILE)))
ifeq ($(VERSION),)
$(error Cannot determine version; please specify VERSION)
endif
+endif
SOURCE_DIR = rabbitmq-server-$(VERSION)
TARGET_DIR = rabbitmq_server-$(VERSION)
@@ -30,16 +33,11 @@ dist:
cp -a README-etc $(TARGET_DIR)/etc/README.txt
zip -q -r $(TARGET_ZIP).zip $(TARGET_DIR)
- rm -rf $(SOURCE_DIR) $(TARGET_DIR)
if test "$(PACKAGES_DIR)"; then \
mkdir -p "$(PACKAGES_DIR)"; \
mv $(TARGET_ZIP).zip "$(PACKAGES_DIR)"; \
fi
-clean: clean_partial
- rm -f rabbitmq-server-windows-*.zip
-
-clean_partial:
- rm -rf $(SOURCE_DIR)
- rm -rf $(TARGET_DIR)
+clean:
+ rm -rf rabbitmq-server-* rabbitmq_server-*
diff --git a/scripts/rabbitmq-server-ha.ocf b/scripts/rabbitmq-server-ha.ocf
index 6404a7dbd2..42e5332367 100644..100755
--- a/scripts/rabbitmq-server-ha.ocf
+++ b/scripts/rabbitmq-server-ha.ocf
@@ -246,7 +246,7 @@ Erlang cookie file path where the cookie will be put, if requested
Either to use FQDN or a shortname for the rabbitmq node
</longdesc>
<shortdesc lang="en">Use FQDN</shortdesc>
-<content type="boolean" default="${OCF_RESKEY_erlang_cookie_file_default}" />
+<content type="boolean" default="${OCF_RESKEY_use_fqdn_default}" />
</parameter>
<parameter name="max_rabbitmqctl_timeouts" unique="0" required="0">
@@ -573,9 +573,22 @@ check_need_join_to() {
# Update erlang cookie, if it has been specified
update_cookie() {
+ local cookie_file_content
if [ "${OCF_RESKEY_erlang_cookie}" != 'false' ] ; then
- echo "${OCF_RESKEY_erlang_cookie}" > "${OCF_RESKEY_erlang_cookie_file}" && \
- chown ${OCF_RESKEY_username}:${OCF_RESKEY_groupname} "${OCF_RESKEY_erlang_cookie_file}" && \
+ if [ -f "${OCF_RESKEY_erlang_cookie_file}" ]; then
+ # First line of cookie file without newline
+ cookie_file_content=$(head -n1 "${OCF_RESKEY_erlang_cookie_file}" | perl -pe chomp)
+ fi
+ # As there is a brief period of time when the file is empty
+ # (shell redirection has already opened and truncated file,
+ # and echo hasn't finished its job), we are doing this write
+ # only when cookie has changed.
+ if [ "${OCF_RESKEY_erlang_cookie}" != "${cookie_file_content}" ]; then
+ echo "${OCF_RESKEY_erlang_cookie}" > "${OCF_RESKEY_erlang_cookie_file}"
+ fi
+ # And this are idempotent operations, so we don't have to
+ # check any preconditions for running them.
+ chown ${OCF_RESKEY_username}:${OCF_RESKEY_groupname} "${OCF_RESKEY_erlang_cookie_file}"
chmod 600 "${OCF_RESKEY_erlang_cookie_file}"
fi
return $OCF_SUCCESS
diff --git a/src/rabbit_access_control.erl b/src/rabbit_access_control.erl
index 3fe7212276..f649e4b274 100644
--- a/src/rabbit_access_control.erl
+++ b/src/rabbit_access_control.erl
@@ -142,7 +142,7 @@ check_vhost_access(User = #user{username = Username,
auth_user(User, Impl), VHostPath, Sock)
end,
Mod, "access to vhost '~s' refused for user '~s'",
- [VHostPath, Username]);
+ [VHostPath, Username], not_allowed);
(_, Else) ->
Else
end, ok, Modules).
@@ -164,7 +164,11 @@ check_resource_access(User = #user{username = Username,
(_, Else) -> Else
end, ok, Modules).
+
check_access(Fun, Module, ErrStr, ErrArgs) ->
+ check_access(Fun, Module, ErrStr, ErrArgs, access_refused).
+
+check_access(Fun, Module, ErrStr, ErrArgs, ErrName) ->
Allow = case Fun() of
{error, E} ->
rabbit_log:error(ErrStr ++ " by ~s: ~p~n",
@@ -177,5 +181,5 @@ check_access(Fun, Module, ErrStr, ErrArgs) ->
true ->
ok;
false ->
- rabbit_misc:protocol_error(access_refused, ErrStr, ErrArgs)
+ rabbit_misc:protocol_error(ErrName, ErrStr, ErrArgs)
end.
diff --git a/src/rabbit_cli.erl b/src/rabbit_cli.erl
index 522e91120e..311906afc6 100644
--- a/src/rabbit_cli.erl
+++ b/src/rabbit_cli.erl
@@ -68,10 +68,10 @@ main(ParseFun, DoFun, UsageMod) ->
%% thrown errors into normal return values
case catch DoFun(Command, Node, Args, Opts) of
ok ->
- rabbit_misc:quit(0);
+ rabbit_misc:quit(?EX_OK);
{ok, Result} ->
rabbit_ctl_misc:print_cmd_result(Command, Result),
- rabbit_misc:quit(0);
+ rabbit_misc:quit(?EX_OK);
{'EXIT', {function_clause, [{?MODULE, action, _} | _]}} -> %% < R15
PrintInvalidCommandError(),
usage(UsageMod);
@@ -81,47 +81,48 @@ main(ParseFun, DoFun, UsageMod) ->
{error, {missing_dependencies, Missing, Blame}} ->
print_error("dependent plugins ~p not found; used by ~p.",
[Missing, Blame]),
- rabbit_misc:quit(2);
+ rabbit_misc:quit(?EX_CONFIG);
{'EXIT', {badarg, _}} ->
print_error("invalid parameter: ~p", [Args]),
- usage(UsageMod);
+ usage(UsageMod, ?EX_DATAERR);
{error, {Problem, Reason}} when is_atom(Problem), is_binary(Reason) ->
%% We handle this common case specially to avoid ~p since
%% that has i18n issues
print_error("~s: ~s", [Problem, Reason]),
- rabbit_misc:quit(2);
+ rabbit_misc:quit(?EX_SOFTWARE);
{error, Reason} ->
print_error("~p", [Reason]),
- rabbit_misc:quit(2);
+ rabbit_misc:quit(?EX_SOFTWARE);
{error_string, Reason} ->
print_error("~s", [Reason]),
- rabbit_misc:quit(2);
+ rabbit_misc:quit(?EX_SOFTWARE);
{badrpc, {'EXIT', Reason}} ->
print_error("~p", [Reason]),
- rabbit_misc:quit(2);
+ rabbit_misc:quit(?EX_SOFTWARE);
{badrpc, Reason} ->
case Reason of
timeout ->
- print_error("operation ~w on node ~w timed out", [Command, Node]);
+ print_error("operation ~w on node ~w timed out", [Command, Node]),
+ rabbit_misc:quit(?EX_TEMPFAIL);
_ ->
print_error("unable to connect to node ~w: ~w", [Node, Reason]),
- print_badrpc_diagnostics([Node])
- end,
- rabbit_misc:quit(2);
+ print_badrpc_diagnostics([Node]),
+ rabbit_misc:quit(?EX_UNAVAILABLE)
+ end;
{badrpc_multi, Reason, Nodes} ->
print_error("unable to connect to nodes ~p: ~w", [Nodes, Reason]),
print_badrpc_diagnostics(Nodes),
- rabbit_misc:quit(2);
+ rabbit_misc:quit(?EX_UNAVAILABLE);
function_clause ->
print_error("operation ~w used with invalid parameter: ~p",
[Command, Args]),
usage(UsageMod);
{refused, Username, _, _} ->
print_error("failed to authenticate user \"~s\"", [Username]),
- rabbit_misc:quit(2);
+ rabbit_misc:quit(?EX_NOUSER);
Other ->
print_error("~p", [Other]),
- rabbit_misc:quit(2)
+ rabbit_misc:quit(?EX_SOFTWARE)
end.
start_distribution() ->
@@ -139,8 +140,11 @@ name_type() ->
end.
usage(Mod) ->
+ usage(Mod, ?EX_USAGE).
+
+usage(Mod, ExitCode) ->
io:format("~s", [Mod:usage()]),
- rabbit_misc:quit(1).
+ rabbit_misc:quit(ExitCode).
%%----------------------------------------------------------------------------
diff --git a/src/rabbit_direct.erl b/src/rabbit_direct.erl
index 4940ab2b53..623d16215b 100644
--- a/src/rabbit_direct.erl
+++ b/src/rabbit_direct.erl
@@ -114,8 +114,8 @@ connect1(User, VHost, Protocol, Pid, Infos) ->
rabbit_event:notify(connection_created, Infos),
{ok, {User, rabbit_reader:server_properties(Protocol)}}
catch
- exit:#amqp_error{name = access_refused} ->
- {error, access_refused}
+ exit:#amqp_error{name = Reason = not_allowed} ->
+ {error, Reason}
end.
start_channel(Number, ClientChannelPid, ConnPid, ConnName, Protocol, User,