aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/node_hometree.erl7
-rw-r--r--src/node_hometree_odbc.erl7
2 files changed, 8 insertions, 6 deletions
diff --git a/src/node_hometree.erl b/src/node_hometree.erl
index 2840c1850..f2e592aaa 100644
--- a/src/node_hometree.erl
+++ b/src/node_hometree.erl
@@ -217,6 +217,7 @@ subscribe_node(Nidx, Sender, Subscriber, AccessModel,
(_) -> false
end,
Subscriptions),
+ Owner = Affiliation == owner,
if not Authorized ->
{error,
?ERR_EXTENDED((?ERR_BAD_REQUEST), <<"invalid-jid">>)};
@@ -225,13 +226,13 @@ subscribe_node(Nidx, Sender, Subscriber, AccessModel,
PendingSubscription ->
{error,
?ERR_EXTENDED((?ERR_NOT_AUTHORIZED), <<"pending-subscription">>)};
- (AccessModel == presence) and not PresenceSubscription ->
+ (AccessModel == presence) and (not PresenceSubscription) and (not Owner) ->
{error,
?ERR_EXTENDED((?ERR_NOT_AUTHORIZED), <<"presence-subscription-required">>)};
- (AccessModel == roster) and not RosterGroup ->
+ (AccessModel == roster) and (not RosterGroup) and (not Owner) ->
{error,
?ERR_EXTENDED((?ERR_NOT_AUTHORIZED), <<"not-in-roster-group">>)};
- (AccessModel == whitelist) and not Whitelisted ->
+ (AccessModel == whitelist) and (not Whitelisted) and (not Owner) ->
{error,
?ERR_EXTENDED((?ERR_NOT_ALLOWED), <<"closed-node">>)};
%%MustPay ->
diff --git a/src/node_hometree_odbc.erl b/src/node_hometree_odbc.erl
index d0cfad0f1..6207e0fbc 100644
--- a/src/node_hometree_odbc.erl
+++ b/src/node_hometree_odbc.erl
@@ -158,6 +158,7 @@ subscribe_node(Nidx, Sender, Subscriber, AccessModel,
(_) -> false
end,
Subscriptions),
+ Owner = Affiliation == owner,
if not Authorized ->
{error,
?ERR_EXTENDED((?ERR_BAD_REQUEST), <<"invalid-jid">>)};
@@ -166,13 +167,13 @@ subscribe_node(Nidx, Sender, Subscriber, AccessModel,
PendingSubscription ->
{error,
?ERR_EXTENDED((?ERR_NOT_AUTHORIZED), <<"pending-subscription">>)};
- (AccessModel == presence) and not PresenceSubscription ->
+ (AccessModel == presence) and (not PresenceSubscription) and (not Owner) ->
{error,
?ERR_EXTENDED((?ERR_NOT_AUTHORIZED), <<"presence-subscription-required">>)};
- (AccessModel == roster) and not RosterGroup ->
+ (AccessModel == roster) and (not RosterGroup) and (not Owner) ->
{error,
?ERR_EXTENDED((?ERR_NOT_AUTHORIZED), <<"not-in-roster-group">>)};
- (AccessModel == whitelist) and not Whitelisted ->
+ (AccessModel == whitelist) and (not Whitelisted) and (not Owner) ->
{error,
?ERR_EXTENDED((?ERR_NOT_ALLOWED), <<"closed-node">>)};
%%MustPay ->