]> granicus.if.org Git - ejabberd/commitdiff
Don't announce register feature once user is authenticated (#41)
authorBadlop <badlop@process-one.net>
Thu, 7 May 2015 09:41:59 +0000 (11:41 +0200)
committerBadlop <badlop@process-one.net>
Thu, 7 May 2015 09:41:59 +0000 (11:41 +0200)
src/ejabberd_c2s.erl
src/mod_register.erl

index f2d16e878ba5af52f87bf8de24499ad96e7d4001..5cdb8e1c9df6576c92d0c807dee84b63053e1b1d 100644 (file)
@@ -457,14 +457,14 @@ wait_for_stream({xmlstreamstart, _Name, Attrs}, StateData) ->
                                            false ->
                                                []
                                        end,
+                                   StreamFeatures1 = TLSFeature ++ CompressFeature ++ Mechs,
+                                   StreamFeatures = ejabberd_hooks:run_fold(c2s_stream_features,
+                                                       Server, StreamFeatures1, [Server]),
                                    send_element(StateData,
                                            #xmlel{name = <<"stream:features">>,
                                                   attrs = [],
                                                   children =
-                                                   TLSFeature ++ CompressFeature ++ Mechs
-                                                   ++
-                                                   ejabberd_hooks:run_fold(c2s_stream_features,
-                                                       Server, [], [Server])}),
+                                                   StreamFeatures}),
                                    fsm_next_state(wait_for_feature_request,
                                               StateData#state{
                                                 server = Server,
@@ -489,7 +489,7 @@ wait_for_stream({xmlstreamstart, _Name, Attrs}, StateData) ->
                                              false ->
                                                  []
                                            end,
-                                       StreamFeatures = [#xmlel{name = <<"bind">>,
+                                       StreamFeatures1 = [#xmlel{name = <<"bind">>,
                                                                attrs = [{<<"xmlns">>, ?NS_BIND}],
                                                                children = []},
                                                            #xmlel{name = <<"session">>,
@@ -499,9 +499,9 @@ wait_for_stream({xmlstreamstart, _Name, Attrs}, StateData) ->
                                                            RosterVersioningFeature ++
                                                            StreamManagementFeature ++
                                                            ejabberd_hooks:run_fold(c2s_post_auth_features,
-                                                               Server, [], [Server]) ++
-                                                           ejabberd_hooks:run_fold(c2s_stream_features,
                                                                Server, [], [Server]),
+                                       StreamFeatures = ejabberd_hooks:run_fold(c2s_stream_features,
+                                                               Server, StreamFeatures1, [Server]),
                                        send_element(StateData,
                                                    #xmlel{name = <<"stream:features">>,
                                                            attrs = [],
index cd68af93643e2e5f1e142a46aaf26479c7c1f7bc..1c03fb3e93c724d8a9a7bf43d123b0f54a5032bd 100644 (file)
@@ -68,10 +68,15 @@ stop(Host) ->
                                     ?NS_REGISTER).
 
 stream_feature_register(Acc, _Host) ->
-    [#xmlel{name = <<"register">>,
-           attrs = [{<<"xmlns">>, ?NS_FEATURE_IQREGISTER}],
-           children = []}
-     | Acc].
+    case lists:keymember(<<"mechanisms">>, 2, Acc) of
+       true ->
+           [#xmlel{name = <<"register">>,
+                   attrs = [{<<"xmlns">>, ?NS_FEATURE_IQREGISTER}],
+                   children = []}
+            | Acc];
+       false ->
+           Acc
+    end.
 
 unauthenticated_iq_register(_Acc, Server,
                            #iq{xmlns = ?NS_REGISTER} = IQ, IP) ->