3 Commits

Author SHA1 Message Date
29c6bd65d2 LuaSec 0.3.3 2012-09-02 11:31:22 -03:00
d28c5e4f9e LuaSec 0.3.2 2012-09-02 11:30:04 -03:00
affd08cf05 LuaSec 0.3.1 2012-09-02 11:27:04 -03:00
11 changed files with 67 additions and 26 deletions

View File

@ -1,13 +1,32 @@
--------------------------------------------------------------------------------
LuaSec 0.3.3
------------
- BUG: Clear the error queue before call I/O functions (see SSL_get_error
manual).
(thanks Matthew Wild)
--------------------------------------------------------------------------------
LuaSec 0.3.2
------------
- BUG: Windows uses a different way to report socket error.
(thanks Sebastien Perin)
--------------------------------------------------------------------------------
LuaSec 0.3.1
------------
- BUG: receive("a") returns 'closed' error instead of the content when the
SSL/TLS connection is shut down cleanly. (thanks Matthias Diener)
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
LuaSec 0.3 LuaSec 0.3
---------- ----------
- Add functions ssl.rawcontext() and ssl.rawconnection() - Add functions ssl.rawcontext() and ssl.rawconnection()
- Add support to encrypted key password. - Add support to encrypted key password. (thanks Norbert Kiesel)
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
LuaSec 0.2.1 LuaSec 0.2.1
------------ ------------
- 'key' and 'certificate' configurations become optional. - 'key' and 'certificate' configurations become optional. (thanks Ren<65> Rebe)
- Add '_VERSION' variable to module. - Add '_VERSION' variable to module.
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------

View File

@ -1,5 +1,5 @@
LuaSec 0.3 LuaSec 0.3.3
----------- ------------
* On Linux, BSD, and Mac OS X: * On Linux, BSD, and Mac OS X:

View File

