diff options
author | Randy Barlow <bowlofeggs@electronsweatshop.com> | 2016-08-07 08:38:31 -0400 |
---|---|---|
committer | Randy Barlow <bowlofeggs@electronsweatshop.com> | 2016-08-07 08:38:31 -0400 |
commit | 7b950e5c97ad91147d7a579ca62cfc1d5808aa16 (patch) | |
tree | 7b76ece3c2b075a8b6993306905f84e356b18fce | |
parent | fc9a594fdc02336be11d545aaceb12d86d5e4233 (diff) | |
download | ejabberd-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-- | .gitignore | 1 | ||||
-rw-r--r-- | ejabberd-0002-Fix-compilation-issues-on-R19.patch | 1293 | ||||
-rw-r--r-- | ejabberd.service | 7 | ||||
-rw-r--r-- | ejabberd.spec | 16 | ||||
-rw-r--r-- | sources | 2 |
5 files changed, 17 insertions, 1302 deletions
@@ -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. @@ -1 +1 @@ -b6c666dbc85b11226ca3d1ee5cca4db4 16.06.1.tar.gz +9b977580eda44b68d2b14e2f2842894d 16.08.tar.gz |