mirror of
https://git.gnunet.org/libmicrohttpd.git
synced 2026-09-25 04:09:31 +03:00
curl version testing support
This commit is contained in:
@@ -122,6 +122,13 @@ LIBCURL_CHECK_CONFIG(,,curl=1,curl=0)
|
||||
AM_CONDITIONAL(HAVE_CURL, test x$curl = x1)
|
||||
LIBS=$SAVE_LIBS
|
||||
|
||||
# Lib cURL & cURL - OpenSSL versions
|
||||
MHD_REQ_CURL_VERSION=7.16.4
|
||||
MHD_REQ_CURL_SSL_VERSION=0.9.8
|
||||
AC_DEFINE_UNQUOTED([MHD_REQ_CURL_VERSION], "$MHD_REQ_CURL_VERSION", [required cURL version to run tests])
|
||||
AC_DEFINE_UNQUOTED([MHD_REQ_CURL_SSL_VERSION], "$MHD_REQ_CURL_SSL_VERSION", [required cURL SSL version to run tests])
|
||||
|
||||
|
||||
# large file support (> 4 GB)
|
||||
AC_SYS_LARGEFILE
|
||||
AC_FUNC_FSEEKO
|
||||
|
||||
@@ -5,7 +5,6 @@ SUBDIRS += https
|
||||
endif
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir)/src/daemon/https \
|
||||
-I$(top_srcdir)/src/daemon \
|
||||
-I$(top_srcdir)/src/include
|
||||
|
||||
|
||||
@@ -0,0 +1,136 @@
|
||||
/*
|
||||
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 curl_version_check.c
|
||||
* @brief verify required cURL version is available to run tests
|
||||
* @author Sagie Amir
|
||||
*/
|
||||
|
||||
#include "config.h"
|
||||
#include <curl/curl.h>
|
||||
#include <microhttpd.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "internal.h"
|
||||
|
||||
#ifndef WINDOWS
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
|
||||
static int
|
||||
parse_version_number (const char **s)
|
||||
{
|
||||
int i = 0;
|
||||
char num[16];
|
||||
|
||||
while (i < 16 && ((**s >= '0') & (**s <= '9')))
|
||||
{
|
||||
num[i] = **s;
|
||||
(*s)++;
|
||||
i++;
|
||||
}
|
||||
|
||||
num[i] = '\0';
|
||||
|
||||
return atoi (num);
|
||||
}
|
||||
|
||||
const char *
|
||||
parse_version_string (const char *s, int *major, int *minor, int *micro)
|
||||
{
|
||||
*major = parse_version_number (&s);
|
||||
if (!s || *s != '.')
|
||||
return NULL;
|
||||
s++;
|
||||
*minor = parse_version_number (&s);
|
||||
if (!s || *s != '.')
|
||||
return NULL;
|
||||
s++;
|
||||
*micro = parse_version_number (&s);
|
||||
if (!s)
|
||||
return NULL;
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* check local libcurl version matches required version
|
||||
*/
|
||||
int
|
||||
curl_check_version (const char *req_version, ...)
|
||||
{
|
||||
va_list ap;
|
||||
const char *ver;
|
||||
const char *curl_ver;
|
||||
const char *ssl_ver;
|
||||
const char *req_ssl_ver;
|
||||
|
||||
int loc_major, loc_minor, loc_micro;
|
||||
int rq_major, rq_minor, rq_micro;
|
||||
|
||||
ver = curl_version ();
|
||||
/*
|
||||
* 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'
|
||||
*/
|
||||
curl_ver = strchr (ver, '/') + 1;
|
||||
ssl_ver = strchr (curl_ver, '/') + 1;
|
||||
|
||||
/* Parse version numbers */
|
||||
parse_version_string (req_version, &rq_major, &rq_minor, &rq_micro);
|
||||
parse_version_string (curl_ver, &loc_major, &loc_minor, &loc_micro);
|
||||
|
||||
/* Compare version numbers. */
|
||||
if ((loc_major > rq_major
|
||||
|| (loc_major == rq_major && loc_minor > rq_minor)
|
||||
|| (loc_major == rq_major && loc_minor == rq_minor
|
||||
&& loc_micro > rq_micro) || (loc_major == rq_major
|
||||
&& loc_minor == rq_minor
|
||||
&& loc_micro == rq_micro)) == 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"Error: running curl test depends on local libcurl version > %s\n",
|
||||
req_version);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#if HTTPS_SUPPORT
|
||||
va_start (ap, req_version);
|
||||
req_ssl_ver = va_arg (ap, void *);
|
||||
|
||||
parse_version_string (req_ssl_ver, &rq_major, &rq_minor, &rq_micro);
|
||||
parse_version_string (ssl_ver, &loc_major, &loc_minor, &loc_micro);
|
||||
|
||||
if ((loc_major > rq_major
|
||||
|| (loc_major == rq_major && loc_minor > rq_minor)
|
||||
|| (loc_major == rq_major && loc_minor == rq_minor
|
||||
&& loc_micro > rq_micro) || (loc_major == rq_major
|
||||
&& loc_minor == rq_minor
|
||||
&& loc_micro == rq_micro)) == 0)
|
||||
{
|
||||
fprintf (stderr,
|
||||
"Error: running curl test depends on local libcurl-openssl version > %s\n",
|
||||
req_ssl_ver);
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
@@ -8,7 +8,6 @@ AM_CPPFLAGS = \
|
||||
-I$(top_srcdir)/src/daemon/https/x509 \
|
||||
-I$(top_srcdir)/src/daemon
|
||||
|
||||
|
||||
check_PROGRAMS = \
|
||||
mhds_get_test \
|
||||
tls_authentication_test \
|
||||
@@ -18,31 +17,36 @@ check_PROGRAMS = \
|
||||
TESTS = $(check_PROGRAMS)
|
||||
|
||||
tls_alert_test_SOURCES = \
|
||||
tls_alert_test.c
|
||||
tls_alert_test.c \
|
||||
$(top_builddir)/src/testcurl/curl_version_check.c
|
||||
tls_alert_test_LDADD = \
|
||||
$(top_builddir)/src/daemon/libmicrohttpd.la \
|
||||
@LIBCURL@
|
||||
|
||||
tls_authentication_test_SOURCES = \
|
||||
tls_authentication_test.c
|
||||
tls_authentication_test.c \
|
||||
$(top_builddir)/src/testcurl/curl_version_check.c
|
||||
tls_authentication_test_LDADD = \
|
||||
$(top_builddir)/src/daemon/libmicrohttpd.la \
|
||||
@LIBCURL@
|
||||
|
||||
mhds_get_test_SOURCES = \
|
||||
mhds_get_test.c
|
||||
mhds_get_test.c \
|
||||
$(top_builddir)/src/testcurl/curl_version_check.c
|
||||
mhds_get_test_LDADD = \
|
||||
$(top_builddir)/src/daemon/libmicrohttpd.la \
|
||||
@LIBCURL@
|
||||
|
||||
mhds_session_info_test_SOURCES = \
|
||||
mhds_session_info_test.c
|
||||
mhds_session_info_test.c \
|
||||
$(top_builddir)/src/testcurl/curl_version_check.c
|
||||
mhds_session_info_test_LDADD = \
|
||||
$(top_builddir)/src/daemon/libmicrohttpd.la \
|
||||
@LIBCURL@
|
||||
|
||||
mhds_multi_daemon_test_SOURCES = \
|
||||
mhds_multi_daemon_test.c
|
||||
mhds_multi_daemon_test.c \
|
||||
$(top_builddir)/src/testcurl/curl_version_check.c
|
||||
mhds_multi_daemon_test_LDADD = \
|
||||
$(top_builddir)/src/daemon/libmicrohttpd.la \
|
||||
@LIBCURL@
|
||||
|
||||
@@ -51,6 +51,8 @@
|
||||
const char *test_file_name = "https_test_file";
|
||||
const char test_file_data[] = "Hello World\n";
|
||||
|
||||
extern int curl_check_version (const char *req_version, ...);
|
||||
|
||||
struct CBC
|
||||
{
|
||||
char *buf;
|
||||
@@ -416,7 +418,10 @@ main (int argc, char *const *argv)
|
||||
FILE *test_fd;
|
||||
unsigned int errorCount = 0;
|
||||
|
||||
// gnutls_global_set_log_level(11);
|
||||
if (curl_check_version (MHD_REQ_CURL_VERSION, MHD_REQ_CURL_SSL_VERSION))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((test_fd = setupTestFile ()) == NULL)
|
||||
{
|
||||
@@ -443,10 +448,10 @@ main (int argc, char *const *argv)
|
||||
test_kx_option (test_fd, "EDH-RSA-DES-CBC3-SHA", CURL_SSLVERSION_SSLv3);
|
||||
|
||||
|
||||
curl_global_cleanup ();
|
||||
fclose (test_fd);
|
||||
curl_global_cleanup ();
|
||||
fclose (test_fd);
|
||||
|
||||
remove (test_file_name);
|
||||
remove (test_file_name);
|
||||
|
||||
return errorCount != 0;
|
||||
}
|
||||
|
||||
@@ -48,6 +48,8 @@
|
||||
const char *test_file_name = "https_test_file";
|
||||
const char test_file_data[] = "Hello World\n";
|
||||
|
||||
extern int curl_check_version (const char *req_version, ...);
|
||||
|
||||
struct CBC
|
||||
{
|
||||
char *buf;
|
||||
@@ -300,6 +302,11 @@ main (int argc, char *const *argv)
|
||||
FILE *test_fd;
|
||||
unsigned int errorCount = 0;
|
||||
|
||||
if (curl_check_version (MHD_REQ_CURL_VERSION, MHD_REQ_CURL_SSL_VERSION))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((test_fd = setupTestFile ()) == NULL)
|
||||
{
|
||||
fprintf (stderr, MHD_E_TEST_FILE_CREAT);
|
||||
|
||||
@@ -40,6 +40,8 @@
|
||||
|
||||
#include "tls_test_keys.h"
|
||||
|
||||
extern int curl_check_version (const char *req_version, ...);
|
||||
|
||||
struct MHD_Daemon *d;
|
||||
|
||||
struct CBC
|
||||
@@ -213,6 +215,11 @@ main (int argc, char *const *argv)
|
||||
FILE *test_fd;
|
||||
unsigned int errorCount = 0;
|
||||
|
||||
if (curl_check_version (MHD_REQ_CURL_VERSION, MHD_REQ_CURL_SSL_VERSION))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (0 != curl_global_init (CURL_GLOBAL_ALL))
|
||||
{
|
||||
fprintf (stderr, "Error (code: %u)\n", errorCount);
|
||||
|
||||
@@ -48,6 +48,8 @@
|
||||
#include "gnutls_datum.h"
|
||||
#include "tls_test_keys.h"
|
||||
|
||||
extern int curl_check_version (const char *req_version, ...);
|
||||
|
||||
const char *ca_cert_file_name = "ca_cert_pem";
|
||||
const char *test_file_name = "https_test_file";
|
||||
const char test_file_data[] = "Hello World\n";
|
||||
@@ -79,8 +81,6 @@ http_ahc (void *cls, struct MHD_Connection *connection,
|
||||
static int
|
||||
test_alert_response ()
|
||||
{
|
||||
|
||||
|
||||
int sd, ret;
|
||||
char *err_pos;
|
||||
struct sockaddr_in sa;
|
||||
@@ -88,13 +88,11 @@ test_alert_response ()
|
||||
gnutls_session_t session;
|
||||
gnutls_certificate_credentials_t xcred;
|
||||
|
||||
|
||||
gnutls_global_init ();
|
||||
|
||||
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);
|
||||
@@ -157,14 +155,17 @@ test_alert_response ()
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
int
|
||||
main (int argc, char *const *argv)
|
||||
{
|
||||
int ret, errorCount = 0;;
|
||||
struct MHD_Daemon *d;
|
||||
|
||||
if (curl_check_version (MHD_REQ_CURL_VERSION, MHD_REQ_CURL_SSL_VERSION))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
d = MHD_start_daemon (MHD_USE_THREAD_PER_CONNECTION | MHD_USE_SSL |
|
||||
MHD_USE_DEBUG, 42433,
|
||||
NULL, NULL, &http_ahc, NULL,
|
||||
|
||||
@@ -46,6 +46,8 @@
|
||||
|
||||
#include "tls_test_keys.h"
|
||||
|
||||
extern int curl_check_version (const char *req_version, ...);
|
||||
|
||||
const char *ca_cert_file_name = "ca_cert_pem";
|
||||
const char *test_file_name = "https_test_file";
|
||||
const char test_file_data[] = "Hello World\n";
|
||||
@@ -315,6 +317,11 @@ main (int argc, char *const *argv)
|
||||
FILE *test_fd;
|
||||
unsigned int errorCount = 0;
|
||||
|
||||
if (curl_check_version (MHD_REQ_CURL_VERSION, MHD_REQ_CURL_SSL_VERSION))
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ((test_fd = setupTestFile ()) == NULL)
|
||||
{
|
||||
fprintf (stderr, MHD_E_TEST_FILE_CREAT);
|
||||
|
||||
Reference in New Issue
Block a user