# HG changeset patch # User Matthew Wild # Date 1254050811 -3600 # Node ID f4c88dd32724a7c9ff9d197bc0099d57817fe8b3 # Parent 7c3ec7ac6316b782a4c19ae38f3bb4b95f971e8a# Parent 5ae3209fefa2c8dc1c53d08c2c1caa340b8ec542 Merge with 0.5 diff -r 7c3ec7ac6316 -r f4c88dd32724 core/s2smanager.lua --- a/core/s2smanager.lua Thu Sep 24 23:47:16 2009 +0100 +++ b/core/s2smanager.lua Sun Sep 27 12:26:51 2009 +0100 @@ -255,20 +255,20 @@ host_session.connecting = nil; -- COMPAT: This is a compromise for all you CNAME-(ab)users :) - if not (reply and reply[1] and reply[1].a) then + if not (reply and reply[#reply] and reply[#reply].a) then local count = max_dns_depth; reply = dns.peek(connect_host, "CNAME", "IN"); - while count > 0 and reply and reply[1] and not reply[1].a and reply[1].cname do - log("debug", "Looking up %s (DNS depth is %d)", tostring(reply[1].cname), count); - reply = dns.peek(reply[1].cname, "A", "IN") or dns.peek(reply[1].cname, "CNAME", "IN"); + while count > 0 and reply and reply[#reply] and not reply[#reply].a and reply[#reply].cname do + log("debug", "Looking up %s (DNS depth is %d)", tostring(reply[#reply].cname), count); + reply = dns.peek(reply[#reply].cname, "A", "IN") or dns.peek(reply[#reply].cname, "CNAME", "IN"); count = count - 1; end end -- end of CNAME resolving - if reply and reply[1] and reply[1].a then - log("debug", "DNS reply for %s gives us %s", connect_host, reply[1].a); - return make_connect(host_session, reply[1].a, connect_port); + if reply and reply[#reply] and reply[#reply].a then + log("debug", "DNS reply for %s gives us %s", connect_host, reply[#reply].a); + return make_connect(host_session, reply[#reply].a, connect_port); else log("debug", "DNS lookup failed to get a response for %s", connect_host); if not attempt_connection(host_session, "name resolution failed") then -- Retry if we can diff -r 7c3ec7ac6316 -r f4c88dd32724 net/dns.lua --- a/net/dns.lua Thu Sep 24 23:47:16 2009 +0100 +++ b/net/dns.lua Sun Sep 27 12:26:51 2009 +0100 @@ -510,7 +510,7 @@ local resolv_conf = io.open("/etc/resolv.conf"); if resolv_conf then for line in resolv_conf:lines() do - local address = string.match (line, '^%s*nameserver%s+(%d+%.%d+%.%d+%.%d+)%s*$') + local address = line:gsub("#.*$", ""):match('^%s*nameserver%s+(%d+%.%d+%.%d+%.%d+)%s*$') if address then self:addnameserver (address) end end elseif os.getenv("WINDIR") then diff -r 7c3ec7ac6316 -r f4c88dd32724 plugins/mod_legacyauth.lua --- a/plugins/mod_legacyauth.lua Thu Sep 24 23:47:16 2009 +0100 +++ b/plugins/mod_legacyauth.lua Sun Sep 27 12:26:51 2009 +0100 @@ -15,6 +15,8 @@ local sessionmanager = require "core.sessionmanager"; local usermanager = require "core.usermanager"; +local nodeprep = require "util.encodings".stringprep.nodeprep; +local resourceprep = require "util.encodings".stringprep.resourceprep; module:add_feature("jabber:iq:auth"); module:add_event_hook("stream-features", function (session, features) @@ -44,6 +46,8 @@ :tag("resource"):up()); else username, password, resource = t_concat(username), t_concat(password), t_concat(resource); + username = nodeprep(username); + resource = resourceprep(resource) local reply = st.reply(stanza); if usermanager.validate_credentials(session.host, username, password) then -- Authentication successful! @@ -53,7 +57,12 @@ success, err_type, err, err_msg = sessionmanager.bind_resource(session, resource); if not success then session.send(st.error_reply(stanza, err_type, err, err_msg)); - return true; -- FIXME need to unauthenticate here + session.username, session.type = nil, "c2s_unauthed"; -- FIXME should this be placed in sessionmanager? + return true; + elseif resource ~= session.resource then -- server changed resource, not supported by legacy auth + session.send(st.error_reply(stanza, "cancel", "conflict", "The requested resource could not be assigned to this session.")); + session:close(); -- FIXME undo resource bind and auth instead of closing the session? + return true; end end session.send(st.reply(stanza)); diff -r 7c3ec7ac6316 -r f4c88dd32724 util-src/Makefile.win --- a/util-src/Makefile.win Thu Sep 24 23:47:16 2009 +0100 +++ b/util-src/Makefile.win Sun Sep 27 12:26:51 2009 +0100 @@ -1,7 +1,7 @@ LUA_PATH=$(LUA_DEV) -IDN_PATH=.\libidn-1.9 -OPENSSL_PATH=.\openssl-0.9.8i +IDN_PATH=..\..\libidn-1.15 +OPENSSL_PATH=..\..\openssl-0.9.8k LUA_INCLUDE=$(LUA_PATH)\include LUA_LIB=$(LUA_PATH)\lib\lua5.1.lib diff -r 7c3ec7ac6316 -r f4c88dd32724 util-src/encodings.c --- a/util-src/encodings.c Thu Sep 24 23:47:16 2009 +0100 +++ b/util-src/encodings.c Sun Sep 27 12:26:51 2009 +0100 @@ -172,11 +172,11 @@ int ret = idna_to_ascii_8z(s, &output, 0); if (ret == IDNA_SUCCESS) { lua_pushstring(L, output); - if (output) free(output); + idn_free(output); return 1; } else { lua_pushnil(L); - if (output) free(output); + idn_free(output); return 1; // TODO return error message } } @@ -189,11 +189,11 @@ int ret = idna_to_unicode_8z8z(s, &output, 0); if (ret == IDNA_SUCCESS) { lua_pushstring(L, output); - if (output) free(output); + idn_free(output); return 1; } else { lua_pushnil(L); - if (output) free(output); + idn_free(output); return 1; // TODO return error message } }