servers/ejabberd.lua

1
function testers.ejabberd()
2
	if (test(q_invalid_xml, [=[ id=["']none['"]]=]) or test(q_invalid_xml, " id='%d+'"))
3
		and (not test(q_invalid_xml, literal " xml:lang="))
4
		and not test(q_invalid_xml, " id=(.)") == '"' then
5
		
6
		server_name = "ejabberd";
7
		
8
		local hostname = test(q_invalid_xml, [=[from=["']([^"']+)]=]);
9
		if not hostname then
10
			server_comment "The server did not return a hostname, odd.";
11
		else
12
			local stream_open = [[<stream:stream xmlns=']]..default_namespace..[[' 
13
				xmlns:stream='http://etherx.jabber.org/streams' version='1.0' id='abc' to=']]..hostname..[['>]];
14
			
15
			if not test(stream_open.."<message/>", ":features>$")
16
			-- Below for ejabberd requiring STARTTLS
17
			and not test(stream_open.."<message/>", literal ":features><stream:error><policy-violation ") then
18
				if test(stream_open, literal " from='dummyhost'") then
19
					server_min_version = "1.x.x";
20
				else
21
					debug("Oops, not ejabberd (please report):", test(stream_open.."<message/>", ".*"));
22
					server_name = nil;
23
				end
24
				return;
25
			end
26
			
27
			if test(q_invalid_xml, " id='%d+'") then
28
				server_min_version = "2.1.x";
29
			elseif test(stream_open, literal "<compression ") then -- Only in 2.x
30
				server_min_version = "2.0.x";
31
			elseif test(stream_open, "") then
32
				server_min_version = "1.1.4";
33
			else
34
				server_comment "The server did not reply when we tried to open a stream";
35
			end
36
			
37
		end
38
	end
39
end