diff options
-rw-r--r-- | .gitignore | 35 | ||||
-rw-r--r-- | AUTHORS | 1 | ||||
-rw-r--r-- | COPYING | 339 | ||||
-rw-r--r-- | Makefile.am | 105 | ||||
-rw-r--r-- | NEWS | 17 | ||||
-rw-r--r-- | README | 51 | ||||
-rwxr-xr-x | autogen.sh | 28 | ||||
-rwxr-xr-x | build-aux/tap-driver.sh | 651 | ||||
-rw-r--r-- | configure.ac | 176 | ||||
-rw-r--r-- | m4/ax_append_flag.m4 | 71 | ||||
-rw-r--r-- | m4/ax_cflags_warn_all.m4 | 122 | ||||
-rw-r--r-- | m4/ax_check_compile_flag.m4 | 74 | ||||
-rw-r--r-- | m4/ax_require_defined.m4 | 37 | ||||
-rw-r--r-- | m4/gcc_version.m4 | 38 | ||||
-rw-r--r-- | m4/gl_manywarnings.m4 | 329 | ||||
-rw-r--r-- | m4/gl_warnings.m4 | 106 | ||||
-rwxr-xr-x | scripts/announce-release.sh | 156 | ||||
-rw-r--r-- | src/commands.h | 28 | ||||
-rw-r--r-- | src/local.mk | 4 | ||||
-rw-r--r-- | src/main.c | 43 | ||||
-rw-r--r-- | src/s_client.c | 289 | ||||
-rw-r--r-- | tests/.gitignore | 2 | ||||
-rw-r--r-- | tests/aux/json.sh | 402 | ||||
-rw-r--r-- | tests/aux/tap-functions.sh | 229 | ||||
-rwxr-xr-x | tests/badssl.sh | 119 | ||||
-rwxr-xr-x | tests/howsmyssl.sh | 67 | ||||
-rw-r--r-- | tests/local.mk | 14 |
27 files changed, 2 insertions, 3531 deletions
diff --git a/.gitignore b/.gitignore deleted file mode 100644 index b0c7746..0000000 --- a/.gitignore +++ /dev/null @@ -1,35 +0,0 @@ -# Swap and backup files -*.s[a-w]? -*.vim -*~ -*.orig - -# Files generated by aclocal, autoconf, and automake -/aclocal.m4 -/autom4te.cache/ -/configure -/config.h.in -/build-aux/* -!/build-aux/tap-driver.sh -/ChangeLog -/INSTALL -Makefile.in - -# Files generated by configure -/config.log -/config.status -Makefile -/config.h -/stamp-h1 - -# Files generated by Makefile -.deps -.dirstamp -*.o -/version.c -/wolfutil -/wolfutil-*.tar* -/wolfutil-*/ -/test-suite.log -/MD5SUMS -/SHA256SUMS diff --git a/AUTHORS b/AUTHORS deleted file mode 100644 index 95b566f..0000000 --- a/AUTHORS +++ /dev/null @@ -1 +0,0 @@ -Patrick McDermott <patrick.mcdermott@libiquity.com> diff --git a/COPYING b/COPYING deleted file mode 100644 index d159169..0000000 --- a/COPYING +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) <year> <name of author> - - This program 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 of the License, or - (at your option) any later version. - - This program 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 this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/Makefile.am b/Makefile.am deleted file mode 100644 index c8f8d24..0000000 --- a/Makefile.am +++ /dev/null @@ -1,105 +0,0 @@ -# Process this file with automake to produce an input makefile. -# -# Copyright (C) 2014, 2017, 2018 Patrick McDermott -# -# This file is part of wolfutil. -# -# wolfutil 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 of the License, or -# (at your option) any later version. -# -# wolfutil 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 wolfutil. If not, see <http://www.gnu.org/licenses/>. - -KEY = '2250 31F0 47FF E516 63ED 516F 1A45 9ECD E4D6 04BE' - -if IN_GIT -PACKAGE_VERSION_GIT = $$(printf ' (%s)' \ - "$$({ git describe --tags --dirty 2>/dev/null || \ - printf '%s-g%s' \ - "$$(git rev-list --count HEAD)" \ - "$$(git describe --tags --dirty --always)"; \ - } | sed 's|^.*/||')") -else -PACKAGE_VERSION_GIT = -endif - -# PACKAGE_STRING is used in the test suite output and log. -# PACKAGE_VERSION can't be overridden. Automake ignores it in the IN_GIT -# conditional (and throws a warning), and setting it to $(PACKAGE_VERSION_GIT) -# outside the conditional causes PACKAGE_VERSION_GIT to reference itself. -# VERSION is not set here because it is used by: -# * Automake's distdir macro -# * Automake's distdir target (which checks for $(VERSION) in NEWS) -# * Our release target -PACKAGE_STRING = $(PACKAGE_NAME) $(PACKAGE_VERSION)$(PACKAGE_VERSION_GIT) - -bin_PROGRAMS = wolfutil - -wolfutil_SOURCES = -wolfutil_CFLAGS = \ - $(WARN_CFLAGS) \ - $(ASAN_CFLAGS) -wolfutil_CPPFLAGS = \ - -DABS_TOP_BUILDDIR=\"$(abs_top_builddir)\" \ - -DBINDIR=\"$(bindir)\" \ - -DPKGDATADIR=\"$(pkgdatadir)\" \ - -DLOCALEDIR=\"$(localedir)\" \ - -DPROGRAM_NAME=\"wolfutil\" \ - $(LIBPNG_CFLAGS) -wolfutil_LDADD = \ - $(WOLFSSL_LIBS) \ - $(ASAN_CFLAGS) -wolfutil_LINK = $(LINK) version.c -EXTRA_wolfutil_DEPENDENCIES = version.c -EXTRA_DIST = -CLEANFILES = version.c - -version.c: $(wolfutil_OBJECTS) $(wolfutil_DEPENDENCIES) - $(AM_V_GEN)printf 'const char *PACKAGE_VERSION_GIT = "%s";\n' \ - "$(PACKAGE_VERSION_GIT)" >version.c - -dist-hook: - set -e; \ - if [ -d '$(srcdir)/.git' ]; then \ - printf 'Generated file. Do not edit.\n\n' \ - >'$(distdir)/ChangeLog~'; \ - GIT_DIR='$(srcdir)/.git' git log --stat --color=never \ - >>'$(distdir)/ChangeLog~'; \ - mv '$(distdir)/ChangeLog~' '$(distdir)/ChangeLog'; \ - fi - -release: - sed "s/^Released: ????-??-??\$$/Released: $$(date '+%Y-%m-%d')/" \ - '$(srcdir)/NEWS' >'$(srcdir)/NEWS~' - mv '$(srcdir)/NEWS~' '$(srcdir)/NEWS' - $(MAKE) distcheck - set -e; \ - export GIT_DIR='$(srcdir)/.git'; \ - export GIT_WORK_TREE='$(srcdir)'; \ - git commit -m 'NEWS: Release $(PACKAGE) $(VERSION)' -- NEWS; \ - git tag '$(PACKAGE)/$(VERSION)' HEAD; \ - git push --tags origin master:master - md5sum $(DIST_ARCHIVES) >MD5SUMS - sha256sum $(DIST_ARCHIVES) >SHA256SUMS - set -e; \ - sigs=''; \ - for f in $(DIST_ARCHIVES); do \ - gpg --local-user $(KEY) --armor --detach-sign $${f}; \ - sigs="$${sigs} $${f}.asc"; \ - done; \ - ssh files@files.proteanos.com mkdir -p files/pub/$(PACKAGE); \ - rsync -az --progress --stats $(DIST_ARCHIVES) $${sigs} \ - MD5SUMS SHA256SUMS \ - files@files.proteanos.com:files/pub/$(PACKAGE)/$(VERSION)/ - '$(srcdir)/scripts/announce-release.sh' \ - $(PACKAGE) $(VERSION) '$(PACKAGE_NAME)' - -include $(top_srcdir)/src/local.mk -include $(top_srcdir)/tests/local.mk @@ -1,17 +0,0 @@ -Unofficial wolfSSL Utility version 1.0.0 ----------------------------------------- - -Released: 2020-08-09 - -This is the initial release of the Unofficial wolfSSL Utility, in development -since 2019-07-28. - -Copyright Information ---------------------- - -Copyright (C) 2019 Libiquity LLC - -Copying and distribution of this file, with or without modification, -are permitted in any medium without royalty provided the copyright -notice and this notice are preserved. This file is offered as-is, -without any warranty. @@ -1,52 +1,5 @@ Unofficial wolfSSL Utility -------------------------- -wolfutil is a command-line tool for the wolfSSL embedded (SSL/)TLS -library. It is similar to the OpenSSL command-line tool, providing only -a limited `s_client` TLS client command. The primary goal is to provide -enough functionality for use by BusyBox's wget applet. - -wolfutil's `s_client` command is designed to be stronger by default than -OpenSSL's, as the latter is only meant to be a "diagnostic tool". That -is, the following command: - - $ wolfutil s_client -quiet -connect ${host}:${port} \ - > -servername ${servername} - -is roughly equivalent to the more complicated: - - $ openssl s_client -quiet -connect ${host}:${port} \ - > -servername ${servername} -verify 9 -verify_return_error \ - > -no_ssl3 -no_tls1 -no_tls1_1 - -This utility is in no way authored by or affiliated with wolfSSL Inc. or -its contributors. - -Recommended wolfSSL Configuration ---------------------------------- - -Building wolfSSL with the following configuration options (keeping other -defaults) is recommended for wolfutil to perform as a strong modern TLS -implementation: - - --enable-maxstrength - --disable-aescbc - --disable-oldtls - --disable-md5 - --enable-ocsp - --enable-ocspstapling - --enable-ocspstapling2 - --enable-sni - -The test suite is written to verify the strength of wolfutil linked -against wolfSSL configured with these options. - -Copyright ---------- - -Copyright (C) 2019 Libiquity LLC - -Copying and distribution of this file, with or without modification, -are permitted in any medium without royalty provided the copyright -notice and this notice are preserved. This file is offered as-is, -without any warranty. +wolfssl-util has been renamed to wolfutil, and its Git repository has been moved +to <http://git.proteanos.com/wolfutil/wolfutil.git/>. diff --git a/autogen.sh b/autogen.sh deleted file mode 100755 index 28c30e4..0000000 --- a/autogen.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/sh -# -# Script to generate the build system. -# -# Copyright (C) 2013 Patrick McDermott -# -# Copying and distribution of this file, with or without modification, -# are permitted in any medium without royalty provided the copyright -# notice and this notice are preserved. This file is offered as-is, -# without any warranty. - -set -e - -srcdir="${0%/*}" - -{( - cd "${srcdir}" - [ -d build-aux ] || mkdir build-aux - cat >ChangeLog <<-EOF -This file is generated upon release. Run \`git log\` for a list of changes. -EOF - aclocal - autoconf - autoheader - automake --add-missing --copy -)} - -"${srcdir}/configure" "${@}" diff --git a/build-aux/tap-driver.sh b/build-aux/tap-driver.sh deleted file mode 100755 index 82efa96..0000000 --- a/build-aux/tap-driver.sh +++ /dev/null @@ -1,651 +0,0 @@ -#! /bin/sh -# Copyright (C) 2011-2017 Free Software Foundation, Inc. -# -# This program 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. -# -# This program 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 this program. If not, see <http://www.gnu.org/licenses/>. - -# As a special exception to the GNU General Public License, if you -# distribute this file as part of a program that contains a -# configuration script generated by Autoconf, you may include it under -# the same distribution terms that you use for the rest of that program. - -# This file is maintained in Automake, please report -# bugs to <bug-automake@gnu.org> or send patches to -# <automake-patches@gnu.org>. - -scriptversion=2013-12-23.17; # UTC - -# Make unconditional expansion of undefined variables an error. This -# helps a lot in preventing typo-related bugs. -set -u - -me=tap-driver.sh - -fatal () -{ - echo "$me: fatal: $*" >&2 - exit 1 -} - -usage_error () -{ - echo "$me: $*" >&2 - print_usage >&2 - exit 2 -} - -print_usage () -{ - cat <<END -Usage: - tap-driver.sh --test-name=NAME --log-file=PATH --trs-file=PATH - [--expect-failure={yes|no}] [--color-tests={yes|no}] - [--enable-hard-errors={yes|no}] [--ignore-exit] - [--diagnostic-string=STRING] [--merge|--no-merge] - [--comments|--no-comments] [--] TEST-COMMAND -The '--test-name', '-log-file' and '--trs-file' options are mandatory. -END -} - -# TODO: better error handling in option parsing (in particular, ensure -# TODO: $log_file, $trs_file and $test_name are defined). -test_name= # Used for reporting. -log_file= # Where to save the result and output of the test script. -trs_file= # Where to save the metadata of the test run. -expect_failure=0 -color_tests=0 -merge=0 -ignore_exit=0 -comments=0 -diag_string='#' -while test $# -gt 0; do - case $1 in - --help) print_usage; exit $?;; - --version) echo "$me $scriptversion"; exit $?;; - --test-name) test_name=$2; shift;; - --log-file) log_file=$2; shift;; - --trs-file) trs_file=$2; shift;; - --color-tests) color_tests=$2; shift;; - --expect-failure) expect_failure=$2; shift;; - --enable-hard-errors) shift;; # No-op. - --merge) merge=1;; - --no-merge) merge=0;; - --ignore-exit) ignore_exit=1;; - --comments) comments=1;; - --no-comments) comments=0;; - --diagnostic-string) diag_string=$2; shift;; - --) shift; break;; - -*) usage_error "invalid option: '$1'";; - esac - shift -done - -test $# -gt 0 || usage_error "missing test command" - -case $expect_failure in - yes) expect_failure=1;; - *) expect_failure=0;; -esac - -if test $color_tests = yes; then - init_colors=' - color_map["red"]="[0;31m" # Red. - color_map["grn"]="[0;32m" # Green. - color_map["lgn"]="[1;32m" # Light green. - color_map["blu"]="[1;34m" # Blue. - color_map["mgn"]="[0;35m" # Magenta. - color_map["std"]="[m" # No color. - color_for_result["ERROR"] = "mgn" - color_for_result["PASS"] = "grn" - color_for_result["XPASS"] = "red" - color_for_result["FAIL"] = "red" - color_for_result["XFAIL"] = "lgn" - color_for_result["SKIP"] = "blu"' -else - init_colors='' -fi - -# :; is there to work around a bug in bash 3.2 (and earlier) which -# does not always set '$?' properly on redirection failure. -# See the Autoconf manual for more details. -:;{ - ( - # Ignore common signals (in this subshell only!), to avoid potential - # problems with Korn shells. Some Korn shells are known to propagate - # to themselves signals that have killed a child process they were - # waiting for; this is done at least for SIGINT (and usually only for - # it, in truth). Without the `trap' below, such a behaviour could - # cause a premature exit in the current subshell, e.g., in case the - # test command it runs gets terminated by a SIGINT. Thus, the awk - # script we are piping into would never seen the exit status it - # expects on its last input line (which is displayed below by the - # last `echo $?' statement), and would thus die reporting an internal - # error. - # For more information, see the Autoconf manual and the threads: - # <http://lists.gnu.org/archive/html/bug-autoconf/2011-09/msg00004.html> - # <http://mail.opensolaris.org/pipermail/ksh93-integration-discuss/2009-February/004121.html> - trap : 1 3 2 13 15 - if test $merge -gt 0; then - exec 2>&1 - else - exec 2>&3 - fi - "$@" - echo $? - ) | LC_ALL=C ${AM_TAP_AWK-awk} \ - -v me="$me" \ - -v test_script_name="$test_name" \ - -v log_file="$log_file" \ - -v trs_file="$trs_file" \ - -v expect_failure="$expect_failure" \ - -v merge="$merge" \ - -v ignore_exit="$ignore_exit" \ - -v comments="$comments" \ - -v diag_string="$diag_string" \ -' -# TODO: the usages of "cat >&3" below could be optimized when using -# GNU awk, and/on on systems that supports /dev/fd/. - -# Implementation note: in what follows, `result_obj` will be an -# associative array that (partly) simulates a TAP result object -# from the `TAP::Parser` perl module. - -## ----------- ## -## FUNCTIONS ## -## ----------- ## - -function fatal(msg) -{ - print me ": " msg | "cat >&2" - exit 1 -} - -function abort(where) -{ - fatal("internal error " where) -} - -# Convert a boolean to a "yes"/"no" string. -function yn(bool) -{ - return bool ? "yes" : "no"; -} - -function add_test_result(result) -{ - if (!test_results_index) - test_results_index = 0 - test_results_list[test_results_index] = result - test_results_index += 1 - test_results_seen[result] = 1; -} - -# Whether the test script should be re-run by "make recheck". -function must_recheck() -{ - for (k in test_results_seen) - if (k != "XFAIL" && k != "PASS" && k != "SKIP") - return 1 - return 0 -} - -# Whether the content of the log file associated to this test should -# be copied into the "global" test-suite.log. -function copy_in_global_log() -{ - for (k in test_results_seen) - if (k != "PASS") - return 1 - return 0 -} - -function get_global_test_result() -{ - if ("ERROR" in test_results_seen) - return "ERROR" - if ("FAIL" in test_results_seen || "XPASS" in test_results_seen) - return "FAIL" - all_skipped = 1 - for (k in test_results_seen) - if (k != "SKIP") - all_skipped = 0 - if (all_skipped) - return "SKIP" - return "PASS"; -} - -function stringify_result_obj(result_obj) -{ - if (result_obj["is_unplanned"] || result_obj["number"] != testno) - return "ERROR" - - if (plan_seen == LATE_PLAN) - return "ERROR" - - if (result_obj["directive"] == "TODO") - return result_obj["is_ok"] ? "XPASS" : "XFAIL" - - if (result_obj["directive"] == "SKIP") - return result_obj["is_ok"] ? "SKIP" : COOKED_FAIL; - - if (length(result_obj["directive"])) - abort("in function stringify_result_obj()") - - return result_obj["is_ok"] ? COOKED_PASS : COOKED_FAIL -} - -function decorate_result(result) -{ - color_name = color_for_result[result] - if (color_name) - return color_map[color_name] "" result "" color_map["std"] - # If we are not using colorized output, or if we do not know how - # to colorize the given result, we should return it unchanged. - return result -} - -function report(result, details) -{ - if (result ~ /^(X?(PASS|FAIL)|SKIP|ERROR)/) - { - msg = ": " test_script_name - add_test_result(result) - } - else if (result == "#") - { - msg = " " test_script_name ":" - } - else - { - abort("in function report()") - } - if (length(details)) - msg = msg " " details - # Output on console might be colorized. - print decorate_result(result) msg - # Log the result in the log file too, to help debugging (this is - # especially true when said result is a TAP error or "Bail out!"). - print result msg | "cat >&3"; -} - -function testsuite_error(error_message) -{ - report("ERROR", "- " error_message) -} - -function handle_tap_result() -{ - details = result_obj["number"]; - if (length(result_obj["description"])) - details = details " " result_obj["description"] - - if (plan_seen == LATE_PLAN) - { - details = details " # AFTER LATE PLAN"; - } - else if (result_obj["is_unplanned"]) - { - details = details " # UNPLANNED"; - } - else if (result_obj["number"] != testno) - { - details = sprintf("%s # OUT-OF-ORDER (expecting %d)", - details, testno); - } - else if (result_obj["directive"]) - { - details = details " # " result_obj["directive"]; - if (length(result_obj["explanation"])) - details = details " " result_obj["explanation"] - } - - report(stringify_result_obj(result_obj), details) -} - -# `skip_reason` should be empty whenever planned > 0. -function handle_tap_plan(planned, skip_reason) -{ - planned += 0 # Avoid getting confused if, say, `planned` is "00" - if (length(skip_reason) && planned > 0) - abort("in function handle_tap_plan()") - if (plan_seen) - { - # Error, only one plan per stream is acceptable. - testsuite_error("multiple test plans") - return; - } - planned_tests = planned - # The TAP plan can come before or after *all* the TAP results; we speak - # respectively of an "early" or a "late" plan. If we see the plan line - # after at least one TAP result has been seen, assume we have a late - # plan; in this case, any further test result seen after the plan will - # be flagged as an error. - plan_seen = (testno >= 1 ? LATE_PLAN : EARLY_PLAN) - # If testno > 0, we have an error ("too many tests run") that will be - # automatically dealt with later, so do not worry about it here. If - # $plan_seen is true, we have an error due to a repeated plan, and that - # has already been dealt with above. Otherwise, we have a valid "plan - # with SKIP" specification, and should report it as a particular kind - # of SKIP result. - if (planned == 0 && testno == 0) - { - if (length(skip_reason)) - skip_reason = "- " skip_reason; - report("SKIP", skip_reason); - } -} - -function extract_tap_comment(line) -{ - if (index(line, diag_string) == 1) - { - # Strip leading `diag_string` from `line`. - line = substr(line, length(diag_string) + 1) - # And strip any leading and trailing whitespace left. - sub("^[ \t]*", "", line) - sub("[ \t]*$", "", line) - # Return what is left (if any). - return line; - } - return ""; -} - -# When this function is called, we know that line is a TAP result line, -# so that it matches the (perl) RE "^(not )?ok\b". -function setup_result_obj(line) -{ - # Get the result, and remove it from the line. - result_obj["is_ok"] = (substr(line, 1, 2) == "ok" ? 1 : 0) - sub("^(not )?ok[ \t]*", "", line) - - # If the result has an explicit number, get it and strip it; otherwise, - # automatically assing the next progresive number to it. - if (line ~ /^[0-9]+$/ || line ~ /^[0-9]+[^a-zA-Z0-9_]/) - { - match(line, "^[0-9]+") - # The final `+ 0` is to normalize numbers with leading zeros. - result_obj["number"] = substr(line, 1, RLENGTH) + 0 - line = substr(line, RLENGTH + 1) - } - else - { - result_obj["number"] = testno - } - - if (plan_seen == LATE_PLAN) - # No further test results are acceptable after a "late" TAP plan - # has been seen. - result_obj["is_unplanned"] = 1 - else if (plan_seen && testno > planned_tests) - result_obj["is_unplanned"] = 1 - else - result_obj["is_unplanned"] = 0 - - # Strip trailing and leading whitespace. - sub("^[ \t]*", "", line) - sub("[ \t]*$", "", line) - - # This will have to be corrected if we have a "TODO"/"SKIP" directive. - result_obj["description"] = line - result_obj["directive"] = "" - result_obj["explanation"] = "" - - if (index(line, "#") == 0) - return # No possible directive, nothing more to do. - - # Directives are case-insensitive. - rx = "[ \t]*#[ \t]*([tT][oO][dD][oO]|[sS][kK][iI][pP])[ \t]*" - - # See whether we have the directive, and if yes, where. - pos = match(line, rx "$") - if (!pos) - pos = match(line, rx "[^a-zA-Z0-9_]") - - # If there was no TAP directive, we have nothing more to do. - if (!pos) - return - - # Let`s now see if the TAP directive has been escaped. For example: - # escaped: ok \# SKIP - # not escaped: ok \\# SKIP - # escaped: ok \\\\\# SKIP - # not escaped: ok \ # SKIP - if (substr(line, pos, 1) == "#") - { - bslash_count = 0 - for (i = pos; i > 1 && substr(line, i - 1, 1) == "\\"; i--) - bslash_count += 1 - if (bslash_count % 2) - return # Directive was escaped. - } - - # Strip the directive and its explanation (if any) from the test - # description. - result_obj["description"] = substr(line, 1, pos - 1) - # Now remove the test description from the line, that has been dealt - # with already. - line = substr(line, pos) - # Strip the directive, and save its value (normalized to upper case). - sub("^[ \t]*#[ \t]*", "", line) - result_obj["directive"] = toupper(substr(line, 1, 4)) - line = substr(line, 5) - # Now get the explanation for the directive (if any), with leading - # and trailing whitespace removed. - sub("^[ \t]*", "", line) - sub("[ \t]*$", "", line) - result_obj["explanation"] = line -} - -function get_test_exit_message(status) -{ - if (status == 0) - return "" - if (status !~ /^[1-9][0-9]*$/) - abort("getting exit status") - if (status < 127) - exit_details = "" - else if (status == 127) - exit_details = " (command not found?)" - else if (status >= 128 && status <= 255) - exit_details = sprintf(" (terminated by signal %d?)", status - 128) - else if (status > 256 && status <= 384) - # We used to report an "abnormal termination" here, but some Korn - # shells, when a child process die due to signal number n, can leave - # in $? an exit status of 256+n instead of the more standard 128+n. - # Apparently, both behaviours are allowed by POSIX (2008), so be - # prepared to handle them both. See also Austing Group report ID - # 0000051 <http://www.austingroupbugs.net/view.php?id=51> - exit_details = sprintf(" (terminated by signal %d?)", status - 256) - else - # Never seen in practice. - exit_details = " (abnormal termination)" - return sprintf("exited with status %d%s", status, exit_details) -} - -function write_test_results() -{ - print ":global-test-result: " get_global_test_result() > trs_file - print ":recheck: " yn(must_recheck()) > trs_file - print ":copy-in-global-log: " yn(copy_in_global_log()) > trs_file - for (i = 0; i < test_results_index; i += 1) - print ":test-result: " test_results_list[i] > trs_file - close(trs_file); -} - -BEGIN { - -## ------- ## -## SETUP ## -## ------- ## - -'"$init_colors"' - -# Properly initialized once the TAP plan is seen. -planned_tests = 0 - -COOKED_PASS = expect_failure ? "XPASS": "PASS"; -COOKED_FAIL = expect_failure ? "XFAIL": "FAIL"; - -# Enumeration-like constants to remember which kind of plan (if any) -# has been seen. It is important that NO_PLAN evaluates "false" as -# a boolean. -NO_PLAN = 0 -EARLY_PLAN = 1 -LATE_PLAN = 2 - -testno = 0 # Number of test results seen so far. -bailed_out = 0 # Whether a "Bail out!" directive has been seen. - -# Whether the TAP plan has been seen or not, and if yes, which kind -# it is ("early" is seen before any test result, "late" otherwise). -plan_seen = NO_PLAN - -## --------- ## -## PARSING ## -## --------- ## - -is_first_read = 1 - -while (1) - { - # Involutions required so that we are able to read the exit status - # from the last input line. - st = getline - if (st < 0) # I/O error. - fatal("I/O error while reading from input stream") - else if (st == 0) # End-of-input - { - if (is_first_read) - abort("in input loop: only one input line") - break - } - if (is_first_read) - { - is_first_read = 0 - nextline = $0 - continue - } - else - { - curline = nextline - nextline = $0 - $0 = curline - } - # Copy any input line verbatim into the log file. - print | "cat >&3" - # Parsing of TAP input should stop after a "Bail out!" directive. - if (bailed_out) - continue - - # TAP test result. - if ($0 ~ /^(not )?ok$/ || $0 ~ /^(not )?ok[^a-zA-Z0-9_]/) - { - testno += 1 - setup_result_obj($0) - handle_tap_result() - } - # TAP plan (normal or "SKIP" without explanation). - else if ($0 ~ /^1\.\.[0-9]+[ \t]*$/) - { - # The next two lines will put the number of planned tests in $0. - sub("^1\\.\\.", "") - sub("[^0-9]*$", "") - handle_tap_plan($0, "") - continue - } - # TAP "SKIP" plan, with an explanation. - else if ($0 ~ /^1\.\.0+[ \t]*#/) - { - # The next lines will put the skip explanation in $0, stripping - # any leading and trailing whitespace. This is a little more - # tricky in truth, since we want to also strip a potential leading - # "SKIP" string from the message. - sub("^[^#]*#[ \t]*(SKIP[: \t][ \t]*)?", "") - sub("[ \t]*$", ""); - handle_tap_plan(0, $0) - } - # "Bail out!" magic. - # Older versions of prove and TAP::Harness (e.g., 3.17) did not - # recognize a "Bail out!" directive when preceded by leading - # whitespace, but more modern versions (e.g., 3.23) do. So we - # emulate the latter, "more modern" behaviour. - else if ($0 ~ /^[ \t]*Bail out!/) - { - bailed_out = 1 - # Get the bailout message (if any), with leading and trailing - # whitespace stripped. The message remains stored in `$0`. - sub("^[ \t]*Bail out![ \t]*", ""); - sub("[ \t]*$", ""); - # Format the error message for the - bailout_message = "Bail out!" - if (length($0)) - bailout_message = bailout_message " " $0 - testsuite_error(bailout_message) - } - # Maybe we have too look for dianogtic comments too. - else if (comments != 0) - { - comment = extract_tap_comment($0); - if (length(comment)) - report("#", comment); - } - } - -## -------- ## -## FINISH ## -## -------- ## - -# A "Bail out!" directive should cause us to ignore any following TAP -# error, as well as a non-zero exit status from the TAP producer. -if (!bailed_out) - { - if (!plan_seen) - { - testsuite_error("missing test plan") - } - else if (planned_tests != testno) - { - bad_amount = testno > planned_tests ? "many" : "few" - testsuite_error(sprintf("too %s tests run (expected %d, got %d)", - bad_amount, planned_tests, testno)) - } - if (!ignore_exit) - { - # Fetch exit status from the last line. - exit_message = get_test_exit_message(nextline) - if (exit_message) - testsuite_error(exit_message) - } - } - -write_test_results() - -exit 0 - -} # End of "BEGIN" block. -' - -# TODO: document that we consume the file descriptor 3 :-( -} 3>"$log_file" - -test $? -eq 0 || fatal "I/O or internal error" - -# Local Variables: -# mode: shell-script -# sh-indentation: 2 -# eval: (add-hook 'write-file-hooks 'time-stamp) -# time-stamp-start: "scriptversion=" -# time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC0" -# time-stamp-end: "; # UTC" -# End: diff --git a/configure.ac b/configure.ac deleted file mode 100644 index ce26416..0000000 --- a/configure.ac +++ /dev/null @@ -1,176 +0,0 @@ -# Process this file with autoconf to produce a configure script. -# -# Copyright (C) 2017 Patrick McDermott -# Copyright (C) 2019-2020 Libiquity LLC -# -# This file is part of wolfutil. -# -# wolfutil 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 of the License, or -# (at your option) any later version. -# -# wolfutil 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 wolfutil. If not, see <http://www.gnu.org/licenses/>. - -AC_INIT([Unofficial wolfSSL Utility], [1.0.0], - [mailto:patrick.mcdermott@libiquity.com], [wolfutil]) -AC_CONFIG_AUX_DIR([build-aux]) -AC_CONFIG_MACRO_DIR([m4]) -AC_CONFIG_SRCDIR([src/main.c]) - -AM_INIT_AUTOMAKE([gnu check-news dist-bzip2 dist-xz subdir-objects]) -AM_SILENT_RULES([yes]) - -AM_CONDITIONAL([IN_GIT], - [test -d "${srcdir}/.git" && command -v git >/dev/null 2>&1]) - -save_CFLAGS="${CFLAGS-}" -AC_PROG_CC() -AM_PROG_CC_C_O() -test -d "${srcdir}/.git" || CFLAGS="${save_CFLAGS}" - -AX_CFLAGS_WARN_ALL() dnl Adds -Wall or equivalent -AX_CHECK_COMPILE_FLAG([-Wpedantic], [AX_APPEND_FLAG([-Wpedantic])]) -AX_CHECK_COMPILE_FLAG([-Wextra], [AX_APPEND_FLAG([-Wextra])]) - -AC_ARG_ENABLE([gcc-warnings], - [AS_HELP_STRING([--enable-gcc-warnings], [turn on many GCC warnings])], - [case "${enableval}" in yes|no) gcc_warnings=${enableval};; - *) AC_MSG_ERROR( - [bad value ${enableval} for gcc-warnings option]);; - esac], - [ - gcc_warnings=no - test -d "${srcdir}/.git" && gcc_warnings=yes - ] -) -if test "x${gcc_warnings}" = 'xyes'; then - nowarns='' - nowarns="${nowarns} -Wsystem-headers" - gl_MANYWARN_ALL_GCC([warns]) - gl_MANYWARN_COMPLEMENT([warns], [${warns}], [${nowarns}]) - for warn in ${warns}; do - gl_WARN_ADD([${warn}]) - done - AC_SUBST([WARN_CFLAGS]) -fi - -AX_CHECK_COMPILE_FLAG([-fdiagnostics-color=auto], - [AX_APPEND_FLAG([-fdiagnostics-color=auto])]) - -AC_ARG_ENABLE([address-sanitization], - [AS_HELP_STRING([--enable-address-sanitization], - [turn on AddressSanitizer (if available)])], - [case "${enableval}" in yes|no) address_sanitization=${enableval};; - *) AC_MSG_ERROR( - [bad value ${enableval} for address-sanitization option] - );; - esac], - [ - address_sanitization=no - gl_GCC_VERSION_IFELSE([4], [8], - [test -d "${srcdir}/.git" && address_sanitization=yes]) - ] -) -if test "x${address_sanitization}" = 'xyes'; then - AX_CHECK_COMPILE_FLAG([-fsanitize=address], - [AX_APPEND_FLAG([-fsanitize=address], [ASAN_CFLAGS])]) - AX_CHECK_COMPILE_FLAG([-fno-omit-frame-pointer], - [AX_APPEND_FLAG([-fno-omit-frame-pointer], [ASAN_CFLAGS])]) - AC_SUBST([ASAN_CFLAGS]) -fi - -AX_APPEND_FLAG([-DTFM_TIMING_RESISTANT]) -AX_APPEND_FLAG([-DECC_TIMING_RESISTANT]) - -if ! test -d "${srcdir}/.git"; then - AX_CHECK_COMPILE_FLAG([-s], [AX_APPEND_FLAG([-s])]) -fi -for flag in -Os -fno-unwind-tables -fno-asynchronous-unwind-tables \ - -ffunction-sections -fdata-sections -Wl,--gc-sections \ - -fstack-protector-strong -flto \ - -Wl,-z,now -Wl,--hash-style=sysv -Wl,--build-id=none; do - AX_CHECK_COMPILE_FLAG([${flag}], [AX_APPEND_FLAG([${flag}])]) -done - -HAVE_CA_CERTS='' -CA_CERTS_DIR='NULL' -CA_CERTS_FILE='NULL' -AC_ARG_WITH([ca-certificates-dir], - [AS_HELP_STRING([--with-ca-certificates-dir=PATH], - [path to CA root certificates directory])], - [ - case "${withval}" in - 'yes'|'') - HAVE_CA_CERTS='1' - ;; - 'no') - HAVE_CA_CERTS='0' - ;; - *) - HAVE_CA_CERTS='1' - CA_CERTS_DIR="\"${withval}\"" - ;; - esac - ] -) -if test x"${HAVE_CA_CERTS}" != x'0' && test x"${CA_CERTS_DIR}" = x'NULL'; then - AC_MSG_CHECKING([for CA root certificates directory]) - for d in /etc/ssl/certs /usr/lib/ssl/certs /usr/share/ssl \ - /usr/local/ssl /etc/ssl /usr/share/ca-certificates \ - /etc/x509/server-auth; do - if test -d "${d}"; then - AC_MSG_RESULT([${d}]) - HAVE_CA_CERTS='1' - CA_CERTS_DIR="\"${d}\"" - break - fi - done - if test x"${CA_CERTS_DIR}" = x'NULL'; then - AC_MSG_RESULT([no]) - if test x"${HAVE_CA_CERTS}" = x'1'; then - AC_MSG_ERROR([CA root certificates directory not found]) - fi - HAVE_CA_CERTS='0' - fi -fi -AC_ARG_WITH([ca-certificates-file], - [AS_HELP_STRING([--with-ca-certificates-file=PATH], - [path to CA root certificates file])], - [ - case "${withval}" in - 'yes'|'') - AC_MSG_ERROR([--with-ca-certificates-file $(: \ - )requires an argument]) - ;; - 'no') - ;; - *) - HAVE_CA_CERTS='1' - CA_CERTS_FILE="\"${withval}\"" - ;; - esac - ] -) -AC_DEFINE_UNQUOTED([HAVE_CA_CERTS], [${HAVE_CA_CERTS}], - [Define to 1 to verify certificates against installed CA root - certificates.]) -AC_DEFINE_UNQUOTED([CA_CERTS_DIR], [${CA_CERTS_DIR}], - [Define to the path to CA root certificates directory.]) -AC_DEFINE_UNQUOTED([CA_CERTS_FILE], [${CA_CERTS_FILE}], - [Define to the path to CA root certificates file.]) - -PKG_PROG_PKG_CONFIG() -PKG_CHECK_MODULES([WOLFSSL], [wolfssl]) -WOLFSSL_CFLAGS="$(printf ' %s' "${WOLFSSL_CFLAGS}" | \ - sed 's/ -I/ -isystem/g;')" - -AC_CONFIG_FILES([Makefile]) -AC_CONFIG_HEADERS([config.h]) -AC_OUTPUT() diff --git a/m4/ax_append_flag.m4 b/m4/ax_append_flag.m4 deleted file mode 100644 index e8c5312..0000000 --- a/m4/ax_append_flag.m4 +++ /dev/null @@ -1,71 +0,0 @@ -# =========================================================================== -# https://www.gnu.org/software/autoconf-archive/ax_append_flag.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_APPEND_FLAG(FLAG, [FLAGS-VARIABLE]) -# -# DESCRIPTION -# -# FLAG is appended to the FLAGS-VARIABLE shell variable, with a space -# added in between. -# -# If FLAGS-VARIABLE is not specified, the current language's flags (e.g. -# CFLAGS) is used. FLAGS-VARIABLE is not changed if it already contains -# FLAG. If FLAGS-VARIABLE is unset in the shell, it is set to exactly -# FLAG. -# -# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. -# -# LICENSE -# -# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de> -# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com> -# -# This program 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 3 of the License, or (at your -# option) any later version. -# -# This program 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 this program. If not, see <https://www.gnu.org/licenses/>. -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 7 - -AC_DEFUN([AX_APPEND_FLAG], -[dnl -AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_SET_IF -AS_VAR_PUSHDEF([FLAGS], [m4_default($2,_AC_LANG_PREFIX[FLAGS])]) -AS_VAR_SET_IF(FLAGS,[ - AS_CASE([" AS_VAR_GET(FLAGS) "], - [*" $1 "*], [AC_RUN_LOG([: FLAGS already contains $1])], - [ - AS_VAR_APPEND(FLAGS,[" $1"]) - AC_RUN_LOG([: FLAGS="$FLAGS"]) - ]) - ], - [ - AS_VAR_SET(FLAGS,[$1]) - AC_RUN_LOG([: FLAGS="$FLAGS"]) - ]) -AS_VAR_POPDEF([FLAGS])dnl -])dnl AX_APPEND_FLAG diff --git a/m4/ax_cflags_warn_all.m4 b/m4/ax_cflags_warn_all.m4 deleted file mode 100644 index 094577e..0000000 --- a/m4/ax_cflags_warn_all.m4 +++ /dev/null @@ -1,122 +0,0 @@ -# =========================================================================== -# https://www.gnu.org/software/autoconf-archive/ax_cflags_warn_all.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])] -# AX_CXXFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])] -# AX_FCFLAGS_WARN_ALL [(shellvar [,default, [A/NA]])] -# -# DESCRIPTION -# -# Try to find a compiler option that enables most reasonable warnings. -# -# For the GNU compiler it will be -Wall (and -ansi -pedantic) The result -# is added to the shellvar being CFLAGS, CXXFLAGS, or FCFLAGS by default. -# -# Currently this macro knows about the GCC, Solaris, Digital Unix, AIX, -# HP-UX, IRIX, NEC SX-5 (Super-UX 10), Cray J90 (Unicos 10.0.0.8), and -# Intel compilers. For a given compiler, the Fortran flags are much more -# experimental than their C equivalents. -# -# - $1 shell-variable-to-add-to : CFLAGS, CXXFLAGS, or FCFLAGS -# - $2 add-value-if-not-found : nothing -# - $3 action-if-found : add value to shellvariable -# - $4 action-if-not-found : nothing -# -# NOTE: These macros depend on AX_APPEND_FLAG. -# -# LICENSE -# -# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de> -# Copyright (c) 2010 Rhys Ulerich <rhys.ulerich@gmail.com> -# -# This program 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 3 of the License, or (at your -# option) any later version. -# -# This program 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 this program. If not, see <https://www.gnu.org/licenses/>. -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 16 - -AC_DEFUN([AX_FLAGS_WARN_ALL],[dnl -AS_VAR_PUSHDEF([FLAGS],[_AC_LANG_PREFIX[]FLAGS])dnl -AS_VAR_PUSHDEF([VAR],[ac_cv_[]_AC_LANG_ABBREV[]flags_warn_all])dnl -AC_CACHE_CHECK([m4_ifval($1,$1,FLAGS) for maximum warnings], -VAR,[VAR="no, unknown" -ac_save_[]FLAGS="$[]FLAGS" -for ac_arg dnl -in "-warn all % -warn all" dnl Intel - "-pedantic % -Wall" dnl GCC - "-xstrconst % -v" dnl Solaris C - "-std1 % -verbose -w0 -warnprotos" dnl Digital Unix - "-qlanglvl=ansi % -qsrcmsg -qinfo=all:noppt:noppc:noobs:nocnd" dnl AIX - "-ansi -ansiE % -fullwarn" dnl IRIX - "+ESlit % +w1" dnl HP-UX C - "-Xc % -pvctl[,]fullmsg" dnl NEC SX-5 (Super-UX 10) - "-h conform % -h msglevel 2" dnl Cray C (Unicos) - # -do FLAGS="$ac_save_[]FLAGS "`echo $ac_arg | sed -e 's,%%.*,,' -e 's,%,,'` - AC_COMPILE_IFELSE([AC_LANG_PROGRAM], - [VAR=`echo $ac_arg | sed -e 's,.*% *,,'` ; break]) -done -FLAGS="$ac_save_[]FLAGS" -]) -AS_VAR_POPDEF([FLAGS])dnl -AX_REQUIRE_DEFINED([AX_APPEND_FLAG]) -case ".$VAR" in - .ok|.ok,*) m4_ifvaln($3,$3) ;; - .|.no|.no,*) m4_default($4,[m4_ifval($2,[AX_APPEND_FLAG([$2], [$1])])]) ;; - *) m4_default($3,[AX_APPEND_FLAG([$VAR], [$1])]) ;; -esac -AS_VAR_POPDEF([VAR])dnl -])dnl AX_FLAGS_WARN_ALL -dnl implementation tactics: -dnl the for-argument contains a list of options. The first part of -dnl these does only exist to detect the compiler - usually it is -dnl a global option to enable -ansi or -extrawarnings. All other -dnl compilers will fail about it. That was needed since a lot of -dnl compilers will give false positives for some option-syntax -dnl like -Woption or -Xoption as they think of it is a pass-through -dnl to later compile stages or something. The "%" is used as a -dnl delimiter. A non-option comment can be given after "%%" marks -dnl which will be shown but not added to the respective C/CXXFLAGS. - -AC_DEFUN([AX_CFLAGS_WARN_ALL],[dnl -AC_LANG_PUSH([C]) -AX_FLAGS_WARN_ALL([$1], [$2], [$3], [$4]) -AC_LANG_POP([C]) -]) - -AC_DEFUN([AX_CXXFLAGS_WARN_ALL],[dnl -AC_LANG_PUSH([C++]) -AX_FLAGS_WARN_ALL([$1], [$2], [$3], [$4]) -AC_LANG_POP([C++]) -]) - -AC_DEFUN([AX_FCFLAGS_WARN_ALL],[dnl -AC_LANG_PUSH([Fortran]) -AX_FLAGS_WARN_ALL([$1], [$2], [$3], [$4]) -AC_LANG_POP([Fortran]) -]) diff --git a/m4/ax_check_compile_flag.m4 b/m4/ax_check_compile_flag.m4 deleted file mode 100644 index dcabb92..0000000 --- a/m4/ax_check_compile_flag.m4 +++ /dev/null @@ -1,74 +0,0 @@ -# =========================================================================== -# https://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS], [INPUT]) -# -# DESCRIPTION -# -# Check whether the given FLAG works with the current language's compiler -# or gives an error. (Warnings, however, are ignored) -# -# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on -# success/failure. -# -# If EXTRA-FLAGS is defined, it is added to the current language's default -# flags (e.g. CFLAGS) when the check is done. The check is thus made with -# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to -# force the compiler to issue an error when a bad flag is given. -# -# INPUT gives an alternative input source to AC_COMPILE_IFELSE. -# -# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this -# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG. -# -# LICENSE -# -# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de> -# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com> -# -# This program 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 3 of the License, or (at your -# option) any later version. -# -# This program 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 this program. If not, see <https://www.gnu.org/licenses/>. -# -# As a special exception, the respective Autoconf Macro's copyright owner -# gives unlimited permission to copy, distribute and modify the configure -# scripts that are the output of Autoconf when processing the Macro. You -# need not follow the terms of the GNU General Public License when using -# or distributing such scripts, even though portions of the text of the -# Macro appear in them. The GNU General Public License (GPL) does govern -# all other use of the material that constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the Autoconf -# Macro released by the Autoconf Archive. When you make and distribute a -# modified version of the Autoconf Macro, you may extend this special -# exception to the GPL to apply to your modified version as well. - -#serial 5 - -AC_DEFUN([AX_CHECK_COMPILE_FLAG], -[AC_PREREQ(2.64)dnl for _AC_LANG_PREFIX and AS_VAR_IF -AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl -AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [ - ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS - _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1" - AC_COMPILE_IFELSE([m4_default([$5],[AC_LANG_PROGRAM()])], - [AS_VAR_SET(CACHEVAR,[yes])], - [AS_VAR_SET(CACHEVAR,[no])]) - _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags]) -AS_VAR_IF(CACHEVAR,yes, - [m4_default([$2], :)], - [m4_default([$3], :)]) -AS_VAR_POPDEF([CACHEVAR])dnl -])dnl AX_CHECK_COMPILE_FLAGS diff --git a/m4/ax_require_defined.m4 b/m4/ax_require_defined.m4 deleted file mode 100644 index 17c3eab..0000000 --- a/m4/ax_require_defined.m4 +++ /dev/null @@ -1,37 +0,0 @@ -# =========================================================================== -# https://www.gnu.org/software/autoconf-archive/ax_require_defined.html -# =========================================================================== -# -# SYNOPSIS -# -# AX_REQUIRE_DEFINED(MACRO) -# -# DESCRIPTION -# -# AX_REQUIRE_DEFINED is a simple helper for making sure other macros have -# been defined and thus are available for use. This avoids random issues -# where a macro isn't expanded. Instead the configure script emits a -# non-fatal: -# -# ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found -# -# It's like AC_REQUIRE except it doesn't expand the required macro. -# -# Here's an example: -# -# AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG]) -# -# LICENSE -# -# Copyright (c) 2014 Mike Frysinger <vapier@gentoo.org> -# -# Copying and distribution of this file, with or without modification, are -# permitted in any medium without royalty provided the copyright notice -# and this notice are preserved. This file is offered as-is, without any -# warranty. - -#serial 2 - -AC_DEFUN([AX_REQUIRE_DEFINED], [dnl - m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])]) -])dnl AX_REQUIRE_DEFINED diff --git a/m4/gcc_version.m4 b/m4/gcc_version.m4 deleted file mode 100644 index 9e16450..0000000 --- a/m4/gcc_version.m4 +++ /dev/null @@ -1,38 +0,0 @@ -dnl Copied from GNU Coreutils configure.ac -dnl -dnl The 17 lines are probably too trivial to be copyrightable, but just in case: -dnl -dnl Copyright (C) 1991-2017 Free Software Foundation, Inc. -dnl -dnl This program is free software: you can redistribute it and/or modify -dnl it under the terms of the GNU General Public License as published by -dnl the Free Software Foundation, either version 3 of the License, or -dnl (at your option) any later version. -dnl -dnl This program is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -dnl GNU General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this program. If not, see <https://www.gnu.org/licenses/>. -dnl -dnl Written by Jim Meyering. - -# gl_GCC_VERSION_IFELSE([major], [minor], [run-if-found], [run-if-not-found]) -# ------------------------------------------------ -# If $CPP is gcc-MAJOR.MINOR or newer, then run RUN-IF-FOUND. -# Otherwise, run RUN-IF-NOT-FOUND. -AC_DEFUN([gl_GCC_VERSION_IFELSE], - [AC_PREPROC_IFELSE( - [AC_LANG_PROGRAM( - [[ -#if ($1) < __GNUC__ || (($1) == __GNUC__ && ($2) <= __GNUC_MINOR__) -/* ok */ -#else -# error "your version of gcc is older than $1.$2" -#endif - ]]), - ], [$3], [$4]) - ] -) diff --git a/m4/gl_manywarnings.m4 b/m4/gl_manywarnings.m4 deleted file mode 100644 index d10bcd0..0000000 --- a/m4/gl_manywarnings.m4 +++ /dev/null @@ -1,329 +0,0 @@ -# manywarnings.m4 serial 13 -dnl Copyright (C) 2008-2017 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Simon Josefsson - -# gl_MANYWARN_COMPLEMENT(OUTVAR, LISTVAR, REMOVEVAR) -# -------------------------------------------------- -# Copy LISTVAR to OUTVAR except for the entries in REMOVEVAR. -# Elements separated by whitespace. In set logic terms, the function -# does OUTVAR = LISTVAR \ REMOVEVAR. -AC_DEFUN([gl_MANYWARN_COMPLEMENT], -[ - gl_warn_set= - set x $2; shift - for gl_warn_item - do - case " $3 " in - *" $gl_warn_item "*) - ;; - *) - gl_warn_set="$gl_warn_set $gl_warn_item" - ;; - esac - done - $1=$gl_warn_set -]) - -# gl_MANYWARN_ALL_GCC(VARIABLE) -# ----------------------------- -# Add all documented GCC warning parameters to variable VARIABLE. -# Note that you need to test them using gl_WARN_ADD if you want to -# make sure your gcc understands it. -# -# The effects of this macro depend on the current language (_AC_LANG). -AC_DEFUN([gl_MANYWARN_ALL_GCC], -[_AC_LANG_DISPATCH([$0], _AC_LANG, $@)]) - -# Specialization for _AC_LANG = C. -# Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b. -m4_defun([gl_MANYWARN_ALL_GCC(C)], -[ - AC_LANG_PUSH([C]) - - dnl First, check for some issues that only occur when combining multiple - dnl gcc warning categories. - AC_REQUIRE([AC_PROG_CC]) - if test -n "$GCC"; then - - dnl Check if -W -Werror -Wno-missing-field-initializers is supported - dnl with the current $CC $CFLAGS $CPPFLAGS. - AC_MSG_CHECKING([whether -Wno-missing-field-initializers is supported]) - AC_CACHE_VAL([gl_cv_cc_nomfi_supported], [ - gl_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers" - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[]], [[]])], - [gl_cv_cc_nomfi_supported=yes], - [gl_cv_cc_nomfi_supported=no]) - CFLAGS="$gl_save_CFLAGS"]) - AC_MSG_RESULT([$gl_cv_cc_nomfi_supported]) - - if test "$gl_cv_cc_nomfi_supported" = yes; then - dnl Now check whether -Wno-missing-field-initializers is needed - dnl for the { 0, } construct. - AC_MSG_CHECKING([whether -Wno-missing-field-initializers is needed]) - AC_CACHE_VAL([gl_cv_cc_nomfi_needed], [ - gl_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -W -Werror" - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[int f (void) - { - typedef struct { int a; int b; } s_t; - s_t s1 = { 0, }; - return s1.b; - } - ]], - [[]])], - [gl_cv_cc_nomfi_needed=no], - [gl_cv_cc_nomfi_needed=yes]) - CFLAGS="$gl_save_CFLAGS" - ]) - AC_MSG_RESULT([$gl_cv_cc_nomfi_needed]) - fi - - dnl Next, check if -Werror -Wuninitialized is useful with the - dnl user's choice of $CFLAGS; some versions of gcc warn that it - dnl has no effect if -O is not also used - AC_MSG_CHECKING([whether -Wuninitialized is supported]) - AC_CACHE_VAL([gl_cv_cc_uninitialized_supported], [ - gl_save_CFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -Werror -Wuninitialized" - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM([[]], [[]])], - [gl_cv_cc_uninitialized_supported=yes], - [gl_cv_cc_uninitialized_supported=no]) - CFLAGS="$gl_save_CFLAGS"]) - AC_MSG_RESULT([$gl_cv_cc_uninitialized_supported]) - - fi - - # List all gcc warning categories. - # To compare this list to your installed GCC's, run this Bash command: - # - # comm -3 \ - # <(sed -n 's/^ *\(-[^ ]*\) .*/\1/p' manywarnings.m4 | sort) \ - # <(gcc --help=warnings | sed -n 's/^ \(-[^ ]*\) .*/\1/p' | sort | - # grep -v -x -F -f <( - # awk '/^[^#]/ {print $1}' ../build-aux/gcc-warning.spec)) - - gl_manywarn_set= - for gl_manywarn_item in -fno-common \ - -W \ - -Wabi \ - -Waddress \ - -Waggressive-loop-optimizations \ - -Wall \ - -Wattributes \ - -Wbad-function-cast \ - -Wbool-compare \ - -Wbool-operation \ - -Wbuiltin-declaration-mismatch \ - -Wbuiltin-macro-redefined \ - -Wcast-align \ - -Wchar-subscripts \ - -Wchkp \ - -Wclobbered \ - -Wcomment \ - -Wcomments \ - -Wcoverage-mismatch \ - -Wcpp \ - -Wdangling-else \ - -Wdate-time \ - -Wdeprecated \ - -Wdeprecated-declarations \ - -Wdesignated-init \ - -Wdisabled-optimization \ - -Wdiscarded-array-qualifiers \ - -Wdiscarded-qualifiers \ - -Wdiv-by-zero \ - -Wdouble-promotion \ - -Wduplicated-branches \ - -Wduplicated-cond \ - -Wduplicate-decl-specifier \ - -Wempty-body \ - -Wendif-labels \ - -Wenum-compare \ - -Wexpansion-to-defined \ - -Wextra \ - -Wformat-contains-nul \ - -Wformat-extra-args \ - -Wformat-nonliteral \ - -Wformat-security \ - -Wformat-signedness \ - -Wformat-y2k \ - -Wformat-zero-length \ - -Wframe-address \ - -Wfree-nonheap-object \ - -Whsa \ - -Wignored-attributes \ - -Wignored-qualifiers \ - -Wimplicit \ - -Wimplicit-function-declaration \ - -Wimplicit-int \ - -Wincompatible-pointer-types \ - -Winit-self \ - -Winline \ - -Wint-conversion \ - -Wint-in-bool-context \ - -Wint-to-pointer-cast \ - -Winvalid-memory-model \ - -Winvalid-pch \ - -Wjump-misses-init \ - -Wlogical-not-parentheses \ - -Wlogical-op \ - -Wmain \ - -Wmaybe-uninitialized \ - -Wmemset-elt-size \ - -Wmemset-transposed-args \ - -Wmisleading-indentation \ - -Wmissing-braces \ - -Wmissing-declarations \ - -Wmissing-field-initializers \ - -Wmissing-include-dirs \ - -Wmissing-parameter-type \ - -Wmissing-prototypes \ - -Wmultichar \ - -Wnarrowing \ - -Wnested-externs \ - -Wnonnull \ - -Wnonnull-compare \ - -Wnull-dereference \ - -Wodr \ - -Wold-style-declaration \ - -Wold-style-definition \ - -Wopenmp-simd \ - -Woverflow \ - -Woverlength-strings \ - -Woverride-init \ - -Wpacked \ - -Wpacked-bitfield-compat \ - -Wparentheses \ - -Wpointer-arith \ - -Wpointer-compare \ - -Wpointer-sign \ - -Wpointer-to-int-cast \ - -Wpragmas \ - -Wpsabi \ - -Wrestrict \ - -Wreturn-local-addr \ - -Wreturn-type \ - -Wscalar-storage-order \ - -Wsequence-point \ - -Wshadow \ - -Wshift-count-negative \ - -Wshift-count-overflow \ - -Wshift-negative-value \ - -Wsizeof-array-argument \ - -Wsizeof-pointer-memaccess \ - -Wstack-protector \ - -Wstrict-aliasing \ - -Wstrict-overflow \ - -Wstrict-prototypes \ - -Wsuggest-attribute=const \ - -Wsuggest-attribute=format \ - -Wsuggest-attribute=noreturn \ - -Wsuggest-attribute=pure \ - -Wsuggest-final-methods \ - -Wsuggest-final-types \ - -Wswitch \ - -Wswitch-bool \ - -Wswitch-default \ - -Wswitch-unreachable \ - -Wsync-nand \ - -Wsystem-headers \ - -Wtautological-compare \ - -Wtrampolines \ - -Wtrigraphs \ - -Wtype-limits \ - -Wuninitialized \ - -Wunknown-pragmas \ - -Wunsafe-loop-optimizations \ - -Wunused \ - -Wunused-but-set-parameter \ - -Wunused-but-set-variable \ - -Wunused-function \ - -Wunused-label \ - -Wunused-local-typedefs \ - -Wunused-macros \ - -Wunused-parameter \ - -Wunused-result \ - -Wunused-value \ - -Wunused-variable \ - -Wvarargs \ - -Wvariadic-macros \ - -Wvector-operation-performance \ - -Wvla \ - -Wvolatile-register-var \ - -Wwrite-strings \ - \ - ; do - gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" - done - - # gcc --help=warnings outputs an unusual form for these options; list - # them here so that the above 'comm' command doesn't report a false match. - # Would prefer "min (PTRDIFF_MAX, SIZE_MAX)", but it must be a literal. - # Also, AC_COMPUTE_INT requires it to fit in a long; it is 2**63 on - # the only platforms where it does not fit in a long, so make that - # a special case. - AC_MSG_CHECKING([max safe object size]) - AC_COMPUTE_INT([gl_alloc_max], - [LONG_MAX < (PTRDIFF_MAX < (size_t) -1 ? PTRDIFF_MAX : (size_t) -1) - ? -1 - : PTRDIFF_MAX < (size_t) -1 ? (long) PTRDIFF_MAX : (long) (size_t) -1], - [[#include <limits.h> - #include <stddef.h> - #include <stdint.h> - ]], - [gl_alloc_max=2147483647]) - case $gl_alloc_max in - -1) gl_alloc_max=9223372036854775807;; - esac - AC_MSG_RESULT([$gl_alloc_max]) - gl_manywarn_set="$gl_manywarn_set -Walloc-size-larger-than=$gl_alloc_max" - gl_manywarn_set="$gl_manywarn_set -Warray-bounds=2" - gl_manywarn_set="$gl_manywarn_set -Wformat-overflow=2" - gl_manywarn_set="$gl_manywarn_set -Wformat-truncation=2" - gl_manywarn_set="$gl_manywarn_set -Wimplicit-fallthrough=5" - gl_manywarn_set="$gl_manywarn_set -Wnormalized=nfc" - gl_manywarn_set="$gl_manywarn_set -Wshift-overflow=2" - gl_manywarn_set="$gl_manywarn_set -Wstringop-overflow=2" - gl_manywarn_set="$gl_manywarn_set -Wunused-const-variable=2" - gl_manywarn_set="$gl_manywarn_set -Wvla-larger-than=4031" - - # These are needed for older GCC versions. - if test -n "$GCC"; then - case `($CC --version) 2>/dev/null` in - 'gcc (GCC) '[[0-3]].* | \ - 'gcc (GCC) '4.[[0-7]].*) - gl_manywarn_set="$gl_manywarn_set -fdiagnostics-show-option" - gl_manywarn_set="$gl_manywarn_set -funit-at-a-time" - ;; - esac - fi - - # Disable specific options as needed. - if test "$gl_cv_cc_nomfi_needed" = yes; then - gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers" - fi - - if test "$gl_cv_cc_uninitialized_supported" = no; then - gl_manywarn_set="$gl_manywarn_set -Wno-uninitialized" - fi - - $1=$gl_manywarn_set - - AC_LANG_POP([C]) -]) - -# Specialization for _AC_LANG = C++. -# Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b. -m4_defun([gl_MANYWARN_ALL_GCC(C++)], -[ - gl_MANYWARN_ALL_GCC_CXX_IMPL([$1]) -]) diff --git a/m4/gl_warnings.m4 b/m4/gl_warnings.m4 deleted file mode 100644 index 870472b..0000000 --- a/m4/gl_warnings.m4 +++ /dev/null @@ -1,106 +0,0 @@ -# warnings.m4 serial 13 -dnl Copyright (C) 2008-2017 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl From Simon Josefsson - -# gl_AS_VAR_APPEND(VAR, VALUE) -# ---------------------------- -# Provide the functionality of AS_VAR_APPEND if Autoconf does not have it. -m4_ifdef([AS_VAR_APPEND], -[m4_copy([AS_VAR_APPEND], [gl_AS_VAR_APPEND])], -[m4_define([gl_AS_VAR_APPEND], -[AS_VAR_SET([$1], [AS_VAR_GET([$1])$2])])]) - - -# gl_COMPILER_OPTION_IF(OPTION, [IF-SUPPORTED], [IF-NOT-SUPPORTED], -# [PROGRAM = AC_LANG_PROGRAM()]) -# ----------------------------------------------------------------- -# Check if the compiler supports OPTION when compiling PROGRAM. -# -# The effects of this macro depend on the current language (_AC_LANG). -AC_DEFUN([gl_COMPILER_OPTION_IF], -[ -dnl FIXME: gl_Warn must be used unquoted until we can assume Autoconf -dnl 2.64 or newer. -AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_[]_AC_LANG_ABBREV[]_$1])dnl -AS_VAR_PUSHDEF([gl_Flags], [_AC_LANG_PREFIX[]FLAGS])dnl -AS_LITERAL_IF([$1], - [m4_pushdef([gl_Positive], m4_bpatsubst([$1], [^-Wno-], [-W]))], - [gl_positive="$1" -case $gl_positive in - -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;; -esac -m4_pushdef([gl_Positive], [$gl_positive])])dnl -AC_CACHE_CHECK([whether _AC_LANG compiler handles $1], m4_defn([gl_Warn]), [ - gl_save_compiler_FLAGS="$gl_Flags" - gl_AS_VAR_APPEND(m4_defn([gl_Flags]), - [" $gl_unknown_warnings_are_errors ]m4_defn([gl_Positive])["]) - AC_LINK_IFELSE([m4_default([$4], [AC_LANG_PROGRAM([])])], - [AS_VAR_SET(gl_Warn, [yes])], - [AS_VAR_SET(gl_Warn, [no])]) - gl_Flags="$gl_save_compiler_FLAGS" -]) -AS_VAR_IF(gl_Warn, [yes], [$2], [$3]) -m4_popdef([gl_Positive])dnl -AS_VAR_POPDEF([gl_Flags])dnl -AS_VAR_POPDEF([gl_Warn])dnl -]) - -# gl_UNKNOWN_WARNINGS_ARE_ERRORS -# ------------------------------ -# Clang doesn't complain about unknown warning options unless one also -# specifies -Wunknown-warning-option -Werror. Detect this. -# -# The effects of this macro depend on the current language (_AC_LANG). -AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS], -[_AC_LANG_DISPATCH([$0], _AC_LANG, $@)]) - -# Specialization for _AC_LANG = C. This macro can be AC_REQUIREd. -# Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b. -m4_defun([gl_UNKNOWN_WARNINGS_ARE_ERRORS(C)], -[ - AC_LANG_PUSH([C]) - gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL - AC_LANG_POP([C]) -]) - -# Specialization for _AC_LANG = C++. This macro can be AC_REQUIREd. -# Use of m4_defun rather than AC_DEFUN works around a bug in autoconf < 2.63b. -m4_defun([gl_UNKNOWN_WARNINGS_ARE_ERRORS(C++)], -[ - AC_LANG_PUSH([C++]) - gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL - AC_LANG_POP([C++]) -]) - -AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS_IMPL], -[gl_COMPILER_OPTION_IF([-Werror -Wunknown-warning-option], - [gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'], - [gl_unknown_warnings_are_errors=])]) - -# gl_WARN_ADD(OPTION, [VARIABLE = WARN_CFLAGS/WARN_CXXFLAGS], -# [PROGRAM = AC_LANG_PROGRAM()]) -# ----------------------------------------------------------- -# Adds parameter to WARN_CFLAGS/WARN_CXXFLAGS if the compiler supports it -# when compiling PROGRAM. For example, gl_WARN_ADD([-Wparentheses]). -# -# If VARIABLE is a variable name, AC_SUBST it. -# -# The effects of this macro depend on the current language (_AC_LANG). -AC_DEFUN([gl_WARN_ADD], -[AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS(]_AC_LANG[)]) -gl_COMPILER_OPTION_IF([$1], - [gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_]_AC_LANG_PREFIX[FLAGS]], [[$2]]), [" $1"])], - [], - [$3]) -m4_ifval([$2], - [AS_LITERAL_IF([$2], [AC_SUBST([$2])])], - [AC_SUBST([WARN_]_AC_LANG_PREFIX[FLAGS])])dnl -]) - -# Local Variables: -# mode: autoconf -# End: diff --git a/scripts/announce-release.sh b/scripts/announce-release.sh deleted file mode 100755 index c7f8dea..0000000 --- a/scripts/announce-release.sh +++ /dev/null @@ -1,156 +0,0 @@ -#!/bin/sh - -set -e - -FROM_NAME='Patrick McDermott' -FROM_EMAIL='patrick.mcdermott@libiquity.com' -SIG="$(cat <<-EOF - Patrick McDermott, CEO - Libiquity - Putting customers in control of high-quality technologies - https://www.libiquity.com/ - EOF - )" -KEY='2250 31F0 47FF E516 63ED 516F 1A45 9ECD E4D6 04BE' -TO_EMAIL='proteanos-dev@lists.proteanos.com' - -package="${1}" -version="${2}" -package_name="${3}" -srcdir="${0%/scripts/announce-release.sh}" - -export GIT_DIR="${srcdir}/.git" - -heading() -{ - local name="${1}" - shift 1 - - printf '%s\n' "${name}" - printf '%s\n' "${name}" | sed 's/./=/g' -} - -about="$(sed -n ' - H; - ${ - g; - s/^\n*[^\n][^\n]*\n[=-][=-]*\n\n*//; - s/\n*[^\n][^\n]*\n[=-][=-]*\n.*$//; - p; - }; - ' "${srcdir}/README")" -news="$(sed -n ' - H; - ${ - g; - s/^\n*[^\n][^\n]*\n[=-][=-]*\n\n*//; - s/^Released: [^\n]*\n\n*//; - s/\n*[^\n][^\n]*\n[=-][=-]*\n.*$//; - p; - }; - ' "${srcdir}/NEWS")" -old_version="$(sed -n "/^${package_name} version /p;" "${srcdir}/NEWS" | \ - sed -n "2{ s/^${package_name} version / Since Version /p; };")" -old_tag="$(git tag --sort=-creatordate | sed -n '2{p;q;}')" -# Empty tree SHA-1 hash: -[ -z "${old_tag}" ] && old_tag='4b825dc642cb6eb9a060e54bf8d69288fbee4904' - -shortlog="$(git shortlog "${old_tag}..HEAD" | \ - sed '/^..*$/s/^//')" -if [ $(printf '%s\n' "${shortlog}" | wc -l) -gt 100 ]; then - shortlog="$(git shortlog -s "${old_tag}..HEAD"; cat <<-EOF - - Commit descriptions suppressed for brevity. To see a log summary with - descriptions, run: - - \$ git shortlog ${old_tag}..${package}/${version} - EOF - )" -fi -diffstat="$(git diff --stat=72 --color=never --find-renames=50% \ - "${old_tag}..HEAD")" -if [ $(printf '%s\n' "${diffstat}" | wc -l) -gt 50 ]; then - diffstat="$(printf '%s\n' "${diffstat}" | tail -n 1; cat <<-EOF - - Difference statistics truncated for brevity. To see full statistics, - run: - - \$ git diff --stat --find-renames=50% \\ - > ${old_tag}..${package}/${version} - EOF - )" -fi - -message="$({ cat | sed 's/=/=3D/g; s/ $/=20/; s/\t$/=09/;'; } <<-EOF - Content-Type: text/plain; charset=UTF-8 - Content-Transfer-Encoding: quoted-printable - - $(heading 'About') - - ${about} - - $(heading 'Downloading') - - Source archives are available from the files site by HTTP or FTP: - - http://files.proteanos.com/pub/${package}/${version}/ - ftp://files.proteanos.com/pub/${package}/${version}/ - - Here are the MD5 checksums: - - $(sed 's/^/ /' MD5SUMS) - - Here are the SHA-256 checksums: - - $(sed 's/^/ /' SHA256SUMS) - - The sources are maintained in a Git repository: - - http://git.proteanos.com/${package}/${package}.git/ - git://git.proteanos.com/${package}/${package}.git/ - - This release is marked by the "${package}/${version}" tag. - - $(heading "NEWS for Version ${version}") - - ${news} - - $(heading "Shortlog of Changes${old_version}") - - ${shortlog} - - $(heading "Diffstat of Changes${old_version}") - - ${diffstat} - - -- - ${SIG} - EOF - )" - -{ sed 's/$/\r/' | /usr/sbin/sendmail -f "${FROM_EMAIL}" \ - "${TO_EMAIL}"; } <<-EOF - Date: $(LC_ALL='POSIX' date '+%a, %d %b %Y %H:%M:%S %z') - From: ${FROM_NAME} <${FROM_EMAIL}> - To: ${TO_EMAIL} - Subject: ${package_name} ${version} released - Message-ID: $(LC_ALL='POSIX' date \ - '+%Y%m%d%H%M%S').${FROM_EMAIL} - Organization: Libiquity LLC - MIME-Version: 1.0 - Content-Type: multipart/signed; micalg=pgp-sha256; boundary="=-=-="; - protocol="application/pgp-signature" - - --=-=-= - ${message} - - --=-=-= - Content-Type: application/pgp-signature - Content-Description: OpenPGP digital signature - - $(printf '%s\n' "${message}" | sed 's/$/\r/' | \ - gpg --local-user "${KEY}" --armor --output - \ - --digest-algo SHA256 --detach-sign) - - --=-=-=-- - EOF diff --git a/src/commands.h b/src/commands.h deleted file mode 100644 index 697bb24..0000000 --- a/src/commands.h +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Command prototypes - * - * Copyright (C) 2019 Libiquity LLC - * - * This file is part of wolfutil. - * - * wolfutil 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 of the License, or - * (at your option) any later version. - * - * wolfutil 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 wolfutil. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifndef COMMANDS_H_ -#define COMMANDS_H_ - -int -s_client(int argc, char **argv); - -#endif /* COMMANDS_H_ */ diff --git a/src/local.mk b/src/local.mk deleted file mode 100644 index 86376d7..0000000 --- a/src/local.mk +++ /dev/null @@ -1,4 +0,0 @@ -wolfutil_SOURCES += \ - %reldir%/commands.h \ - %reldir%/main.c \ - %reldir%/s_client.c diff --git a/src/main.c b/src/main.c deleted file mode 100644 index f89cb74..0000000 --- a/src/main.c +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Program entry point - * - * Copyright (C) 2019 Libiquity LLC - * - * This file is part of wolfutil. - * - * wolfutil 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 of the License, or - * (at your option) any later version. - * - * wolfutil 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 wolfutil. If not, see <http://www.gnu.org/licenses/>. - */ - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -#include "commands.h" - -static void -usage(FILE *stream, const char *program_name) -{ - fprintf(stream, "Usage: %s s_client [options]\n", program_name); -} - -int -main(int argc, char **argv) -{ - if (argc < 2 || strcmp(argv[1], "s_client") != 0) { - usage(stderr, argv[0]); - return EXIT_FAILURE; - } - - return s_client(argc - 2, argv + 2); -} diff --git a/src/s_client.c b/src/s_client.c deleted file mode 100644 index cf7440d..0000000 --- a/src/s_client.c +++ /dev/null @@ -1,289 +0,0 @@ -/* - * s_client command - * - * Copyright (C) 2019 Libiquity LLC - * - * This file is part of wolfutil. - * - * wolfutil 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 of the License, or - * (at your option) any later version. - * - * wolfutil 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 wolfutil. If not, see <http://www.gnu.org/licenses/>. - */ - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <errno.h> -#include <netdb.h> -#include <poll.h> -#include <stdbool.h> -#include <stdlib.h> -#include <stdio.h> -#include <string.h> -#include <sys/socket.h> -#include <unistd.h> - -#include <wolfssl/options.h> -#include <wolfssl/ssl.h> -#include <wolfssl/wolfcrypt/settings.h> - -#include "commands.h" - -#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) -#undef MAX -#define MAX(a, b) (((a) > (b)) ? (a) : (b)) -#undef MIN -#define MIN(a, b) (((a) < (b)) ? (a) : (b)) - -static _Bool -parse_host_port(char *hostport, char **host, char **port) -{ - *host = hostport; - /* XXX: Port is required. Otherwise, this will mangle IPv6 addresses - * without some more intelligent (and larger) code. */ - *port = strrchr(*host, ':'); - if (*port == NULL) { - fputs("Port is required\n", stderr); - return false; - } - **port = '\0'; - ++*port; - - return true; -} - -static int -connect_socket(const char *host, const char *port) -{ - struct addrinfo hints = {0}; - struct addrinfo *result; - int s; - struct addrinfo *rp; - int sfd; - - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_flags = AI_PASSIVE; - hints.ai_protocol = 0; - - s = getaddrinfo(host, port, &hints, &result); - if (s != 0) { - fprintf(stderr, "Failed to resolve host and port: %s\n", - gai_strerror(s)); - return -1; - } - - for (rp = result; rp != NULL; rp = rp->ai_next) { - sfd = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - if (sfd == -1) { - continue; - } - if (connect(sfd, rp->ai_addr, rp->ai_addrlen) == -1) { - close(sfd); - continue; - } - break; - } - if (rp == NULL) { - fputs("Failed to connect\n", stderr); - sfd = -1; - } - - freeaddrinfo(result); - - return sfd; -} - -static _Bool -write_all(int fd, const void *buf, size_t count) -{ - ssize_t ret; - - while (count > 0) { - while ((ret = write(fd, buf, count)) < 0 && errno == EINTR) { - continue; - } - if (ret < 0) { - return false; - } - buf = ((const char *) buf) + ret; - count -= ret; - } - - return true; -} - -static _Bool -poll_fds(int sfd, WOLFSSL *ssl) -{ - struct pollfd fds[2] = { - { .fd = -1, .events = POLLIN|POLLERR, .revents = 0 }, - { .fd = -1, .events = POLLIN|POLLERR, .revents = 0 }, - }; - char buf[MAX(8192, WOLFSSL_MAX_ERROR_SZ)]; - ssize_t len; - int ret; - - fds[0].fd = STDIN_FILENO; - fds[1].fd = sfd; - - for (;;) { - while (poll(fds, ARRAY_SIZE(fds), -1) < 0 && (errno == EINTR || - errno == EAGAIN)) { - continue; - } - if (fds[0].revents > 0) { /* stdin */ - len = read(STDIN_FILENO, buf, sizeof(buf)); - if (len < 0) { - fputs("Input read error\n", stderr); - return false; - } else if (len == 0) { - fds[0].fd = -1; /* Stop polling. */ - } else if ((ret = wolfSSL_write(ssl, buf, len)) <= 0) { - wolfSSL_ERR_error_string(wolfSSL_get_error(ssl, - ret), buf); - fprintf(stderr, "Socket write error: %s\n", - buf); - return false; - } - } - if (fds[1].revents > 0) { /* socket */ - ret = wolfSSL_read(ssl, buf, MIN(sizeof(buf), 1024)); - if (ret < 0) { - wolfSSL_ERR_error_string(wolfSSL_get_error(ssl, - ret), buf); - fprintf(stderr, "Socket read error: %s\n", - buf); - return false; - } else if (ret == 0) { - fds[1].fd = -1; /* Stop polling. */ - close(STDOUT_FILENO); /* Signal socket EOF. */ - } else if (write_all(STDOUT_FILENO, buf, (size_t) ret) - == false) { - return false; - } - } - if (fds[0].fd == fds[1].fd) { /* Both -1 (no longer polled) */ - return true; - } - } - - /* Unreached */ -} - -int -s_client(int argc, char **argv) -{ - _Bool quiet = false; - char *host = NULL; - char *port = NULL; - const char *servername = NULL; - int ret = EXIT_FAILURE; - WOLFSSL_METHOD *method; - WOLFSSL_CTX *ctx = NULL; - WOLFSSL *ssl = NULL; - int sfd = -1; - int err; - char buf[WOLFSSL_MAX_ERROR_SZ]; - - for (; argc > 0; --argc, ++argv) { - if (strcmp(*argv, "-quiet") == 0) { - quiet = true; - } else if (strcmp(*argv, "-connect") == 0) { - --argc, ++argv; - if (parse_host_port(*argv, &host, &port) == false) { - return EXIT_FAILURE; - } - } else if (strcmp(*argv, "-servername") == 0) { - --argc, ++argv; - servername = *argv; - } else if (**argv == '-') { - fprintf(stderr, "Unsupported option \"%s\"\n", *argv); - } - } - - wolfSSL_Init(); - - if (quiet == false) { - wolfSSL_Debugging_ON(); - } - - if ( - (method = wolfTLSv1_2_client_method()) == NULL || - (ctx = wolfSSL_CTX_new(method)) == NULL || -#ifdef HAVE_CERTIFICATE_STATUS_REQUEST_V2 - wolfSSL_CTX_EnableOCSPStapling(ctx) != WOLFSSL_SUCCESS - || wolfSSL_CTX_UseOCSPStaplingV2(ctx, - WOLFSSL_CSR2_OCSP_MULTI, 0) != - WOLFSSL_SUCCESS || -#endif -#ifdef HAVE_CERTIFICATE_STATUS_REQUEST - wolfSSL_CTX_EnableOCSPStapling(ctx) != WOLFSSL_SUCCESS - || wolfSSL_CTX_UseOCSPStapling(ctx, WOLFSSL_CSR_OCSP, 0) - != WOLFSSL_SUCCESS || -#endif -#ifdef HAVE_OCSP - wolfSSL_CTX_EnableOCSP(ctx, WOLFSSL_OCSP_CHECKALL) != - WOLFSSL_SUCCESS || -#endif -#if defined(HAVE_CRL) && defined(HAVE_CRL_IO) - wolfSSL_CTX_EnableCRL(ctx, WOLFSSL_CRL_CHECKALL) != - WOLFSSL_SUCCESS || -#endif -#ifdef HAVE_SNI - (servername != NULL && wolfSSL_CTX_UseSNI(ctx, - WOLFSSL_SNI_HOST_NAME, servername, - strlen(servername)) != WOLFSSL_SUCCESS) || -#endif - (ssl = wolfSSL_new(ctx)) == NULL || - wolfSSL_check_domain_name(ssl, servername) != - WOLFSSL_SUCCESS - ) { - fputs("Out of memory\n", stderr); - goto error; - } - -#if defined(HAVE_CA_CERTS) && HAVE_CA_CERTS - if (wolfSSL_CTX_load_verify_locations_ex(ctx, - CA_CERTS_FILE, CA_CERTS_DIR, - WOLFSSL_LOAD_FLAG_IGNORE_ERR) != - WOLFSSL_SUCCESS) { - fputs("Failed to load CA certificates\n", stderr); - goto error; - } -#endif - - if ((sfd = connect_socket(host, port)) == -1) { - goto error; - } - wolfSSL_set_fd(ssl, sfd); - - if ((err = wolfSSL_connect(ssl)) != WOLFSSL_SUCCESS) { - wolfSSL_ERR_error_string(wolfSSL_get_error(ssl, err), buf); - fprintf(stderr, "Handshake error: %s\n", buf); - goto error; - } - - if (poll_fds(sfd, ssl) == false) { - goto error; - } - - ret = EXIT_SUCCESS; -error: - close(sfd); - wolfSSL_free(ssl); - wolfSSL_CTX_free(ctx); - wolfSSL_Cleanup(); - - return ret; -} diff --git a/tests/.gitignore b/tests/.gitignore deleted file mode 100644 index 7e563b8..0000000 --- a/tests/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -*.log -*.trs diff --git a/tests/aux/json.sh b/tests/aux/json.sh deleted file mode 100644 index 3c9783f..0000000 --- a/tests/aux/json.sh +++ /dev/null @@ -1,402 +0,0 @@ -# `json.sh`, a pure-shell JSON parser. -# -# Copied from <lib/json.sh> in repository <https://github.com/rcrowley/json.sh>. -# -# Copyright 2011 Richard Crowley. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY RICHARD CROWLEY AS IS'' AND ANY EXPRESS -# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -# DISCLAIMED. IN NO EVENT SHALL RICHARD CROWLEY OR CONTRIBUTORS BE LIABLE -# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF -# THE POSSIBILITY OF SUCH DAMAGE. -# -# The views and conclusions contained in the software and documentation -# are those of the authors and should not be interpreted as representing -# official policies, either expressed or implied, of Richard Crowley. - -set -e - -# Most users will be happy with the default '/' separator that makes trees -# of keys look like filesystem paths but that breaks down if keys can -# contain slashes. In that case, set `JSON_SEPARATOR` to desired character. -[ -z "$JSON_SEPARATOR" ] && _J_S="/" || _J_S="$JSON_SEPARATOR" - -# File descriptor 3 is commandeered for debug output, which may end up being -# forwarded to standard error. -[ -z "$JSON_DEBUG" ] && exec 3>/dev/null || exec 3>&2 - -# File descriptor 4 is commandeered for use as a sink for literal and -# variable output of (inverted) sections that are not destined for standard -# output because their condition is not met. -exec 4>/dev/null - -# Consume standard input one character at a time to parse JSON. -json() { - - # Initialize the file descriptor to be used to emit characters. At - # times this value will be 4 to send output to `/dev/null`. - _J_FD=1 - - # Initialize storage for the "pathname", the concatenation of all - # the keys in the tree at any point in time, the current state of - # the machine, and the state to which the machine returns after - # completing a key or value. - _J_PATHNAME="$_J_S" _J_STATE="whitespace" _J_STATE_DEFAULT="whitespace" - - # IFS must only contain '\n' so as to be able to read space and tab - # characters from standard input one-at-a-time. The easiest way to - # convince it to actually contain the correct byte, and only the - # correct byte, is to use a single-quoted literal newline. - IFS=' -' - - # Consuming standard input one character at a time is quite a feat - # within the confines of POSIX shell. Bash's `read` builtin has - # `-n` for limiting the number of characters consumed. Here it is - # faked using `sed`(1) to place each character on its own line. - # The subtlety is that real newline characters are chomped so they - # must be indirectly detected by checking for zero-length - # characters, which is done as the character is emitted. - sed " - s/./&$(printf "\036")/g - s/\\\\/\\\\\\\\/g - " | tr "\036" "\n" | _json - - # TODO Replace the original value of IFS. Be careful if it's unset. - -} - -# Consume the one-character-per-line stream from `sed` via a state machine. -# This function will be called recursively in subshell environments to -# isolate values from their containing scope. -# -# The `read` builtin consumes one line at a time but by now each line -# contains only a single character. -_json() { - while read _J_C - do - _json_char - _J_PREV_C="$_J_C" - done -} - -# Consume a single character as stored in `_J_C`. This function is broken -# out from `_json` so it may be called to reconsume a character as is -# necessary following the end of any number since numbers do not have a -# well-known ending in the grammar. -# -# The state machine implemented here follows very naturally from the -# diagrams of the JSON grammar on <http://json.org>. -_json_char() { - echo " _J_C: $_J_C (${#_J_C}), _J_STATE: $_J_STATE" >&3 - case "$_J_STATE" in - - # The machine starts in the "whitespace" state and learns - # from leading characters what state to enter next. JSON's - # grammar doesn't contain any tokens that are ambiguous in - # their first character so the parser's job is relatively - # easier. - # - # Further whitespace characters are consumed and ignored. - # - # Arrays are unique in that their parsing rules are a strict - # superset of the rules in open whitespace. When an opening - # bracket is encountered, the remainder of the array is - # parsed in a subshell which goes around again when a comma - # is encountered and exits back to the containing scope when - # the closing bracket is encountered. - # - # Objects are not parsed as a superset of open whitespace but - # they are parsed in a subshell to protect the containing scope. - "array-0"|"array-even"|"array-odd"|"whitespace") - case "$_J_STATE" in - "array-0") - case "$_J_C" in - "]") exit;; - esac;; - "array-even") - case "$_J_C" in - ",") - _J_DIRNAME="${_J_PATHNAME%"$_J_S"*}" - [ "$_J_DIRNAME" = "$_J_S" ] && _J_DIRNAME="" - _J_BASENAME="${_J_PATHNAME##*"$_J_S"}" - _J_BASENAME="$(($_J_BASENAME + 1))" - _J_PATHNAME="$_J_DIRNAME$_J_S$_J_BASENAME" - _J_STATE="array-odd" - return;; - "]") exit;; - esac;; - esac - case "$_J_C" in - "\"") _J_STATE="string" _J_V="";; - "-") _J_STATE="number-negative" _J_V="$_J_C";; - 0) _J_STATE="number-leading-zero" _J_V="$_J_C";; - [1-9]) _J_STATE="number-leading-nonzero" _J_V="$_J_C";; - "[") - ( - [ "$_J_PATHNAME" = "/" ] && _J_PATHNAME="" - _J_PATHNAME="$_J_PATHNAME/0" - _J_STATE="array-0" _J_STATE_DEFAULT="array-even" - _json - ) - _J_STATE="$_J_STATE_DEFAULT" _J_V="";; - "f"|"t") _J_STATE="boolean" _J_V="$_J_C";; - "n") _J_STATE="null" _J_V="$_J_C";; - "{") - ( - _J_STATE="object-0" _J_STATE_DEFAULT="object-even" - _json - ) - _J_STATE="$_J_STATE_DEFAULT" _J_V="";; - " "|""|" ") ;; - *) _json_die "syntax: $_J_PATHNAME";; - esac;; - - # Boolean values are multicharacter literals but they're unique - # from their first character. This means the eventual value is - # already known when the "boolean" state is entered so we can - # raise syntax errors as soon as the input goes south. - "boolean") - case "$_J_V$_J_C" in - "f"|"fa"|"fal"|"fals"|"t"|"tr"|"tru") _J_V="$_J_V$_J_C";; - "false"|"true") - _J_STATE="$_J_STATE_DEFAULT" - echo "$_J_PATHNAME boolean $_J_V$_J_C" >&$_J_FD;; - *) _json_die "syntax: $_J_PATHNAME boolean $_J_V$_J_C";; - esac;; - - # Object values are relatively more complex than array values. - # They begin in the "object-0" state, which is almost but not - # quite a subset of the "whitespace" state for strings. When - # a string is encountered it is parsed as usual but the parser - # is set to return to the "object-value" state afterward. - # - # As in the "whitespace" state, extra whitespace characters - # are consumed and ignored. - # - # The parser will return to this "object" state later to - # either consume a comma and go around again or exit the - # subshell in which this object has been parsed. - "object-0") - case "$_J_C" in - "\"") - _J_FD=4 - _J_STATE="string" - _J_STATE_DEFAULT="object-value" - _J_V="";; - "}") exit;; - " "|""|" ") ;; - *) _json_die "syntax: $_J_PATHNAME";; - esac;; - - # "object-even" is like "object-0" but additionally commas are - # consumed to enforce the another key/value pair is coming. - "object-even") - case "$_J_C" in - "\"") - _J_FD=4 - _J_STATE="string" - _J_STATE_DEFAULT="object-value" - _J_V="";; - ",") _J_STATE="object-odd";; - "}") exit;; - " "|""|" ") ;; - *) _json_die "syntax: $_J_PATHNAME";; - esac;; - - # Object values have to return from whence they came. They use - # the "object-exit" state to signal the last character consumed - # to the containing scope. - "object-exit") #exit;; - case "$_J_C" in - ",") exit 101;; - "}") exit 102;; - *) exit 0;; - esac;; - - # "object-even" is like "object-0" but cannot consume a closing - # brace because it has just consumed a comma. - "object-odd") - case "$_J_C" in - "\"") - _J_FD=4 - _J_STATE="string" - _J_STATE_DEFAULT="object-value" - _J_V="";; - " "|""|" ") ;; - *) _json_die "syntax: $_J_PATHNAME";; - esac;; - - # After a string key has been consumed, the state machine - # progresses here where a colon and a value are parsed. The - # value is parsed in a subshell so the pathname can have the - # key appended to it before the parser continues. - "object-value") - case "$_J_C" in - ":") - _J_FD=1 - ( - [ "$_J_PATHNAME" = "/" ] && _J_PATHNAME="" - _J_PATHNAME="$_J_PATHNAME/$_J_V" - _J_STATE="whitespace" - _J_STATE_DEFAULT="object-exit" - _json - ) || case "$?" in - 101) _J_STATE="object-even" _J_C="," _json_char;; - 102) _J_STATE="object-even" _J_C="}" _json_char;; - esac - _J_STATE="object-even";; - " "|""|" ") ;; - *) _json_die "syntax: $_J_PATHNAME";; - esac;; - - # Null values work exactly like boolean values. See above. - "null") - case "$_J_V$_J_C" in - "n"|"nu"|"nul") _J_V="$_J_V$_J_C";; - "null") - _J_STATE="$_J_STATE_DEFAULT" - echo "$_J_PATHNAME null null" >&$_J_FD;; - *) _json_die "syntax: $_J_PATHNAME null $_J_V$_J_C";; - esac;; - - # Numbers that encounter a '.' become floating point and may - # continue consuming digits forever or may become - # scientific-notation. Any other character sends the parser - # back to its default state. - "number-float") - case "$_J_C" in - [0-9]) _J_V="$_J_V$_J_C";; - "E"|"e") _J_STATE="number-sci" _J_V="$_J_V$_J_C";; - *) - _J_STATE="$_J_STATE_DEFAULT" - echo "$_J_PATHNAME number $_J_V" >&$_J_FD - _json_char;; - esac;; - - # This is an entrypoint into parsing a number, used when - # the first digit consumed is non-zero. From here, a number - # may continue on a positive integer, become a floating-point - # number by consuming a '.', or become scientific-notation by - # consuming an 'E' or 'e'. Any other character sends the - # parser back to its default state. - "number-leading-nonzero") - case "$_J_C" in - ".") _J_STATE="number-float" _J_V="$_J_V$_J_C";; - [0-9]) _J_V="$_J_V$_J_C";; - "E"|"e") _J_STATE="number-sci" _J_V="$_J_V$_J_C";; - *) - _J_STATE="$_J_STATE_DEFAULT" - echo "$_J_PATHNAME number $_J_V" >&$_J_FD - _json_char;; - esac;; - - # This is an entrypoint into parsing a number, used when - # the first digit consumed is zero. From here, a number - # may remain zero, become a floating-point number by - # consuming a '.', or become scientific-notation by consuming - # an 'E' or 'e'. Any other character sends the parser back - # to its default state. - "number-leading-zero") - case "$_J_C" in - ".") _J_STATE="number-float" _J_V="$_J_V$_J_C";; - [0-9]) _json_die "syntax: $_J_PATHNAME number $_J_V$_J_C";; - "E"|"e") _J_STATE="number-sci" _J_V="$_J_V$_J_C";; - *) - _J_STATE="$_J_STATE_DEFAULT" - echo "$_J_PATHNAME number $_J_V" >&$_J_FD - _json_char;; - esac;; - - # This is an entrypoint into parsing a number, used when - # the first character consumed is a '-'. From here, a number - # may progress to the "number-leading-nonzero" or - # "number-leading-zero" states. Any other character sends - # the parser back to its default state. - "number-negative") - case "$_J_C" in - 0) _J_STATE="number-leading-zero" _J_V="$_J_V$_J_C";; - [1-9]) - _J_STATE="number-leading-nonzero" - _J_V="$_J_V$_J_C";; - *) - _J_STATE="$_J_STATE_DEFAULT" - echo "$_J_PATHNAME number $_J_V" >&$_J_FD - _json_char;; - esac;; - - # Numbers that encounter an 'E' or 'e' become - # scientific-notation and consume digits, optionally prefixed - # by a '+' or '-', forever. The actual consumption is - # delegated to the "number-sci-neg" and "number-sci-pos" - # states. Any other character immediately following the 'E' - # or 'e' is a syntax error. - "number-sci") - case "$_J_C" in - "+") _J_STATE="number-sci-pos" _J_V="$_J_V$_J_C";; - "-") _J_STATE="number-sci-neg" _J_V="$_J_V$_J_C";; - [0-9]) _J_STATE="number-sci-pos" _J_V="$_J_V$_J_C";; - *) _json_die "syntax: $_J_PATHNAME number $_J_V$_J_C";; - esac;; - - # Once in these states, numbers may consume digits forever. - # Any other character sends the parser back to its default - # state. - "number-sci-neg"|"number-sci-pos") - case "$_J_C" in - [0-9]) _J_V="$_J_V$_J_C";; - *) - _J_STATE="$_J_STATE_DEFAULT" - echo "$_J_PATHNAME number $_J_V" >&$_J_FD - _json_char;; - esac;; - - # Strings aren't as easy as they look. JSON supports several - # escape sequences that require the state machine to keep a - # history of its input. Basic backslash/newline/etc. escapes - # are simple because they only require one character of - # history. Unicode codepoint escapes require more. The - # strategy there is to add states to the machine. - # - # TODO It'd be nice to decode all escape sequences, including - # Unicode codepoints but that would definitely ruin the - # line-oriented thing we've got goin' on. - "string") - case "$_J_PREV_C$_J_C" in - "\\\""|"\\/"|"\\\\") _J_V="$_J_V$_J_C";; - "\\b"|"\\f"|"\\n"|"\\r") _J_V="$_J_V\\\\$_J_C";; - "\\u") _J_V="$_J_V\\\\$_J_C";; - *"\"") - _J_STATE="$_J_STATE_DEFAULT" - echo "$_J_PATHNAME string $_J_V" >&$_J_FD;; - *"\\") ;; - *) _J_V="$_J_V$_J_C";; - esac;; - - esac -} - -# Print an error message and GTFO. The message is the concatenation -# of all the arguments to this function. -_json_die() { - echo "json.sh: $*" >&2 - exit 1 -} diff --git a/tests/aux/tap-functions.sh b/tests/aux/tap-functions.sh deleted file mode 100644 index 29ff437..0000000 --- a/tests/aux/tap-functions.sh +++ /dev/null @@ -1,229 +0,0 @@ -# -*- shell-script -*- -# -# Copyright (C) 2011-2017 Free Software Foundation, Inc. -# -# This program 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. -# -# This program 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 this program. If not, see <http://www.gnu.org/licenses/>. - -# Helper functions used by TAP-producing tests of the Automake testsuite. - -# -# IMPORTANT: All the functions defined in this file can *not* be used -# from within a subshell, unless explicitly noted otherwise. -# - -# The counts of the TAP test results seen so far: total count and -# per-result counts. -tap_count_=0 -tap_pass_count_=0 -tap_skip_count_=0 -tap_fail_count_=0 -tap_xfail_count_=0 -tap_xpass_count_=0 - -# not COMMAND [ARGS...] -# --------------------- -# Run the given command and invert its exit status. -not () { ! "$@"; } - -# plan_ [unknown|later|lazy|now|NUMBER-OF-PLANNED-TESTS] -# ------------------------------------------------------ -# Print a TAP plan for the given number of tests. This must be called -# before reporting any test result. If called with the special argument -# "unknown" or "later", it will do nothing, expecting the calling script -# to declare the plan later. If called with the special argument "lazy" -# or "now", it will print a TAP plan that accounts for the number of tests -# seen so far. -plan_ () -{ - if test $# -eq 0; then - bailout_ "plan_: missing argument" - elif test $# -ge 2; then - bailout_ "plan_: too many arguments" - elif test x"$planned_" != x"none" && test x"$planned_" != x"later"; then - bailout_ "plan_: called to many times" - elif test x"$1" = x"unknown" || test x"$1" = x"later"; then - # This means we want to get back later to declaring the TAP plan. - planned_=later - return 0 - elif test x"$1" = x"lazy" || test x"$1" = x"now"; then - planned_=$tap_count_ # Number of test results seen so far. - elif test $1 -ge 0; then - planned_=$1 - else - bailout_ "plan_: invalid argument '$1'" - fi - echo "1..$planned_" -} -planned_=none - -# diag_ [EXPLANATION] -# ------------------ -# Report the given text as TAP diagnostic. Assumes the string denoting -# TAP diagnostic lines is stored in the '$diag_string_' variable; this is -# done to allow better interplay with TAP drivers that allow such a string -# to be configured. -diag_ () -{ - test $# -eq 0 || echo "$diag_string_ $*" -} - -# Used by the 'diag_' function above. User-overridable. -diag_string_="#" - -# warn_ [EXPLANATION] -# ------------------ -# Give a warning (using TAP diagnostic). -warn_ () -{ - case $# in - 0) diag_ "WARNING: (unknown warning)";; - *) diag_ "WARNING: $*";; - esac -} - -# result_ RESULT [-D DIRECTIVE] [-r REASON] [--] [DESCRIPTION...] -# --------------------------------------------------------------- -# Report a test case with the given RESULT (valid values are "ok" and -# "not ok") and the given DESCRIPTION (if any). If DIRECTIVE is given -# and non-empty (valid values being "TODO" and "SKIP"), it will be -# reported too, with the REASON (if given) appended. -result_ () -{ - test $# -gt 0 || bailout_ "result_: missing argument" - tap_result_=$1; shift - case $tap_result_ in - "ok"|"not ok") ;; - *) bailout_ "result_: invalid result '$tap_result'" ;; - esac - tap_directive_= tap_reason_= - while test $# -gt 0; do - case $1 in - -D|--directive) tap_directive_=$2; shift;; - -r|--reason) tap_reason_=$2; shift;; - --) shift; break;; - -*) bailout_ "result_: invalid option '$1'";; - *) break;; - esac - shift - done - case $tap_directive_ in - ""|TODO|SKIP) ;; - *) bailout_ "result_: invalid directive '$directive_'" ;; - esac - tap_count_=$(($tap_count_ + 1)) - case $tap_result_,$tap_directive_ in - ok,) # Passed. - tap_pass_count_=$(($tap_pass_count_ + 1)) ;; - not\ ok,TODO) # Expected failure. - tap_xfail_count_=$(($tap_xfail_count_ + 1)) ;; - not\ ok,*) # Failed. - tap_fail_count_=$(($tap_fail_count_ + 1)) ;; - ok,TODO) # Unexpected pass. - tap_xpass_count_=$(($tap_xpass_count_ + 1)) ;; - ok,SKIP) # Skipped. - tap_skip_count_=$(($tap_skip_count_ + 1)) ;; - *) # Can't happen. - bailout_ "internal error in 'result_'" ;; - esac - tap_text_="$tap_result_ $tap_count_" - if test x"$*" != x; then - tap_text_="$tap_text_ - $*" - fi - if test x"$tap_directive_" != x; then - tap_text_="$tap_text_ # $tap_directive_"${tap_reason_:+" $tap_reason_"} - fi - printf '%s\n' "$tap_text_" -} - -# Shorthands for common usages of 'result_'. -ok_ () { result_ 'ok' ${1+"$@"}; } -not_ok_ () { result_ 'not ok' ${1+"$@"}; } -skip_ () { result_ 'ok' -D SKIP ${1+"$@"}; } - -# skip_row_ COUNT [-r REASON] [--] [DESCRIPTION...] -# ------------------------------------------------- -# Report a COUNT of skipped test, with the given reason and descriptions -# (if any). Useful to avoid cascade failures in case a fair number of -# tests depend on an earlier one that failed. -skip_row_ () -{ - skip_count_=$1; shift - for i_ in $(seq_ $skip_count_); do skip_ ${1+"$@"}; done -} - -# skip_all_ [REASON ...] -# ---------------------- -# Skip all the tests in a test script. Must be used before calling 'plan_' -# or reporting any test result. Can't be used from within a subshell. -skip_all_ () -{ - echo "1..0 # SKIP" ${1+"$@"} - planned_=0 - exit 0 -} - -# bailout_ [REASON ...] -# --------------------- -# Stop the execution of the current test suite right now, due to an -# unrecoverable error. Can be called at any point, but cannot be used -# from within a subshell. -bailout_ () -{ - echo 'Bail out!' ${1+"$@"} - exit 99 -} - -# fatal_ [REASON ...] -# ------------------- -# Same as 'bailout_'; for compatibility with 'plain-functions.sh'. -fatal_ () -{ - bailout_ ${1+"$@"} -} - -# framework_failure_ [REASON ...] -# ------------------------------- -# Stop the execution of the current test suite right now, due to an -# unrecoverable error in the set-up of the test case. Can be called -# at any point, but cannot be used from within a subshell. -framework_failure_ () -{ - bailout_ "set-up failure"${1+": $*"} -} - -# command_ok_ TEST-DESCRIPTION [OPTIONS..] [--] CMD [ARGS...] -# ----------------------------------------------------------- -# Helper subroutine for when a TAP result must be determined by the -# outcome of a command. -command_ok_ () -{ - tap_directive_= tap_reason_= - test $# -gt 0 || bailout_ "command_ok_: missing argument" - tap_description_=$1; shift - while test $# -gt 0; do - case $1 in - -D|--directive) tap_directive_=$2; shift;; - -r|--reason) tap_reason_=$2; shift;; - --) shift; break;; - -*) bailout_ "command_ok_: invalid option '$1'";; - *) break;; - esac - shift - done - tap_result_="ok"; "$@" || tap_result_="not ok" - result_ "$tap_result_" -D "$tap_directive_" -r "$tap_reason_" \ - -- "$tap_description_" -} - -: diff --git a/tests/badssl.sh b/tests/badssl.sh deleted file mode 100755 index 90e1795..0000000 --- a/tests/badssl.sh +++ /dev/null @@ -1,119 +0,0 @@ -# Tests using Google's badssl.com Web service -# -# Copyright (C) 2019 Libiquity LLC -# -# This file is part of wolfutil. -# -# wolfutil 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 of the License, or -# (at your option) any later version. -# -# wolfutil 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 wolfutil. If not, see <http://www.gnu.org/licenses/>. - -set -eu - -. "${TOP_SRCDIR}/tests/aux/tap-functions.sh" - -do_test() -{ - local directive="${1}" - local ok="${2}" - local host="${3}" - local port="${4}" - shift 4 - local out= - local result= - - if out="$(${ok} "${TOP_BUILDDIR}/wolfutil" s_client \ - -connect "${host}.badssl.com:${port}" \ - -servername "${host}.badssl.com" 2>&1 \ - <<-EOF - GET / HTTP/1.1 - Host: ${host}.badssl.com:${port} - Connection: close - - EOF - )" - then - result='ok' - else - result='not ok' - fi - printf '%s\n' "${out}" | sed 's/^/ | /' - result_ "${result}" -D "${directive}" -- "${ok} ${host}" -} - -plan_ 38 - -# Certificate - -do_test '' 'not' 'expired' 443 -do_test '' 'not' 'wrong.host' 443 -do_test '' 'not' 'self-signed' 443 -do_test '' 'not' 'untrusted-root' 443 -do_test '' 'not' 'revoked' 443 - -do_test 'TODO' ' ' 'no-common-name' 443 -diag_ 'no-common-name fails since 2020-06-23 due to an expired certificate:' -diag_ 'https://github.com/chromium/badssl.com/issues/447' -do_test 'TODO' ' ' 'no-subject' 443 -diag_ 'no-subject fails since 2020-06-23 due to an expired certificate:' -diag_ 'https://github.com/chromium/badssl.com/issues/447' -do_test '' 'not' 'incomplete-chain' 443 - -do_test '' ' ' 'sha256' 443 -do_test '' ' ' 'sha384' 443 -do_test '' ' ' 'sha512' 443 - -do_test '' 'not' '1000-sans' 443 -do_test '' 'not' '10000-sans' 443 - -do_test '' ' ' 'ecc256' 443 -do_test '' ' ' 'ecc384' 443 - -do_test '' ' ' 'rsa2048' 443 -do_test '' ' ' 'rsa4096' 443 -do_test '' 'not' 'rsa8192' 443 - -do_test '' ' ' 'extended-validation' 443 - -# HTTP - -do_test '' 'not' 'http' 80 - -# Cipher Suite - -do_test '' 'not' 'cbc' 443 -do_test '' 'not' 'rc4-md5' 443 -do_test '' 'not' 'rc4' 443 -do_test '' 'not' '3des' 443 -do_test '' 'not' 'null' 443 - -do_test 'TODO' 'not' 'mozilla-old' 443 -do_test '' ' ' 'mozilla-intermediate' 443 -do_test '' ' ' 'mozilla-modern' 443 - -# Key Exchange - -do_test '' 'not' 'dh480' 443 -do_test '' 'not' 'dh512' 443 -do_test '' 'not' 'dh1024' 443 -do_test '' ' ' 'dh2048' 443 - -do_test 'TODO' 'not' 'dh-small-subgroup' 443 -do_test '' 'not' 'dh-compsite' 443 - -do_test '' 'not' 'static-rsa' 443 - -# Protocol - -do_test '' 'not' 'tls-v1-0' 1010 -do_test '' 'not' 'tls-v1-1' 1011 -do_test '' ' ' 'tls-v1-2' 1012 diff --git a/tests/howsmyssl.sh b/tests/howsmyssl.sh deleted file mode 100755 index d9ee89e..0000000 --- a/tests/howsmyssl.sh +++ /dev/null @@ -1,67 +0,0 @@ -# Tests using Jeff Hodges's How's My SSL? Web service -# -# Copyright (C) 2019 Libiquity LLC -# -# This file is part of wolfutil. -# -# wolfutil 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 of the License, or -# (at your option) any later version. -# -# wolfutil 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 wolfutil. If not, see <http://www.gnu.org/licenses/>. - -set -eu - -. "${TOP_SRCDIR}/tests/aux/tap-functions.sh" -JSON_SEPARATOR='/' JSON_DEBUG='' . "${TOP_SRCDIR}/tests/aux/json.sh" - -test_grep() -{ - printf '%s\n' "${members}" | grep "${@}" -} - -plan_ 7 - -json="$(printf 'GET /a/check HTTP/1.1\r\n'$(: \ - )'Host: www.howsmyssl.com:443\r\nConnection: close\r\n\r\n' | \ - "${TOP_BUILDDIR}/wolfutil" s_client \ - -connect www.howsmyssl.com:443 \ - -servername www.howsmyssl.com | \ - sed -n 's/\r$//; /^{/,$p')" -printf '%s\n' - -IFS=' -' -printf '# JSON:\n' -printf '# %s\n' ${json} -unset IFS - -members="$(printf '%s\n' "${json}" | json)" - -IFS=' -' -printf '# Parsed members:\n' -printf '# %s\n' ${members} -unset IFS - -command_ok_ 'Ephemeral keys supported' -- \ - test_grep -q '^/ephemeral_keys_supported boolean true$' -command_ok_ 'No TLS compression supported' -- \ - test_grep -q '^/tls_compression_supported boolean false$' -command_ok_ 'No unknown cipher suites supported' -- \ - test_grep -q '^/unknown_cipher_suite_supported boolean false$' -command_ok_ 'No BEAST vulnerability' -- \ - test_grep -q '^/beast_vuln boolean false$' -command_ok_ 'No weak cipher suites supported' -- \ - test_grep -vq '^/insecure_cipher_suites/' -command_ok_ 'TLS 1.2' -- \ - test_grep -q '^/tls_version string TLS 1.2$' -command_ok_ 'Probably OK' -- \ - test_grep -q '^/rating string Probably Okay$' diff --git a/tests/local.mk b/tests/local.mk deleted file mode 100644 index 5b5be3b..0000000 --- a/tests/local.mk +++ /dev/null @@ -1,14 +0,0 @@ -TESTS = \ - %reldir%/badssl.sh \ - %reldir%/howsmyssl.sh -TEST_EXTENSIONS = .sh -SH_LOG_DRIVER = \ - AM_TAP_AWK='$(AWK)' \ - TOP_SRCDIR="$(abs_top_srcdir)" \ - TOP_BUILDDIR="$(abs_top_builddir)" \ - $(SHELL) $(top_srcdir)/build-aux/tap-driver.sh -EXTRA_DIST += \ - $(TESTS) \ - build-aux/tap-driver.sh \ - tests/aux/tap-functions.sh \ - tests/aux/json.sh |