mod_c2s, mod_s2s: Close incoming connections if there are no features to offer on...
authorKim Alvefur <zash@zash.se>
Thu, 24 Sep 2015 18:05:23 +0000 (20:05 +0200)
committerKim Alvefur <zash@zash.se>
Thu, 24 Sep 2015 18:05:23 +0000 (20:05 +0200)
plugins/mod_c2s.lua
plugins/mod_s2s/mod_s2s.lua

index 1423eaa342312bc093b1fc01229ebe1bd92239ec..3d9f9f88c1c479c82d6aa6b737b9237893765843 100644 (file)
@@ -83,7 +83,12 @@ function stream_callbacks.streamopened(session, attr)
 
        local features = st.stanza("stream:features");
        hosts[session.host].events.fire_event("stream-features", { origin = session, features = features });
-       send(features);
+       if features.tags[1] or session.full_jid then
+               send(features);
+       else
+               (session.log or log)("warn", "No features to offer");
+               session:close{ condition = "undefined-condition", text = "No features to proceed with" };
+       end
 end
 
 function stream_callbacks.streamclosed(session)
index 480761f4b817ddcf75cf190c41926f903eadbc7a..b44000a639e2e2a8e66465bbf2273dd0dd709f35 100644 (file)
@@ -351,8 +351,13 @@ function stream_callbacks.streamopened(session, attr)
                                (session.log or log)("warn", "No 'to' on stream header from %s means we can't offer any features", from or session.ip or "unknown host");
                        end
 
-                       log("debug", "Sending stream features: %s", tostring(features));
-                       session.sends2s(features);
+                       if ( session.type == "s2sin" or session.type == "s2sout" ) or features.tags[1] then
+                               log("debug", "Sending stream features: %s", tostring(features));
+                               session.sends2s(features);
+                       else
+                               (session.log or log)("warn", "No features to offer, giving up");
+                               session:close({ condition = "undefined-condition", text = "No features to offer" });
+                       end
                end
        elseif session.direction == "outgoing" then
                session.notopen = nil;