summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRandy Barlow <bowlofeggs@electronsweatshop.com>2016-08-07 08:38:31 -0400
committerRandy Barlow <bowlofeggs@electronsweatshop.com>2016-08-07 08:38:31 -0400
commit7b950e5c97ad91147d7a579ca62cfc1d5808aa16 (patch)
tree7b76ece3c2b075a8b6993306905f84e356b18fce
parentfc9a594fdc02336be11d545aaceb12d86d5e4233 (diff)
downloadejabberd-7b950e5c97ad91147d7a579ca62cfc1d5808aa16.tar.gz
ejabberd-7b950e5c97ad91147d7a579ca62cfc1d5808aa16.tar.xz
ejabberd-7b950e5c97ad91147d7a579ca62cfc1d5808aa16.zip
Update to 16.08.
Also, drop the R19 patch since it is included upstream now.
-rw-r--r--.gitignore1
-rw-r--r--ejabberd-0002-Fix-compilation-issues-on-R19.patch1293
-rw-r--r--ejabberd.service7
-rw-r--r--ejabberd.spec16
-rw-r--r--sources2
5 files changed, 17 insertions, 1302 deletions
diff --git a/.gitignore b/.gitignore
index 4157058..a629882 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
/16.06.1.tar.gz
+/16.08.tar.gz
diff --git a/ejabberd-0002-Fix-compilation-issues-on-R19.patch b/ejabberd-0002-Fix-compilation-issues-on-R19.patch
deleted file mode 100644
index b34923b..0000000
--- a/ejabberd-0002-Fix-compilation-issues-on-R19.patch
+++ /dev/null
@@ -1,1293 +0,0 @@
-From 0737958b45be015d734769cd9b6fa5e7ce01409f Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Pawe=C5=82=20Chmielowski?= <pchmielowski@process-one.net>
-Date: Fri, 1 Jul 2016 21:18:55 +0200
-Subject: [PATCH] Fix compilation issues on R19
-
----
- src/adhoc.erl | 23 +--
- src/cyrsasl.erl | 28 +--
- src/ejabberd_config.erl | 2 +-
- src/jlib.erl | 47 ++---
- src/mod_pubsub.erl | 426 +++++++++++-----------------------------
- src/node_flat_sql.erl | 78 ++------
- src/nodetree_dag.erl | 34 ++--
- src/pubsub_subscription.erl | 49 ++---
- src/pubsub_subscription_sql.erl | 44 ++---
- 10 files changed, 199 insertions(+), 538 deletions(-)
-
-diff --git a/src/adhoc.erl b/src/adhoc.erl
-index 83a113a..6970584 100644
---- a/src/adhoc.erl
-+++ b/src/adhoc.erl
-@@ -41,13 +41,7 @@
- %% Parse an ad-hoc request. Return either an adhoc_request record or
- %% an {error, ErrorType} tuple.
- %%
---spec(parse_request/1 ::
--(
-- IQ :: iq_request())
-- -> adhoc_response()
-- %%
-- | {error, _}
--).
-+-spec parse_request(IQ :: iq_request()) -> adhoc_response() | {error, _}.
-
- parse_request(#iq{type = set, lang = Lang, sub_el = SubEl, xmlns = ?NS_COMMANDS}) ->
- ?DEBUG("entering parse_request...", []),
-@@ -88,12 +82,9 @@ find_xdata_el1([_ | Els]) -> find_xdata_el1(Els).
- %% record, filling in values for language, node and session id from
- %% the request.
- %%
---spec(produce_response/2 ::
--(
-- Adhoc_Request :: adhoc_request(),
-- Adhoc_Response :: adhoc_response())
-- -> Xmlel::xmlel()
--).
-+-spec produce_response(Adhoc_Request :: adhoc_request(),
-+ Adhoc_Response :: adhoc_response()) ->
-+ Xmlel::xmlel().
-
- %% Produce a <command/> node to use as response from an adhoc_response
- %% record.
-@@ -104,11 +95,7 @@ produce_response(#adhoc_request{lang = Lang, node = Node, sessionid = SessionID}
- }).
-
- %%
---spec(produce_response/1 ::
--(
-- Adhoc_Response::adhoc_response())
-- -> Xmlel::xmlel()
--).
-+-spec produce_response(Adhoc_Response::adhoc_response()) -> Xmlel::xmlel().
-
- produce_response(
- #adhoc_response{
-diff --git a/src/cyrsasl.erl b/src/cyrsasl.erl
-index 21fbc96..a101e13 100644
---- a/src/cyrsasl.erl
-+++ b/src/cyrsasl.erl
-@@ -88,13 +88,8 @@ start() ->
- ok.
-
- %%
---spec(register_mechanism/3 ::
--(
-- Mechanim :: mechanism(),
-- Module :: module(),
-- PasswordType :: password_type())
-- -> any()
--).
-+-spec register_mechanism(Mechanim :: mechanism(), Module :: module(),
-+ PasswordType :: password_type()) -> any().
-
- register_mechanism(Mechanism, Module, PasswordType) ->
- case is_disabled(Mechanism) of
-@@ -139,11 +134,7 @@ check_credentials(_State, Props) ->
- _LUser -> ok
- end.
-
---spec(listmech/1 ::
--(
-- Host ::binary())
-- -> Mechanisms::mechanisms()
--).
-+-spec listmech(Host ::binary()) -> Mechanisms::mechanisms().
-
- listmech(Host) ->
- Mechs = ets:select(sasl_mechanism,
-@@ -213,12 +204,7 @@ server_step(State, ClientIn) ->
- %% Remove the anonymous mechanism from the list if not enabled for the given
- %% host
- %%
---spec(filter_anonymous/2 ::
--(
-- Host :: binary(),
-- Mechs :: mechanisms())
-- -> mechanisms()
--).
-+-spec filter_anonymous(Host :: binary(), Mechs :: mechanisms()) -> mechanisms().
-
- filter_anonymous(Host, Mechs) ->
- case ejabberd_auth_anonymous:is_sasl_anonymous_enabled(Host) of
-@@ -226,11 +212,7 @@ filter_anonymous(Host, Mechs) ->
- false -> Mechs -- [<<"ANONYMOUS">>]
- end.
-
---spec(is_disabled/1 ::
--(
-- Mechanism :: mechanism())
-- -> boolean()
--).
-+-spec is_disabled(Mechanism :: mechanism()) -> boolean().
-
- is_disabled(Mechanism) ->
- Disabled = ejabberd_config:get_option(
-diff --git a/src/ejabberd_config.erl b/src/ejabberd_config.erl
-index 139047d..df9debd 100644
---- a/src/ejabberd_config.erl
-+++ b/src/ejabberd_config.erl
-@@ -90,7 +90,7 @@ hosts_to_start(State) ->
-
- %% @private
- %% At the moment, these functions are mainly used to setup unit tests.
---spec(start/2 :: (Hosts :: [binary()], Opts :: [acl:acl() | local_config()]) -> ok).
-+-spec start(Hosts :: [binary()], Opts :: [acl:acl() | local_config()]) -> ok.
- start(Hosts, Opts) ->
- mnesia_init(),
- set_opts(set_hosts_in_options(Hosts, #state{opts = Opts})).
-diff --git a/src/jlib.erl b/src/jlib.erl
-index e5cba31..532a746 100644
---- a/src/jlib.erl
-+++ b/src/jlib.erl
-@@ -307,21 +307,16 @@ get_iq_namespace(#xmlel{name = <<"iq">>, children = Els}) ->
- get_iq_namespace(_) -> <<"">>.
-
- %%
---spec(iq_query_info/1 ::
--(
-- Xmlel :: xmlel())
-- -> iq_request() | 'reply' | 'invalid' | 'not_iq'
--).
-+-spec iq_query_info(Xmlel :: xmlel()) ->
-+ iq_request() | 'reply' | 'invalid' | 'not_iq'.
-
- %% @spec (xmlelement()) -> iq() | reply | invalid | not_iq
- iq_query_info(El) -> iq_info_internal(El, request).
-
- %%
---spec(iq_query_or_response_info/1 ::
--(
-- Xmlel :: xmlel())
-- -> iq_request() | iq_reply() | 'reply' | 'invalid' | 'not_iq'
--).
-+-spec iq_query_or_response_info(Xmlel :: xmlel()) ->
-+ iq_request() | iq_reply() |
-+ 'reply' | 'invalid' | 'not_iq'.
-
- iq_query_or_response_info(El) ->
- iq_info_internal(El, any).
-@@ -373,11 +368,7 @@ iq_type_to_string(get) -> <<"get">>;
- iq_type_to_string(result) -> <<"result">>;
- iq_type_to_string(error) -> <<"error">>.
-
---spec(iq_to_xml/1 ::
--(
-- IQ :: iq())
-- -> xmlel()
--).
-+-spec iq_to_xml(IQ :: iq()) -> xmlel().
-
- iq_to_xml(#iq{id = ID, type = Type, sub_el = SubEl}) ->
- if ID /= <<"">> ->
-@@ -391,13 +382,8 @@ iq_to_xml(#iq{id = ID, type = Type, sub_el = SubEl}) ->
- children = SubEl}
- end.
-
---spec(parse_xdata_submit/1 ::
--(
-- El :: xmlel())
-- -> [{Var::binary(), Values::[binary()]}]
-- %%
-- | 'invalid'
--).
-+-spec parse_xdata_submit(El :: xmlel()) ->
-+ [{Var::binary(), Values::[binary()]}] | 'invalid'.
-
- parse_xdata_submit(#xmlel{attrs = Attrs, children = Els}) ->
- case fxml:get_attr_s(<<"type">>, Attrs) of
-@@ -409,12 +395,9 @@ parse_xdata_submit(#xmlel{attrs = Attrs, children = Els}) ->
- invalid
- end.
-
---spec(parse_xdata_fields/2 ::
--(
-- Xmlels :: [xmlel() | cdata()],
-- Res :: [{Var::binary(), Values :: [binary()]}])
-- -> [{Var::binary(), Values::[binary()]}]
--).
-+-spec parse_xdata_fields(Xmlels :: [xmlel() | cdata()],
-+ Res :: [{Var::binary(), Values :: [binary()]}]) ->
-+ [{Var::binary(), Values::[binary()]}].
-
- parse_xdata_fields([], Res) -> Res;
- parse_xdata_fields([#xmlel{name = <<"field">>, attrs = Attrs, children = SubEls}
-@@ -429,12 +412,8 @@ parse_xdata_fields([#xmlel{name = <<"field">>, attrs = Attrs, children = SubEls}
- parse_xdata_fields([_ | Els], Res) ->
- parse_xdata_fields(Els, Res).
-
---spec(parse_xdata_values/2 ::
--(
-- Xmlels :: [xmlel() | cdata()],
-- Res :: [binary()])
-- -> [binary()]
--).
-+-spec parse_xdata_values(Xmlels :: [xmlel() | cdata()],
-+ Res :: [binary()]) -> [binary()].
-
- parse_xdata_values([], Res) -> Res;
- parse_xdata_values([#xmlel{name = <<"value">>, children = SubEls} | Els], Res) ->
-diff --git a/src/mod_pubsub.erl b/src/mod_pubsub.erl
-index a978cc5..53378c3 100644
---- a/src/mod_pubsub.erl
-+++ b/src/mod_pubsub.erl
-@@ -234,11 +234,7 @@ stop(Host) ->
- %% {stop, Reason}
- %% Description: Initiates the server
- %%--------------------------------------------------------------------
---spec(init/1 ::
-- (
-- [binary() | [{_,_}],...])
-- -> {'ok',state()}
-- ).
-+-spec init([binary() | [{_,_}],...]) -> {'ok',state()}.
-
- init([ServerHost, Opts]) ->
- ?DEBUG("pubsub init ~p ~p", [ServerHost, Opts]),
-@@ -480,15 +476,10 @@ send_loop(State) ->
- %% disco hooks handling functions
- %%
-
---spec(disco_local_identity/5 ::
-- (
-- Acc :: [xmlel()],
-- _From :: jid(),
-- To :: jid(),
-- Node :: <<>> | mod_pubsub:nodeId(),
-- Lang :: binary())
-- -> [xmlel()]
-- ).
-+-spec disco_local_identity(Acc :: [xmlel()], _From :: jid(),
-+ To :: jid(), Node :: <<>> | mod_pubsub:nodeId(),
-+ Lang :: binary()) -> [xmlel()].
-+
- disco_local_identity(Acc, _From, To, <<>>, _Lang) ->
- case lists:member(?PEPNODE, plugins(host(To#jid.lserver))) of
- true ->
-@@ -502,15 +493,10 @@ disco_local_identity(Acc, _From, To, <<>>, _Lang) ->
- disco_local_identity(Acc, _From, _To, _Node, _Lang) ->
- Acc.
-
---spec(disco_local_features/5 ::
-- (
-- Acc :: [xmlel()],
-- _From :: jid(),
-- To :: jid(),
-- Node :: <<>> | mod_pubsub:nodeId(),
-- Lang :: binary())
-- -> [binary(),...]
-- ).
-+-spec disco_local_features(Acc :: [xmlel()], _From :: jid(),
-+ To :: jid(), Node :: <<>> | mod_pubsub:nodeId(),
-+ Lang :: binary()) -> [binary(),...].
-+
- disco_local_features(Acc, _From, To, <<>>, _Lang) ->
- Host = host(To#jid.lserver),
- Feats = case Acc of
-@@ -528,15 +514,10 @@ disco_local_items(Acc, _From, _To, _Node, _Lang) -> Acc.
- % when is_binary(Node) ->
- % disco_sm_identity(Acc, From, To, iolist_to_binary(Node),
- % Lang);
---spec(disco_sm_identity/5 ::
-- (
-- Acc :: empty | [xmlel()],
-- From :: jid(),
-- To :: jid(),
-- Node :: mod_pubsub:nodeId(),
-- Lang :: binary())
-- -> [xmlel()]
-- ).
-+-spec disco_sm_identity(Acc :: empty | [xmlel()], From :: jid(),
-+ To :: jid(), Node :: mod_pubsub:nodeId(),
-+ Lang :: binary()) -> [xmlel()].
-+
- disco_sm_identity(empty, From, To, Node, Lang) ->
- disco_sm_identity([], From, To, Node, Lang);
- disco_sm_identity(Acc, From, To, Node, _Lang) ->
-@@ -571,15 +552,9 @@ disco_identity(Host, Node, From) ->
- _ -> []
- end.
-
---spec(disco_sm_features/5 ::
-- (
-- Acc :: empty | {result, Features::[Feature::binary()]},
-- From :: jid(),
-- To :: jid(),
-- Node :: mod_pubsub:nodeId(),
-- Lang :: binary())
-- -> {result, Features::[Feature::binary()]}
-- ).
-+-spec disco_sm_features(Acc :: empty | {result, Features::[Feature::binary()]},
-+ From :: jid(), To :: jid(), Node :: mod_pubsub:nodeId(),
-+ Lang :: binary()) -> {result, Features::[Feature::binary()]}.
- %disco_sm_features(Acc, From, To, Node, Lang)
- % when is_binary(Node) ->
- % disco_sm_features(Acc, From, To, iolist_to_binary(Node),
-@@ -607,15 +582,9 @@ disco_features(Host, Node, From) ->
- _ -> []
- end.
-
---spec(disco_sm_items/5 ::
-- (
-- Acc :: empty | {result, [xmlel()]},
-- From :: jid(),
-- To :: jid(),
-- Node :: mod_pubsub:nodeId(),
-- Lang :: binary())
-- -> {result, [xmlel()]}
-- ).
-+-spec disco_sm_items(Acc :: empty | {result, [xmlel()]}, From :: jid(),
-+ To :: jid(), Node :: mod_pubsub:nodeId(),
-+ Lang :: binary()) -> {result, [xmlel()]}.
- %disco_sm_items(Acc, From, To, Node, Lang)
- % when is_binary(Node) ->
- % disco_sm_items(Acc, From, To, iolist_to_binary(Node),
-@@ -627,13 +596,8 @@ disco_sm_items({result, OtherItems}, From, To, Node, _Lang) ->
- disco_items(jid:tolower(jid:remove_resource(To)), Node, From))};
- disco_sm_items(Acc, _From, _To, _Node, _Lang) -> Acc.
-
---spec(disco_items/3 ::
-- (
-- Host :: mod_pubsub:host(),
-- Node :: mod_pubsub:nodeId(),
-- From :: jid())
-- -> [xmlel()]
-- ).
-+-spec disco_items(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
-+ From :: jid()) -> [xmlel()].
- disco_items(Host, <<>>, From) ->
- Action = fun (#pubsub_node{nodeid = {_, Node},
- options = Options, type = Type, id = Nidx, owners = O},
-@@ -847,12 +811,8 @@ handle_call(stop, _From, State) ->
- %% @private
- handle_cast(_Msg, State) -> {noreply, State}.
-
---spec(handle_info/2 ::
-- (
-- _ :: {route, From::jid(), To::jid(), Packet::xmlel()},
-- State :: state())
-- -> {noreply, state()}
-- ).
-+-spec handle_info(_ :: {route, From::jid(), To::jid(), Packet::xmlel()},
-+ State :: state()) -> {noreply, state()}.
-
- %%--------------------------------------------------------------------
- %% Function: handle_info(Info, State) -> {noreply, State} |
-@@ -935,17 +895,9 @@ terminate(_Reason,
- %% @private
- code_change(_OldVsn, State, _Extra) -> {ok, State}.
-
---spec(do_route/7 ::
-- (
-- ServerHost :: binary(),
-- Access :: atom(),
-- Plugins :: [binary(),...],
-- Host :: mod_pubsub:hostPubsub(),
-- From :: jid(),
-- To :: jid(),
-- Packet :: xmlel())
-- -> ok
-- ).
-+-spec do_route(ServerHost :: binary(), Access :: atom(),
-+ Plugins :: [binary(),...], Host :: mod_pubsub:hostPubsub(),
-+ From :: jid(), To :: jid(), Packet :: xmlel()) -> ok.
-
- %%--------------------------------------------------------------------
- %%% Internal functions
-@@ -1132,14 +1084,8 @@ iq_disco_info(Host, SNode, From, Lang) ->
- node_disco_info(Host, Node, From)
- end.
-
---spec(iq_disco_items/4 ::
-- (
-- Host :: mod_pubsub:host(),
-- Node :: <<>> | mod_pubsub:nodeId(),
-- From :: jid(),
-- Rsm :: none | rsm_in())
-- -> {result, [xmlel()]}
-- ).
-+-spec iq_disco_items(Host :: mod_pubsub:host(), Node :: <<>> | mod_pubsub:nodeId(),
-+ From :: jid(), Rsm :: none | rsm_in()) -> {result, [xmlel()]}.
- iq_disco_items(Host, <<>>, From, _RSM) ->
- {result,
- lists:map(fun (#pubsub_node{nodeid = {_, SubNode}, options = Options}) ->
-@@ -1202,13 +1148,7 @@ iq_disco_items(Host, Item, From, RSM) ->
- end
- end.
-
---spec(iq_sm/3 ::
-- (
-- From :: jid(),
-- To :: jid(),
-- IQ :: iq_request())
-- -> iq_result() | iq_error()
-- ).
-+-spec iq_sm(From :: jid(), To :: jid(), IQ :: iq_request()) -> iq_result() | iq_error().
- iq_sm(From, To, #iq{type = Type, sub_el = SubEl, xmlns = XMLNS, lang = Lang} = IQ) ->
- ServerHost = To#jid.lserver,
- LOwner = jid:tolower(jid:remove_resource(To)),
-@@ -1233,36 +1173,17 @@ iq_get_vcard(Lang) ->
- <<(translate:translate(Lang, <<"ejabberd Publish-Subscribe module">>))/binary,
- "\nCopyright (c) 2004-2016 ProcessOne">>}]}].
-
---spec(iq_pubsub/6 ::
-- (
-- Host :: mod_pubsub:host(),
-- ServerHost :: binary(),
-- From :: jid(),
-- IQType :: 'get' | 'set',
-- SubEl :: xmlel(),
-- Lang :: binary())
-- -> {result, [xmlel()]}
-- %%%
-- | {error, xmlel()}
-- ).
-+-spec iq_pubsub(Host :: mod_pubsub:host(), ServerHost :: binary(), From :: jid(),
-+ IQType :: 'get' | 'set', SubEl :: xmlel(), Lang :: binary()) ->
-+ {result, [xmlel()]} | {error, xmlel()}.
-
- iq_pubsub(Host, ServerHost, From, IQType, SubEl, Lang) ->
- iq_pubsub(Host, ServerHost, From, IQType, SubEl, Lang, all, plugins(Host)).
-
---spec(iq_pubsub/8 ::
-- (
-- Host :: mod_pubsub:host(),
-- ServerHost :: binary(),
-- From :: jid(),
-- IQType :: 'get' | 'set',
-- SubEl :: xmlel(),
-- Lang :: binary(),
-- Access :: atom(),
-- Plugins :: [binary(),...])
-- -> {result, [xmlel()]}
-- %%%
-- | {error, xmlel()}
-- ).
-+-spec iq_pubsub(Host :: mod_pubsub:host(), ServerHost :: binary(), From :: jid(),
-+ IQType :: 'get' | 'set', SubEl :: xmlel(), Lang :: binary(),
-+ Access :: atom(), Plugins :: [binary(),...]) ->
-+ {result, [xmlel()]} | {error, xmlel()}.
-
- iq_pubsub(Host, ServerHost, From, IQType, SubEl, Lang, Access, Plugins) ->
- #xmlel{children = SubEls} = SubEl,
-@@ -1368,18 +1289,10 @@ iq_pubsub(Host, ServerHost, From, IQType, SubEl, Lang, Access, Plugins) ->
- end.
-
-
---spec(iq_pubsub_owner/6 ::
-- (
-- Host :: mod_pubsub:host(),
-- ServerHost :: binary(),
-- From :: jid(),
-- IQType :: 'get' | 'set',
-- SubEl :: xmlel(),
-- Lang :: binary())
-- -> {result, [xmlel()]}
-- %%%
-- | {error, xmlel()}
-- ).
-+-spec iq_pubsub_owner(Host :: mod_pubsub:host(), ServerHost :: binary(), From :: jid(),
-+ IQType :: 'get' | 'set', SubEl :: xmlel(), Lang :: binary()) ->
-+ {result, [xmlel()]} | {error, xmlel()}.
-+
- iq_pubsub_owner(Host, ServerHost, From, IQType, SubEl, Lang) ->
- #xmlel{children = SubEls} = SubEl,
- Action = fxml:remove_cdata(SubEls),
-@@ -1654,10 +1567,10 @@ send_authorization_approval(Host, JID, SNode, Subscription) ->
- %{S, SID} ->
- % [{<<"subscription">>, subscription_to_string(S)},
- % {<<"subid">>, SID}];
-- S ->
-+ S ->
- [{<<"subscription">>, subscription_to_string(S)}]
- end,
-- Stanza = event_stanza(<<"subscription">>,
-+ Stanza = event_stanza(<<"subscription">>,
- [{<<"jid">>, jid:to_string(JID)}
- | nodeAttr(SNode)]
- ++ SubAttrs),
-@@ -1802,33 +1715,17 @@ update_auth(Host, Node, Type, Nidx, Subscriber, Allow, Subs) ->
- %%<li>nodetree create_node checks if nodeid already exists</li>
- %%<li>node plugin create_node just sets default affiliation/subscription</li>
- %%</ul>
---spec(create_node/5 ::
-- (
-- Host :: mod_pubsub:host(),
-- ServerHost :: binary(),
-- Node :: <<>> | mod_pubsub:nodeId(),
-- Owner :: jid(),
-- Type :: binary())
-- -> {result, [xmlel(),...]}
-- %%%
-- | {error, xmlel()}
-- ).
-+-spec create_node(Host :: mod_pubsub:host(), ServerHost :: binary(),
-+ Node :: <<>> | mod_pubsub:nodeId(), Owner :: jid(),
-+ Type :: binary()) -> {result, [xmlel(),...]} | {error, xmlel()}.
- create_node(Host, ServerHost, Node, Owner, Type) ->
- create_node(Host, ServerHost, Node, Owner, Type, all, []).
-
---spec(create_node/7 ::
-- (
-- Host :: mod_pubsub:host(),
-- ServerHost :: binary(),
-- Node :: <<>> | mod_pubsub:nodeId(),
-- Owner :: jid(),
-- Type :: binary(),
-- Access :: atom(),
-- Configuration :: [xmlel()])
-- -> {result, [xmlel(),...]}
-- %%%
-- | {error, xmlel()}
-- ).
-+-spec create_node(Host :: mod_pubsub:host(), ServerHost :: binary(),
-+ Node :: <<>> | mod_pubsub:nodeId(), Owner :: jid(),
-+ Type :: binary(), Access :: atom(), Configuration :: [xmlel()]) ->
-+ {result, [xmlel(),...]} | {error, xmlel()}.
-+
- create_node(Host, ServerHost, <<>>, Owner, Type, Access, Configuration) ->
- case lists:member(<<"instant-nodes">>, plugin_features(Host, Type)) of
- true ->
-@@ -1942,15 +1839,8 @@ create_node(Host, ServerHost, Node, Owner, GivenType, Access, Configuration) ->
- %%<li>The node is the root collection node, which cannot be deleted.</li>
- %%<li>The specified node does not exist.</li>
- %%</ul>
---spec(delete_node/3 ::
-- (
-- Host :: mod_pubsub:host(),
-- Node :: mod_pubsub:nodeId(),
-- Owner :: jid())
-- -> {result, [xmlel(),...]}
-- %%%
-- | {error, xmlel()}
-- ).
-+-spec delete_node(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
-+ Owner :: jid()) -> {result, [xmlel(),...]} | {error, xmlel()}.
- delete_node(_Host, <<>>, _Owner) ->
- {error, ?ERRT_NOT_ALLOWED(?MYLANG, <<"No node specified">>)};
- delete_node(Host, Node, Owner) ->
-@@ -2026,17 +1916,9 @@ delete_node(Host, Node, Owner) ->
- %%<li>The node does not support subscriptions.</li>
- %%<li>The node does not exist.</li>
- %%</ul>
---spec(subscribe_node/5 ::
-- (
-- Host :: mod_pubsub:host(),
-- Node :: mod_pubsub:nodeId(),
-- From :: jid(),
-- JID :: binary(),
-- Configuration :: [xmlel()])
-- -> {result, [xmlel(),...]}
-- %%%
-- | {error, xmlel()}
-- ).
-+-spec subscribe_node(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
-+ From :: jid(), JID :: binary(), Configuration :: [xmlel()]) ->
-+ {result, [xmlel(),...]} | {error, xmlel()}.
- subscribe_node(Host, Node, From, JID, Configuration) ->
- SubModule = subscription_plugin(Host),
- SubOpts = case SubModule:parse_options_xform(Configuration) of
-@@ -2145,17 +2027,11 @@ subscribe_node(Host, Node, From, JID, Configuration) ->
- %%<li>The node does not exist.</li>
- %%<li>The request specifies a subscription ID that is not valid or current.</li>
- %%</ul>
---spec(unsubscribe_node/5 ::
-- (
-- Host :: mod_pubsub:host(),
-- Node :: mod_pubsub:nodeId(),
-- From :: jid(),
-- JID :: binary() | ljid(),
-- SubId :: mod_pubsub:subId())
-- -> {result, []}
-- %%%
-- | {error, xmlel()}
-- ).
-+-spec unsubscribe_node(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
-+ From :: jid(), JID :: binary() | ljid(),
-+ SubId :: mod_pubsub:subId()) ->
-+ {result, []} | {error, xmlel()}.
-+
- unsubscribe_node(Host, Node, From, JID, SubId) when is_binary(JID) ->
- unsubscribe_node(Host, Node, From, string_to_ljid(JID), SubId);
- unsubscribe_node(Host, Node, From, Subscriber, SubId) ->
-@@ -2183,18 +2059,12 @@ unsubscribe_node(Host, Node, From, Subscriber, SubId) ->
- %%<li>The item contains more than one payload element or the namespace of the root payload element does not match the configured namespace for the node.</li>
- %%<li>The request does not match the node configuration.</li>
- %%</ul>
---spec(publish_item/6 ::
-- (
-- Host :: mod_pubsub:host(),
-- ServerHost :: binary(),
-- Node :: mod_pubsub:nodeId(),
-- Publisher :: jid(),
-- ItemId :: <<>> | mod_pubsub:itemId(),
-- Payload :: mod_pubsub:payload())
-- -> {result, [xmlel(),...]}
-- %%%
-- | {error, xmlel()}
-- ).
-+-spec publish_item(Host :: mod_pubsub:host(), ServerHost :: binary(),
-+ Node :: mod_pubsub:nodeId(), Publisher :: jid(),
-+ ItemId :: <<>> | mod_pubsub:itemId(),
-+ Payload :: mod_pubsub:payload()) ->
-+ {result, [xmlel(),...]} | {error, xmlel()}.
-+
- publish_item(Host, ServerHost, Node, Publisher, ItemId, Payload) ->
- publish_item(Host, ServerHost, Node, Publisher, ItemId, Payload, [], all).
- publish_item(Host, ServerHost, Node, Publisher, <<>>, Payload, PubOpts, Access) ->
-@@ -2319,16 +2189,10 @@ publish_item(Host, ServerHost, Node, Publisher, ItemId, Payload, PubOpts, Access
- %%<li>The node does not support persistent items.</li>
- %%<li>The service does not support the deletion of items.</li>
- %%</ul>
---spec(delete_item/4 ::
-- (
-- Host :: mod_pubsub:host(),
-- Node :: mod_pubsub:nodeId(),
-- Publisher :: jid(),
-- ItemId :: mod_pubsub:itemId())
-- -> {result, []}
-- %%%
-- | {error, xmlel()}
-- ).
-+-spec delete_item(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
-+ Publisher :: jid(), ItemId :: mod_pubsub:itemId()) ->
-+ {result, []} | {error, xmlel()}.
-+
- delete_item(Host, Node, Publisher, ItemId) ->
- delete_item(Host, Node, Publisher, ItemId, false).
- delete_item(_, <<>>, _, _, _) ->
-@@ -2383,15 +2247,10 @@ delete_item(Host, Node, Publisher, ItemId, ForceNotify) ->
- %%<li>The node is not configured to persist items.</li>
- %%<li>The specified node does not exist.</li>
- %%</ul>
---spec(purge_node/3 ::
-- (
-- Host :: mod_pubsub:host(),
-- Node :: mod_pubsub:nodeId(),
-- Owner :: jid())
-- -> {result, []}
-- %%%
-- | {error, xmlel()}
-- ).
-+-spec purge_node(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
-+ Owner :: jid()) ->
-+ {result, []} | {error, xmlel()}.
-+
- purge_node(Host, Node, Owner) ->
- Action = fun (#pubsub_node{options = Options, type = Type, id = Nidx}) ->
- Features = plugin_features(Host, Type),
-@@ -2435,19 +2294,12 @@ purge_node(Host, Node, Owner) ->
- %% <p>The permission are not checked in this function.</p>
- %% @todo We probably need to check that the user doing the query has the right
- %% to read the items.
---spec(get_items/7 ::
-- (
-- Host :: mod_pubsub:host(),
-- Node :: mod_pubsub:nodeId(),
-- From :: jid(),
-- SubId :: mod_pubsub:subId(),
-- SMaxItems :: binary(),
-- ItemIds :: [mod_pubsub:itemId()],
-- Rsm :: none | rsm_in())
-- -> {result, [xmlel(),...]}
-- %%%
-- | {error, xmlel()}
-- ).
-+-spec get_items(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
-+ From :: jid(), SubId :: mod_pubsub:subId(),
-+ SMaxItems :: binary(), ItemIds :: [mod_pubsub:itemId()],
-+ Rsm :: none | rsm_in()) ->
-+ {result, [xmlel(),...]} | {error, xmlel()}.
-+
- get_items(Host, Node, From, SubId, SMaxItems, ItemIds, RSM) ->
- MaxItems = if SMaxItems == <<>> ->
- case get_max_items_node(Host) of
-@@ -2511,7 +2363,7 @@ get_items(Host, Node, From, SubId, SMaxItems, ItemIds, RSM) ->
-
- get_items(Host, Node) ->
- Action = fun (#pubsub_node{type = Type, id = Nidx}) ->
-- node_call(Host, Type, get_items, [Nidx, service_jid(Host), none])
-+ node_call(Host, Type, get_items, [Nidx, service_jid(Host), none])
- end,
- case transaction(Host, Node, Action, sync_dirty) of
- {result, {_, {Items, _}}} -> Items;
-@@ -2610,16 +2462,10 @@ dispatch_items(From, To, _Node, Stanza) ->
- ejabberd_router:route(service_jid(From), jid:make(To), Stanza).
-
- %% @doc <p>Return the list of affiliations as an XMPP response.</p>
---spec(get_affiliations/4 ::
-- (
-- Host :: mod_pubsub:host(),
-- Node :: mod_pubsub:nodeId(),
-- JID :: jid(),
-- Plugins :: [binary()])
-- -> {result, [xmlel(),...]}
-- %%%
-- | {error, xmlel()}
-- ).
-+-spec get_affiliations(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
-+ JID :: jid(), Plugins :: [binary()]) ->
-+ {result, [xmlel(),...]} | {error, xmlel()}.
-+
- get_affiliations(Host, Node, JID, Plugins) when is_list(Plugins) ->
- Result = lists:foldl( fun (Type, {Status, Acc}) ->
- Features = plugin_features(Host, Type),
-@@ -2663,15 +2509,10 @@ get_affiliations(Host, Node, JID, Plugins) when is_list(Plugins) ->
- Error
- end.
-
---spec(get_affiliations/3 ::
-- (
-- Host :: mod_pubsub:host(),
-- Node :: mod_pubsub:nodeId(),
-- JID :: jid())
-- -> {result, [xmlel(),...]}
-- %%%
-- | {error, xmlel()}
-- ).
-+-spec get_affiliations(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
-+ JID :: jid()) ->
-+ {result, [xmlel(),...]} | {error, xmlel()}.
-+
- get_affiliations(Host, Node, JID) ->
- Action = fun (#pubsub_node{type = Type, id = Nidx}) ->
- Features = plugin_features(Host, Type),
-@@ -2708,16 +2549,10 @@ get_affiliations(Host, Node, JID) ->
- Error
- end.
-
---spec(set_affiliations/4 ::
-- (
-- Host :: mod_pubsub:host(),
-- Node :: mod_pubsub:nodeId(),
-- From :: jid(),
-- EntitiesEls :: [xmlel()])
-- -> {result, []}
-- %%%
-- | {error, xmlel()}
-- ).
-+-spec set_affiliations(Host :: mod_pubsub:host(), Node :: mod_pubsub:nodeId(),
-+ From :: jid(), EntitiesEls :: [xmlel()]) ->
-+ {result, []} | {error, xmlel()}.
-+
- set_affiliations(Host, Node, From, EntitiesEls) ->
- Owner = jid:tolower(jid:remove_resource(From)),
- Entities = lists:foldl(fun
-@@ -3113,15 +2948,13 @@ set_subscriptions(Host, Node, From, EntitiesEls) ->
- end
- end.
-
---spec(get_presence_and_roster_permissions/5 ::
-- (
-- Host :: mod_pubsub:host(),
-- From :: ljid(),
-- Owners :: [ljid(),...],
-- AccessModel :: mod_pubsub:accessModel(),
-- AllowedGroups :: [binary()])
-- -> {PresenceSubscription::boolean(), RosterGroup::boolean()}
-- ).
-+-spec get_presence_and_roster_permissions(Host :: mod_pubsub:host(),
-+ From :: ljid(), Owners :: [ljid(),...],
-+ AccessModel :: mod_pubsub:accessModel(),
-+ AllowedGroups :: [binary()]) ->
-+ {PresenceSubscription::boolean(),
-+ RosterGroup::boolean()}.
-+
- get_presence_and_roster_permissions(Host, From, Owners, AccessModel, AllowedGroups) ->
- if (AccessModel == presence) or (AccessModel == roster) ->
- case Host of
-@@ -3179,11 +3012,7 @@ subscription_to_string(pending) -> <<"pending">>;
- subscription_to_string(unconfigured) -> <<"unconfigured">>;
- subscription_to_string(_) -> <<"none">>.
-
---spec(service_jid/1 ::
-- (
-- Host :: mod_pubsub:host())
-- -> jid()
-- ).
-+-spec service_jid(Host :: mod_pubsub:host()) -> jid().
- service_jid(#jid{} = Jid) -> Jid;
- service_jid({U, S, R}) -> jid:make(U, S, R);
- service_jid(Host) -> jid:make(<<>>, Host, <<>>).
-@@ -3217,12 +3046,7 @@ sub_option_can_deliver(_, _, {deliver, false}) -> false;
- sub_option_can_deliver(_, _, {expire, When}) -> p1_time_compat:timestamp() < When;
- sub_option_can_deliver(_, _, _) -> true.
-
---spec(presence_can_deliver/2 ::
-- (
-- Entity :: ljid(),
-- _ :: boolean())
-- -> boolean()
-- ).
-+-spec presence_can_deliver(Entity :: ljid(), _ :: boolean()) -> boolean().
- presence_can_deliver(_, false) ->
- true;
- presence_can_deliver({User, Server, Resource}, true) ->
-@@ -3243,12 +3067,10 @@ presence_can_deliver({User, Server, Resource}, true) ->
- false, Ss)
- end.
-
---spec(state_can_deliver/2 ::
-- (
-- Entity::ljid(),
-- SubOptions :: mod_pubsub:subOptions() | [])
-- -> [ljid()]
-- ).
-+-spec state_can_deliver(Entity::ljid(),
-+ SubOptions :: mod_pubsub:subOptions() | []) ->
-+ [ljid()].
-+
- state_can_deliver({U, S, R}, []) -> [{U, S, R}];
- state_can_deliver({U, S, R}, SubOptions) ->
- case lists:keysearch(show_values, 1, SubOptions) of
-@@ -3268,13 +3090,10 @@ state_can_deliver({U, S, R}, SubOptions) ->
- [], Resources)
- end.
-
---spec(get_resource_state/3 ::
-- (
-- Entity :: ljid(),
-- ShowValues :: [binary()],
-- JIDs :: [ljid()])
-- -> [ljid()]
-- ).
-+-spec get_resource_state(Entity :: ljid(), ShowValues :: [binary()],
-+ JIDs :: [ljid()]) ->
-+ [ljid()].
-+
- get_resource_state({U, S, R}, ShowValues, JIDs) ->
- case ejabberd_sm:get_session_pid(U, S, R) of
- none ->
-@@ -3293,11 +3112,8 @@ get_resource_state({U, S, R}, ShowValues, JIDs) ->
- end
- end.
-
---spec(payload_xmlelements/1 ::
-- (
-- Payload :: mod_pubsub:payload())
-- -> Count :: non_neg_integer()
-- ).
-+-spec payload_xmlelements(Payload :: mod_pubsub:payload()) ->
-+ Count :: non_neg_integer().
- payload_xmlelements(Payload) ->
- payload_xmlelements(Payload, 0).
-
-@@ -4040,12 +3856,9 @@ unset_cached_item(Host, Nidx) ->
- _ -> ok
- end.
-
---spec(get_cached_item/2 ::
-- (
-- Host :: mod_pubsub:host(),
-- Nidx :: mod_pubsub:nodeIdx())
-- -> undefined | mod_pubsub:pubsubItem()
-- ).
-+-spec get_cached_item(Host :: mod_pubsub:host(), Nidx :: mod_pubsub:nodeIdx()) ->
-+ undefined | mod_pubsub:pubsubItem().
-+
- get_cached_item({_, ServerHost, _}, Nidx) ->
- get_cached_item(ServerHost, Nidx);
- get_cached_item(Host, Nidx) ->
-@@ -4340,7 +4153,7 @@ string_to_ljid(JID) ->
- end
- end.
-
---spec(uniqid/0 :: () -> mod_pubsub:itemId()).
-+-spec uniqid() -> mod_pubsub:itemId().
- uniqid() ->
- {T1, T2, T3} = p1_time_compat:timestamp(),
- iolist_to_binary(io_lib:fwrite("~.16B~.16B~.16B", [T1, T2, T3])).
-@@ -4355,12 +4168,7 @@ itemsEls(Items) ->
- [#xmlel{name = <<"item">>, attrs = itemAttr(ItemId), children = Payload}
- || #pubsub_item{itemid = {ItemId, _}, payload = Payload} <- Items].
-
---spec(add_message_type/2 ::
-- (
-- Message :: xmlel(),
-- Type :: atom())
-- -> xmlel()
-- ).
-+-spec add_message_type(Message :: xmlel(), Type :: atom()) -> xmlel().
-
- add_message_type(Message, normal) -> Message;
- add_message_type(#xmlel{name = <<"message">>, attrs = Attrs, children = Els}, Type) ->
-diff --git a/src/node_flat_sql.erl b/src/node_flat_sql.erl
-index 68116cf..2030b12 100644
---- a/src/node_flat_sql.erl
-+++ b/src/node_flat_sql.erl
-@@ -402,17 +402,13 @@ get_entity_subscriptions(Host, Owner) ->
- end,
- {result, Reply}.
-
---spec(get_entity_subscriptions_for_send_last/2 ::
-- (
-- Host :: mod_pubsub:hostPubsub(),
-- Owner :: jid())
-- -> {result,
-- [{mod_pubsub:pubsubNode(),
-- mod_pubsub:subscription(),
-- mod_pubsub:subId(),
-- ljid()}]
-- }
-- ).
-+-spec get_entity_subscriptions_for_send_last(Host :: mod_pubsub:hostPubsub(),
-+ Owner :: jid()) ->
-+ {result, [{mod_pubsub:pubsubNode(),
-+ mod_pubsub:subscription(),
-+ mod_pubsub:subId(),
-+ ljid()}]}.
-+
- get_entity_subscriptions_for_send_last(Host, Owner) ->
- SubKey = jid:tolower(Owner),
- GenKey = jid:remove_resource(SubKey),
-@@ -611,11 +607,9 @@ get_state(Nidx, JID) ->
- {SJID, _} = State#pubsub_state.stateid,
- State#pubsub_state{items = itemids(Nidx, SJID)}.
-
---spec(get_state_without_itemids/2 ::
-- (Nidx :: mod_pubsub:nodeIdx(),
-- Key :: ljid()) ->
-- mod_pubsub:pubsubState()
-- ).
-+-spec get_state_without_itemids(Nidx :: mod_pubsub:nodeIdx(), Key :: ljid()) ->
-+ mod_pubsub:pubsubState().
-+
- get_state_without_itemids(Nidx, JID) ->
- J = encode_jid(JID),
- case catch
-@@ -973,17 +967,11 @@ update_subscription(Nidx, JID, Subscription) ->
- "-affiliation='n'"
- ]).
-
---spec(decode_jid/1 ::
-- ( SJID :: binary())
-- -> ljid()
-- ).
-+-spec decode_jid(SJID :: binary()) -> ljid().
- decode_jid(SJID) ->
- jid:tolower(jid:from_string(SJID)).
-
---spec(decode_affiliation/1 ::
-- ( Arg :: binary())
-- -> atom()
-- ).
-+-spec decode_affiliation(Arg :: binary()) -> atom().
- decode_affiliation(<<"o">>) -> owner;
- decode_affiliation(<<"p">>) -> publisher;
- decode_affiliation(<<"u">>) -> publish_only;
-@@ -991,19 +979,13 @@ decode_affiliation(<<"m">>) -> member;
- decode_affiliation(<<"c">>) -> outcast;
- decode_affiliation(_) -> none.
-
---spec(decode_subscription/1 ::
-- ( Arg :: binary())
-- -> atom()
-- ).
-+-spec decode_subscription(Arg :: binary()) -> atom().
- decode_subscription(<<"s">>) -> subscribed;
- decode_subscription(<<"p">>) -> pending;
- decode_subscription(<<"u">>) -> unconfigured;
- decode_subscription(_) -> none.
-
---spec(decode_subscriptions/1 ::
-- ( Subscriptions :: binary())
-- -> [] | [{atom(), binary()},...]
-- ).
-+-spec decode_subscriptions(Subscriptions :: binary()) -> [] | [{atom(), binary()},...].
- decode_subscriptions(Subscriptions) ->
- lists:foldl(fun (Subscription, Acc) ->
- case str:tokens(Subscription, <<":">>) of
-@@ -1013,36 +995,24 @@ decode_subscriptions(Subscriptions) ->
- end,
- [], str:tokens(Subscriptions, <<",">>)).
-
---spec(encode_jid/1 ::
-- ( JID :: ljid())
-- -> binary()
-- ).
-+-spec encode_jid(JID :: ljid()) -> binary().
- encode_jid(JID) ->
- jid:to_string(JID).
-
---spec(encode_jid_like/1 :: (JID :: ljid()) -> binary()).
-+-spec encode_jid_like(JID :: ljid()) -> binary().
- encode_jid_like(JID) ->
- ejabberd_sql:escape_like_arg_circumflex(jid:to_string(JID)).
-
---spec(encode_host/1 ::
-- ( Host :: host())
-- -> binary()
-- ).
-+-spec encode_host(Host :: host()) -> binary().
- encode_host({_U, _S, _R} = LJID) -> encode_jid(LJID);
- encode_host(Host) -> Host.
-
---spec(encode_host_like/1 ::
-- ( Host :: host())
-- -> binary()
-- ).
-+-spec encode_host_like(Host :: host()) -> binary().
- encode_host_like({_U, _S, _R} = LJID) -> ejabberd_sql:escape(encode_jid_like(LJID));
- encode_host_like(Host) ->
- ejabberd_sql:escape(ejabberd_sql:escape_like_arg_circumflex(Host)).
-
---spec(encode_affiliation/1 ::
-- ( Arg :: atom())
-- -> binary()
-- ).
-+-spec encode_affiliation(Arg :: atom()) -> binary().
- encode_affiliation(owner) -> <<"o">>;
- encode_affiliation(publisher) -> <<"p">>;
- encode_affiliation(publish_only) -> <<"u">>;
-@@ -1050,19 +1020,13 @@ encode_affiliation(member) -> <<"m">>;
- encode_affiliation(outcast) -> <<"c">>;
- encode_affiliation(_) -> <<"n">>.
-
---spec(encode_subscription/1 ::
-- ( Arg :: atom())
-- -> binary()
-- ).
-+-spec encode_subscription(Arg :: atom()) -> binary().
- encode_subscription(subscribed) -> <<"s">>;
- encode_subscription(pending) -> <<"p">>;
- encode_subscription(unconfigured) -> <<"u">>;
- encode_subscription(_) -> <<"n">>.
-
---spec(encode_subscriptions/1 ::
-- ( Subscriptions :: [] | [{atom(), binary()},...])
-- -> binary()
-- ).
-+-spec encode_subscriptions(Subscriptions :: [] | [{atom(), binary()},...]) -> binary().
- encode_subscriptions(Subscriptions) ->
- str:join([<<(encode_subscription(S))/binary, ":", SubId/binary>>
- || {S, SubId} <- Subscriptions], <<",">>).
-diff --git a/src/nodetree_dag.erl b/src/nodetree_dag.erl
-index a105db8..387d984 100644
---- a/src/nodetree_dag.erl
-+++ b/src/nodetree_dag.erl
-@@ -167,12 +167,8 @@ oid(Key, Name) -> {Key, Name}.
-
- %% Key = jlib:jid() | host()
- %% Node = string()
---spec(find_node/2 ::
-- (
-- Key :: mod_pubsub:hostPubsub(),
-- Node :: mod_pubsub:nodeId())
-- -> mod_pubsub:pubsubNode() | false
-- ).
-+-spec find_node(Key :: mod_pubsub:hostPubsub(), Node :: mod_pubsub:nodeId()) ->
-+ mod_pubsub:pubsubNode() | false.
- find_node(Key, Node) ->
- case mnesia:read(pubsub_node, oid(Key, Node), read) of
- [] -> false;
-@@ -188,14 +184,11 @@ find_opt(Key, Default, Options) ->
- _ -> Default
- end.
-
---spec(traversal_helper/4 ::
-- (
-- Pred :: fun(),
-- Tr :: fun(),
-- Host :: mod_pubsub:hostPubsub(),
-- Nodes :: [mod_pubsub:nodeId(),...])
-- -> [{Depth::non_neg_integer(), Nodes::[mod_pubsub:pubsubNode(),...]}]
-- ).
-+-spec traversal_helper(Pred :: fun(), Tr :: fun(), Host :: mod_pubsub:hostPubsub(),
-+ Nodes :: [mod_pubsub:nodeId(),...]) ->
-+ [{Depth::non_neg_integer(),
-+ Nodes::[mod_pubsub:pubsubNode(),...]}].
-+
- traversal_helper(Pred, Tr, Host, Nodes) ->
- traversal_helper(Pred, Tr, 0, Host, Nodes, []).
-
-@@ -220,15 +213,10 @@ remove_config_parent(Node, [{collection, Parents} | T], Acc) ->
- remove_config_parent(Node, [H | T], Acc) ->
- remove_config_parent(Node, T, [H | Acc]).
-
---spec(validate_parentage/3 ::
-- (
-- Key :: mod_pubsub:hostPubsub(),
-- Owners :: [ljid(),...],
-- Parent_Nodes :: [mod_pubsub:nodeId()])
-- -> true
-- %%%
-- | {error, xmlel()}
-- ).
-+-spec validate_parentage(Key :: mod_pubsub:hostPubsub(), Owners :: [ljid(),...],
-+ Parent_Nodes :: [mod_pubsub:nodeId()]) ->
-+ true | {error, xmlel()}.
-+
- validate_parentage(_Key, _Owners, []) ->
- true;
- validate_parentage(Key, Owners, [[] | T]) ->
-diff --git a/src/pubsub_subscription.erl b/src/pubsub_subscription.erl
-index f990f6e..3ab5021 100644
---- a/src/pubsub_subscription.erl
-+++ b/src/pubsub_subscription.erl
-@@ -152,13 +152,9 @@ create_table() ->
- Other -> Other
- end.
-
---spec(add_subscription/3 ::
-- (
-- _JID :: ljid(),
-- _NodeId :: mod_pubsub:nodeIdx(),
-- Options :: [] | mod_pubsub:subOptions())
-- -> SubId :: mod_pubsub:subId()
-- ).
-+-spec add_subscription(_JID :: ljid(), _NodeId :: mod_pubsub:nodeIdx(),
-+ Options :: [] | mod_pubsub:subOptions()) ->
-+ SubId :: mod_pubsub:subId().
-
- add_subscription(_JID, _NodeId, []) -> make_subid();
- add_subscription(_JID, _NodeId, Options) ->
-@@ -166,25 +162,13 @@ add_subscription(_JID, _NodeId, Options) ->
- mnesia:write(#pubsub_subscription{subid = SubID, options = Options}),
- SubID.
-
---spec(delete_subscription/3 ::
-- (
-- _JID :: _,
-- _NodeId :: _,
-- SubId :: mod_pubsub:subId())
-- -> ok
-- ).
-+-spec delete_subscription(_JID :: _, _NodeId :: _, SubId :: mod_pubsub:subId()) -> ok.
-
- delete_subscription(_JID, _NodeId, SubID) ->
- mnesia:delete({pubsub_subscription, SubID}).
-
---spec(read_subscription/3 ::
-- (
-- _JID :: ljid(),
-- _NodeId :: _,
-- SubID :: mod_pubsub:subId())
-- -> mod_pubsub:pubsubSubscription()
-- | {error, notfound}
-- ).
-+-spec read_subscription(_JID :: ljid(), _NodeId :: _, SubID :: mod_pubsub:subId()) ->
-+ mod_pubsub:pubsubSubscription() | {error, notfound}.
-
- read_subscription(_JID, _NodeId, SubID) ->
- case mnesia:read({pubsub_subscription, SubID}) of
-@@ -192,19 +176,13 @@ read_subscription(_JID, _NodeId, SubID) ->
- _ -> {error, notfound}
- end.
-
---spec(write_subscription/4 ::
-- (
-- _JID :: ljid(),
-- _NodeId :: _,
-- SubID :: mod_pubsub:subId(),
-- Options :: mod_pubsub:subOptions())
-- -> ok
-- ).
-+-spec write_subscription(_JID :: ljid(), _NodeId :: _, SubID :: mod_pubsub:subId(),
-+ Options :: mod_pubsub:subOptions()) -> ok.
-
- write_subscription(_JID, _NodeId, SubID, Options) ->
- mnesia:write(#pubsub_subscription{subid = SubID, options = Options}).
-
---spec(make_subid/0 :: () -> SubId::mod_pubsub:subId()).
-+-spec make_subid() -> SubId::mod_pubsub:subId().
- make_subid() ->
- {T1, T2, T3} = p1_time_compat:timestamp(),
- iolist_to_binary(io_lib:fwrite("~.16B~.16B~.16B", [T1, T2, T3])).
-@@ -272,13 +250,8 @@ xopt_to_bool(Option, _) ->
- ErrTxt = iolist_to_binary(io_lib:format(Txt, [Option])),
- {error, ?ERRT_NOT_ACCEPTABLE(?MYLANG, ErrTxt)}.
-
---spec(get_option_xfield/3 ::
-- (
-- Lang :: binary(),
-- Key :: atom(),
-- Options :: mod_pubsub:subOptions())
-- -> xmlel()
-- ).
-+-spec get_option_xfield(Lang :: binary(), Key :: atom(),
-+ Options :: mod_pubsub:subOptions()) -> xmlel().
-
- %% Return a field for an XForm for Key, with data filled in, if
- %% applicable, from Options.
-diff --git a/src/pubsub_subscription_sql.erl b/src/pubsub_subscription_sql.erl
-index 1f82aa0..6e59832 100644
---- a/src/pubsub_subscription_sql.erl
-+++ b/src/pubsub_subscription_sql.erl
-@@ -73,54 +73,34 @@
-
- init() -> ok = create_table().
-
---spec(subscribe_node/3 ::
-- (
-- _JID :: _,
-- _NodeId :: _,
-- Options :: [] | mod_pubsub:subOptions())
-- -> {result, mod_pubsub:subId()}
-- ).
-+-spec subscribe_node(_JID :: _, _NodeId :: _, Options :: [] | mod_pubsub:subOptions()) ->
-+ {result, mod_pubsub:subId()}.
-+
- subscribe_node(_JID, _NodeId, Options) ->
- SubID = make_subid(),
- (?DB_MOD):add_subscription(#pubsub_subscription{subid = SubID, options = Options}),
- {result, SubID}.
-
---spec(unsubscribe_node/3 ::
-- (
-- _JID :: _,
-- _NodeId :: _,
-- SubID :: mod_pubsub:subId())
-- -> {result, mod_pubsub:subscription()}
-- | {error, notfound}
-- ).
-+-spec unsubscribe_node(_JID :: _, _NodeId :: _, SubID :: mod_pubsub:subId()) ->
-+ {result, mod_pubsub:subscription()} | {error, notfound}.
-+
- unsubscribe_node(_JID, _NodeId, SubID) ->
- case (?DB_MOD):read_subscription(SubID) of
- {ok, Sub} -> (?DB_MOD):delete_subscription(SubID), {result, Sub};
- notfound -> {error, notfound}
- end.
-
---spec(get_subscription/3 ::
-- (
-- _JID :: _,
-- _NodeId :: _,
-- SubId :: mod_pubsub:subId())
-- -> {result, mod_pubsub:subscription()}
-- | {error, notfound}
-- ).
-+-spec get_subscription(_JID :: _, _NodeId :: _, SubId :: mod_pubsub:subId()) ->
-+ {result, mod_pubsub:subscription()} | {error, notfound}.
-+
- get_subscription(_JID, _NodeId, SubID) ->
- case (?DB_MOD):read_subscription(SubID) of
- {ok, Sub} -> {result, Sub};
- notfound -> {error, notfound}
- end.
-
---spec(set_subscription/4 ::
-- (
-- _JID :: _,
-- _NodeId :: _,
-- SubId :: mod_pubsub:subId(),
-- Options :: mod_pubsub:subOptions())
-- -> {result, ok}
-- ).
-+-spec set_subscription(_JID :: _, _NodeId :: _, SubId :: mod_pubsub:subId(),
-+ Options :: mod_pubsub:subOptions()) -> {result, ok}.
- set_subscription(_JID, _NodeId, SubID, Options) ->
- case (?DB_MOD):read_subscription(SubID) of
- {ok, _} ->
-@@ -167,7 +147,7 @@ parse_options_xform(XFields) ->
- %%====================================================================
- create_table() -> ok.
-
---spec(make_subid/0 :: () -> mod_pubsub:subId()).
-+-spec make_subid() -> mod_pubsub:subId().
- make_subid() ->
- {T1, T2, T3} = p1_time_compat:timestamp(),
- iolist_to_binary(io_lib:fwrite("~.16B~.16B~.16B", [T1, T2, T3])).
---
-2.9.2
-
diff --git a/ejabberd.service b/ejabberd.service
index 902e694..e562425 100644
--- a/ejabberd.service
+++ b/ejabberd.service
@@ -16,6 +16,13 @@ ExecStart=/usr/bin/bash /usr/bin/ejabberdctl \
--spool "/var/lib/ejabberd" start
ExecStop=/usr/bin/bash /usr/bin/ejabberdctl stop
RemainAfterExit=yes
+# The CAP_DAC_OVERRIDE capability is required for pam authentication to work
+CapabilityBoundingSet=CAP_DAC_OVERRIDE
+PrivateTmp=true
+PrivateDevices=true
+ProtectHome=true
+ProtectSystem=full
+NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
diff --git a/ejabberd.spec b/ejabberd.spec
index 3241d42..a7ea837 100644
--- a/ejabberd.spec
+++ b/ejabberd.spec
@@ -3,7 +3,7 @@
Name: ejabberd
-Version: 16.06.1
+Version: 16.08
Release: 1%{?dist}
Summary: A distributed, fault-tolerant Jabber/XMPP server
@@ -28,9 +28,6 @@ Source13: ejabberdctl.polkit.rules
# Use ejabberd as an example for PAM service name (fedora/epel-specific)
Patch1: ejabberd-0001-Fix-PAM-service-example-name-to-match-actual-one.patch
-# This patch allows ejabberd to compile on Erlang 19, it was backported from upstream commit
-# 0737958b45be015d734769cd9b6fa5e7ce01409f.
-Patch2: ejabberd-0002-Fix-compilation-issues-on-R19.patch
# BZ# 439583, 452326, 451554, 465196, 502361 (fedora/epel-specific)
# rbarlow: i'm not sure what this patch is for, but it does not apply cleanly
#Patch3: ejabberd-0003-Fedora-specific-changes-to-ejabberdctl.patch
@@ -47,14 +44,14 @@ Patch10:ejabberd-0010-Enable-systemd-notification-if-available.patch
#Patch11: ejabberd-0011-aarch64.patch
Patch13: 0013-Do-not-manage-deps-during-build.patch
-BuildRequires: elixir >= 1.1.1
+BuildRequires: elixir >= 1.2.6
BuildRequires: erlang-cache_tab >= 1.0.3
BuildRequires: erlang-esip >= 1.0.7
BuildRequires: erlang-ezlib >= 1.0.1
BuildRequires: erlang-fast_tls >= 1.0.6
BuildRequires: erlang-fast_xml >= 1.1.14
BuildRequires: erlang-fast_yaml >= 1.0.5
-BuildRequires: erlang-iconv >= 1.0.0
+BuildRequires: erlang-iconv >= 1.0.1
BuildRequires: erlang-jiffy >= 0.14.7
BuildRequires: erlang-lager >= 3.2.1
BuildRequires: erlang-luerl >= 0.2
@@ -67,7 +64,7 @@ BuildRequires: erlang-p1_utils >= 1.0.5
BuildRequires: erlang-p1_xmlrpc >= 1.15.1
BuildRequires: erlang-rebar
BuildRequires: erlang-riak_client
-BuildRequires: erlang-stringprep >= 1.0.4
+BuildRequires: erlang-stringprep >= 1.0.5
BuildRequires: erlang-stun >= 1.0.6
BuildRequires: expat-devel >= 1.95
BuildRequires: git
@@ -111,7 +108,6 @@ Windows NT/2000/XP).
%setup -q
%patch1 -p1 -b .pam_name
-%patch2 -p1 -b .fix_r19
%patch6 -p1 -b .use_polkit
%patch7 -p1 -b .use_bindir
@@ -278,6 +274,10 @@ fi)
%changelog
+* Sun Aug 07 2016 Randy Barlow <randy@electronsweatshop.com> - 16.08-1
+- Update to 16.08.
+- Drop the R19 patch since it is included upstream now.
+
* Sat Jul 30 2016 Randy Barlow <randy@electronsweatshop.com> - 16.06.1-1
- Update to 16.01.1 (#1351186).
- Backport commit 0737958b to build on Erlang 19.
diff --git a/sources b/sources
index 2e7ff5b..91051d8 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-b6c666dbc85b11226ca3d1ee5cca4db4 16.06.1.tar.gz
+9b977580eda44b68d2b14e2f2842894d 16.08.tar.gz