aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/CMakeLists.txt104
-rw-r--r--tests/Makefile.am87
-rw-r--r--tests/compat/pipe2.c46
-rwxr-xr-xtests/ssl_tlstest.sh43
-rw-r--r--tests/ssl_verify.bat42
-rwxr-xr-xtests/ssl_verify.sh67
-rwxr-xr-xtests/x509_callbacks.sh94
-rwxr-xr-xtests/x509_verify.sh81
8 files changed, 549 insertions, 15 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index eaf4ed1..e155ab7 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -68,7 +68,7 @@ file(TO_NATIVE_PATH ${CMAKE_CURRENT_SOURCE_DIR} TEST_SOURCE_DIR)
68function(prepare_emscripten_test_target TARGET_NAME) 68function(prepare_emscripten_test_target TARGET_NAME)
69 if(EMSCRIPTEN) 69 if(EMSCRIPTEN)
70 set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS 70 set_target_properties(${TARGET_NAME} PROPERTIES LINK_FLAGS
71 "-sALLOW_MEMORY_GROWTH --preload-file ${TEST_SOURCE_DIR} ") 71 "-sALLOW_MEMORY_GROWTH -sNODERAWFS=1")
72 endif() 72 endif()
73endfunction() 73endfunction()
74 74
@@ -283,6 +283,15 @@ add_executable(bn_mont bn_mont.c)
283target_link_libraries(bn_mont ${OPENSSL_TEST_LIBS}) 283target_link_libraries(bn_mont ${OPENSSL_TEST_LIBS})
284add_platform_test(bn_mont bn_mont) 284add_platform_test(bn_mont bn_mont)
285 285
286# bn_mul_div is mostly benchmark code with non-standard timing dependencies,
287# while the non-benchmark test coverage is not worth the cross-platform fallout.
288# # bn_mul_div
289# if(NOT (WIN32 OR EMSCRIPTEN OR SOLARIS))
290# add_executable(bn_mul_div bn_mul_div.c)
291# target_link_libraries(bn_mul_div ${OPENSSL_TEST_LIBS})
292# add_platform_test(bn_mul_div bn_mul_div)
293# endif()
294
286# bn_primes 295# bn_primes
287add_executable(bn_primes bn_primes.c) 296add_executable(bn_primes bn_primes.c)
288target_link_libraries(bn_primes ${OPENSSL_TEST_LIBS}) 297target_link_libraries(bn_primes ${OPENSSL_TEST_LIBS})
@@ -333,8 +342,30 @@ add_executable(bytestringtest bytestringtest.c)
333target_link_libraries(bytestringtest ${OPENSSL_TEST_LIBS}) 342target_link_libraries(bytestringtest ${OPENSSL_TEST_LIBS})
334add_platform_test(bytestringtest bytestringtest) 343add_platform_test(bytestringtest bytestringtest)
335 344
336# callback 345# x509_callbacks
337# callbackfailures 346add_executable(callback callback.c)
347target_link_libraries(callback ${OPENSSL_TEST_LIBS})
348add_executable(callbackfailures callbackfailures.c)
349target_link_libraries(callbackfailures ${OPENSSL_TEST_LIBS})
350add_executable(expirecallback expirecallback.c)
351target_link_libraries(expirecallback ${OPENSSL_TEST_LIBS})
352add_dependencies(callback openssl)
353if(NOT WIN32 AND NOT EMSCRIPTEN AND PERL_EXECUTABLE)
354 add_test(NAME x509_callbacks COMMAND
355 ${CMAKE_CURRENT_SOURCE_DIR}/x509_callbacks.sh
356 $<TARGET_FILE:callback>
357 $<TARGET_FILE:callbackfailures>
358 $<TARGET_FILE:expirecallback>
359 $<TARGET_FILE:openssl>)
360 set_tests_properties(x509_callbacks PROPERTIES
361 ENVIRONMENT "srcdir=${TEST_SOURCE_DIR};PERL=${PERL_EXECUTABLE}"
362 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
363 # These tests use the same certificate corpus as x509_verify and can
364 # exceed the range of a 32-bit time_t.
365 if(SMALL_TIME_T)
366 set_property(TEST x509_callbacks PROPERTY WILL_FAIL TRUE)
367 endif()
368endif()
338 369
339# casttest 370# casttest
340add_executable(casttest casttest.c) 371add_executable(casttest casttest.c)
@@ -415,6 +446,16 @@ add_platform_test(dsatest dsatest)
415# set_tests_properties(dtlstest PROPERTIES ENVIRONMENT "srcdir=${TEST_SOURCE_DIR}") 446# set_tests_properties(dtlstest PROPERTIES ENVIRONMENT "srcdir=${TEST_SOURCE_DIR}")
416# endif() 447# endif()
417 448
449# dtls_handshake_msg_test
450add_executable(dtls_handshake_msg_test dtls_handshake_msg_test.c)
451target_link_libraries(dtls_handshake_msg_test ${OPENSSL_TEST_LIBS})
452add_platform_test(dtls_handshake_msg_test dtls_handshake_msg_test)
453
454# dtls_wire_test
455add_executable(dtls_wire_test dtls_wire_test.c)
456target_link_libraries(dtls_wire_test ${OPENSSL_TEST_LIBS})
457add_platform_test(dtls_wire_test dtls_wire_test)
458
418# ecc_cdh 459# ecc_cdh
419add_executable(ecc_cdh ecc_cdh.c) 460add_executable(ecc_cdh ecc_cdh.c)
420target_link_libraries(ecc_cdh ${OPENSSL_TEST_LIBS}) 461target_link_libraries(ecc_cdh ${OPENSSL_TEST_LIBS})
@@ -484,8 +525,6 @@ add_executable(exdata_test exdata_test.c)
484target_link_libraries(exdata_test ${OPENSSL_TEST_LIBS}) 525target_link_libraries(exdata_test ${OPENSSL_TEST_LIBS})
485add_platform_test(exdata_test exdata_test) 526add_platform_test(exdata_test exdata_test)
486 527
487# expirecallback.c
488
489# explicit_bzero 528# explicit_bzero
490# SA_ONSTACK is unavailable on Windows, sigsuspend is unavailable on Emscripten 529# SA_ONSTACK is unavailable on Windows, sigsuspend is unavailable on Emscripten
491if(NOT (WIN32 OR EMSCRIPTEN)) 530if(NOT (WIN32 OR EMSCRIPTEN))
@@ -805,6 +844,11 @@ target_link_libraries(ssl_get_shared_ciphers ${OPENSSL_TEST_LIBS})
805prepare_emscripten_test_target(ssl_get_shared_ciphers) 844prepare_emscripten_test_target(ssl_get_shared_ciphers)
806add_platform_test(ssl_get_shared_ciphers ssl_get_shared_ciphers) 845add_platform_test(ssl_get_shared_ciphers ssl_get_shared_ciphers)
807 846
847# ssl_kex
848add_executable(ssl_kex ssl_kex.c)
849target_link_libraries(ssl_kex ${OPENSSL_TEST_LIBS})
850add_platform_test(ssl_kex ssl_kex)
851
808# ssl_methods 852# ssl_methods
809add_executable(ssl_methods ssl_methods.c) 853add_executable(ssl_methods ssl_methods.c)
810target_link_libraries(ssl_methods ${OPENSSL_TEST_LIBS}) 854target_link_libraries(ssl_methods ${OPENSSL_TEST_LIBS})
@@ -820,11 +864,39 @@ add_executable(ssl_verify_param ssl_verify_param.c)
820target_link_libraries(ssl_verify_param ${OPENSSL_TEST_LIBS}) 864target_link_libraries(ssl_verify_param ${OPENSSL_TEST_LIBS})
821add_platform_test(ssl_verify_param ssl_verify_param) 865add_platform_test(ssl_verify_param ssl_verify_param)
822 866
867# ssl_verify
868add_executable(ssl_verify ssl_verify.c)
869target_link_libraries(ssl_verify ${OPENSSL_TEST_LIBS})
870prepare_emscripten_test_target(ssl_verify)
871if(HAVE_PERL_IO_SOCKET_SSL_UTILS)
872 if(WIN32)
873 add_test(NAME ssl_verify COMMAND
874 ${CMAKE_CURRENT_SOURCE_DIR}/ssl_verify.bat
875 $<TARGET_FILE:ssl_verify>)
876 else()
877 add_test(NAME ssl_verify COMMAND
878 ${CMAKE_CURRENT_SOURCE_DIR}/ssl_verify.sh
879 $<TARGET_FILE:ssl_verify>)
880 endif()
881 set_tests_properties(ssl_verify PROPERTIES
882 ENVIRONMENT "srcdir=${TEST_SOURCE_DIR};PERL=${PERL_EXECUTABLE}"
883 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
884endif()
885
823# ssl_versions 886# ssl_versions
824add_executable(ssl_versions ssl_versions.c) 887add_executable(ssl_versions ssl_versions.c)
825target_link_libraries(ssl_versions ${OPENSSL_TEST_LIBS}) 888target_link_libraries(ssl_versions ${OPENSSL_TEST_LIBS})
826add_platform_test(ssl_versions ssl_versions) 889add_platform_test(ssl_versions ssl_versions)
827 890
891# ssl_tlstest
892add_executable(ssl_tlstest ssl_tlstest.c)
893target_link_libraries(ssl_tlstest ${OPENSSL_TEST_LIBS})
894prepare_emscripten_test_target(ssl_tlstest)
895add_platform_test(ssl_tlstest $<TARGET_FILE:ssl_tlstest>
896 ${CMAKE_CURRENT_SOURCE_DIR}/server1-rsa.pem
897 ${CMAKE_CURRENT_SOURCE_DIR}/server1-rsa-chain.pem
898 ${CMAKE_CURRENT_SOURCE_DIR}/ca-root-rsa.pem)
899
828# ssltest 900# ssltest
829add_executable(ssltest ssltest.c) 901add_executable(ssltest ssltest.c)
830target_link_libraries(ssltest ${OPENSSL_TEST_LIBS}) 902target_link_libraries(ssltest ${OPENSSL_TEST_LIBS})
@@ -921,6 +993,23 @@ add_executable(valid_handshakes_terminate valid_handshakes_terminate.c)
921target_link_libraries(valid_handshakes_terminate ${OPENSSL_TEST_LIBS}) 993target_link_libraries(valid_handshakes_terminate ${OPENSSL_TEST_LIBS})
922add_platform_test(valid_handshakes_terminate valid_handshakes_terminate) 994add_platform_test(valid_handshakes_terminate valid_handshakes_terminate)
923 995
996# x509_verify
997add_executable(x509_verify x509_verify.c)
998target_link_libraries(x509_verify ${OPENSSL_TEST_LIBS})
999add_dependencies(x509_verify openssl)
1000if(NOT WIN32 AND NOT EMSCRIPTEN AND PERL_EXECUTABLE)
1001 add_test(NAME x509_verify COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/x509_verify.sh
1002 $<TARGET_FILE:x509_verify> $<TARGET_FILE:openssl>)
1003 set_tests_properties(x509_verify PROPERTIES
1004 ENVIRONMENT "srcdir=${TEST_SOURCE_DIR};PERL=${PERL_EXECUTABLE}"
1005 WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
1006 # This test depends on certificate times that can exceed 32-bit time_t
1007 # range, so match the existing time tests and expect failure there.
1008 if(SMALL_TIME_T)
1009 set_property(TEST x509_verify PROPERTY WILL_FAIL TRUE)
1010 endif()
1011endif()
1012
924# verifytest 1013# verifytest
925add_executable(verifytest verifytest.c) 1014add_executable(verifytest verifytest.c)
926target_link_libraries(verifytest ${LIBTLS_TEST_LIBS}) 1015target_link_libraries(verifytest ${LIBTLS_TEST_LIBS})
@@ -947,6 +1036,11 @@ target_link_libraries(x509_asn1 ${OPENSSL_TEST_LIBS})
947prepare_emscripten_test_target(x509_asn1) 1036prepare_emscripten_test_target(x509_asn1)
948add_platform_test(x509_asn1 x509_asn1) 1037add_platform_test(x509_asn1 x509_asn1)
949 1038
1039# x509_crl
1040add_executable(x509_crl x509_crl.c)
1041target_link_libraries(x509_crl ${OPENSSL_TEST_LIBS})
1042add_platform_test(x509_crl x509_crl)
1043
950# x509_extensions_test 1044# x509_extensions_test
951add_executable(x509_extensions_test x509_extensions_test.c) 1045add_executable(x509_extensions_test x509_extensions_test.c)
952target_link_libraries(x509_extensions_test ${OPENSSL_TEST_LIBS}) 1046target_link_libraries(x509_extensions_test ${OPENSSL_TEST_LIBS})
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 22e3dee..aec438b 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -94,6 +94,7 @@ libtest_la_SOURCES = empty.c
94 94
95LDADD = libtest.la $(PLATFORM_LDADD) $(PROG_LDADD) 95LDADD = libtest.la $(PLATFORM_LDADD) $(PROG_LDADD)
96 96
97TESTS_ENVIRONMENT = PERL='$(PERL)'
97TEST_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) $(top_srcdir)/tap-driver.sh 98TEST_LOG_DRIVER = env AM_TAP_AWK='$(AWK)' $(SHELL) $(top_srcdir)/tap-driver.sh
98 99
99TESTS = 100TESTS =
@@ -102,6 +103,11 @@ check_PROGRAMS =
102EXTRA_DIST = CMakeLists.txt 103EXTRA_DIST = CMakeLists.txt
103DISTCLEANFILES = pidwraptest.txt 104DISTCLEANFILES = pidwraptest.txt
104 105
106distclean-local:
107 rm -rf ssl_verify-certs
108 rm -rf x509_callback-certs
109 rm -rf x509_verify-certs
110
105# XXX - should probably be in their own static lib 111# XXX - should probably be in their own static lib
106TEST_HELPER_SRC = test.c test_util.c 112TEST_HELPER_SRC = test.c test_util.c
107noinst_HEADERS = test.h 113noinst_HEADERS = test.h
@@ -303,6 +309,17 @@ TESTS += bn_mont
303check_PROGRAMS += bn_mont 309check_PROGRAMS += bn_mont
304bn_mont_SOURCES = bn_mont.c 310bn_mont_SOURCES = bn_mont.c
305 311
312# bn_mul_div is mostly benchmark code with non-standard timing dependencies,
313# while the non-benchmark test coverage is not worth the cross-platform fallout.
314## bn_mul_div
315#if !HOST_WIN
316#if !HOST_SOLARIS
317#TESTS += bn_mul_div
318#check_PROGRAMS += bn_mul_div
319#bn_mul_div_SOURCES = bn_mul_div.c
320#endif
321#endif
322
306# bn_primes 323# bn_primes
307TESTS += bn_primes 324TESTS += bn_primes
308check_PROGRAMS += bn_primes 325check_PROGRAMS += bn_primes
@@ -349,8 +366,21 @@ TESTS += bytestringtest
349check_PROGRAMS += bytestringtest 366check_PROGRAMS += bytestringtest
350bytestringtest_SOURCES = bytestringtest.c 367bytestringtest_SOURCES = bytestringtest.c
351 368
352# callback 369# x509_callbacks
353# callbackfailures 370if HAVE_PERL
371# These tests use the same certificate corpus as x509_verify and can exceed
372# the range of a 32-bit time_t.
373if SMALL_TIME_T
374XFAIL_TESTS += x509_callbacks.sh
375endif
376TESTS += x509_callbacks.sh
377check_PROGRAMS += callback callbackfailures expirecallback
378endif
379callback_SOURCES = callback.c
380callbackfailures_SOURCES = callbackfailures.c
381expirecallback_SOURCES = expirecallback.c
382EXTRA_DIST += x509_callbacks.sh
383EXTRA_DIST += callback.pl
354 384
355# casttest 385# casttest
356TESTS += casttest 386TESTS += casttest
@@ -431,6 +461,16 @@ dsatest_SOURCES = dsatest.c
431#endif 461#endif
432#EXTRA_DIST += dtlstest.sh 462#EXTRA_DIST += dtlstest.sh
433 463
464# dtls_handshake_msg_test
465TESTS += dtls_handshake_msg_test
466check_PROGRAMS += dtls_handshake_msg_test
467dtls_handshake_msg_test_SOURCES = dtls_handshake_msg_test.c
468
469# dtls_wire_test
470TESTS += dtls_wire_test
471check_PROGRAMS += dtls_wire_test
472dtls_wire_test_SOURCES = dtls_wire_test.c
473
434# ecc_cdh 474# ecc_cdh
435TESTS += ecc_cdh 475TESTS += ecc_cdh
436check_PROGRAMS += ecc_cdh 476check_PROGRAMS += ecc_cdh
@@ -498,8 +538,6 @@ TESTS += exdata_test
498check_PROGRAMS += exdata_test 538check_PROGRAMS += exdata_test
499exdata_test_SOURCES = exdata_test.c 539exdata_test_SOURCES = exdata_test.c
500 540
501# expirecallback.c
502
503# explicit_bzero 541# explicit_bzero
504# explicit_bzero relies on SA_ONSTACK, which is unavailable on Windows 542# explicit_bzero relies on SA_ONSTACK, which is unavailable on Windows
505if !HOST_WIN 543if !HOST_WIN
@@ -810,6 +848,11 @@ ssl_get_shared_ciphers_CPPFLAGS = $(AM_CPPFLAGS) -DCERTSDIR=\"$(srcdir)\"
810check_PROGRAMS += ssl_get_shared_ciphers 848check_PROGRAMS += ssl_get_shared_ciphers
811ssl_get_shared_ciphers_SOURCES = ssl_get_shared_ciphers.c 849ssl_get_shared_ciphers_SOURCES = ssl_get_shared_ciphers.c
812 850
851# ssl_kex
852TESTS += ssl_kex
853check_PROGRAMS += ssl_kex
854ssl_kex_SOURCES = ssl_kex.c
855
813# ssl_methods 856# ssl_methods
814TESTS += ssl_methods 857TESTS += ssl_methods
815check_PROGRAMS += ssl_methods 858check_PROGRAMS += ssl_methods
@@ -825,11 +868,27 @@ TESTS += ssl_verify_param
825check_PROGRAMS += ssl_verify_param 868check_PROGRAMS += ssl_verify_param
826ssl_verify_param_SOURCES = ssl_verify_param.c 869ssl_verify_param_SOURCES = ssl_verify_param.c
827 870
871# ssl_verify
872if HAVE_PERL_IO_SOCKET_SSL_UTILS
873TESTS += ssl_verify.sh
874check_PROGRAMS += ssl_verify
875endif
876ssl_verify_SOURCES = ssl_verify.c
877EXTRA_DIST += ssl_verify.sh
878EXTRA_DIST += ssl_verify.bat
879EXTRA_DIST += create-libressl-test-certs.pl
880
828# ssl_versions 881# ssl_versions
829TESTS += ssl_versions 882TESTS += ssl_versions
830check_PROGRAMS += ssl_versions 883check_PROGRAMS += ssl_versions
831ssl_versions_SOURCES = ssl_versions.c 884ssl_versions_SOURCES = ssl_versions.c
832 885
886# ssl_tlstest
887TESTS += ssl_tlstest.sh
888check_PROGRAMS += ssl_tlstest
889ssl_tlstest_SOURCES = ssl_tlstest.c
890EXTRA_DIST += ssl_tlstest.sh
891
833# ssltest 892# ssltest
834TESTS += ssltest.sh 893TESTS += ssltest.sh
835check_PROGRAMS += ssltest 894check_PROGRAMS += ssltest
@@ -905,6 +964,21 @@ TESTS += valid_handshakes_terminate
905check_PROGRAMS += valid_handshakes_terminate 964check_PROGRAMS += valid_handshakes_terminate
906valid_handshakes_terminate_SOURCES = valid_handshakes_terminate.c 965valid_handshakes_terminate_SOURCES = valid_handshakes_terminate.c
907 966
967# x509_verify
968if HAVE_PERL
969# This test depends on certificate times that can exceed 32-bit time_t
970# range, so match the existing time tests and expect failure there.
971if SMALL_TIME_T
972XFAIL_TESTS += x509_verify.sh
973endif
974TESTS += x509_verify.sh
975check_PROGRAMS += x509_verify
976endif
977x509_verify_SOURCES = x509_verify.c
978EXTRA_DIST += x509_verify.sh
979EXTRA_DIST += make-dir-roots.pl
980EXTRA_DIST += certs
981
908# verifytest 982# verifytest
909TESTS += verifytest 983TESTS += verifytest
910check_PROGRAMS += verifytest 984check_PROGRAMS += verifytest
@@ -930,6 +1004,11 @@ TESTS += x509_asn1
930check_PROGRAMS += x509_asn1 1004check_PROGRAMS += x509_asn1
931x509_asn1_SOURCES = x509_asn1.c 1005x509_asn1_SOURCES = x509_asn1.c
932 1006
1007# x509_crl
1008TESTS += x509_crl
1009check_PROGRAMS += x509_crl
1010x509_crl_SOURCES = x509_crl.c
1011
933# x509_extensions_test 1012# x509_extensions_test
934TESTS += x509_extensions_test 1013TESTS += x509_extensions_test
935check_PROGRAMS += x509_extensions_test 1014check_PROGRAMS += x509_extensions_test
diff --git a/tests/compat/pipe2.c b/tests/compat/pipe2.c
index d7b4062..3e79575 100644
--- a/tests/compat/pipe2.c
+++ b/tests/compat/pipe2.c
@@ -18,9 +18,10 @@ static int setfd(int fd, int flag)
18{ 18{
19 int rc = -1; 19 int rc = -1;
20 if (flag & FD_CLOEXEC) { 20 if (flag & FD_CLOEXEC) {
21 HANDLE h = (HANDLE)_get_osfhandle(fd); 21 /* fd is a Winsock SOCKET, not a CRT descriptor: use it as a
22 if (h != NULL) 22 * handle directly rather than translating with _get_osfhandle. */
23 rc = SetHandleInformation(h, HANDLE_FLAG_INHERIT, 0) == 0 ? -1 : 0; 23 HANDLE h = (HANDLE)(LONG_PTR)fd;
24 rc = SetHandleInformation(h, HANDLE_FLAG_INHERIT, 0) == 0 ? -1 : 0;
24 } 25 }
25 return rc; 26 return rc;
26} 27}
@@ -38,16 +39,20 @@ static int setfl(int fd, int flag)
38/* 39/*
39 * Have open() temporarily use up file descriptors until reaching beyond the 40 * Have open() temporarily use up file descriptors until reaching beyond the
40 * allocated sockets, then leak the ones conflicting with any of the latter. 41 * allocated sockets, then leak the ones conflicting with any of the latter.
42 *
43 * open()/close() are redefined to posix_open()/posix_close() in this file,
44 * which tag descriptors with the 0x80000000 bit. Use the raw CRT _open/_close
45 * so the values compare against the socket handles in the same namespace.
41 */ 46 */
42static void create_issue_1069_sentinels(int socket_vector[2]) 47static void create_issue_1069_sentinels(int socket_vector[2])
43{ 48{
44 int fd = open("CONIN$", O_RDONLY); 49 int fd = _open("CONIN$", O_RDONLY);
45 if (fd == -1 || (fd > socket_vector[0] && fd > socket_vector[1])) { 50 if (fd == -1 || (fd > socket_vector[0] && fd > socket_vector[1])) {
46 return; 51 return;
47 } 52 }
48 create_issue_1069_sentinels(socket_vector); 53 create_issue_1069_sentinels(socket_vector);
49 if (fd != socket_vector[0] && fd != socket_vector[1]) { 54 if (fd != socket_vector[0] && fd != socket_vector[1]) {
50 close(fd); 55 _close(fd);
51 } 56 }
52} 57}
53 58
@@ -70,8 +75,15 @@ int socketpair(int domain, int type, int protocol, int socket_vector[2])
70 .sin_port = 0, 75 .sin_port = 0,
71 }; 76 };
72 77
78 struct sockaddr_in self, peer;
73 int yes = 1, e; 79 int yes = 1, e;
74 if (setsockopt(listener, SOL_SOCKET, SO_REUSEADDR, 80
81 /*
82 * SO_REUSEADDR does not mean here what it means on unix: it lets any
83 * other process bind the same address and port and take over the
84 * rendezvous. SO_EXCLUSIVEADDRUSE is the flag that keeps the port ours.
85 */
86 if (setsockopt(listener, SOL_SOCKET, SO_EXCLUSIVEADDRUSE,
75 (void *)&yes, sizeof yes) == -1) 87 (void *)&yes, sizeof yes) == -1)
76 goto err; 88 goto err;
77 89
@@ -100,6 +112,28 @@ int socketpair(int domain, int type, int protocol, int socket_vector[2])
100 if (socket_vector[1] == -1) 112 if (socket_vector[1] == -1)
101 goto err; 113 goto err;
102 114
115 /*
116 * The listening port is enumerable by anything running as the user, so
117 * the connection we just accepted is not necessarily the one we made.
118 * Pair the two halves only if they are each other's peer.
119 */
120 memset(&self, 0, sizeof self);
121 addrlen = sizeof self;
122 if (getsockname(socket_vector[0], (struct sockaddr *)&self, &addrlen) != 0)
123 goto err;
124
125 memset(&peer, 0, sizeof peer);
126 addrlen = sizeof peer;
127 if (getpeername(socket_vector[1], (struct sockaddr *)&peer, &addrlen) != 0)
128 goto err;
129
130 if (self.sin_family != peer.sin_family ||
131 self.sin_addr.s_addr != peer.sin_addr.s_addr ||
132 self.sin_port != peer.sin_port) {
133 WSASetLastError(WSAECONNREFUSED);
134 goto err;
135 }
136
103 closesocket(listener); 137 closesocket(listener);
104 138
105 create_issue_1069_sentinels(socket_vector); 139 create_issue_1069_sentinels(socket_vector);
diff --git a/tests/ssl_tlstest.sh b/tests/ssl_tlstest.sh
new file mode 100755
index 0000000..cde8a4f
--- /dev/null
+++ b/tests/ssl_tlstest.sh
@@ -0,0 +1,43 @@
1#!/bin/sh
2#
3# Copyright (c) 2026 Kenjiro Nakayama
4#
5# Permission to use, copy, modify, and distribute this software for any
6# purpose with or without fee is hereby granted, provided that the above
7# copyright notice and this permission notice appear in all copies.
8#
9# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
17set -e
18
19if [ $# -ge 1 ]; then
20 ssl_tlstest_bin=$1
21else
22 ssl_tlstest_bin=./ssl_tlstest
23 if [ -e ./ssl_tlstest.exe ]; then
24 ssl_tlstest_bin=./ssl_tlstest.exe
25 elif [ -e ./ssl_tlstest.js ]; then
26 ssl_tlstest_bin=./ssl_tlstest.js
27 fi
28fi
29
30if [ -z "$srcdir" ]; then
31 srcdir=.
32fi
33
34case "$ssl_tlstest_bin" in
35*.js)
36 node "$ssl_tlstest_bin" "$srcdir/server1-rsa.pem" \
37 "$srcdir/server1-rsa-chain.pem" "$srcdir/ca-root-rsa.pem"
38 ;;
39*)
40 "$ssl_tlstest_bin" "$srcdir/server1-rsa.pem" \
41 "$srcdir/server1-rsa-chain.pem" "$srcdir/ca-root-rsa.pem"
42 ;;
43esac
diff --git a/tests/ssl_verify.bat b/tests/ssl_verify.bat
new file mode 100644
index 0000000..1b8c1dc
--- /dev/null
+++ b/tests/ssl_verify.bat
@@ -0,0 +1,42 @@
1@echo off
2setlocal
3
4:: Copyright (c) 2026 Kenjiro Nakayama
5::
6:: Permission to use, copy, modify, and distribute this software for any
7:: purpose with or without fee is hereby granted, provided that the above
8:: copyright notice and this permission notice appear in all copies.
9::
10:: THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
11:: WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12:: MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
13:: ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14:: WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15:: ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16:: OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17
18if "%~1" == "" exit /b 1
19
20set "ssl_verify_bin=%~1"
21set "ssl_verify_bin=%ssl_verify_bin:/=\%"
22if not exist "%ssl_verify_bin%" exit /b 1
23
24if not defined srcdir set "srcdir=."
25if not defined PERL set "PERL=perl"
26
27set "workdir=ssl_verify-certs"
28if exist "%workdir%" rmdir /s /q "%workdir%"
29mkdir "%workdir%" || exit /b 1
30pushd "%workdir%" || exit /b 1
31
32set "status=1"
33"%PERL%" "%srcdir%/create-libressl-test-certs.pl"
34if errorlevel 1 goto cleanup
35
36"%ssl_verify_bin%"
37set "status=%errorlevel%"
38
39:cleanup
40popd
41rmdir /s /q "%workdir%"
42exit /b %status%
diff --git a/tests/ssl_verify.sh b/tests/ssl_verify.sh
new file mode 100755
index 0000000..bb090db
--- /dev/null
+++ b/tests/ssl_verify.sh
@@ -0,0 +1,67 @@
1#!/bin/sh
2#
3# Copyright (c) 2026 Kenjiro Nakayama
4#
5# Permission to use, copy, modify, and distribute this software for any
6# purpose with or without fee is hereby granted, provided that the above
7# copyright notice and this permission notice appear in all copies.
8#
9# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
17set -e
18
19if [ -z "$srcdir" ]; then
20 srcdir=.
21fi
22
23if [ -z "$PERL" ]; then
24 PERL=perl
25fi
26
27case "$srcdir" in
28/*)
29 create_certs="$srcdir/create-libressl-test-certs.pl"
30 ;;
31*)
32 create_certs="`pwd`/$srcdir/create-libressl-test-certs.pl"
33 ;;
34esac
35
36if [ $# -ge 1 ]; then
37 verify_bin=$1
38else
39 verify_bin="`pwd`/ssl_verify"
40 if [ -e ./ssl_verify.exe ]; then
41 verify_bin="`pwd`/ssl_verify.exe"
42 fi
43fi
44
45workdir=ssl_verify-certs
46
47cleanup()
48{
49 rm -rf "$workdir"
50}
51trap cleanup EXIT
52
53rm -rf "$workdir"
54mkdir "$workdir"
55
56(
57 cd "$workdir"
58 "$PERL" "$create_certs"
59 case "$verify_bin" in
60 *.js)
61 node "$verify_bin"
62 ;;
63 *)
64 "$verify_bin"
65 ;;
66 esac
67)
diff --git a/tests/x509_callbacks.sh b/tests/x509_callbacks.sh
new file mode 100755
index 0000000..a48e638
--- /dev/null
+++ b/tests/x509_callbacks.sh
@@ -0,0 +1,94 @@
1#!/bin/sh
2#
3# Copyright (c) 2026 Kenjiro Nakayama
4#
5# Permission to use, copy, modify, and distribute this software for any
6# purpose with or without fee is hereby granted, provided that the above
7# copyright notice and this permission notice appear in all copies.
8#
9# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
17set -e
18
19if [ -z "$srcdir" ]; then
20 srcdir=.
21fi
22
23if [ -z "$PERL" ]; then
24 PERL=perl
25fi
26
27case "$srcdir" in
28/*)
29 certs_path="$srcdir/certs"
30 ca_file="$srcdir/../cert.pem"
31 callback_check="$srcdir/callback.pl"
32 make_dir_roots="$srcdir/make-dir-roots.pl"
33 openssl_conf="$srcdir/openssl.cnf"
34 ;;
35*)
36 certs_path="`pwd`/$srcdir/certs"
37 ca_file="`pwd`/$srcdir/../cert.pem"
38 callback_check="`pwd`/$srcdir/callback.pl"
39 make_dir_roots="`pwd`/$srcdir/make-dir-roots.pl"
40 openssl_conf="`pwd`/$srcdir/openssl.cnf"
41 ;;
42esac
43
44if [ $# -ge 3 ]; then
45 callback_bin=$1
46 callbackfailures_bin=$2
47 expirecallback_bin=$3
48else
49 callback_bin="`pwd`/callback"
50 callbackfailures_bin="`pwd`/callbackfailures"
51 expirecallback_bin="`pwd`/expirecallback"
52 if [ -e ./callback.exe ]; then
53 callback_bin="`pwd`/callback.exe"
54 callbackfailures_bin="`pwd`/callbackfailures.exe"
55 expirecallback_bin="`pwd`/expirecallback.exe"
56 fi
57fi
58
59if [ $# -ge 4 ]; then
60 openssl_dir=`dirname "$4"`
61elif [ -d ../apps/openssl ]; then
62 openssl_dir="`pwd`/../apps/openssl"
63else
64 openssl_dir="`pwd`/../apps"
65fi
66
67PATH="$openssl_dir:$PATH"
68export PATH
69
70if [ -f "$openssl_conf" ]; then
71 OPENSSL_CONF="$openssl_conf"
72 export OPENSSL_CONF
73fi
74
75workdir=x509_callback-certs
76
77cleanup()
78{
79 rm -rf "$workdir"
80}
81trap cleanup EXIT
82
83rm -rf "$workdir"
84mkdir "$workdir"
85
86"$PERL" "$make_dir_roots" "$certs_path" "$workdir"
87
88(
89 cd "$workdir"
90 "$callback_bin" "$certs_path"
91 "$PERL" "$callback_check" callback.out
92 "$callbackfailures_bin" "$certs_path" "$ca_file"
93 "$expirecallback_bin" "$certs_path"
94)
diff --git a/tests/x509_verify.sh b/tests/x509_verify.sh
new file mode 100755
index 0000000..b43063f
--- /dev/null
+++ b/tests/x509_verify.sh
@@ -0,0 +1,81 @@
1#!/bin/sh
2#
3# Copyright (c) 2026 Kenjiro Nakayama
4#
5# Permission to use, copy, modify, and distribute this software for any
6# purpose with or without fee is hereby granted, provided that the above
7# copyright notice and this permission notice appear in all copies.
8#
9# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16
17set -e
18
19if [ -z "$srcdir" ]; then
20 srcdir=.
21fi
22
23if [ -z "$PERL" ]; then
24 PERL=perl
25fi
26
27case "$srcdir" in
28/*)
29 certs_path="$srcdir/certs"
30 make_dir_roots="$srcdir/make-dir-roots.pl"
31 openssl_conf="$srcdir/openssl.cnf"
32 ;;
33*)
34 certs_path="`pwd`/$srcdir/certs"
35 make_dir_roots="`pwd`/$srcdir/make-dir-roots.pl"
36 openssl_conf="`pwd`/$srcdir/openssl.cnf"
37 ;;
38esac
39
40if [ $# -ge 1 ]; then
41 verify_bin=$1
42else
43 verify_bin="`pwd`/x509_verify"
44 if [ -e ./x509_verify.exe ]; then
45 verify_bin="`pwd`/x509_verify.exe"
46 fi
47fi
48
49if [ $# -ge 2 ]; then
50 openssl_dir=`dirname "$2"`
51elif [ -d ../apps/openssl ]; then
52 openssl_dir="`pwd`/../apps/openssl"
53else
54 openssl_dir="`pwd`/../apps"
55fi
56
57PATH="$openssl_dir:$PATH"
58export PATH
59
60if [ -f "$openssl_conf" ]; then
61 OPENSSL_CONF="$openssl_conf"
62 export OPENSSL_CONF
63fi
64
65workdir=x509_verify-certs
66
67cleanup()
68{
69 rm -rf "$workdir"
70}
71trap cleanup EXIT
72
73rm -rf "$workdir"
74mkdir "$workdir"
75
76"$PERL" "$make_dir_roots" "$certs_path" "$workdir"
77
78(
79 cd "$workdir"
80 "$verify_bin" "$certs_path"
81)