servers/ejabberd.lua

Fri, 10 Aug 2012 13:03:06 +0100

author
Matthew Wild <mwild1@gmail.com>
date
Fri, 10 Aug 2012 13:03:06 +0100
changeset 16
872dc69f6039
parent 14
a8f632e88555
permissions
-rw-r--r--

Add Facebook fingerprints (and move test for FBv1 from the ejabberd fingerprint)

function testers.ejabberd()
	if (test(q_invalid_xml, [=[ id=["']none['"]]=]) or test(q_invalid_xml, " id='%d+'"))
		and (not test(q_invalid_xml, literal " xml:lang="))
		and not test(q_invalid_xml, " id=(.)") == '"' then
		
		server_name = "ejabberd";
		
		local hostname = test(q_invalid_xml, [=[from=["']([^"']+)]=]);
		if not hostname then
			server_comment "The server did not return a hostname, odd.";
		else
			local stream_open = [[<stream:stream xmlns=']]..default_namespace..[[' 
				xmlns:stream='http://etherx.jabber.org/streams' version='1.0' id='abc' to=']]..hostname..[['>]];
			
			if not test(stream_open.."<message/>", ":features>$")
			-- Below for ejabberd requiring STARTTLS
			and not test(stream_open.."<message/>", literal ":features><stream:error><policy-violation ") then
				if test(stream_open, literal " from='dummyhost'") then
					server_min_version = "1.x.x";
				else
					debug("Oops, not ejabberd (please report):", test(stream_open.."<message/>", ".*"));
					server_name = nil;
				end
				return;
			end
			
			if test(q_invalid_xml, " id='%d+'") then
				server_min_version = "2.1.x";
			elseif test(stream_open, literal "<compression ") then -- Only in 2.x
				server_min_version = "2.0.x";
			elseif test(stream_open, "") then
				server_min_version = "1.1.4";
			else
				server_comment "The server did not reply when we tried to open a stream";
			end
			
		end
	end
end

mercurial