Mercurial > prosody-hg
comparison net/server_select.lua @ 2582:d6afb6d919df
net.server_select: Only allow starttls if luasec is available (thanks Nolan)
| author | Matthew Wild <mwild1@gmail.com> |
|---|---|
| date | Wed, 10 Feb 2010 19:17:45 +0000 |
| parents | 1b9f424e695e |
| children | 40a174e8cdf6 |
comparison
equal
deleted
inserted
replaced
| 2581:1b9f424e695e | 2582:d6afb6d919df |
|---|---|
| 530 _ = handler and handler:close( true ) -- forced disconnect | 530 _ = handler and handler:close( true ) -- forced disconnect |
| 531 return false -- handshake failed | 531 return false -- handshake failed |
| 532 end | 532 end |
| 533 ) | 533 ) |
| 534 end | 534 end |
| 535 if sslctx then -- ssl? | 535 if luasec then |
| 536 handler:set_sslctx(sslctx); | 536 if sslctx then -- ssl? |
| 537 out_put("server.lua: ", "starting ssl handshake") | 537 handler:set_sslctx(sslctx); |
| 538 local err | 538 out_put("server.lua: ", "starting ssl handshake") |
| 539 socket, err = ssl_wrap( socket, sslctx ) -- wrap socket | 539 local err |
| 540 if err then | |
| 541 out_put( "server.lua: ssl error: ", tostring(err) ) | |
| 542 --mem_free( ) | |
| 543 return nil, nil, err -- fatal error | |
| 544 end | |
| 545 socket:settimeout( 0 ) | |
| 546 handler.readbuffer = handshake | |
| 547 handler.sendbuffer = handshake | |
| 548 handshake( socket ) -- do handshake | |
| 549 if not socket then | |
| 550 return nil, nil, "ssl handshake failed"; | |
| 551 end | |
| 552 else | |
| 553 local sslctx; | |
| 554 handler.starttls = function( self, _sslctx, now ) | |
| 555 if _sslctx then | |
| 556 sslctx = _sslctx; | |
| 557 handler:set_sslctx(sslctx); | |
| 558 end | |
| 559 if not now then | |
| 560 out_put "server.lua: we need to do tls, but delaying until later" | |
| 561 needtls = true | |
| 562 return | |
| 563 end | |
| 564 out_put( "server.lua: attempting to start tls on " .. tostring( socket ) ) | |
| 565 local oldsocket, err = socket | |
| 566 socket, err = ssl_wrap( socket, sslctx ) -- wrap socket | 540 socket, err = ssl_wrap( socket, sslctx ) -- wrap socket |
| 567 --out_put( "server.lua: sslwrapped socket is " .. tostring( socket ) ) | |
| 568 if err then | 541 if err then |
| 569 out_put( "server.lua: error while starting tls on client: ", tostring(err) ) | 542 out_put( "server.lua: ssl error: ", tostring(err) ) |
| 570 return nil, err -- fatal error | 543 --mem_free( ) |
| 571 end | 544 return nil, nil, err -- fatal error |
| 572 | 545 end |
| 573 socket:settimeout( 0 ) | 546 socket:settimeout( 0 ) |
| 574 | |
| 575 -- add the new socket to our system | |
| 576 | |
| 577 send = socket.send | |
| 578 receive = socket.receive | |
| 579 shutdown = id | |
| 580 | |
| 581 _socketlist[ socket ] = handler | |
| 582 _readlistlen = addsocket(_readlist, socket, _readlistlen) | |
| 583 | |
| 584 -- remove traces of the old socket | |
| 585 | |
| 586 _readlistlen = removesocket( _readlist, oldsocket, _readlistlen ) | |
| 587 _sendlistlen = removesocket( _sendlist, oldsocket, _sendlistlen ) | |
| 588 _socketlist[ oldsocket ] = nil | |
| 589 | |
| 590 handler.starttls = nil | |
| 591 needtls = nil | |
| 592 | |
| 593 -- Secure now | |
| 594 ssl = true | |
| 595 | |
| 596 handler.readbuffer = handshake | 547 handler.readbuffer = handshake |
| 597 handler.sendbuffer = handshake | 548 handler.sendbuffer = handshake |
| 598 handshake( socket ) -- do handshake | 549 handshake( socket ) -- do handshake |
| 599 end | 550 if not socket then |
| 600 handler.readbuffer = _readbuffer | 551 return nil, nil, "ssl handshake failed"; |
| 601 handler.sendbuffer = _sendbuffer | 552 end |
| 553 else | |
| 554 local sslctx; | |
| 555 handler.starttls = function( self, _sslctx, now ) | |
| 556 if _sslctx then | |
| 557 sslctx = _sslctx; | |
| 558 handler:set_sslctx(sslctx); | |
| 559 end | |
| 560 if not now then | |
| 561 out_put "server.lua: we need to do tls, but delaying until later" | |
| 562 needtls = true | |
| 563 return | |
| 564 end | |
| 565 out_put( "server.lua: attempting to start tls on " .. tostring( socket ) ) | |
| 566 local oldsocket, err = socket | |
| 567 socket, err = ssl_wrap( socket, sslctx ) -- wrap socket | |
| 568 --out_put( "server.lua: sslwrapped socket is " .. tostring( socket ) ) | |
| 569 if err then | |
| 570 out_put( "server.lua: error while starting tls on client: ", tostring(err) ) | |
| 571 return nil, err -- fatal error | |
| 572 end | |
| 573 | |
| 574 socket:settimeout( 0 ) | |
| 575 | |
| 576 -- add the new socket to our system | |
| 577 | |
| 578 send = socket.send | |
| 579 receive = socket.receive | |
| 580 shutdown = id | |
| 581 | |
| 582 _socketlist[ socket ] = handler | |
| 583 _readlistlen = addsocket(_readlist, socket, _readlistlen) | |
| 584 | |
| 585 -- remove traces of the old socket | |
| 586 | |
| 587 _readlistlen = removesocket( _readlist, oldsocket, _readlistlen ) | |
| 588 _sendlistlen = removesocket( _sendlist, oldsocket, _sendlistlen ) | |
| 589 _socketlist[ oldsocket ] = nil | |
| 590 | |
| 591 handler.starttls = nil | |
| 592 needtls = nil | |
| 593 | |
| 594 -- Secure now | |
| 595 ssl = true | |
| 596 | |
| 597 handler.readbuffer = handshake | |
| 598 handler.sendbuffer = handshake | |
| 599 handshake( socket ) -- do handshake | |
| 600 end | |
| 601 handler.readbuffer = _readbuffer | |
| 602 handler.sendbuffer = _sendbuffer | |
| 603 end | |
| 602 end | 604 end |
| 603 | 605 |
| 604 send = socket.send | 606 send = socket.send |
| 605 receive = socket.receive | 607 receive = socket.receive |
| 606 shutdown = ( ssl and id ) or socket.shutdown | 608 shutdown = ( ssl and id ) or socket.shutdown |
