[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] r7372 - in libmicrohttpd: . src/daemon src/daemon/https/inc
From: |
gnunet |
Subject: |
[GNUnet-SVN] r7372 - in libmicrohttpd: . src/daemon src/daemon/https/includes src/examples src/include src/testcurl |
Date: |
Tue, 1 Jul 2008 18:51:22 -0600 (MDT) |
Author: lv-426
Date: 2008-07-01 18:51:22 -0600 (Tue, 01 Jul 2008)
New Revision: 7372
Removed:
libmicrohttpd/src/testcurl/daemon_HTTPS_test_get.c
Modified:
libmicrohttpd/configure.ac
libmicrohttpd/src/daemon/Makefile.am
libmicrohttpd/src/daemon/daemon.c
libmicrohttpd/src/daemon/https/includes/
libmicrohttpd/src/daemon/https/includes/gnutls.h
libmicrohttpd/src/daemon/internal.h
libmicrohttpd/src/examples/https_server_example.c
libmicrohttpd/src/include/microhttpd.h
libmicrohttpd/src/testcurl/Makefile.am
Log:
- switched to hard coded certificates
Modified: libmicrohttpd/configure.ac
===================================================================
--- libmicrohttpd/configure.ac 2008-07-01 22:50:01 UTC (rev 7371)
+++ libmicrohttpd/configure.ac 2008-07-02 00:51:22 UTC (rev 7372)
@@ -257,6 +257,7 @@
src/daemon/https/includes/Makefile
src/examples/Makefile
src/testcurl/Makefile
+src/testcurl/https/Makefile
src/testzzuf/Makefile])
AC_OUTPUT
Modified: libmicrohttpd/src/daemon/Makefile.am
===================================================================
--- libmicrohttpd/src/daemon/Makefile.am 2008-07-01 22:50:01 UTC (rev
7371)
+++ libmicrohttpd/src/daemon/Makefile.am 2008-07-02 00:51:22 UTC (rev
7372)
@@ -1,4 +1,5 @@
-AM_CPPFLAGS = -I$(top_srcdir)/src/include \
+AM_CPPFLAGS = \
+-I$(top_srcdir)/src/include \
-I$(top_srcdir)/src/daemon \
-I$(top_srcdir)/src/daemon/https/lgl \
-I$(top_srcdir)/src/daemon/https/x509 \
Modified: libmicrohttpd/src/daemon/daemon.c
===================================================================
--- libmicrohttpd/src/daemon/daemon.c 2008-07-01 22:50:01 UTC (rev 7371)
+++ libmicrohttpd/src/daemon/daemon.c 2008-07-02 00:51:22 UTC (rev 7372)
@@ -220,7 +220,7 @@
con->daemon->x509_cret);
/* avoid gnutls blocking recv / write calls */
- // gnutls_transport_set_pull_function(tls_session, &recv);
+ gnutls_transport_set_pull_function(tls_session, &recv);
// gnutls_transport_set_push_function(tls_session, &send);
gnutls_transport_set_ptr (tls_session, con->socket_fd);
@@ -786,14 +786,10 @@
retVal->pool_size = MHD_POOL_SIZE_DEFAULT;
retVal->connection_timeout = 0; /* no timeout */
- /* initialize ssl path parameters to the local path */
- retVal->https_cert_path = "cert.pem";
- retVal->https_key_path = "key.pem";
-
/* initializes the argument pointer variable */
va_start (ap, dh_cls);
/*
- * loop through daemon options
+ * loop through daemon options
*/
while (MHD_OPTION_END != (opt = va_arg (ap, enum MHD_OPTION)))
{
@@ -817,11 +813,17 @@
retVal->per_ip_connection_limit = va_arg (ap, unsigned int);
break;
case MHD_OPTION_HTTPS_KEY_PATH:
- retVal->https_key_path = va_arg (ap, const char *);
+ retVal->https_key_path = va_arg (ap, const char *);
break;
case MHD_OPTION_HTTPS_CERT_PATH:
- retVal->https_cert_path = va_arg (ap, const char* );
+ retVal->https_cert_path = va_arg (ap, const char *);
break;
+ case MHD_OPTION_HTTPS_MEM_KEY:
+ retVal->https_mem_key = va_arg (ap, const char *);
+ break;
+ case MHD_OPTION_HTTPS_MEM_CERT:
+ retVal->https_mem_cert = va_arg (ap, const char *);
+ break;
default:
#if HAVE_MESSAGES
fprintf (stderr,
@@ -832,25 +834,13 @@
}
#if HTTPS_SUPPORT
/* initialize HTTPS daemon certificate aspects & send / recv functions */
- if (options & MHD_USE_SSL)
+ if (options & MHD_USE_SSL && MHD_NO == MHDS_init (retVal))
{
- /* test for private key & certificate file exsitance */
- FILE *cert_file = fopen (retVal->https_cert_path, "r");
- FILE *key_file = fopen (retVal->https_key_path, "r");
- if (key_file == NULL || cert_file == NULL)
- {
- printf ("missing cert files");
#if HAVE_MESSAGES
- MHD_DLOG (retVal, "Missing X.509 key or certificate file\n");
+ MHD_DLOG (retVal, "Failed to initialize MHDS\n", STRERROR (errno));
#endif
- free (retVal);
- CLOSE (socket_fd);
- return NULL;
- }
-
- fclose (cert_file);
- fclose (key_file);
- MHDS_init (retVal);
+ free (retVal);
+ return NULL;
}
#endif
va_end (ap);
@@ -923,13 +913,13 @@
}
/* TLS clean up */
-#if HTTPS_SUPPORT
+#if HTTPS_SUPPORT
if (daemon->options & MHD_USE_SSL)
{
gnutls_priority_deinit (daemon->priority_cache);
gnutls_global_deinit ();
}
-#endif
+#endif
free (daemon);
}
@@ -952,13 +942,13 @@
gnutls_global_init ();
/* Generate Diffie Hellman parameters - for use with DHE kx algorithms. */
- // TODO should we be initializing RSA params or DH params ?
+ // TODO should we be initializing RSA params or DH params ?
gnutls_dh_params_init (&daemon->dh_params);
gnutls_dh_params_generate2 (daemon->dh_params, DH_BITS);
+ // TODO rm NONE:+AES-256-CBC:+RSA:+SHA1:+COMP-NULL", NULL);
gnutls_priority_init (&daemon->priority_cache,
- "NONE:+AES-256-CBC:+RSA:+SHA1:+COMP-NULL",
- NULL);
+ "NONE:+AES-256-CBC:+RSA:+SHA1:+COMP-NULL", NULL);
/* setup server certificate */
gnutls_certificate_allocate_credentials (&daemon->x509_cret);
@@ -971,15 +961,53 @@
//gnutls_certificate_set_x509_crl_file(x509_cret, CRLFILE,
GNUTLS_X509_FMT_PEM);
/* sets a certificate private key pair */
- gnutls_certificate_set_x509_key_file (daemon->x509_cret,
- daemon->https_cert_path,
- daemon->https_key_path,
- GNUTLS_X509_FMT_PEM);
+ if (daemon->https_cert_path && daemon->https_key_path )
+ {
+ /* test for private key & certificate file exsitance */
+ FILE *cert_file = fopen (daemon->https_cert_path, "r");
+ FILE *key_file = fopen (daemon->https_key_path, "r");
+ if (key_file == NULL || cert_file == NULL)
+ {
+ printf ("missing cert files");
+#if HAVE_MESSAGES
+ MHD_DLOG (daemon, "Missing X.509 key or certificate file\n");
+#endif
+ free (daemon);
+ CLOSE (daemon->socket_fd);
+ return NULL;
+ }
+ fclose (cert_file);
+ fclose (key_file);
+ gnutls_certificate_set_x509_key_file (daemon->x509_cret,
+ daemon->https_cert_path,
+ daemon->https_key_path,
+ GNUTLS_X509_FMT_PEM);
+ }
+ else if (daemon->https_mem_cert && daemon->https_mem_key )
+ {
+ // TODO free
+ gnutls_datum_t * key = ( gnutls_datum_t * ) malloc
(sizeof(gnutls_datum_t));
+ gnutls_datum_t * cert = ( gnutls_datum_t * ) malloc
(sizeof(gnutls_datum_t));
+ _gnutls_set_datum_m(key,daemon->https_mem_key,strlen
(daemon->https_mem_key), &malloc);
+ _gnutls_set_datum_m(cert,daemon->https_mem_cert,strlen
(daemon->https_mem_cert), &malloc);
+
+ gnutls_certificate_set_x509_key_mem (daemon->x509_cret, cert, key,
+ GNUTLS_X509_FMT_PEM);
+ printf("");
+ }
+ else
+ {
+#if HAVE_MESSAGES
+ MHD_DLOG (daemon, "Failed to load certificate\n");
+#endif
+ return MHD_NO;
+ }
+
gnutls_certificate_set_dh_params (daemon->x509_cret, daemon->dh_params);
// TODO address error case return value
- return 0;
+ return MHD_YES;
}
#endif
Property changes on: libmicrohttpd/src/daemon/https/includes
___________________________________________________________________
Name: svn:ignore
+ *.deps
Modified: libmicrohttpd/src/daemon/https/includes/gnutls.h
===================================================================
--- libmicrohttpd/src/daemon/https/includes/gnutls.h 2008-07-01 22:50:01 UTC
(rev 7371)
+++ libmicrohttpd/src/daemon/https/includes/gnutls.h 2008-07-02 00:51:22 UTC
(rev 7372)
@@ -227,7 +227,7 @@
*/
/* Those are extra information about the verification
- * process. Will be set only if the certificate was
+ * process. Will be set only if the certificate was
* not verified.
*/
GNUTLS_CERT_SIGNER_NOT_FOUND = 64,
@@ -494,7 +494,7 @@
const char *gnutls_supplemental_get_name
(gnutls_supplemental_data_format_type_t type);
-/* functions to set priority of cipher suites
+/* functions to set priority of cipher suites
*/
int gnutls_cipher_set_priority (gnutls_session_t session, const int *list);
int gnutls_mac_set_priority (gnutls_session_t session, const int *list);
@@ -510,7 +510,7 @@
*/
int gnutls_priority_init( gnutls_priority_t*, const char *priority, const
char** err_pos);
void gnutls_priority_deinit( gnutls_priority_t);
-
+
int gnutls_priority_set(gnutls_session_t session, gnutls_priority_t);
int gnutls_priority_set_direct(gnutls_session_t session, const char
*priority, const char** err_pos);
@@ -533,7 +533,7 @@
const char *gnutls_protocol_get_name (gnutls_protocol_t version);
-/* get/set session
+/* get/set session
*/
int gnutls_session_set_data (gnutls_session_t session,
const void *session_data,
@@ -548,7 +548,7 @@
int gnutls_session_get_id (gnutls_session_t session, void *session_id,
size_t * session_id_size);
-/* returns security values.
+/* returns security values.
* Do not use them unless you know what you're doing.
*/
#define TLS_MASTER_SIZE 48
@@ -557,7 +557,7 @@
const void *gnutls_session_get_client_random (gnutls_session_t session);
const void *gnutls_session_get_master_secret (gnutls_session_t session);
-/* checks if this session is a resumed one
+/* checks if this session is a resumed one
*/
int gnutls_session_is_resumed (gnutls_session_t session);
@@ -583,7 +583,7 @@
typedef int (*gnutls_handshake_post_client_hello_func)(gnutls_session_t);
void gnutls_handshake_set_post_client_hello_function(gnutls_session_t,
gnutls_handshake_post_client_hello_func);
-
+
void gnutls_handshake_set_max_packet_length (gnutls_session_t session,
size_t max);
@@ -684,8 +684,8 @@
void gnutls_certificate_send_x509_rdn_sequence (gnutls_session_t session,
int status);
-
+
extern int
gnutls_certificate_set_x509_simple_pkcs12_file
(gnutls_certificate_credentials_t res, const char *pkcs12file,
@@ -769,7 +769,7 @@
int gnutls_dh_params_cpy (gnutls_dh_params_t dst, gnutls_dh_params_t src);
-/* RSA params
+/* RSA params
*/
int gnutls_rsa_params_init (gnutls_rsa_params_t * rsa_params);
void gnutls_rsa_params_deinit (gnutls_rsa_params_t rsa_params);
@@ -825,7 +825,7 @@
void gnutls_transport_set_errno (gnutls_session_t session, int err);
void gnutls_transport_set_global_errno (int err);
-/* session specific
+/* session specific
*/
void gnutls_session_set_ptr (gnutls_session_t session, void *ptr);
void *gnutls_session_get_ptr (gnutls_session_t session);
@@ -833,7 +833,7 @@
void gnutls_openpgp_send_cert (gnutls_session_t session,
gnutls_openpgp_crt_status_t status);
-/* fingerprint
+/* fingerprint
* Actually this function returns the hash of the given data.
*/
int gnutls_fingerprint (gnutls_digest_algorithm_t algo,
@@ -841,7 +841,7 @@
size_t * result_size);
-/* SRP
+/* SRP
*/
typedef struct gnutls_srp_server_credentials_st
@@ -1117,7 +1117,7 @@
gnutls_datum_t * result);
int gnutls_global_init (void);
-
+
/* key_usage will be an OR of the following values:
*/
Modified: libmicrohttpd/src/daemon/internal.h
===================================================================
--- libmicrohttpd/src/daemon/internal.h 2008-07-01 22:50:01 UTC (rev 7371)
+++ libmicrohttpd/src/daemon/internal.h 2008-07-02 00:51:22 UTC (rev 7372)
@@ -308,7 +308,7 @@
/* while receiving an HTTP request through the encrypted channel */
MHDS_REPLY_SENDING,
-
+
MHDS_REPLY_SENT,
MHDS_CONNECTION_CLOSED
@@ -549,7 +549,7 @@
int (*idle_handler) (struct MHD_Connection * connection);
- /*
+ /*
* function pointers to the appropriate send & receive funtions
* according to whether this is a HTTPS / HTTP daemon
*/
@@ -586,7 +586,7 @@
/**
* Linked list of our current connections.
*/
- // TODO switch to a dedicated tls connection struct
+ // TODO switch to a dedicated tls connection struct
struct MHD_Connection *tls_connections;
MHD_AcceptPolicyCallback apc;
@@ -657,6 +657,10 @@
const char * https_key_path;
const char * https_cert_path;
+
+ const char * https_mem_key;
+
+ const char * https_mem_cert;
#endif
};
Modified: libmicrohttpd/src/examples/https_server_example.c
===================================================================
--- libmicrohttpd/src/examples/https_server_example.c 2008-07-01 22:50:01 UTC
(rev 7371)
+++ libmicrohttpd/src/examples/https_server_example.c 2008-07-02 00:51:22 UTC
(rev 7372)
@@ -50,16 +50,45 @@
#define BUF_SIZE 1024
#define MAX_URL_LEN 255
-#define KEYFILE "key.pem"
-#define CERTFILE "cert.pem"
-
-
// TODO remove if unused
#define CAFILE "ca.pem"
#define CRLFILE "crl.pem"
#define PAGE_NOT_FOUND "<html><head><title>File not
found</title></head><body>File not found</body></html>"
+/* Test Certificate */
+const char cert_pem[] =
+ "-----BEGIN CERTIFICATE-----\n"
+ "MIICHjCCAYmgAwIBAgIERiYdNzALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n"
+ "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTI3WhcNMDgwNDE3MTMyOTI3WjAdMRsw\n"
+ "GQYDVQQDExJHbnVUTFMgdGVzdCBjbGllbnQwgZwwCwYJKoZIhvcNAQEBA4GMADCB\n"
+ "iAKBgLtmQ/Xyxde2jMzF3/WIO7HJS2oOoa0gUEAIgKFPXKPQ+GzP5jz37AR2ExeL\n"
+ "ZIkiW8DdU3w77XwEu4C5KL6Om8aOoKUSy/VXHqLnu7czSZ/ju0quak1o/8kR4jKN\n"
+ "zj2AC41179gAgY8oBAOgIo1hBAf6tjd9IQdJ0glhaZiQo1ipAgMBAAGjdjB0MAwG\n"
+ "A1UdEwEB/wQCMAAwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDwYDVR0PAQH/BAUDAweg\n"
+ "ADAdBgNVHQ4EFgQUTLkKm/odNON+3svSBxX+odrLaJEwHwYDVR0jBBgwFoAU6Twc\n"
+ "+62SbuYGpFYsouHAUyfI8pUwCwYJKoZIhvcNAQEFA4GBALujmBJVZnvaTXr9cFRJ\n"
+ "jpfc/3X7sLUsMvumcDE01ls/cG5mIatmiyEU9qI3jbgUf82z23ON/acwJf875D3/\n"
+ "U7jyOsBJ44SEQITbin2yUeJMIm1tievvdNXBDfW95AM507ShzP12sfiJkJfjjdhy\n"
+ "dc8Siq5JojruiMizAf0pA7in\n" "-----END CERTIFICATE-----\n";
+
+const char key_pem[] =
+ "-----BEGIN RSA PRIVATE KEY-----\n"
+ "MIICXAIBAAKBgQC7ZkP18sXXtozMxd/1iDuxyUtqDqGtIFBACIChT1yj0Phsz+Y8\n"
+ "9+wEdhMXi2SJIlvA3VN8O+18BLuAuSi+jpvGjqClEsv1Vx6i57u3M0mf47tKrmpN\n"
+ "aP/JEeIyjc49gAuNde/YAIGPKAQDoCKNYQQH+rY3fSEHSdIJYWmYkKNYqQIDAQAB\n"
+ "AoGADpmARG5CQxS+AesNkGmpauepiCz1JBF/JwnyiX6vEzUh0Ypd39SZztwrDxvF\n"
+ "PJjQaKVljml1zkJpIDVsqvHdyVdse8M+Qn6hw4x2p5rogdvhhIL1mdWo7jWeVJTF\n"
+ "RKB7zLdMPs3ySdtcIQaF9nUAQ2KJEvldkO3m/bRJFEp54k0CQQDYy+RlTmwRD6hy\n"
+ "7UtMjR0H3CSZJeQ8svMCxHLmOluG9H1UKk55ZBYfRTsXniqUkJBZ5wuV1L+pR9EK\n"
+ "ca89a+1VAkEA3UmBelwEv2u9cAU1QjKjmwju1JgXbrjEohK+3B5y0ESEXPAwNQT9\n"
+ "TrDM1m9AyxYTWLxX93dI5QwNFJtmbtjeBQJARSCWXhsoaDRG8QZrCSjBxfzTCqZD\n"
+ "ZXtl807ymCipgJm60LiAt0JLr4LiucAsMZz6+j+quQbSakbFCACB8SLV1QJBAKZQ\n"
+ "YKf+EPNtnmta/rRKKvySsi3GQZZN+Dt3q0r094XgeTsAqrqujVNfPhTMeP4qEVBX\n"
+ "/iVX2cmMTSh3w3z8MaECQEp0XJWDVKOwcTW6Ajp9SowtmiZ3YDYo1LF9igb4iaLv\n"
+ "sWZGfbnU3ryjvkb6YuFjgtzbZDZHWQCo8/cOtOBmPdk=\n"
+ "-----END RSA PRIVATE KEY-----\n";
+
static int
file_reader (void *cls, size_t pos, char *buf, int max)
{
@@ -93,7 +122,7 @@
return MHD_YES;
}
*ptr = NULL; /* reset when done */
-
+
file = fopen (url, "r");
if (file == NULL)
{
@@ -105,7 +134,7 @@
}
else
{
- stat (&url[1], &buf);
+ stat (url, &buf);
response = MHD_create_response_from_callback (buf.st_size, 32 * 1024,
/* 32k PAGE_NOT_FOUND size */
&file_reader, file,
(MHD_ContentReaderFreeCallback)
@@ -115,12 +144,10 @@
}
return ret;
}
-
+
int
main (int argc, char *const *argv)
{
- char keyfile[255] = KEYFILE;
- char certfile[255] = CERTFILE;
struct MHD_Daemon *TLS_daemon;
/* look for HTTPS arguments */
Modified: libmicrohttpd/src/include/microhttpd.h
===================================================================
--- libmicrohttpd/src/include/microhttpd.h 2008-07-01 22:50:01 UTC (rev
7371)
+++ libmicrohttpd/src/include/microhttpd.h 2008-07-02 00:51:22 UTC (rev
7372)
@@ -307,7 +307,7 @@
MHD_OPTION_CONNECTION_MEMORY_LIMIT = 1,
/**
- * Maximum number of concurrenct connections to
+ * Maximum number of concurrent connections to
* accept (followed by an unsigned int).
*/
MHD_OPTION_CONNECTION_LIMIT = 2,
@@ -345,21 +345,40 @@
*/
MHD_OPTION_PER_IP_CONNECTION_LIMIT = 5,
+ // TODO rename
/**
- * Filename for the private key (key.pem) to be used by the
+ * Filename for the private key (key.pem) to be used by the
* HTTPS daemon. This option should be followed by an
* "const char*" argument. The memory of the filename must
* not be released until the application terminates.
+ * This should be used in conjunction with 'MHD_OPTION_HTTPS_CERT_PATH'.
*/
MHD_OPTION_HTTPS_KEY_PATH = 6,
/**
- * Filename for the certificate (cert.pem) to be used by the
+ * Filename for the certificate (cert.pem) to be used by the
* HTTPS daemon. This option should be followed by an
* "const char*" argument. The memory of the filename must
* not be released until the application terminates.
+ * This should be used in conjunction with 'MHD_OPTION_HTTPS_KEY_PATH'.
*/
MHD_OPTION_HTTPS_CERT_PATH = 7,
+
+ /**
+ * Memory pointer for the private key (key.pem) to be used by the
+ * HTTPS daemon. This option should be followed by an
+ * "const char*" argument.
+ * This should be used in conjunction with 'MHD_OPTION_HTTPS_MEM_CERT'.
+ */
+ MHD_OPTION_HTTPS_MEM_KEY = 8,
+
+ /**
+ * Memory pointer for the certificate (cert.pem) to be used by the
+ * HTTPS daemon. This option should be followed by an
+ * "const char*" argument.
+ * This should be used in conjunction with 'MHD_OPTION_HTTPS_MEM_KEY'.
+ */
+ MHD_OPTION_HTTPS_MEM_CERT = 9,
};
/**
@@ -866,10 +885,10 @@
/**
* Release PostProcessor resources.
- *
+ *
* @return MHD_YES if processing completed nicely,
* MHD_NO if there were spurious characters / formatting
- * problems; it is common to ignore the return
+ * problems; it is common to ignore the return
* value of this function
*/
int MHD_destroy_post_processor (struct MHD_PostProcessor *pp);
Modified: libmicrohttpd/src/testcurl/Makefile.am
===================================================================
--- libmicrohttpd/src/testcurl/Makefile.am 2008-07-01 22:50:01 UTC (rev
7371)
+++ libmicrohttpd/src/testcurl/Makefile.am 2008-07-02 00:51:22 UTC (rev
7372)
@@ -1,6 +1,8 @@
-SUBDIRS = .
+SUBDIRS = https .
-INCLUDES = -I$(top_srcdir)/src/include
+AM_CPPFLAGS = \
+-I$(top_srcdir)/src/daemon \
+-I$(top_srcdir)/src/include
check_PROGRAMS = \
daemontest_get \
@@ -93,7 +95,6 @@
$(top_builddir)/src/daemon/libmicrohttpd.la \
@LIBCURL@
-
daemontest_large_put_SOURCES = \
daemontest_large_put.c
daemontest_large_put_LDADD = \
Deleted: libmicrohttpd/src/testcurl/daemon_HTTPS_test_get.c
===================================================================
--- libmicrohttpd/src/testcurl/daemon_HTTPS_test_get.c 2008-07-01 22:50:01 UTC
(rev 7371)
+++ libmicrohttpd/src/testcurl/daemon_HTTPS_test_get.c 2008-07-02 00:51:22 UTC
(rev 7372)
@@ -1,276 +0,0 @@
-/*
- This file is part of libmicrohttpd
- (C) 2007 Christian Grothoff
-
- libmicrohttpd is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published
- by the Free Software Foundation; either version 2, or (at your
- option) any later version.
-
- libmicrohttpd is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with libmicrohttpd; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA.
-*/
-
-/**
- * @file daemon_HTTPS_test_get.c
- * @brief Testcase for libmicrohttpd GET operations
- * @author lv-426
- */
-
-#include "config.h"
-#include "plibc.h"
-#include "microhttpd.h"
-#include <errno.h>
-
-#include <curl/curl.h>
-#include <stdlib.h>
-#include <string.h>
-#include <time.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-
-#define BUF_SIZE 1024
-#define MAX_URL_LEN 255
-
-/* Test Certificate */
-const char cert_pem[] =
- "-----BEGIN CERTIFICATE-----\n"
- "MIIB5zCCAVKgAwIBAgIERiYdJzALBgkqhkiG9w0BAQUwGTEXMBUGA1UEAxMOR251\n"
- "VExTIHRlc3QgQ0EwHhcNMDcwNDE4MTMyOTExWhcNMDgwNDE3MTMyOTExWjAZMRcw\n"
- "FQYDVQQDEw5HbnVUTFMgdGVzdCBDQTCBnDALBgkqhkiG9w0BAQEDgYwAMIGIAoGA\n"
- "vuyYeh1vfmslnuggeEKgZAVmQ5ltSdUY7H25WGSygKMUYZ0KT74v8C780qtcNt9T\n"
- "7EPH/N6RvB4BprdssgcQLsthR3XKA84jbjjxNCcaGs33lvOz8A1nf8p3hD+cKfRi\n"
- "kfYSW2JazLrtCC4yRCas/SPOUxu78of+3HiTfFm/oXUCAwEAAaNDMEEwDwYDVR0T\n"
- "AQH/BAUwAwEB/zAPBgNVHQ8BAf8EBQMDBwQAMB0GA1UdDgQWBBTpPBz7rZJu5gak\n"
- "Viyi4cBTJ8jylTALBgkqhkiG9w0BAQUDgYEAiaIRqGfp1jPpNeVhABK60SU0KIAy\n"
- "njuu7kHq5peUgYn8Jd9zNzExBOEp1VOipGsf6G66oQAhDFp2o8zkz7ZH71zR4HEW\n"
- "KoX6n5Emn6DvcEH/9pAhnGxNHJAoS7czTKv/JDZJhkqHxyrE1fuLsg5Qv25DTw7+\n"
- "PfqUpIhz5Bbm7J4=\n" "-----END CERTIFICATE-----\n";
-
-const char key_pem[] =
- "-----BEGIN RSA PRIVATE KEY-----\n"
- "MIICXAIBAAKBgQC7ZkP18sXXtozMxd/1iDuxyUtqDqGtIFBACIChT1yj0Phsz+Y8\n"
- "9+wEdhMXi2SJIlvA3VN8O+18BLuAuSi+jpvGjqClEsv1Vx6i57u3M0mf47tKrmpN\n"
- "aP/JEeIyjc49gAuNde/YAIGPKAQDoCKNYQQH+rY3fSEHSdIJYWmYkKNYqQIDAQAB\n"
- "AoGADpmARG5CQxS+AesNkGmpauepiCz1JBF/JwnyiX6vEzUh0Ypd39SZztwrDxvF\n"
- "PJjQaKVljml1zkJpIDVsqvHdyVdse8M+Qn6hw4x2p5rogdvhhIL1mdWo7jWeVJTF\n"
- "RKB7zLdMPs3ySdtcIQaF9nUAQ2KJEvldkO3m/bRJFEp54k0CQQDYy+RlTmwRD6hy\n"
- "7UtMjR0H3CSZJeQ8svMCxHLmOluG9H1UKk55ZBYfRTsXniqUkJBZ5wuV1L+pR9EK\n"
- "ca89a+1VAkEA3UmBelwEv2u9cAU1QjKjmwju1JgXbrjEohK+3B5y0ESEXPAwNQT9\n"
- "TrDM1m9AyxYTWLxX93dI5QwNFJtmbtjeBQJARSCWXhsoaDRG8QZrCSjBxfzTCqZD\n"
- "ZXtl807ymCipgJm60LiAt0JLr4LiucAsMZz6+j+quQbSakbFCACB8SLV1QJBAKZQ\n"
- "YKf+EPNtnmta/rRKKvySsi3GQZZN+Dt3q0r094XgeTsAqrqujVNfPhTMeP4qEVBX\n"
- "/iVX2cmMTSh3w3z8MaECQEp0XJWDVKOwcTW6Ajp9SowtmiZ3YDYo1LF9igb4iaLv\n"
- "sWZGfbnU3ryjvkb6YuFjgtzbZDZHWQCo8/cOtOBmPdk=\n"
- "-----END RSA PRIVATE KEY-----\n";
-
-struct CBC
-{
- char *buf;
- size_t pos;
- size_t size;
-};
-
-static size_t
-copyBuffer (void *ptr, size_t size, size_t nmemb, void *ctx)
-{
- struct CBC *cbc = ctx;
-
- if (cbc->pos + size * nmemb > cbc->size)
- return 0; /* overflow */
- memcpy (&cbc->buf[cbc->pos], ptr, size * nmemb);
- cbc->pos += size * nmemb;
- return size * nmemb;
-}
-
-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,
- const char *url,
- const char *method,
- const char *upload_data,
- const char *version, unsigned int *upload_data_size, void **ptr)
-{
- static int aptr;
- static char full_url[MAX_URL_LEN];
- struct MHD_Response *response;
- int ret;
- FILE *file;
- struct stat buf;
-
- // TODO never respond on first call
- if (0 != strcmp (method, MHD_HTTP_METHOD_GET))
- return MHD_NO; /* unexpected method */
- if (&aptr != *ptr)
- {
- /* do never respond on first call */
- *ptr = &aptr;
- return MHD_YES;
- }
- *ptr = NULL; /* reset when done */
-
- file = fopen (url, "r");
- if (file == NULL)
- {
- return 1;
- }
- else
- {
- stat (&url[1], &buf);
- response = MHD_create_response_from_callback (buf.st_size, 32 * 1024,
/* 32k PAGE_NOT_FOUND size */
- &file_reader, file,
-
(MHD_ContentReaderFreeCallback)
- & fclose);
- ret = MHD_queue_response (connection, MHD_HTTP_OK, response);
- MHD_destroy_response (response);
- }
- return ret;
-}
-
-static int
-test_HTTPS_Get ()
-{
- struct MHD_Daemon *d;
- CURL *c;
- struct CBC cbc;
- CURLcode errornum;
- char *doc_path;
- char *url;
- /* currently use self as test file - consider better alternatives */
- char *test_file_name = "daemon_HTTPS_test_get";
- struct stat test_file_stat;
- FILE *key_file, *cert_file, *test_file;
-
- /* used to memcmp local copy & deamon supplied copy */
- unsigned char *mem_test_file_local;
- unsigned char *mem_test_file_recv;
-
- /* setup test file path, url */
- doc_path = get_current_dir_name ();
-
- /* construct url - this might use doc_path */
- url =
- (char *) malloc (sizeof (char) *
- (strlen (test_file_name) +
- strlen ("https://127.0.0.1:42433/")));
- strncat (url, "https://127.0.0.1:42433/", strlen
("https://127.0.0.1:42433/"));
- strncat (url, test_file_name, strlen (test_file_name));
-
- /* look for test file used for testing */
- key_file = fopen ("key_file", "w");
- cert_file = fopen ("cert_file", "w");
- test_file = fopen (test_file_name, "r");
- if ( key_file == NULL)
- {
- fprintf (stderr, "Error : failed to open key_file. errno:%d\n", errno);
- return 1;
- }
- if (!cert_file)
- {
- fprintf (stderr, "Error : failed to open cert_file. errno:%d\n", errno);
- return 1;
- }
- if (!test_file)
- {
- fprintf (stderr, "Error : failed to open test_file. errno:%d\n", errno);
- return 1;
- }
- if (stat (test_file_name, &test_file_stat) == -1)
- return 1;
-
- /* create test cert & key */
- fwrite (key_pem, 1, sizeof (key_pem), key_file);
- fwrite (cert_pem, 1, sizeof (cert_pem), cert_file);
- mem_test_file_local = malloc (test_file_stat.st_size);
- mem_test_file_recv = malloc (test_file_stat.st_size);
- fread (mem_test_file_local, 1, test_file_stat.st_size, test_file);
-
- fclose (key_file);
- fclose (cert_file);
- fclose (test_file);
-
- cbc.buf = mem_test_file_recv;
- cbc.size = test_file_stat.st_size;
- cbc.pos = 0;
-
- /* setup test */
- d = MHD_start_daemon (MHD_USE_SELECT_INTERNALLY | MHD_USE_DEBUG,
- 42433, NULL, NULL, &http_ahc, NULL,
- MHD_OPTION_DOC_ROOT, doc_path, MHD_OPTION_END);
- if (d == NULL)
- return 1;
-
- c = curl_easy_init ();
- curl_easy_setopt (c, CURLOPT_URL, url);
- curl_easy_setopt (c, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
- curl_easy_setopt (c, CURLOPT_TIMEOUT, 150L);
- curl_easy_setopt (c, CURLOPT_CONNECTTIMEOUT, 15L);
- curl_easy_setopt (c, CURLOPT_WRITEFUNCTION, ©Buffer);
- curl_easy_setopt (c, CURLOPT_WRITEDATA, &cbc);
- /* TLS options */
- curl_easy_setopt (c, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
- curl_easy_setopt (c, CURLOPT_SSL_CIPHER_LIST, "AES256-SHA");
- /* currently skip peer authentication */
- curl_easy_setopt (c, CURLOPT_SSL_VERIFYPEER, 0);
- // curl_easy_setopt (c, CURLOPT_FAILONERROR, 1);
-
- // NOTE: use of CONNECTTIMEOUT without also
- // setting NOSIGNAL results in really weird
- // crashes on my system!
- curl_easy_setopt (c, CURLOPT_NOSIGNAL, 1);
- if (CURLE_OK != (errornum = curl_easy_perform (c)))
- {
- fprintf (stderr,
- "curl_easy_perform failed: `%s'\n",
- curl_easy_strerror (errornum));
- curl_easy_cleanup (c);
- MHD_stop_daemon (d);
- return 2;
- }
- curl_easy_cleanup (c);
- MHD_stop_daemon (d);
- if (remove ("key_file") != 0)
- fprintf (stderr, "Error : failed to remove key_file.\n");
- if (remove ("cert_file") != 0)
- fprintf (stderr, "Error : failed to remove cert_file.\n");
-
- fprintf (stderr, "file = %s.\n" , mem_test_file_recv );
- if (memcmp (cbc.buf, mem_test_file_local, test_file_stat.st_size) == 0)
- {
- // TODO find proper error code
- return 1;
- }
- return 0;
-}
-
-int
-main (int argc, char *const *argv)
-{
-
- unsigned int errorCount = 0;
-
- if (0 != curl_global_init (CURL_GLOBAL_WIN32))
- return 2;
- errorCount += test_HTTPS_Get ();
- if (errorCount != 0)
- fprintf (stderr, "Error (code: %u)\n", errorCount);
- curl_global_cleanup ();
- return errorCount == 0; /* 0 == pass */
-}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r7372 - in libmicrohttpd: . src/daemon src/daemon/https/includes src/examples src/include src/testcurl,
gnunet <=