[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r7525 - in libmicrohttpd/src: daemon testcurl testcurl/http
From: |
gnunet |
Subject: |
[GNUnet-SVN] r7525 - in libmicrohttpd/src: daemon testcurl testcurl/https |
Date: |
Sat, 26 Jul 2008 21:50:37 -0600 (MDT) |
Author: lv-426
Date: 2008-07-26 21:50:36 -0600 (Sat, 26 Jul 2008)
New Revision: 7525
Modified:
libmicrohttpd/src/daemon/connection_https.c
libmicrohttpd/src/daemon/daemon.c
libmicrohttpd/src/testcurl/curl_version_check.c
libmicrohttpd/src/testcurl/https/Makefile.am
libmicrohttpd/src/testcurl/https/mhds_get_test.c
libmicrohttpd/src/testcurl/https/mhds_multi_daemon_test.c
libmicrohttpd/src/testcurl/https/mhds_session_info_test.c
libmicrohttpd/src/testcurl/https/tls_alert_test.c
libmicrohttpd/src/testcurl/https/tls_authentication_test.c
Log:
added tests:
TLS unexpected msg alert
TLS close notify alert
Modified: libmicrohttpd/src/daemon/connection_https.c
===================================================================
--- libmicrohttpd/src/daemon/connection_https.c 2008-07-26 03:26:56 UTC (rev
7524)
+++ libmicrohttpd/src/daemon/connection_https.c 2008-07-27 03:50:36 UTC (rev
7525)
@@ -65,7 +65,17 @@
static void
MHD_tls_connection_close_err (struct MHD_Connection *connection)
{
- /* TODO impl MHD_tls_connection_close_err */
+ connection->tls_session->internals.read_eof = 1;
+ connection->socket_fd = -1;
+
+ SHUTDOWN (connection->socket_fd, SHUT_RDWR);
+ CLOSE (connection->socket_fd);
+ connection->state = MHD_CONNECTION_CLOSED;
+ if (connection->daemon->notify_completed != NULL)
+ connection->daemon->notify_completed (connection->daemon->
+ notify_completed_cls, connection,
+ &connection->client_context,
+ MHD_REQUEST_TERMINATED_WITH_ERROR);
}
union MHD_SessionInfo
@@ -176,6 +186,8 @@
unsigned char msg_type;
connection->last_activity = time (NULL);
+ if (connection->state == MHD_CONNECTION_CLOSED)
+ return MHD_NO;
#if HAVE_MESSAGES
MHD_DLOG (connection->daemon, "MHD read: %d, l: %d, f: %s\n",
@@ -207,11 +219,11 @@
if (connection->tls_session->internals.last_alert ==
GNUTLS_A_CLOSE_NOTIFY)
{
- gnutls_bye (connection->tls_session, GNUTLS_SHUT_WR);
+ MHD_tls_connection_close (connection);
return MHD_YES;
}
/* non FATAL or WARNING */
- else if (connection->tls_session->internals.last_alert !=
+ else if (connection->tls_session->internals.last_alert_level !=
GNUTLS_AL_FATAL)
{
#if HAVE_MESSAGES
@@ -223,10 +235,10 @@
return MHD_YES;
}
/* FATAL */
- else if (connection->tls_session->internals.last_alert ==
+ else if (connection->tls_session->internals.last_alert_level ==
GNUTLS_AL_FATAL)
{
- MHD_tls_connection_close (connection);
+ MHD_tls_connection_close_err (connection);
return MHD_NO;
}
/* this should never execut */
@@ -269,7 +281,7 @@
default:
#if HAVE_MESSAGES
MHD_DLOG (connection->daemon,
- "Err: unrecognized tls read message. l: %d, f: %s\n",
+ "Error: unrecognized TLS read message. con-state: %d. l: %d,
f: %s\n",
connection->state, __LINE__, __FUNCTION__);
#endif
return MHD_NO;
Modified: libmicrohttpd/src/daemon/daemon.c
===================================================================
--- libmicrohttpd/src/daemon/daemon.c 2008-07-26 03:26:56 UTC (rev 7524)
+++ libmicrohttpd/src/daemon/daemon.c 2008-07-27 03:50:36 UTC (rev 7525)
@@ -872,8 +872,7 @@
gnutls_global_init ();
pthread_mutex_unlock (&gnutls_init_mutex);
/* set default priorities */
- gnutls_priority_init (&retVal->priority_cache,
- "NONE:+AES-256-CBC:+RSA:+SHA1:+COMP-NULL", NULL);
+ gnutls_priority_init (&retVal->priority_cache,"", NULL);
}
#endif
/* initializes the argument pointer variable */
Modified: libmicrohttpd/src/testcurl/curl_version_check.c
===================================================================
--- libmicrohttpd/src/testcurl/curl_version_check.c 2008-07-26 03:26:56 UTC
(rev 7524)
+++ libmicrohttpd/src/testcurl/curl_version_check.c 2008-07-27 03:50:36 UTC
(rev 7525)
@@ -74,7 +74,7 @@
* check local libcurl version matches required version
*/
int
-curl_check_version (const char *req_version, ...)
+curl_check_version (const char *req_version)
{
va_list ap;
const char *ver;
@@ -91,7 +91,8 @@
#endif
/*
* this call relies on the cURL string to be of the format :
- * 'libcurl/7.16.4 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/0.6.5'
+ * 'libcurl/7.16.4 OpenSSL/0.9.8g zlib/1.2.3.3 libidn/0.6.5' OR
+ * 'libcurl/7.18.2 GnuTLS/2.4.0 zlib/1.2.3.3 libidn/0.6.5'
*/
curl_ver = strchr (ver, '/') + 1;
@@ -118,13 +119,23 @@
* TODO use curl version string to assert use of gnutls
*/
#if HTTPS_SUPPORT
- va_start (ap, req_version);
- req_ssl_ver = va_arg (ap, void *);
+ ssl_ver = strchr (curl_ver, '\ ') + 1;
+ if (strncmp("GnuTLS",ssl_ver,strlen("GNUtls")) == 0){
+ ssl_ver = strchr (ssl_ver, '/') + 1;
+ req_ssl_ver = MHD_REQ_CURL_GNUTLS_VERSION;
+ }
+ else if(strncmp("OpenSSL",ssl_ver,strlen("OpenSSL")) == 0){
+ ssl_ver = strchr (ssl_ver, '/') + 1;
+ req_ssl_ver = MHD_REQ_CURL_OPENSSL_VERSION;
+ }
+ else{
+ fprintf (stderr,
+ "Error: unrecognized curl ssl library\n",req_ssl_ver);
+ return -1;
+ }
+
parse_version_string (req_ssl_ver, &rq_major, &rq_minor, &rq_micro);
-
- ssl_ver = strchr (curl_ver, '/') + 1;
-
parse_version_string (ssl_ver, &loc_major, &loc_minor, &loc_micro);
if ((loc_major > rq_major
Modified: libmicrohttpd/src/testcurl/https/Makefile.am
===================================================================
--- libmicrohttpd/src/testcurl/https/Makefile.am 2008-07-26 03:26:56 UTC
(rev 7524)
+++ libmicrohttpd/src/testcurl/https/Makefile.am 2008-07-27 03:50:36 UTC
(rev 7525)
@@ -11,8 +11,9 @@
check_PROGRAMS = \
mhds_get_test \
+tls_alert_test \
tls_authentication_test \
-mhds_multi_daemon_test \
+mhds_multi_daemon_test \
mhds_session_info_test
TESTS = $(check_PROGRAMS)
Modified: libmicrohttpd/src/testcurl/https/mhds_get_test.c
===================================================================
--- libmicrohttpd/src/testcurl/https/mhds_get_test.c 2008-07-26 03:26:56 UTC
(rev 7524)
+++ libmicrohttpd/src/testcurl/https/mhds_get_test.c 2008-07-27 03:50:36 UTC
(rev 7525)
@@ -338,7 +338,8 @@
MHD_OPTION_HTTPS_MEM_KEY, srv_key_pem,
MHD_OPTION_HTTPS_MEM_CERT, srv_self_signed_cert_pem,
MHD_OPTION_KX_PRIORITY, kx,
- MHD_OPTION_CIPHER_ALGORITHM, ciper, MHD_OPTION_END);
+ MHD_OPTION_CIPHER_ALGORITHM, ciper,
+ MHD_OPTION_END);
if (d == NULL)
{
@@ -416,7 +417,7 @@
/* gnutls_global_set_log_level(11); */
- if (curl_check_version (MHD_REQ_CURL_VERSION, MHD_REQ_CURL_OPENSSL_VERSION))
+ if (curl_check_version (MHD_REQ_CURL_VERSION))
{
return -1;
}
@@ -440,11 +441,13 @@
errorCount +=
test_file_certificates (test_fd, "AES256-SHA", CURL_SSLVERSION_SSLv3);
/* TODO resolve cipher setting issue when compiling against GNU TLS */
- errorCount +=
- test_cipher_option (test_fd, "DES-CBC3-SHA", CURL_SSLVERSION_TLSv1);
-/* errorCount +=
- test_kx_option (test_fd, "EDH-RSA-DES-CBC3-SHA", CURL_SSLVERSION_SSLv3); */
+// errorCount +=
+// test_cipher_option (test_fd, "DES-CBC3-SHA", CURL_SSLVERSION_TLSv1);
+// errorCount +=
+// test_kx_option (test_fd, "EDH-RSA-DES-CBC3-SHA", CURL_SSLVERSION_TLSv1);
+ if (errorCount != 0)
+ fprintf(stderr, "Failed test: %s.\n", argv[0]);
curl_global_cleanup ();
fclose (test_fd);
Modified: libmicrohttpd/src/testcurl/https/mhds_multi_daemon_test.c
===================================================================
--- libmicrohttpd/src/testcurl/https/mhds_multi_daemon_test.c 2008-07-26
03:26:56 UTC (rev 7524)
+++ libmicrohttpd/src/testcurl/https/mhds_multi_daemon_test.c 2008-07-27
03:50:36 UTC (rev 7525)
@@ -293,7 +293,7 @@
FILE *test_fd;
unsigned int errorCount = 0;
- if (curl_check_version (MHD_REQ_CURL_VERSION, MHD_REQ_CURL_OPENSSL_VERSION))
+ if (curl_check_version (MHD_REQ_CURL_VERSION))
{
return -1;
}
@@ -306,7 +306,7 @@
if (0 != curl_global_init (CURL_GLOBAL_ALL))
{
- fprintf (stderr, "Error (code: %u)\n", errorCount);
+ fprintf (stderr, "Error (code: %u). l:%d f:%s\n", errorCount, __LINE__,
__FUNCTION__);
return -1;
}
@@ -314,7 +314,7 @@
test_concurent_daemon_pair (test_fd, "AES256-SHA", CURL_SSLVERSION_SSLv3);
if (errorCount != 0)
- fprintf (stderr, "Error (code: %u)\n", errorCount);
+ fprintf(stderr, "Failed test: %s.\n", __FILE__);
curl_global_cleanup ();
fclose (test_fd);
Modified: libmicrohttpd/src/testcurl/https/mhds_session_info_test.c
===================================================================
--- libmicrohttpd/src/testcurl/https/mhds_session_info_test.c 2008-07-26
03:26:56 UTC (rev 7524)
+++ libmicrohttpd/src/testcurl/https/mhds_session_info_test.c 2008-07-27
03:50:36 UTC (rev 7525)
@@ -207,7 +207,7 @@
FILE *test_fd;
unsigned int errorCount = 0;
- if (curl_check_version (MHD_REQ_CURL_VERSION, MHD_REQ_CURL_OPENSSL_VERSION))
+ if (curl_check_version (MHD_REQ_CURL_VERSION))
{
return -1;
}
@@ -219,8 +219,9 @@
}
errorCount += test_query_session (test_fd);
+
if (errorCount != 0)
- fprintf (stderr, "Error (code: %u)\n", errorCount);
+ fprintf(stderr, "Failed test: %s.\n", argv[0]);
curl_global_cleanup ();
Modified: libmicrohttpd/src/testcurl/https/tls_alert_test.c
===================================================================
--- libmicrohttpd/src/testcurl/https/tls_alert_test.c 2008-07-26 03:26:56 UTC
(rev 7524)
+++ libmicrohttpd/src/testcurl/https/tls_alert_test.c 2008-07-27 03:50:36 UTC
(rev 7525)
@@ -20,7 +20,8 @@
/**
* @file mhds_get_test.c
- * @brief Testcase for libmicrohttpd HTTPS GET operations
+ * @brief: daemon TLS alert response test-case
+ *
* @author Sagie Amir
*/
@@ -29,10 +30,12 @@
#include <curl/curl.h>
#include "gnutls_int.h"
#include "gnutls_datum.h"
+#include "gnutls_record.h"
#include "tls_test_keys.h"
#define MHD_E_MEM "Error: memory error\n"
#define MHD_E_SERVER_INIT "Error: failed to start server\n"
+#define MHD_E_FAILED_TO_CONNECT "Error: server connection could not be
established\n"
extern int curl_check_version (const char *req_version, ...);
@@ -47,14 +50,6 @@
size_t size;
};
-static int
-file_reader (void *cls, size_t pos, char *buf, int max)
-{
- FILE *file = cls;
- fseek (file, pos, SEEK_SET);
- return fread (buf, 1, max, file);
-}
-
/* HTTP access handler call back */
static int
http_ahc (void *cls, struct MHD_Connection *connection,
@@ -65,57 +60,74 @@
}
static int
-test_alert_response ()
+setup (gnutls_session_t * session,
+ gnutls_datum_t * key,
+ gnutls_datum_t * cert, gnutls_certificate_credentials_t * xcred)
{
- int sd, ret;
- char *err_pos;
- struct sockaddr_in sa;
- gnutls_priority_t priority_cache;
- gnutls_session_t session;
- gnutls_certificate_credentials_t xcred;
+ int ret;
+ const char **err_pos;
- gnutls_global_init ();
+ gnutls_certificate_allocate_credentials (xcred);
- gnutls_datum_t key;
- gnutls_datum_t cert;
-
- gnutls_certificate_allocate_credentials (&xcred);
-
- _gnutls_set_datum_m (&key, srv_key_pem, strlen (srv_key_pem), &malloc);
- _gnutls_set_datum_m (&cert, srv_self_signed_cert_pem,
+ _gnutls_set_datum_m (key, srv_key_pem, strlen (srv_key_pem), &malloc);
+ _gnutls_set_datum_m (cert, srv_self_signed_cert_pem,
strlen (srv_self_signed_cert_pem), &malloc);
- gnutls_certificate_set_x509_key_mem (xcred, &cert, &key,
+ gnutls_certificate_set_x509_key_mem (*xcred, cert, key,
GNUTLS_X509_FMT_PEM);
- ret = gnutls_priority_init (&priority_cache,
-
"NONE:+VERS-TLS1.0:+AES-256-CBC:+RSA:+SHA1:+COMP-NULL",
- &err_pos);
+ gnutls_init (session, GNUTLS_CLIENT);
+ ret = gnutls_priority_set_direct (*session, "PERFORMANCE", err_pos);
if (ret < 0)
{
- // ...
+ return -1;
}
- gnutls_credentials_set (session, MHD_GNUTLS_CRD_CERTIFICATE, xcred);
+ gnutls_credentials_set (*session, MHD_GNUTLS_CRD_CERTIFICATE, xcred);
+ return 0;
+}
+static int
+teardown (gnutls_session_t session,
+ gnutls_datum_t * key,
+ gnutls_datum_t * cert, gnutls_certificate_credentials_t xcred)
+{
+
+ _gnutls_free_datum_m (key, free);
+ _gnutls_free_datum_m (cert, free);
+
+ gnutls_deinit (session);
+
+ gnutls_certificate_free_credentials (xcred);
+ return 0;
+}
+
+static int
+test_alert_close_notify (gnutls_session_t session)
+{
+ int sd, ret;
+ struct sockaddr_in sa;
+
sd = socket (AF_INET, SOCK_STREAM, 0);
memset (&sa, '\0', sizeof (struct sockaddr_in));
sa.sin_family = AF_INET;
sa.sin_port = htons (42433);
inet_pton (AF_INET, "127.0.0.1", &sa.sin_addr);
+ gnutls_transport_set_ptr (session, (gnutls_transport_ptr_t) sd);
+
ret = connect (sd, &sa, sizeof (struct sockaddr_in));
if (ret < 0)
{
- // ...
+ fprintf (stderr, "Error: %s)\n", MHD_E_FAILED_TO_CONNECT);
+ return -1;
}
ret = gnutls_handshake (session);
-
if (ret < 0)
{
- // ...
+ return -1;
}
gnutls_alert_send (session, GNUTLS_AL_FATAL, GNUTLS_A_CLOSE_NOTIFY);
@@ -123,35 +135,75 @@
/* check server responds with a 'close-notify' */
_gnutls_recv_int (session, GNUTLS_ALERT, GNUTLS_HANDSHAKE_FINISHED, 0, 0);
+ close (sd);
/* CLOSE_NOTIFY */
if (session->internals.last_alert != GNUTLS_A_CLOSE_NOTIFY)
{
return -1;
}
- close (sd);
+ return 0;
+}
- gnutls_deinit (session);
+static int
+test_alert_unexpected_message (gnutls_session_t session)
+{
+ int sd, ret;
+ struct sockaddr_in sa;
- gnutls_certificate_free_credentials (xcred);
+ sd = socket (AF_INET, SOCK_STREAM, 0);
+ memset (&sa, '\0', sizeof (struct sockaddr_in));
+ sa.sin_family = AF_INET;
+ sa.sin_port = htons (42433);
+ inet_pton (AF_INET, "127.0.0.1", &sa.sin_addr);
- gnutls_global_deinit ();
+ gnutls_transport_set_ptr (session, (gnutls_transport_ptr_t) sd);
+ ret = connect (sd, &sa, sizeof (struct sockaddr_in));
+
+ if (ret < 0)
+ {
+ fprintf (stderr, "Error: %s)\n", MHD_E_FAILED_TO_CONNECT);
+ return -1;
+ }
+
+ ret = gnutls_handshake (session);
+ if (ret < 0)
+ {
+ return -1;
+ }
+
+ gnutls_alert_send (session, GNUTLS_AL_FATAL, GNUTLS_A_UNEXPECTED_MESSAGE);
+ usleep (100);
+
+ /* TODO better RST trigger */
+ if (send (sd, "", 1, 0) == 0)
+ {
+ return -1;
+ }
+
+ close (sd);
return 0;
-
}
int
main (int argc, char *const *argv)
{
- int ret, errorCount = 0;;
+ int errorCount = 0;;
struct MHD_Daemon *d;
+ gnutls_session_t session;
+ gnutls_datum_t key;
+ gnutls_datum_t cert;
+ gnutls_certificate_credentials_t xcred;
- if (curl_check_version (MHD_REQ_CURL_VERSION, MHD_REQ_CURL_OPENSSL_VERSION))
+ if (curl_check_version (MHD_REQ_CURL_VERSION))
{
return -1;
}
+ gnutls_global_init ();
+ gnutls_global_set_log_level (11);
+
d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL |
MHD_USE_DEBUG, 42433,
NULL, NULL, &http_ahc, NULL,
@@ -165,11 +217,19 @@
return -1;
}
- errorCount += test_alert_response ();
+ setup (&session, &key, &cert, &xcred);
+ errorCount += test_alert_close_notify (session);
+ teardown (session, &key, &cert, xcred);
+ setup (&session, &key, &cert, &xcred);
+ errorCount += test_alert_unexpected_message (session);
+ teardown (session, &key, &cert, xcred);
+
if (errorCount != 0)
- fprintf (stderr, "Error (code: %d)\n", errorCount);
+ fprintf (stderr, "Failed test: %s.\n", argv[0]);
MHD_stop_daemon (d);
+ gnutls_global_deinit ();
+
return errorCount != 0;
}
Modified: libmicrohttpd/src/testcurl/https/tls_authentication_test.c
===================================================================
--- libmicrohttpd/src/testcurl/https/tls_authentication_test.c 2008-07-26
03:26:56 UTC (rev 7524)
+++ libmicrohttpd/src/testcurl/https/tls_authentication_test.c 2008-07-27
03:50:36 UTC (rev 7525)
@@ -173,16 +173,16 @@
#endif
curl_easy_setopt (c, CURLOPT_URL, url);
curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
- curl_easy_setopt (c, CURLOPT_TIMEOUT, 10L);
- curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 10L);
+ curl_easy_setopt (c, CURLOPT_TIMEOUT, 3L);
+ curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 3L);
curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer);
curl_easy_setopt (c, CURLOPT_FILE, &cbc);
/* TLS options */
curl_easy_setopt (c, CURLOPT_SSLVERSION, proto_version);
- //curl_easy_setopt (c, CURLOPT_SSL_CIPHER_LIST, cipher_suite);
+ curl_easy_setopt (c, CURLOPT_SSL_CIPHER_LIST, cipher_suite);
- /* currently skip any peer authentication */
+ /* perform peer authentication */
curl_easy_setopt (c, CURLOPT_SSL_VERIFYPEER, 1);
curl_easy_setopt (c, CURLOPT_CAINFO, ca_cert_file_name);
@@ -224,7 +224,6 @@
{
int ret;
struct MHD_Daemon *d;
-
int kx[] = { MHD_GNUTLS_KX_DHE_RSA, 0 };
d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL |
@@ -241,6 +240,7 @@
}
ret = test_daemon_get (test_fd, cipher_suite, proto_version);
+
MHD_stop_daemon (d);
return ret;
}
@@ -308,7 +308,9 @@
FILE *test_fd;
unsigned int errorCount = 0;
- if (curl_check_version (MHD_REQ_CURL_VERSION, MHD_REQ_CURL_OPENSSL_VERSION))
+ gnutls_global_set_log_level(11);
+
+ if (curl_check_version (MHD_REQ_CURL_VERSION))
{
return -1;
}
@@ -331,7 +333,7 @@
test_secure_get (test_fd, "AES256-SHA", CURL_SSLVERSION_SSLv3);
if (errorCount != 0)
- fprintf (stderr, "Error (code: %u)\n", errorCount);
+ fprintf(stderr, "Failed test: %s.\n", argv[0]);
curl_global_cleanup ();
fclose (test_fd);
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r7525 - in libmicrohttpd/src: daemon testcurl testcurl/https,
gnunet <=