mirror of
https://github.com/brunoos/luasec.git
synced 2025-07-17 22:39:49 +02:00
Compare commits
3 Commits
luasec-0.3
...
luasec-0.3
Author | SHA1 | Date | |
---|---|---|---|
29c6bd65d2 | |||
d28c5e4f9e | |||
affd08cf05 |
23
CHANGELOG
23
CHANGELOG
@ -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.
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
4
INSTALL
4
INSTALL
@ -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:
|
||||||
|
|
||||||
|
4
LICENSE
4
LICENSE
@ -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
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*--------------------------------------------------------------------------
|
/*--------------------------------------------------------------------------
|
||||||
* LuaSec 0.3
|
* LuaSec 0.3.3
|
||||||
* Copyright (C) 2006-2008 Bruno Silvestre
|
* Copyright (C) 2006-2009 Bruno Silvestre
|
||||||
*
|
*
|
||||||
*--------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -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
|
||||||
*
|
*
|
||||||
*--------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -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 */
|
||||||
|
26
src/ssl.c
26
src/ssl.c
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
*
|
*
|
||||||
*--------------------------------------------------------------------------*/
|
*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
@ -135,3 +135,11 @@ const char *socket_strerror(int err) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------------------*\
|
||||||
|
* Underline error code.
|
||||||
|
\*-------------------------------------------------------------------------*/
|
||||||
|
int socket_error()
|
||||||
|
{
|
||||||
|
return errno;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -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();
|
||||||
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user