@ -1,5 +1,5 @@
LuaSec 0.3 license LuaSec 0.3.3 license
Copyright (C) 2006-2008 Bruno Silvestre Copyright (C) 2006-2009 Bruno Silvestre
Permission is hereby granted, free of charge, to any person obtaining Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the a copy of this software and associated documentation files (the

View File

@ -1,6 +1,6 @@
/*-------------------------------------------------------------------------- /*--------------------------------------------------------------------------
* LuaSec 0.3 * LuaSec 0.3.3
* Copyright (C) 2006-2008 Bruno Silvestre * Copyright (C) 2006-2009 Bruno Silvestre
* *
*--------------------------------------------------------------------------*/ *--------------------------------------------------------------------------*/

View File

@ -2,8 +2,8 @@
#define __CONTEXT_H__ #define __CONTEXT_H__
/*-------------------------------------------------------------------------- /*--------------------------------------------------------------------------
* LuaSec 0.3 * LuaSec 0.3.3
* Copyright (C) 2006-2008 Bruno Silvestre * Copyright (C) 2006-2009 Bruno Silvestre
* *
*--------------------------------------------------------------------------*/ *--------------------------------------------------------------------------*/

View File

@ -43,5 +43,6 @@ void socket_setnonblocking(p_socket ps);
void socket_setblocking(p_socket ps); void socket_setblocking(p_socket ps);
int socket_waitfd(p_socket ps, int sw, p_timeout tm); int socket_waitfd(p_socket ps, int sw, p_timeout tm);
const char *socket_strerror(int err); const char *socket_strerror(int err);
int socket_error();
#endif /* SOCKET_H */ #endif /* SOCKET_H */

View File

@ -1,10 +1,9 @@
/*-------------------------------------------------------------------------- /*--------------------------------------------------------------------------
* LuaSec 0.3 * LuaSec 0.3.3
* Copyright (C) 2006-2008 Bruno Silvestre * Copyright (C) 2006-2009 Bruno Silvestre
* *
*--------------------------------------------------------------------------*/ *--------------------------------------------------------------------------*/
#include <errno.h>
#include <string.h> #include <string.h>
#include <openssl/ssl.h> #include <openssl/ssl.h>
@ -64,11 +63,13 @@ static int meth_destroy(lua_State *L)
*/ */
static int handshake(p_ssl ssl) static int handshake(p_ssl ssl)
{ {
int err;
p_timeout tm = timeout_markstart(&ssl->tm); p_timeout tm = timeout_markstart(&ssl->tm);
if (ssl->state == ST_SSL_CLOSED) if (ssl->state == ST_SSL_CLOSED)
return IO_CLOSED; return IO_CLOSED;
for ( ; ; ) { for ( ; ; ) {
int err = SSL_do_handshake(ssl->ssl); ERR_clear_error();
err = SSL_do_handshake(ssl->ssl);
ssl->error = SSL_get_error(ssl->ssl, err); ssl->error = SSL_get_error(ssl->ssl, err);
switch(ssl->error) { switch(ssl->error) {
case SSL_ERROR_NONE: case SSL_ERROR_NONE:
@ -91,7 +92,7 @@ static int handshake(p_ssl ssl)
} }
if (err == 0) if (err == 0)
return IO_CLOSED; return IO_CLOSED;
return errno; return socket_error();
default: default:
return IO_SSL; return IO_SSL;
} }
@ -105,12 +106,14 @@ static int handshake(p_ssl ssl)
static int ssl_send(void *ctx, const char *data, size_t count, size_t *sent, static int ssl_send(void *ctx, const char *data, size_t count, size_t *sent,
p_timeout tm) p_timeout tm)
{ {
int err;
p_ssl ssl = (p_ssl) ctx; p_ssl ssl = (p_ssl) ctx;
if (ssl->state == ST_SSL_CLOSED) if (ssl->state == ST_SSL_CLOSED)
return IO_CLOSED; return IO_CLOSED;
*sent = 0; *sent = 0;
for ( ; ; ) { for ( ; ; ) {
int err = SSL_write(ssl->ssl, data, (int) count); ERR_clear_error();
err = SSL_write(ssl->ssl, data, (int) count);
ssl->error = SSL_get_error(ssl->ssl, err); ssl->error = SSL_get_error(ssl->ssl, err);
switch(ssl->error) { switch(ssl->error) {
case SSL_ERROR_NONE: case SSL_ERROR_NONE:
@ -133,7 +136,7 @@ static int ssl_send(void *ctx, const char *data, size_t count, size_t *sent,
} }
if (err == 0) if (err == 0)
return IO_CLOSED; return IO_CLOSED;
return errno; return socket_error();
default: default:
return IO_SSL; return IO_SSL;
} }
@ -147,17 +150,22 @@ static int ssl_send(void *ctx, const char *data, size_t count, size_t *sent,
static int ssl_recv(void *ctx, char *data, size_t count, size_t *got, static int ssl_recv(void *ctx, char *data, size_t count, size_t *got,
p_timeout tm) p_timeout tm)
{ {
int err;
p_ssl ssl = (p_ssl) ctx; p_ssl ssl = (p_ssl) ctx;
if (ssl->state == ST_SSL_CLOSED) if (ssl->state == ST_SSL_CLOSED)
return IO_CLOSED; return IO_CLOSED;
*got = 0; *got = 0;
for ( ; ; ) { for ( ; ; ) {
int err = SSL_read(ssl->ssl, data, (int) count); ERR_clear_error();
err = SSL_read(ssl->ssl, data, (int) count);
ssl->error = SSL_get_error(ssl->ssl, err); ssl->error = SSL_get_error(ssl->ssl, err);
switch(ssl->error) { switch(ssl->error) {
case SSL_ERROR_NONE: case SSL_ERROR_NONE:
*got = err; *got = err;
return IO_DONE; return IO_DONE;
case SSL_ERROR_ZERO_RETURN:
*got = err;
return IO_CLOSED;
case SSL_ERROR_WANT_READ: case SSL_ERROR_WANT_READ:
err = socket_waitfd(&ssl->sock, WAITFD_R, tm); err = socket_waitfd(&ssl->sock, WAITFD_R, tm);
if (err == IO_TIMEOUT) return IO_SSL; if (err == IO_TIMEOUT) return IO_SSL;
@ -175,7 +183,7 @@ static int ssl_recv(void *ctx, char *data, size_t count, size_t *got,
} }
if (err == 0) if (err == 0)
return IO_CLOSED; return IO_CLOSED;
return errno; return socket_error();
default: default:
return IO_SSL; return IO_SSL;
} }

View File

@ -2,8 +2,8 @@
#define __SSL_H__ #define __SSL_H__
/*-------------------------------------------------------------------------- /*--------------------------------------------------------------------------
* LuaSec 0.3 * LuaSec 0.3.3
* Copyright (C) 2006-2008 Bruno Silvestre * Copyright (C) 2006-2009 Bruno Silvestre
* *
*--------------------------------------------------------------------------*/ *--------------------------------------------------------------------------*/

View File

@ -1,6 +1,6 @@
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
-- LuaSec 0.3 -- LuaSec 0.3.3
-- Copyright (C) 2006-2008 Bruno Silvestre -- Copyright (C) 2006-2009 Bruno Silvestre
-- --
------------------------------------------------------------------------------ ------------------------------------------------------------------------------
@ -10,8 +10,8 @@ require("ssl.core")
require("ssl.context") require("ssl.context")
_VERSION = "0.3" _VERSION = "0.3.3"
_COPYRIGHT = "LuaSec 0.3 - Copyright (C) 2006-2008 Bruno Silvestre\n" .. _COPYRIGHT = "LuaSec 0.3.3 - Copyright (C) 2006-2009 Bruno Silvestre\n" ..
"LuaSocket 2.0.2 - Copyright (C) 2004-2007 Diego Nehab" "LuaSocket 2.0.2 - Copyright (C) 2004-2007 Diego Nehab"
-- Export functions -- Export functions

View File

@ -135,3 +135,11 @@ const char *socket_strerror(int err) {
} }
} }
/*-------------------------------------------------------------------------*\
* Underline error code.
\*-------------------------------------------------------------------------*/
int socket_error()
{
return errno;
}

View File

@ -150,7 +150,6 @@ static const char *wstrerror(int err) {
const char *socket_strerror(int err) { const char *socket_strerror(int err) {
if (err <= 0) return io_strerror(err); if (err <= 0) return io_strerror(err);
switch (err) { switch (err) {
case ERROR_FILE_NOT_FOUND: return "closed";
case WSAEADDRINUSE: return "address already in use"; case WSAEADDRINUSE: return "address already in use";
case WSAECONNREFUSED: return "connection refused"; case WSAECONNREFUSED: return "connection refused";
case WSAEISCONN: return "already connected"; case WSAEISCONN: return "already connected";
@ -162,3 +161,9 @@ const char *socket_strerror(int err) {
} }
} }
/* Socket error code */
int socket_error()
{
return WSAGetLastError();
}