X-Git-Url: https://git.enpas.org/?a=blobdiff_plain;f=net%2Fserver.lua;h=6fe72712ae26e5f7700ff1275ade476132886f4d;hb=4e16323f2a78a2f20bcd75957f2ada27a5d8b90f;hp=9e42b8ff8006fe2d9b5d7c991b71dae905a4c20e;hpb=c0c83da1a045258025a2825f437af7a5e602c9c9;p=prosody.git diff --git a/net/server.lua b/net/server.lua index 9e42b8ff..6fe72712 100644 --- a/net/server.lua +++ b/net/server.lua @@ -1,11 +1,9 @@ ---[[ - - server.lua by blastbeat - - - this script contains the server loop of the program - - other scripts can reg a server here - -]]-- +-- +-- server.lua by blastbeat of the luadch project +-- Re-used here under the MIT/X Consortium License +-- +-- Modifications (C) 2008-2009 Matthew Wild, Waqas Hussain +-- -- // wrapping luadch stuff // -- @@ -174,22 +172,30 @@ wrapserver = function( listeners, socket, ip, serverport, pattern, sslctx, maxco local ssl = false if sslctx then + ssl = true if not ssl_newcontext then - return nil, "luasec not found" + out_error "luasec not found" + ssl = false end if type( sslctx ) ~= "table" then out_error "server.lua: wrong server sslctx" - return nil, "wrong server sslctx" + ssl = false end sslctx, err = ssl_newcontext( sslctx ) if not sslctx then err = err or "wrong sslctx parameters" out_error( "server.lua: ", err ) - return nil, err + ssl = false end - ssl = true - else - out_put("server.lua: ", "ssl not enabled on ", serverport); + end + if not ssl then + sslctx = false; + if startssl then + out_error( "server.lua: Cannot start ssl on port: ", serverport ) + return nil, "Cannot start ssl, see log for details" + else + out_put("server.lua: ", "ssl not enabled on ", serverport); + end end local accept = socket.accept @@ -522,7 +528,7 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport end end disconnect( handler, "ssl handshake failed" ) - handler.close( true ) -- forced disconnect + _ = handler and handler.close( true ) -- forced disconnect return false -- handshake failed end ) @@ -538,8 +544,13 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport socket:settimeout( 0 ) handler.readbuffer = handshake handler.sendbuffer = handshake - handshake( socket ) -- do handshake + handshake( socket ) -- do handshake + if not socket then + return nil, nil, "ssl handshake failed"; + end else + -- We're not automatically doing SSL, so we're not secure (yet) + ssl = false handler.starttls = function( now ) if not now then --out_put "server.lua: we need to do tls, but delaying until later" @@ -576,6 +587,9 @@ wrapconnection = function( server, listeners, socket, ip, serverport, clientport handler.starttls = nil needtls = nil + + -- Secure now + ssl = true handler.readbuffer = handshake handler.sendbuffer = handshake @@ -648,13 +662,13 @@ addserver = function( listeners, port, addr, pattern, sslctx, maxconnections, st err = "luasec not found" end if err then - out_error( "server.lua: ", err ) + out_error( "server.lua, port ", port, ": ", err ) return nil, err end addr = addr or "*" local server, err = socket_bind( addr, port ) if err then - out_error( "server.lua: ", err ) + out_error( "server.lua, port ", port, ": ", err ) return nil, err end local handler, err = wrapserver( listeners, server, addr, port, pattern, sslctx, maxconnections, startssl ) -- wrap new server socket @@ -681,6 +695,7 @@ removeserver = function( port ) return nil, "no server found on port '" .. tostring( port ) "'" end handler.close( ) + _server[ port ] = nil return true end