diff options
author | Joseph Mingrone <jrm@FreeBSD.org> | 2024-09-23 19:23:25 +0000 |
---|---|---|
committer | Joseph Mingrone <jrm@FreeBSD.org> | 2025-01-29 19:29:29 +0000 |
commit | 094f44ea03589a64a831627ae10980697cc66423 (patch) | |
tree | 73ca564b5b22a016d6f5ed1b8bcecc73773a9909 | |
parent | 68ddf72800f81ea725785848e9919a4a23acf411 (diff) |
tcpdump: Update to 4.99.5
Reviewed by: kp (changes related to pf)
Sponsored by: The FreeBSD Foundation
(cherry picked from commit 0a7e5f1f02aad2ff5fff1c60f44c6975fd07e1d9)
(cherry picked from commit d72f87c0fd1418bdb814594ea8fc76a202f7d5c6)
227 files changed, 7536 insertions, 4938 deletions
diff --git a/contrib/tcpdump/CHANGES b/contrib/tcpdump/CHANGES index 33ced66dd826..b63d1eb658d3 100644 --- a/contrib/tcpdump/CHANGES +++ b/contrib/tcpdump/CHANGES @@ -1,3 +1,128 @@ +Friday, August 30, 2024 / The Tcpdump Group + Summary for 4.99.5 tcpdump release + Refine protocol decoding for: + Arista: Use the test .pcap file from pull request #955 (HwInfo). + BGP: Fix an undefined behavior when it tries to parse a too-short packet. + CARP: Print the protocol name before any GET_(). + CDP: only hex-dump unknown TLVs in verbose mode. + DHCP: parse the SZTP redirect tag. + DHCPv6: client-id/server-id DUID type 2 correction; parse the user class, + boot file URL, and SZTP redirect options; add DUID-UUID printing + (RFC6355). + DNS: Detect and correctly handle too-short URI RRs. + EAP: Assign ndo_protocol in the eap_print() function. + ESP: Don't use EVP_add_cipher_alias() (fixes building on OpenBSD 7.5). + Frame Relay (Multilink): Fix the Timestamp Information Element printing. + ICMPv6: Fix printing the Home Agent Address Discovery Reply Message. + IEEE 802.11: no need for an element ID in the structures for IEs, make + the length in the IE structures a u_int, include the "TA" field while + printing Block Ack Control frame. + IP: Enable TSO (TCP Segmentation Offload) support; fix printing invalid + cases as invalid, not truncated; use ND_ICHECKMSG_ZU() to test the + header length. + IPv6: Fix printing invalid cases as invalid, not truncated; use + ND_ICHECKMSG_U() to print an invalid version. + IPv6: Fix invalid 32-bit versus 64-bit printouts of fragment headers. + ISAKMP: Fix printing Delete payload SPI when size is zero. + Kerberos: Print the protocol name, remove a redundant bounds check. + lwres: Fix an undefined behavior in pointer arithmetic. + OpenFlow 1.0: Fix indentation of PORT_MOD, improve handling of + some lengths, and fix handling of snapend. + TCP: Test ports < 1024 in port order to select the printer. + UDP: Move source port equal BCM_LI_PORT to bottom of long if else chain. + UDP: Test ports < 1024 in port order to select the printer. + LDP: Add missing fields of the Common Session Parameters TLV and fix the + offset for the A&D bits. + NFLOG: Use correct AF code points on all OSes. + NFS: Avoid printing non-ASCII characters. + OSPF: Pad TLVs in LS_OPAQUE_TYPE_RI to multiples of 4 bytes. + OSPF: Update LS-Ack printing not to run off the end of the packet. + OSPF6: Fix an undefined behavior. + pflog: use nd_ types in struct pfloghdr. + PPP: Check if there is some data to hexdump. + PPP: Remove an extra colon before LCP Callback Operation. + Use the buffer stack for de-escaping PPP; fixes CVE-2024-2397; + Note: This problem does not affect any tcpdump release. + PTP: Fix spelling of type SIGNALING, Parse major and minor version + correctly, Print majorSdoId field instead of just the first bit. + RIP: Make a couple trivial protocol updates. + RPKI-Router: Refine length and bounds checks. + RX: Use the "%Y-%m-%d" date format. + smbutil.c: Use the "%Y-%m-%d" date format. + SNMP: Fix two undefined behaviors. + Text protocols: Fix printing truncation if it is not the case. + ZEP: Use the "%Y-%m-%d" date format. + ZMTP: Replace custom code with bittok2str(). + User interface: + Print the supported time stamp types (-J) to stdout instead of stderr. + Print the list of data link types (-L) to stdout instead of stderr. + Use symmetrical quotation characters in error messages. + Update --version option to print 32/64-bit build and time_t size. + Improve error messages for invalid interface indexes specified + with -i. + Support "3des" as an alias for "des_ede3_cbc" even if the crypto + library doesn't support adding aliases. + Source code: + tcpdump: Fix a memory leak. + child_cleanup: reap as many child processes as possible. + Ignore failures when setting the default "any" device DLL to LINUX_SLL2. + Fix for backends which doesn't support capsicum. + Update ND_BYTES_BETWEEN() macro for better accuracy. + Update ND_BYTES_AVAILABLE_AFTER() macro for better accuracy. + Introduce new ND_ICHECK*() macros to deduplicate more code. + Skip privilege dropping when using -Z root on --with-user builds. + Add a nd_printjn() function. + Make nd_trunc_longjmp() not static inline. + Include <time.h> from netdissect.h. + Remove init_crc10_table() and the entourage. + Initialize tzcode early. + Capsicum support: Fix a 'not defined' macro error. + Update the "Error converting time" tests for packet times. + Fix warnings when building for 32-bit and defining _TIME_BITS=64. + Free interface list just before exiting where it wasn't being + freed. + Building and testing: + Add a configure option to help debugging (--enable-instrument-functions). + At build time require a proof of suitable snprintf(3) implementation in + libc (and document Solaris 9 as unsupported because of that). + Makefile.in: Add two "touch .devel" commands in the releasecheck target. + Autoconf: Get --with-user and --with-chroot right. + Autoconf: Fix --static-pcap-only test on Solaris 10. + Autoconf: Add some warning flags for clang 13 or newer. + Autoconf: Update config.{guess,sub}, timestamps 2024-01-01. + Autoconf: Add autogen.sh, remove configure and config.h.in and put + these generated files in the release tarball. + Autoconf: Update the install-sh script to the 2020-11-14.01 version. + configure: Apply autoupdate 2.69. + CMake: improve the comment before project(tcpdump C). + Do not require vsnprintf(). + tests: Use the -tttt option, by default, for the tests. + Autoconf, CMake: Get the size of a void * and a time_t. + Fix propagation of cc_werr_cflags() output. + Makefile.in: Fix the depend target. + mkdep: Exit with a non-zero status if a command fails. + Autoconf: use V_INCLS to update the list of include search paths. + Autoconf: don't put anything before -I and -L flags for local libpcap. + Autoconf, CMake: work around an Xcode 15+ issue. + Autoconf, CMake: use pkg-config and Homebrew when looking for + libcrypto. + Fix Sun C invocation from CMake. + mkdep: Use TMPDIR if it is set and not null. + Add initial support for building with TinyCC. + Makefile.in: Use the variable MAKE instead of the make command. + Makefile.in: Add instrumentation configuration in releasecheck target. + Make various improvements to the TESTrun script. + Untangle detection of pcap_findalldevs(). + Autoconf: don't use egrep, use $EGREP. + Autoconf: check for gethostbyaddr(), not gethostbyname(). + Autoconf, CMake: search for gethostbyaddr() in libnetwork. + Make illumos build warning-free. + Documentation: + Fixed errors in doc/README.Win32.md and renamed it to README.windows.md. + Make various improvements to the man page. + Add initial README file for Haiku. + Make various improvements to CONTRIBUTING.md. + Friday, April 7, 2023 / The Tcpdump Group Summary for 4.99.4 tcpdump release Source code: @@ -184,7 +309,7 @@ Wednesday, June 9, 2021 by gharris Fix "make clean" for out-of-tree autotools builds CMake: add stuff from CMAKE_PREFIX_PATH to PKG_CONFIG_PATH. Documentation: - man: Update a reference as www.cifs.org is gone. [skip ci] + man: Update a reference as www.cifs.org is gone. man: Update DNS sections Solaris: Fix a compile error with Sun C @@ -913,7 +1038,7 @@ Wed. April 25, 2007. ken@xelerance.com. Summary for 3.9.6 tcpdump release RFC 4340. Add support for per-VLAN spanning tree and per-VLAN rapid spanning tree Add support for Multiple-STP as per 802.1s - Add support for the cisco propriatry 'dynamic trunking protocol' + Add support for the cisco proprietary 'dynamic trunking protocol' Add support for the cisco proprietary VTP protocol Update dhcp6 options table as per IETF standardization activities @@ -1687,7 +1812,7 @@ v2.0.1 Sun Jan 26 21:10:10 PDT - Ultrix 4.0 is supported (also thanks to Jeff Mogul). - IBM RT and Stanford Enetfilter support has been added by - Rayan Zachariassen <rayan@canet.ca>. Tcpdump has been tested under + Rayan Zachariassen <rayan@canet.ca>. tcpdump has been tested under both the vanilla Enetfilter interface, and the extended interface (#ifdef'd by IBMRTPC) present in the MERIT version of the Enetfilter. diff --git a/contrib/tcpdump/CMakeLists.txt b/contrib/tcpdump/CMakeLists.txt index 9495b5d4c234..f9071295eff1 100644 --- a/contrib/tcpdump/CMakeLists.txt +++ b/contrib/tcpdump/CMakeLists.txt @@ -2,21 +2,26 @@ if(WIN32) # # We need 3.12 or later, so that we can set policy CMP0074; see # below. + # cmake_minimum_required(VERSION 3.12) else(WIN32) # - # For now, require only 2.8.6, just in case somebody is - # configuring with CMake on a "long-term support" version - # of some OS and that version supplies an older version of - # CMake. + # For now: + # + # if this is a version of CMake less than 3.5, require only + # 2.8.12, just in case somebody is configuring with CMake + # on a "long-term support" version # of some OS and that + # version supplies an older version of CMake; # - # If this is ever updated to CMake 3.1 or later, remove the - # stuff in cmake/Modules/FindPCAP.cmake that appends subdirectories - # of directories from CMAKE_PREFIX_PATH to the PKG_CONFIG_PATH - # environment variable when running pkg-config, to make sure - # it finds any .pc file from there. + # otherwise, require 3.5, so we don't get messages warning + # that support for versions of CMake lower than 3.5 is + # deprecated. # - cmake_minimum_required(VERSION 2.8.12) + if(CMAKE_VERSION VERSION_LESS "3.5") + cmake_minimum_required(VERSION 2.8.12) + else() + cmake_minimum_required(VERSION 3.5) + endif() endif(WIN32) # @@ -77,7 +82,7 @@ endif() # If, for whatever reason, directories in which we search for external # libraries, other than the standard system library directories, are # added to the executable's rpath in the build process, we most -# defintely want them in the installed image's rpath if they are +# definitely want them in the installed image's rpath if they are # necessary in order to find the libraries at run time. # set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) @@ -85,7 +90,13 @@ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules) # -# OK, this is a royal pain. +# We explicitly indicate what languages are used in tcpdump to avoid +# checking for a C++ compiler. +# +# One reason to avoid that check is that there's no need to waste +# configuration time performing it. +# +# Another reason is that: # # CMake will try to determine the sizes of some data types, including # void *, early in the process of configuration; apparently, it's done @@ -111,12 +122,89 @@ set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/Modules) # building 32-bit, the size for C++ will win, and, again, hilarity # will ensue. # -# So we *explicitly* state that only C is used; there is currently no -# C++ code in tcpdump. -# project(tcpdump C) # +# Export the size of void * as SIZEOF_VOID_P so that it can be +# tested with #if. +# +set(SIZEOF_VOID_P "${CMAKE_SIZEOF_VOID_P}") + +# +# Show the bit width for which we're compiling. +# This can help debug problems if you're dealing with a compiler that +# defaults to generating 32-bit code even when running on a 64-bit +# platform, and where that platform may provide only 64-bit versions of +# libraries that we might use (looking at *you*, Oracle Studio!). +# +if(CMAKE_SIZEOF_VOID_P EQUAL 4) + message(STATUS "Building 32-bit") +elseif(CMAKE_SIZEOF_VOID_P EQUAL 8) + message(STATUS "Building 64-bit") +endif() + +# +# Solaris pkg-config is annoying. For at least one package (D-Bus, I'm +# looking at *you*!), there are separate include files for 32-bit and +# 64-bit builds (I guess using "unsigned long long" as a 64-bit integer +# type on a 64-bit build is like crossing the beams or something), and +# there are two separate .pc files, so if we're doing a 32-bit build we +# should make sure we look in /usr/lib/pkgconfig for .pc files and if +# we're doing a 64-bit build we should make sure we look in +# /usr/lib/amd64/pkgconfig for .pc files. +# +if(CMAKE_SYSTEM_NAME STREQUAL "SunOS" AND CMAKE_SYSTEM_VERSION MATCHES "5[.][0-9.]*") + # + # Note: string(REPLACE) does not appear to support using ENV{...} + # as an argument, so we set a variable and then use set() to set + # the environment variable. + # + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + # + # 64-bit build. If /usr/lib/pkgconfig appears in the path, + # prepend /usr/lib/amd64/pkgconfig to it; otherwise, + # put /usr/lib/amd64 at the end. + # + if((NOT DEFINED ENV{PKG_CONFIG_PATH}) OR "$ENV{PKG_CONFIG_PATH}" EQUAL "") + # + # Not set, or empty. Set it to /usr/lib/amd64/pkgconfig. + # + set(fixed_path "/usr/lib/amd64/pkgconfig") + elseif("$ENV{PKG_CONFIG_PATH}" MATCHES "/usr/lib/pkgconfig") + # + # It contains /usr/lib/pkgconfig. Prepend + # /usr/lib/amd64/pkgconfig to /usr/lib/pkgconfig. + # + string(REPLACE "/usr/lib/pkgconfig" + "/usr/lib/amd64/pkgconfig:/usr/lib/pkgconfig" + fixed_path "$ENV{PKG_CONFIG_PATH}") + else() + # + # Not empty, but doesn't contain /usr/lib/pkgconfig. + # Append /usr/lib/amd64/pkgconfig to it. + # + set(fixed_path "$ENV{PKG_CONFIG_PATH}:/usr/lib/amd64/pkgconfig") + endif() + set(ENV{PKG_CONFIG_PATH} "${fixed_path}") + elseif(CMAKE_SIZEOF_VOID_P EQUAL 4) + # + # 32-bit build. If /usr/amd64/lib/pkgconfig appears in the path, + # prepend /usr/lib/pkgconfig to it. + # + if("$ENV{PKG_CONFIG_PATH}" MATCHES "/usr/lib/amd64/pkgconfig") + # + # It contains /usr/lib/amd64/pkgconfig. Prepend + # /usr/lib/pkgconfig to /usr/lib/amd64/pkgconfig. + # + string(REPLACE "/usr/lib/amd64/pkgconfig" + "/usr/lib/pkgconfig:/usr/lib/amd64/pkgconfig" + fixed_path "$ENV{PKG_CONFIG_PATH}") + set(ENV{PKG_CONFIG_PATH} "${fixed_path}") + endif() + endif() +endif() + +# # For checking if a compiler flag works and adding it if it does. # include(CheckCCompilerFlag) @@ -266,8 +354,6 @@ file(STRINGS ${tcpdump_SOURCE_DIR}/VERSION # Project settings ###################################### -add_definitions(-DHAVE_CONFIG_H) - include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${tcpdump_SOURCE_DIR} @@ -321,9 +407,16 @@ include(CheckVariableExists) include(CheckTypeSize) # +# Get the size of a time_t, to know whether it's 32-bit or 64-bit. +# +cmake_push_check_state() +set(CMAKE_EXTRA_INCLUDE_FILES time.h) +check_type_size("time_t" SIZEOF_TIME_T) +cmake_pop_check_state() + +# # Header files. # -check_include_file(fcntl.h HAVE_FCNTL_H) check_include_file(rpc/rpc.h HAVE_RPC_RPC_H) check_include_file(net/if.h HAVE_NET_IF_H) if(HAVE_RPC_RPC_H) @@ -368,7 +461,12 @@ else(WIN32) if(LIBNSL_HAS_GETHOSTBYADDR) set(TCPDUMP_LINK_LIBRARIES ${TCPDUMP_LINK_LIBRARIES} nsl) else(LIBNSL_HAS_GETHOSTBYADDR) - message(FATAL_ERROR "gethostbyaddr is required, but wasn't found") + check_library_exists(network gethostbyaddr "" LIBNETWORK_HAS_GETHOSTBYADDR) + if(LIBNETWORK_HAS_GETHOSTBYADDR) + set(TCPDUMP_LINK_LIBRARIES ${TCPDUMP_LINK_LIBRARIES} network) + else(LIBNETWORK_HAS_GETHOSTBYADDR) + message(FATAL_ERROR "gethostbyaddr is required, but wasn't found") + endif(LIBNETWORK_HAS_GETHOSTBYADDR) endif(LIBNSL_HAS_GETHOSTBYADDR) endif(LIBSOCKET_HAS_GETHOSTBYADDR) endif(NOT STDLIBS_HAVE_GETHOSTBYADDR) @@ -396,20 +494,68 @@ endif(STDLIBS_HAVE_GETSERVENT) cmake_pop_check_state() # -# Make sure we have vsnprintf() and snprintf(); we require them. -# We use check_symbol_exists(), as they aren't necessarily external -# functions - in Visual Studio, for example, they're inline functions -# calling a common external function. +# Make sure we have snprintf(); we require it. +# We use check_symbol_exists(), as it isn't necessarily an external +# function - in Visual Studio, for example, it is an inline function +# calling an external function. # -check_symbol_exists(vsnprintf "stdio.h" HAVE_VSNPRINTF) -if(NOT HAVE_VSNPRINTF) - message(FATAL_ERROR "vsnprintf() is required but wasn't found") -endif(NOT HAVE_VSNPRINTF) check_symbol_exists(snprintf "stdio.h" HAVE_SNPRINTF) if(NOT HAVE_SNPRINTF) message(FATAL_ERROR "snprintf() is required but wasn't found") endif() +# +# Require a proof of suitable snprintf(3), same as in Autoconf. +# +include(CheckCSourceRuns) +check_c_source_runs(" +#include <stdio.h> +#include <string.h> +#include <inttypes.h> +#include <sys/types.h> + +int main() +{ + char buf[100]; + uint64_t t = (uint64_t)1 << 32; + + snprintf(buf, sizeof(buf), \"%zu\", sizeof(buf)); + if (strncmp(buf, \"100\", sizeof(buf))) + return 1; + + snprintf(buf, sizeof(buf), \"%zd\", -sizeof(buf)); + if (strncmp(buf, \"-100\", sizeof(buf))) + return 2; + + snprintf(buf, sizeof(buf), \"%\" PRId64, -t); + if (strncmp(buf, \"-4294967296\", sizeof(buf))) + return 3; + + snprintf(buf, sizeof(buf), \"0o%\" PRIo64, t); + if (strncmp(buf, \"0o40000000000\", sizeof(buf))) + return 4; + + snprintf(buf, sizeof(buf), \"0x%\" PRIx64, t); + if (strncmp(buf, \"0x100000000\", sizeof(buf))) + return 5; + + snprintf(buf, sizeof(buf), \"%\" PRIu64, t); + if (strncmp(buf, \"4294967296\", sizeof(buf))) + return 6; + + return 0; +} + +" + SUITABLE_SNPRINTF +) +if(NOT SUITABLE_SNPRINTF) + message(FATAL_ERROR +"The snprintf(3) implementation in this libc is not suitable, +tcpdump would not work correctly even if it managed to compile." + ) +endif() + check_function_exists(getopt_long HAVE_GETOPT_LONG) check_function_exists(setlinebuf HAVE_SETLINEBUF) # @@ -619,6 +765,14 @@ set(CMAKE_REQUIRED_INCLUDES ${PCAP_INCLUDE_DIRS}) check_include_file(pcap/pcap-inttypes.h HAVE_PCAP_PCAP_INTTYPES_H) # +# At compile time HAVE_PCAP_FINDALLDEVS depends on HAVE_PCAP_IF_T. +# +cmake_push_check_state() +set(CMAKE_EXTRA_INCLUDE_FILES pcap.h) +check_type_size(pcap_if_t PCAP_IF_T) +cmake_pop_check_state() + +# # Check for various functions in libpcap/WinPcap/Npcap. # cmake_push_check_state() @@ -707,19 +861,6 @@ endif(HAVE_PCAP_CREATE) # if we have them. # check_function_exists(pcap_findalldevs HAVE_PCAP_FINDALLDEVS) -if(HAVE_PCAP_FINDALLDEVS) - # - # Check for libpcap having pcap_findalldevs() but the pcap.h header - # not having pcap_if_t; some versions of Mac OS X shipped with pcap.h - # from 0.6 and libpcap 0.8, so that libpcap had pcap_findalldevs but - # pcap.h didn't have pcap_if_t. - # - cmake_push_check_state() - set(CMAKE_REQUIRED_INCLUDES ${PCAP_INCLUDE_DIRS}) - set(CMAKE_EXTRA_INCLUDE_FILES pcap.h) - check_type_size(pcap_if_t PCAP_IF_T) - cmake_pop_check_state() -endif(HAVE_PCAP_FINDALLDEVS) check_function_exists(pcap_dump_flush HAVE_PCAP_DUMP_FLUSH) check_function_exists(pcap_lib_version HAVE_PCAP_LIB_VERSION) if(NOT HAVE_PCAP_LIB_VERSION) @@ -728,8 +869,56 @@ endif(NOT HAVE_PCAP_LIB_VERSION) check_function_exists(pcap_setdirection HAVE_PCAP_SETDIRECTION) check_function_exists(pcap_set_immediate_mode HAVE_PCAP_SET_IMMEDIATE_MODE) check_function_exists(pcap_dump_ftell64 HAVE_PCAP_DUMP_FTELL64) -check_function_exists(pcap_open HAVE_PCAP_OPEN) -check_function_exists(pcap_findalldevs_ex HAVE_PCAP_FINDALLDEVS_EX) +# +# macOS Sonoma's libpcap includes stub versions of the remote- +# capture APIs. They are exported as "weakly linked symbols". +# +# Xcode 15 offers only a macOS Sonoma SDK, which has a .tbd +# file for libpcap that claims it includes those APIs. (Newer +# versions of macOS don't provide the system shared libraries, +# they only provide the dyld shared cache containing those +# libraries, so the OS provides SDKs that include a .tbd file +# to use when linking.) +# +# This means that check_function_exists() will think that +# the remote-capture APIs are present, including pcap_open() +# and pcap_findalldevs_ex(). +# +# However, they are *not* present in macOS Ventura and earlier, +# which means that building on Ventura with Xcode 15 produces +# executables that fail to start because one of those APIs +# isn't found in the system libpcap. +# +# Protecting calls to those APIs with __builtin_available() +# does not prevent this, because the libpcap header files +# in the Sonoma SDK mark them as being first available +# in macOS 10.13, just like all the other routines introduced +# in libpcap 1.9, even though they're only available if libpcap +# is built with remote capture enabled or stub routines are +# provided. (A fix to enable this has been checked into the +# libpcap repository, and may end up in a later version of +# the SDK.) +# +# Given all that, and given that the versions of the +# remote-capture APIs in Sonoma are stubs that always fail, +# there doesn't seem to be any point in checking for pcap_open() +# and pcap_findalldevs_ex() if we're linking against the Apple libpcap. +# +# However, if we're *not* linking against the Apple libpcap, +# we should check for it, so that we can use it if it's present. +# +# So we check for pcap_open() and pcap_findalldevs_ex() if 1) this isn't +# macOS or 2) the the libpcap we found is not a system library, meaning +# that its path begins neither with /usr/lib (meaning it's a system +# dylib) nor /Application/Xcode.app (meaning it's a file in +# the Xcode SDK). +# +if(NOT APPLE OR NOT + (PCAP_LIBRARIES MATCHES "/usr/lib/.*" OR + PCAP_LIBRARIES MATCHES "/Application/Xcode.app/.*")) + check_function_exists(pcap_open HAVE_PCAP_OPEN) + check_function_exists(pcap_findalldevs_ex HAVE_PCAP_FINDALLDEVS_EX) +endif() # # On Windows, check for pcap_wsockinit(); if we don't have it, check for @@ -788,11 +977,6 @@ if(WITH_CRYPTO) find_package(CRYPTO) if(CRYPTO_FOUND) # - # Check for some headers and functions. - # - check_include_file(openssl/evp.h HAVE_OPENSSL_EVP_H) - - # # 1) do we have EVP_CIPHER_CTX_new? # If so, we use it to allocate an EVP_CIPHER_CTX, as # EVP_CIPHER_CTX may be opaque; otherwise, we allocate @@ -958,9 +1142,9 @@ if(EXISTS ${CMAKE_SOURCE_DIR}/.devel OR EXISTS ${CMAKE_BINARY_DIR}/.devel) # We do *not* care whether a structure had padding added at # the end because of __declspec(align) - *we* don't use # __declspec(align), because the only structures whose layout - # we precisely specify are those that get overlayed on packet + # we precisely specify are those that get overlaid on packet # data, and in those every element is an array of octets so - # that we have full control over the size and aligmnet, and, + # that we have full control over the size and alignment, and, # apparently, jmp_buf has such a declaration on x86, meaning # that everything that includes netdissect.h, i.e. almost every # file in tcpdump, gets a warning. @@ -979,12 +1163,19 @@ if(EXISTS ${CMAKE_SOURCE_DIR}/.devel OR EXISTS ${CMAKE_BINARY_DIR}/.devel) check_and_add_compiler_option(-Wmissing-prototypes) check_and_add_compiler_option(-Wmissing-variable-declarations) check_and_add_compiler_option(-Wold-style-definition) - check_and_add_compiler_option(-Wpedantic) + if(NOT CMAKE_C_COMPILER_ID MATCHES "Sun") + # In Sun C versions that implement GCC compatibility "-Wpedantic" + # means the same as "-pedantic". The latter is mutually exclusive + # with several other options. One of those is "-xc99", which has + # already been set for Sun C above. + check_and_add_compiler_option(-Wpedantic) + endif() check_and_add_compiler_option(-Wpointer-arith) check_and_add_compiler_option(-Wpointer-sign) check_and_add_compiler_option(-Wshadow) check_and_add_compiler_option(-Wsign-compare) check_and_add_compiler_option(-Wstrict-prototypes) + check_and_add_compiler_option(-Wundef) check_and_add_compiler_option(-Wunreachable-code-return) check_and_add_compiler_option(-Wused-but-marked-unused) check_and_add_compiler_option(-Wwrite-strings) @@ -998,9 +1189,13 @@ endif() # usage: cmake -DEXTRA_CFLAGS='-Wall -Wextra -Werror' ... # if(NOT "${EXTRA_CFLAGS}" STREQUAL "") - foreach(_extra_cflag ${EXTRA_CFLAGS}) - check_and_add_compiler_option("${_extra_cflag}") - endforeach(_extra_cflag) + # The meaning of EXTRA_CFLAGS is "use the exact specified options, or the + # build risks failing to fail", not "try every specified option, omit those + # that do not work and use the rest". Thus use add_compile_options(), not + # foreach()/check_and_add_compiler_option(). Another reason to do that is + # that the effect lasts in testprogs/ and testprogs/fuzz/. + string(REPLACE " " ";" _extra_cflags_list ${EXTRA_CFLAGS}) + add_compile_options(${_extra_cflags_list}) message(STATUS "Added extra compile options (${EXTRA_CFLAGS})") endif() diff --git a/contrib/tcpdump/CONTRIBUTING.md b/contrib/tcpdump/CONTRIBUTING.md index 26f226ebd973..215e4c6831c4 100644 --- a/contrib/tcpdump/CONTRIBUTING.md +++ b/contrib/tcpdump/CONTRIBUTING.md @@ -36,17 +36,17 @@ and ask! ## How to add new code and to update existing code -0) Check that there isn't a pull request already opened for the changes you +1) Check that there isn't a pull request already opened for the changes you intend to make. -1) [Fork](https://help.github.com/articles/fork-a-repo/) the Tcpdump +2) [Fork](https://help.github.com/articles/fork-a-repo/) the Tcpdump [repository](https://github.com/the-tcpdump-group/tcpdump). -2) The easiest way to test your changes on multiple operating systems and +3) The easiest way to test your changes on multiple operating systems and architectures is to let the upstream CI test your pull request (more on this below). -3) Setup your git working copy +4) Setup your git working copy ``` git clone https://github.com/<username>/tcpdump.git cd tcpdump @@ -54,19 +54,19 @@ and ask! git fetch upstream ``` -4) Do a `touch .devel` in your working directory. +5) Do a `touch .devel` in your working directory. Currently, the effect is * add (via `configure`, in `Makefile`) some warnings options (`-Wall`, `-Wmissing-prototypes`, `-Wstrict-prototypes`, ...) to the compiler if it supports these options, * have the `Makefile` support `make depend` and the `configure` script run it. -5) Configure and build +6) Configure and build ``` ./configure && make -s && make check ``` -6) Add/update tests +7) Add/update tests The `tests` directory contains regression tests of the dissection of captured packets. Those captured packets were saved running tcpdump with option `-w sample.pcap`. Additional options, such as `-n`, are used to create relevant @@ -96,12 +96,12 @@ and ask! It is often useful to have test outputs with different verbosity levels (none, `-v`, `-vv`, `-vvv`, etc.) depending on the code. -7) Test using `make check` (current build options) and `./build_matrix.sh` +8) Test using `make check` (current build options) and `./build_matrix.sh` (a multitude of build options, build systems and compilers). If you can, test on more than one operating system. Don't send a pull request until all tests pass. -8) Try to rebase your commits to keep the history simple. +9) Try to rebase your commits to keep the history simple. ``` git fetch upstream git rebase upstream/master @@ -109,32 +109,76 @@ and ask! (If the rebase fails and you cannot resolve, issue `git rebase --abort` and ask for help in the pull request comment.) -9) Once 100% happy, put your work into your forked repository using `git push`. +10) Once 100% happy, put your work into your forked repository using `git push`. -10) [Initiate and send](https://help.github.com/articles/using-pull-requests/) +11) [Initiate and send](https://help.github.com/articles/using-pull-requests/) a pull request. This will trigger the upstream repository CI tests. ## Code style and generic remarks -* A thorough reading of some other printers code is useful. +1) A thorough reading of some other printers code is useful. -* Put the normative reference if any as comments (RFC, etc.). +2) To help learn how tcpdump works or to help debugging: + You can configure and build tcpdump with the instrumentation of functions: + ``` + $ ./configure --enable-instrument-functions + $ make -s clean all + ``` + + This generates instrumentation calls for entry and exit to functions. + Just after function entry and just before function exit, these + profiling functions are called and print the function names with + indentation and call level. + + If entering in a function, it prints also the calling function name with + file name and line number. There may be a small shift in the line number. + + In some cases, with Clang 11, the file number is unknown (printed '??') + or the line number is unknown (printed '?'). In this case, use GCC. + + If the environment variable INSTRUMENT is + - unset or set to an empty string, print nothing, like with no + instrumentation + - set to "all" or "a", print all the functions names + - set to "global" or "g", print only the global functions names + + This allows to run: + ``` + $ INSTRUMENT=a ./tcpdump ... + $ INSTRUMENT=g ./tcpdump ... + $ INSTRUMENT= ./tcpdump ... + ``` + or + ``` + $ export INSTRUMENT=global + $ ./tcpdump ... + ``` + + The library libbfd is used, therefore the binutils-dev package is required. -* Put the format of packets/headers/options as comments if there is no +3) Put the normative reference if any as comments (RFC, etc.). + +4) Put the format of packets/headers/options as comments if there is no published normative reference. -* The printer may receive incomplete packet in the buffer, truncated at any +5) The printer may receive incomplete packet in the buffer, truncated at any random position, for example by capturing with `-s size` option. + This means that an attempt to fetch packet data based on the expected + format of the packet may run the risk of overrunning the buffer. + + Furthermore, if the packet is complete, but is not correctly formed, + that can also cause a printer to overrun the buffer, as it will be + fetching packet data based on the expected format of the packet. + + Therefore, integral, IPv4 address, and octet sequence values should + be fetched using the `GET_*()` macros, which are defined in + `extract.h`. + If your code reads and decodes every byte of the protocol packet, then to ensure proper and complete bounds checks it would be sufficient to read all - packet data using the `GET_*()` macros, typically: - ``` - GET_U_1(p) - GET_S_1(p) - GET_BE_U_n(p), n in { 2, 3, 4, 5, 6, 7, 8 } - GET_BE_S_n(p), n in { 2, 3, 4, 5, 6, 7, 8 } - ``` + packet data using the `GET_*()` macros. + If your code uses the macros above only on some packet data, then the gaps would have to be bounds-checked using the `ND_TCHECK_*()` macros: ``` @@ -142,7 +186,14 @@ and ask! ND_TCHECK_SIZE(p) ND_TCHECK_LEN(p, l) ``` - For the `ND_TCHECK_*` macros (if not already done): + + where *p* points to the data not being decoded. For `ND_CHECK_n()`, + *n* is the length of the gap, in bytes. For `ND_CHECK_SIZE()`, the + length of the gap, in bytes, is the size of an item of the data type + to which *p* points. For `ND_CHECK_LEN()`, *l* is the length of the + gap, in bytes. + + For the `GET_*()` and `ND_TCHECK_*` macros (if not already done): * Assign: `ndo->ndo_protocol = "protocol";` * Define: `ND_LONGJMP_FROM_TCHECK` before including `netdissect.h` * Make sure that the intersection of `GET_*()` and `ND_TCHECK_*()` is minimal, @@ -155,19 +206,170 @@ and ask! ``` You should try several values for snaplen to do various truncation. -* Do invalid packet checks in code: Think that your code can receive in input +* The `GET_*()` macros that fetch integral values are: + ``` + GET_U_1(p) + GET_S_1(p) + GET_BE_U_n(p), n in { 2, 3, 4, 5, 6, 7, 8 } + GET_BE_S_n(p), n in { 2, 3, 4, 5, 6, 7, 8 } + GET_LE_U_n(p), n in { 2, 3, 4, 5, 6, 7, 8 } + GET_LE_S_n(p), n in { 2, 3, 4, 5, 6, 7, 8 } + ``` + + where *p* points to the integral value in the packet buffer. The + macro returns the integral value at that location. + + `U` indicates that an unsigned value is fetched; `S` indicates that a + signed value is fetched. For multi-byte values, `BE` indicates that + a big-endian value ("network byte order") is fetched, and `LE` + indicates that a little-endian value is fetched. *n* is the length, + in bytes, of the multi-byte integral value to be fetched. + + In addition to the bounds checking the `GET_*()` macros perform, + using those macros has other advantages: + + * tcpdump runs on both big-endian and little-endian systems, so + fetches of multi-byte integral values must be done in a fashion + that works regardless of the byte order of the machine running + tcpdump. The `GET_BE_*()` macros will fetch a big-endian value and + return a host-byte-order value on both big-endian and little-endian + machines, and the `GET_LE_*()` macros will fetch a little-endian + value and return a host-byte-order value on both big-endian and + little-endian machines. + + * tcpdump runs on machines that do not support unaligned access to + multi-byte values, and packet values are not guaranteed to be + aligned on the proper boundary. The `GET_BE_*()` and `GET_LE_*()` + macros will fetch values even if they are not aligned on the proper + boundary. + +* The `GET_*()` macros that fetch IPv4 address values are: + ``` + GET_IPV4_TO_HOST_ORDER(p) + GET_IPV4_TO_NETWORK_ORDER(p) + ``` + + where *p* points to the address in the packet buffer. + `GET_IPV4_TO_HOST_ORDER()` returns the address in the byte order of + the host that is running tcpdump; `GET_IPV4_TO_NETWORK_ORDER()` + returns it in network byte order. + + Like the integral `GET_*()` macros, these macros work correctly on + both big-endian and little-endian machines and will fetch values even + if they are not aligned on the proper boundary. + +* The `GET_*()` macro that fetches an arbitrary sequences of bytes is: + ``` + GET_CPY_BYTES(dst, p, len) + ``` + + where *dst* is the destination to which the sequence of bytes should + be copied, *p* points to the first byte of the sequence of bytes, and + *len* is the number of bytes to be copied. The bytes are copied in + the order in which they appear in the packet. + +* To fetch a network address and convert it to a printable string, use + the following `GET_*()` macros, defined in `addrtoname.h`, to + perform bounds checks to make sure the entire address is within the + buffer and to translate the address to a string to print: + ``` + GET_IPADDR_STRING(p) + GET_IP6ADDR_STRING(p) + GET_MAC48_STRING(p) + GET_EUI64_STRING(p) + GET_EUI64LE_STRING(p) + GET_LINKADDR_STRING(p, type, len) + GET_ISONSAP_STRING(nsap, nsap_length) + ``` + + `GET_IPADDR_STRING()` fetches an IPv4 address pointed to by *p* and + returns a string that is either a host name, if the `-n` flag wasn't + specified and a host name could be found for the address, or the + standard XXX.XXX.XXX.XXX-style representation of the address. + + `GET_IP6ADDR_STRING()` fetches an IPv6 address pointed to by *p* and + returns a string that is either a host name, if the `-n` flag wasn't + specified and a host name could be found for the address, or the + standard XXXX::XXXX-style representation of the address. + + `GET_MAC48_STRING()` fetches a 48-bit MAC address (Ethernet, 802.11, + etc.) pointed to by *p* and returns a string that is either a host + name, if the `-n` flag wasn't specified and a host name could be + found in the ethers file for the address, or the standard + XX:XX:XX:XX:XX:XX-style representation of the address. + + `GET_EUI64_STRING()` fetches a 64-bit EUI pointed to by *p* and + returns a string that is the standard XX:XX:XX:XX:XX:XX:XX:XX-style + representation of the address. + + `GET_EUI64LE_STRING()` fetches a 64-bit EUI, in reverse byte order, + pointed to by *p* and returns a string that is the standard + XX:XX:XX:XX:XX:XX:XX:XX-style representation of the address. + + `GET_LINKADDR_STRING()` fetches an octet string, of length *length* + and type *type*, pointed to by *p* and returns a string whose format + depends on the value of *type*: + + * `LINKADDR_MAC48` - if the length is 6, the string has the same + value as `GET_MAC48_STRING()` would return for that address, + otherwise, the string is a sequence of XX:XX:... values for the bytes + of the address; + + * `LINKADDR_FRELAY` - the string is "DLCI XXX", where XXX is the + DLCI, if the address is a valid Q.922 header, and an error indication + otherwise; + + * `LINKADDR_EUI64`, `LINKADDR_ATM`, `LINKADDR_OTHER` - + the string is a sequence of XX:XX:... values for the bytes + of the address. + +6) When defining a structure corresponding to a packet or part of a + packet, so that a pointer to packet data can be cast to a pointer to + that structure and that structure pointer used to refer to fields in + the packet, use the `nd_*` types for the structure members. + + Those types all are aligned only on a 1-byte boundary, so a + compiler will not assume that the structure is aligned on a boundary + stricter than one byte; there is no guarantee that fields in packets + are aligned on any particular boundary. + + This means that all padding in the structure must be explicitly + declared as fields in the structure. + + The `nd_*` types for integral values are: + + * `nd_uintN_t`, for unsigned integral values, where *N* is the number + of bytes in the value. + * `nd_intN_t`, for signed integral values, where *N* is the number + of bytes in the value. + + The `nd_*` types for IP addresses are: + + * `nd_ipv4`, for IPv4 addresses; + * `nd_ipv6`, for IPv6 addresses. + + The `nd_*` types for link-layer addresses are: + + * `nd_mac48`, for MAC-48 (Ethernet, 802.11, etc.) addresses; + * `nd_eui64`, for EUI-64 values. + + The `nd_*` type for a byte in a sequence of bytes is `nd_byte`; an + *N*-byte sequence should be declared as `nd_byte[N]`. + +7) Do invalid packet checks in code: Think that your code can receive in input not only a valid packet but any arbitrary random sequence of octets (packet * built malformed originally by the sender or by a fuzz tester, * became corrupted in transit or for some other reason). Print with: `nd_print_invalid(ndo); /* to print " (invalid)" */` -* Use `struct tok` for indexed strings and print them with +8) Use `struct tok` for indexed strings and print them with `tok2str()` or `bittok2str()` (for flags). + All `struct tok` must end with `{ 0, NULL }`. -* Avoid empty lines in output of printers. +9) Avoid empty lines in output of printers. -* A commit message must have: +10) A commit message must have: ``` First line: Capitalized short summary in the imperative (50 chars or less) @@ -179,13 +381,14 @@ and ask! the body. ``` -* Avoid non-ASCII characters in code and commit messages. +11) Avoid non-ASCII characters in code and commit messages. -* Use the style of the modified sources. +12) Use the style of the modified sources. -* Don't mix declarations and code. +13) Don't mix declarations and code. -* Don't use `//` for comments. - Not all C compilers accept C++/C99 comments by default. +14) tcpdump requires a compiler that supports C99 or later, so C99 + features may be used in code, but C11 or later features should not be + used. -* Avoid trailing tabs/spaces +15) Avoid trailing tabs/spaces diff --git a/contrib/tcpdump/CREDITS b/contrib/tcpdump/CREDITS index b6862ccba5a8..fca45605f8ad 100644 --- a/contrib/tcpdump/CREDITS +++ b/contrib/tcpdump/CREDITS @@ -8,15 +8,15 @@ The current maintainers (in alphabetical order): Additional people who have contributed patches (in alphabetical order): Aaron Campbell <aaron at arbor dot net> - A Costa <agcosta at gis dot net> ABHIMANYU <agupta07 at sourceforge dot net> + A Costa <agcosta at gis dot net> Adam Sampson <ats at offog dot org> Ahmed Abdelsalam <ahabdels at gmail dot com> Ajith Adapa <adapa dot ajith at gmail dot com> Albert Chin <china at thewrittenword dot com> Alexandra Kossovsky <alexandra1975 at sourceforge dot net> - Alexandr Nedvedicky <alexandr dot nedvedicky at oracle dot com> Alexandre Ferrieux <alexandre dot ferrieux at orange dot com> + Alexandr Nedvedicky <alexandr dot nedvedicky at oracle dot com> Alexis La Goutte <alexis dot lagoutte at gmail dot com> Alfredo Andres <aandres at s21sec dot com> Ali Abdulkadir <autostart dot ini at gmail dot com> @@ -58,6 +58,7 @@ Additional people who have contributed patches (in alphabetical order): bugyo <bugyo at users dot noreply dot github dot com> Carles Kishimoto Bisbe <ckishimo at ac dot upc dot es> Casey Deccio <casey at deccio dot net> + Casper Andersson <casper dot casan at gmail dot com> Charles (Chas) Williams <chwillia at ciena dot com> Charles M. Hannum <mycroft at netbsd dot org> Charlie Lenahan <clenahan at fortresstech dot com> @@ -71,6 +72,7 @@ Additional people who have contributed patches (in alphabetical order): Craig Leres <leres at xse dot com> Craig Rodrigues <rodrigc at mediaone dot net> Crist J. Clark <cjclark at alum dot mit dot edu> + Dag-Erling Smørgrav <des at FreeBSD dot org> Dagobert Michelsen <dam at opencsw dot org> Daniel Hagerty <hag at ai dot mit dot edu> Daniel Lee <Longinus00 at gmail dot com> @@ -81,18 +83,22 @@ Additional people who have contributed patches (in alphabetical order): David Cronin <davidcronin94 at gmail dot com> Davide Caratti <dcaratti at redhat dot com> David Horn <dhorn2000 at gmail dot com> + David Karoly <david dot karoly at outlook dot com> + David Mirabito <davidjm at arista dot com> David Smith <dsmith at redhat dot com> David Young <dyoung at ojctech dot com> Dion Bosschieter <dbosschieter at transip dot nl> Dmitrij Tejblum <tejblum at yandex-team dot ru> Dmitry Eremin-Solenikov <dbaryshkov at gmail dot com> - Don Ebright <Don dot Ebright at compuware dot com> + Dominique Martinet <dominique dot martinet at atmark-techno dot com> Donatas Abraitis <donatas dot abraitis at gmail dot com> + Don Ebright <Don dot Ebright at compuware dot com> d simonov <simonov-d at yandex-team dot ru> Duane Wessels <dwessels at verisign dot com> Eamon Doyle <eamonjd at arista dot com> Eddie Kohler <xexd at sourceforge dot net> - Ege Cetin <egecetin at hotmail dot com dot tr> + Ed Maste <emaste at FreeBSD dot org> + Ege Çetin <egecetin at hotmail dot com dot tr> Eliot Lear <lear at upstairs dot ofcourseimright dot com> Elmar Kirchner <elmar at juniper dot net> Eric S. Raymond <esr at thyrsus dot com> @@ -109,10 +115,9 @@ Additional people who have contributed patches (in alphabetical order): Frank Volf <volf at oasis dot IAEhv dot nl> Fulvio Risso <risso at polito dot it> George Bakos <gbakos at ists dot dartmouth dot edu> - Gerald Combs <gerald at ethereal dot com> - Gerard Garcia <ggarcia at deic dot uab dot cat> George Neville-Neil <gnn at freebsd dot org> Gerald Combs <gerald at wireshark dot org> + Gerard Garcia <ggarcia at deic dot uab dot cat> Gerrit Renker <gerrit at erg dot abdn dot ac dot uk> Gert Doering <gert at greenie dot muc dot de> Gianluca Varenni <gianluca dot varenni at gmail dot com> @@ -130,6 +135,7 @@ Additional people who have contributed patches (in alphabetical order): Hannes Gredler <hannes at gredler dot at> Hannes Viertel <hviertel at juniper dot net> Hanno Böck <hanno at hboeck dot de> + Hans Petter Selasky <hps at selasky dot org> Harry Raaymakers <harryr at connect dot com dot au> Heinz-Ado Arnolds <Ado dot Arnolds at dhm-systems dot de> Hendrik Scholz <hendrik at scholz dot net> @@ -144,6 +150,7 @@ Additional people who have contributed patches (in alphabetical order): Jamal Hadi Salim <hadi at cyberus dot ca> James Ko <jck at exegin dot com> Jamie Bainbridge <jamie dot bainbridge at gmail dot com> + Janne Heß <janne at hess dot ooo> Jan Oravec <wsx at wsx6 dot net> Jason L. Wright <jason at thought dot net> Jason R. Thorpe <thorpej at netbsd dot org> @@ -152,15 +159,19 @@ Additional people who have contributed patches (in alphabetical order): Jefferson Ogata <jogata at nodc dot noaa dot gov> Jeffrey Hutzelman <jhutz at cmu dot edu> Jeremy Browne <jer at ifni dot ca> + Jerome Duval <jerome dot duval at gmail dot com> Jesper Peterson <jesper at endace dot com> Jesse Gross <jesse at nicira dot com> + Jesse Rosenstock <jmr at google dot com> Jim Hutchins <jim at ca dot sandia dot gov> João Medeiros <ignotus21 at sourceforge dot net> Job Snijders <job at instituut dot net> Joerg Mayer <jmayer at loplof dot de> + Jonas Chianu <jchianu at onx-jchianu-02 dot ciena dot com> Jonathan Heusser <jonny at drugphish dot ch> Jorge Boncompte [DTI2] <jorge at dti2 dot net> Jørgen Thomsen <jth at jth dot net> + Josh Soref <2119212+jsoref at users dot noreply dot github dot com> Julian Cowley <julian at lava dot net> Juliusz Chroboczek <jch at pps dot jussieu dot fr> Kaarthik Sivakumar <kaarthik at torrentnet dot com> @@ -200,8 +211,10 @@ Additional people who have contributed patches (in alphabetical order): Martin Buck <mb-tmp-tvguho dot pbz at gromit dot dyndns dot org> Martin Husemann <martin at netbsd dot org> Martin Sehnoutka <msehnout at redhat dot com> + Martin Willi <martin at strongswan dot org> Matt Eaton <agnosticdev at gmail dot com> Matthew Luckie <matthewluckie at sourceforge dot net> + Matthew Martin <phy1729 at gmail dot com> Matthieu Boutier <boutier at pps dot univ-paris-diderot dot fr> Max Laier <max at love2party dot net> Michael A. Meffie III <meffie at sourceforge dot net> @@ -232,11 +245,11 @@ Additional people who have contributed patches (in alphabetical order): Neil T. Spring <bluehal at users dot sourceforge dot net> Nicholas Reilly <nreilly at blackberry dot com> Nickolai Zeldovich <kolya at MIT dot EDU> - Nikolay Edigaryev <edigaryev at gmail dot com> Nicolas Ferrero <toorop at babylo dot net> - niks3089 <niks3089 at gmail dot com> Niels Provos <provos at openbsd dot org> Nikhil AP <nikhilap at arista dot com> + Nikolay Edigaryev <edigaryev at gmail dot com> + niks3089 <niks3089 at gmail dot com> Noritoshi Demizu <demizu at users dot sourceforge dot net> Olaf Kirch <okir at caldera dot de> Ola Martin Lykkja <ola dot lykkja at q-free dot com> @@ -281,12 +294,13 @@ Additional people who have contributed patches (in alphabetical order): Roderick Schertler <roderick at argon dot org> Romain Francoise <rfrancoise at debian dot org> Romero Malaquias <romero dot malaquias at gmail dot com> + Rose <83477269+AtariDreams at users dot noreply dot github dot com> Ruben Kerkhof <ruben at rubenkerkhof dot com> Rui Paulo <rpaulo at FreeBSD dot org> Sabrina Dubroca <sd at queasysnail dot net> Sagun Shakya <sagun dot shakya at sun dot com> - Sam James <sam at gentoo dot org> Sami Farin <safari at iki dot fi> + Sam James <sam at gentoo dot org> Sascha Wildner <swildner at sourceforge dot net> Sawssen Hadded <saw dot hadded at gmail dot com> Scott Mcmillan <scott dot a dot mcmillan at intel dot com> @@ -304,8 +318,8 @@ Additional people who have contributed patches (in alphabetical order): Steinar Haug <sthaug at nethelp dot no> Stephane Bortzmeyer <stephane+github at bortzmeyer dot org> Steve Kay <stevekay at gmail dot com> - Steve-o <fnjordy at sourceforge dot net> Steven H. Wang <wang dot steven dot h at gmail dot com> + Steve-o <fnjordy at sourceforge dot net> Swaathi Vetrivel <swaathiv at juniper dot net> Swaminathan Chandrasekaran <chander at juniper dot net> Takashi Yamamoto <yamt at mwd dot biglobe dot ne dot jp> diff --git a/contrib/tcpdump/INSTALL.md b/contrib/tcpdump/INSTALL.md index b3fbf42eaca8..08fc31b682d0 100644 --- a/contrib/tcpdump/INSTALL.md +++ b/contrib/tcpdump/INSTALL.md @@ -3,7 +3,7 @@ If you have not built libpcap, and your system does not have libpcap installed, install libpcap first. Your system might provide a version of libpcap that can be installed; if so, to compile tcpdump you might need to install a "developer" version of libpcap as well as the -"run-time" version. You can also install tcpdump.org's version of +"run-time" version. You can also install The Tcpdump Group version of libpcap; see [this file](README.md) for the location. You will need a C99 compiler to build tcpdump. The build system @@ -12,16 +12,34 @@ the generally available GNU C compiler (GCC) or Clang. After libpcap has been built (either install it with `make install` or make sure both the libpcap and tcpdump source trees are in the same -directory), run `./configure` (a shell script). `configure` will +directory), do the following steps: + +* If you build from a git clone rather than from a release archive, +run `./autogen.sh` (a shell script). The autogen.sh script will +build the `configure` and `config.h.in` files. + +On some system, you may need to set the `AUTORECONF` variable, like: +`AUTORECONF=autoreconf-2.69 ./autogen.sh` +to select the `autoreconf` version you want to use. + +* Run `./configure` (a shell script). The configure script will determine your system attributes and generate an appropriate `Makefile` -from `Makefile.in`. Now build tcpdump by running `make`. +from `Makefile.in`. The configure script has a number of options to +control the configuration of tcpdump; `./configure --help` will show +them. + +* Next, build tcpdump by running `make`. + +On OpenBSD, you may need to set, before the `make`, the `AUTOCONF_VERSION` +variable like: +`AUTOCONF_VERSION=2.69 make` -If everything builds ok, `su` and type `make install`. This will install +If everything builds fine, `su` and type `make install`. This will install tcpdump and the manual entry. Any user will be able to use tcpdump to read saved captures. Whether a user will be able to capture traffic depends on the OS and the configuration of the system; see the [tcpdump man page](https://www.tcpdump.org/manpages/tcpdump.1.html) -for details. DO NOT give untrusted users the ability to +for details. Do **NOT** give untrusted users the ability to capture traffic. If a user can capture traffic, he or she could use utilities such as tcpdump to capture any traffic on your net, including passwords. @@ -29,11 +47,11 @@ passwords. Note that most systems ship tcpdump, but usually an older version. Building tcpdump from source as explained above will usually install the binary as `/usr/local/bin/tcpdump`. If your system has other tcpdump -binaries, you might need to deinstall these or to set the PATH environment +binaries, you might need to deinstall these or to set the `PATH` environment variable if you need the `tcpdump` command to run the new binary (`tcpdump --version` can be used to tell different versions apart). -If your system is not one which we have tested tcpdump on, you may have +If your system is not one that we have tested tcpdump on, you may have to modify the `configure` script and `Makefile.in`. Please [send us patches](https://www.tcpdump.org/index.html#patches) for any modifications you need to make. @@ -62,15 +80,14 @@ ascii_strcasecmp.c - locale-independent case-independent string comparison routines atime.awk - TCP ack awk script atm.h - ATM traffic type definitions +autogen.sh - build configure and config.h.in (run this first) bpf_dump.c - BPF program printing routines, in case libpcap doesn't have them chdlc.h - Cisco HDLC definitions cpack.c - functions to extract packed data cpack.h - declarations of functions to extract packed data config.guess - autoconf support -config.h.in - autoconf input config.sub - autoconf support -configure - configure script (run this first) configure.ac - configure script source doc/README.* - some building documentation ethertype.h - Ethernet type value definitions diff --git a/contrib/tcpdump/Makefile.in b/contrib/tcpdump/Makefile.in index 1bdeb514fc33..e991cce2da0f 100644 --- a/contrib/tcpdump/Makefile.in +++ b/contrib/tcpdump/Makefile.in @@ -329,7 +329,8 @@ TAGHDR = \ TAGFILES = $(SRC) $(HDR) $(TAGHDR) $(LIBNETDISSECT_SRC) \ print-smb.c smbutil.c -CLEANFILES = $(PROG) $(OBJ) $(LIBNETDISSECT_OBJ) print-smb.o smbutil.o +CLEANFILES = $(PROG) $(OBJ) $(LIBNETDISSECT_OBJ) \ + print-smb.o smbutil.o instrument-functions.o EXTRA_DIST = \ CHANGES \ @@ -343,6 +344,7 @@ EXTRA_DIST = \ README.md \ VERSION \ aclocal.m4 \ + autogen.sh \ atime.awk \ bpf_dump.c \ cmake/Modules/FindCRYPTO.cmake \ @@ -351,15 +353,15 @@ EXTRA_DIST = \ cmake_uninstall.cmake.in \ cmakeconfig.h.in \ config.guess \ - config.h.in \ config.sub \ - configure \ configure.ac \ doc/README.aix.md \ + doc/README.haiku.md \ doc/README.NetBSD.md \ doc/README.solaris.md \ - doc/README.Win32.md \ + doc/README.windows.md \ install-sh \ + instrument-functions.c \ lbl/os-osf4.h \ lbl/os-solaris2.h \ lbl/os-sunos4.h \ @@ -384,7 +386,7 @@ EXTRA_DIST = \ stime.awk \ tcpdump.1.in -TEST_DIST= `git ls-files tests | grep -v 'tests/\..*'` +TEST_DIST= `git -C "$$DIR" ls-files tests | grep -v 'tests/\..*'` RELEASE_FILES = $(CSRC) $(HDR) $(LIBNETDISSECT_SRC) $(EXTRA_DIST) $(TEST_DIST) @@ -440,10 +442,11 @@ lint: grep -v 'possible pointer alignment problem' clean: - rm -f $(CLEANFILES) $(PROG)-`cat ${srcdir}/VERSION`.tar.gz + rm -f $(CLEANFILES) $(PROG)-`cat ${srcdir}/VERSION`.tar.gz \ + config.h.in~ configure~ configure.ac~ -distclean: - rm -f $(CLEANFILES) Makefile config.cache config.log config.status \ +distclean: clean + rm -f Makefile config.cache config.log config.status \ config.h os-proto.h stamp-h stamp-h.in $(PROG).1 \ libnetdissect.a tests/.failed tests/.passed \ tests/failure-outputs.txt @@ -461,17 +464,52 @@ tags: $(TAGFILES) TAGS: $(TAGFILES) etags $(TAGFILES) +# +# Use git archive piped to tar to construct a subdirectory whose name +# is tcpdump-{release}, containing all the checked-in source files, +# and then run autoreconf in that directory to generate the configure +# script and other files from that source. Then remove autom4te.cache, +# construct the release tarball from that subdirectory, and remove +# the subdirectory. +# +# The --format=tar is to force git archive to write a non-compressed +# archive, in case the platform's tar command doesn't have built-in +# decompression. +# +# The ^{tree} is there to force git archive not to write out the +# "helpful" global extended pax header with a commit ID, as not all +# versions of tar can handle that (Solaris tar can't, for example). +# (It turns HEAD, or a tag, both of which are apparently "tree-ish"es, +# into a tree; apparently, unlike HEAD, or a tag, which have a commit +# ID associated with them, the tree associated with them doesn't have +# a commit ID, so no commit ID is available to write, and thus +# git archive doesn't write one.) +# releasetar: @TAG=$(PROG)-`cat VERSION` && \ - if git show-ref --tags --quiet --verify -- "refs/tags/$$TAG"; then \ - git archive --prefix="$$TAG"/ -o "$$TAG".tar.gz "$$TAG" \ - $(RELEASE_FILES) && \ + if [ ! -d .git ]; then echo 'Not in a git clone, stop.'; exit 1; fi && \ + TMPTESTFILE=`mktemp -t tmptestfile_XXXXXXXX` && \ + rm -f "$$TMPTESTFILE" && \ + AUTORECONF_DIR=`dirname "$$TMPTESTFILE"`/"$(PROG)"_build_autoreconf_$$$$ && \ + DIR=`pwd` && \ + rm -rf "$$AUTORECONF_DIR" && \ + mkdir "$$AUTORECONF_DIR" && \ + cd "$$AUTORECONF_DIR" && \ + if git -C "$$DIR" show-ref --tags --quiet --verify -- "refs/tags/$$TAG"; then \ + (git -C "$$DIR" archive --format=tar --prefix="$$TAG"/ "$$TAG^{tree}" $(RELEASE_FILES) | \ + tar xf -) && \ echo "Archive build from tag $$TAG."; \ else \ - git archive --prefix="$$TAG"/ -o "$$TAG".tar.gz HEAD \ - $(RELEASE_FILES) && \ + (git -C "$$DIR" archive --format=tar --prefix="$$TAG"/ "HEAD^{tree}" $(RELEASE_FILES) | \ + tar xf -) && \ echo "No $$TAG tag. Archive build from HEAD."; \ - fi + fi && \ + (cd "$$TAG" && "$${AUTORECONF:-autoreconf}" && rm -rf autom4te.cache) && \ + tar cf "$$DIR/$$TAG".tar "$$TAG" && \ + rm -f "$$DIR/$$TAG".tar.gz && \ + gzip --best "$$DIR/$$TAG".tar && \ + cd "$$DIR" && \ + rm -rf "$$AUTORECONF_DIR" releasecheck: releasetar @TAG=$(PROG)-`cat VERSION` && \ @@ -482,17 +520,21 @@ releasecheck: releasetar rm -rf "$$INSTALL_DIR" && \ tar xf "$$DIR"/"$$TAG".tar.gz && \ cd "$$TAG" && \ - echo "[$@] $$ ./configure --enable-smb --quiet --prefix=$$INSTALL_DIR" && \ - ./configure --enable-smb --quiet --prefix="$$INSTALL_DIR" && \ - echo '[$@] $$ make -s all check' && \ - make -s all check >/dev/null && \ - echo '[$@] $$ make -s install' && \ - make -s install && \ + echo "[$@] $$ touch .devel" && \ + touch .devel && \ + echo "[$@] $$ ./configure --enable-instrument-functions --enable-smb --quiet --prefix=$$INSTALL_DIR" && \ + ./configure --enable-instrument-functions --enable-smb --quiet --prefix="$$INSTALL_DIR" && \ + echo '[$@] $$ $(MAKE) -s all check' && \ + $(MAKE) -s all check >/dev/null && \ + echo '[$@] $$ $(MAKE) -s install' && \ + $(MAKE) -s install && \ cd .. && \ rm -rf "$$TAG" && \ rm -rf "$$INSTALL_DIR" && \ tar xf "$$DIR"/"$$TAG".tar.gz && \ cd "$$TAG" && \ + echo "[$@] $$ touch .devel" && \ + touch .devel && \ mkdir build && \ cd build && \ echo '[$@] $$ cmake -DENABLE_SMB=yes [...] ..' && \ @@ -502,10 +544,10 @@ releasecheck: releasetar -DCMAKE_RULE_MESSAGES=OFF \ -DCMAKE_INSTALL_MESSAGE=NEVER \ .. && \ - echo '[$@] $$ make -s all check' && \ - make -s all check >/dev/null && \ - echo '[$@] $$ make -s install' && \ - make -s install && \ + echo '[$@] $$ $(MAKE) -s all check' && \ + $(MAKE) -s all check >/dev/null && \ + echo '[$@] $$ $(MAKE) -s install' && \ + $(MAKE) -s install && \ cd ../.. && \ rm -rf "$$TAG" && \ rm -rf "$$INSTALL_DIR" && \ @@ -518,8 +560,7 @@ whitespacecheck: exit 1; \ fi @# trailing tab(s)? - @# install-sh has a tab at the end of one line - @if git grep -I -n ' $$' $$(git ls-files|grep -vE '^(tests/|install-sh$$)'); then \ + @if git grep -I -n ' $$' $$(git ls-files|grep -v '^tests/'); then \ echo 'Error: Trailing tabs(s).'; \ exit 1; \ fi @@ -533,7 +574,8 @@ testlist: echo $(TEST_DIST) depend: - $(MKDEP) -c "$(CC)" -m "$(DEPENDENCY_CFLAG)" -s "$(srcdir)" $(DEFS) $(INCLS) $(SRC) $(LIBNETDISSECT_SRC) + @echo $(MKDEP) -c $(CC) -m "$(DEPENDENCY_CFLAG)" -s "$(srcdir)" $(DEFS) $(INCLS) $(SRC) '<libnetdissect src list>' + @$(MKDEP) -c $(CC) -m "$(DEPENDENCY_CFLAG)" -s "$(srcdir)" $(DEFS) $(INCLS) $(SRC) $(LIBNETDISSECT_SRC) shellcheck: - shellcheck -f gcc -e SC2006 build.sh build_matrix.sh build_common.sh + shellcheck -f gcc -e SC2006 autogen.sh build.sh build_matrix.sh build_common.sh mkdep .ci-coverity-scan-build.sh diff --git a/contrib/tcpdump/VERSION b/contrib/tcpdump/VERSION index 9609202bb584..33640cd1b928 100644 --- a/contrib/tcpdump/VERSION +++ b/contrib/tcpdump/VERSION @@ -1 +1 @@ -4.99.4 +4.99.5 diff --git a/contrib/tcpdump/addrtoname.c b/contrib/tcpdump/addrtoname.c index 914665c2315a..fd04e781996f 100644 --- a/contrib/tcpdump/addrtoname.c +++ b/contrib/tcpdump/addrtoname.c @@ -22,9 +22,7 @@ * and address to string conversion routines */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #ifdef HAVE_CASPER #include <libcasper.h> @@ -526,8 +524,7 @@ lookup_nsap(netdissect_options *ndo, const u_char *nsap, k = (ensap[0] << 8) | ensap[1]; j = (ensap[2] << 8) | ensap[3]; i = (ensap[4] << 8) | ensap[5]; - } - else + } else i = j = k = 0; tp = &nsaptable[(i ^ j) & (HASHNAMESIZE-1)]; @@ -1116,7 +1113,7 @@ static const struct ipxsap_ent { { 0x030a, "GalacticommWorldgroupServer" }, { 0x030c, "IntelNetport2/HP JetDirect/HP Quicksilver" }, { 0x0320, "AttachmateGateway" }, - { 0x0327, "MicrosoftDiagnostiocs" }, + { 0x0327, "MicrosoftDiagnostics" }, { 0x0328, "WATCOM SQL Server" }, { 0x0335, "MultiTechSystems MultisynchCommServer" }, { 0x0343, "Xylogics RemoteAccessServer/LANModem" }, diff --git a/contrib/tcpdump/addrtostr.c b/contrib/tcpdump/addrtostr.c index c3bdb8af342c..1fd2cf0908bf 100644 --- a/contrib/tcpdump/addrtostr.c +++ b/contrib/tcpdump/addrtostr.c @@ -36,9 +36,7 @@ * SUCH DAMAGE. */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include "addrtostr.h" @@ -127,16 +125,12 @@ addrtostr6 (const void *src, char *dst, size_t size) best.base = -1; cur.len = 0; cur.base = -1; - for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++) - { - if (words[i] == 0) - { + for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++) { + if (words[i] == 0) { if (cur.base == -1) cur.base = i, cur.len = 1; else cur.len++; - } - else if (cur.base != -1) - { + } else if (cur.base != -1) { if (best.base == -1 || cur.len > best.len) best = cur; cur.base = -1; @@ -160,12 +154,10 @@ addrtostr6 (const void *src, char *dst, size_t size) *dp++ = c; \ space_left--; \ } - for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++) - { + for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++) { /* Are we inside the best run of 0x00's? */ - if (best.base != -1 && i >= best.base && i < (best.base + best.len)) - { + if (best.base != -1 && i >= best.base && i < (best.base + best.len)) { if (i == best.base) APPEND_CHAR(':'); continue; @@ -181,8 +173,7 @@ addrtostr6 (const void *src, char *dst, size_t size) if (i == 6 && best.base == 0 && (best.len == 6 || (best.len == 5 && words[5] == 0xffff))) { - if (!addrtostr(srcaddr+12, dp, space_left)) - { + if (!addrtostr(srcaddr+12, dp, space_left)) { errno = ENOSPC; return (NULL); } @@ -194,8 +185,7 @@ addrtostr6 (const void *src, char *dst, size_t size) snprintfed = snprintf (dp, space_left, "%x", words[i]); if (snprintfed < 0) return (NULL); - if ((size_t) snprintfed >= space_left) - { + if ((size_t) snprintfed >= space_left) { errno = ENOSPC; return (NULL); } diff --git a/contrib/tcpdump/af.c b/contrib/tcpdump/af.c index 1153f102b407..8c3e4da6e831 100644 --- a/contrib/tcpdump/af.c +++ b/contrib/tcpdump/af.c @@ -15,9 +15,7 @@ * Original code by Hannes Gredler (hannes@gredler.at) */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include "netdissect.h" diff --git a/contrib/tcpdump/autogen.sh b/contrib/tcpdump/autogen.sh new file mode 100755 index 000000000000..c84a6b5c5dd2 --- /dev/null +++ b/contrib/tcpdump/autogen.sh @@ -0,0 +1,25 @@ +#!/bin/sh -e + +: "${AUTORECONF:=autoreconf}" + +AUTORECONFVERSION=`$AUTORECONF --version 2>&1 | grep "^autoreconf" | sed 's/.*) *//'` + +maj=`echo "$AUTORECONFVERSION" | cut -d. -f1` +min=`echo "$AUTORECONFVERSION" | cut -d. -f2` +# The minimum required version of autoconf is currently 2.69. +if [ "$maj" = "" ] || [ "$min" = "" ] || \ + [ "$maj" -lt 2 ] || { [ "$maj" -eq 2 ] && [ "$min" -lt 69 ]; }; then + cat >&2 <<-EOF + Please install the 'autoconf' package version 2.69 or later. + If version 2.69 or later is already installed and there is no + autoconf default, it may be necessary to set the AUTORECONF + environment variable to enable the one to use, like: + AUTORECONF=autoreconf-2.69 ./autogen.sh + or + AUTORECONF=autoreconf-2.71 ./autogen.sh + EOF + exit 1 +fi + +echo "$AUTORECONF identification: $AUTORECONFVERSION" +"$AUTORECONF" -f diff --git a/contrib/tcpdump/bpf_dump.c b/contrib/tcpdump/bpf_dump.c index 1ac74a24127c..da50c3e2dd1c 100644 --- a/contrib/tcpdump/bpf_dump.c +++ b/contrib/tcpdump/bpf_dump.c @@ -19,9 +19,7 @@ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/checksum.c b/contrib/tcpdump/checksum.c index e6e84a2510db..4bb97f1e33f4 100644 --- a/contrib/tcpdump/checksum.c +++ b/contrib/tcpdump/checksum.c @@ -17,16 +17,13 @@ * Original code by Hannes Gredler (hannes@gredler.at) */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <assert.h> #include "netdissect.h" @@ -44,7 +41,7 @@ for i in range(256): accum ^= 0x633 crc_table.append(accum) -for i in range(len(crc_table)/8): +for i in range(int(len(crc_table)/8)): for j in range(8): sys.stdout.write("0x%04x, " % crc_table[i*8+j]) sys.stdout.write("\n") @@ -86,36 +83,12 @@ static const uint16_t crc10_table[256] = 0x021e, 0x002d, 0x004b, 0x0278, 0x0087, 0x02b4, 0x02d2, 0x00e1 }; -static void -init_crc10_table(void) -{ -#define CRC10_POLYNOMIAL 0x633 - int i, j; - uint16_t accum; - uint16_t verify_crc10_table[256]; - - for ( i = 0; i < 256; i++ ) - { - accum = ((unsigned short) i << 2); - for ( j = 0; j < 8; j++ ) - { - if ((accum <<= 1) & 0x400) accum ^= CRC10_POLYNOMIAL; - } - verify_crc10_table[i] = accum; - } - assert(memcmp(verify_crc10_table, - crc10_table, - sizeof(verify_crc10_table)) == 0); -#undef CRC10_POLYNOMIAL -} - uint16_t verify_crc10_cksum(uint16_t accum, const u_char *p, int length) { int i; - for ( i = 0; i < length; i++ ) - { + for ( i = 0; i < length; i++ ) { accum = ((accum << 8) & 0x3ff) ^ crc10_table[( accum >> 2) & 0xff] ^ *p++; @@ -123,14 +96,6 @@ verify_crc10_cksum(uint16_t accum, const u_char *p, int length) return accum; } -/* precompute checksum tables */ -void -init_checksum(void) { - - init_crc10_table(); - -} - /* * Creates the OSI Fletcher checksum. See 8473-1, Appendix C, section C.3. * The checksum field of the passed PDU does not need to be reset to zero. diff --git a/contrib/tcpdump/cmake/Modules/FindCRYPTO.cmake b/contrib/tcpdump/cmake/Modules/FindCRYPTO.cmake index 453c6516e071..25846f3ca093 100644 --- a/contrib/tcpdump/cmake/Modules/FindCRYPTO.cmake +++ b/contrib/tcpdump/cmake/Modules/FindCRYPTO.cmake @@ -2,23 +2,186 @@ # Try to find libcrypto. # -# Try to find the header -find_path(CRYPTO_INCLUDE_DIR openssl/crypto.h) +# +# Were we told where to look for libcrypto? +# +if(NOT CRYPTO_ROOT) + # + # No. + # + # First, try looking for it with pkg-config, if we have it. + # + find_package(PkgConfig) + + # + # Homebrew's pkg-config does not, by default, look for + # pkg-config files for packages it has installed. + # Furthermore, at least for OpenSSL, they appear to be + # dumped in package-specific directories whose paths are + # not only package-specific but package-version-specific. + # + # So the only way to find openssl is to get the value of + # PKG_CONFIG_PATH from "brew --env openssl" and add that + # to PKG_CONFIG_PATH. (No, we can't just assume it's under + # /usr/local; Homebrew have conveniently chosen to put it + # under /opt/homebrew on ARM.) + # + # That's the nice thing about Homebrew - it makes things easier! + # Thanks! + # + find_program(BREW brew) + if(BREW) + # + # We have Homebrew. + # Get the pkg-config directory for openssl. + # + execute_process(COMMAND "${BREW}" "--env" "--plain" "openssl" + RESULT_VARIABLE BREW_RESULT + OUTPUT_VARIABLE BREW_OUTPUT + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + if(BREW_RESULT EQUAL 0) + # + # brew --env --plain openssl succeeded. + # Split its output into a list, one entry per line. + # + string(REGEX MATCHALL "[^\n\r]+" BREW_OUTPUT_LINES "${BREW_OUTPUT}") + + # + # Find the line that begins with "PKG_CONFIG_PATH: ", and extract + # the path following that. + # + foreach(LINE IN LISTS BREW_OUTPUT_LINES) + if(LINE MATCHES "PKG_CONFIG_PATH: \(.*\)") + string(REGEX REPLACE "PKG_CONFIG_PATH: \(.*\)" + "\\1" OPENSSL_PKGCONFIG_DIR + ${LINE}) + endif() + endforeach() + endif() + endif() + + # + # Save the current value of the PKG_CONFIG_PATH environment + # variable. + # + set(SAVE_PKG_CONFIG_PATH $ENV{PKG_CONFIG_PATH}) + + # + # If we got an additional pkg-config directory from Homebrew, add + # it to the PKG_CONFIG_PATH environment variable. + # + if(OPENSSL_PKGCONFIG_DIR) + set(ENV{PKG_CONFIG_PATH} "${OPENSSL_PKGCONFIG_DIR}:$ENV{PKG_CONFIG_PATH}") + endif() + + # + # Use pkg-config to find libcrypto. + # + pkg_check_modules(CRYPTO libcrypto) -# Try to find the library -find_library(CRYPTO_LIBRARY crypto) + # + # Revert the change to PKG_CONFIG_PATH. + # + set(ENV{PKG_CONFIG_PATH} "${SAVE_PKG_CONFIG_PATH}") + + # + # Did pkg-config find it? + # + if(CRYPTO_FOUND) + # + # This "helpfully" supplies CRYPTO_LIBRARIES as a bunch of + # library names - not paths - and CRYPTO_LIBRARY_DIRS as + # a bunch of directories. + # + # CMake *really* doesn't like the notion of specifying "here are + # the directories in which to look for libraries" except in + # find_library() calls; it *really* prefers using full paths to + # library files, rather than library names. + # + # Find the libraries and add their full paths. + # + set(CRYPTO_LIBRARY_FULLPATHS) + foreach(_lib IN LISTS CRYPTO_LIBRARIES) + # + # Try to find this library, so we get its full path. + # + find_library(_libfullpath ${_lib} HINTS ${CRYPTO_LIBRARY_DIRS}) + list(APPEND CRYPTO_LIBRARY_FULLPATHS ${_libfullpath}) + endforeach() + set(CRYPTO_LIBRARIES "${CRYPTO_LIBRARY_FULLPATHS}") + else() + # + # No. If we have Homebrew installed, see if it's in Homebrew. + # + if(BREW) + # + # The brew man page lies when it speaks of + # $BREW --prefix --installed <formula> + # outputting nothing. In Homebrew 3.3.16, + # it produces output regardless of whether + # the formula is installed or not, so we + # send the standard output and error to + # the bit bucket. + # + # libcrypto isn't a formula, openssl is a formula. + # + execute_process(COMMAND "${BREW}" "--prefix" "--installed" "openssl" + RESULT_VARIABLE BREW_RESULT + OUTPUT_QUIET + ) + if(BREW_RESULT EQUAL 0) + # + # Yes. Get the include directory and library + # directory. (No, we can't just assume it's + # under /usr/local; Homebrew have conveniently + # chosen to put it under /opt/homebrew on ARM.) + # + execute_process(COMMAND "${BREW}" "--prefix" "openssl" + RESULT_VARIABLE BREW_RESULT + OUTPUT_VARIABLE OPENSSL_PATH + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + set(CRYPTO_INCLUDE_DIRS "${OPENSSL_PATH}/include") + + # + # Search for the libcrypto library under lib. + # + find_library(CRYPTO_LIBRARIES crypto + PATHS "${OPENSSL_PATH}/lib" + NO_DEFAULT_PATH) + endif() + endif() + endif() +endif() + +# +# Have we found it with pkg-config or Homebrew? +# +if(NOT CRYPTO_INCLUDE_DIRS) + # + # No. + # Try to find the openss/evp.h header. + # We search for that header to make sure that it's installed (if + # it's just a shared library for the benefit of existing + # programs, that's not useful). + # + find_path(CRYPTO_INCLUDE_DIRS openssl/evp.h) + + # + # Try to find the library. + # + find_library(CRYPTO_LIBRARIES crypto) +endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(CRYPTO DEFAULT_MSG - CRYPTO_INCLUDE_DIR - CRYPTO_LIBRARY + CRYPTO_INCLUDE_DIRS + CRYPTO_LIBRARIES ) mark_as_advanced( - CRYPTO_INCLUDE_DIR - CRYPTO_LIBRARY + CRYPTO_INCLUDE_DIRS + CRYPTO_LIBRARIES ) - -set(CRYPTO_INCLUDE_DIRS ${CRYPTO_INCLUDE_DIR}) -set(CRYPTO_LIBRARIES ${CRYPTO_LIBRARY}) diff --git a/contrib/tcpdump/cmakeconfig.h.in b/contrib/tcpdump/cmakeconfig.h.in index 02a4a352e42a..0bd1e96e165a 100644 --- a/contrib/tcpdump/cmakeconfig.h.in +++ b/contrib/tcpdump/cmakeconfig.h.in @@ -39,9 +39,6 @@ /* Define to 1 if you have the `EVP_DecryptInit_ex' function. */ #cmakedefine HAVE_EVP_DECRYPTINIT_EX 1 -/* Define to 1 if you have the <fcntl.h> header file. */ -#cmakedefine HAVE_FCNTL_H 1 - /* Define to 1 if you have the `fork' function. */ #cmakedefine HAVE_FORK 1 @@ -60,7 +57,7 @@ /* Define to 1 if you have the `cap-ng' library (-lcap-ng). */ #cmakedefine HAVE_LIBCAP_NG 1 -/* Define to 1 if you have the `crypto' library (-lcrypto). */ +/* Define to 1 if you have a usable `crypto' library (-lcrypto). */ #cmakedefine HAVE_LIBCRYPTO 1 /* Define to 1 if you have the `rpc' library (-lrpc). */ @@ -75,9 +72,6 @@ /* Define to 1 if you have the `openat' function. */ #cmakedefine HAVE_OPENAT 1 -/* Define to 1 if you have the <openssl/evp.h> header file. */ -#cmakedefine HAVE_OPENSSL_EVP_H 1 - /* define if the OS provides AF_INET6 and struct in6_addr */ #cmakedefine HAVE_OS_IPV6_SUPPORT 1 @@ -246,6 +240,12 @@ /* Define to the version of this package. */ #cmakedefine PACKAGE_VERSION "@PACKAGE_VERSION@" +/* The size of `time_t', as computed by sizeof. */ +#cmakedefine SIZEOF_TIME_T @SIZEOF_TIME_T@ + +/* The size of `void *', as computed by sizeof. */ +#cmakedefine SIZEOF_VOID_P @SIZEOF_VOID_P@ + /* Define to 1 if you have the ANSI C header files. */ #cmakedefine STDC_HEADERS 1 diff --git a/contrib/tcpdump/config.guess b/contrib/tcpdump/config.guess index 69188da73d74..f6d217a49f8f 100755 --- a/contrib/tcpdump/config.guess +++ b/contrib/tcpdump/config.guess @@ -1,10 +1,10 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2023 Free Software Foundation, Inc. +# Copyright 1992-2024 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale -timestamp='2023-01-01' +timestamp='2024-01-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -47,7 +47,7 @@ me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] -Output the configuration name of the system \`$me' is run on. +Output the configuration name of the system '$me' is run on. Options: -h, --help print this help, then exit @@ -60,13 +60,13 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2023 Free Software Foundation, Inc. +Copyright 1992-2024 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" -Try \`$me --help' for more information." +Try '$me --help' for more information." # Parse command line while test $# -gt 0 ; do @@ -102,8 +102,8 @@ GUESS= # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. -# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still -# use `HOST_CC' if defined, but it is deprecated. +# Historically, 'CC_FOR_BUILD' used to be named 'HOST_CC'. We still +# use 'HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. @@ -155,6 +155,9 @@ Linux|GNU|GNU/*) set_cc_for_build cat <<-EOF > "$dummy.c" + #if defined(__ANDROID__) + LIBC=android + #else #include <features.h> #if defined(__UCLIBC__) LIBC=uclibc @@ -162,6 +165,8 @@ Linux|GNU|GNU/*) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu + #elif defined(__LLVM_LIBC__) + LIBC=llvm #else #include <stdarg.h> /* First heuristic to detect musl libc. */ @@ -169,6 +174,7 @@ Linux|GNU|GNU/*) LIBC=musl #endif #endif + #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" @@ -459,7 +465,7 @@ case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in UNAME_RELEASE=`uname -v` ;; esac - # Japanese Language versions have a version number like `4.1.3-JL'. + # Japanese Language versions have a version number like '4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; @@ -904,7 +910,7 @@ EOF fi ;; *:FreeBSD:*:*) - UNAME_PROCESSOR=`/usr/bin/uname -p` + UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; @@ -976,7 +982,27 @@ EOF GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) - GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + set_cc_for_build + CPU=$UNAME_MACHINE + LIBCABI=$LIBC + if test "$CC_FOR_BUILD" != no_compiler_found; then + ABI=64 + sed 's/^ //' << EOF > "$dummy.c" + #ifdef __ARM_EABI__ + #ifdef __ARM_PCS_VFP + ABI=eabihf + #else + ABI=eabi + #endif + #endif +EOF + cc_set_abi=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^ABI' | sed 's, ,,g'` + eval "$cc_set_abi" + case $ABI in + eabi | eabihf) CPU=armv8l; LIBCABI=$LIBC$ABI ;; + esac + fi + GUESS=$CPU-unknown-linux-$LIBCABI ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be @@ -1042,6 +1068,15 @@ EOF k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; + kvx:Linux:*:*) + GUESS=$UNAME_MACHINE-unknown-linux-$LIBC + ;; + kvx:cos:*:*) + GUESS=$UNAME_MACHINE-unknown-cos + ;; + kvx:mbr:*:*) + GUESS=$UNAME_MACHINE-unknown-mbr + ;; loongarch32:Linux:*:* | loongarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; @@ -1197,7 +1232,7 @@ EOF GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) - # If we were able to find `uname', then EMX Unix compatibility + # If we were able to find 'uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; @@ -1338,7 +1373,7 @@ EOF GUESS=ns32k-sni-sysv fi ;; - PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort + PENTIUM:*:4.0*:*) # Unisys 'ClearPath HMP IX 4000' SVR4/MP effort # says <Richard.M.Bartel@ccMail.Census.GOV> GUESS=i586-unisys-sysv4 ;; @@ -1560,6 +1595,9 @@ EOF *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; + *:Ironclad:*:*) + GUESS=$UNAME_MACHINE-unknown-ironclad + ;; esac # Do we have a guess based on uname results? diff --git a/contrib/tcpdump/config.h.in b/contrib/tcpdump/config.h.in index 59bc6120a5d9..c1bc5f7d9de8 100644 --- a/contrib/tcpdump/config.h.in +++ b/contrib/tcpdump/config.h.in @@ -3,6 +3,9 @@ /* Define to 1 if arpa/inet.h declares `ether_ntohost' */ #undef ARPA_INET_H_DECLARES_ETHER_NTOHOST +/* define if you want to build the instrument functions code */ +#undef ENABLE_INSTRUMENT_FUNCTIONS + /* define if you want to build the possibly-buggy SMB printer */ #undef ENABLE_SMB @@ -39,9 +42,6 @@ /* Define to 1 if you have the `EVP_DecryptInit_ex' function. */ #undef HAVE_EVP_DECRYPTINIT_EX -/* Define to 1 if you have the <fcntl.h> header file. */ -#undef HAVE_FCNTL_H - /* Define to 1 if you have the `fork' function. */ #undef HAVE_FORK @@ -60,27 +60,18 @@ /* Define to 1 if you have the `cap-ng' library (-lcap-ng). */ #undef HAVE_LIBCAP_NG -/* Define to 1 if you have the `crypto' library (-lcrypto). */ +/* Define to 1 if you have a usable `crypto' library (-lcrypto). */ #undef HAVE_LIBCRYPTO /* Define to 1 if you have the `rpc' library (-lrpc). */ #undef HAVE_LIBRPC -/* Define to 1 if you have the <memory.h> header file. */ -#undef HAVE_MEMORY_H - /* Define to 1 if you have the <net/if.h> header file. */ #undef HAVE_NET_IF_H -/* Define to 1 if printf(3) does not support the z length modifier. */ -#undef HAVE_NO_PRINTF_Z - /* Define to 1 if you have the `openat' function. */ #undef HAVE_OPENAT -/* Define to 1 if you have the <openssl/evp.h> header file. */ -#undef HAVE_OPENSSL_EVP_H - /* define if the OS provides AF_INET6 and struct in6_addr */ #undef HAVE_OS_IPV6_SUPPORT @@ -174,6 +165,9 @@ /* Define to 1 if you have the <stdint.h> header file. */ #undef HAVE_STDINT_H +/* Define to 1 if you have the <stdio.h> header file. */ +#undef HAVE_STDIO_H + /* Define to 1 if you have the <stdlib.h> header file. */ #undef HAVE_STDLIB_H @@ -243,10 +237,15 @@ /* Define to the version of this package. */ #undef PACKAGE_VERSION +/* The size of `time_t', as computed by sizeof. */ +#undef SIZEOF_TIME_T + /* The size of `void *', as computed by sizeof. */ #undef SIZEOF_VOID_P -/* Define to 1 if you have the ANSI C header files. */ +/* Define to 1 if all of the C90 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ #undef STDC_HEADERS /* Define to 1 if sys/ethernet.h declares `ether_ntohost' */ diff --git a/contrib/tcpdump/config.sub b/contrib/tcpdump/config.sub index de4259e40479..2c6a07ab3c34 100755 --- a/contrib/tcpdump/config.sub +++ b/contrib/tcpdump/config.sub @@ -1,10 +1,10 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2023 Free Software Foundation, Inc. +# Copyright 1992-2024 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale -timestamp='2023-01-21' +timestamp='2024-01-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -76,13 +76,13 @@ Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.sub ($timestamp) -Copyright 1992-2023 Free Software Foundation, Inc. +Copyright 1992-2024 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" -Try \`$me --help' for more information." +Try '$me --help' for more information." # Parse command line while test $# -gt 0 ; do @@ -130,7 +130,7 @@ IFS=$saved_IFS # Separate into logical components for further validation case $1 in *-*-*-*-*) - echo Invalid configuration \`"$1"\': more than four components >&2 + echo "Invalid configuration '$1': more than four components" >&2 exit 1 ;; *-*-*-*) @@ -145,7 +145,8 @@ case $1 in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ - | storm-chaos* | os2-emx* | rtmk-nova* | managarm-*) + | storm-chaos* | os2-emx* | rtmk-nova* | managarm-* \ + | windows-* ) basic_machine=$field1 basic_os=$maybe_os ;; @@ -943,7 +944,7 @@ $basic_machine EOF IFS=$saved_IFS ;; - # We use `pc' rather than `unknown' + # We use 'pc' rather than 'unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) @@ -1180,7 +1181,7 @@ case $cpu-$vendor in case $cpu in 1750a | 580 \ | a29k \ - | aarch64 | aarch64_be \ + | aarch64 | aarch64_be | aarch64c | arm64ec \ | abacus \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ @@ -1199,12 +1200,14 @@ case $cpu-$vendor in | d10v | d30v | dlx | dsp16xx \ | e2k | elxsi | epiphany \ | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ + | javascript \ | h8300 | h8500 \ | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i*86 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ + | kvx \ | le32 | le64 \ | lm32 \ | loongarch32 | loongarch64 \ @@ -1213,36 +1216,13 @@ case $cpu-$vendor in | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ | m88110 | m88k | maxq | mb | mcore | mep | metag \ | microblaze | microblazeel \ - | mips | mipsbe | mipseb | mipsel | mipsle \ - | mips16 \ - | mips64 | mips64eb | mips64el \ - | mips64octeon | mips64octeonel \ - | mips64orion | mips64orionel \ - | mips64r5900 | mips64r5900el \ - | mips64vr | mips64vrel \ - | mips64vr4100 | mips64vr4100el \ - | mips64vr4300 | mips64vr4300el \ - | mips64vr5000 | mips64vr5000el \ - | mips64vr5900 | mips64vr5900el \ - | mipsisa32 | mipsisa32el \ - | mipsisa32r2 | mipsisa32r2el \ - | mipsisa32r3 | mipsisa32r3el \ - | mipsisa32r5 | mipsisa32r5el \ - | mipsisa32r6 | mipsisa32r6el \ - | mipsisa64 | mipsisa64el \ - | mipsisa64r2 | mipsisa64r2el \ - | mipsisa64r3 | mipsisa64r3el \ - | mipsisa64r5 | mipsisa64r5el \ - | mipsisa64r6 | mipsisa64r6el \ - | mipsisa64sb1 | mipsisa64sb1el \ - | mipsisa64sr71k | mipsisa64sr71kel \ - | mipsr5900 | mipsr5900el \ - | mipstx39 | mipstx39el \ + | mips* \ | mmix \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ + | nanomips* \ | nds32 | nds32le | nds32be \ | nfp \ | nios | nios2 | nios2eb | nios2el \ @@ -1274,6 +1254,7 @@ case $cpu-$vendor in | ubicom32 \ | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ | vax \ + | vc4 \ | visium \ | w65 \ | wasm32 | wasm64 \ @@ -1285,7 +1266,7 @@ case $cpu-$vendor in ;; *) - echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2 + echo "Invalid configuration '$1': machine '$cpu-$vendor' not recognized" 1>&2 exit 1 ;; esac @@ -1306,11 +1287,12 @@ esac # Decode manufacturer-specific aliases for certain operating systems. -if test x$basic_os != x +if test x"$basic_os" != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. +obj= case $basic_os in gnu/linux*) kernel=linux @@ -1510,10 +1492,16 @@ case $os in os=eabi ;; *) - os=elf + os= + obj=elf ;; esac ;; + aout* | coff* | elf* | pe*) + # These are machine code file formats, not OSes + obj=$os + os= + ;; *) # No normalization, but not necessarily accepted, that comes below. ;; @@ -1532,12 +1520,15 @@ else # system, and we'll never get to this point. kernel= +obj= case $cpu-$vendor in score-*) - os=elf + os= + obj=elf ;; spu-*) - os=elf + os= + obj=elf ;; *-acorn) os=riscix1.2 @@ -1547,28 +1538,35 @@ case $cpu-$vendor in os=gnu ;; arm*-semi) - os=aout + os= + obj=aout ;; c4x-* | tic4x-*) - os=coff + os= + obj=coff ;; c8051-*) - os=elf + os= + obj=elf ;; clipper-intergraph) os=clix ;; hexagon-*) - os=elf + os= + obj=elf ;; tic54x-*) - os=coff + os= + obj=coff ;; tic55x-*) - os=coff + os= + obj=coff ;; tic6x-*) - os=coff + os= + obj=coff ;; # This must come before the *-dec entry. pdp10-*) @@ -1590,19 +1588,24 @@ case $cpu-$vendor in os=sunos3 ;; m68*-cisco) - os=aout + os= + obj=aout ;; mep-*) - os=elf + os= + obj=elf ;; mips*-cisco) - os=elf + os= + obj=elf ;; - mips*-*) - os=elf + mips*-*|nanomips*-*) + os= + obj=elf ;; or32-*) - os=coff + os= + obj=coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=sysv3 @@ -1611,7 +1614,8 @@ case $cpu-$vendor in os=sunos4.1.1 ;; pru-*) - os=elf + os= + obj=elf ;; *-be) os=beos @@ -1692,10 +1696,12 @@ case $cpu-$vendor in os=uxpv ;; *-rom68k) - os=coff + os= + obj=coff ;; *-*bug) - os=coff + os= + obj=coff ;; *-apple) os=macos @@ -1713,10 +1719,11 @@ esac fi -# Now, validate our (potentially fixed-up) OS. +# Now, validate our (potentially fixed-up) individual pieces (OS, OBJ). + case $os in # Sometimes we do "kernel-libc", so those need to count as OSes. - musl* | newlib* | relibc* | uclibc*) + llvm* | musl* | newlib* | relibc* | uclibc*) ;; # Likewise for "kernel-abi" eabi* | gnueabi*) @@ -1724,6 +1731,9 @@ case $os in # VxWorks passes extra cpu info in the 4th filed. simlinux | simwindows | spe) ;; + # See `case $cpu-$os` validation below + ghcjs) + ;; # Now accept the basic system types. # The portable systems comes first. # Each alternative MUST end in a * to match a version number. @@ -1732,7 +1742,7 @@ case $os in | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ | hiux* | abug | nacl* | netware* | windows* \ - | os9* | macos* | osx* | ios* \ + | os9* | macos* | osx* | ios* | tvos* | watchos* \ | mpw* | magic* | mmixware* | mon960* | lnews* \ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ | aos* | aros* | cloudabi* | sortix* | twizzler* \ @@ -1741,11 +1751,11 @@ case $os in | mirbsd* | netbsd* | dicos* | openedition* | ose* \ | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \ | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ - | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ - | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ + | bosx* | nextstep* | cxux* | oabi* \ + | ptx* | ecoff* | winnt* | domain* | vsta* \ | udi* | lites* | ieee* | go32* | aux* | hcos* \ | chorusrdb* | cegcc* | glidix* | serenity* \ - | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ + | cygwin* | msys* | moss* | proelf* | rtems* \ | midipix* | mingw32* | mingw64* | mint* \ | uxpv* | beos* | mpeix* | udk* | moxiebox* \ | interix* | uwin* | mks* | rhapsody* | darwin* \ @@ -1758,62 +1768,116 @@ case $os in | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \ - | fiwix* | mlibc* ) + | fiwix* | mlibc* | cos* | mbr* | ironclad* ) ;; # This one is extra strict with allowed versions sco3.2v2 | sco3.2v[4-9]* | sco5v6*) # Don't forget version if it is 3.2v4 or newer. ;; + # This refers to builds using the UEFI calling convention + # (which depends on the architecture) and PE file format. + # Note that this is both a different calling convention and + # different file format than that of GNU-EFI + # (x86_64-w64-mingw32). + uefi) + ;; none) ;; - kernel* ) + kernel* | msvc* ) # Restricted further below ;; + '') + if test x"$obj" = x + then + echo "Invalid configuration '$1': Blank OS only allowed with explicit machine code file format" 1>&2 + fi + ;; *) - echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2 + echo "Invalid configuration '$1': OS '$os' not recognized" 1>&2 + exit 1 + ;; +esac + +case $obj in + aout* | coff* | elf* | pe*) + ;; + '') + # empty is fine + ;; + *) + echo "Invalid configuration '$1': Machine code format '$obj' not recognized" 1>&2 + exit 1 + ;; +esac + +# Here we handle the constraint that a (synthetic) cpu and os are +# valid only in combination with each other and nowhere else. +case $cpu-$os in + # The "javascript-unknown-ghcjs" triple is used by GHC; we + # accept it here in order to tolerate that, but reject any + # variations. + javascript-ghcjs) + ;; + javascript-* | *-ghcjs) + echo "Invalid configuration '$1': cpu '$cpu' is not valid with os '$os$obj'" 1>&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. -case $kernel-$os in - linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ - | linux-musl* | linux-relibc* | linux-uclibc* | linux-mlibc* ) +case $kernel-$os-$obj in + linux-gnu*- | linux-android*- | linux-dietlibc*- | linux-llvm*- \ + | linux-mlibc*- | linux-musl*- | linux-newlib*- \ + | linux-relibc*- | linux-uclibc*- ) ;; - uclinux-uclibc* ) + uclinux-uclibc*- ) ;; - managarm-mlibc* | managarm-kernel* ) + managarm-mlibc*- | managarm-kernel*- ) ;; - -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* | -mlibc* ) + windows*-msvc*-) + ;; + -dietlibc*- | -llvm*- | -mlibc*- | -musl*- | -newlib*- | -relibc*- \ + | -uclibc*- ) # These are just libc implementations, not actual OSes, and thus # require a kernel. - echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 + echo "Invalid configuration '$1': libc '$os' needs explicit kernel." 1>&2 exit 1 ;; - -kernel* ) - echo "Invalid configuration \`$1': \`$os' needs explicit kernel." 1>&2 + -kernel*- ) + echo "Invalid configuration '$1': '$os' needs explicit kernel." 1>&2 exit 1 ;; - *-kernel* ) - echo "Invalid configuration \`$1': \`$kernel' does not support \`$os'." 1>&2 + *-kernel*- ) + echo "Invalid configuration '$1': '$kernel' does not support '$os'." 1>&2 exit 1 ;; - kfreebsd*-gnu* | kopensolaris*-gnu*) + *-msvc*- ) + echo "Invalid configuration '$1': '$os' needs 'windows'." 1>&2 + exit 1 ;; - vxworks-simlinux | vxworks-simwindows | vxworks-spe) + kfreebsd*-gnu*- | kopensolaris*-gnu*-) ;; - nto-qnx*) + vxworks-simlinux- | vxworks-simwindows- | vxworks-spe-) ;; - os2-emx) + nto-qnx*-) + ;; + os2-emx-) + ;; + *-eabi*- | *-gnueabi*-) ;; - *-eabi* | *-gnueabi*) + none--*) + # None (no kernel, i.e. freestanding / bare metal), + # can be paired with an machine code file format ;; - -*) + -*-) # Blank kernel with real OS is always fine. ;; - *-*) - echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 + --*) + # Blank kernel and OS with real machine code file format is always fine. + ;; + *-*-*) + echo "Invalid configuration '$1': Kernel '$kernel' not known to work with OS '$os'." 1>&2 exit 1 ;; esac @@ -1896,7 +1960,7 @@ case $vendor in ;; esac -echo "$cpu-$vendor-${kernel:+$kernel-}$os" +echo "$cpu-$vendor${kernel:+-$kernel}${os:+-$os}${obj:+-$obj}" exit # Local variables: diff --git a/contrib/tcpdump/configure b/contrib/tcpdump/configure index 53c62d5e95a4..9400d62bc838 100755 --- a/contrib/tcpdump/configure +++ b/contrib/tcpdump/configure @@ -1,9 +1,10 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for tcpdump 4.99.4. +# Generated by GNU Autoconf 2.71 for tcpdump 4.99.5. # # -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. +# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation, +# Inc. # # # This configure script is free software; the Free Software Foundation @@ -14,14 +15,16 @@ # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -31,46 +34,46 @@ esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi +if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -79,13 +82,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -94,8 +90,12 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -107,30 +107,10 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. @@ -152,20 +132,22 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 +exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : + as_bourne_compatible="as_nop=: +if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST -else +else \$as_nop case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( @@ -185,42 +167,53 @@ as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : +if ( set x; as_fn_ret_success y && test x = \"\$1\" ) +then : -else +else \$as_nop exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 +blah=\$(echo \$(echo blah)) +test x\"\$blah\" = xblah || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" - if (eval "$as_required") 2>/dev/null; then : + if (eval "$as_required") 2>/dev/null +then : as_have_required=yes -else +else $as_nop as_have_required=no fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : + if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null +then : -else +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base + as_shell=$as_dir$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : + as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : + if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null +then : break 2 fi fi @@ -228,14 +221,21 @@ fi esac as_found=false done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + if { test -f "$SHELL" || test -f "$SHELL.exe"; } && + as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null +then : + CONFIG_SHELL=$SHELL as_have_required=yes +fi +fi - if test "x$CONFIG_SHELL" != x; then : + if test "x$CONFIG_SHELL" != x +then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also @@ -253,18 +253,19 @@ esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 +printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." + if test x$as_have_required = xno +then : + printf "%s\n" "$0: This script requires a shell more modern than all" + printf "%s\n" "$0: the shells that I found on your system." + if test ${ZSH_VERSION+y} ; then + printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should" + printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later." else - $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, + printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." @@ -291,6 +292,7 @@ as_fn_unset () } as_unset=as_fn_unset + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -308,6 +310,14 @@ as_fn_exit () as_fn_set_status $1 exit $1 } # as_fn_exit +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_mkdir_p # ------------- @@ -322,7 +332,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -331,7 +341,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -370,12 +380,13 @@ as_fn_executable_p () # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -387,18 +398,27 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith +# as_fn_nop +# --------- +# Do nothing but, unlike ":", preserve the value of $?. +as_fn_nop () +{ + return $? +} +as_nop=as_fn_nop # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- @@ -410,9 +430,9 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error @@ -439,7 +459,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -483,7 +503,7 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } + { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall @@ -497,6 +517,10 @@ as_cr_alnum=$as_cr_Letters$as_cr_digits exit } + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -510,6 +534,13 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -577,48 +608,44 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='tcpdump' PACKAGE_TARNAME='tcpdump' -PACKAGE_VERSION='4.99.4' -PACKAGE_STRING='tcpdump 4.99.4' +PACKAGE_VERSION='4.99.5' +PACKAGE_STRING='tcpdump 4.99.5' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_unique_file="tcpdump.c" # Factoring default headers for most tests. ac_includes_default="\ -#include <stdio.h> -#ifdef HAVE_SYS_TYPES_H -# include <sys/types.h> -#endif -#ifdef HAVE_SYS_STAT_H -# include <sys/stat.h> +#include <stddef.h> +#ifdef HAVE_STDIO_H +# include <stdio.h> #endif -#ifdef STDC_HEADERS +#ifdef HAVE_STDLIB_H # include <stdlib.h> -# include <stddef.h> -#else -# ifdef HAVE_STDLIB_H -# include <stdlib.h> -# endif #endif #ifdef HAVE_STRING_H -# if !defined STDC_HEADERS && defined HAVE_MEMORY_H -# include <memory.h> -# endif # include <string.h> #endif -#ifdef HAVE_STRINGS_H -# include <strings.h> -#endif #ifdef HAVE_INTTYPES_H # include <inttypes.h> #endif #ifdef HAVE_STDINT_H # include <stdint.h> #endif +#ifdef HAVE_STRINGS_H +# include <strings.h> +#endif +#ifdef HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif +#ifdef HAVE_SYS_STAT_H +# include <sys/stat.h> +#endif #ifdef HAVE_UNISTD_H # include <unistd.h> #endif" +ac_header_c_list= ac_subst_vars='LTLIBOBJS INSTALL_DATA INSTALL_SCRIPT @@ -628,19 +655,24 @@ MAN_FILE_FORMATS LOCALSRC V_PCAPDEP V_INCLS -V_GROUP V_DEFS V_CCOPT +LIBCRYPTO_LIBS_STATIC +LIBCRYPTO_LIBS +LIBCRYPTO_CFLAGS MKDEP DEPENDENCY_CFLAG AR RANLIB PCAP_CONFIG -PKG_CONFIG LIBOBJS EGREP GREP CPP +BREW +PKG_CONFIG_LIBDIR +PKG_CONFIG_PATH +PKG_CONFIG OBJEXT EXEEXT ac_ct_CC @@ -676,6 +708,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -701,6 +734,7 @@ enable_option_checking with_gcc enable_universal with_smi +enable_instrument_functions enable_smb with_user with_chroot @@ -717,7 +751,13 @@ CFLAGS LDFLAGS LIBS CPPFLAGS -CPP' +PKG_CONFIG +PKG_CONFIG_PATH +PKG_CONFIG_LIBDIR +CPP +LIBCRYPTO_CFLAGS +LIBCRYPTO_LIBS +LIBCRYPTO_LIBS_STATIC' # Initialize some variables set by options. @@ -756,6 +796,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -785,8 +826,6 @@ do *) ac_optarg=yes ;; esac - # Accept the important Cygnus configure options, so we can diagnose typos. - case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; @@ -827,9 +866,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -853,9 +892,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" + as_fn_error $? "invalid feature name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" @@ -1008,6 +1047,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1057,9 +1105,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1073,9 +1121,9 @@ do ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" + as_fn_error $? "invalid package name: \`$ac_useropt'" ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` + ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" @@ -1119,9 +1167,9 @@ Try \`$0 --help' for more information" *) # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; @@ -1137,7 +1185,7 @@ if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; + *) printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi @@ -1145,7 +1193,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1201,7 +1249,7 @@ $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | +printf "%s\n" X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -1258,7 +1306,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures tcpdump 4.99.4 to adapt to many kinds of systems. +\`configure' configures tcpdump 4.99.5 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1298,6 +1346,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1323,7 +1372,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of tcpdump 4.99.4:";; + short | recursive ) echo "Configuration of tcpdump 4.99.5:";; esac cat <<\_ACEOF @@ -1332,6 +1381,8 @@ Optional Features: --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --disable-universal don't build universal on macOS + --enable-instrument-functions + enable instrument functions code [default=no] --enable-smb enable possibly-buggy SMB printer [default=no] --disable-local-libpcap don't look for a local libpcap [default=check for a local libpcap] @@ -1358,7 +1409,18 @@ Some influential environment variables: LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> + PKG_CONFIG path to pkg-config utility + PKG_CONFIG_PATH + directories to add to pkg-config's search path + PKG_CONFIG_LIBDIR + path overriding pkg-config's built-in search path CPP C preprocessor + LIBCRYPTO_CFLAGS + C compiler flags for libcrypto, overriding pkg-config + LIBCRYPTO_LIBS + linker flags for libcrypto, overriding pkg-config + LIBCRYPTO_LIBS_STATIC + static-link linker flags for libcrypto, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. @@ -1379,9 +1441,9 @@ if test "$ac_init_help" = "recursive"; then case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -1409,7 +1471,8 @@ esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. + # Check for configure.gnu first; this name is used for a wrapper for + # Metaconfig's "Configure" on case-insensitive file systems. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive @@ -1417,7 +1480,7 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix echo && $SHELL "$ac_srcdir/configure" --help=recursive else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done @@ -1426,10 +1489,10 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -tcpdump configure 4.99.4 -generated by GNU Autoconf 2.69 +tcpdump configure 4.99.5 +generated by GNU Autoconf 2.71 -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF @@ -1446,14 +1509,14 @@ fi ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext + rm -f conftest.$ac_objext conftest.beam if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -1461,14 +1524,15 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err - } && test -s conftest.$ac_objext; then : + } && test -s conftest.$ac_objext +then : ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 @@ -1478,134 +1542,43 @@ fi } # ac_fn_c_try_compile -# ac_fn_c_try_cpp LINENO -# ---------------------- -# Try to preprocess conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_cpp () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if { { ac_try="$ac_cpp conftest.$ac_ext" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } > conftest.i && { - test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || - test ! -s conftest.err - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_cpp - -# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES +# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- -# Tests whether HEADER exists, giving a warning if it cannot be compiled using -# the include files in INCLUDES and setting the cache variable VAR -# accordingly. -ac_fn_c_check_header_mongrel () +# Tests whether HEADER exists and can be compiled using the include files in +# INCLUDES, setting the cache variable VAR accordingly. +ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - if eval \${$3+:} false; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -else - # Is the header compilable? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 -$as_echo_n "checking $2 usability... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_header_compiler=yes -else - ac_header_compiler=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 -$as_echo "$ac_header_compiler" >&6; } - -# Is the header present? -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 -$as_echo_n "checking $2 presence... " >&6; } -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <$2> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - ac_header_preproc=yes -else - ac_header_preproc=no +if ac_fn_c_try_compile "$LINENO" +then : + eval "$3=yes" +else $as_nop + eval "$3=no" fi -rm -f conftest.err conftest.i conftest.$ac_ext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 -$as_echo "$ac_header_preproc" >&6; } - -# So? What about this header? -case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( - yes:no: ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 -$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; - no:yes:* ) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 -$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 -$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 -$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 -$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 -$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} - ;; -esac - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - eval "$3=\$ac_header_compiler" +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -fi + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_c_check_header_mongrel +} # ac_fn_c_check_header_compile # ac_fn_c_try_run LINENO # ---------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes -# that executables *can* be run. +# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that +# executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack @@ -1615,25 +1588,26 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; } +then : ac_retval=0 -else - $as_echo "$as_me: program exited with status $ac_status" >&5 - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: program exited with status $ac_status" >&5 + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status @@ -1644,150 +1618,6 @@ fi } # ac_fn_c_try_run -# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES -# ------------------------------------------------------- -# Tests whether HEADER exists and can be compiled using the include files in -# INCLUDES, setting the cache variable VAR accordingly. -ac_fn_c_check_header_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -$4 -#include <$2> -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_header_compile - -# ac_fn_c_try_link LINENO -# ----------------------- -# Try to link conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_link () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext conftest$ac_exeext - if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest$ac_exeext && { - test "$cross_compiling" = yes || - test -x conftest$ac_exeext - }; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information - # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would - # interfere with the next link command; also delete a directory that is - # left behind by Apple's compiler. We do this before executing the actions. - rm -rf conftest.dSYM conftest_ipa8_conftest.oo - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_link - -# ac_fn_c_check_func LINENO FUNC VAR -# ---------------------------------- -# Tests whether FUNC exists, setting the cache variable VAR accordingly -ac_fn_c_check_func () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -/* Define $2 to an innocuous variant, in case <limits.h> declares $2. - For example, HP-UX 11i <limits.h> declares gettimeofday. */ -#define $2 innocuous_$2 - -/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $2 (); below. - Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - <limits.h> exists even on freestanding compilers. */ - -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - -#undef $2 - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char $2 (); -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined __stub_$2 || defined __stub___$2 -choke me -#endif - -int -main () -{ -return $2 (); - ; - return 0; -} -_ACEOF -if ac_fn_c_try_link "$LINENO"; then : - eval "$3=yes" -else - eval "$3=no" -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext conftest.$ac_ext -fi -eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - -} # ac_fn_c_check_func - # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes @@ -1802,7 +1632,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; @@ -1812,14 +1642,15 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; @@ -1829,9 +1660,10 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_hi=$ac_mid; break -else +else $as_nop as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= @@ -1839,14 +1671,14 @@ else fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; @@ -1856,14 +1688,15 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; @@ -1873,9 +1706,10 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_lo=$ac_mid; break -else +else $as_nop as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= @@ -1883,14 +1717,14 @@ else fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done -else +else $as_nop ac_lo= ac_hi= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val @@ -1898,7 +1732,7 @@ while test "x$ac_lo" != "x$ac_hi"; do /* end confdefs.h. */ $4 int -main () +main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; @@ -1908,12 +1742,13 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_hi=$ac_mid -else +else $as_nop as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; @@ -1923,12 +1758,12 @@ esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 -static long int longval () { return $2; } -static unsigned long int ulongval () { return $2; } +static long int longval (void) { return $2; } +static unsigned long int ulongval (void) { return $2; } #include <stdio.h> #include <stdlib.h> int -main () +main (void) { FILE *f = fopen ("conftest.val", "w"); @@ -1956,9 +1791,10 @@ main () return 0; } _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : echo >>conftest.val; read $3 <conftest.val; ac_retval=0 -else +else $as_nop ac_retval=1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -1971,25 +1807,175 @@ rm -f conftest.val } # ac_fn_c_compute_int -# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES -# --------------------------------------------- +# ac_fn_c_try_link LINENO +# ----------------------- +# Try to link conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_link () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + rm -f conftest.$ac_objext conftest.beam conftest$ac_exeext + if { { ac_try="$ac_link" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_link") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } && { + test -z "$ac_c_werror_flag" || + test ! -s conftest.err + } && test -s conftest$ac_exeext && { + test "$cross_compiling" = yes || + test -x conftest$ac_exeext + } +then : + ac_retval=0 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information + # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would + # interfere with the next link command; also delete a directory that is + # left behind by Apple's compiler. We do this before executing the actions. + rm -rf conftest.dSYM conftest_ipa8_conftest.oo + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_link + +# ac_fn_c_check_func LINENO FUNC VAR +# ---------------------------------- +# Tests whether FUNC exists, setting the cache variable VAR accordingly +ac_fn_c_check_func () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Define $2 to an innocuous variant, in case <limits.h> declares $2. + For example, HP-UX 11i <limits.h> declares gettimeofday. */ +#define $2 innocuous_$2 + +/* System header to define __stub macros and hopefully few prototypes, + which can conflict with char $2 (); below. */ + +#include <limits.h> +#undef $2 + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char $2 (); +/* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ +#if defined __stub_$2 || defined __stub___$2 +choke me +#endif + +int +main (void) +{ +return $2 (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + eval "$3=yes" +else $as_nop + eval "$3=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +fi +eval ac_res=\$$3 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + +} # ac_fn_c_check_func + +# ac_fn_c_try_cpp LINENO +# ---------------------- +# Try to preprocess conftest.$ac_ext, and return whether this succeeded. +ac_fn_c_try_cpp () +{ + as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack + if { { ac_try="$ac_cpp conftest.$ac_ext" +case "(($ac_try" in + *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; + *) ac_try_echo=$ac_try;; +esac +eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" +printf "%s\n" "$ac_try_echo"; } >&5 + (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err + ac_status=$? + if test -s conftest.err; then + grep -v '^ *+' conftest.err >conftest.er1 + cat conftest.er1 >&5 + mv -f conftest.er1 conftest.err + fi + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } > conftest.i && { + test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || + test ! -s conftest.err + } +then : + ac_retval=0 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 +sed 's/^/| /' conftest.$ac_ext >&5 + + ac_retval=1 +fi + eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno + as_fn_set_status $ac_retval + +} # ac_fn_c_try_cpp + +# ac_fn_check_decl LINENO SYMBOL VAR INCLUDES EXTRA-OPTIONS FLAG-VAR +# ------------------------------------------------------------------ # Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR -# accordingly. -ac_fn_c_check_decl () +# accordingly. Pass EXTRA-OPTIONS to the compiler, using FLAG-VAR. +ac_fn_check_decl () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack as_decl_name=`echo $2|sed 's/ *(.*//'` + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 +printf %s "checking whether $as_decl_name is declared... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'` - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5 -$as_echo_n "checking whether $as_decl_name is declared... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + eval ac_save_FLAGS=\$$6 + as_fn_append $6 " $5" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { #ifndef $as_decl_name #ifdef __cplusplus @@ -2003,19 +1989,22 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : eval "$3=yes" -else +else $as_nop eval "$3=no" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + eval $6=\$ac_save_FLAGS + fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno -} # ac_fn_c_check_decl +} # ac_fn_check_decl # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- @@ -2024,17 +2013,18 @@ $as_echo "$ac_res" >&6; } ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 -$as_echo_n "checking for $2... " >&6; } -if eval \${$3+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 +printf %s "checking for $2... " >&6; } +if eval test \${$3+y} +then : + printf %s "(cached) " >&6 +else $as_nop eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof ($2)) return 0; @@ -2042,12 +2032,13 @@ if (sizeof ($2)) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int -main () +main (void) { if (sizeof (($2))) return 0; @@ -2055,29 +2046,50 @@ if (sizeof (($2))) return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop eval "$3=yes" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi eval ac_res=\$$3 - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +printf "%s\n" "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_type +ac_configure_args_raw= +for ac_arg +do + case $ac_arg in + *\'*) + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + as_fn_append ac_configure_args_raw " '$ac_arg'" +done + +case $ac_configure_args_raw in + *$as_nl*) + ac_safe_unquote= ;; + *) + ac_unsafe_z='|&;<>()$`\\"*?[ '' ' # This string ends in space, tab. + ac_unsafe_a="$ac_unsafe_z#~" + ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g" + ac_configure_args_raw=` printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;; +esac + cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by tcpdump $as_me 4.99.4, which was -generated by GNU Autoconf 2.69. Invocation command line was +It was created by tcpdump $as_me 4.99.5, which was +generated by GNU Autoconf 2.71. Invocation command line was - $ $0 $@ + $ $0$ac_configure_args_raw _ACEOF exec 5>>config.log @@ -2110,8 +2122,12 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + printf "%s\n" "PATH: $as_dir" done IFS=$as_save_IFS @@ -2146,7 +2162,7 @@ do | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; @@ -2181,11 +2197,13 @@ done # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? + # Sanitize IFS. + IFS=" "" $as_nl" # Save into config.log some information that might help in debugging. { echo - $as_echo "## ---------------- ## + printf "%s\n" "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo @@ -2196,8 +2214,8 @@ trap 'exit_status=$? case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -2221,7 +2239,7 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; ) echo - $as_echo "## ----------------- ## + printf "%s\n" "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo @@ -2229,14 +2247,14 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## + printf "%s\n" "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo @@ -2244,15 +2262,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; do eval ac_val=\$$ac_var case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; + *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac - $as_echo "$ac_var='\''$ac_val'\''" + printf "%s\n" "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then - $as_echo "## ----------- ## + printf "%s\n" "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo @@ -2260,8 +2278,8 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; echo fi test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" + printf "%s\n" "$as_me: caught signal $ac_signal" + printf "%s\n" "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && @@ -2275,63 +2293,48 @@ ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h -$as_echo "/* confdefs.h */" > confdefs.h +printf "%s\n" "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF +printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF +printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF +printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF +printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF +printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF +printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac + ac_site_files="$CONFIG_SITE" elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site + ac_site_files="$prefix/share/config.site $prefix/etc/config.site" else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site + ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" + +for ac_site_file in $ac_site_files do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} + case $ac_site_file in #( + */*) : + ;; #( + *) : + ac_site_file=./$ac_site_file ;; +esac + if test -f "$ac_site_file" && test -r "$ac_site_file"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 +printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi @@ -2341,19 +2344,434 @@ if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 +printf "%s\n" "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 +printf "%s\n" "$as_me: creating cache $cache_file" >&6;} >$cache_file fi +# Test code for whether the C compiler supports C89 (global declarations) +ac_c_conftest_c89_globals=' +/* Does the compiler advertise C89 conformance? + Do not test the value of __STDC__, because some compilers set it to 0 + while being otherwise adequately conformant. */ +#if !defined __STDC__ +# error "Compiler does not advertise C89 conformance" +#endif + +#include <stddef.h> +#include <stdarg.h> +struct stat; +/* Most of the following tests are stolen from RCS 5.7 src/conf.sh. */ +struct buf { int x; }; +struct buf * (*rcsopen) (struct buf *, struct stat *, int); +static char *e (p, i) + char **p; + int i; +{ + return p[i]; +} +static char *f (char * (*g) (char **, int), char **p, ...) +{ + char *s; + va_list v; + va_start (v,p); + s = g (p, va_arg (v,int)); + va_end (v); + return s; +} + +/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has + function prototypes and stuff, but not \xHH hex character constants. + These do not provoke an error unfortunately, instead are silently treated + as an "x". The following induces an error, until -std is added to get + proper ANSI mode. Curiously \x00 != x always comes out true, for an + array size at least. It is necessary to write \x00 == 0 to get something + that is true only with -std. */ +int osf4_cc_array ['\''\x00'\'' == 0 ? 1 : -1]; + +/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters + inside strings and character constants. */ +#define FOO(x) '\''x'\'' +int xlc6_cc_array[FOO(a) == '\''x'\'' ? 1 : -1]; + +int test (int i, double x); +struct s1 {int (*f) (int a);}; +struct s2 {int (*f) (double a);}; +int pairnames (int, char **, int *(*)(struct buf *, struct stat *, int), + int, int);' + +# Test code for whether the C compiler supports C89 (body of main). +ac_c_conftest_c89_main=' +ok |= (argc == 0 || f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]); +' + +# Test code for whether the C compiler supports C99 (global declarations) +ac_c_conftest_c99_globals=' +// Does the compiler advertise C99 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 199901L +# error "Compiler does not advertise C99 conformance" +#endif + +#include <stdbool.h> +extern int puts (const char *); +extern int printf (const char *, ...); +extern int dprintf (int, const char *, ...); +extern void *malloc (size_t); + +// Check varargs macros. These examples are taken from C99 6.10.3.5. +// dprintf is used instead of fprintf to avoid needing to declare +// FILE and stderr. +#define debug(...) dprintf (2, __VA_ARGS__) +#define showlist(...) puts (#__VA_ARGS__) +#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) +static void +test_varargs_macros (void) +{ + int x = 1234; + int y = 5678; + debug ("Flag"); + debug ("X = %d\n", x); + showlist (The first, second, and third items.); + report (x>y, "x is %d but y is %d", x, y); +} + +// Check long long types. +#define BIG64 18446744073709551615ull +#define BIG32 4294967295ul +#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) +#if !BIG_OK + #error "your preprocessor is broken" +#endif +#if BIG_OK +#else + #error "your preprocessor is broken" +#endif +static long long int bignum = -9223372036854775807LL; +static unsigned long long int ubignum = BIG64; + +struct incomplete_array +{ + int datasize; + double data[]; +}; + +struct named_init { + int number; + const wchar_t *name; + double average; +}; + +typedef const char *ccp; + +static inline int +test_restrict (ccp restrict text) +{ + // See if C++-style comments work. + // Iterate through items via the restricted pointer. + // Also check for declarations in for loops. + for (unsigned int i = 0; *(text+i) != '\''\0'\''; ++i) + continue; + return 0; +} + +// Check varargs and va_copy. +static bool +test_varargs (const char *format, ...) +{ + va_list args; + va_start (args, format); + va_list args_copy; + va_copy (args_copy, args); + + const char *str = ""; + int number = 0; + float fnumber = 0; + + while (*format) + { + switch (*format++) + { + case '\''s'\'': // string + str = va_arg (args_copy, const char *); + break; + case '\''d'\'': // int + number = va_arg (args_copy, int); + break; + case '\''f'\'': // float + fnumber = va_arg (args_copy, double); + break; + default: + break; + } + } + va_end (args_copy); + va_end (args); + + return *str && number && fnumber; +} +' + +# Test code for whether the C compiler supports C99 (body of main). +ac_c_conftest_c99_main=' + // Check bool. + _Bool success = false; + success |= (argc != 0); + + // Check restrict. + if (test_restrict ("String literal") == 0) + success = true; + char *restrict newvar = "Another string"; + + // Check varargs. + success &= test_varargs ("s, d'\'' f .", "string", 65, 34.234); + test_varargs_macros (); + + // Check flexible array members. + struct incomplete_array *ia = + malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); + ia->datasize = 10; + for (int i = 0; i < ia->datasize; ++i) + ia->data[i] = i * 1.234; + + // Check named initializers. + struct named_init ni = { + .number = 34, + .name = L"Test wide string", + .average = 543.34343, + }; + + ni.number = 58; + + int dynamic_array[ni.number]; + dynamic_array[0] = argv[0][0]; + dynamic_array[ni.number - 1] = 543; + + // work around unused variable warnings + ok |= (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == '\''x'\'' + || dynamic_array[ni.number - 1] != 543); +' + +# Test code for whether the C compiler supports C11 (global declarations) +ac_c_conftest_c11_globals=' +// Does the compiler advertise C11 conformance? +#if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112L +# error "Compiler does not advertise C11 conformance" +#endif + +// Check _Alignas. +char _Alignas (double) aligned_as_double; +char _Alignas (0) no_special_alignment; +extern char aligned_as_int; +char _Alignas (0) _Alignas (int) aligned_as_int; + +// Check _Alignof. +enum +{ + int_alignment = _Alignof (int), + int_array_alignment = _Alignof (int[100]), + char_alignment = _Alignof (char) +}; +_Static_assert (0 < -_Alignof (int), "_Alignof is signed"); + +// Check _Noreturn. +int _Noreturn does_not_return (void) { for (;;) continue; } + +// Check _Static_assert. +struct test_static_assert +{ + int x; + _Static_assert (sizeof (int) <= sizeof (long int), + "_Static_assert does not work in struct"); + long int y; +}; + +// Check UTF-8 literals. +#define u8 syntax error! +char const utf8_literal[] = u8"happens to be ASCII" "another string"; + +// Check duplicate typedefs. +typedef long *long_ptr; +typedef long int *long_ptr; +typedef long_ptr long_ptr; + +// Anonymous structures and unions -- taken from C11 6.7.2.1 Example 1. +struct anonymous +{ + union { + struct { int i; int j; }; + struct { int k; long int l; } w; + }; + int m; +} v1; +' + +# Test code for whether the C compiler supports C11 (body of main). +ac_c_conftest_c11_main=' + _Static_assert ((offsetof (struct anonymous, i) + == offsetof (struct anonymous, w.k)), + "Anonymous union alignment botch"); + v1.i = 2; + v1.w.k = 5; + ok |= v1.i != 5; +' + +# Test code for whether the C compiler supports C11 (complete). +ac_c_conftest_c11_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} +${ac_c_conftest_c11_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + ${ac_c_conftest_c11_main} + return ok; +} +" + +# Test code for whether the C compiler supports C99 (complete). +ac_c_conftest_c99_program="${ac_c_conftest_c89_globals} +${ac_c_conftest_c99_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + ${ac_c_conftest_c99_main} + return ok; +} +" + +# Test code for whether the C compiler supports C89 (complete). +ac_c_conftest_c89_program="${ac_c_conftest_c89_globals} + +int +main (int argc, char **argv) +{ + int ok = 0; + ${ac_c_conftest_c89_main} + return ok; +} +" + +as_fn_append ac_header_c_list " stdio.h stdio_h HAVE_STDIO_H" +as_fn_append ac_header_c_list " stdlib.h stdlib_h HAVE_STDLIB_H" +as_fn_append ac_header_c_list " string.h string_h HAVE_STRING_H" +as_fn_append ac_header_c_list " inttypes.h inttypes_h HAVE_INTTYPES_H" +as_fn_append ac_header_c_list " stdint.h stdint_h HAVE_STDINT_H" +as_fn_append ac_header_c_list " strings.h strings_h HAVE_STRINGS_H" +as_fn_append ac_header_c_list " sys/stat.h sys_stat_h HAVE_SYS_STAT_H" +as_fn_append ac_header_c_list " sys/types.h sys_types_h HAVE_SYS_TYPES_H" +as_fn_append ac_header_c_list " unistd.h unistd_h HAVE_UNISTD_H" + +# Auxiliary files required by this configure script. +ac_aux_files="install-sh config.guess config.sub" + +# Locations in which to look for auxiliary files. +ac_aux_dir_candidates="${srcdir}${PATH_SEPARATOR}${srcdir}/..${PATH_SEPARATOR}${srcdir}/../.." + +# Search for a directory containing all of the required auxiliary files, +# $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. +# If we don't find one directory that contains all the files we need, +# we report the set of missing files from the *first* directory in +# $ac_aux_dir_candidates and give up. +ac_missing_aux_files="" +ac_first_candidate=: +printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +as_found=false +for as_dir in $ac_aux_dir_candidates +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + as_found=: + + printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 + ac_aux_dir_found=yes + ac_install_sh= + for ac_aux in $ac_aux_files + do + # As a special case, if "install-sh" is required, that requirement + # can be satisfied by any of "install-sh", "install.sh", or "shtool", + # and $ac_install_sh is set appropriately for whichever one is found. + if test x"$ac_aux" = x"install-sh" + then + if test -f "${as_dir}install-sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 + ac_install_sh="${as_dir}install-sh -c" + elif test -f "${as_dir}install.sh"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 + ac_install_sh="${as_dir}install.sh -c" + elif test -f "${as_dir}shtool"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 + ac_install_sh="${as_dir}shtool install -c" + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} install-sh" + else + break + fi + fi + else + if test -f "${as_dir}${ac_aux}"; then + printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 + else + ac_aux_dir_found=no + if $ac_first_candidate; then + ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" + else + break + fi + fi + fi + done + if test "$ac_aux_dir_found" = yes; then + ac_aux_dir="$as_dir" + break + fi + ac_first_candidate=false + + as_found=false +done +IFS=$as_save_IFS +if $as_found +then : + +else $as_nop + as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 +fi + + +# These three variables are undocumented and unsupported, +# and are intended to be withdrawn in a future Autoconf release. +# They can cause serious problems if a builder's source tree is in a directory +# whose full name contains unusual characters. +if test -f "${ac_aux_dir}config.guess"; then + ac_config_guess="$SHELL ${ac_aux_dir}config.guess" +fi +if test -f "${ac_aux_dir}config.sub"; then + ac_config_sub="$SHELL ${ac_aux_dir}config.sub" +fi +if test -f "$ac_aux_dir/configure"; then + ac_configure="$SHELL ${ac_aux_dir}configure" +fi + # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false @@ -2364,12 +2782,12 @@ for ac_var in $ac_precious_vars; do eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) @@ -2378,24 +2796,24 @@ $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 +printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 +printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 +printf "%s\n" "$as_me: former value: \`$ac_old_val'" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 +printf "%s\n" "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in @@ -2405,11 +2823,12 @@ $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi done if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 +printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;} + as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file' + and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## @@ -2424,55 +2843,30 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu -ac_aux_dir= -for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 -fi -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 + # Make sure we can run config.sub. +$SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || + as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 +printf %s "checking build system type... " >&6; } +if test ${ac_cv_build+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` + ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 +ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 +printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; @@ -2491,21 +2885,22 @@ IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 +printf %s "checking host system type... " >&6; } +if test ${ac_cv_host+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 + ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || + as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 +printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; @@ -2530,9 +2925,9 @@ case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - # Check whether --with-gcc was given. -if test "${with_gcc+set}" = set; then : +if test ${with_gcc+y} +then : withval=$with_gcc; fi @@ -2549,11 +2944,12 @@ fi bsdi*) # Extract the first word of "shlicc2", so it can be a program name with args. set dummy shlicc2; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_SHLICC2+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_SHLICC2+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$SHLICC2"; then ac_cv_prog_SHLICC2="$SHLICC2" # Let the user override the test. else @@ -2561,11 +2957,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_SHLICC2="yes" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -2577,11 +2977,11 @@ fi fi SHLICC2=$ac_cv_prog_SHLICC2 if test -n "$SHLICC2"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SHLICC2" >&5 -$as_echo "$SHLICC2" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SHLICC2" >&5 +printf "%s\n" "$SHLICC2" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -2601,6 +3001,15 @@ fi # Try to enable as many C99 features as we can. # At minimum, we want C++/C99-style // comments. # + + + + + + + + + ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' @@ -2609,11 +3018,12 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -2621,11 +3031,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -2636,11 +3050,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -2649,11 +3063,12 @@ if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -2661,11 +3076,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -2676,11 +3095,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_CC" = x; then @@ -2688,8 +3107,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -2702,11 +3121,12 @@ if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -2714,11 +3134,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -2729,11 +3153,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -2742,11 +3166,12 @@ fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -2755,15 +3180,19 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + if test "$as_dir$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -2779,18 +3208,18 @@ if test $ac_prog_rejected = yes; then # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" + ac_cv_prog_CC="$as_dir$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -2801,11 +3230,12 @@ if test -z "$CC"; then do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else @@ -2813,11 +3243,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -2828,11 +3262,11 @@ fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -2845,11 +3279,12 @@ if test -z "$CC"; then do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else @@ -2857,11 +3292,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -2872,11 +3311,11 @@ fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -2888,8 +3327,8 @@ done else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC @@ -2897,25 +3336,129 @@ esac fi fi +if test -z "$CC"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}clang", so it can be a program name with args. +set dummy ${ac_tool_prefix}clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$CC"; then + ac_cv_prog_CC="$CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_CC="${ac_tool_prefix}clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +CC=$ac_cv_prog_CC +if test -n "$CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 +printf "%s\n" "$CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_CC"; then + ac_ct_CC=$CC + # Extract the first word of "clang", so it can be a program name with args. +set dummy clang; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_CC+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -n "$ac_ct_CC"; then + ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_CC="clang" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS +fi +fi +ac_ct_CC=$ac_cv_prog_ac_ct_CC +if test -n "$ac_ct_CC"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 +printf "%s\n" "$ac_ct_CC" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + if test "x$ac_ct_CC" = x; then + CC="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + CC=$ac_ct_CC + fi +else + CC="$ac_cv_prog_CC" +fi + +fi + + +test -z "$CC" && { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 +printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 -for ac_option in --version -v -V -qversion; do +for ac_option in --version -v -V -qversion -version; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then @@ -2925,7 +3468,7 @@ $as_echo "$ac_try_echo"; } >&5 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done @@ -2933,7 +3476,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -2945,9 +3488,9 @@ ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 +printf %s "checking whether the C compiler works... " >&6; } +ac_link_default=`printf "%s\n" "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" @@ -2968,11 +3511,12 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, @@ -2989,7 +3533,7 @@ do # certainly right. break;; *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; + if test ${ac_cv_exeext+y} && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi @@ -3005,44 +3549,46 @@ do done test "$ac_cv_exeext" = no && ac_cv_exeext= -else +else $as_nop ac_file='' fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 +if test -z "$ac_file" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 +printf %s "checking for C compiler default output file name... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 +printf "%s\n" "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 +printf %s "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with @@ -3056,15 +3602,15 @@ for ac_file in conftest.exe conftest conftest.*; do * ) break;; esac done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 +printf "%s\n" "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext @@ -3073,7 +3619,7 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> int -main () +main (void) { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; @@ -3085,8 +3631,8 @@ _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 +printf %s "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in @@ -3094,10 +3640,10 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in @@ -3105,39 +3651,40 @@ $as_echo "$ac_try_echo"; } >&5 *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 +printf "%s\n" "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 +printf %s "checking for suffix of object files... " >&6; } +if test ${ac_cv_objext+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; @@ -3151,11 +3698,12 @@ case "(($ac_try" in *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 +printf "%s\n" "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } +then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in @@ -3164,31 +3712,32 @@ $as_echo "$ac_try_echo"; } >&5 break;; esac done -else - $as_echo "$as_me: failed program was:" >&5 +else $as_nop + printf "%s\n" "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +{ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 +printf "%s\n" "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports GNU C" >&5 +printf %s "checking whether the compiler supports GNU C... " >&6; } +if test ${ac_cv_c_compiler_gnu+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { #ifndef __GNUC__ choke me @@ -3198,29 +3747,33 @@ main () return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_compiler_gnu=yes -else +else $as_nop ac_compiler_gnu=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 +printf "%s\n" "$ac_cv_c_compiler_gnu" >&6; } +ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi -ac_test_CFLAGS=${CFLAGS+set} +ac_test_CFLAGS=${CFLAGS+y} ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 +printf %s "checking whether $CC accepts -g... " >&6; } +if test ${ac_cv_prog_cc_g+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no @@ -3229,57 +3782,60 @@ else /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes -else +else $as_nop CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -else +else $as_nop ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_g=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 +printf "%s\n" "$ac_cv_prog_cc_g" >&6; } +if test $ac_test_CFLAGS; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then @@ -3294,287 +3850,159 @@ else CFLAGS= fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no +ac_prog_cc_stdc=no +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C11 features" >&5 +printf %s "checking for $CC option to enable C11 features... " >&6; } +if test ${ac_cv_prog_cc_c11+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c11=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <stdarg.h> -#include <stdio.h> -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} +$ac_c_conftest_c11_program _ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +for ac_arg in '' -std=gnu11 do CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c11=$ac_arg fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c11" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 -$as_echo_n "checking for $CC option to accept ISO C99... " >&6; } -if ${ac_cv_prog_cc_c99+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test "x$ac_cv_prog_cc_c11" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c11" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c11" >&5 +printf "%s\n" "$ac_cv_prog_cc_c11" >&6; } + CC="$CC $ac_cv_prog_cc_c11" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c11 + ac_prog_cc_stdc=c11 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C99 features" >&5 +printf %s "checking for $CC option to enable C99 features... " >&6; } +if test ${ac_cv_prog_cc_c99+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -#include <stdarg.h> -#include <stdbool.h> -#include <stdlib.h> -#include <wchar.h> -#include <stdio.h> - -// Check varargs macros. These examples are taken from C99 6.10.3.5. -#define debug(...) fprintf (stderr, __VA_ARGS__) -#define showlist(...) puts (#__VA_ARGS__) -#define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) -static void -test_varargs_macros (void) -{ - int x = 1234; - int y = 5678; - debug ("Flag"); - debug ("X = %d\n", x); - showlist (The first, second, and third items.); - report (x>y, "x is %d but y is %d", x, y); -} - -// Check long long types. -#define BIG64 18446744073709551615ull -#define BIG32 4294967295ul -#define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) -#if !BIG_OK - your preprocessor is broken; -#endif -#if BIG_OK -#else - your preprocessor is broken; -#endif -static long long int bignum = -9223372036854775807LL; -static unsigned long long int ubignum = BIG64; - -struct incomplete_array -{ - int datasize; - double data[]; -}; - -struct named_init { - int number; - const wchar_t *name; - double average; -}; - -typedef const char *ccp; - -static inline int -test_restrict (ccp restrict text) -{ - // See if C++-style comments work. - // Iterate through items via the restricted pointer. - // Also check for declarations in for loops. - for (unsigned int i = 0; *(text+i) != '\0'; ++i) - continue; - return 0; -} - -// Check varargs and va_copy. -static void -test_varargs (const char *format, ...) -{ - va_list args; - va_start (args, format); - va_list args_copy; - va_copy (args_copy, args); - - const char *str; - int number; - float fnumber; - - while (*format) - { - switch (*format++) - { - case 's': // string - str = va_arg (args_copy, const char *); - break; - case 'd': // int - number = va_arg (args_copy, int); - break; - case 'f': // float - fnumber = va_arg (args_copy, double); - break; - default: - break; - } - } - va_end (args_copy); - va_end (args); -} - -int -main () -{ - - // Check bool. - _Bool success = false; - - // Check restrict. - if (test_restrict ("String literal") == 0) - success = true; - char *restrict newvar = "Another string"; - - // Check varargs. - test_varargs ("s, d' f .", "string", 65, 34.234); - test_varargs_macros (); - - // Check flexible array members. - struct incomplete_array *ia = - malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); - ia->datasize = 10; - for (int i = 0; i < ia->datasize; ++i) - ia->data[i] = i * 1.234; - - // Check named initializers. - struct named_init ni = { - .number = 34, - .name = L"Test wide string", - .average = 543.34343, - }; - - ni.number = 58; - - int dynamic_array[ni.number]; - dynamic_array[ni.number - 1] = 543; - - // work around unused variable warnings - return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' - || dynamic_array[ni.number - 1] != 543); - - ; - return 0; -} +$ac_c_conftest_c99_program _ACEOF -for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 +for ac_arg in '' -std=gnu99 -std=c99 -c99 -qlanglvl=extc1x -qlanglvl=extc99 -AC99 -D_STDC_C99= do CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : + if ac_fn_c_try_compile "$LINENO" +then : ac_cv_prog_cc_c99=$ac_arg fi -rm -f core conftest.err conftest.$ac_objext +rm -f core conftest.err conftest.$ac_objext conftest.beam test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC +fi +if test "x$ac_cv_prog_cc_c99" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c99" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 +printf "%s\n" "$ac_cv_prog_cc_c99" >&6; } + CC="$CC $ac_cv_prog_cc_c99" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c99 + ac_prog_cc_stdc=c99 +fi +fi +if test x$ac_prog_cc_stdc = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC option to enable C89 features" >&5 +printf %s "checking for $CC option to enable C89 features... " >&6; } +if test ${ac_cv_prog_cc_c89+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_cv_prog_cc_c89=no +ac_save_CC=$CC +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +$ac_c_conftest_c89_program +_ACEOF +for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" +do + CC="$ac_save_CC $ac_arg" + if ac_fn_c_try_compile "$LINENO" +then : + ac_cv_prog_cc_c89=$ac_arg +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam + test "x$ac_cv_prog_cc_c89" != "xno" && break +done +rm -f conftest.$ac_ext +CC=$ac_save_CC fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c99" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c99" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 -$as_echo "$ac_cv_prog_cc_c99" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c99" != xno; then : +if test "x$ac_cv_prog_cc_c89" = xno +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 +printf "%s\n" "unsupported" >&6; } +else $as_nop + if test "x$ac_cv_prog_cc_c89" = x +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 +printf "%s\n" "none needed" >&6; } +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 +printf "%s\n" "$ac_cv_prog_cc_c89" >&6; } + CC="$CC $ac_cv_prog_cc_c89" +fi + ac_cv_prog_cc_stdc=$ac_cv_prog_cc_c89 + ac_prog_cc_stdc=c89 +fi fi +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + if test "$ac_cv_prog_cc_c99" = "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: The C compiler does not support C99; there may be compiler errors" >&5 -$as_echo "$as_me: WARNING: The C compiler does not support C99; there may be compiler errors" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: The C compiler does not support C99; there may be compiler errors" >&5 +printf "%s\n" "$as_me: WARNING: The C compiler does not support C99; there may be compiler errors" >&2;} fi - - if test "$GCC" = yes ; then # # -Werror forces warnings to be errors. @@ -3669,17 +4097,18 @@ fi ;; ultrix*) - { $as_echo "$as_me:${as_lineno-$LINENO}: checking that Ultrix $CC hacks const in prototypes" >&5 -$as_echo_n "checking that Ultrix $CC hacks const in prototypes... " >&6; } - if ${ac_cv_lbl_cc_const_proto+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that Ultrix $CC hacks const in prototypes" >&5 +printf %s "checking that Ultrix $CC hacks const in prototypes... " >&6; } + if test ${ac_cv_lbl_cc_const_proto+y} +then : + printf %s "(cached) " >&6 +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> int -main () +main (void) { struct a { int b; }; void c(const struct a *) @@ -3687,19 +4116,20 @@ struct a { int b; }; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_cv_lbl_cc_const_proto=yes -else +else $as_nop ac_cv_lbl_cc_const_proto=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lbl_cc_const_proto" >&5 -$as_echo "$ac_cv_lbl_cc_const_proto" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lbl_cc_const_proto" >&5 +printf "%s\n" "$ac_cv_lbl_cc_const_proto" >&6; } if test $ac_cv_lbl_cc_const_proto = no ; then -$as_echo "#define const /**/" >>confdefs.h +printf "%s\n" "#define const /**/" >>confdefs.h fi ;; @@ -3707,13 +4137,14 @@ $as_echo "#define const /**/" >>confdefs.h V_CCOPT="$V_CCOPT -O" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 -$as_echo_n "checking for inline... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 +printf %s "checking for inline... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$V_CCOPT" - if ${ac_cv_lbl_inline+:} false; then : - $as_echo_n "(cached) " >&6 -else + if test ${ac_cv_lbl_inline+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_cv_lbl_inline="" ac_lbl_cc_inline=no @@ -3736,17 +4167,18 @@ else return &xxx; } int -main () +main (void) { ; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : ac_lbl_cc_inline=yes fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext if test "$ac_lbl_cc_inline" = yes ; then break; fi @@ -3758,434 +4190,145 @@ fi CFLAGS="$save_CFLAGS" if test ! -z "$ac_cv_lbl_inline" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lbl_inline" >&5 -$as_echo "$ac_cv_lbl_inline" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lbl_inline" >&5 +printf "%s\n" "$ac_cv_lbl_inline" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -cat >>confdefs.h <<_ACEOF -#define inline $ac_cv_lbl_inline -_ACEOF - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 -$as_echo_n "checking how to run the C preprocessor... " >&6; } -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then - if ${ac_cv_prog_CPP+:} false; then : - $as_echo_n "(cached) " >&6 -else - # Double quotes because CPP needs to be expanded - for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" - do - ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes -do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext +printf "%s\n" "#define inline $ac_cv_lbl_inline" >>confdefs.h - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - -done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : - break -fi - - done - ac_cv_prog_CPP=$CPP -fi - CPP=$ac_cv_prog_CPP -else - ac_cv_prog_CPP=$CPP -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 -$as_echo "$CPP" >&6; } -ac_preproc_ok=false -for ac_c_preproc_warn_flag in '' yes +ac_header= ac_cache= +for ac_item in $ac_header_c_list do - # Use a header file that comes with gcc, so configuring glibc - # with a fresh cross-compiler works. - # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since - # <limits.h> exists even on freestanding compilers. - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. "Syntax error" is here to catch this case. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#ifdef __STDC__ -# include <limits.h> -#else -# include <assert.h> -#endif - Syntax error -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - -else - # Broken: fails on valid input. -continue -fi -rm -f conftest.err conftest.i conftest.$ac_ext - - # OK, works on sane cases. Now check whether nonexistent headers - # can be detected and how. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ac_nonexistent.h> -_ACEOF -if ac_fn_c_try_cpp "$LINENO"; then : - # Broken: success on invalid input. -continue -else - # Passes both tests. -ac_preproc_ok=: -break -fi -rm -f conftest.err conftest.i conftest.$ac_ext - + if test $ac_cache; then + ac_fn_c_check_header_compile "$LINENO" $ac_header ac_cv_header_$ac_cache "$ac_includes_default" + if eval test \"x\$ac_cv_header_$ac_cache\" = xyes; then + printf "%s\n" "#define $ac_item 1" >> confdefs.h + fi + ac_header= ac_cache= + elif test $ac_header; then + ac_cache=$ac_item + else + ac_header=$ac_item + fi done -# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. -rm -f conftest.i conftest.err conftest.$ac_ext -if $ac_preproc_ok; then : -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "C preprocessor \"$CPP\" fails sanity check -See \`config.log' for more details" "$LINENO" 5; } -fi -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 -$as_echo_n "checking for grep that handles long lines and -e... " >&6; } -if ${ac_cv_path_GREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$GREP"; then - ac_path_GREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in grep ggrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_GREP" || continue -# Check for GNU ac_path_GREP and select it if it is found. - # Check for GNU $ac_path_GREP -case `"$ac_path_GREP" --version 2>&1` in -*GNU*) - ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'GREP' >> "conftest.nl" - "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_GREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_GREP="$ac_path_GREP" - ac_path_GREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac - $ac_path_GREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_GREP"; then - as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_GREP=$GREP -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 -$as_echo "$ac_cv_path_GREP" >&6; } - GREP="$ac_cv_path_GREP" -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 -$as_echo_n "checking for egrep... " >&6; } -if ${ac_cv_path_EGREP+:} false; then : - $as_echo_n "(cached) " >&6 -else - if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 - then ac_cv_path_EGREP="$GREP -E" - else - if test -z "$EGREP"; then - ac_path_EGREP_found=false - # Loop through the user's path and test for each of PROGNAME-LIST - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_prog in egrep; do - for ac_exec_ext in '' $ac_executable_extensions; do - ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" - as_fn_executable_p "$ac_path_EGREP" || continue -# Check for GNU ac_path_EGREP and select it if it is found. - # Check for GNU $ac_path_EGREP -case `"$ac_path_EGREP" --version 2>&1` in -*GNU*) - ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; -*) - ac_count=0 - $as_echo_n 0123456789 >"conftest.in" - while : - do - cat "conftest.in" "conftest.in" >"conftest.tmp" - mv "conftest.tmp" "conftest.in" - cp "conftest.in" "conftest.nl" - $as_echo 'EGREP' >> "conftest.nl" - "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break - diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break - as_fn_arith $ac_count + 1 && ac_count=$as_val - if test $ac_count -gt ${ac_path_EGREP_max-0}; then - # Best one so far, save it but keep looking for a better one - ac_cv_path_EGREP="$ac_path_EGREP" - ac_path_EGREP_max=$ac_count - fi - # 10*(2^10) chars as input seems more than enough - test $ac_count -gt 10 && break - done - rm -f conftest.in conftest.tmp conftest.nl conftest.out;; -esac +if test $ac_cv_header_stdlib_h = yes && test $ac_cv_header_string_h = yes +then : - $ac_path_EGREP_found && break 3 - done - done - done -IFS=$as_save_IFS - if test -z "$ac_cv_path_EGREP"; then - as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 - fi -else - ac_cv_path_EGREP=$EGREP -fi +printf "%s\n" "#define STDC_HEADERS 1" >>confdefs.h - fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 -$as_echo "$ac_cv_path_EGREP" >&6; } - EGREP="$ac_cv_path_EGREP" - +ac_fn_c_check_header_compile "$LINENO" "rpc/rpc.h" "ac_cv_header_rpc_rpc_h" "$ac_includes_default" +if test "x$ac_cv_header_rpc_rpc_h" = xyes +then : + printf "%s\n" "#define HAVE_RPC_RPC_H 1" >>confdefs.h -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 -$as_echo_n "checking for ANSI C header files... " >&6; } -if ${ac_cv_header_stdc+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> -#include <stdarg.h> -#include <string.h> -#include <float.h> - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_header_stdc=yes -else - ac_cv_header_stdc=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <string.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "memchr" >/dev/null 2>&1; then : +ac_fn_c_check_header_compile "$LINENO" "rpc/rpcent.h" "ac_cv_header_rpc_rpcent_h" "$ac_includes_default" +if test "x$ac_cv_header_rpc_rpcent_h" = xyes +then : + printf "%s\n" "#define HAVE_RPC_RPCENT_H 1" >>confdefs.h -else - ac_cv_header_stdc=no fi -rm -f conftest* +ac_fn_c_check_header_compile "$LINENO" "net/if.h" "ac_cv_header_net_if_h" "$ac_includes_default" +if test "x$ac_cv_header_net_if_h" = xyes +then : + printf "%s\n" "#define HAVE_NET_IF_H 1" >>confdefs.h fi -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <stdlib.h> - -_ACEOF -if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "free" >/dev/null 2>&1; then : - -else - ac_cv_header_stdc=no +# +# Get the size of a void *, to know whether this is a 32-bit or 64-bit build. +# +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 +printf %s "checking size of void *... " >&6; } +if test ${ac_cv_sizeof_void_p+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default" +then : + +else $as_nop + if test "$ac_cv_type_void_p" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (void *) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_void_p=0 + fi fi -rm -f conftest* fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 +printf "%s\n" "$ac_cv_sizeof_void_p" >&6; } -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. - if test "$cross_compiling" = yes; then : - : -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include <ctype.h> -#include <stdlib.h> -#if ((' ' & 0x0FF) == 0x020) -# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#else -# define ISLOWER(c) \ - (('a' <= (c) && (c) <= 'i') \ - || ('j' <= (c) && (c) <= 'r') \ - || ('s' <= (c) && (c) <= 'z')) -# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) -#endif - -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int -main () -{ - int i; - for (i = 0; i < 256; i++) - if (XOR (islower (i), ISLOWER (i)) - || toupper (i) != TOUPPER (i)) - return 2; - return 0; -} -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : -else - ac_cv_header_stdc=no -fi -rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ - conftest.$ac_objext conftest.beam conftest.$ac_ext -fi -fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 -$as_echo "$ac_cv_header_stdc" >&6; } -if test $ac_cv_header_stdc = yes; then +printf "%s\n" "#define SIZEOF_VOID_P $ac_cv_sizeof_void_p" >>confdefs.h -$as_echo "#define STDC_HEADERS 1" >>confdefs.h -fi -# On IRIX 5.3, sys/types and inttypes.h are conflicting. -for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ - inttypes.h stdint.h unistd.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default +# +# Get the size of a time_t, to know whether it's 32-bit or 64-bit. +# +# The cast to long int works around a bug in the HP C Compiler +# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects +# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. +# This bug is HP SR number 8606223364. +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of time_t" >&5 +printf %s "checking size of time_t... " >&6; } +if test ${ac_cv_sizeof_time_t+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (time_t))" "ac_cv_sizeof_time_t" "#include <time.h> " -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF +then : +else $as_nop + if test "$ac_cv_type_time_t" = yes; then + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error 77 "cannot compute sizeof (time_t) +See \`config.log' for more details" "$LINENO" 5; } + else + ac_cv_sizeof_time_t=0 + fi fi -done +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_time_t" >&5 +printf "%s\n" "$ac_cv_sizeof_time_t" >&6; } -for ac_header in fcntl.h rpc/rpc.h rpc/rpcent.h net/if.h -do : - as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` -ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" -if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 -_ACEOF -fi +printf "%s\n" "#define SIZEOF_TIME_T $ac_cv_sizeof_time_t" >>confdefs.h -done case "$host_os" in darwin*) # Check whether --enable-universal was given. -if test "${enable_universal+set}" = set; then : +if test ${enable_universal+y} +then : enableval=$enable_universal; fi @@ -4214,28 +4357,213 @@ fi ;; esac +# +# Do we have pkg-config? +# + + + + + + + +if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then + if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. +set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PKG_CONFIG+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +PKG_CONFIG=$ac_cv_path_PKG_CONFIG +if test -n "$PKG_CONFIG"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 +printf "%s\n" "$PKG_CONFIG" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + +fi +if test -z "$ac_cv_path_PKG_CONFIG"; then + ac_pt_PKG_CONFIG=$PKG_CONFIG + # Extract the first word of "pkg-config", so it can be a program name with args. +set dummy pkg-config; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_PKG_CONFIG+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $ac_pt_PKG_CONFIG in + [\\/]* | ?:[\\/]*) + ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PKG_CONFIG="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG +if test -n "$ac_pt_PKG_CONFIG"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 +printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + if test "x$ac_pt_PKG_CONFIG" = x; then + PKG_CONFIG="" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + PKG_CONFIG=$ac_pt_PKG_CONFIG + fi +else + PKG_CONFIG="$ac_cv_path_PKG_CONFIG" +fi + +fi +if test -n "$PKG_CONFIG"; then + _pkg_min_version=0.17.0 + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 +printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } + if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + PKG_CONFIG="" + fi +fi + +# +# Do we have the brew command from Homebrew? +# +# Extract the first word of "brew", so it can be a program name with args. +set dummy brew; ac_word=$2 +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_BREW+y} +then : + printf %s "(cached) " >&6 +else $as_nop + case $BREW in + [\\/]* | ?:[\\/]*) + ac_cv_path_BREW="$BREW" # Let the user override the test with a path. + ;; + *) + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_BREW="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + + ;; +esac +fi +BREW=$ac_cv_path_BREW +if test -n "$BREW"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $BREW" >&5 +printf "%s\n" "$BREW" >&6; } +else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } +fi + + # Check whether --with-smi was given. -if test "${with_smi+set}" = set; then : +if test ${with_smi+y} +then : withval=$with_smi; -else +else $as_nop with_smi=yes fi if test "x$with_smi" != "xno" ; then - ac_fn_c_check_header_mongrel "$LINENO" "smi.h" "ac_cv_header_smi_h" "$ac_includes_default" -if test "x$ac_cv_header_smi_h" = xyes; then : + ac_fn_c_check_header_compile "$LINENO" "smi.h" "ac_cv_header_smi_h" "$ac_includes_default" +if test "x$ac_cv_header_smi_h" = xyes +then : # # OK, we found smi.h. Do we have libsmi with smiInit? # - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for smiInit in -lsmi" >&5 -$as_echo_n "checking for smiInit in -lsmi... " >&6; } -if ${ac_cv_lib_smi_smiInit+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for smiInit in -lsmi" >&5 +printf %s "checking for smiInit in -lsmi... " >&6; } +if test ${ac_cv_lib_smi_smiInit+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsmi $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -4244,46 +4572,46 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char smiInit (); int -main () +main (void) { return smiInit (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_smi_smiInit=yes -else +else $as_nop ac_cv_lib_smi_smiInit=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_smi_smiInit" >&5 -$as_echo "$ac_cv_lib_smi_smiInit" >&6; } -if test "x$ac_cv_lib_smi_smiInit" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_smi_smiInit" >&5 +printf "%s\n" "$ac_cv_lib_smi_smiInit" >&6; } +if test "x$ac_cv_lib_smi_smiInit" = xyes +then : # # OK, we have libsmi with smiInit. Can we use it? # - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable libsmi" >&5 -$as_echo_n "checking whether to enable libsmi... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable libsmi" >&5 +printf %s "checking whether to enable libsmi... " >&6; } savedlibs="$LIBS" LIBS="-lsmi $LIBS" - if test "$cross_compiling" = yes; then : + if test "$cross_compiling" = yes +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not when cross-compiling" >&5 -$as_echo "not when cross-compiling" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not when cross-compiling" >&5 +printf "%s\n" "not when cross-compiling" >&6; } LIBS="$savedlibs" -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4308,28 +4636,30 @@ int main() exit(0); } + _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -$as_echo "#define USE_LIBSMI 1" >>confdefs.h +printf "%s\n" "#define USE_LIBSMI 1" >>confdefs.h -else +else $as_nop case $? in - 1) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - smiInit failed" >&5 -$as_echo "no - smiInit failed" >&6; } ;; - 2) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - header/library version mismatch" >&5 -$as_echo "no - header/library version mismatch" >&6; } ;; - 3) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - can't determine library version" >&5 -$as_echo "no - can't determine library version" >&6; } ;; - 4) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no - too old" >&5 -$as_echo "no - too old" >&6; } ;; - *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } ;; + 1) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no - smiInit failed" >&5 +printf "%s\n" "no - smiInit failed" >&6; } ;; + 2) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no - header/library version mismatch" >&5 +printf "%s\n" "no - header/library version mismatch" >&6; } ;; + 3) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no - can't determine library version" >&5 +printf "%s\n" "no - can't determine library version" >&6; } ;; + 4) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no - too old" >&5 +printf "%s\n" "no - too old" >&6; } ;; + *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; esac LIBS="$savedlibs" @@ -4344,76 +4674,163 @@ fi fi +fi + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable the instrument functions code" >&5 +printf %s "checking whether to enable the instrument functions code... " >&6; } +# Check whether --enable-instrument-functions was given. +if test ${enable_instrument_functions+y} +then : + enableval=$enable_instrument_functions; +else $as_nop + enableval=no +fi + +case "$enableval" in +yes) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bfd_init in -lbfd" >&5 +printf %s "checking for bfd_init in -lbfd... " >&6; } +if test ${ac_cv_lib_bfd_bfd_init+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_check_lib_save_LIBS=$LIBS +LIBS="-lbfd $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +char bfd_init (); +int +main (void) +{ +return bfd_init (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_bfd_bfd_init=yes +else $as_nop + ac_cv_lib_bfd_bfd_init=no fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bfd_bfd_init" >&5 +printf "%s\n" "$ac_cv_lib_bfd_bfd_init" >&6; } +if test "x$ac_cv_lib_bfd_bfd_init" = xyes +then : + true +else $as_nop + as_fn_error $? "--enable-instrument-functions was given, but test for library libbfd failed. Please install the 'binutils-dev' package." "$LINENO" 5 +fi + + +printf "%s\n" "#define ENABLE_INSTRUMENT_FUNCTIONS 1" >>confdefs.h + + LOCALSRC="$LOCALSRC instrument-functions.c" + # Add '-finstrument-functions' instrumentation option to generate + # instrumentation calls for entry and exit to functions. + # Try to avoid Address Space Layout Randomization (ALSR). + CFLAGS="$CFLAGS -O0 -ggdb -finstrument-functions -fno-stack-protector -fno-pic" + LDFLAGS="$LDFLAGS -O0 -ggdb -fno-stack-protector -no-pie" + LIBS="$LIBS -lbfd" + ;; +*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + ;; +esac -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable the possibly-buggy SMB printer" >&5 -$as_echo_n "checking whether to enable the possibly-buggy SMB printer... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable the possibly-buggy SMB printer" >&5 +printf %s "checking whether to enable the possibly-buggy SMB printer... " >&6; } # Check whether --enable-smb was given. -if test "${enable_smb+set}" = set; then : +if test ${enable_smb+y} +then : enableval=$enable_smb; -else +else $as_nop enableval=no fi case "$enableval" in -yes) { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } +yes) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -$as_echo "#define ENABLE_SMB 1" >>confdefs.h +printf "%s\n" "#define ENABLE_SMB 1" >>confdefs.h LOCALSRC="print-smb.c smbutil.c $LOCALSRC" ;; -*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } +*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; esac +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to drop root privileges by default" >&5 +printf %s "checking whether to drop root privileges by default... " >&6; } # Check whether --with-user was given. -if test "${with_user+set}" = set; then : +if test ${with_user+y} +then : withval=$with_user; +else $as_nop + withval=no fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to drop root privileges by default" >&5 -$as_echo_n "checking whether to drop root privileges by default... " >&6; } -if test ! -z "$with_user" ; then +case "$withval" in #( + no) : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; #( + ''|yes) : + as_fn_error $? "--with-user requires a username" "$LINENO" 5 ;; #( + *) : -cat >>confdefs.h <<_ACEOF -#define WITH_USER "$withval" -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: result: to \"$withval\"" >&5 -$as_echo "to \"$withval\"" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +printf "%s\n" "#define WITH_USER \"$withval\"" >>confdefs.h + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, to user \"$withval\"" >&5 +printf "%s\n" "yes, to user \"$withval\"" >&6; } + + ;; +esac +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to chroot" >&5 +printf %s "checking whether to chroot... " >&6; } # Check whether --with-chroot was given. -if test "${with_chroot+set}" = set; then : +if test ${with_chroot+y} +then : withval=$with_chroot; +else $as_nop + withval=no + fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to chroot" >&5 -$as_echo_n "checking whether to chroot... " >&6; } -if test ! -z "$with_chroot" && test "$with_chroot" != "no" ; then +case "$withval" in #( + no) : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ;; #( + ''|yes) : + as_fn_error $? "--with-chroot requires a directory" "$LINENO" 5 ;; #( + *) : -cat >>confdefs.h <<_ACEOF -#define WITH_CHROOT "$withval" -_ACEOF - { $as_echo "$as_me:${as_lineno-$LINENO}: result: to \"$withval\"" >&5 -$as_echo "to \"$withval\"" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi +printf "%s\n" "#define WITH_CHROOT \"$withval\"" >>confdefs.h + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, to directory \"$withval\"" >&5 +printf "%s\n" "yes, to directory \"$withval\"" >&6; } + + ;; +esac # Check whether --with-sandbox-capsicum was given. -if test "${with_sandbox_capsicum+set}" = set; then : +if test ${with_sandbox_capsicum+y} +then : withval=$with_sandbox_capsicum; fi @@ -4436,35 +4853,38 @@ if test -z "$with_sandbox_capsicum" || test "$with_sandbox_capsicum" != "no" ; t # # First, make sure we have the required header. # - ac_fn_c_check_header_mongrel "$LINENO" "sys/capsicum.h" "ac_cv_header_sys_capsicum_h" "$ac_includes_default" -if test "x$ac_cv_header_sys_capsicum_h" = xyes; then : + ac_fn_c_check_header_compile "$LINENO" "sys/capsicum.h" "ac_cv_header_sys_capsicum_h" "$ac_includes_default" +if test "x$ac_cv_header_sys_capsicum_h" = xyes +then : # # We do; now make sure we have the required functions. # - for ac_func in cap_enter cap_rights_limit cap_ioctls_limit openat + + for ac_func in cap_enter cap_rights_limit cap_ioctls_limit openat do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` + as_ac_var=`printf "%s\n" "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : +if eval test \"x\$"$as_ac_var"\" = x"yes" +then : cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 +#define `printf "%s\n" "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF ac_lbl_capsicum_function_seen=yes -else +else $as_nop ac_lbl_capsicum_function_not_seen=yes fi -done +done fi - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cap_init in -lcasper" >&5 -$as_echo_n "checking for cap_init in -lcasper... " >&6; } -if ${ac_cv_lib_casper_cap_init+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cap_init in -lcasper" >&5 +printf %s "checking for cap_init in -lcasper... " >&6; } +if test ${ac_cv_lib_casper_cap_init+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lcasper $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -4473,38 +4893,38 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char cap_init (); int -main () +main (void) { return cap_init (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_casper_cap_init=yes -else +else $as_nop ac_cv_lib_casper_cap_init=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_casper_cap_init" >&5 -$as_echo "$ac_cv_lib_casper_cap_init" >&6; } -if test "x$ac_cv_lib_casper_cap_init" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_casper_cap_init" >&5 +printf "%s\n" "$ac_cv_lib_casper_cap_init" >&6; } +if test "x$ac_cv_lib_casper_cap_init" = xyes +then : LIBS="$LIBS -lcasper" fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for cap_gethostbyaddr in -lcap_dns" >&5 -$as_echo_n "checking for cap_gethostbyaddr in -lcap_dns... " >&6; } -if ${ac_cv_lib_cap_dns_cap_gethostbyaddr+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for cap_gethostbyaddr in -lcap_dns" >&5 +printf %s "checking for cap_gethostbyaddr in -lcap_dns... " >&6; } +if test ${ac_cv_lib_cap_dns_cap_gethostbyaddr+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lcap_dns $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -4513,57 +4933,56 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char cap_gethostbyaddr (); int -main () +main (void) { return cap_gethostbyaddr (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_cap_dns_cap_gethostbyaddr=yes -else +else $as_nop ac_cv_lib_cap_dns_cap_gethostbyaddr=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cap_dns_cap_gethostbyaddr" >&5 -$as_echo "$ac_cv_lib_cap_dns_cap_gethostbyaddr" >&6; } -if test "x$ac_cv_lib_cap_dns_cap_gethostbyaddr" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cap_dns_cap_gethostbyaddr" >&5 +printf "%s\n" "$ac_cv_lib_cap_dns_cap_gethostbyaddr" >&6; } +if test "x$ac_cv_lib_cap_dns_cap_gethostbyaddr" = xyes +then : LIBS="$LIBS -lcap_dns" fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to sandbox using capsicum" >&5 -$as_echo_n "checking whether to sandbox using capsicum... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to sandbox using capsicum" >&5 +printf %s "checking whether to sandbox using capsicum... " >&6; } if test "x$ac_lbl_capsicum_function_seen" = "xyes" -a "x$ac_lbl_capsicum_function_not_seen" != "xyes"; then -$as_echo "#define HAVE_CAPSICUM 1" >>confdefs.h +printf "%s\n" "#define HAVE_CAPSICUM 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to sandbox using Casper library" >&5 -$as_echo_n "checking whether to sandbox using Casper library... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to sandbox using Casper library" >&5 +printf %s "checking whether to sandbox using Casper library... " >&6; } if test "x$ac_cv_lib_casper_cap_init" = "xyes" -a "x$ac_cv_lib_cap_dns_cap_gethostbyaddr" = "xyes"; then -$as_echo "#define HAVE_CASPER 1" >>confdefs.h +printf "%s\n" "#define HAVE_CASPER 1" >>confdefs.h - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi # @@ -4572,15 +4991,16 @@ fi # program requires the extra networking libraries. # - # Most operating systems have gethostbyname() in the default searched + # Most operating systems have gethostbyaddr() in the default searched # libraries (i.e. libc): # Some OSes (eg. Solaris) place it in libnsl # Some strange OSes (SINIX) have it in libsocket: - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyname" >&5 -$as_echo_n "checking for library containing gethostbyname... " >&6; } -if ${ac_cv_search_gethostbyname+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing gethostbyaddr" >&5 +printf %s "checking for library containing gethostbyaddr... " >&6; } +if test ${ac_cv_search_gethostbyaddr+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4588,59 +5008,62 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyname (); +char gethostbyaddr (); int -main () +main (void) { -return gethostbyname (); +return gethostbyaddr (); ; return 0; } _ACEOF -for ac_lib in '' nsl socket resolv; do +for ac_lib in '' network nsl socket resolv +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_gethostbyname=$ac_res + if ac_fn_c_try_link "$LINENO" +then : + ac_cv_search_gethostbyaddr=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_gethostbyname+:} false; then : + if test ${ac_cv_search_gethostbyaddr+y} +then : break fi done -if ${ac_cv_search_gethostbyname+:} false; then : +if test ${ac_cv_search_gethostbyaddr+y} +then : -else - ac_cv_search_gethostbyname=no +else $as_nop + ac_cv_search_gethostbyaddr=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyname" >&5 -$as_echo "$ac_cv_search_gethostbyname" >&6; } -ac_res=$ac_cv_search_gethostbyname -if test "$ac_res" != no; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_gethostbyaddr" >&5 +printf "%s\n" "$ac_cv_search_gethostbyaddr" >&6; } +ac_res=$ac_cv_search_gethostbyaddr +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi # Unfortunately libsocket sometimes depends on libnsl and # AC_SEARCH_LIBS isn't up to the task of handling dependencies like this. - if test "$ac_cv_search_gethostbyname" = "no" + if test "$ac_cv_search_gethostbyaddr" = "no" then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lsocket" >&5 -$as_echo_n "checking for gethostbyname in -lsocket... " >&6; } -if ${ac_cv_lib_socket_gethostbyname+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gethostbyaddr in -lsocket" >&5 +printf %s "checking for gethostbyaddr in -lsocket... " >&6; } +if test ${ac_cv_lib_socket_gethostbyaddr+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket -lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -4649,39 +5072,39 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char gethostbyname (); +char gethostbyaddr (); int -main () +main (void) { -return gethostbyname (); +return gethostbyaddr (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_socket_gethostbyname=yes -else - ac_cv_lib_socket_gethostbyname=no +if ac_fn_c_try_link "$LINENO" +then : + ac_cv_lib_socket_gethostbyaddr=yes +else $as_nop + ac_cv_lib_socket_gethostbyaddr=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_gethostbyname" >&5 -$as_echo "$ac_cv_lib_socket_gethostbyname" >&6; } -if test "x$ac_cv_lib_socket_gethostbyname" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_gethostbyaddr" >&5 +printf "%s\n" "$ac_cv_lib_socket_gethostbyaddr" >&6; } +if test "x$ac_cv_lib_socket_gethostbyaddr" = xyes +then : LIBS="-lsocket -lnsl $LIBS" fi fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 -$as_echo_n "checking for library containing socket... " >&6; } -if ${ac_cv_search_socket+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing socket" >&5 +printf %s "checking for library containing socket... " >&6; } +if test ${ac_cv_search_socket+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4689,54 +5112,57 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char socket (); int -main () +main (void) { return socket (); ; return 0; } _ACEOF -for ac_lib in '' socket; do +for ac_lib in '' socket +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_socket=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_socket+:} false; then : + if test ${ac_cv_search_socket+y} +then : break fi done -if ${ac_cv_search_socket+:} false; then : +if test ${ac_cv_search_socket+y} +then : -else +else $as_nop ac_cv_search_socket=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 -$as_echo "$ac_cv_search_socket" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_socket" >&5 +printf "%s\n" "$ac_cv_search_socket" >&6; } ac_res=$ac_cv_search_socket -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" -else - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5 -$as_echo_n "checking for socket in -lsocket... " >&6; } -if ${ac_cv_lib_socket_socket+:} false; then : - $as_echo_n "(cached) " >&6 -else +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for socket in -lsocket" >&5 +printf %s "checking for socket in -lsocket... " >&6; } +if test ${ac_cv_lib_socket_socket+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket -lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -4745,41 +5171,41 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char socket (); int -main () +main (void) { return socket (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_socket_socket=yes -else +else $as_nop ac_cv_lib_socket_socket=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5 -$as_echo "$ac_cv_lib_socket_socket" >&6; } -if test "x$ac_cv_lib_socket_socket" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_socket" >&5 +printf "%s\n" "$ac_cv_lib_socket_socket" >&6; } +if test "x$ac_cv_lib_socket_socket" = xyes +then : LIBS="-lsocket -lnsl $LIBS" fi fi # DLPI needs putmsg under HPUX so test for -lstr while we're at it - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing putmsg" >&5 -$as_echo_n "checking for library containing putmsg... " >&6; } -if ${ac_cv_search_putmsg+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing putmsg" >&5 +printf %s "checking for library containing putmsg... " >&6; } +if test ${ac_cv_search_putmsg+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4787,46 +5213,48 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char putmsg (); int -main () +main (void) { return putmsg (); ; return 0; } _ACEOF -for ac_lib in '' str; do +for ac_lib in '' str +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_putmsg=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_putmsg+:} false; then : + if test ${ac_cv_search_putmsg+y} +then : break fi done -if ${ac_cv_search_putmsg+:} false; then : +if test ${ac_cv_search_putmsg+y} +then : -else +else $as_nop ac_cv_search_putmsg=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_putmsg" >&5 -$as_echo "$ac_cv_search_putmsg" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_putmsg" >&5 +printf "%s\n" "$ac_cv_search_putmsg" >&6; } ac_res=$ac_cv_search_putmsg -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi @@ -4839,8 +5267,8 @@ fi # support for IPv6, so we don't look for IPv6 support libraries, # and we define AF_INET6 and struct in6_addr ourselves. # -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the operating system supports IPv6" >&5 -$as_echo_n "checking whether the operating system supports IPv6... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the operating system supports IPv6" >&5 +printf %s "checking whether the operating system supports IPv6... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -4866,36 +5294,312 @@ foo(struct in6_addr *addr) _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -$as_echo "#define HAVE_OS_IPV6_SUPPORT 1" >>confdefs.h +printf "%s\n" "#define HAVE_OS_IPV6_SUPPORT 1" >>confdefs.h ipv6=yes -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } ipv6=no fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ipv6type=unknown ipv6lib=none ipv6trylibc=no if test "$ipv6" = "yes"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking ipv6 stack type" >&5 -$as_echo_n "checking ipv6 stack type... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking ipv6 stack type" >&5 +printf %s "checking ipv6 stack type... " >&6; } for i in inria kame linux-glibc linux-libinet6 toshiba v6d zeta; do case $i in inria) - cat confdefs.h - <<_ACEOF >conftest.$ac_ext + ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 +printf %s "checking how to run the C preprocessor... " >&6; } +# On Suns, sometimes $CPP names a directory. +if test -n "$CPP" && test -d "$CPP"; then + CPP= +fi +if test -z "$CPP"; then + if test ${ac_cv_prog_CPP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + # Double quotes because $CC needs to be expanded + for CPP in "$CC -E" "$CC -E -traditional-cpp" cpp /lib/cpp + do + ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + +else $as_nop + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else $as_nop + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : + break +fi + + done + ac_cv_prog_CPP=$CPP + +fi + CPP=$ac_cv_prog_CPP +else + ac_cv_prog_CPP=$CPP +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 +printf "%s\n" "$CPP" >&6; } +ac_preproc_ok=false +for ac_c_preproc_warn_flag in '' yes +do + # Use a header file that comes with gcc, so configuring glibc + # with a fresh cross-compiler works. + # On the NeXT, cc -E runs the code through the compiler's parser, + # not just through cpp. "Syntax error" is here to catch this case. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <limits.h> + Syntax error +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + +else $as_nop + # Broken: fails on valid input. +continue +fi +rm -f conftest.err conftest.i conftest.$ac_ext + + # OK, works on sane cases. Now check whether nonexistent headers + # can be detected and how. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <ac_nonexistent.h> +_ACEOF +if ac_fn_c_try_cpp "$LINENO" +then : + # Broken: success on invalid input. +continue +else $as_nop + # Passes both tests. +ac_preproc_ok=: +break +fi +rm -f conftest.err conftest.i conftest.$ac_ext + +done +# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. +rm -f conftest.i conftest.err conftest.$ac_ext +if $ac_preproc_ok +then : + +else $as_nop + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "C preprocessor \"$CPP\" fails sanity check +See \`config.log' for more details" "$LINENO" 5; } +fi + +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 +printf %s "checking for grep that handles long lines and -e... " >&6; } +if test ${ac_cv_path_GREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if test -z "$GREP"; then + ac_path_GREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in grep ggrep + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_GREP="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_GREP" || continue +# Check for GNU ac_path_GREP and select it if it is found. + # Check for GNU $ac_path_GREP +case `"$ac_path_GREP" --version 2>&1` in +*GNU*) + ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'GREP' >> "conftest.nl" + "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_GREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_GREP="$ac_path_GREP" + ac_path_GREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_GREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_GREP"; then + as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_GREP=$GREP +fi + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 +printf "%s\n" "$ac_cv_path_GREP" >&6; } + GREP="$ac_cv_path_GREP" + + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 +printf %s "checking for egrep... " >&6; } +if test ${ac_cv_path_EGREP+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 + then ac_cv_path_EGREP="$GREP -E" + else + if test -z "$EGREP"; then + ac_path_EGREP_found=false + # Loop through the user's path and test for each of PROGNAME-LIST + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin +do + IFS=$as_save_IFS + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + for ac_prog in egrep + do + for ac_exec_ext in '' $ac_executable_extensions; do + ac_path_EGREP="$as_dir$ac_prog$ac_exec_ext" + as_fn_executable_p "$ac_path_EGREP" || continue +# Check for GNU ac_path_EGREP and select it if it is found. + # Check for GNU $ac_path_EGREP +case `"$ac_path_EGREP" --version 2>&1` in +*GNU*) + ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; +*) + ac_count=0 + printf %s 0123456789 >"conftest.in" + while : + do + cat "conftest.in" "conftest.in" >"conftest.tmp" + mv "conftest.tmp" "conftest.in" + cp "conftest.in" "conftest.nl" + printf "%s\n" 'EGREP' >> "conftest.nl" + "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break + diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break + as_fn_arith $ac_count + 1 && ac_count=$as_val + if test $ac_count -gt ${ac_path_EGREP_max-0}; then + # Best one so far, save it but keep looking for a better one + ac_cv_path_EGREP="$ac_path_EGREP" + ac_path_EGREP_max=$ac_count + fi + # 10*(2^10) chars as input seems more than enough + test $ac_count -gt 10 && break + done + rm -f conftest.in conftest.tmp conftest.nl conftest.out;; +esac + + $ac_path_EGREP_found && break 3 + done + done + done +IFS=$as_save_IFS + if test -z "$ac_cv_path_EGREP"; then + as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 + fi +else + ac_cv_path_EGREP=$EGREP +fi + + fi +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 +printf "%s\n" "$ac_cv_path_EGREP" >&6; } + EGREP="$ac_cv_path_EGREP" + + +cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <netinet/in.h> #ifdef IPV6_INRIA_VERSION @@ -4903,10 +5607,11 @@ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : + $EGREP "yes" >/dev/null 2>&1 +then : ipv6type=$i fi -rm -f conftest* +rm -rf conftest* ;; kame) @@ -4918,13 +5623,14 @@ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : + $EGREP "yes" >/dev/null 2>&1 +then : ipv6type=$i; ipv6lib=inet6; ipv6libdir=/usr/local/v6/lib; ipv6trylibc=yes fi -rm -f conftest* +rm -rf conftest* ;; linux-glibc) @@ -4936,10 +5642,11 @@ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : + $EGREP "yes" >/dev/null 2>&1 +then : ipv6type=$i fi -rm -f conftest* +rm -rf conftest* ;; linux-libinet6) @@ -4960,12 +5667,13 @@ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : + $EGREP "yes" >/dev/null 2>&1 +then : ipv6type=$i; ipv6lib=inet6; ipv6libdir=/usr/local/v6/lib fi -rm -f conftest* +rm -rf conftest* ;; v6d) @@ -4977,13 +5685,14 @@ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : + $EGREP "yes" >/dev/null 2>&1 +then : ipv6type=$i; ipv6lib=v6; ipv6libdir=/usr/local/v6/lib; CFLAGS="-I/usr/local/v6/include $CFLAGS" fi -rm -f conftest* +rm -rf conftest* ;; zeta) @@ -4995,12 +5704,13 @@ yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | - $EGREP "yes" >/dev/null 2>&1; then : + $EGREP "yes" >/dev/null 2>&1 +then : ipv6type=$i; ipv6lib=inet6; ipv6libdir=/usr/local/v6/lib fi -rm -f conftest* +rm -rf conftest* ;; esac @@ -5008,8 +5718,8 @@ rm -f conftest* break fi done - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ipv6type" >&5 -$as_echo "$ipv6type" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ipv6type" >&5 +printf "%s\n" "$ipv6type" >&6; } fi if test "$ipv6" = "yes" -a "$ipv6lib" != "none"; then @@ -5029,10 +5739,11 @@ if test "$ipv6" = "yes" -a "$ipv6lib" != "none"; then fi ac_fn_c_check_func "$LINENO" "strlcat" "ac_cv_func_strlcat" -if test "x$ac_cv_func_strlcat" = xyes; then : - $as_echo "#define HAVE_STRLCAT 1" >>confdefs.h +if test "x$ac_cv_func_strlcat" = xyes +then : + printf "%s\n" "#define HAVE_STRLCAT 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strlcat.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strlcat.$ac_objext" @@ -5040,12 +5751,12 @@ else esac fi - ac_fn_c_check_func "$LINENO" "strlcpy" "ac_cv_func_strlcpy" -if test "x$ac_cv_func_strlcpy" = xyes; then : - $as_echo "#define HAVE_STRLCPY 1" >>confdefs.h +if test "x$ac_cv_func_strlcpy" = xyes +then : + printf "%s\n" "#define HAVE_STRLCPY 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strlcpy.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strlcpy.$ac_objext" @@ -5053,12 +5764,12 @@ else esac fi - ac_fn_c_check_func "$LINENO" "strdup" "ac_cv_func_strdup" -if test "x$ac_cv_func_strdup" = xyes; then : - $as_echo "#define HAVE_STRDUP 1" >>confdefs.h +if test "x$ac_cv_func_strdup" = xyes +then : + printf "%s\n" "#define HAVE_STRDUP 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strdup.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strdup.$ac_objext" @@ -5066,12 +5777,12 @@ else esac fi - ac_fn_c_check_func "$LINENO" "strsep" "ac_cv_func_strsep" -if test "x$ac_cv_func_strsep" = xyes; then : - $as_echo "#define HAVE_STRSEP 1" >>confdefs.h +if test "x$ac_cv_func_strsep" = xyes +then : + printf "%s\n" "#define HAVE_STRSEP 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" strsep.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS strsep.$ac_objext" @@ -5079,12 +5790,12 @@ else esac fi - ac_fn_c_check_func "$LINENO" "getservent" "ac_cv_func_getservent" -if test "x$ac_cv_func_getservent" = xyes; then : - $as_echo "#define HAVE_GETSERVENT 1" >>confdefs.h +if test "x$ac_cv_func_getservent" = xyes +then : + printf "%s\n" "#define HAVE_GETSERVENT 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" getservent.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS getservent.$ac_objext" @@ -5092,12 +5803,12 @@ else esac fi - ac_fn_c_check_func "$LINENO" "getopt_long" "ac_cv_func_getopt_long" -if test "x$ac_cv_func_getopt_long" = xyes; then : - $as_echo "#define HAVE_GETOPT_LONG 1" >>confdefs.h +if test "x$ac_cv_func_getopt_long" = xyes +then : + printf "%s\n" "#define HAVE_GETOPT_LONG 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" getopt_long.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS getopt_long.$ac_objext" @@ -5106,90 +5817,118 @@ esac fi +ac_fn_c_check_func "$LINENO" "fork" "ac_cv_func_fork" +if test "x$ac_cv_func_fork" = xyes +then : + printf "%s\n" "#define HAVE_FORK 1" >>confdefs.h -for ac_func in fork vfork -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +fi +ac_fn_c_check_func "$LINENO" "vfork" "ac_cv_func_vfork" +if test "x$ac_cv_func_vfork" = xyes +then : + printf "%s\n" "#define HAVE_VFORK 1" >>confdefs.h fi -done -for ac_func in setlinebuf -do : - ac_fn_c_check_func "$LINENO" "setlinebuf" "ac_cv_func_setlinebuf" -if test "x$ac_cv_func_setlinebuf" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_SETLINEBUF 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "setlinebuf" "ac_cv_func_setlinebuf" +if test "x$ac_cv_func_setlinebuf" = xyes +then : + printf "%s\n" "#define HAVE_SETLINEBUF 1" >>confdefs.h fi -done # -# Make sure we have vsnprintf() and snprintf(); we require them. +# Make sure we have snprintf(); we require it. # -ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf" -if test "x$ac_cv_func_vsnprintf" = xyes; then : - -else - as_fn_error $? "vsnprintf() is required but wasn't found" "$LINENO" 5 -fi - ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf" -if test "x$ac_cv_func_snprintf" = xyes; then : +if test "x$ac_cv_func_snprintf" = xyes +then : -else +else $as_nop as_fn_error $? "snprintf() is required but wasn't found" "$LINENO" 5 fi # -# Define HAVE_NO_PRINTF_Z to make it possible to disable test cases that -# depend on %zu. +# It became apparent at some point that using a suitable C99 compiler does not +# automatically mean snprintf(3) implementation in the libc supports all the +# modifiers and specifiers used in the project, so let's test that before the +# build, not after. +# +# Testing the sizeof_t length modifier takes making an snprintf() call and +# comparing the actual result with the expected result. If this fails, it will +# most likely happen at run time, not compile time. +# +# Testing the 64-bit conversion specifiers in addition to that requires the +# <inttypes.h> header to be present and the macros to be defined, so if this +# fails, it will more likely happen at compile time. # -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf(3) supports the z length modifier" >&5 -$as_echo_n "checking whether printf(3) supports the z length modifier... " >&6; } -if test "$cross_compiling" = yes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether snprintf is suitable" >&5 +printf %s "checking whether snprintf is suitable... " >&6; } +if test "$cross_compiling" = yes +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not while cross-compiling" >&5 -$as_echo "not while cross-compiling" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not while cross-compiling" >&5 +printf "%s\n" "not while cross-compiling" >&6; } -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <string.h> +#include <inttypes.h> +#include <sys/types.h> int main() { char buf[100]; + uint64_t t = (uint64_t)1 << 32; + snprintf(buf, sizeof(buf), "%zu", sizeof(buf)); - return strncmp(buf, "100", sizeof(buf)) ? 1 : 0; -} + if (strncmp(buf, "100", sizeof(buf))) + return 1; + snprintf(buf, sizeof(buf), "%zd", -sizeof(buf)); + if (strncmp(buf, "-100", sizeof(buf))) + return 2; -_ACEOF -if ac_fn_c_try_run "$LINENO"; then : + snprintf(buf, sizeof(buf), "%" PRId64, -t); + if (strncmp(buf, "-4294967296", sizeof(buf))) + return 3; - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + snprintf(buf, sizeof(buf), "0o%" PRIo64, t); + if (strncmp(buf, "0o40000000000", sizeof(buf))) + return 4; -else + snprintf(buf, sizeof(buf), "0x%" PRIx64, t); + if (strncmp(buf, "0x100000000", sizeof(buf))) + return 5; + + snprintf(buf, sizeof(buf), "%" PRIu64, t); + if (strncmp(buf, "4294967296", sizeof(buf))) + return 6; + + return 0; +} + + +_ACEOF +if ac_fn_c_try_run "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -$as_echo "#define HAVE_NO_PRINTF_Z 1" >>confdefs.h +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + as_fn_error $? "The snprintf(3) implementation in this libc is not suitable, +tcpdump would not work correctly even if it managed to compile." "$LINENO" 5 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -5197,11 +5936,12 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lrpc" >&5 -$as_echo_n "checking for main in -lrpc... " >&6; } -if ${ac_cv_lib_rpc_main+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -lrpc" >&5 +printf %s "checking for main in -lrpc... " >&6; } +if test ${ac_cv_lib_rpc_main+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lrpc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -5209,38 +5949,39 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext int -main () +main (void) { return main (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_rpc_main=yes -else +else $as_nop ac_cv_lib_rpc_main=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rpc_main" >&5 -$as_echo "$ac_cv_lib_rpc_main" >&6; } -if test "x$ac_cv_lib_rpc_main" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBRPC 1 -_ACEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_rpc_main" >&5 +printf "%s\n" "$ac_cv_lib_rpc_main" >&6; } +if test "x$ac_cv_lib_rpc_main" = xyes +then : + printf "%s\n" "#define HAVE_LIBRPC 1" >>confdefs.h LIBS="-lrpc $LIBS" fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing getrpcbynumber" >&5 -$as_echo_n "checking for library containing getrpcbynumber... " >&6; } -if ${ac_cv_search_getrpcbynumber+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing getrpcbynumber" >&5 +printf %s "checking for library containing getrpcbynumber... " >&6; } +if test ${ac_cv_search_getrpcbynumber+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -5248,89 +5989,90 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char getrpcbynumber (); int -main () +main (void) { return getrpcbynumber (); ; return 0; } _ACEOF -for ac_lib in '' nsl; do +for ac_lib in '' nsl +do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi - if ac_fn_c_try_link "$LINENO"; then : + if ac_fn_c_try_link "$LINENO" +then : ac_cv_search_getrpcbynumber=$ac_res fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext - if ${ac_cv_search_getrpcbynumber+:} false; then : + if test ${ac_cv_search_getrpcbynumber+y} +then : break fi done -if ${ac_cv_search_getrpcbynumber+:} false; then : +if test ${ac_cv_search_getrpcbynumber+y} +then : -else +else $as_nop ac_cv_search_getrpcbynumber=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getrpcbynumber" >&5 -$as_echo "$ac_cv_search_getrpcbynumber" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_getrpcbynumber" >&5 +printf "%s\n" "$ac_cv_search_getrpcbynumber" >&6; } ac_res=$ac_cv_search_getrpcbynumber -if test "$ac_res" != no; then : +if test "$ac_res" != no +then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" -$as_echo "#define HAVE_GETRPCBYNUMBER 1" >>confdefs.h +printf "%s\n" "#define HAVE_GETRPCBYNUMBER 1" >>confdefs.h fi + + LBL_LIBS="$LIBS" pfopen=/usr/examples/packetfilter/pfopen.c if test -f $pfopen ; then - for ac_func in pfopen -do : - ac_fn_c_check_func "$LINENO" "pfopen" "ac_cv_func_pfopen" -if test "x$ac_cv_func_pfopen" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PFOPEN 1 -_ACEOF + ac_fn_c_check_func "$LINENO" "pfopen" "ac_cv_func_pfopen" +if test "x$ac_cv_func_pfopen" = xyes +then : + printf "%s\n" "#define HAVE_PFOPEN 1" >>confdefs.h fi -done if test $ac_cv_func_pfopen = "no" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: Using $pfopen" >&5 -$as_echo "Using $pfopen" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: Using $pfopen" >&5 +printf "%s\n" "Using $pfopen" >&6; } LIBS="$LIBS $pfopen" fi fi libpcap=FAIL - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to look for a local libpcap" >&5 -$as_echo_n "checking whether to look for a local libpcap... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to look for a local libpcap" >&5 +printf %s "checking whether to look for a local libpcap... " >&6; } # Check whether --enable-local-libpcap was given. -if test "${enable_local_libpcap+set}" = set; then : +if test ${enable_local_libpcap+y} +then : enableval=$enable_local_libpcap; -else +else $as_nop enableval=yes fi case "$enableval" in no) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } # # Don't look for a local libpcap. # @@ -5338,18 +6080,18 @@ $as_echo "no" >&6; } ;; *) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } # # Look for a local pcap library. # - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for local pcap library" >&5 -$as_echo_n "checking for local pcap library... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for local pcap library" >&5 +printf %s "checking for local pcap library... " >&6; } lastdir=FAIL places=`ls $srcdir/.. | sed -e 's,/$,,' -e "s,^,$srcdir/../," | \ - egrep '/libpcap-[0-9]+\.[0-9]+(\.[0-9]*)?([ab][0-9]*|-PRE-GIT|rc.)?$'` + $EGREP '/libpcap-[0-9]+\.[0-9]+(\.[0-9]*)?([ab][0-9]*|-PRE-GIT|rc.)?$'` places2=`ls .. | sed -e 's,/$,,' -e "s,^,../," | \ - egrep '/libpcap-[0-9]+\.[0-9]+(\.[0-9]*)?([ab][0-9]*|-PRE-GIT|rc.)?$'` + $EGREP '/libpcap-[0-9]+\.[0-9]+(\.[0-9]*)?([ab][0-9]*|-PRE-GIT|rc.)?$'` for dir in $places $srcdir/../libpcap ../libpcap $srcdir/libpcap $places2 ; do basedir=`echo $dir | sed -e 's/[ab][0-9]*$//' | \ sed -e 's/-PRE-GIT$//' ` @@ -5366,15 +6108,15 @@ $as_echo_n "checking for local pcap library... " >&6; } # # We didn't find a local libpcap. # - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 -$as_echo "not found" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +printf "%s\n" "not found" >&6; } using_local_libpcap=no; else # # We found a local libpcap. # - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $libpcap" >&5 -$as_echo "$libpcap" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $libpcap" >&5 +printf "%s\n" "$libpcap" >&6; } using_local_libpcap=yes fi ;; @@ -5385,104 +6127,6 @@ $as_echo "$libpcap" >&6; } # We didn't find a local libpcap. # Look for an installed pkg-config. # - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. -set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -PKG_CONFIG=$ac_cv_path_PKG_CONFIG -if test -n "$PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 -$as_echo "$PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_path_PKG_CONFIG"; then - ac_pt_PKG_CONFIG=$PKG_CONFIG - # Extract the first word of "pkg-config", so it can be a program name with args. -set dummy pkg-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else - case $ac_pt_PKG_CONFIG in - [\\/]* | ?:[\\/]*) - ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. - ;; - *) - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - - ;; -esac -fi -ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG -if test -n "$ac_pt_PKG_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 -$as_echo "$ac_pt_PKG_CONFIG" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_pt_PKG_CONFIG" = x; then - PKG_CONFIG="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - PKG_CONFIG=$ac_pt_PKG_CONFIG - fi -else - PKG_CONFIG="$ac_cv_path_PKG_CONFIG" -fi - if test -n "$PKG_CONFIG" ; then # # We have it. Are there .pc files for libpcap? @@ -5491,23 +6135,23 @@ fi # dates back to late 2000, so we won't worry about # earlier releases that lack it. # - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether there are .pc files for libpcap" >&5 -$as_echo_n "checking whether there are .pc files for libpcap... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether there are .pc files for libpcap" >&5 +printf %s "checking whether there are .pc files for libpcap... " >&6; } if "$PKG_CONFIG" libpcap --exists ; then # # Yes, so we can use pkg-config to get configuration # information for libpcap. # - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } pkg_config_usable=yes else # # No, so we can't use pkg-config to get configuration # information for libpcap. # - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } pkg_config_usable=no fi else @@ -5539,11 +6183,12 @@ $as_echo "no" >&6; } if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pcap-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pcap-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PCAP_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PCAP_CONFIG+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $PCAP_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PCAP_CONFIG="$PCAP_CONFIG" # Let the user override the test with a path. @@ -5553,11 +6198,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PCAP_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PCAP_CONFIG="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5569,11 +6218,11 @@ esac fi PCAP_CONFIG=$ac_cv_path_PCAP_CONFIG if test -n "$PCAP_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PCAP_CONFIG" >&5 -$as_echo "$PCAP_CONFIG" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PCAP_CONFIG" >&5 +printf "%s\n" "$PCAP_CONFIG" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5582,11 +6231,12 @@ if test -z "$ac_cv_path_PCAP_CONFIG"; then ac_pt_PCAP_CONFIG=$PCAP_CONFIG # Extract the first word of "pcap-config", so it can be a program name with args. set dummy pcap-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_ac_pt_PCAP_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_ac_pt_PCAP_CONFIG+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $ac_pt_PCAP_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PCAP_CONFIG="$ac_pt_PCAP_CONFIG" # Let the user override the test with a path. @@ -5596,11 +6246,15 @@ else for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_ac_pt_PCAP_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_ac_pt_PCAP_CONFIG="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5612,11 +6266,11 @@ esac fi ac_pt_PCAP_CONFIG=$ac_cv_path_ac_pt_PCAP_CONFIG if test -n "$ac_pt_PCAP_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PCAP_CONFIG" >&5 -$as_echo "$ac_pt_PCAP_CONFIG" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PCAP_CONFIG" >&5 +printf "%s\n" "$ac_pt_PCAP_CONFIG" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PCAP_CONFIG" = x; then @@ -5624,8 +6278,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PCAP_CONFIG=$ac_pt_PCAP_CONFIG @@ -5664,6 +6318,59 @@ fi # ignore those values. # _broken_apple_pcap_config=yes + + # + # Furthermore: + # + # macOS Sonoma's libpcap includes stub versions + # of the remote-capture APIs. They are exported + # as "weakly linked symbols". + # + # Xcode 15 offers only a macOS Sonoma SDK, which + # has a .tbd file for libpcap that claims it + # includes those APIs. (Newer versions of macOS + # don't provide the system shared libraries, + # they only provide the dyld shared cache + # containing those libraries, so the OS provides + # SDKs that include a .tbd file to use when + # linking.) + # + # This means that AC_CHECK_FUNCS() will think + # that the remote-capture APIs are present, + # including pcap_open() and + # pcap_findalldevs_ex(). + # + # However, they are *not* present in macOS + # Ventura and earlier, which means that building + # on Ventura with Xcode 15 produces executables + # that fail to start because one of those APIs + # isn't found in the system libpcap. + # + # Protecting calls to those APIs with + # __builtin_available() does not appear to + # prevent this, for some unknown reason, and it + # doesn't even allow the program to compile with + # versions of Xcode prior to Xcode 15, as the + # pcap.h file doesn't specify minimum OS + # versions for those functions. + # + # Given all that, and given that the versions of + # the remote-capture APIs in Sonoma are stubs + # that always fail, there doesn't seem to be any + # point in checking for pcap_open() if we're + # linking against the Apple libpcap. + # + # However, if we're *not* linking against the + # Apple libpcap, we should check for it, so that + # we can use it if it's present. + # + # We know this is macOS and that we're using + # the system-provided pcap-config to find + # libpcap, so we know it'll be the system + # libpcap, and note that we should not search + # for remote-capture APIs. + # + _dont_check_for_remote_apis=yes ;; solaris*) @@ -5689,17 +6396,19 @@ fi # version HP92453-01 B.11.11.23709.GP, which incorrectly rejects # declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'. # This bug is HP SR number 8606223364. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 -$as_echo_n "checking size of void *... " >&6; } -if ${ac_cv_sizeof_void_p+:} false; then : - $as_echo_n "(cached) " >&6 -else - if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default"; then : - -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking size of void *" >&5 +printf %s "checking size of void *... " >&6; } +if test ${ac_cv_sizeof_void_p+y} +then : + printf %s "(cached) " >&6 +else $as_nop + if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (void *))" "ac_cv_sizeof_void_p" "$ac_includes_default" +then : + +else $as_nop if test "$ac_cv_type_void_p" = yes; then - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "cannot compute sizeof (void *) See \`config.log' for more details" "$LINENO" 5; } else @@ -5708,14 +6417,12 @@ See \`config.log' for more details" "$LINENO" 5; } fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 -$as_echo "$ac_cv_sizeof_void_p" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_void_p" >&5 +printf "%s\n" "$ac_cv_sizeof_void_p" >&6; } -cat >>confdefs.h <<_ACEOF -#define SIZEOF_VOID_P $ac_cv_sizeof_void_p -_ACEOF +printf "%s\n" "#define SIZEOF_VOID_P $ac_cv_sizeof_void_p" >>confdefs.h if test ac_cv_sizeof_void_p -eq 8 ; then @@ -5767,11 +6474,12 @@ _ACEOF # # Not found; look for an installed pcap. # - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for main in -lpcap" >&5 -$as_echo_n "checking for main in -lpcap... " >&6; } -if ${ac_cv_lib_pcap_main+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for main in -lpcap" >&5 +printf %s "checking for main in -lpcap... " >&6; } +if test ${ac_cv_lib_pcap_main+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lpcap $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -5779,33 +6487,35 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext int -main () +main (void) { return main (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_pcap_main=yes -else +else $as_nop ac_cv_lib_pcap_main=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pcap_main" >&5 -$as_echo "$ac_cv_lib_pcap_main" >&6; } -if test "x$ac_cv_lib_pcap_main" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pcap_main" >&5 +printf "%s\n" "$ac_cv_lib_pcap_main" >&6; } +if test "x$ac_cv_lib_pcap_main" = xyes +then : libpcap="-lpcap" fi if test $libpcap = FAIL ; then - as_fn_error $? "see the INSTALL doc for more info" "$LINENO" 5 + as_fn_error $? "see the INSTALL.md file for more info" "$LINENO" 5 fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for extraneous pcap header directories" >&5 -$as_echo_n "checking for extraneous pcap header directories... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for extraneous pcap header directories" >&5 +printf %s "checking for extraneous pcap header directories... " >&6; } if test \( ! -r /usr/local/include/pcap.h \) -a \ \( ! -r /usr/include/pcap.h \); then if test -r /usr/local/include/pcap/pcap.h; then @@ -5815,12 +6525,12 @@ $as_echo_n "checking for extraneous pcap header directories... " >&6; } fi fi if test -z "$d" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5 -$as_echo "not found" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +printf "%s\n" "not found" >&6; } else V_INCLS="-I$d $V_INCLS" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: found -- -I$d added" >&5 -$as_echo "found -- -I$d added" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: found -- -I$d added" >&5 +printf "%s\n" "found -- -I$d added" >&6; } fi fi fi @@ -5836,11 +6546,12 @@ $as_echo "found -- -I$d added" >&6; } # # Extract the first word of "pcap-config", so it can be a program name with args. set dummy pcap-config; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_path_PCAP_CONFIG+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_path_PCAP_CONFIG+y} +then : + printf %s "(cached) " >&6 +else $as_nop case $PCAP_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PCAP_CONFIG="$PCAP_CONFIG" # Let the user override the test with a path. @@ -5850,11 +6561,15 @@ else for as_dir in $local_pcap_dir do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_path_PCAP_CONFIG="$as_dir/$ac_word$ac_exec_ext" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then + ac_cv_path_PCAP_CONFIG="$as_dir$ac_word$ac_exec_ext" + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -5866,11 +6581,11 @@ esac fi PCAP_CONFIG=$ac_cv_path_PCAP_CONFIG if test -n "$PCAP_CONFIG"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PCAP_CONFIG" >&5 -$as_echo "$PCAP_CONFIG" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PCAP_CONFIG" >&5 +printf "%s\n" "$PCAP_CONFIG" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -5917,7 +6632,7 @@ fi # statically linked, and provide only the direct # dependencies with --static-pcap-only. # - if grep -s -q "static-pcap-only" "$PCAP_CONFIG" + if grep "static-pcap-only" "$PCAP_CONFIG" >/dev/null 2>&1 then static_opt="--static-pcap-only" else @@ -5932,9 +6647,9 @@ fi # Make sure it has a pcap.h file. # places=`ls $srcdir/.. | sed -e 's,/$,,' -e "s,^,$srcdir/../," | \ - egrep '/libpcap-[0-9]*.[0-9]*(.[0-9]*)?([ab][0-9]*)?$'` + $EGREP '/libpcap-[0-9]*.[0-9]*(.[0-9]*)?([ab][0-9]*)?$'` places2=`ls .. | sed -e 's,/$,,' -e "s,^,../," | \ - egrep '/libpcap-[0-9]*.[0-9]*(.[0-9]*)?([ab][0-9]*)?$'` + $EGREP '/libpcap-[0-9]*.[0-9]*(.[0-9]*)?([ab][0-9]*)?$'` pcapH=FAIL if test -r $local_pcap_dir/pcap.h; then pcapH=$local_pcap_dir @@ -5947,7 +6662,7 @@ fi fi if test $pcapH = FAIL ; then - as_fn_error $? "cannot find pcap.h: see INSTALL" "$LINENO" 5 + as_fn_error $? "cannot find pcap.h: see the INSTALL.md file" "$LINENO" 5 fi # @@ -5974,11 +6689,11 @@ fi # (XXX - true only if we're linking with a static libpcap?) # pseexe="/lib/pse.exp" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $pseexe" >&5 -$as_echo_n "checking for $pseexe... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $pseexe" >&5 +printf %s "checking for $pseexe... " >&6; } if test -f $pseexe ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } LIBS="$LIBS -I:$pseexe" fi @@ -5993,11 +6708,12 @@ $as_echo "yes" >&6; } solaris*) # libdlpi is needed for Solaris 11 and later. - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlpi_walk in -ldlpi" >&5 -$as_echo_n "checking for dlpi_walk in -ldlpi... " >&6; } -if ${ac_cv_lib_dlpi_dlpi_walk+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlpi_walk in -ldlpi" >&5 +printf %s "checking for dlpi_walk in -ldlpi... " >&6; } +if test ${ac_cv_lib_dlpi_dlpi_walk+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-ldlpi -L/lib $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -6006,30 +6722,29 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char dlpi_walk (); int -main () +main (void) { return dlpi_walk (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_dlpi_dlpi_walk=yes -else +else $as_nop ac_cv_lib_dlpi_dlpi_walk=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dlpi_dlpi_walk" >&5 -$as_echo "$ac_cv_lib_dlpi_dlpi_walk" >&6; } -if test "x$ac_cv_lib_dlpi_dlpi_walk" = xyes; then : +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dlpi_dlpi_walk" >&5 +printf "%s\n" "$ac_cv_lib_dlpi_dlpi_walk" >&6; } +if test "x$ac_cv_lib_dlpi_dlpi_walk" = xyes +then : LIBS="$LIBS -ldlpi" LDFLAGS="-L/lib $LDFLAGS" fi @@ -6040,12 +6755,15 @@ fi LIBS="$libpcap $LIBS" ac_fn_c_check_func "$LINENO" "pcap_loop" "ac_cv_func_pcap_loop" -if test "x$ac_cv_func_pcap_loop" = xyes; then : +if test "x$ac_cv_func_pcap_loop" = xyes +then : -else +else $as_nop - as_fn_error $? "This is a bug, please follow the guidelines in CONTRIBUTING.md and include the -config.log file in your report. If you have downloaded libpcap from + as_fn_error $? " +1. Do you try to build a 32-bit tcpdump with a 64-bit libpcap or vice versa? +2. This is a bug, please follow the guidelines in CONTRIBUTING.md and include +the config.log file in your report. If you have downloaded libpcap from tcpdump.org, and built it yourself, please also include the config.log file from the libpcap source directory, the Makefile from the libpcap source directory, and the output of the make process for libpcap, as @@ -6073,23 +6791,25 @@ fi # # Before you is a C compiler. # -for ac_func in ether_ntohost + + for ac_func in ether_ntohost do : ac_fn_c_check_func "$LINENO" "ether_ntohost" "ac_cv_func_ether_ntohost" -if test "x$ac_cv_func_ether_ntohost" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_ETHER_NTOHOST 1 -_ACEOF - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for buggy ether_ntohost" >&5 -$as_echo_n "checking for buggy ether_ntohost... " >&6; } -if ${ac_cv_buggy_ether_ntohost+:} false; then : - $as_echo_n "(cached) " >&6 -else - - if test "$cross_compiling" = yes; then : +if test "x$ac_cv_func_ether_ntohost" = xyes +then : + printf "%s\n" "#define HAVE_ETHER_NTOHOST 1" >>confdefs.h + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for buggy ether_ntohost" >&5 +printf %s "checking for buggy ether_ntohost... " >&6; } +if test ${ac_cv_buggy_ether_ntohost+y} +then : + printf %s "(cached) " >&6 +else $as_nop + + if test "$cross_compiling" = yes +then : ac_cv_buggy_ether_ntohost="not while cross-compiling" -else +else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ @@ -6110,10 +6830,12 @@ else exit(0); } + _ACEOF -if ac_fn_c_try_run "$LINENO"; then : +if ac_fn_c_try_run "$LINENO" +then : ac_cv_buggy_ether_ntohost=no -else +else $as_nop ac_cv_buggy_ether_ntohost=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ @@ -6121,17 +6843,17 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_buggy_ether_ntohost" >&5 -$as_echo "$ac_cv_buggy_ether_ntohost" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_buggy_ether_ntohost" >&5 +printf "%s\n" "$ac_cv_buggy_ether_ntohost" >&6; } if test "$ac_cv_buggy_ether_ntohost" = "no"; then -$as_echo "#define USE_ETHER_NTOHOST 1" >>confdefs.h +printf "%s\n" "#define USE_ETHER_NTOHOST 1" >>confdefs.h fi fi -done +done if test "$ac_cv_func_ether_ntohost" = yes -a \ "$ac_cv_buggy_ether_ntohost" = "no"; then # @@ -6140,18 +6862,98 @@ if test "$ac_cv_func_ether_ntohost" = yes -a \ # This test fails if we don't have <net/ethernet.h> or if we do # but it doesn't declare ether_ntohost(). # - ac_fn_c_check_decl "$LINENO" "ether_ntohost" "ac_cv_have_decl_ether_ntohost" " + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CC options needed to detect all undeclared functions" >&5 +printf %s "checking for $CC options needed to detect all undeclared functions... " >&6; } +if test ${ac_cv_c_undeclared_builtin_options+y} +then : + printf %s "(cached) " >&6 +else $as_nop + ac_save_CFLAGS=$CFLAGS + ac_cv_c_undeclared_builtin_options='cannot detect' + for ac_arg in '' -fno-builtin; do + CFLAGS="$ac_save_CFLAGS $ac_arg" + # This test program should *not* compile successfully. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main (void) +{ +(void) strchr; + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + +else $as_nop + # This test program should compile successfully. + # No library function is consistently available on + # freestanding implementations, so test against a dummy + # declaration. Include always-available headers on the + # off chance that they somehow elicit warnings. + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#include <float.h> +#include <limits.h> +#include <stdarg.h> +#include <stddef.h> +extern void ac_decl (int, char *); + +int +main (void) +{ +(void) ac_decl (0, (char *) 0); + (void) ac_decl; + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + if test x"$ac_arg" = x +then : + ac_cv_c_undeclared_builtin_options='none needed' +else $as_nop + ac_cv_c_undeclared_builtin_options=$ac_arg +fi + break +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + done + CFLAGS=$ac_save_CFLAGS + +fi +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_undeclared_builtin_options" >&5 +printf "%s\n" "$ac_cv_c_undeclared_builtin_options" >&6; } + case $ac_cv_c_undeclared_builtin_options in #( + 'cannot detect') : + { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "cannot make $CC report undeclared builtins +See \`config.log' for more details" "$LINENO" 5; } ;; #( + 'none needed') : + ac_c_undeclared_builtin_options='' ;; #( + *) : + ac_c_undeclared_builtin_options=$ac_cv_c_undeclared_builtin_options ;; +esac + +ac_fn_check_decl "$LINENO" "ether_ntohost" "ac_cv_have_decl_ether_ntohost" " #include <net/ethernet.h> -" -if test "x$ac_cv_have_decl_ether_ntohost" = xyes; then : +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_ether_ntohost" = xyes +then : -$as_echo "#define NET_ETHERNET_H_DECLARES_ETHER_NTOHOST /**/" >>confdefs.h +printf "%s\n" "#define NET_ETHERNET_H_DECLARES_ETHER_NTOHOST /**/" >>confdefs.h fi - # # Did that succeed? # @@ -6167,18 +6969,18 @@ fi # suppress the next test. # unset ac_cv_have_decl_ether_ntohost - ac_fn_c_check_decl "$LINENO" "ether_ntohost" "ac_cv_have_decl_ether_ntohost" " + ac_fn_check_decl "$LINENO" "ether_ntohost" "ac_cv_have_decl_ether_ntohost" " #include <netinet/ether.h> -" -if test "x$ac_cv_have_decl_ether_ntohost" = xyes; then : +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_ether_ntohost" = xyes +then : -$as_echo "#define NETINET_ETHER_H_DECLARES_ETHER_NTOHOST /**/" >>confdefs.h +printf "%s\n" "#define NETINET_ETHER_H_DECLARES_ETHER_NTOHOST 1" >>confdefs.h fi - fi # # Did that succeed? @@ -6196,18 +6998,18 @@ fi # suppress the next test. # unset ac_cv_have_decl_ether_ntohost - ac_fn_c_check_decl "$LINENO" "ether_ntohost" "ac_cv_have_decl_ether_ntohost" " + ac_fn_check_decl "$LINENO" "ether_ntohost" "ac_cv_have_decl_ether_ntohost" " #include <sys/ethernet.h> -" -if test "x$ac_cv_have_decl_ether_ntohost" = xyes; then : +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_ether_ntohost" = xyes +then : -$as_echo "#define SYS_ETHERNET_H_DECLARES_ETHER_NTOHOST /**/" >>confdefs.h +printf "%s\n" "#define SYS_ETHERNET_H_DECLARES_ETHER_NTOHOST /**/" >>confdefs.h fi - fi # # Did that succeed? @@ -6227,18 +7029,18 @@ fi # suppress the next test. # unset ac_cv_have_decl_ether_ntohost - ac_fn_c_check_decl "$LINENO" "ether_ntohost" "ac_cv_have_decl_ether_ntohost" " + ac_fn_check_decl "$LINENO" "ether_ntohost" "ac_cv_have_decl_ether_ntohost" " #include <arpa/inet.h> -" -if test "x$ac_cv_have_decl_ether_ntohost" = xyes; then : +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_ether_ntohost" = xyes +then : -$as_echo "#define ARPA_INET_H_DECLARES_ETHER_NTOHOST /**/" >>confdefs.h +printf "%s\n" "#define ARPA_INET_H_DECLARES_ETHER_NTOHOST /**/" >>confdefs.h fi - fi # # Did that succeed? @@ -6259,22 +7061,22 @@ fi # suppress the next test. # unset ac_cv_have_decl_ether_ntohost - ac_fn_c_check_decl "$LINENO" "ether_ntohost" "ac_cv_have_decl_ether_ntohost" " + ac_fn_check_decl "$LINENO" "ether_ntohost" "ac_cv_have_decl_ether_ntohost" " #include <sys/types.h> #include <sys/socket.h> #include <net/if.h> #include <netinet/in.h> #include <netinet/if_ether.h> -" -if test "x$ac_cv_have_decl_ether_ntohost" = xyes; then : +" "$ac_c_undeclared_builtin_options" "CFLAGS" +if test "x$ac_cv_have_decl_ether_ntohost" = xyes +then : -$as_echo "#define NETINET_IF_ETHER_H_DECLARES_ETHER_NTOHOST /**/" >>confdefs.h +printf "%s\n" "#define NETINET_IF_ETHER_H_DECLARES_ETHER_NTOHOST /**/" >>confdefs.h fi - fi # # After all that, is ether_ntohost() declared? @@ -6284,7 +7086,7 @@ fi # Yes. # -$as_echo "#define HAVE_DECL_ETHER_NTOHOST 1" >>confdefs.h +printf "%s\n" "#define HAVE_DECL_ETHER_NTOHOST 1" >>confdefs.h else # @@ -6300,11 +7102,10 @@ $as_echo "#define HAVE_DECL_ETHER_NTOHOST 1" >>confdefs.h #include <netinet/if_ether.h> " -if test "x$ac_cv_type_struct_ether_addr" = xyes; then : +if test "x$ac_cv_type_struct_ether_addr" = xyes +then : -cat >>confdefs.h <<_ACEOF -#define HAVE_STRUCT_ETHER_ADDR 1 -_ACEOF +printf "%s\n" "#define HAVE_STRUCT_ETHER_ADDR 1" >>confdefs.h fi @@ -6313,24 +7114,21 @@ fi fi ac_fn_c_check_func "$LINENO" "pcap_list_datalinks" "ac_cv_func_pcap_list_datalinks" -if test "x$ac_cv_func_pcap_list_datalinks" = xyes; then : +if test "x$ac_cv_func_pcap_list_datalinks" = xyes +then : -$as_echo "#define HAVE_PCAP_LIST_DATALINKS 1" >>confdefs.h +printf "%s\n" "#define HAVE_PCAP_LIST_DATALINKS 1" >>confdefs.h - for ac_func in pcap_free_datalinks -do : - ac_fn_c_check_func "$LINENO" "pcap_free_datalinks" "ac_cv_func_pcap_free_datalinks" -if test "x$ac_cv_func_pcap_free_datalinks" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PCAP_FREE_DATALINKS 1 -_ACEOF + ac_fn_c_check_func "$LINENO" "pcap_free_datalinks" "ac_cv_func_pcap_free_datalinks" +if test "x$ac_cv_func_pcap_free_datalinks" = xyes +then : + printf "%s\n" "#define HAVE_PCAP_FREE_DATALINKS 1" >>confdefs.h fi -done -else +else $as_nop case " $LIBOBJS " in *" datalinks.$ac_objext "* ) ;; @@ -6343,17 +7141,19 @@ fi ac_fn_c_check_func "$LINENO" "pcap_datalink_name_to_val" "ac_cv_func_pcap_datalink_name_to_val" -if test "x$ac_cv_func_pcap_datalink_name_to_val" = xyes; then : +if test "x$ac_cv_func_pcap_datalink_name_to_val" = xyes +then : -$as_echo "#define HAVE_PCAP_DATALINK_NAME_TO_VAL 1" >>confdefs.h +printf "%s\n" "#define HAVE_PCAP_DATALINK_NAME_TO_VAL 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "pcap_datalink_val_to_description" "ac_cv_func_pcap_datalink_val_to_description" -if test "x$ac_cv_func_pcap_datalink_val_to_description" = xyes; then : +if test "x$ac_cv_func_pcap_datalink_val_to_description" = xyes +then : -$as_echo "#define HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION 1" >>confdefs.h +printf "%s\n" "#define HAVE_PCAP_DATALINK_VAL_TO_DESCRIPTION 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" dlnames.$ac_objext "* ) ;; @@ -6365,7 +7165,7 @@ esac fi -else +else $as_nop case " $LIBOBJS " in *" dlnames.$ac_objext "* ) ;; @@ -6377,28 +7177,20 @@ esac fi -for ac_func in pcap_set_datalink -do : - ac_fn_c_check_func "$LINENO" "pcap_set_datalink" "ac_cv_func_pcap_set_datalink" -if test "x$ac_cv_func_pcap_set_datalink" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PCAP_SET_DATALINK 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "pcap_set_datalink" "ac_cv_func_pcap_set_datalink" +if test "x$ac_cv_func_pcap_set_datalink" = xyes +then : + printf "%s\n" "#define HAVE_PCAP_SET_DATALINK 1" >>confdefs.h fi -done -for ac_func in pcap_breakloop -do : - ac_fn_c_check_func "$LINENO" "pcap_breakloop" "ac_cv_func_pcap_breakloop" -if test "x$ac_cv_func_pcap_breakloop" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PCAP_BREAKLOOP 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "pcap_breakloop" "ac_cv_func_pcap_breakloop" +if test "x$ac_cv_func_pcap_breakloop" = xyes +then : + printf "%s\n" "#define HAVE_PCAP_BREAKLOOP 1" >>confdefs.h fi -done # @@ -6406,47 +7198,35 @@ done # if we do, we also have pcap_activate() and the other new routines # introduced in libpcap 1.0.0. # -for ac_func in pcap_create -do : - ac_fn_c_check_func "$LINENO" "pcap_create" "ac_cv_func_pcap_create" -if test "x$ac_cv_func_pcap_create" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PCAP_CREATE 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "pcap_create" "ac_cv_func_pcap_create" +if test "x$ac_cv_func_pcap_create" = xyes +then : + printf "%s\n" "#define HAVE_PCAP_CREATE 1" >>confdefs.h fi -done if test $ac_cv_func_pcap_create = "yes" ; then # # OK, do we have pcap_set_tstamp_type? If so, assume we have # pcap_list_tstamp_types and pcap_free_tstamp_types as well. # - for ac_func in pcap_set_tstamp_type -do : - ac_fn_c_check_func "$LINENO" "pcap_set_tstamp_type" "ac_cv_func_pcap_set_tstamp_type" -if test "x$ac_cv_func_pcap_set_tstamp_type" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PCAP_SET_TSTAMP_TYPE 1 -_ACEOF + ac_fn_c_check_func "$LINENO" "pcap_set_tstamp_type" "ac_cv_func_pcap_set_tstamp_type" +if test "x$ac_cv_func_pcap_set_tstamp_type" = xyes +then : + printf "%s\n" "#define HAVE_PCAP_SET_TSTAMP_TYPE 1" >>confdefs.h fi -done # # And do we have pcap_set_tstamp_precision? If so, we assume # we also have pcap_open_offline_with_tstamp_precision. # - for ac_func in pcap_set_tstamp_precision -do : - ac_fn_c_check_func "$LINENO" "pcap_set_tstamp_precision" "ac_cv_func_pcap_set_tstamp_precision" -if test "x$ac_cv_func_pcap_set_tstamp_precision" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PCAP_SET_TSTAMP_PRECISION 1 -_ACEOF + ac_fn_c_check_func "$LINENO" "pcap_set_tstamp_precision" "ac_cv_func_pcap_set_tstamp_precision" +if test "x$ac_cv_func_pcap_set_tstamp_precision" = xyes +then : + printf "%s\n" "#define HAVE_PCAP_SET_TSTAMP_PRECISION 1" >>confdefs.h fi -done fi @@ -6454,53 +7234,34 @@ fi # Check for a miscellaneous collection of functions which we use # if we have them. # -for ac_func in pcap_findalldevs -do : - ac_fn_c_check_func "$LINENO" "pcap_findalldevs" "ac_cv_func_pcap_findalldevs" -if test "x$ac_cv_func_pcap_findalldevs" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PCAP_FINDALLDEVS 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "pcap_findalldevs" "ac_cv_func_pcap_findalldevs" +if test "x$ac_cv_func_pcap_findalldevs" = xyes +then : + printf "%s\n" "#define HAVE_PCAP_FINDALLDEVS 1" >>confdefs.h fi -done - -if test $ac_cv_func_pcap_findalldevs = "yes" ; then - savedcppflags="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $V_INCLS" - ac_fn_c_check_type "$LINENO" "pcap_if_t" "ac_cv_type_pcap_if_t" "#include <pcap.h> -" -if test "x$ac_cv_type_pcap_if_t" = xyes; then : - -cat >>confdefs.h <<_ACEOF -#define HAVE_PCAP_IF_T 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "pcap_dump_flush" "ac_cv_func_pcap_dump_flush" +if test "x$ac_cv_func_pcap_dump_flush" = xyes +then : + printf "%s\n" "#define HAVE_PCAP_DUMP_FLUSH 1" >>confdefs.h fi +ac_fn_c_check_func "$LINENO" "pcap_lib_version" "ac_cv_func_pcap_lib_version" +if test "x$ac_cv_func_pcap_lib_version" = xyes +then : + printf "%s\n" "#define HAVE_PCAP_LIB_VERSION 1" >>confdefs.h - CPPFLAGS="$savedcppflags" fi -for ac_func in pcap_dump_flush pcap_lib_version -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF - -fi -done if test $ac_cv_func_pcap_lib_version = "no" ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pcap_version is defined by libpcap" >&5 -$as_echo_n "checking whether pcap_version is defined by libpcap... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pcap_version is defined by libpcap" >&5 +printf %s "checking whether pcap_version is defined by libpcap... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { extern char pcap_version[]; @@ -6510,54 +7271,72 @@ main () ; return 0; } + _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_lbl_cv_pcap_version_defined=yes -else +else $as_nop ac_lbl_cv_pcap_version_defined=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$ac_lbl_cv_pcap_version_defined" = yes ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -$as_echo "#define HAVE_PCAP_VERSION 1" >>confdefs.h +printf "%s\n" "#define HAVE_PCAP_VERSION 1" >>confdefs.h else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi fi -for ac_func in pcap_setdirection pcap_set_immediate_mode pcap_dump_ftell64 -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "pcap_setdirection" "ac_cv_func_pcap_setdirection" +if test "x$ac_cv_func_pcap_setdirection" = xyes +then : + printf "%s\n" "#define HAVE_PCAP_SETDIRECTION 1" >>confdefs.h fi -done +ac_fn_c_check_func "$LINENO" "pcap_set_immediate_mode" "ac_cv_func_pcap_set_immediate_mode" +if test "x$ac_cv_func_pcap_set_immediate_mode" = xyes +then : + printf "%s\n" "#define HAVE_PCAP_SET_IMMEDIATE_MODE 1" >>confdefs.h -for ac_func in pcap_open pcap_findalldevs_ex -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 -_ACEOF +fi +ac_fn_c_check_func "$LINENO" "pcap_dump_ftell64" "ac_cv_func_pcap_dump_ftell64" +if test "x$ac_cv_func_pcap_dump_ftell64" = xyes +then : + printf "%s\n" "#define HAVE_PCAP_DUMP_FTELL64 1" >>confdefs.h fi -done +# +# See the comment in AC_LBL_LIBPCAP in aclocal.m4 for the reason +# why we don't check for remote-capture APIs if we're building +# with the system libpcap on macOS. +# +if test "$_dont_check_for_remote_apis" != "yes"; then + ac_fn_c_check_func "$LINENO" "pcap_open" "ac_cv_func_pcap_open" +if test "x$ac_cv_func_pcap_open" = xyes +then : + printf "%s\n" "#define HAVE_PCAP_OPEN 1" >>confdefs.h + +fi +ac_fn_c_check_func "$LINENO" "pcap_findalldevs_ex" "ac_cv_func_pcap_findalldevs_ex" +if test "x$ac_cv_func_pcap_findalldevs_ex" = xyes +then : + printf "%s\n" "#define HAVE_PCAP_FINDALLDEVS_EX 1" >>confdefs.h + +fi + +fi ac_fn_c_check_func "$LINENO" "pcap_dump_ftell" "ac_cv_func_pcap_dump_ftell" -if test "x$ac_cv_func_pcap_dump_ftell" = xyes; then : - $as_echo "#define HAVE_PCAP_DUMP_FTELL 1" >>confdefs.h +if test "x$ac_cv_func_pcap_dump_ftell" = xyes +then : + printf "%s\n" "#define HAVE_PCAP_DUMP_FTELL 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" pcap_dump_ftell.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS pcap_dump_ftell.$ac_objext" @@ -6567,33 +7346,28 @@ esac fi - # # Check for special debugging functions # -for ac_func in pcap_set_parser_debug -do : - ac_fn_c_check_func "$LINENO" "pcap_set_parser_debug" "ac_cv_func_pcap_set_parser_debug" -if test "x$ac_cv_func_pcap_set_parser_debug" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PCAP_SET_PARSER_DEBUG 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "pcap_set_parser_debug" "ac_cv_func_pcap_set_parser_debug" +if test "x$ac_cv_func_pcap_set_parser_debug" = xyes +then : + printf "%s\n" "#define HAVE_PCAP_SET_PARSER_DEBUG 1" >>confdefs.h fi -done if test "$ac_cv_func_pcap_set_parser_debug" = "no" ; then # # OK, we don't have pcap_set_parser_debug() to set the libpcap # filter expression parser debug flag; can we directly set the # flag? - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pcap_debug is defined by libpcap" >&5 -$as_echo_n "checking whether pcap_debug is defined by libpcap... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pcap_debug is defined by libpcap" >&5 +printf %s "checking whether pcap_debug is defined by libpcap... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { extern int pcap_debug; @@ -6603,33 +7377,35 @@ main () ; return 0; } + _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_lbl_cv_pcap_debug_defined=yes -else +else $as_nop ac_lbl_cv_pcap_debug_defined=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$ac_lbl_cv_pcap_debug_defined" = yes ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -$as_echo "#define HAVE_PCAP_DEBUG 1" >>confdefs.h +printf "%s\n" "#define HAVE_PCAP_DEBUG 1" >>confdefs.h else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } # # OK, what about "yydebug"? # - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether yydebug is defined by libpcap" >&5 -$as_echo_n "checking whether yydebug is defined by libpcap... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether yydebug is defined by libpcap" >&5 +printf %s "checking whether yydebug is defined by libpcap... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int -main () +main (void) { extern int yydebug; @@ -6639,42 +7415,41 @@ main () ; return 0; } + _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_lbl_cv_yydebug_defined=yes -else +else $as_nop ac_lbl_cv_yydebug_defined=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$ac_lbl_cv_yydebug_defined" = yes ; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } -$as_echo "#define HAVE_YYDEBUG 1" >>confdefs.h +printf "%s\n" "#define HAVE_YYDEBUG 1" >>confdefs.h else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi fi fi -for ac_func in pcap_set_optimizer_debug -do : - ac_fn_c_check_func "$LINENO" "pcap_set_optimizer_debug" "ac_cv_func_pcap_set_optimizer_debug" -if test "x$ac_cv_func_pcap_set_optimizer_debug" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PCAP_SET_OPTIMIZER_DEBUG 1 -_ACEOF +ac_fn_c_check_func "$LINENO" "pcap_set_optimizer_debug" "ac_cv_func_pcap_set_optimizer_debug" +if test "x$ac_cv_func_pcap_set_optimizer_debug" = xyes +then : + printf "%s\n" "#define HAVE_PCAP_SET_OPTIMIZER_DEBUG 1" >>confdefs.h fi -done ac_fn_c_check_func "$LINENO" "bpf_dump" "ac_cv_func_bpf_dump" -if test "x$ac_cv_func_bpf_dump" = xyes; then : - $as_echo "#define HAVE_BPF_DUMP 1" >>confdefs.h +if test "x$ac_cv_func_bpf_dump" = xyes +then : + printf "%s\n" "#define HAVE_BPF_DUMP 1" >>confdefs.h -else +else $as_nop case " $LIBOBJS " in *" bpf_dump.$ac_objext "* ) ;; *) LIBOBJS="$LIBOBJS bpf_dump.$ac_objext" @@ -6683,11 +7458,6 @@ esac fi - -V_GROUP=0 -if test -f /etc/group -a ! -z "`grep '^wheel:' /etc/group`" ; then - V_GROUP=wheel -fi # # Assume V7/BSD convention for man pages (file formats in section 5, # miscellaneous info in section 7). @@ -6698,7 +7468,7 @@ case "$host_os" in aix*) -$as_echo "#define _SUN 1" >>confdefs.h +printf "%s\n" "#define _SUN 1" >>confdefs.h ;; @@ -6731,8 +7501,6 @@ osf*) ;; solaris*) - V_GROUP=sys - # # Use System V conventions for man pages. # @@ -6741,28 +7509,25 @@ solaris*) ;; esac -if test -f /dev/bpf0 ; then - V_GROUP=bpf -fi - # # Make sure we have a definition for C99's uintptr_t (regardless of # whether the environment is a C99 environment or not). # ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default" -if test "x$ac_cv_type_uintptr_t" = xyes; then : +if test "x$ac_cv_type_uintptr_t" = xyes +then : -$as_echo "#define HAVE_UINTPTR_T 1" >>confdefs.h +printf "%s\n" "#define HAVE_UINTPTR_T 1" >>confdefs.h -else +else $as_nop for ac_type in 'unsigned int' 'unsigned long int' \ 'unsigned long long int'; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int -main () +main (void) { static int test_array [1 - 2 * !(sizeof (void *) <= sizeof ($ac_type))]; test_array [0] = 0; @@ -6772,38 +7537,48 @@ return test_array [0]; return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : -cat >>confdefs.h <<_ACEOF -#define uintptr_t $ac_type -_ACEOF +printf "%s\n" "#define uintptr_t $ac_type" >>confdefs.h ac_type= fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test -z "$ac_type" && break done fi +savedcppflags="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $V_INCLS" + # # Check whether we have pcap/pcap-inttypes.h. # If we do, we use that to get the C99 types defined. # -savedcppflags="$CPPFLAGS" -CPPFLAGS="$CPPFLAGS $V_INCLS" -for ac_header in pcap/pcap-inttypes.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "pcap/pcap-inttypes.h" "ac_cv_header_pcap_pcap_inttypes_h" "$ac_includes_default" -if test "x$ac_cv_header_pcap_pcap_inttypes_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_PCAP_PCAP_INTTYPES_H 1 -_ACEOF +ac_fn_c_check_header_compile "$LINENO" "pcap/pcap-inttypes.h" "ac_cv_header_pcap_pcap_inttypes_h" "$ac_includes_default" +if test "x$ac_cv_header_pcap_pcap_inttypes_h" = xyes +then : + printf "%s\n" "#define HAVE_PCAP_PCAP_INTTYPES_H 1" >>confdefs.h + +fi + + +# +# At compile time HAVE_PCAP_FINDALLDEVS depends on HAVE_PCAP_IF_T. +# +ac_fn_c_check_type "$LINENO" "pcap_if_t" "ac_cv_type_pcap_if_t" "#include <pcap.h> +" +if test "x$ac_cv_type_pcap_if_t" = xyes +then : + +printf "%s\n" "#define HAVE_PCAP_IF_T 1" >>confdefs.h + fi -done CPPFLAGS="$savedcppflags" @@ -6815,11 +7590,12 @@ ac_fn_c_check_type "$LINENO" "u_int8_t" "ac_cv_type_u_int8_t" "$ac_includes_defa #include <sys/types.h> " -if test "x$ac_cv_type_u_int8_t" = xyes; then : +if test "x$ac_cv_type_u_int8_t" = xyes +then : -else +else $as_nop -$as_echo "#define u_int8_t uint8_t" >>confdefs.h +printf "%s\n" "#define u_int8_t uint8_t" >>confdefs.h fi @@ -6827,11 +7603,12 @@ ac_fn_c_check_type "$LINENO" "u_int16_t" "ac_cv_type_u_int16_t" "$ac_includes_de #include <sys/types.h> " -if test "x$ac_cv_type_u_int16_t" = xyes; then : +if test "x$ac_cv_type_u_int16_t" = xyes +then : -else +else $as_nop -$as_echo "#define u_int16_t uint16_t" >>confdefs.h +printf "%s\n" "#define u_int16_t uint16_t" >>confdefs.h fi @@ -6839,11 +7616,12 @@ ac_fn_c_check_type "$LINENO" "u_int32_t" "ac_cv_type_u_int32_t" "$ac_includes_de #include <sys/types.h> " -if test "x$ac_cv_type_u_int32_t" = xyes; then : +if test "x$ac_cv_type_u_int32_t" = xyes +then : -else +else $as_nop -$as_echo "#define u_int32_t uint32_t" >>confdefs.h +printf "%s\n" "#define u_int32_t uint32_t" >>confdefs.h fi @@ -6851,11 +7629,12 @@ ac_fn_c_check_type "$LINENO" "u_int64_t" "ac_cv_type_u_int64_t" "$ac_includes_de #include <sys/types.h> " -if test "x$ac_cv_type_u_int64_t" = xyes; then : +if test "x$ac_cv_type_u_int64_t" = xyes +then : -else +else $as_nop -$as_echo "#define u_int64_t uint64_t" >>confdefs.h +printf "%s\n" "#define u_int64_t uint64_t" >>confdefs.h fi @@ -6863,11 +7642,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else @@ -6875,11 +7655,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6890,11 +7674,11 @@ fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 +printf "%s\n" "$RANLIB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6903,11 +7687,12 @@ if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_RANLIB+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else @@ -6915,11 +7700,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6930,11 +7719,11 @@ fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 +printf "%s\n" "$ac_ct_RANLIB" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then @@ -6942,8 +7731,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB @@ -6955,11 +7744,12 @@ fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. set dummy ${ac_tool_prefix}ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$AR"; then ac_cv_prog_AR="$AR" # Let the user override the test. else @@ -6967,11 +7757,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_AR="${ac_tool_prefix}ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -6982,11 +7776,11 @@ fi fi AR=$ac_cv_prog_AR if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 +printf "%s\n" "$AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi @@ -6995,11 +7789,12 @@ if test -z "$ac_cv_prog_AR"; then ac_ct_AR=$AR # Extract the first word of "ar", so it can be a program name with args. set dummy ar; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +printf %s "checking for $ac_word... " >&6; } +if test ${ac_cv_prog_ac_ct_AR+y} +then : + printf %s "(cached) " >&6 +else $as_nop if test -n "$ac_ct_AR"; then ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. else @@ -7007,11 +7802,15 @@ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="ar" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5 break 2 fi done @@ -7022,11 +7821,11 @@ fi fi ac_ct_AR=$ac_cv_prog_ac_ct_AR if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 +printf "%s\n" "$ac_ct_AR" >&6; } else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi if test "x$ac_ct_AR" = x; then @@ -7034,8 +7833,8 @@ fi else case $cross_compiling:$ac_tool_warned in yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +printf "%s\n" "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac AR=$ac_ct_AR @@ -7055,8 +7854,8 @@ rm -f os-proto.h # if test "$ac_lbl_cc_dont_try_gcc_dashW" != yes; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -W option" >&5 -$as_echo_n "checking whether the compiler supports the -W option... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -W option" >&5 +printf %s "checking whether the compiler supports the -W option... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -W" # @@ -7083,32 +7882,33 @@ $as_echo_n "checking whether the compiler supports the -W option... " >&6; } # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us # # This may, as per those two messages, be fixed in autoconf 2.70, - # but we only require 2.64 or newer for now. + # but we only require 2.69 or newer for now. # cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void) { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } CFLAGS="$save_CFLAGS" V_CCOPT="$V_CCOPT -W" -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } CFLAGS="$save_CFLAGS" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag="$save_ac_c_werror_flag" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wall option" >&5 -$as_echo_n "checking whether the compiler supports the -Wall option... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wall option" >&5 +printf %s "checking whether the compiler supports the -Wall option... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wall" # @@ -7135,32 +7935,33 @@ $as_echo_n "checking whether the compiler supports the -Wall option... " >&6; } # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us # # This may, as per those two messages, be fixed in autoconf 2.70, - # but we only require 2.64 or newer for now. + # but we only require 2.69 or newer for now. # cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void) { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } CFLAGS="$save_CFLAGS" V_CCOPT="$V_CCOPT -Wall" -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } CFLAGS="$save_CFLAGS" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag="$save_ac_c_werror_flag" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wassign-enum option" >&5 -$as_echo_n "checking whether the compiler supports the -Wassign-enum option... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wassign-enum option" >&5 +printf %s "checking whether the compiler supports the -Wassign-enum option... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wassign-enum" # @@ -7187,32 +7988,33 @@ $as_echo_n "checking whether the compiler supports the -Wassign-enum option... " # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us # # This may, as per those two messages, be fixed in autoconf 2.70, - # but we only require 2.64 or newer for now. + # but we only require 2.69 or newer for now. # cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void) { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } CFLAGS="$save_CFLAGS" V_CCOPT="$V_CCOPT -Wassign-enum" -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } CFLAGS="$save_CFLAGS" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag="$save_ac_c_werror_flag" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wcast-qual option" >&5 -$as_echo_n "checking whether the compiler supports the -Wcast-qual option... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wcast-qual option" >&5 +printf %s "checking whether the compiler supports the -Wcast-qual option... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wcast-qual" # @@ -7239,32 +8041,33 @@ $as_echo_n "checking whether the compiler supports the -Wcast-qual option... " > # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us # # This may, as per those two messages, be fixed in autoconf 2.70, - # but we only require 2.64 or newer for now. + # but we only require 2.69 or newer for now. # cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void) { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } CFLAGS="$save_CFLAGS" V_CCOPT="$V_CCOPT -Wcast-qual" -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } CFLAGS="$save_CFLAGS" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag="$save_ac_c_werror_flag" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wmissing-prototypes option" >&5 -$as_echo_n "checking whether the compiler supports the -Wmissing-prototypes option... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wmissing-prototypes option" >&5 +printf %s "checking whether the compiler supports the -Wmissing-prototypes option... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wmissing-prototypes" # @@ -7291,32 +8094,33 @@ $as_echo_n "checking whether the compiler supports the -Wmissing-prototypes opti # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us # # This may, as per those two messages, be fixed in autoconf 2.70, - # but we only require 2.64 or newer for now. + # but we only require 2.69 or newer for now. # cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void) { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } CFLAGS="$save_CFLAGS" V_CCOPT="$V_CCOPT -Wmissing-prototypes" -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } CFLAGS="$save_CFLAGS" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag="$save_ac_c_werror_flag" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wmissing-variable-declarations option" >&5 -$as_echo_n "checking whether the compiler supports the -Wmissing-variable-declarations option... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wmissing-variable-declarations option" >&5 +printf %s "checking whether the compiler supports the -Wmissing-variable-declarations option... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wmissing-variable-declarations" # @@ -7343,32 +8147,86 @@ $as_echo_n "checking whether the compiler supports the -Wmissing-variable-declar # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us # # This may, as per those two messages, be fixed in autoconf 2.70, - # but we only require 2.64 or newer for now. + # but we only require 2.69 or newer for now. # cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void) { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } CFLAGS="$save_CFLAGS" V_CCOPT="$V_CCOPT -Wmissing-variable-declarations" -else +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + CFLAGS="$save_CFLAGS" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_c_werror_flag="$save_ac_c_werror_flag" + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wnull-pointer-subtraction option" >&5 +printf %s "checking whether the compiler supports the -Wnull-pointer-subtraction option... " >&6; } + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wnull-pointer-subtraction" + # + # XXX - yes, this depends on the way AC_LANG_WERROR works, + # but no mechanism is provided to turn AC_LANG_WERROR on + # *and then turn it back off*, so that we *only* do it when + # testing compiler options - 15 years after somebody asked + # for it: + # + # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror + # + save_ac_c_werror_flag="$ac_c_werror_flag" + ac_c_werror_flag=yes + # + # We use AC_LANG_SOURCE() so that we can control the complete + # content of the program being compiled. We do not, for example, + # want the default "int main()" that AC_LANG_PROGRAM() generates, + # as it will generate a warning with -Wold-style-definition, meaning + # that we would treat it as not working, as the test will fail if + # *any* error output, including a warning due to the flag we're + # testing, is generated; see + # + # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us + # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us + # + # This may, as per those two messages, be fixed in autoconf 2.70, + # but we only require 2.69 or newer for now. + # + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int main(void) { return 0; } +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + CFLAGS="$save_CFLAGS" + V_CCOPT="$V_CCOPT -Wnull-pointer-subtraction" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } CFLAGS="$save_CFLAGS" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag="$save_ac_c_werror_flag" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wold-style-definition option" >&5 -$as_echo_n "checking whether the compiler supports the -Wold-style-definition option... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wold-style-definition option" >&5 +printf %s "checking whether the compiler supports the -Wold-style-definition option... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wold-style-definition" # @@ -7395,32 +8253,33 @@ $as_echo_n "checking whether the compiler supports the -Wold-style-definition op # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us # # This may, as per those two messages, be fixed in autoconf 2.70, - # but we only require 2.64 or newer for now. + # but we only require 2.69 or newer for now. # cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void) { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } CFLAGS="$save_CFLAGS" V_CCOPT="$V_CCOPT -Wold-style-definition" -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } CFLAGS="$save_CFLAGS" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag="$save_ac_c_werror_flag" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wpedantic option" >&5 -$as_echo_n "checking whether the compiler supports the -Wpedantic option... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wpedantic option" >&5 +printf %s "checking whether the compiler supports the -Wpedantic option... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wpedantic" # @@ -7447,32 +8306,33 @@ $as_echo_n "checking whether the compiler supports the -Wpedantic option... " >& # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us # # This may, as per those two messages, be fixed in autoconf 2.70, - # but we only require 2.64 or newer for now. + # but we only require 2.69 or newer for now. # cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void) { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } CFLAGS="$save_CFLAGS" V_CCOPT="$V_CCOPT -Wpedantic" -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } CFLAGS="$save_CFLAGS" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag="$save_ac_c_werror_flag" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wpointer-arith option" >&5 -$as_echo_n "checking whether the compiler supports the -Wpointer-arith option... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wpointer-arith option" >&5 +printf %s "checking whether the compiler supports the -Wpointer-arith option... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wpointer-arith" # @@ -7499,32 +8359,33 @@ $as_echo_n "checking whether the compiler supports the -Wpointer-arith option... # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us # # This may, as per those two messages, be fixed in autoconf 2.70, - # but we only require 2.64 or newer for now. + # but we only require 2.69 or newer for now. # cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void) { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } CFLAGS="$save_CFLAGS" V_CCOPT="$V_CCOPT -Wpointer-arith" -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } CFLAGS="$save_CFLAGS" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag="$save_ac_c_werror_flag" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wpointer-sign option" >&5 -$as_echo_n "checking whether the compiler supports the -Wpointer-sign option... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wpointer-sign option" >&5 +printf %s "checking whether the compiler supports the -Wpointer-sign option... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wpointer-sign" # @@ -7551,32 +8412,33 @@ $as_echo_n "checking whether the compiler supports the -Wpointer-sign option... # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us # # This may, as per those two messages, be fixed in autoconf 2.70, - # but we only require 2.64 or newer for now. + # but we only require 2.69 or newer for now. # cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void) { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } CFLAGS="$save_CFLAGS" V_CCOPT="$V_CCOPT -Wpointer-sign" -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } CFLAGS="$save_CFLAGS" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag="$save_ac_c_werror_flag" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wshadow option" >&5 -$as_echo_n "checking whether the compiler supports the -Wshadow option... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wshadow option" >&5 +printf %s "checking whether the compiler supports the -Wshadow option... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wshadow" # @@ -7603,32 +8465,33 @@ $as_echo_n "checking whether the compiler supports the -Wshadow option... " >&6; # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us # # This may, as per those two messages, be fixed in autoconf 2.70, - # but we only require 2.64 or newer for now. + # but we only require 2.69 or newer for now. # cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void) { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } CFLAGS="$save_CFLAGS" V_CCOPT="$V_CCOPT -Wshadow" -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } CFLAGS="$save_CFLAGS" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag="$save_ac_c_werror_flag" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wsign-compare option" >&5 -$as_echo_n "checking whether the compiler supports the -Wsign-compare option... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wsign-compare option" >&5 +printf %s "checking whether the compiler supports the -Wsign-compare option... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wsign-compare" # @@ -7655,32 +8518,33 @@ $as_echo_n "checking whether the compiler supports the -Wsign-compare option... # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us # # This may, as per those two messages, be fixed in autoconf 2.70, - # but we only require 2.64 or newer for now. + # but we only require 2.69 or newer for now. # cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void) { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } CFLAGS="$save_CFLAGS" V_CCOPT="$V_CCOPT -Wsign-compare" -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } CFLAGS="$save_CFLAGS" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag="$save_ac_c_werror_flag" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wstrict-prototypes option" >&5 -$as_echo_n "checking whether the compiler supports the -Wstrict-prototypes option... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wstrict-prototypes option" >&5 +printf %s "checking whether the compiler supports the -Wstrict-prototypes option... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wstrict-prototypes" # @@ -7707,32 +8571,86 @@ $as_echo_n "checking whether the compiler supports the -Wstrict-prototypes optio # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us # # This may, as per those two messages, be fixed in autoconf 2.70, - # but we only require 2.64 or newer for now. + # but we only require 2.69 or newer for now. # cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void) { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } CFLAGS="$save_CFLAGS" V_CCOPT="$V_CCOPT -Wstrict-prototypes" -else +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + CFLAGS="$save_CFLAGS" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_c_werror_flag="$save_ac_c_werror_flag" + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wundef option" >&5 +printf %s "checking whether the compiler supports the -Wundef option... " >&6; } + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wundef" + # + # XXX - yes, this depends on the way AC_LANG_WERROR works, + # but no mechanism is provided to turn AC_LANG_WERROR on + # *and then turn it back off*, so that we *only* do it when + # testing compiler options - 15 years after somebody asked + # for it: + # + # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror + # + save_ac_c_werror_flag="$ac_c_werror_flag" + ac_c_werror_flag=yes + # + # We use AC_LANG_SOURCE() so that we can control the complete + # content of the program being compiled. We do not, for example, + # want the default "int main()" that AC_LANG_PROGRAM() generates, + # as it will generate a warning with -Wold-style-definition, meaning + # that we would treat it as not working, as the test will fail if + # *any* error output, including a warning due to the flag we're + # testing, is generated; see + # + # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us + # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us + # + # This may, as per those two messages, be fixed in autoconf 2.70, + # but we only require 2.69 or newer for now. + # + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int main(void) { return 0; } +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + CFLAGS="$save_CFLAGS" + V_CCOPT="$V_CCOPT -Wundef" + +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } CFLAGS="$save_CFLAGS" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag="$save_ac_c_werror_flag" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wunreachable-code-return option" >&5 -$as_echo_n "checking whether the compiler supports the -Wunreachable-code-return option... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wunreachable-code-return option" >&5 +printf %s "checking whether the compiler supports the -Wunreachable-code-return option... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wunreachable-code-return" # @@ -7759,32 +8677,139 @@ $as_echo_n "checking whether the compiler supports the -Wunreachable-code-return # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us # # This may, as per those two messages, be fixed in autoconf 2.70, - # but we only require 2.64 or newer for now. + # but we only require 2.69 or newer for now. # cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void) { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } CFLAGS="$save_CFLAGS" V_CCOPT="$V_CCOPT -Wunreachable-code-return" -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } CFLAGS="$save_CFLAGS" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag="$save_ac_c_werror_flag" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wused-but-marked-unused option" >&5 -$as_echo_n "checking whether the compiler supports the -Wused-but-marked-unused option... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wunused-but-set-parameter option" >&5 +printf %s "checking whether the compiler supports the -Wunused-but-set-parameter option... " >&6; } + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wunused-but-set-parameter" + # + # XXX - yes, this depends on the way AC_LANG_WERROR works, + # but no mechanism is provided to turn AC_LANG_WERROR on + # *and then turn it back off*, so that we *only* do it when + # testing compiler options - 15 years after somebody asked + # for it: + # + # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror + # + save_ac_c_werror_flag="$ac_c_werror_flag" + ac_c_werror_flag=yes + # + # We use AC_LANG_SOURCE() so that we can control the complete + # content of the program being compiled. We do not, for example, + # want the default "int main()" that AC_LANG_PROGRAM() generates, + # as it will generate a warning with -Wold-style-definition, meaning + # that we would treat it as not working, as the test will fail if + # *any* error output, including a warning due to the flag we're + # testing, is generated; see + # + # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us + # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us + # + # This may, as per those two messages, be fixed in autoconf 2.70, + # but we only require 2.69 or newer for now. + # + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int main(void) { return 0; } +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + CFLAGS="$save_CFLAGS" + V_CCOPT="$V_CCOPT -Wunused-but-set-parameter" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + CFLAGS="$save_CFLAGS" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_c_werror_flag="$save_ac_c_werror_flag" + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wunused-but-set-variable option" >&5 +printf %s "checking whether the compiler supports the -Wunused-but-set-variable option... " >&6; } + save_CFLAGS="$CFLAGS" + CFLAGS="$CFLAGS -Wunused-but-set-variable" + # + # XXX - yes, this depends on the way AC_LANG_WERROR works, + # but no mechanism is provided to turn AC_LANG_WERROR on + # *and then turn it back off*, so that we *only* do it when + # testing compiler options - 15 years after somebody asked + # for it: + # + # https://autoconf.gnu.narkive.com/gTAVmfKD/how-to-cancel-flags-set-by-ac-lang-werror + # + save_ac_c_werror_flag="$ac_c_werror_flag" + ac_c_werror_flag=yes + # + # We use AC_LANG_SOURCE() so that we can control the complete + # content of the program being compiled. We do not, for example, + # want the default "int main()" that AC_LANG_PROGRAM() generates, + # as it will generate a warning with -Wold-style-definition, meaning + # that we would treat it as not working, as the test will fail if + # *any* error output, including a warning due to the flag we're + # testing, is generated; see + # + # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us + # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us + # + # This may, as per those two messages, be fixed in autoconf 2.70, + # but we only require 2.69 or newer for now. + # + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +int main(void) { return 0; } +_ACEOF +if ac_fn_c_try_compile "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + CFLAGS="$save_CFLAGS" + V_CCOPT="$V_CCOPT -Wunused-but-set-variable" + +else $as_nop + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + CFLAGS="$save_CFLAGS" + +fi +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext + ac_c_werror_flag="$save_ac_c_werror_flag" + + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wused-but-marked-unused option" >&5 +printf %s "checking whether the compiler supports the -Wused-but-marked-unused option... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wused-but-marked-unused" # @@ -7811,32 +8836,33 @@ $as_echo_n "checking whether the compiler supports the -Wused-but-marked-unused # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us # # This may, as per those two messages, be fixed in autoconf 2.70, - # but we only require 2.64 or newer for now. + # but we only require 2.69 or newer for now. # cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void) { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } CFLAGS="$save_CFLAGS" V_CCOPT="$V_CCOPT -Wused-but-marked-unused" -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } CFLAGS="$save_CFLAGS" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag="$save_ac_c_werror_flag" - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wwrite-strings option" >&5 -$as_echo_n "checking whether the compiler supports the -Wwrite-strings option... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the -Wwrite-strings option" >&5 +printf %s "checking whether the compiler supports the -Wwrite-strings option... " >&6; } save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Wwrite-strings" # @@ -7863,33 +8889,34 @@ $as_echo_n "checking whether the compiler supports the -Wwrite-strings option... # https://www.postgresql.org/message-id/2192993.1591682589%40sss.pgh.pa.us # # This may, as per those two messages, be fixed in autoconf 2.70, - # but we only require 2.64 or newer for now. + # but we only require 2.69 or newer for now. # cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main(void) { return 0; } _ACEOF -if ac_fn_c_try_compile "$LINENO"; then : +if ac_fn_c_try_compile "$LINENO" +then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } CFLAGS="$save_CFLAGS" V_CCOPT="$V_CCOPT -Wwrite-strings" -else +else $as_nop - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } CFLAGS="$save_CFLAGS" fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext +rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_c_werror_flag="$save_ac_c_werror_flag" fi - { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports generating dependencies" >&5 -$as_echo_n "checking whether the compiler supports generating dependencies... " >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports generating dependencies" >&5 +printf %s "checking whether the compiler supports generating dependencies... " >&6; } if test "$GCC" = yes ; then # # GCC, or a compiler deemed to be GCC by AC_PROG_CC (even @@ -7958,18 +8985,18 @@ $as_echo_n "checking whether the compiler supports generating dependencies... " /* end confdefs.h. */ int main(void) { return 0; } _ACEOF - if { { $as_echo "$as_me:${as_lineno-$LINENO}: eval \"\$CC \$ac_lbl_dependency_flag conftest.c >/dev/null 2>&1\""; } >&5 + if { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: eval \"\$CC \$ac_lbl_dependency_flag conftest.c >/dev/null 2>&1\""; } >&5 (eval "$CC $ac_lbl_dependency_flag conftest.c >/dev/null 2>&1") 2>&5 ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, with $ac_lbl_dependency_flag" >&5 -$as_echo "yes, with $ac_lbl_dependency_flag" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, with $ac_lbl_dependency_flag" >&5 +printf "%s\n" "yes, with $ac_lbl_dependency_flag" >&6; } DEPENDENCY_CFLAG="$ac_lbl_dependency_flag" MKDEP='${top_srcdir}/mkdep' else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } # # We can't run mkdep, so have "make depend" do # nothing. @@ -7978,8 +9005,8 @@ $as_echo "no" >&6; } fi rm -rf conftest* else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } # # We can't run mkdep, so have "make depend" do # nothing. @@ -8002,212 +9029,504 @@ $as_echo "no" >&6; } if test -f $name ; then ln -s $name os-proto.h -$as_echo "#define HAVE_OS_PROTO_H 1" >>confdefs.h +printf "%s\n" "#define HAVE_OS_PROTO_H 1" >>confdefs.h else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: can't find $name" >&5 -$as_echo "$as_me: WARNING: can't find $name" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: can't find $name" >&5 +printf "%s\n" "$as_me: WARNING: can't find $name" >&2;} fi fi # Check for OpenSSL/libressl libcrypto -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use OpenSSL/libressl libcrypto" >&5 -$as_echo_n "checking whether to use OpenSSL/libressl libcrypto... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use OpenSSL/libressl libcrypto" >&5 +printf %s "checking whether to use OpenSSL/libressl libcrypto... " >&6; } # Specify location for both includes and libraries. want_libcrypto=ifavailable # Check whether --with-crypto was given. -if test "${with_crypto+set}" = set; then : +if test ${with_crypto+y} +then : withval=$with_crypto; if test $withval = no then # User doesn't want to link with libcrypto. want_libcrypto=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } elif test $withval = yes then # User wants to link with libcrypto but hasn't specified # a directory. want_libcrypto=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } else # User wants to link with libcrypto and has specified # a directory, so use the provided value. want_libcrypto=yes libcrypto_root=$withval - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, using the version installed in $withval" >&5 -$as_echo "yes, using the version installed in $withval" >&6; } - - # - # Put the subdirectories of the libcrypto root directory - # at the front of the header and library search path. - # - CFLAGS="-I$withval/include $CFLAGS" - LIBS="-L$withval/lib $LIBS" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, using the version installed in $withval" >&5 +printf "%s\n" "yes, using the version installed in $withval" >&6; } fi -else +else $as_nop # # Use libcrypto if it's present, otherwise don't; no directory # was specified. # want_libcrypto=ifavailable - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, if available" >&5 -$as_echo "yes, if available" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, if available" >&5 +printf "%s\n" "yes, if available" >&6; } fi if test "$want_libcrypto" != "no"; then # - # Don't check for libcrypto unless we have its headers; - # Apple, bless their pointy little heads, apparently ship - # libcrypto as a library, but not the header files, in - # El Capitan, probably because they don't want you writing - # nasty portable code that could run on other UN*Xes, they - # want you writing code that uses their Shiny New Crypto - # Library and that only runs on macOS. - # - ac_fn_c_check_header_mongrel "$LINENO" "openssl/crypto.h" "ac_cv_header_openssl_crypto_h" "$ac_includes_default" -if test "x$ac_cv_header_openssl_crypto_h" = xyes; then : - - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for DES_cbc_encrypt in -lcrypto" >&5 -$as_echo_n "checking for DES_cbc_encrypt in -lcrypto... " >&6; } -if ${ac_cv_lib_crypto_DES_cbc_encrypt+:} false; then : - $as_echo_n "(cached) " >&6 + # Were we told where to look for libcrypto? + # + if test -z "$libcrypto_root"; then + # + # No. + # + # First, try looking for it with pkg-config, if we have it. + # + # Homebrew's pkg-config does not, by default, look for + # pkg-config files for packages it has installed. + # Furthermore, at least for OpenSSL, they appear to be + # dumped in package-specific directories whose paths are + # not only package-specific but package-version-specific. + # + # So the only way to find openssl is to get the value of + # PKG_CONFIG_PATH from "brew --env openssl" and add that + # to PKG_CONFIG_PATH. (No, we can't just assume it's under + # /usr/local; Homebrew have conveniently chosen to put it + # under /opt/homebrew on ARM.) + # + # That's the nice thing about Homebrew - it makes things easier! + # Thanks! + # + save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" + if test -n "$BREW"; then + openssl_pkgconfig_dir=`$BREW --env --plain openssl | sed -n 's/PKG_CONFIG_PATH: //p'` + PKG_CONFIG_PATH="$openssl_pkgconfig_dir:$PKG_CONFIG_PATH" + fi + +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libcrypto with pkg-config" >&5 +printf %s "checking for libcrypto with pkg-config... " >&6; } +if test -n "$PKG_CONFIG"; then + + if { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libcrypto\""; } >&5 + ($PKG_CONFIG --exists --print-errors "libcrypto") 2>&5 + ac_status=$? + printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; }; then + # + # The package was found, so try to get its C flags and + # libraries. + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: found" >&5 +printf "%s\n" "found" >&6; } + if test ! -n "$LIBCRYPTO_CFLAGS"; then + LIBCRYPTO_CFLAGS=`$PKG_CONFIG --cflags "libcrypto" 2>/dev/null` + if test "x$?" != "x0"; then + # + # That failed - report an error. + # Re-run the command, telling pkg-config to print an error + # message, capture the error message, and report it. + # This causes the configuration script to fail, as it means + # the script is almost certainly doing something wrong. + # + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes else - ac_check_lib_save_LIBS=$LIBS -LIBS="-lcrypto $LIBS" -cat confdefs.h - <<_ACEOF >conftest.$ac_ext + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + _pkg_error_string=`$PKG_CONFIG --short-errors --print-errors --cflags "libcrypto" 2>&1` + else + _pkg_error_string=`$PKG_CONFIG --print-errors --cflags "libcrypto" 2>&1` + fi + as_fn_error $? "$PKG_CONFIG --cflags \"libcrypto\" failed: $_pkg_error_string" "$LINENO" 5 + fi + fi + if test ! -n "$LIBCRYPTO_LIBS"; then + LIBCRYPTO_LIBS=`$PKG_CONFIG --libs "libcrypto" 2>/dev/null` + if test "x$?" != "x0"; then + # + # That failed - report an error. + # Re-run the command, telling pkg-config to print an error + # message, capture the error message, and report it. + # This causes the configuration script to fail, as it means + # the script is almost certainly doing something wrong. + # + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + _pkg_error_string=`$PKG_CONFIG --short-errors --print-errors --libs "libcrypto" 2>&1` + else + _pkg_error_string=`$PKG_CONFIG --print-errors --libs "libcrypto" 2>&1` + fi + as_fn_error $? "$PKG_CONFIG --libs \"libcrypto\" failed: $_pkg_error_string" "$LINENO" 5 + fi + fi + if test ! -n "$LIBCRYPTO_LIBS_STATIC"; then + LIBCRYPTO_LIBS_STATIC=`$PKG_CONFIG --libs --static "libcrypto" 2>/dev/null` + if test "x$?" != "x0"; then + # + # That failed - report an error. + # Re-run the command, telling pkg-config to print an error + # message, capture the error message, and report it. + # This causes the configuration script to fail, as it means + # the script is almost certainly doing something wrong. + # + +if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then + _pkg_short_errors_supported=yes +else + _pkg_short_errors_supported=no +fi + if test $_pkg_short_errors_supported = yes; then + _pkg_error_string=`$PKG_CONFIG --short-errors --print-errors --libs --static "libcrypto" 2>&1` + else + _pkg_error_string=`$PKG_CONFIG --print-errors --libs --static "libcrypto" 2>&1` + fi + as_fn_error $? "$PKG_CONFIG --libs --static \"libcrypto\" failed: $_pkg_error_string" "$LINENO" 5 + fi + fi + + # + # We found OpenSSL/libressl libcrypto. + # + HAVE_LIBCRYPTO=yes + + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: not found" >&5 +printf "%s\n" "not found" >&6; } + : + fi +else + # No pkg-config, so obviously not found with pkg-config. + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: pkg-config not found" >&5 +printf "%s\n" "pkg-config not found" >&6; } + : +fi + + PKG_CONFIG_PATH="$save_PKG_CONFIG_PATH" + + # + # If it wasn't found, and we have Homebrew installed, see + # if it's in Homebrew. + # + if test "x$HAVE_LIBCRYPTO" != "xyes" -a -n "$BREW"; then + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for openssl in Homebrew" >&5 +printf %s "checking for openssl in Homebrew... " >&6; } + # + # The brew man page lies when it speaks of + # $BREW --prefix --installed <formula> + # outputting nothing. In Homebrew 3.3.16, + # it produces output regardless of whether + # the formula is installed or not, so we + # send the standard output and error to + # the bit bucket. + # + # libcrypto isn't a formula, openssl is a formula. + # + if $BREW --prefix --installed openssl >/dev/null 2>&1; then + # + # Yes. Get the include directory and library + # directory. (No, we can't just assume it's + # under /usr/local; Homebrew have conveniently + # chosen to put it under /opt/homebrew on ARM.) + # + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + HAVE_LIBCRYPTO=yes + openssl_path=`$BREW --prefix openssl` + LIBCRYPTO_CFLAGS="-I$openssl_path/include" + LIBCRYPTO_LIBS="-L$openssl_path/lib -lcrypto" + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } + fi + fi + + # + # If it wasn't found, and /usr/local/include and /usr/local/lib + # exist, check if it's in /usr/local. (We check whether they + # exist because, if they don't exist, the compiler will warn + # about that and then ignore the argument, so they test + # using just the system header files and libraries.) + # + # We include the standard include file to 1) make sure that + # it's installed (if it's just a shared library for the + # benefit of existing programs, that's not useful) and 2) + # because SSL_library_init() is a library routine in some + # versions and a #defined wrapper around OPENSSL_init_ssl() + # in others. + # + if test "x$HAVE_LIBCRYPTO" != "xyes" -a -d "/usr/local/include" -a -d "/usr/local/lib"; then + + save_CFLAGS="$CFLAGS" + save_LIBS="$LIBS" + save_LDFLAGS="$LDFLAGS" + + CFLAGS="$CFLAGS -I/usr/local/include" + LIBS="$LIBS -L/usr/local/lib -lcrypto" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we have an OpenSSL/libressl libcrypto in /usr/local that we can use" >&5 +printf %s "checking whether we have an OpenSSL/libressl libcrypto in /usr/local that we can use... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char DES_cbc_encrypt (); +#include <openssl/evp.h> + int -main () +main (void) { -return DES_cbc_encrypt (); + +EVP_CIPHER_CTX_block_size((EVP_CIPHER_CTX *)0); +return 0; + ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : - ac_cv_lib_crypto_DES_cbc_encrypt=yes -else - ac_cv_lib_crypto_DES_cbc_encrypt=no +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + HAVE_LIBCRYPTO=yes + LIBCRYPTO_CFLAGS="-I/usr/local/include" + LIBCRYPTO_LIBS="-L/usr/local/lib -lcrypto" + +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext -LIBS=$ac_check_lib_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_crypto_DES_cbc_encrypt" >&5 -$as_echo "$ac_cv_lib_crypto_DES_cbc_encrypt" >&6; } -if test "x$ac_cv_lib_crypto_DES_cbc_encrypt" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBCRYPTO 1 -_ACEOF - LIBS="-lcrypto $LIBS" + CFLAGS="$save_CFLAGS" + LIBS="$save_LIBS" + LDFLAGS="$save_LDFLAGS" -fi + fi - if test "$ac_cv_lib_crypto_DES_cbc_encrypt" = "yes"; then - for ac_header in openssl/evp.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "openssl/evp.h" "ac_cv_header_openssl_evp_h" "$ac_includes_default" -if test "x$ac_cv_header_openssl_evp_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_OPENSSL_EVP_H 1 + # + # If it wasn't found, check if it's a system library. + # + # We include the standard include file to 1) make sure that + # it's installed (if it's just a shared library for the + # benefit of existing programs, that's not useful) and 2) + # make sure this isn't a newer macOS that provides libcrypto + # as a shared library but doesn't provide headers - Apple, + # bless their pointy little heads, apparently ship libcrypto + # as a library, but not the header files, in El Capitan and + # later, probably because they don't want you writing nasty + # portable code that could run on other UN*Xes, they want you + # writing code that uses their Shiny New Crypto Library and + # that thus only runs on macOS. + # + if test "x$HAVE_LIBCRYPTO" != "xyes"; then + + save_CFLAGS="$CFLAGS" + save_LIBS="$LIBS" + save_LDFLAGS="$LDFLAGS" + + LIBS="$LIBS -lcrypto" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we have a system OpenSSL/libressl that we can use" >&5 +printf %s "checking whether we have a system OpenSSL/libressl that we can use... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <openssl/evp.h> + +int +main (void) +{ + +EVP_CIPHER_CTX_block_size((EVP_CIPHER_CTX *)0); +return 0; + + ; + return 0; +} _ACEOF +if ac_fn_c_try_link "$LINENO" +then : + + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + HAVE_LIBCRYPTO=yes + LIBCRYPTO_LIBS="-lcrypto" +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext -done + CFLAGS="$save_CFLAGS" + LIBS="$save_LIBS" + LDFLAGS="$save_LDFLAGS" - # - # OK, then: - # - # 1) do we have EVP_CIPHER_CTX_new? - # If so, we use it to allocate an - # EVP_CIPHER_CTX, as EVP_CIPHER_CTX may be - # opaque; otherwise, we allocate it ourselves. - # - # 2) do we have EVP_DecryptInit_ex()? - # If so, we use it, because we need to be - # able to make two "initialize the cipher" - # calls, one with the cipher and key, and - # one with the IV, and, as of OpenSSL 1.1, - # You Can't Do That with EVP_DecryptInit(), - # because a call to EVP_DecryptInit() will - # unconditionally clear the context, and - # if you don't supply a cipher, it'll - # clear the cipher, rendering the context - # unusable and causing a crash. - # - for ac_func in EVP_CIPHER_CTX_new EVP_DecryptInit_ex -do : - as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` -ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" -if eval test \"x\$"$as_ac_var"\" = x"yes"; then : - cat >>confdefs.h <<_ACEOF -#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 + fi + else + # + # Yes. + # + # Look for it there. + # + + save_CFLAGS="$CFLAGS" + save_LIBS="$LIBS" + save_LDFLAGS="$LDFLAGS" + + CFLAGS="$CFLAGS -I$libcrypto_root/include" + LIBS="$LIBS -L$libcrypto_root/lib -lcrypto" + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether we have a system OpenSSL/libressl that we can use" >&5 +printf %s "checking whether we have a system OpenSSL/libressl that we can use... " >&6; } + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +#include <openssl/evp.h> + +int +main (void) +{ + +EVP_CIPHER_CTX_block_size((EVP_CIPHER_CTX *)0); +return 0; + + ; + return 0; +} _ACEOF +if ac_fn_c_try_link "$LINENO" +then : + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } + HAVE_LIBCRYPTO=yes + LIBCRYPTO_CFLAGS="-I$libcrypto_root/include" + LIBCRYPTO_LIBS="-L$libcrypto_root/lib -lcrypto" + +else $as_nop + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } fi -done +rm -f core conftest.err conftest.$ac_objext conftest.beam \ + conftest$ac_exeext conftest.$ac_ext - fi + CFLAGS="$save_CFLAGS" + LIBS="$save_LIBS" + LDFLAGS="$save_LDFLAGS" + + fi + + # + # OK, did we find it? + # + if test "x$HAVE_LIBCRYPTO" = "xyes"; then + +printf "%s\n" "#define HAVE_LIBCRYPTO 1" >>confdefs.h + + + # + # Put the subdirectories of the libcrypto root directory + # at the end of the header and library search path, to + # make sure they come after any -I or -L flags for + # a local libpcap - those must take precedence of any + # directory that might contain an installed version of + # libpcap. + # + V_INCLS="$V_INCLS $LIBCRYPTO_CFLAGS" + LIBS="$LIBS $LIBCRYPTO_LIBS" + + # + # OK, then: + # + # 1) do we have EVP_CIPHER_CTX_new? + # If so, we use it to allocate an EVP_CIPHER_CTX, as + # EVP_CIPHER_CTX may be opaque; otherwise, we allocate it + # ourselves. + # + # 2) do we have EVP_DecryptInit_ex()? + # If so, we use it, because we need to be able to make + # two "initialize the cipher" calls, one with the cipher + # and key, and one with the IV, and, as of OpenSSL 1.1, + # You Can't Do That with EVP_DecryptInit(), because a + # call to EVP_DecryptInit() will unconditionally clear + # the context, and if you don't supply a cipher, it'll + # clear the cipher, rendering the context unusable and + # causing a crash. + # + ac_fn_c_check_func "$LINENO" "EVP_CIPHER_CTX_new" "ac_cv_func_EVP_CIPHER_CTX_new" +if test "x$ac_cv_func_EVP_CIPHER_CTX_new" = xyes +then : + printf "%s\n" "#define HAVE_EVP_CIPHER_CTX_NEW 1" >>confdefs.h fi +ac_fn_c_check_func "$LINENO" "EVP_DecryptInit_ex" "ac_cv_func_EVP_DecryptInit_ex" +if test "x$ac_cv_func_EVP_DecryptInit_ex" = xyes +then : + printf "%s\n" "#define HAVE_EVP_DECRYPTINIT_EX 1" >>confdefs.h +fi + else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: OpenSSL/libressl libcrypto not found" >&5 +printf "%s\n" "$as_me: OpenSSL/libressl libcrypto not found" >&6;} + fi fi # Check for libcap-ng -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use libcap-ng" >&5 -$as_echo_n "checking whether to use libcap-ng... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use libcap-ng" >&5 +printf %s "checking whether to use libcap-ng... " >&6; } # Specify location for both includes and libraries. want_libcap_ng=ifavailable # Check whether --with-cap_ng was given. -if test "${with_cap_ng+set}" = set; then : +if test ${with_cap_ng+y} +then : withval=$with_cap_ng; if test $withval = no then want_libcap_ng=no - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 +printf "%s\n" "no" >&6; } elif test $withval = yes then want_libcap_ng=yes - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +printf "%s\n" "yes" >&6; } fi -else +else $as_nop # # Use libcap-ng if it's present, otherwise don't. # want_libcap_ng=ifavailable - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes, if available" >&5 -$as_echo "yes, if available" >&6; } + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes, if available" >&5 +printf "%s\n" "yes, if available" >&6; } fi if test "$want_libcap_ng" != "no"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for capng_change_id in -lcap-ng" >&5 -$as_echo_n "checking for capng_change_id in -lcap-ng... " >&6; } -if ${ac_cv_lib_cap_ng_capng_change_id+:} false; then : - $as_echo_n "(cached) " >&6 -else + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for capng_change_id in -lcap-ng" >&5 +printf %s "checking for capng_change_id in -lcap-ng... " >&6; } +if test ${ac_cv_lib_cap_ng_capng_change_id+y} +then : + printf %s "(cached) " >&6 +else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lcap-ng $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext @@ -8216,50 +9535,42 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif char capng_change_id (); int -main () +main (void) { return capng_change_id (); ; return 0; } _ACEOF -if ac_fn_c_try_link "$LINENO"; then : +if ac_fn_c_try_link "$LINENO" +then : ac_cv_lib_cap_ng_capng_change_id=yes -else +else $as_nop ac_cv_lib_cap_ng_capng_change_id=no fi -rm -f core conftest.err conftest.$ac_objext \ +rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cap_ng_capng_change_id" >&5 -$as_echo "$ac_cv_lib_cap_ng_capng_change_id" >&6; } -if test "x$ac_cv_lib_cap_ng_capng_change_id" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_LIBCAP_NG 1 -_ACEOF +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_cap_ng_capng_change_id" >&5 +printf "%s\n" "$ac_cv_lib_cap_ng_capng_change_id" >&6; } +if test "x$ac_cv_lib_cap_ng_capng_change_id" = xyes +then : + printf "%s\n" "#define HAVE_LIBCAP_NG 1" >>confdefs.h LIBS="-lcap-ng $LIBS" fi - for ac_header in cap-ng.h -do : - ac_fn_c_check_header_mongrel "$LINENO" "cap-ng.h" "ac_cv_header_cap_ng_h" "$ac_includes_default" -if test "x$ac_cv_header_cap_ng_h" = xyes; then : - cat >>confdefs.h <<_ACEOF -#define HAVE_CAP_NG_H 1 -_ACEOF + ac_fn_c_check_header_compile "$LINENO" "cap-ng.h" "ac_cv_header_cap_ng_h" "$ac_includes_default" +if test "x$ac_cv_header_cap_ng_h" = xyes +then : + printf "%s\n" "#define HAVE_CAP_NG_H 1" >>confdefs.h fi -done - fi if test "$missing_includes" = "yes"; then @@ -8276,7 +9587,7 @@ fi -# Find a good install program. We prefer a C program (faster), + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install @@ -8290,20 +9601,25 @@ fi # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 +printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else +if test ${ac_cv_path_install+y} +then : + printf %s "(cached) " >&6 +else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + # Account for fact that we put trailing slashes in our PATH walk. +case $as_dir in #(( + ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; @@ -8313,13 +9629,13 @@ case $as_dir/ in #(( # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then + if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then + grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else @@ -8327,12 +9643,12 @@ case $as_dir/ in #(( echo one > conftest.one echo two > conftest.two mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && + if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" + ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi @@ -8348,7 +9664,7 @@ IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi - if test "${ac_cv_path_install+set}" = set; then + if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a @@ -8358,8 +9674,8 @@ fi INSTALL=$ac_install_sh fi fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 +printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. @@ -8373,7 +9689,7 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' ac_config_headers="$ac_config_headers config.h" -ac_config_commands="$ac_config_commands default-1" +ac_config_commands="$ac_config_commands .devel" ac_config_files="$ac_config_files Makefile tcpdump.1" @@ -8404,8 +9720,8 @@ _ACEOF case $ac_val in #( *${as_nl}*) case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; + *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 +printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( @@ -8435,15 +9751,15 @@ $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; /^ac_cv_env_/b end t clear :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ + s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 +printf "%s\n" "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else @@ -8457,8 +9773,8 @@ $as_echo "$as_me: updating cache $cache_file" >&6;} fi fi else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 +printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache @@ -8475,7 +9791,7 @@ U= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` + ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" @@ -8491,8 +9807,8 @@ LTLIBOBJS=$ac_ltlibobjs ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} +{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 +printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL @@ -8515,14 +9831,16 @@ cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : +as_nop=: +if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1 +then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST -else +else $as_nop case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( @@ -8532,46 +9850,46 @@ esac fi + +# Reset variables that may have inherited troublesome values from +# the environment. + +# IFS needs to be set, to space, tab, and newline, in precisely that order. +# (If _AS_PATH_WALK were called with IFS unset, it would have the +# side effect of setting IFS to empty, thus disabling word splitting.) +# Quoting is to prevent editors from complaining about space-tab. as_nl=' ' export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi +IFS=" "" $as_nl" + +PS1='$ ' +PS2='> ' +PS4='+ ' + +# Ensure predictable behavior from utilities with locale-dependent output. +LC_ALL=C +export LC_ALL +LANGUAGE=C +export LANGUAGE + +# We cannot yet rely on "unset" to work, but we need these variables +# to be unset--not just set to an empty or harmless value--now, to +# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh). This construct +# also avoids known problems related to "unset" and subshell syntax +# in other old shells (e.g. bash 2.01 and pdksh 5.2.14). +for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH +do eval test \${$as_var+y} \ + && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : +done + +# Ensure that fds 0, 1, and 2 are open. +if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi +if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi +if (exec 3>&2) ; then :; else exec 2>/dev/null; fi # The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then +if ${PATH_SEPARATOR+false} :; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || @@ -8580,13 +9898,6 @@ if test "${PATH_SEPARATOR+set}" != set; then fi -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( @@ -8595,8 +9906,12 @@ case $0 in #(( for as_dir in $PATH do IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break + case $as_dir in #((( + '') as_dir=./ ;; + */) ;; + *) as_dir=$as_dir/ ;; + esac + test -r "$as_dir$0" && as_myself=$as_dir$0 && break done IFS=$as_save_IFS @@ -8608,30 +9923,10 @@ if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 + printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] @@ -8644,13 +9939,14 @@ as_fn_error () as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 + printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi - $as_echo "$as_me: error: $2" >&2 + printf "%s\n" "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error + # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. @@ -8677,18 +9973,20 @@ as_fn_unset () { eval $1=; unset $1;} } as_unset=as_fn_unset + # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : +if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null +then : eval 'as_fn_append () { eval $1+=\$2 }' -else +else $as_nop as_fn_append () { eval $1=\$$1\$2 @@ -8700,12 +9998,13 @@ fi # as_fn_append # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : +if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null +then : eval 'as_fn_arith () { as_val=$(( $* )) }' -else +else $as_nop as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` @@ -8736,7 +10035,7 @@ as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | +printf "%s\n" X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q @@ -8758,6 +10057,10 @@ as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits + +# Determine whether it's possible to make 'echo' print without a newline. +# These variables are no longer used directly by Autoconf, but are AC_SUBSTed +# for compatibility with existing Makefiles. ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) @@ -8771,6 +10074,12 @@ case `echo -n x` in #((((( ECHO_N='-n';; esac +# For backward compatibility with old third-party macros, we provide +# the shell variables $as_echo and $as_echo_n. New code should use +# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively. +as_echo='printf %s\n' +as_echo_n='printf %s' + rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file @@ -8812,7 +10121,7 @@ as_fn_mkdir_p () as_dirs= while :; do case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( + *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" @@ -8821,7 +10130,7 @@ $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | +printf "%s\n" X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -8883,8 +10192,8 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by tcpdump $as_me 4.99.4, which was -generated by GNU Autoconf 2.69. Invocation command line was +This file was extended by tcpdump $as_me 4.99.5, which was +generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS @@ -8946,14 +10255,16 @@ $config_commands Report bugs to the package provider." _ACEOF +ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"` +ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"` cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" +ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -tcpdump config.status 4.99.4 -configured by $0, generated by GNU Autoconf 2.69, +tcpdump config.status 4.99.5 +configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" -Copyright (C) 2012 Free Software Foundation, Inc. +Copyright (C) 2021 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." @@ -8991,15 +10302,15 @@ do -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; + printf "%s\n" "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; + printf "%s\n" "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" @@ -9007,7 +10318,7 @@ do --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; + *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; @@ -9016,7 +10327,7 @@ do as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; + printf "%s\n" "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; @@ -9044,7 +10355,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 + \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" @@ -9058,7 +10369,7 @@ exec 5>>config.log sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX - $as_echo "$ac_log" + printf "%s\n" "$ac_log" } >&5 _ACEOF @@ -9077,7 +10388,7 @@ for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; + ".devel") CONFIG_COMMANDS="$CONFIG_COMMANDS .devel" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "tcpdump.1") CONFIG_FILES="$CONFIG_FILES tcpdump.1" ;; @@ -9091,9 +10402,9 @@ done # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands + test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files + test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers + test ${CONFIG_COMMANDS+y} || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree @@ -9429,7 +10740,7 @@ do esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac + case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done @@ -9437,17 +10748,17 @@ do # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' + printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 +printf "%s\n" "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | + ac_sed_conf_input=`printf "%s\n" "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac @@ -9464,7 +10775,7 @@ $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | +printf "%s\n" X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q @@ -9488,9 +10799,9 @@ $as_echo X"$ac_file" | case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` + ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` + ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; @@ -9547,8 +10858,8 @@ ac_sed_dataroot=' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 +printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' @@ -9591,9 +10902,9 @@ test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' +printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" @@ -9609,33 +10920,33 @@ which seems to be undefined. Please make sure it is defined" >&2;} # if test x"$ac_file" != x-; then { - $as_echo "/* $configure_input */" \ + printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then - { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 -$as_echo "$as_me: $ac_file is unchanged" >&6;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 +printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else - $as_echo "/* $configure_input */" \ + printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi ;; - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} + :C) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 +printf "%s\n" "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in - "default-1":C) if test -f .devel; then + ".devel":C) if test -f .devel; then echo timestamp > stamp-h cat $srcdir/Makefile-devel-adds >> Makefile make depend || exit 1 @@ -9674,8 +10985,9 @@ if test "$no_create" != yes; then $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} + { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 +printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi exit 0 + diff --git a/contrib/tcpdump/configure.ac b/contrib/tcpdump/configure.ac index 18d59b6d709f..1f2e4d7854a0 100644 --- a/contrib/tcpdump/configure.ac +++ b/contrib/tcpdump/configure.ac @@ -13,8 +13,8 @@ dnl # config.sub. # -AC_PREREQ(2.69) -AC_INIT(tcpdump, m4_esyscmd_s([cat VERSION])) +AC_PREREQ([2.69]) +AC_INIT([tcpdump],[m4_esyscmd_s(cat VERSION)]) AC_CONFIG_SRCDIR(tcpdump.c) AC_CANONICAL_HOST @@ -31,7 +31,16 @@ fi AC_LBL_C_INIT(V_CCOPT, V_INCLS) AC_LBL_C_INLINE -AC_CHECK_HEADERS(fcntl.h rpc/rpc.h rpc/rpcent.h net/if.h) +AC_CHECK_HEADERS(rpc/rpc.h rpc/rpcent.h net/if.h) +# +# Get the size of a void *, to know whether this is a 32-bit or 64-bit build. +# +AC_CHECK_SIZEOF([void *]) + +# +# Get the size of a time_t, to know whether it's 32-bit or 64-bit. +# +AC_CHECK_SIZEOF([time_t],,[#include <time.h>]) case "$host_os" in @@ -63,6 +72,15 @@ darwin*) ;; esac +# +# Do we have pkg-config? +# +PKG_PROG_PKG_CONFIG + +# +# Do we have the brew command from Homebrew? +# +AC_PATH_PROG([BREW], [brew]) AC_ARG_WITH([smi], [AS_HELP_STRING([--with-smi], @@ -84,8 +102,7 @@ if test "x$with_smi" != "xno" ; then AC_MSG_CHECKING([whether to enable libsmi]) savedlibs="$LIBS" LIBS="-lsmi $LIBS" - AC_TRY_RUN( - [ + AC_RUN_IFELSE([AC_LANG_SOURCE([[ /* libsmi available check */ #include <stdio.h> #include <stdlib.h> @@ -106,6 +123,7 @@ int main() exit(4); exit(0); } + ]]) ], [ AC_MSG_RESULT(yes) @@ -137,6 +155,33 @@ int main() ]) fi +AC_MSG_CHECKING([whether to enable the instrument functions code]) +AC_ARG_ENABLE([instrument-functions], + [AS_HELP_STRING([--enable-instrument-functions], + [enable instrument functions code [default=no]])], + [], + [enableval=no]) +case "$enableval" in +yes) AC_MSG_RESULT(yes) + AC_CHECK_LIB([bfd], [bfd_init], + [true], + [AC_MSG_ERROR( + [--enable-instrument-functions was given, but test for library libbfd failed. Please install the 'binutils-dev' package.])], + []) + AC_DEFINE(ENABLE_INSTRUMENT_FUNCTIONS, 1, + [define if you want to build the instrument functions code]) + LOCALSRC="$LOCALSRC instrument-functions.c" + # Add '-finstrument-functions' instrumentation option to generate + # instrumentation calls for entry and exit to functions. + # Try to avoid Address Space Layout Randomization (ALSR). + CFLAGS="$CFLAGS -O0 -ggdb -finstrument-functions -fno-stack-protector -fno-pic" + LDFLAGS="$LDFLAGS -O0 -ggdb -fno-stack-protector -no-pie" + LIBS="$LIBS -lbfd" + ;; +*) AC_MSG_RESULT(no) + ;; +esac + AC_MSG_CHECKING([whether to enable the possibly-buggy SMB printer]) AC_ARG_ENABLE([smb], [AS_HELP_STRING([--enable-smb], @@ -153,25 +198,42 @@ yes) AC_MSG_RESULT(yes) ;; esac -AC_ARG_WITH(user, [ --with-user=USERNAME drop privileges by default to USERNAME]) AC_MSG_CHECKING([whether to drop root privileges by default]) -if test ! -z "$with_user" ; then - AC_DEFINE_UNQUOTED(WITH_USER, "$withval", - [define if should drop privileges by default]) - AC_MSG_RESULT(to \"$withval\") -else - AC_MSG_RESULT(no) -fi +AC_ARG_WITH( + [user], + [AS_HELP_STRING([--with-user=USERNAME], + [drop privileges by default to USERNAME] + )], + [], + [withval=no]) +AS_CASE(["$withval"], + [no], [AC_MSG_RESULT(no)], + [''|yes], [AC_MSG_ERROR([--with-user requires a username])], + [ + AC_DEFINE_UNQUOTED(WITH_USER, "$withval", + [define if should drop privileges by default]) + AC_MSG_RESULT([yes, to user "$withval"]) + ] +) -AC_ARG_WITH(chroot, [ --with-chroot=DIRECTORY when dropping privileges, chroot to DIRECTORY]) AC_MSG_CHECKING([whether to chroot]) -if test ! -z "$with_chroot" && test "$with_chroot" != "no" ; then - AC_DEFINE_UNQUOTED(WITH_CHROOT, "$withval", - [define if should chroot when dropping privileges]) - AC_MSG_RESULT(to \"$withval\") -else - AC_MSG_RESULT(no) -fi +AC_ARG_WITH( + [chroot], + [AS_HELP_STRING([--with-chroot=DIRECTORY], + [when dropping privileges, chroot to DIRECTORY] + )], + [], + [withval=no] +) +AS_CASE(["$withval"], + [no], [AC_MSG_RESULT(no)], + [''|yes], [AC_MSG_ERROR([--with-chroot requires a directory])], + [ + AC_DEFINE_UNQUOTED(WITH_CHROOT, "$withval", + [define if should chroot when dropping privileges]) + AC_MSG_RESULT([yes, to directory "$withval"]) + ] +) AC_ARG_WITH(sandbox-capsicum, AS_HELP_STRING([--with-sandbox-capsicum], @@ -384,29 +446,64 @@ AC_CHECK_FUNCS(fork vfork) AC_CHECK_FUNCS(setlinebuf) # -# Make sure we have vsnprintf() and snprintf(); we require them. +# Make sure we have snprintf(); we require it. # -AC_CHECK_FUNC(vsnprintf,, - AC_MSG_ERROR([vsnprintf() is required but wasn't found])) AC_CHECK_FUNC(snprintf,, AC_MSG_ERROR([snprintf() is required but wasn't found])) # -# Define HAVE_NO_PRINTF_Z to make it possible to disable test cases that -# depend on %zu. +# It became apparent at some point that using a suitable C99 compiler does not +# automatically mean snprintf(3) implementation in the libc supports all the +# modifiers and specifiers used in the project, so let's test that before the +# build, not after. +# +# Testing the sizeof_t length modifier takes making an snprintf() call and +# comparing the actual result with the expected result. If this fails, it will +# most likely happen at run time, not compile time. # -AC_MSG_CHECKING([whether printf(3) supports the z length modifier]) +# Testing the 64-bit conversion specifiers in addition to that requires the +# <inttypes.h> header to be present and the macros to be defined, so if this +# fails, it will more likely happen at compile time. +# +AC_MSG_CHECKING([whether snprintf is suitable]) AC_RUN_IFELSE( [ AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> +#include <inttypes.h> +#include <sys/types.h> int main() { char buf[100]; + uint64_t t = (uint64_t)1 << 32; + snprintf(buf, sizeof(buf), "%zu", sizeof(buf)); - return strncmp(buf, "100", sizeof(buf)) ? 1 : 0; + if (strncmp(buf, "100", sizeof(buf))) + return 1; + + snprintf(buf, sizeof(buf), "%zd", -sizeof(buf)); + if (strncmp(buf, "-100", sizeof(buf))) + return 2; + + snprintf(buf, sizeof(buf), "%" PRId64, -t); + if (strncmp(buf, "-4294967296", sizeof(buf))) + return 3; + + snprintf(buf, sizeof(buf), "0o%" PRIo64, t); + if (strncmp(buf, "0o40000000000", sizeof(buf))) + return 4; + + snprintf(buf, sizeof(buf), "0x%" PRIx64, t); + if (strncmp(buf, "0x100000000", sizeof(buf))) + return 5; + + snprintf(buf, sizeof(buf), "%" PRIu64, t); + if (strncmp(buf, "4294967296", sizeof(buf))) + return 6; + + return 0; } ]]) ], @@ -415,8 +512,9 @@ int main() ], [ AC_MSG_RESULT(no) - AC_DEFINE(HAVE_NO_PRINTF_Z, 1, - [Define to 1 if printf(3) does not support the z length modifier.]) + AC_MSG_ERROR( +[The snprintf(3) implementation in this libc is not suitable, +tcpdump would not work correctly even if it managed to compile.]) ], [ AC_MSG_RESULT(not while cross-compiling) @@ -448,7 +546,7 @@ AC_LBL_LIBPCAP(V_PCAPDEP, V_INCLS) # AC_CHECK_FUNCS(ether_ntohost, [ AC_CACHE_CHECK(for buggy ether_ntohost, ac_cv_buggy_ether_ntohost, [ - AC_TRY_RUN([ + AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <netdb.h> #include <netinet/ether.h> #include <stdlib.h> @@ -465,6 +563,7 @@ AC_CHECK_FUNCS(ether_ntohost, [ ether_ntohost(name, (struct ether_addr *)ea); exit(0); } + ]]) ], [ac_cv_buggy_ether_ntohost=no], [ac_cv_buggy_ether_ntohost=yes], [ac_cv_buggy_ether_ntohost="not while cross-compiling"])]) @@ -506,7 +605,7 @@ if test "$ac_cv_func_ether_ntohost" = yes -a \ unset ac_cv_have_decl_ether_ntohost AC_CHECK_DECL(ether_ntohost, [ - AC_DEFINE(NETINET_ETHER_H_DECLARES_ETHER_NTOHOST,, + AC_DEFINE(NETINET_ETHER_H_DECLARES_ETHER_NTOHOST,1, [Define to 1 if netinet/ether.h declares `ether_ntohost']) ],, [ @@ -701,27 +800,17 @@ fi # if we have them. # AC_CHECK_FUNCS(pcap_findalldevs) -if test $ac_cv_func_pcap_findalldevs = "yes" ; then -dnl Check for libpcap having pcap_findalldevs() but the pcap.h header -dnl not having pcap_if_t; some versions of Mac OS X shipped with pcap.h -dnl from 0.6 and libpcap 0.8, so that libpcap had pcap_findalldevs but -dnl pcap.h didn't have pcap_if_t. - savedcppflags="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $V_INCLS" - AC_CHECK_TYPES(pcap_if_t, , , [#include <pcap.h>]) - CPPFLAGS="$savedcppflags" -fi AC_CHECK_FUNCS(pcap_dump_flush pcap_lib_version) if test $ac_cv_func_pcap_lib_version = "no" ; then AC_MSG_CHECKING(whether pcap_version is defined by libpcap) - AC_TRY_LINK([], - [ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ extern char pcap_version[]; return (int)pcap_version; + ]]) ], - ac_lbl_cv_pcap_version_defined=yes, - ac_lbl_cv_pcap_version_defined=no) + [ac_lbl_cv_pcap_version_defined=yes], + [ac_lbl_cv_pcap_version_defined=no]) if test "$ac_lbl_cv_pcap_version_defined" = yes ; then AC_MSG_RESULT(yes) AC_DEFINE(HAVE_PCAP_VERSION, 1, [define if libpcap has pcap_version]) @@ -730,7 +819,14 @@ if test $ac_cv_func_pcap_lib_version = "no" ; then fi fi AC_CHECK_FUNCS(pcap_setdirection pcap_set_immediate_mode pcap_dump_ftell64) -AC_CHECK_FUNCS(pcap_open pcap_findalldevs_ex) +# +# See the comment in AC_LBL_LIBPCAP in aclocal.m4 for the reason +# why we don't check for remote-capture APIs if we're building +# with the system libpcap on macOS. +# +if test "$_dont_check_for_remote_apis" != "yes"; then + AC_CHECK_FUNCS(pcap_open pcap_findalldevs_ex) +fi AC_REPLACE_FUNCS(pcap_dump_ftell) # @@ -743,14 +839,14 @@ if test "$ac_cv_func_pcap_set_parser_debug" = "no" ; then # filter expression parser debug flag; can we directly set the # flag? AC_MSG_CHECKING(whether pcap_debug is defined by libpcap) - AC_TRY_LINK([], - [ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ extern int pcap_debug; return pcap_debug; + ]]) ], - ac_lbl_cv_pcap_debug_defined=yes, - ac_lbl_cv_pcap_debug_defined=no) + [ac_lbl_cv_pcap_debug_defined=yes], + [ac_lbl_cv_pcap_debug_defined=no]) if test "$ac_lbl_cv_pcap_debug_defined" = yes ; then AC_MSG_RESULT(yes) AC_DEFINE(HAVE_PCAP_DEBUG, 1, [define if libpcap has pcap_debug]) @@ -760,14 +856,14 @@ if test "$ac_cv_func_pcap_set_parser_debug" = "no" ; then # OK, what about "yydebug"? # AC_MSG_CHECKING(whether yydebug is defined by libpcap) - AC_TRY_LINK([], - [ + AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[ extern int yydebug; return yydebug; + ]]) ], - ac_lbl_cv_yydebug_defined=yes, - ac_lbl_cv_yydebug_defined=no) + [ac_lbl_cv_yydebug_defined=yes], + [ac_lbl_cv_yydebug_defined=no]) if test "$ac_lbl_cv_yydebug_defined" = yes ; then AC_MSG_RESULT(yes) AC_DEFINE(HAVE_YYDEBUG, 1, [define if libpcap has yydebug]) @@ -779,10 +875,6 @@ fi AC_CHECK_FUNCS(pcap_set_optimizer_debug) AC_REPLACE_FUNCS(bpf_dump) dnl moved to libpcap in 0.6 -V_GROUP=0 -if test -f /etc/group -a ! -z "`grep '^wheel:' /etc/group`" ; then - V_GROUP=wheel -fi # # Assume V7/BSD convention for man pages (file formats in section 5, # miscellaneous info in section 7). @@ -825,8 +917,6 @@ osf*) ;; solaris*) - V_GROUP=sys - # # Use System V conventions for man pages. # @@ -835,23 +925,26 @@ solaris*) ;; esac -if test -f /dev/bpf0 ; then - V_GROUP=bpf -fi - # # Make sure we have a definition for C99's uintptr_t (regardless of # whether the environment is a C99 environment or not). # AC_TYPE_UINTPTR_T +savedcppflags="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $V_INCLS" + # # Check whether we have pcap/pcap-inttypes.h. # If we do, we use that to get the C99 types defined. # -savedcppflags="$CPPFLAGS" -CPPFLAGS="$CPPFLAGS $V_INCLS" AC_CHECK_HEADERS(pcap/pcap-inttypes.h) + +# +# At compile time HAVE_PCAP_FINDALLDEVS depends on HAVE_PCAP_IF_T. +# +AC_CHECK_TYPES(pcap_if_t, , , [#include <pcap.h>]) + CPPFLAGS="$savedcppflags" # @@ -913,13 +1006,6 @@ AC_ARG_WITH(crypto, want_libcrypto=yes libcrypto_root=$withval AC_MSG_RESULT([yes, using the version installed in $withval]) - - # - # Put the subdirectories of the libcrypto root directory - # at the front of the header and library search path. - # - CFLAGS="-I$withval/include $CFLAGS" - LIBS="-L$withval/lib $LIBS" fi ],[ # @@ -931,42 +1017,216 @@ AC_ARG_WITH(crypto, ]) if test "$want_libcrypto" != "no"; then # - # Don't check for libcrypto unless we have its headers; - # Apple, bless their pointy little heads, apparently ship - # libcrypto as a library, but not the header files, in - # El Capitan, probably because they don't want you writing - # nasty portable code that could run on other UN*Xes, they - # want you writing code that uses their Shiny New Crypto - # Library and that only runs on macOS. + # Were we told where to look for libcrypto? # - AC_CHECK_HEADER(openssl/crypto.h, - [ - AC_CHECK_LIB(crypto, DES_cbc_encrypt) - if test "$ac_cv_lib_crypto_DES_cbc_encrypt" = "yes"; then - AC_CHECK_HEADERS(openssl/evp.h) + if test -z "$libcrypto_root"; then + # + # No. + # + # First, try looking for it with pkg-config, if we have it. + # + # Homebrew's pkg-config does not, by default, look for + # pkg-config files for packages it has installed. + # Furthermore, at least for OpenSSL, they appear to be + # dumped in package-specific directories whose paths are + # not only package-specific but package-version-specific. + # + # So the only way to find openssl is to get the value of + # PKG_CONFIG_PATH from "brew --env openssl" and add that + # to PKG_CONFIG_PATH. (No, we can't just assume it's under + # /usr/local; Homebrew have conveniently chosen to put it + # under /opt/homebrew on ARM.) + # + # That's the nice thing about Homebrew - it makes things easier! + # Thanks! + # + save_PKG_CONFIG_PATH="$PKG_CONFIG_PATH" + if test -n "$BREW"; then + openssl_pkgconfig_dir=`$BREW --env --plain openssl | sed -n 's/PKG_CONFIG_PATH: //p'` + PKG_CONFIG_PATH="$openssl_pkgconfig_dir:$PKG_CONFIG_PATH" + fi + PKG_CHECK_MODULE(LIBCRYPTO, libcrypto, + [ # - # OK, then: + # We found OpenSSL/libressl libcrypto. + # + HAVE_LIBCRYPTO=yes + ]) + PKG_CONFIG_PATH="$save_PKG_CONFIG_PATH" + + # + # If it wasn't found, and we have Homebrew installed, see + # if it's in Homebrew. + # + if test "x$HAVE_LIBCRYPTO" != "xyes" -a -n "$BREW"; then + AC_MSG_CHECKING(for openssl in Homebrew) # - # 1) do we have EVP_CIPHER_CTX_new? - # If so, we use it to allocate an - # EVP_CIPHER_CTX, as EVP_CIPHER_CTX may be - # opaque; otherwise, we allocate it ourselves. + # The brew man page lies when it speaks of + # $BREW --prefix --installed <formula> + # outputting nothing. In Homebrew 3.3.16, + # it produces output regardless of whether + # the formula is installed or not, so we + # send the standard output and error to + # the bit bucket. # - # 2) do we have EVP_DecryptInit_ex()? - # If so, we use it, because we need to be - # able to make two "initialize the cipher" - # calls, one with the cipher and key, and - # one with the IV, and, as of OpenSSL 1.1, - # You Can't Do That with EVP_DecryptInit(), - # because a call to EVP_DecryptInit() will - # unconditionally clear the context, and - # if you don't supply a cipher, it'll - # clear the cipher, rendering the context - # unusable and causing a crash. + # libcrypto isn't a formula, openssl is a formula. # - AC_CHECK_FUNCS(EVP_CIPHER_CTX_new EVP_DecryptInit_ex) + if $BREW --prefix --installed openssl >/dev/null 2>&1; then + # + # Yes. Get the include directory and library + # directory. (No, we can't just assume it's + # under /usr/local; Homebrew have conveniently + # chosen to put it under /opt/homebrew on ARM.) + # + AC_MSG_RESULT(yes) + HAVE_LIBCRYPTO=yes + openssl_path=`$BREW --prefix openssl` + LIBCRYPTO_CFLAGS="-I$openssl_path/include" + LIBCRYPTO_LIBS="-L$openssl_path/lib -lcrypto" + else + AC_MSG_RESULT(no) + fi fi - ]) + + # + # If it wasn't found, and /usr/local/include and /usr/local/lib + # exist, check if it's in /usr/local. (We check whether they + # exist because, if they don't exist, the compiler will warn + # about that and then ignore the argument, so they test + # using just the system header files and libraries.) + # + # We include the standard include file to 1) make sure that + # it's installed (if it's just a shared library for the + # benefit of existing programs, that's not useful) and 2) + # because SSL_library_init() is a library routine in some + # versions and a #defined wrapper around OPENSSL_init_ssl() + # in others. + # + if test "x$HAVE_LIBCRYPTO" != "xyes" -a -d "/usr/local/include" -a -d "/usr/local/lib"; then + AC_LBL_SAVE_CHECK_STATE + CFLAGS="$CFLAGS -I/usr/local/include" + LIBS="$LIBS -L/usr/local/lib -lcrypto" + AC_MSG_CHECKING(whether we have an OpenSSL/libressl libcrypto in /usr/local that we can use) + AC_LINK_IFELSE([AC_LANG_PROGRAM( + [[ +#include <openssl/evp.h> + ]], + [[ +EVP_CIPHER_CTX_block_size((EVP_CIPHER_CTX *)0); +return 0; + ]])], + [ + AC_MSG_RESULT(yes) + HAVE_LIBCRYPTO=yes + LIBCRYPTO_CFLAGS="-I/usr/local/include" + LIBCRYPTO_LIBS="-L/usr/local/lib -lcrypto" + ], + AC_MSG_RESULT(no)) + AC_LBL_RESTORE_CHECK_STATE + fi + + # + # If it wasn't found, check if it's a system library. + # + # We include the standard include file to 1) make sure that + # it's installed (if it's just a shared library for the + # benefit of existing programs, that's not useful) and 2) + # make sure this isn't a newer macOS that provides libcrypto + # as a shared library but doesn't provide headers - Apple, + # bless their pointy little heads, apparently ship libcrypto + # as a library, but not the header files, in El Capitan and + # later, probably because they don't want you writing nasty + # portable code that could run on other UN*Xes, they want you + # writing code that uses their Shiny New Crypto Library and + # that thus only runs on macOS. + # + if test "x$HAVE_LIBCRYPTO" != "xyes"; then + AC_LBL_SAVE_CHECK_STATE + LIBS="$LIBS -lcrypto" + AC_MSG_CHECKING(whether we have a system OpenSSL/libressl that we can use) + AC_LINK_IFELSE([AC_LANG_PROGRAM( + [[ +#include <openssl/evp.h> + ]], + [[ +EVP_CIPHER_CTX_block_size((EVP_CIPHER_CTX *)0); +return 0; + ]])], + [ + AC_MSG_RESULT(yes) + HAVE_LIBCRYPTO=yes + LIBCRYPTO_LIBS="-lcrypto" + ], + AC_MSG_RESULT(no)) + AC_LBL_RESTORE_CHECK_STATE + fi + else + # + # Yes. + # + # Look for it there. + # + AC_LBL_SAVE_CHECK_STATE + CFLAGS="$CFLAGS -I$libcrypto_root/include" + LIBS="$LIBS -L$libcrypto_root/lib -lcrypto" + AC_MSG_CHECKING(whether we have a system OpenSSL/libressl that we can use) + AC_LINK_IFELSE([AC_LANG_PROGRAM( + [[ +#include <openssl/evp.h> + ]], + [[ +EVP_CIPHER_CTX_block_size((EVP_CIPHER_CTX *)0); +return 0; + ]])], + [ + AC_MSG_RESULT(yes) + HAVE_LIBCRYPTO=yes + LIBCRYPTO_CFLAGS="-I$libcrypto_root/include" + LIBCRYPTO_LIBS="-L$libcrypto_root/lib -lcrypto" + ], + AC_MSG_RESULT(no)) + AC_LBL_RESTORE_CHECK_STATE + fi + + # + # OK, did we find it? + # + if test "x$HAVE_LIBCRYPTO" = "xyes"; then + AC_DEFINE([HAVE_LIBCRYPTO], [1], [Define to 1 if you have a usable `crypto' library (-lcrypto).]) + + # + # Put the subdirectories of the libcrypto root directory + # at the end of the header and library search path, to + # make sure they come after any -I or -L flags for + # a local libpcap - those must take precedence of any + # directory that might contain an installed version of + # libpcap. + # + V_INCLS="$V_INCLS $LIBCRYPTO_CFLAGS" + LIBS="$LIBS $LIBCRYPTO_LIBS" + + # + # OK, then: + # + # 1) do we have EVP_CIPHER_CTX_new? + # If so, we use it to allocate an EVP_CIPHER_CTX, as + # EVP_CIPHER_CTX may be opaque; otherwise, we allocate it + # ourselves. + # + # 2) do we have EVP_DecryptInit_ex()? + # If so, we use it, because we need to be able to make + # two "initialize the cipher" calls, one with the cipher + # and key, and one with the IV, and, as of OpenSSL 1.1, + # You Can't Do That with EVP_DecryptInit(), because a + # call to EVP_DecryptInit() will unconditionally clear + # the context, and if you don't supply a cipher, it'll + # clear the cipher, rendering the context unusable and + # causing a crash. + # + AC_CHECK_FUNCS(EVP_CIPHER_CTX_new EVP_DecryptInit_ex) + else + AC_MSG_NOTICE(OpenSSL/libressl libcrypto not found) + fi fi # Check for libcap-ng @@ -1007,7 +1267,6 @@ fi AC_SUBST(V_CCOPT) AC_SUBST(V_DEFS) -AC_SUBST(V_GROUP) AC_SUBST(V_INCLS) AC_SUBST(V_PCAPDEP) AC_SUBST(LOCALSRC) @@ -1018,10 +1277,11 @@ AC_PROG_INSTALL AC_CONFIG_HEADER(config.h) -AC_OUTPUT_COMMANDS([if test -f .devel; then +AC_CONFIG_COMMANDS([.devel],[[if test -f .devel; then echo timestamp > stamp-h cat $srcdir/Makefile-devel-adds >> Makefile make depend || exit 1 -fi]) -AC_OUTPUT(Makefile tcpdump.1) +fi]],[[]]) +AC_CONFIG_FILES([Makefile tcpdump.1]) +AC_OUTPUT exit 0 diff --git a/contrib/tcpdump/cpack.c b/contrib/tcpdump/cpack.c index 9be7b47d8512..84d24009faa7 100644 --- a/contrib/tcpdump/cpack.c +++ b/contrib/tcpdump/cpack.c @@ -27,9 +27,7 @@ * OF SUCH DAMAGE. */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include <stdlib.h> #include <string.h> diff --git a/contrib/tcpdump/diag-control.h b/contrib/tcpdump/diag-control.h index 3eb6bcaaf020..5e5a2dfe461a 100644 --- a/contrib/tcpdump/diag-control.h +++ b/contrib/tcpdump/diag-control.h @@ -60,11 +60,6 @@ DIAG_DO_PRAGMA(clang diagnostic ignored "-Wassign-enum") #define DIAG_ON_ASSIGN_ENUM \ DIAG_DO_PRAGMA(clang diagnostic pop) - - #define DIAG_OFF_CAST_QUAL - #define DIAG_ON_CAST_QUAL - #define DIAG_OFF_DEPRECATION - #define DIAG_ON_DEPRECATION /* * The current clang compilers also define __GNUC__ and __GNUC_MINOR__ * thus we need to test the clang case before the GCC one @@ -124,10 +119,21 @@ #define DIAG_ON_C11_EXTENSIONS \ DIAG_DO_PRAGMA(clang diagnostic pop) #endif + + /* + * When Clang correctly detects an old-style function prototype after + * preprocessing, the warning can be irrelevant to this source tree because + * the prototype comes from a system header macro. + */ + #if ND_IS_AT_LEAST_CLANG_VERSION(5,0) + #define DIAG_OFF_STRICT_PROTOTYPES \ + DIAG_DO_PRAGMA(clang diagnostic push) \ + DIAG_DO_PRAGMA(clang diagnostic ignored "-Wstrict-prototypes") + #define DIAG_ON_STRICT_PROTOTYPES \ + DIAG_DO_PRAGMA(clang diagnostic pop) + #endif #elif ND_IS_AT_LEAST_GNUC_VERSION(4,2) /* GCC apparently doesn't complain about ORing enums together. */ - #define DIAG_OFF_ASSIGN_ENUM - #define DIAG_ON_ASSIGN_ENUM /* * It does, however, complain about casting away constness in @@ -139,6 +145,22 @@ #define DIAG_ON_CAST_QUAL \ DIAG_DO_PRAGMA(GCC diagnostic pop) + #if ND_IS_AT_LEAST_GNUC_VERSION(4,5) + /* + * GCC warns about unused return values if a function is marked as + * "warn about ignoring this function's return value". + * + * Clang appears to let you ignore a result without a warning by + * casting the function result to void, so we don't appear to + * need this for Clang. + */ + #define DIAG_OFF_WARN_UNUSED_RESULT \ + DIAG_DO_PRAGMA(GCC diagnostic push) \ + DIAG_DO_PRAGMA(GCC diagnostic ignored "-Wunused-result") + #define DIAG_ON_WARN_UNUSED_RESULT \ + DIAG_DO_PRAGMA(GCC diagnostic pop) + #endif + /* * Suppress deprecation warnings. */ @@ -150,21 +172,10 @@ /* * GCC supports -Wc99-c11-compat since version 5.1.0, but the warning does * not trigger for now, so let's just leave it be. + * + * GCC does not currently generate any -Wstrict-prototypes warnings that + * would need silencing as is done for Clang above. */ -#else - #define DIAG_OFF_ASSIGN_ENUM - #define DIAG_ON_ASSIGN_ENUM - #define DIAG_OFF_CAST_QUAL - #define DIAG_ON_CAST_QUAL - #define DIAG_OFF_DEPRECATION - #define DIAG_ON_DEPRECATION -#endif - -#ifndef DIAG_OFF_C11_EXTENSIONS -#define DIAG_OFF_C11_EXTENSIONS -#endif -#ifndef DIAG_ON_C11_EXTENSIONS -#define DIAG_ON_C11_EXTENSIONS #endif /* @@ -179,8 +190,46 @@ * So please remember to use this very carefully. */ #define ND_UNREACHABLE __builtin_unreachable(); -#else - #define ND_UNREACHABLE +#endif + +#ifndef DIAG_OFF_ASSIGN_ENUM +#define DIAG_OFF_ASSIGN_ENUM +#endif +#ifndef DIAG_ON_ASSIGN_ENUM +#define DIAG_ON_ASSIGN_ENUM +#endif +#ifndef DIAG_OFF_CAST_QUAL +#define DIAG_OFF_CAST_QUAL +#endif +#ifndef DIAG_ON_CAST_QUAL +#define DIAG_ON_CAST_QUAL +#endif +#ifndef DIAG_OFF_WARN_UNUSED_RESULT +#define DIAG_OFF_WARN_UNUSED_RESULT +#endif +#ifndef DIAG_ON_WARN_UNUSED_RESULT +#define DIAG_ON_WARN_UNUSED_RESULT +#endif +#ifndef DIAG_OFF_DEPRECATION +#define DIAG_OFF_DEPRECATION +#endif +#ifndef DIAG_ON_DEPRECATION +#define DIAG_ON_DEPRECATION +#endif +#ifndef DIAG_OFF_C11_EXTENSIONS +#define DIAG_OFF_C11_EXTENSIONS +#endif +#ifndef DIAG_ON_C11_EXTENSIONS +#define DIAG_ON_C11_EXTENSIONS +#endif +#ifndef DIAG_OFF_STRICT_PROTOTYPES +#define DIAG_OFF_STRICT_PROTOTYPES +#endif +#ifndef DIAG_ON_STRICT_PROTOTYPES +#define DIAG_ON_STRICT_PROTOTYPES +#endif +#ifndef ND_UNREACHABLE +#define ND_UNREACHABLE #endif #endif /* _diag_control_h */ diff --git a/contrib/tcpdump/doc/README.Win32.md b/contrib/tcpdump/doc/README.Win32.md deleted file mode 100644 index b7e81d1cf1c4..000000000000 --- a/contrib/tcpdump/doc/README.Win32.md +++ /dev/null @@ -1,200 +0,0 @@ -Building tcpdump on Windows with Visual Studio -============================================== - -Unlike the UN*Xes on which libpcap can capture network traffic, Windows -has no network traffic capture mechanism that libpcap can use. -Therefore, libpcap requires a driver, and a library to access the -driver, provided by the Npcap or WinPcap projects. - -Those projects include versions of libpcap built to use that driver and -library; these instructions are for people who want to build libpcap -source releases, or libpcap from the Git repository, as a replacement -for the version provided with Npcap or WinPcap. - -Npcap and WinPcap SDK ---------------------- - -In order to build tcpdump, you will need to download Npcap and its -software development kit (SDK) or WinPcap and its software development -kit. - -Npcap is currently being developed and maintained, and offers many -additional capabilities that WinPcap does not. - -WinPcap is no longer being developed or maintained; it should be used -only if there is some other requirement to use it rather than Npcap, -such as a requirement to support versions of Windows earlier than -Windows Vista, which is the earliest version supported by Npcap. - -Npcap and its SDK can be downloaded from its [home page](https://npcap.com). -The SDK is a ZIP archive; create a folder on your `C:` drive, e.g. -`C:\npcap-sdk`, and put the contents of the ZIP archive into that folder. - -The WinPcap installer can be downloaded from -[here](https://www.winpcap.org/install/default.htm) -and the WinPcap Developer's Kit can be downloaded from -[here](https://www.winpcap.org/devel.htm). - -Required build tools --------------------- - -The Developer's Kit is a ZIP archive; it contains a folder named -`WpdPack`, which you should place on your `C:` drive, e.g. `C:\WpdPack`. - -Building tcpdump on Windows requires Visual Studio 2015 or later. The -Community Edition of Visual Studio can be downloaded at no cost from -[here](https://visualstudio.microsoft.com). - -Additional tools are also required. Chocolatey is a package manager for -Windows with which those tools, and other tools, can be installed; it -can be downloaded from [here](https://chocolatey.org). - -It is a command-line tool; a GUI tool, Chocolatey GUI, is provided as a -Chocolatey package, which can be installed from the command line: - -``` -choco install chocolateygui -``` - -For convenience, the `choco install` command can be run with the `-y` -flag, forcing it to automatically answer all questions asked of the user -with "yes": - -``` -choco install -y chocolateygui -``` - -The required tools are: - -### CMake ### - -libpcap does not provide supported project files for Visual Studio -(there are currently unsupported project files provided, but we do not -guarantee that they will work or that we will continue to provide them). -It does provide files for CMake, which is a cross-platform tool that -runs on UN\*Xes and on Windows and that can generate project files for -UN\*X Make, the Ninja build system, and Visual Studio, among other build -systems. - -Visual Studio 2015 does not provide CMake; an installer can be -downloaded from [here](https://cmake.org/download/). - -When you run the installer, you should choose to add CMake to the system -`PATH` for all users and to create the desktop icon. - -CMake can also be installed as the Chocolatey package `cmake`: - -``` -choco install -y cmake -``` - -Visual Studio 2017 and later provide CMake, so you will not need to -install CMake if you have installed Visual Studio 2017 or later. They -include built-in support for CMake-based projects as described -[here](https://devblogs.microsoft.com/cppblog/cmake-support-in-visual-studio/). - -For Visual Studio 2017, make sure "Visual C++ tools for CMake" is -installed; for Visual Studio 2019, make sure "C++ CMake tools for -Windows" is installed. - -Git ---- - -An optional tool, required only if you will be building from a Git -repository rather than from a release source tarball, is Git. Git is -provided as an optional installation component, "Git for Windows", with -Visual Studio 2017 and later. - -Building from the Visual Studio GUI ------------------------------------ - -### Visual Studio 2017 ### - -Open the folder containing the libpcap source with Open > Folder. -Visual Studio will run CMake; however, you will need to indicate where -the Npcap or WinPcap SDK is installed. - -To do this, go to Project > "Change CMake Settings" > tcpdump and: - -Choose which configuration type to build, if you don't want the default -Debug build. - -In the CMakeSettings.json tab, change cmakeCommandArgs to include - -``` --DPacket_ROOT={path-to-sdk} -``` - -where `{path-to-sdk}` is the path of the directory containing the Npcap or -WinPcap SDK. Note that backslashes in the path must be specified as two -backslashes. - -Save the configuration changes with File > "Save CMakeSettings.json" or -with Control-S. - -Visual Studio will then re-run CMake. If that completes without errors, -you can build with CMake > "Build All". - -### Visual Studio 2019 ### - -Open the folder containing the libpcap source with Open > Folder. -Visual Studio will run CMake; however, you will need to indicate where -the Npcap or WinPcap SDK is installed. - -To do this, go to Project > "CMake Settings for tcpdump" and: - -Choose which configuration type to build, if you don't want the default -Debug build. - -Scroll down to "Cmake variables and cache", scroll through the list -looking for the entry for Packet_ROOT, and either type in the path of -the directory containing the Npcap or WinPcap SDK or use the "Browse..." -button to browse for that directory. - -Save the configuration changes with File > "Save CMakeSettings.json" or -with Control-S. - -Visual Studio will then re-run CMake. If that completes without errors, -you can build with Build > "Build All". - -Building from the command line ------------------------------- - -Start the appropriate Native Tools command line prompt. - -Change to the directory into which you want to build tcpdump, possibly -after creating it first. One choice is to create it as a subdirectory -of the tcpdump source directory. - -Run the command - -``` -cmake "-DPacket_ROOT={path-to-sdk}" -G {generator} {path-to-tcpdump-source} -``` - -`{path-to-sdk}` is the path of the directory containing the Npcap or -WinPcap SDK. - -`{generator}` is the string "Visual Studio N YYYY", where `N` is the -version of Visual Studio and `YYYY` is the year number for that version; -if you are building a 64-bit version of tcpdump, `YYYY` must be followed -by a space and "Win64". For example, to build a 32-bit version of -tcpdump with Visual Studio 2017, `{generator}` would be "Visual Studio -15 2017" and to build a 64-bit version of tcpdump with Visual Studio -2017, `{generator}` would be "Visual Studio 15 2017 Win64". - -`{path-to-tcpdump-source}` is the pathname of the top-level source -directory for tcpdump. - -Run the command - -``` -msbuild /m /nologo /p:Configuration={configuration} tcpdump.sln -``` - -where `{configuration}` can be "Release", "Debug", or "RelWithDebInfo". - -Building with MinGW -------------------- - -(XXX - this should be added) diff --git a/contrib/tcpdump/doc/README.haiku.md b/contrib/tcpdump/doc/README.haiku.md new file mode 100644 index 000000000000..f9341523b7b2 --- /dev/null +++ b/contrib/tcpdump/doc/README.haiku.md @@ -0,0 +1,33 @@ +# Compiling tcpdump on Haiku + +## 64-bit x86 R1/beta4 + +* Both system and local libpcap are suitable. +* Autoconf 2.71 works. +* CMake 3.24.2 works. +* GCC 11.2.0 works. +* Clang 12.0.1 works with the latest llvm12_clang-12.0.1-5 version. + +The following command will install respective non-default packages: +``` +pkgman install libpcap_devel cmake llvm12_clang +``` + +For reference, the tests were done using a system installed from +`haiku-r1beta4-x86_64-anyboot.iso`. + +## 32-bit x86 R1/beta4 + +* Both system and local libpcap are suitable. +* Autoconf 2.71 works. +* CMake 3.24.2 works. +* GCC 11.2.0 works. +* Clang does not work. + +The following command will install respective non-default packages: +``` +pkgman install libpcap_x86_devel cmake_x86 +``` + +For reference, the tests were done using a system installed from +`haiku-r1beta4-x86_gcc2h-anyboot.iso`. diff --git a/contrib/tcpdump/doc/README.solaris.md b/contrib/tcpdump/doc/README.solaris.md index afdd8f7356e1..86571e21ae11 100644 --- a/contrib/tcpdump/doc/README.solaris.md +++ b/contrib/tcpdump/doc/README.solaris.md @@ -39,3 +39,8 @@ developer/gcc developer/llvm/clang ENDOFTEXT ``` + +## Solaris 9 + +This version of this OS is not supported because the snprintf(3) implementation +in its libc is not suitable. diff --git a/contrib/tcpdump/extract.h b/contrib/tcpdump/extract.h index d7d803dfb277..c1b486d37a7e 100644 --- a/contrib/tcpdump/extract.h +++ b/contrib/tcpdump/extract.h @@ -261,7 +261,7 @@ EXTRACT_IPV4_TO_HOST_ORDER(const void *p) * quantities the hard way - fetch the bytes one at a time and * assemble them. * - * XXX - ARM is a special case. ARMv1 through ARMv5 didn't suppory + * XXX - ARM is a special case. ARMv1 through ARMv5 didn't support * unaligned loads; ARMv6 and later support it *but* have a bit in * the system control register that the OS can set and that causes * unaligned loads to fault rather than succeeding. diff --git a/contrib/tcpdump/ftmacros.h b/contrib/tcpdump/ftmacros.h index 7975463b3a69..ba95c4aac1bf 100644 --- a/contrib/tcpdump/ftmacros.h +++ b/contrib/tcpdump/ftmacros.h @@ -64,7 +64,7 @@ /* * We need this to get the versions of socket functions that * use socklen_t. Define it only if it's not already defined, - * so we don't get redefiniton warnings. + * so we don't get redefinition warnings. */ #ifndef _XOPEN_SOURCE_EXTENDED #define _XOPEN_SOURCE_EXTENDED diff --git a/contrib/tcpdump/funcattrs.h b/contrib/tcpdump/funcattrs.h index 21f3cc1dafd0..28e4108b58c0 100644 --- a/contrib/tcpdump/funcattrs.h +++ b/contrib/tcpdump/funcattrs.h @@ -52,13 +52,14 @@ || ND_IS_AT_LEAST_GNUC_VERSION(2,5) \ || ND_IS_AT_LEAST_SUNC_VERSION(5,9) \ || ND_IS_AT_LEAST_XL_C_VERSION(10,1) \ - || ND_IS_AT_LEAST_HP_C_VERSION(6,10) + || ND_IS_AT_LEAST_HP_C_VERSION(6,10) \ + || __TINYC__ /* * Compiler with support for __attribute((noreturn)), or GCC 2.5 and * later, or some compiler asserting compatibility with GCC 2.5 and * later, or Solaris Studio 12 (Sun C 5.9) and later, or IBM XL C 10.1 * and later (do any earlier versions of XL C support this?), or HP aCC - * A.06.10 and later. + * A.06.10 and later, or current TinyCC. */ #define NORETURN __attribute((noreturn)) diff --git a/contrib/tcpdump/gmpls.c b/contrib/tcpdump/gmpls.c index f0646f1bd22d..1bccd8029893 100644 --- a/contrib/tcpdump/gmpls.c +++ b/contrib/tcpdump/gmpls.c @@ -13,9 +13,7 @@ * Original code by Hannes Gredler (hannes@gredler.at) */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/in_cksum.c b/contrib/tcpdump/in_cksum.c index eb7c634f0ab0..46dfb958d007 100644 --- a/contrib/tcpdump/in_cksum.c +++ b/contrib/tcpdump/in_cksum.c @@ -35,9 +35,7 @@ * @(#)in_cksum.c 8.1 (Berkeley) 6/10/93 */ -#ifdef HAVE_CONFIG_H # include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/install-sh b/contrib/tcpdump/install-sh index b44de0989d2f..ec298b537402 100755 --- a/contrib/tcpdump/install-sh +++ b/contrib/tcpdump/install-sh @@ -1,250 +1,541 @@ -#! /bin/sh -# +#!/bin/sh # install - install a program, script, or datafile -# This comes from X11R5 (mit/util/scripts/install.sh). + +scriptversion=2020-11-14.01; # UTC + +# This originates from X11R5 (mit/util/scripts/install.sh), which was +# later released in X11R6 (xc/config/util/install.sh) with the +# following copyright and license. +# +# Copyright (C) 1994 X Consortium +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN +# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- +# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # -# Copyright 1991 by the Massachusetts Institute of Technology +# Except as contained in this notice, the name of the X Consortium shall not +# be used in advertising or otherwise to promote the sale, use or other deal- +# ings in this Software without prior written authorization from the X Consor- +# tium. # -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of M.I.T. not be used in advertising or -# publicity pertaining to distribution of the software without specific, -# written prior permission. M.I.T. makes no representations about the -# suitability of this software for any purpose. It is provided "as is" -# without express or implied warranty. +# +# FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent -# `make' implicit rules from creating a file called install from it +# 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written -# from scratch. It can only install one file at a time, a restriction -# shared with many OS's install programs. +# from scratch. + +tab=' ' +nl=' +' +IFS=" $tab$nl" +# Set DOITPROG to "echo" to test this script. -# set DOITPROG to echo to test this script +doit=${DOITPROG-} +doit_exec=${doit:-exec} -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" +# Put in absolute file names if you don't have them in your path; +# or use environment vars. +chgrpprog=${CHGRPPROG-chgrp} +chmodprog=${CHMODPROG-chmod} +chownprog=${CHOWNPROG-chown} +cmpprog=${CMPPROG-cmp} +cpprog=${CPPROG-cp} +mkdirprog=${MKDIRPROG-mkdir} +mvprog=${MVPROG-mv} +rmprog=${RMPROG-rm} +stripprog=${STRIPPROG-strip} -# put in absolute paths if you don't have them in your path; or use env. vars. +posix_mkdir= -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" -mkdirprog="${MKDIRPROG-mkdir}" +# Desired mode of installed file. +mode=0755 -transformbasename="" -transform_arg="" -instcmd="$mvprog" -chmodcmd="$chmodprog 0755" -chowncmd="" -chgrpcmd="" -stripcmd="" +# Create dirs (including intermediate dirs) using mode 755. +# This is like GNU 'install' as of coreutils 8.32 (2020). +mkdir_umask=22 + +backupsuffix= +chgrpcmd= +chmodcmd=$chmodprog +chowncmd= +mvcmd=$mvprog rmcmd="$rmprog -f" -mvcmd="$mvprog" -src="" -dst="" -dir_arg="" - -while [ x"$1" != x ]; do - case $1 in - -c) instcmd="$cpprog" - shift - continue;; - - -d) dir_arg=true - shift - continue;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - -s) stripcmd="$stripprog" - shift - continue;; - - -t=*) transformarg=`echo $1 | sed 's/-t=//'` - shift - continue;; - - -b=*) transformbasename=`echo $1 | sed 's/-b=//'` - shift - continue;; - - *) if [ x"$src" = x ] - then - src=$1 - else - # this colon is to work around a 386BSD /bin/sh bug - : - dst=$1 - fi - shift - continue;; - esac -done +stripcmd= -if [ x"$src" = x ] -then - echo "install: no input file specified" - exit 1 -else - true -fi +src= +dst= +dir_arg= +dst_arg= -if [ x"$dir_arg" != x ]; then - dst=$src - src="" +copy_on_change=false +is_target_a_directory=possibly - if [ -d $dst ]; then - instcmd=: - else - instcmd=mkdir - fi -else +usage="\ +Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE + or: $0 [OPTION]... SRCFILES... DIRECTORY + or: $0 [OPTION]... -t DIRECTORY SRCFILES... + or: $0 [OPTION]... -d DIRECTORIES... -# Waiting for this to be detected by the "$instcmd $src $dsttmp" command -# might cause directories to be created, which would be especially bad -# if $src (and thus $dsttmp) contains '*'. +In the 1st form, copy SRCFILE to DSTFILE. +In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. +In the 4th, create DIRECTORIES. - if [ -f $src -o -d $src ] - then - true - else - echo "install: $src does not exist" - exit 1 - fi +Options: + --help display this help and exit. + --version display version info and exit. - if [ x"$dst" = x ] - then - echo "install: no destination specified" - exit 1 - else - true - fi + -c (ignored) + -C install only if different (preserve data modification time) + -d create directories instead of installing files. + -g GROUP $chgrpprog installed files to GROUP. + -m MODE $chmodprog installed files to MODE. + -o USER $chownprog installed files to USER. + -p pass -p to $cpprog. + -s $stripprog installed files. + -S SUFFIX attempt to back up existing files, with suffix SUFFIX. + -t DIRECTORY install into DIRECTORY. + -T report an error if DSTFILE is a directory. -# If destination is a directory, append the input filename; if your system -# does not like double slashes in filenames, you may need to add some logic +Environment variables override the default commands: + CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG + RMPROG STRIPPROG - if [ -d $dst ] - then - dst="$dst"/`basename $src` - else - true - fi -fi +By default, rm is invoked with -f; when overridden with RMPROG, +it's up to you to specify -f if you want it. -## this sed command emulates the dirname command -dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` +If -S is not specified, no backups are attempted. -# Make sure that the destination directory exists. -# this part is taken from Noah Friedman's mkinstalldirs script +Email bug reports to bug-automake@gnu.org. +Automake home page: https://www.gnu.org/software/automake/ +" -# Skip lots of stat calls in the usual case. -if [ ! -d "$dstdir" ]; then -defaultIFS=' -' -IFS="${IFS-${defaultIFS}}" +while test $# -ne 0; do + case $1 in + -c) ;; -oIFS="${IFS}" -# Some sh's can't handle IFS=/ for some reason. -IFS='%' -set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` -IFS="${oIFS}" + -C) copy_on_change=true;; -pathcomp='' + -d) dir_arg=true;; -while [ $# -ne 0 ] ; do - pathcomp="${pathcomp}${1}" - shift + -g) chgrpcmd="$chgrpprog $2" + shift;; - if [ ! -d "${pathcomp}" ] ; - then - $mkdirprog "${pathcomp}" - else - true - fi + --help) echo "$usage"; exit $?;; - pathcomp="${pathcomp}/" -done -fi + -m) mode=$2 + case $mode in + *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) + echo "$0: invalid mode: $mode" >&2 + exit 1;; + esac + shift;; -if [ x"$dir_arg" != x ] -then - $doit $instcmd $dst && + -o) chowncmd="$chownprog $2" + shift;; - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi -else + -p) cpprog="$cpprog -p";; -# If we're going to rename the final executable, determine the name now. + -s) stripcmd=$stripprog;; - if [ x"$transformarg" = x ] - then - dstfile=`basename $dst` - else - dstfile=`basename $dst $transformbasename | - sed $transformarg`$transformbasename - fi + -S) backupsuffix="$2" + shift;; -# don't allow the sed command to completely eliminate the filename + -t) + is_target_a_directory=always + dst_arg=$2 + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + shift;; - if [ x"$dstfile" = x ] - then - dstfile=`basename $dst` - else - true - fi + -T) is_target_a_directory=never;; -# Make a temp file name in the proper directory. + --version) echo "$0 $scriptversion"; exit $?;; - dsttmp=$dstdir/#inst.$$# + --) shift + break;; -# Move or copy the file name to the temp name + -*) echo "$0: invalid option: $1" >&2 + exit 1;; - $doit $instcmd $src $dsttmp && + *) break;; + esac + shift +done - trap "rm -f ${dsttmp}" 0 && +# We allow the use of options -d and -T together, by making -d +# take the precedence; this is for compatibility with GNU install. -# and set any options; do chmod last to preserve setuid bits +if test -n "$dir_arg"; then + if test -n "$dst_arg"; then + echo "$0: target directory not allowed when installing a directory." >&2 + exit 1 + fi +fi -# If any of these fail, we abort the whole thing. If we want to -# ignore errors from any of these, just make sure not to ignore -# errors from the above "$doit $instcmd $src $dsttmp" command. +if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then + # When -d is used, all remaining arguments are directories to create. + # When -t is used, the destination is already specified. + # Otherwise, the last argument is the destination. Remove it from $@. + for arg + do + if test -n "$dst_arg"; then + # $@ is not empty: it contains at least $arg. + set fnord "$@" "$dst_arg" + shift # fnord + fi + shift # arg + dst_arg=$arg + # Protect names problematic for 'test' and other utilities. + case $dst_arg in + -* | [=\(\)!]) dst_arg=./$dst_arg;; + esac + done +fi - if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && - if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && - if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && - if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && +if test $# -eq 0; then + if test -z "$dir_arg"; then + echo "$0: no input file specified." >&2 + exit 1 + fi + # It's OK to call 'install-sh -d' without argument. + # This can happen when creating conditional directories. + exit 0 +fi -# Now rename the file to the real destination. +if test -z "$dir_arg"; then + if test $# -gt 1 || test "$is_target_a_directory" = always; then + if test ! -d "$dst_arg"; then + echo "$0: $dst_arg: Is not a directory." >&2 + exit 1 + fi + fi +fi - $doit $rmcmd -f $dstdir/$dstfile && - $doit $mvcmd $dsttmp $dstdir/$dstfile +if test -z "$dir_arg"; then + do_exit='(exit $ret); exit $ret' + trap "ret=129; $do_exit" 1 + trap "ret=130; $do_exit" 2 + trap "ret=141; $do_exit" 13 + trap "ret=143; $do_exit" 15 + + # Set umask so as not to create temps with too-generous modes. + # However, 'strip' requires both read and write access to temps. + case $mode in + # Optimize common cases. + *644) cp_umask=133;; + *755) cp_umask=22;; + + *[0-7]) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw='% 200' + fi + cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; + *) + if test -z "$stripcmd"; then + u_plus_rw= + else + u_plus_rw=,u+rw + fi + cp_umask=$mode$u_plus_rw;; + esac +fi -fi && +for src +do + # Protect names problematic for 'test' and other utilities. + case $src in + -* | [=\(\)!]) src=./$src;; + esac + + if test -n "$dir_arg"; then + dst=$src + dstdir=$dst + test -d "$dstdir" + dstdir_status=$? + # Don't chown directories that already exist. + if test $dstdir_status = 0; then + chowncmd="" + fi + else + + # Waiting for this to be detected by the "$cpprog $src $dsttmp" command + # might cause directories to be created, which would be especially bad + # if $src (and thus $dsttmp) contains '*'. + if test ! -f "$src" && test ! -d "$src"; then + echo "$0: $src does not exist." >&2 + exit 1 + fi + + if test -z "$dst_arg"; then + echo "$0: no destination specified." >&2 + exit 1 + fi + dst=$dst_arg + + # If destination is a directory, append the input filename. + if test -d "$dst"; then + if test "$is_target_a_directory" = never; then + echo "$0: $dst_arg: Is a directory" >&2 + exit 1 + fi + dstdir=$dst + dstbase=`basename "$src"` + case $dst in + */) dst=$dst$dstbase;; + *) dst=$dst/$dstbase;; + esac + dstdir_status=0 + else + dstdir=`dirname "$dst"` + test -d "$dstdir" + dstdir_status=$? + fi + fi + + case $dstdir in + */) dstdirslash=$dstdir;; + *) dstdirslash=$dstdir/;; + esac + + obsolete_mkdir_used=false + + if test $dstdir_status != 0; then + case $posix_mkdir in + '') + # With -d, create the new directory with the user-specified mode. + # Otherwise, rely on $mkdir_umask. + if test -n "$dir_arg"; then + mkdir_mode=-m$mode + else + mkdir_mode= + fi + + posix_mkdir=false + # The $RANDOM variable is not portable (e.g., dash). Use it + # here however when possible just to lower collision chance. + tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ + + trap ' + ret=$? + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null + exit $ret + ' 0 + + # Because "mkdir -p" follows existing symlinks and we likely work + # directly in world-writeable /tmp, make sure that the '$tmpdir' + # directory is successfully created first before we actually test + # 'mkdir -p'. + if (umask $mkdir_umask && + $mkdirprog $mkdir_mode "$tmpdir" && + exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 + then + if test -z "$dir_arg" || { + # Check for POSIX incompatibilities with -m. + # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or + # other-writable bit of parent directory when it shouldn't. + # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. + test_tmpdir="$tmpdir/a" + ls_ld_tmpdir=`ls -ld "$test_tmpdir"` + case $ls_ld_tmpdir in + d????-?r-*) different_mode=700;; + d????-?--*) different_mode=755;; + *) false;; + esac && + $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { + ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` + test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" + } + } + then posix_mkdir=: + fi + rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" + else + # Remove any dirs left behind by ancient mkdir implementations. + rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null + fi + trap '' 0;; + esac + if + $posix_mkdir && ( + umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" + ) + then : + else + + # mkdir does not conform to POSIX, + # or it failed possibly due to a race condition. Create the + # directory the slow way, step by step, checking for races as we go. + + case $dstdir in + /*) prefix='/';; + [-=\(\)!]*) prefix='./';; + *) prefix='';; + esac + + oIFS=$IFS + IFS=/ + set -f + set fnord $dstdir + shift + set +f + IFS=$oIFS + + prefixes= + + for d + do + test X"$d" = X && continue + + prefix=$prefix$d + if test -d "$prefix"; then + prefixes= + else + if $posix_mkdir; then + (umask $mkdir_umask && + $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break + # Don't fail if two instances are running concurrently. + test -d "$prefix" || exit 1 + else + case $prefix in + *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; + *) qprefix=$prefix;; + esac + prefixes="$prefixes '$qprefix'" + fi + fi + prefix=$prefix/ + done + + if test -n "$prefixes"; then + # Don't fail if two instances are running concurrently. + (umask $mkdir_umask && + eval "\$doit_exec \$mkdirprog $prefixes") || + test -d "$dstdir" || exit 1 + obsolete_mkdir_used=true + fi + fi + fi + + if test -n "$dir_arg"; then + { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && + { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || + test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 + else + + # Make a couple of temp file names in the proper directory. + dsttmp=${dstdirslash}_inst.$$_ + rmtmp=${dstdirslash}_rm.$$_ + + # Trap to clean up those temp files at exit. + trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 + + # Copy the file name to the temp name. + (umask $cp_umask && + { test -z "$stripcmd" || { + # Create $dsttmp read-write so that cp doesn't create it read-only, + # which would cause strip to fail. + if test -z "$doit"; then + : >"$dsttmp" # No need to fork-exec 'touch'. + else + $doit touch "$dsttmp" + fi + } + } && + $doit_exec $cpprog "$src" "$dsttmp") && + + # and set any options; do chmod last to preserve setuid bits. + # + # If any of these fail, we abort the whole thing. If we want to + # ignore errors from any of these, just make sure not to ignore + # errors from the above "$doit $cpprog $src $dsttmp" command. + # + { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && + { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && + { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && + { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && + + # If -C, don't bother to copy if it wouldn't change the file. + if $copy_on_change && + old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && + new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && + set -f && + set X $old && old=:$2:$4:$5:$6 && + set X $new && new=:$2:$4:$5:$6 && + set +f && + test "$old" = "$new" && + $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 + then + rm -f "$dsttmp" + else + # If $backupsuffix is set, and the file being installed + # already exists, attempt a backup. Don't worry if it fails, + # e.g., if mv doesn't support -f. + if test -n "$backupsuffix" && test -f "$dst"; then + $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null + fi + + # Rename the file to the real destination. + $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || + + # The rename failed, perhaps because mv can't rename something else + # to itself, or perhaps because mv is so ancient that it does not + # support -f. + { + # Now remove or move aside any old file at destination location. + # We try this two ways since rm can't unlink itself on some + # systems and the destination file might be busy for other + # reasons. In this case, the final cleanup might fail but the new + # file should still install successfully. + { + test ! -f "$dst" || + $doit $rmcmd "$dst" 2>/dev/null || + { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && + { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } + } || + { echo "$0: cannot unlink or rename $dst" >&2 + (exit 1); exit 1 + } + } && + + # Now rename the file to the real destination. + $doit $mvcmd "$dsttmp" "$dst" + } + fi || exit 1 + + trap '' 0 + fi +done -exit 0 +# Local variables: +# eval: (add-hook 'before-save-hook '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/contrib/tcpdump/instrument-functions.c b/contrib/tcpdump/instrument-functions.c new file mode 100644 index 000000000000..ba0a56a5309f --- /dev/null +++ b/contrib/tcpdump/instrument-functions.c @@ -0,0 +1,250 @@ +/* + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that: (1) source code + * distributions retain the above copyright notice and this paragraph + * in its entirety, and (2) distributions including binary code include + * the above copyright notice and this paragraph in its entirety in + * the documentation or other materials provided with the distribution. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND + * WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT + * LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + * FOR A PARTICULAR PURPOSE. + */ + +#include <stdio.h> +#include <string.h> +#include <stdlib.h> +#include <unistd.h> +#include <bfd.h> + +/* + * Generate instrumentation calls for entry and exit to functions. + * Just after function entry and just before function exit, the + * following profiling functions are called with the address of the + * current function and its call site (currently not use). + * + * The attribute 'no_instrument_function' causes this instrumentation is + * not done. + * + * These profiling functions call print_debug(). This function prints the + * current function name with indentation and call level. + * If entering in a function it prints also the calling function name with + * file name and line number. + * + * If the environment variable INSTRUMENT is + * unset or set to an empty string, print nothing, like with no instrumentation + * set to "all" or "a", print all the functions names + * set to "global" or "g", print only the global functions names + */ + +#define ND_NO_INSTRUMENT __attribute__((no_instrument_function)) + +/* Store the function call level, used also in pretty_print_packet() */ +extern int profile_func_level; +int profile_func_level = -1; + +typedef enum { + ENTER, + EXIT +} action_type; + +void __cyg_profile_func_enter(void *this_fn, void *call_site) ND_NO_INSTRUMENT; + +void __cyg_profile_func_exit(void *this_fn, void *call_site) ND_NO_INSTRUMENT; + +static void print_debug(void *this_fn, void *call_site, action_type action) + ND_NO_INSTRUMENT; + +void +__cyg_profile_func_enter(void *this_fn, void *call_site) +{ + print_debug(this_fn, call_site, ENTER); +} + +void +__cyg_profile_func_exit(void *this_fn, void *call_site) +{ + print_debug(this_fn, call_site, EXIT); +} + +static void print_debug(void *this_fn, void *call_site, action_type action) +{ + static bfd* abfd; + static asymbol **symtab; + static long symcount; + static asection *text; + static bfd_vma vma; + static int instrument_set; + static int instrument_off; + static int instrument_global; + + if (!instrument_set) { + static char *instrument_type; + + /* Get the configuration environment variable INSTRUMENT value if any */ + instrument_type = getenv("INSTRUMENT"); + /* unset or set to an empty string ? */ + if (instrument_type == NULL || + !strncmp(instrument_type, "", sizeof(""))) { + instrument_off = 1; + } else { + /* set to "global" or "g" ? */ + if (!strncmp(instrument_type, "global", sizeof("global")) || + !strncmp(instrument_type, "g", sizeof("g"))) + instrument_global = 1; + else if (strncmp(instrument_type, "all", sizeof("all")) && + strncmp(instrument_type, "a", sizeof("a"))) { + fprintf(stderr, "INSTRUMENT can be only \"\", \"all\", \"a\", " + "\"global\" or \"g\".\n"); + exit(1); + } + } + instrument_set = 1; + } + + if (instrument_off) + return; + + /* If no errors, this block should be executed one time */ + if (!abfd) { + char pgm_name[1024]; + long symsize; + + ssize_t ret = readlink("/proc/self/exe", pgm_name, sizeof(pgm_name)); + if (ret == -1) { + perror("failed to find executable"); + return; + } + if (ret == sizeof(pgm_name)) { + /* no space for the '\0' */ + printf("truncation may have occurred\n"); + return; + } + pgm_name[ret] = '\0'; + + bfd_init(); + + abfd = bfd_openr(pgm_name, NULL); + if (!abfd) { + bfd_perror("bfd_openr"); + return; + } + + if (!bfd_check_format(abfd, bfd_object)) { + bfd_perror("bfd_check_format"); + return; + } + + if((symsize = bfd_get_symtab_upper_bound(abfd)) == -1) { + bfd_perror("bfd_get_symtab_upper_bound"); + return; + } + + symtab = (asymbol **)malloc((size_t)symsize); + symcount = bfd_canonicalize_symtab(abfd, symtab); + if (symcount < 0) { + free(symtab); + bfd_perror("bfd_canonicalize_symtab"); + return; + } + + if ((text = bfd_get_section_by_name(abfd, ".text")) == NULL) { + bfd_perror("bfd_get_section_by_name"); + return; + } + vma = text->vma; + } + + if (instrument_global) { + symbol_info syminfo; + int found; + long i; + + i = 0; + found = 0; + while (i < symcount && !found) { + bfd_get_symbol_info(abfd, symtab[i], &syminfo); + if ((void *)syminfo.value == this_fn) { + found = 1; + } + i++; + } + /* type == 'T' for a global function */ + if (found == 1 && syminfo.type != 'T') + return; + } + + /* Current function */ + if ((bfd_vma)this_fn < vma) { + printf("[ERROR address this_fn]"); + } else { + const char *file; + const char *func; + unsigned int line; + + if (!bfd_find_nearest_line(abfd, text, symtab, (bfd_vma)this_fn - vma, + &file, &func, &line)) { + printf("[ERROR bfd_find_nearest_line this_fn]"); + } else { + int i; + + if (action == ENTER) + profile_func_level += 1; + /* Indentation */ + for (i = 0 ; i < profile_func_level ; i++) + putchar(' '); + if (action == ENTER) + printf("[>> "); + else + printf("[<< "); + /* Function name */ + if (func == NULL || *func == '\0') + printf("???"); + else + printf("%s", func); + printf(" (%d)", profile_func_level); + /* Print the "from" part except for the main function) */ + if (action == ENTER && func != NULL && + strncmp(func, "main", sizeof("main"))) { + /* Calling function */ + if ((bfd_vma)call_site < vma) { + printf("[ERROR address call_site]"); + } else { + if (!bfd_find_nearest_line(abfd, text, symtab, + (bfd_vma)call_site - vma, &file, + &func, &line)) { + printf("[ERROR bfd_find_nearest_line call_site]"); + } else { + printf(" from "); + /* Function name */ + if (func == NULL || *func == '\0') + printf("???"); + else + printf("%s", func); + /* File name */ + if (file == NULL || *file == '\0') + printf(" ??:"); + else { + char *slashp = strrchr(file, '/'); + if (slashp != NULL) + file = slashp + 1; + printf(" %s:", file); + } + /* Line number */ + if (line == 0) + printf("?"); + else + printf("%u", line); + printf("]"); + } + } + } + putchar('\n'); + if (action == EXIT) + profile_func_level -= 1; + } + } + fflush(stdout); +} + +/* vi: set tabstop=4 softtabstop=0 shiftwidth=4 smarttab autoindent : */ diff --git a/contrib/tcpdump/interface.h b/contrib/tcpdump/interface.h index 58e5ab33e51f..c631c143bf65 100644 --- a/contrib/tcpdump/interface.h +++ b/contrib/tcpdump/interface.h @@ -63,7 +63,7 @@ struct bpf_program; * With Capsicum bpf_dump() may be not declared even if HAVE_BPF_DUMP is set. */ #if !defined(HAVE_BPF_DUMP) || \ - (defined(HAVE_BPF_DUMP) && HAVE_CAPSICUM && !defined(bpf_dump)) + (defined(HAVE_BPF_DUMP) && defined(HAVE_CAPSICUM) && !defined(bpf_dump)) extern void bpf_dump(const struct bpf_program *, int); #endif diff --git a/contrib/tcpdump/ip.h b/contrib/tcpdump/ip.h index ca87548fd096..c1be0e66f177 100644 --- a/contrib/tcpdump/ip.h +++ b/contrib/tcpdump/ip.h @@ -107,7 +107,6 @@ struct ip { #define IPOPT_RFC1393 82 /* traceroute RFC 1393 */ #define IPOPT_SECURITY 130 /* provide s,c,h,tcc */ #define IPOPT_LSRR 131 /* loose source route */ -#define IPOPT_SATID 136 /* satnet id */ #define IPOPT_SSRR 137 /* strict source route */ #define IPOPT_RA 148 /* router-alert, rfc2113 */ diff --git a/contrib/tcpdump/ipproto.c b/contrib/tcpdump/ipproto.c index 53484549ee37..c34d1e2284ed 100644 --- a/contrib/tcpdump/ipproto.c +++ b/contrib/tcpdump/ipproto.c @@ -13,9 +13,7 @@ * Original code by Hannes Gredler (hannes@gredler.at) */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/l2vpn.c b/contrib/tcpdump/l2vpn.c index 9111cf6d25d5..5e2e768f524f 100644 --- a/contrib/tcpdump/l2vpn.c +++ b/contrib/tcpdump/l2vpn.c @@ -13,9 +13,7 @@ * Original code by Hannes Gredler (hannes@gredler.at) */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include "netdissect.h" diff --git a/contrib/tcpdump/machdep.c b/contrib/tcpdump/machdep.c index 2578b73c0cb4..8ceb04a04370 100644 --- a/contrib/tcpdump/machdep.c +++ b/contrib/tcpdump/machdep.c @@ -19,9 +19,7 @@ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include <stddef.h> diff --git a/contrib/tcpdump/makemib b/contrib/tcpdump/makemib index 97e78754ff7b..f734bb7333a0 100755 --- a/contrib/tcpdump/makemib +++ b/contrib/tcpdump/makemib @@ -36,7 +36,7 @@ # # This script needs to be run by "gawk" (GNU awk). "nawk" will work, but # dump will get a recursion error if you process LARGE mibs. While it would -# by farily easy to rewrite this not to use recursion (and also easy to +# by fairly easy to rewrite this not to use recursion (and also easy to # eliminate use of gsub and functions to use classic "awk"), you have to # order the structure declarations in defined-first order for the compiler # not to barf; too bad tsort doesn't take arguments. diff --git a/contrib/tcpdump/mib.h b/contrib/tcpdump/mib.h index 6c8e63c978b5..4f83e6b89125 100644 --- a/contrib/tcpdump/mib.h +++ b/contrib/tcpdump/mib.h @@ -765,13 +765,13 @@ _icmpInParmProbs_obj = { "icmpInParmProbs", 5, 0, NULL, &_icmpInTimeExcds_obj }, -_icmpInSrcQuenchs_obj = { - "icmpInSrcQuenchs", 6, 0, +_icmpInSrcQuenches_obj = { + "icmpInSrcQuenches", 6, 0, NULL, &_icmpInParmProbs_obj }, _icmpInRedirects_obj = { "icmpInRedirects", 7, 0, - NULL, &_icmpInSrcQuenchs_obj + NULL, &_icmpInSrcQuenches_obj }, _icmpInEchos_obj = { "icmpInEchos", 8, 0, @@ -817,13 +817,13 @@ _icmpOutParmProbs_obj = { "icmpOutParmProbs", 18, 0, NULL, &_icmpOutTimeExcds_obj }, -_icmpOutSrcQuenchs_obj = { - "icmpOutSrcQuenchs", 19, 0, +_icmpOutSrcQuenches_obj = { + "icmpOutSrcQuenches", 19, 0, NULL, &_icmpOutParmProbs_obj }, _icmpOutRedirects_obj = { "icmpOutRedirects", 20, 0, - NULL, &_icmpOutSrcQuenchs_obj + NULL, &_icmpOutSrcQuenches_obj }, _icmpOutEchos_obj = { "icmpOutEchos", 21, 0, diff --git a/contrib/tcpdump/missing/datalinks.c b/contrib/tcpdump/missing/datalinks.c index 17f60bec5b54..8b458363c430 100644 --- a/contrib/tcpdump/missing/datalinks.c +++ b/contrib/tcpdump/missing/datalinks.c @@ -31,9 +31,7 @@ * SUCH DAMAGE. */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include <netdissect-stdinc.h> diff --git a/contrib/tcpdump/missing/dlnames.c b/contrib/tcpdump/missing/dlnames.c index 03c2b38c1b7f..87cfb382865d 100644 --- a/contrib/tcpdump/missing/dlnames.c +++ b/contrib/tcpdump/missing/dlnames.c @@ -31,9 +31,7 @@ * SUCH DAMAGE. */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include <netdissect-stdinc.h> diff --git a/contrib/tcpdump/missing/getopt_long.c b/contrib/tcpdump/missing/getopt_long.c index ece000623534..e9b1ef5770a1 100644 --- a/contrib/tcpdump/missing/getopt_long.c +++ b/contrib/tcpdump/missing/getopt_long.c @@ -419,8 +419,7 @@ start: permute_args(nonopt_start, nonopt_end, optind, nargv); optind -= nonopt_end - nonopt_start; - } - else if (nonopt_start != -1) { + } else if (nonopt_start != -1) { /* * If we skipped non-options, set optind * to the first of them. diff --git a/contrib/tcpdump/missing/getservent.c b/contrib/tcpdump/missing/getservent.c index 39cee068a69b..4da24800fd7d 100644 --- a/contrib/tcpdump/missing/getservent.c +++ b/contrib/tcpdump/missing/getservent.c @@ -34,9 +34,7 @@ * SUCH DAMAGE. */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include <netdissect-stdinc.h> #include <getservent.h> diff --git a/contrib/tcpdump/missing/snprintf.c b/contrib/tcpdump/missing/snprintf.c index dfff6ee08861..52eb9a61ca66 100644 --- a/contrib/tcpdump/missing/snprintf.c +++ b/contrib/tcpdump/missing/snprintf.c @@ -31,9 +31,7 @@ * SUCH DAMAGE. */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include <stdio.h> #include <stdarg.h> diff --git a/contrib/tcpdump/missing/strlcat.c b/contrib/tcpdump/missing/strlcat.c index fab7d04f3e8e..9b64465088c0 100644 --- a/contrib/tcpdump/missing/strlcat.c +++ b/contrib/tcpdump/missing/strlcat.c @@ -28,9 +28,7 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include <netdissect-stdinc.h> diff --git a/contrib/tcpdump/missing/strlcpy.c b/contrib/tcpdump/missing/strlcpy.c index 9a0b6e6a54b7..00792bc1b9d5 100644 --- a/contrib/tcpdump/missing/strlcpy.c +++ b/contrib/tcpdump/missing/strlcpy.c @@ -28,9 +28,7 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include <netdissect-stdinc.h> diff --git a/contrib/tcpdump/missing/strsep.c b/contrib/tcpdump/missing/strsep.c index 05f10bccff92..a07660c4bab2 100644 --- a/contrib/tcpdump/missing/strsep.c +++ b/contrib/tcpdump/missing/strsep.c @@ -31,9 +31,7 @@ * SUCH DAMAGE. */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include <netdissect-stdinc.h> diff --git a/contrib/tcpdump/mkdep b/contrib/tcpdump/mkdep index caf547e2f643..dc0a11ea9273 100755 --- a/contrib/tcpdump/mkdep +++ b/contrib/tcpdump/mkdep @@ -1,4 +1,4 @@ -#!/bin/sh - +#!/bin/sh -e # # Copyright (c) 1994, 1996 # The Regents of the University of California. All rights reserved. @@ -63,20 +63,20 @@ if [ $# = 0 ] ; then exit 1 fi -if [ ! -w $MAKE ]; then +if [ ! -w "$MAKE" ]; then echo "mkdep: no writeable file \"$MAKE\"" exit 1 fi -TMP=/tmp/mkdep$$ +TMP=${TMPDIR:-/tmp}/mkdep$$ -trap 'rm -f $TMP ; exit 1' 1 2 3 13 15 +trap 'rm -f "$TMP" ; exit 1' HUP INT QUIT PIPE TERM -cp $MAKE ${MAKE}.bak +cp "$MAKE" "${MAKE}.bak" -sed -e '/DO NOT DELETE THIS LINE/,$d' < $MAKE > $TMP +sed -e '/DO NOT DELETE THIS LINE/,$d' < "$MAKE" > "$TMP" -cat << _EOF_ >> $TMP +cat << _EOF_ >> "$TMP" # DO NOT DELETE THIS LINE -- mkdep uses it. # DO NOT PUT ANYTHING AFTER THIS LINE, IT WILL GO AWAY. @@ -94,23 +94,25 @@ _EOF_ # Construct a list of source files with paths relative to the source directory. # sources="" -for srcfile in $* +for srcfile in "$@" do sources="$sources $SOURCE_DIRECTORY/$srcfile" done # XXX this doesn't work with things like "-DDECLWAITSTATUS=union\ wait" -$CC $DEPENDENCY_CFLAG $flags $sources | +# $flags and $sources are meant to expand +# shellcheck disable=SC2086 +"$CC" "$DEPENDENCY_CFLAG" $flags $sources | sed " s; \./; ;g - $SED" >> $TMP + $SED" >> "$TMP" -cat << _EOF_ >> $TMP +cat << _EOF_ >> "$TMP" # IF YOU PUT ANYTHING HERE IT WILL GO AWAY _EOF_ # copy to preserve permissions -cp $TMP $MAKE -rm -f ${MAKE}.bak $TMP +cp "$TMP" "$MAKE" +rm -f "${MAKE}.bak" "$TMP" exit 0 diff --git a/contrib/tcpdump/nameser.h b/contrib/tcpdump/nameser.h index 2a1854fdf4f1..08b680e01abc 100644 --- a/contrib/tcpdump/nameser.h +++ b/contrib/tcpdump/nameser.h @@ -87,7 +87,7 @@ #define UPDATEMA 0xd /* modify all named resource record */ #define ZONEINIT 0xe /* initial zone transfer */ -#define ZONEREF 0xf /* incremental zone referesh */ +#define ZONEREF 0xf /* incremental zone refresh */ /* * Undefine various #defines from various System V-flavored OSes (Solaris, @@ -112,7 +112,7 @@ #define NOERROR 0 /* no error */ #define FORMERR 1 /* format error */ #define SERVFAIL 2 /* server failure */ -#define NXDOMAIN 3 /* non existent domain */ +#define NXDOMAIN 3 /* nonexistent domain */ #define NOTIMP 4 /* not implemented */ #define REFUSED 5 /* query refused */ /* non standard */ @@ -125,7 +125,7 @@ #define T_NS 2 /* authoritative server */ #define T_MD 3 /* mail destination */ #define T_MF 4 /* mail forwarder */ -#define T_CNAME 5 /* connonical name */ +#define T_CNAME 5 /* canonical name */ #define T_SOA 6 /* start of authority zone */ #define T_MB 7 /* mailbox domain name */ #define T_MG 8 /* mail group member */ @@ -182,7 +182,7 @@ #define T_CDS 59 /* Child Delegation Signer */ #define T_CDNSKEY 60 /* Child DNSKEY */ #define T_OPENPGPKEY 61 /* OpenPGP KEY */ -#define T_CSYNC 62 /* Child to parent SYNCronization */ +#define T_CSYNC 62 /* Child to parent SYNChronization */ #define T_ZONEMD 63 /* ZONE data Message Digest */ #define T_SVCB 64 /* SerViCe Binding */ #define T_HTTPS 65 /* HTTPS binding */ diff --git a/contrib/tcpdump/netdissect-alloc.c b/contrib/tcpdump/netdissect-alloc.c index c625d34ec3b0..a73c77f805a2 100644 --- a/contrib/tcpdump/netdissect-alloc.c +++ b/contrib/tcpdump/netdissect-alloc.c @@ -14,9 +14,7 @@ * FOR A PARTICULAR PURPOSE. */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include <stdlib.h> #include "netdissect-alloc.h" diff --git a/contrib/tcpdump/netdissect.c b/contrib/tcpdump/netdissect.c index 000d1ffce8c2..e78ccbc72b52 100644 --- a/contrib/tcpdump/netdissect.c +++ b/contrib/tcpdump/netdissect.c @@ -22,9 +22,7 @@ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include "netdissect.h" @@ -299,3 +297,17 @@ nd_pop_all_packet_info(netdissect_options *ndo) while (ndo->ndo_packet_info_stack != NULL) nd_pop_packet_info(ndo); } + +NORETURN void +nd_trunc_longjmp(netdissect_options *ndo) +{ + longjmp(ndo->ndo_early_end, ND_TRUNCATED); +#ifdef _AIX + /* + * In AIX <setjmp.h> decorates longjmp() with "#pragma leaves", which tells + * XL C that the function is noreturn, but GCC remains unaware of that and + * yields a "'noreturn' function does return" warning. + */ + ND_UNREACHABLE +#endif /* _AIX */ +} diff --git a/contrib/tcpdump/netdissect.h b/contrib/tcpdump/netdissect.h index 7696c4e41cd8..95d17b3db8b7 100644 --- a/contrib/tcpdump/netdissect.h +++ b/contrib/tcpdump/netdissect.h @@ -30,6 +30,7 @@ #endif #include <sys/types.h> #include <setjmp.h> +#include <time.h> #include "status-exit-codes.h" #include "funcattrs.h" /* for PRINTFLIKE_FUNCPTR() */ #include "diag-control.h" /* for ND_UNREACHABLE */ @@ -58,9 +59,16 @@ typedef signed char nd_int8_t[1]; /* * "unsigned char" so that sign extension isn't done on the - * individual bytes while they're being assembled. + * individual bytes while they're being assembled. Use + * GET_S_BE_n() and GET_S_LE_n() macros to extract the value + * as a signed integer. */ +typedef unsigned char nd_int16_t[2]; +typedef unsigned char nd_int24_t[3]; typedef unsigned char nd_int32_t[4]; +typedef unsigned char nd_int40_t[5]; +typedef unsigned char nd_int48_t[6]; +typedef unsigned char nd_int56_t[7]; typedef unsigned char nd_int64_t[8]; #define FMAXINT (4294967296.0) /* floating point rep. of MAXINT */ @@ -268,19 +276,10 @@ extern void nd_change_snaplen(netdissect_options *, const u_char *, const u_int) extern void nd_pop_packet_info(netdissect_options *); extern void nd_pop_all_packet_info(netdissect_options *); -static inline NORETURN void -nd_trunc_longjmp(netdissect_options *ndo) -{ - longjmp(ndo->ndo_early_end, ND_TRUNCATED); -#ifdef _AIX - /* - * In AIX <setjmp.h> decorates longjmp() with "#pragma leaves", which tells - * XL C that the function is noreturn, but GCC remains unaware of that and - * yields a "'noreturn' function does return" warning. - */ - ND_UNREACHABLE -#endif /* _AIX */ -} +/* + * Report a packet truncation with a longjmp(). + */ +NORETURN void nd_trunc_longjmp(netdissect_options *ndo); #define PT_VAT 1 /* Visual Audio Tool */ #define PT_WB 2 /* distributed White Board */ @@ -386,35 +385,47 @@ nd_trunc_longjmp(netdissect_options *ndo) /* * Number of bytes between two pointers. */ -#define ND_BYTES_BETWEEN(p1, p2) ((u_int)(((const uint8_t *)(p1)) - (const uint8_t *)(p2))) +#define ND_BYTES_BETWEEN(p1, p2) ((const u_char *)(p1) >= (const u_char *)(p2) ? 0 : ((u_int)(((const u_char *)(p2)) - (const u_char *)(p1)))) /* * Number of bytes remaining in the captured data, starting at the * byte pointed to by the argument. */ -#define ND_BYTES_AVAILABLE_AFTER(p) ND_BYTES_BETWEEN(ndo->ndo_snapend, (p)) +#define ND_BYTES_AVAILABLE_AFTER(p) ((const u_char *)(p) < ndo->ndo_packetp ? 0 : ND_BYTES_BETWEEN((p), ndo->ndo_snapend)) -/* Check length < minimum for invalid packet with a custom message, format %u */ -#define ND_LCHECKMSG_U(length, minimum, what) \ -if ((length) < (minimum)) { \ -ND_PRINT(" [%s %u < %u]", (what), (length), (minimum)); \ +/* + * Check (expression_1 operator expression_2) for invalid packet with + * a custom message, format %u + */ +#define ND_ICHECKMSG_U(message, expression_1, operator, expression_2) \ +if ((expression_1) operator (expression_2)) { \ +ND_PRINT(" [%s %u %s %u]", (message), (expression_1), (#operator), (expression_2)); \ goto invalid; \ } -/* Check length < minimum for invalid packet with #length message, format %u */ -#define ND_LCHECK_U(length, minimum) \ -ND_LCHECKMSG_U((length), (minimum), (#length)) +/* + * Check (expression_1 operator expression_2) for invalid packet with + * "expression_1" message, format %u + */ +#define ND_ICHECK_U(expression_1, operator, expression_2) \ +ND_ICHECKMSG_U((#expression_1), (expression_1), operator, (expression_2)) -/* Check length < minimum for invalid packet with a custom message, format %zu */ -#define ND_LCHECKMSG_ZU(length, minimum, what) \ -if ((length) < (minimum)) { \ -ND_PRINT(" [%s %u < %zu]", (what), (length), (minimum)); \ +/* + * Check (expression_1 operator expression_2) for invalid packet with + * a custom message, format %zu + */ +#define ND_ICHECKMSG_ZU(message, expression_1, operator, expression_2) \ +if ((expression_1) operator (expression_2)) { \ +ND_PRINT(" [%s %u %s %zu]", (message), (expression_1), (#operator), (expression_2)); \ goto invalid; \ } -/* Check length < minimum for invalid packet with #length message, format %zu */ -#define ND_LCHECK_ZU(length, minimum) \ -ND_LCHECKMSG_ZU((length), (minimum), (#length)) +/* + * Check (expression_1 operator expression_2) for invalid packet with + * "expression_1" message, format %zu + */ +#define ND_ICHECK_ZU(expression_1, operator, expression_2) \ +ND_ICHECKMSG_ZU((#expression_1), (expression_1), operator, (expression_2)) #define ND_PRINT(...) (ndo->ndo_printf)(ndo, __VA_ARGS__) #define ND_DEFAULTPRINT(ap, length) (*ndo->ndo_default_print)(ndo, ap, length) @@ -430,6 +441,7 @@ extern void fn_print_char(netdissect_options *, u_char); extern void fn_print_str(netdissect_options *, const u_char *); extern u_int nd_printztn(netdissect_options *, const u_char *, u_int, const u_char *); extern int nd_printn(netdissect_options *, const u_char *, u_int, const u_char *); +extern void nd_printjn(netdissect_options *, const u_char *, u_int); extern void nd_printjnp(netdissect_options *, const u_char *, u_int); /* @@ -645,7 +657,7 @@ extern void igmp_print(netdissect_options *, const u_char *, u_int); extern void igrp_print(netdissect_options *, const u_char *, u_int); extern void ip6_print(netdissect_options *, const u_char *, u_int); extern void ipN_print(netdissect_options *, const u_char *, u_int); -extern void ip_print(netdissect_options *, const u_char *, u_int); +extern void ip_print(netdissect_options *, const u_char *, const u_int); extern void ipcomp_print(netdissect_options *, const u_char *); extern void ipx_netbios_print(netdissect_options *, const u_char *, u_int); extern void ipx_print(netdissect_options *, const u_char *, u_int); @@ -754,7 +766,6 @@ extern void zmtp1_datagram_print(netdissect_options *, const u_char *, const u_i extern void someip_print(netdissect_options *, const u_char *, const u_int); /* checksum routines */ -extern void init_checksum(void); extern uint16_t verify_crc10_cksum(uint16_t, const u_char *, int); extern uint16_t create_osi_cksum(const uint8_t *, int, int); diff --git a/contrib/tcpdump/nlpid.c b/contrib/tcpdump/nlpid.c index 59f6e598aad5..3f431e73d68a 100644 --- a/contrib/tcpdump/nlpid.c +++ b/contrib/tcpdump/nlpid.c @@ -13,9 +13,7 @@ * Original code by Hannes Gredler (hannes@gredler.at) */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include "netdissect.h" diff --git a/contrib/tcpdump/ntp.c b/contrib/tcpdump/ntp.c index ec8f659a4eb0..967644e0e1b9 100644 --- a/contrib/tcpdump/ntp.c +++ b/contrib/tcpdump/ntp.c @@ -20,9 +20,7 @@ * */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "ntp.h" diff --git a/contrib/tcpdump/oui.c b/contrib/tcpdump/oui.c index 25d08e213ece..9b9c71cafb20 100644 --- a/contrib/tcpdump/oui.c +++ b/contrib/tcpdump/oui.c @@ -13,9 +13,7 @@ * Original code by Hannes Gredler (hannes@gredler.at) */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include "netdissect.h" diff --git a/contrib/tcpdump/parsenfsfh.c b/contrib/tcpdump/parsenfsfh.c index cd9436992d77..15e9bcd01634 100644 --- a/contrib/tcpdump/parsenfsfh.c +++ b/contrib/tcpdump/parsenfsfh.c @@ -40,14 +40,13 @@ * Western Research Laboratory */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include <stdio.h> #include <string.h> +#include <limits.h> #include "netdissect-ctype.h" @@ -138,8 +137,7 @@ Parse_fh(netdissect_options *ndo, const unsigned char *fh, u_int len, /* bytes[2,3] == (0,0); must be Auspex */ /* XXX or could be Ultrix+MASSBUS "hp" disk? */ fhtype = FHT_AUSPEX; - } - else { + } else { /* * bytes[2,3] != (0,0); rules out Auspex, could be * DECOSF, SUNOS4, or IRIX4 @@ -148,23 +146,20 @@ Parse_fh(netdissect_options *ndo, const unsigned char *fh, u_int len, (GET_U_1(fhp + 8) == 12) && (GET_U_1(fhp + 9) == 0)) { /* seems to be DECOSF, with minor == 0 */ fhtype = FHT_DECOSF; - } - else { + } else { /* could be SUNOS4 or IRIX4 */ /* XXX the test of fhp[5] == 8 could be wrong */ if ((GET_U_1(fhp + 4) == 0) && (GET_U_1(fhp + 5) == 8) && (GET_U_1(fhp + 6) == 0) && (GET_U_1(fhp + 7) == 0)) { /* looks like a length, not a file system typecode */ fhtype = FHT_IRIX4; - } - else { + } else { /* by elimination */ fhtype = FHT_SUNOS4; } } } - } - else { + } else { /* * bytes[0,1] != (0,0); rules out Auspex, IRIX4, SUNOS4 * could be IRIX5, DECOSF, UCX, Ultrix, SUNOS5 @@ -183,35 +178,30 @@ Parse_fh(netdissect_options *ndo, const unsigned char *fh, u_int len, /*XXX we probably only need to test of these two bytes */ else if ((len >= 24/4) && (GET_U_1(fhp + 21) == 0) && (GET_U_1(fhp + 23) == 0)) { fhtype = FHT_ULTRIX; - } - else { + } else { /* Could be SUNOS5/IRIX5, maybe AIX */ /* XXX no obvious difference between SUNOS5 and IRIX5 */ if (GET_U_1(fhp + 9) == 10) fhtype = FHT_SUNOS5; /* XXX what about AIX? */ } - } - else { + } else { /* * bytes[2,3] != (0,0); rules out Ultrix, could be * DECOSF, SUNOS5, IRIX5, AIX, HP-UX, or UCX */ if ((GET_U_1(fhp + 8) == 12) && (GET_U_1(fhp + 9) == 0)) { fhtype = FHT_DECOSF; - } - else if ((GET_U_1(fhp + 8) == 0) && (GET_U_1(fhp + 9) == 10)) { + } else if ((GET_U_1(fhp + 8) == 0) && (GET_U_1(fhp + 9) == 10)) { /* could be SUNOS5/IRIX5, AIX, HP-UX */ if ((GET_U_1(fhp + 7) == 0) && (GET_U_1(fhp + 6) == 0) && (GET_U_1(fhp + 5) == 0) && (GET_U_1(fhp + 4) == 0)) { /* XXX is this always true of HP-UX? */ fhtype = FHT_HPUX9; - } - else if (GET_U_1(fhp + 7) == 2) { + } else if (GET_U_1(fhp + 7) == 2) { /* This would be MNT_NFS on AIX, which is impossible */ fhtype = FHT_SUNOS5; /* or maybe IRIX5 */ - } - else { + } else { /* * XXX Could be SUNOS5/IRIX5 or AIX. I don't * XXX see any way to disambiguate these, so @@ -220,12 +210,10 @@ Parse_fh(netdissect_options *ndo, const unsigned char *fh, u_int len, */ fhtype = FHT_SUNOS5; /* or maybe IRIX5 */ } - } - else { + } else { if (is_UCX(ndo, fhp, len)) { fhtype = FHT_VMSUCX; - } - else { + } else { fhtype = FHT_UNKNOWN; } } @@ -346,8 +334,7 @@ Parse_fh(netdissect_options *ndo, const unsigned char *fh, u_int len, memset((char *)fsidp, 0, sizeof(*fsidp)); /* just use the whole thing */ memcpy((char *)fsidp, (const char *)fh, 14); - } - else { + } else { uint32_t tempa[4]; /* at least 16 bytes, maybe more */ memset((char *)tempa, 0, sizeof(tempa)); @@ -401,6 +388,7 @@ Parse_fh(netdissect_options *ndo, const unsigned char *fh, u_int len, (void)fprintf(stderr, "\n"); #endif /* Save the actual handle, so it can be display with -u */ + /* XXX really ? When -u is used this function is not called */ for (i = 0; i < len*4 && i*2 < sizeof(fsidp->Opaque_Handle) - 1; i++) (void)snprintf(&(fsidp->Opaque_Handle[i*2]), 3, "%.2X", GET_U_1(fhp + i)); @@ -408,11 +396,12 @@ Parse_fh(netdissect_options *ndo, const unsigned char *fh, u_int len, /* XXX for now, give "bogus" values to aid debugging */ fsidp->fsid_code = 0; - fsidp->Fsid_dev.Minor = 257; - fsidp->Fsid_dev.Major = 257; + fsidp->Fsid_dev.Minor = UINT_MAX; + fsidp->Fsid_dev.Major = UINT_MAX; *inop = 1; - /* display will show this string instead of (257,257) */ + /* display will show this string instead of (UINT_MAX,UINT_MAX) */ + /* XXX really ? */ if (fsnamep) *fsnamep = "Unknown"; @@ -449,12 +438,10 @@ is_UCX(netdissect_options *ndo, const unsigned char *fhp, u_int len) return(0); else continue; - } - else if (GET_U_1(fhp + i) == 0) { + } else if (GET_U_1(fhp + i) == 0) { seen_null = 1; continue; - } - else + } else return(0); } diff --git a/contrib/tcpdump/pflog.h b/contrib/tcpdump/pflog.h index aae7d06f746f..f5ffebf50b4a 100644 --- a/contrib/tcpdump/pflog.h +++ b/contrib/tcpdump/pflog.h @@ -116,37 +116,36 @@ struct pf_addr { }; struct pfloghdr { - uint8_t length; - uint8_t af; - uint8_t action; - uint8_t reason; + nd_uint8_t length; + nd_uint8_t af; + nd_uint8_t action; + nd_uint8_t reason; char ifname[PFLOG_IFNAMSIZ]; char ruleset[PFLOG_RULESET_NAME_SIZE]; - uint32_t rulenr; - uint32_t subrulenr; - uint32_t uid; - int32_t pid; - uint32_t rule_uid; - int32_t rule_pid; - uint8_t dir; + nd_uint32_t rulenr; + nd_uint32_t subrulenr; + nd_uint32_t uid; + nd_int32_t pid; + nd_uint32_t rule_uid; + nd_int32_t rule_pid; + nd_uint8_t dir; +/* Minimum header length (without padding): 61 */ +#define MIN_PFLOG_HDRLEN 61 #if defined(__OpenBSD__) - uint8_t rewritten; - uint8_t naf; - uint8_t pad[1]; + nd_uint8_t rewritten; + nd_uint8_t naf; + nd_uint8_t pad[1]; #else - uint8_t pad[3]; + nd_uint8_t pad[3]; #endif #if defined(__FreeBSD__) - uint32_t ridentifier; - uint8_t reserve; - uint8_t pad2[3]; + nd_uint32_t ridentifier; + nd_uint8_t reserve; + nd_uint8_t pad2[3]; #elif defined(__OpenBSD__) struct pf_addr saddr; struct pf_addr daddr; - uint16_t sport; - uint16_t dport; + nd_uint16_t sport; + nd_uint16_t dport; #endif }; - - - diff --git a/contrib/tcpdump/print-802_11.c b/contrib/tcpdump/print-802_11.c index 737b15028a67..31c23bfca02f 100644 --- a/contrib/tcpdump/print-802_11.c +++ b/contrib/tcpdump/print-802_11.c @@ -22,9 +22,7 @@ /* \summary: IEEE 802.11 printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -67,7 +65,7 @@ #define IEEE802_11_STATUS_LEN 2 #define IEEE802_11_REASON_LEN 2 -/* Length of previous AP in reassocation frame */ +/* Length of previous AP in reassociation frame */ #define IEEE802_11_AP_LEN 6 #define T_MGMT 0x0 /* management */ @@ -193,26 +191,22 @@ struct mgmt_header_t { #define CAPABILITY_PRIVACY(cap) ((cap) & 0x0010) struct ssid_t { - uint8_t element_id; - uint8_t length; + u_int length; u_char ssid[33]; /* 32 + 1 for null */ }; struct rates_t { - uint8_t element_id; - uint8_t length; + u_int length; uint8_t rate[16]; }; struct challenge_t { - uint8_t element_id; - uint8_t length; + u_int length; uint8_t text[254]; /* 1-253 + 1 for null */ }; struct fh_t { - uint8_t element_id; - uint8_t length; + u_int length; uint16_t dwell_time; uint8_t hop_set; uint8_t hop_pattern; @@ -220,14 +214,12 @@ struct fh_t { }; struct ds_t { - uint8_t element_id; - uint8_t length; + u_int length; uint8_t channel; }; struct cf_t { - uint8_t element_id; - uint8_t length; + u_int length; uint8_t count; uint8_t period; uint16_t max_duration; @@ -235,8 +227,7 @@ struct cf_t { }; struct tim_t { - uint8_t element_id; - uint8_t length; + u_int length; uint8_t count; uint8_t period; uint8_t bitmap_control; @@ -369,9 +360,11 @@ struct ctrl_ba_hdr_t { nd_uint16_t fc; nd_uint16_t duration; nd_mac_addr ra; + nd_mac_addr ta; }; -#define CTRL_BA_HDRLEN (IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+IEEE802_11_RA_LEN) +#define CTRL_BA_HDRLEN (IEEE802_11_FC_LEN+IEEE802_11_DUR_LEN+\ + IEEE802_11_RA_LEN+IEEE802_11_TA_LEN) struct ctrl_bar_hdr_t { nd_uint16_t fc; @@ -410,15 +403,15 @@ struct meshcntl_t { ND_PRINT("%s%2.1f%s", _sep, (.5 * ((_r) & 0x7f)), _suf) #define PRINT_RATES(p) \ if (p.rates_present) { \ - int z; \ const char *sep = " ["; \ - for (z = 0; z < p.rates.length ; z++) { \ - PRINT_RATE(sep, p.rates.rate[z], \ - (p.rates.rate[z] & 0x80 ? "*" : "")); \ - sep = " "; \ - } \ - if (p.rates.length != 0) \ + if (p.rates.length != 0) { \ + for (u_int z = 0; z < p.rates.length ; z++) { \ + PRINT_RATE(sep, p.rates.rate[z], \ + (p.rates.rate[z] & 0x80 ? "*" : "")); \ + sep = " "; \ + } \ ND_PRINT(" Mbit]"); \ + } \ } #define PRINT_DS_CHANNEL(p) \ @@ -1170,7 +1163,7 @@ parse_elements(netdissect_options *ndo, switch (GET_U_1(p + offset)) { case E_SSID: - memcpy(&ssid, p + offset, 2); + ssid.length = elementlen; offset += 2; length -= 2; if (ssid.length != 0) { @@ -1194,7 +1187,7 @@ parse_elements(netdissect_options *ndo, } break; case E_CHALLENGE: - memcpy(&challenge, p + offset, 2); + challenge.length = elementlen; offset += 2; length -= 2; if (challenge.length != 0) { @@ -1220,7 +1213,7 @@ parse_elements(netdissect_options *ndo, } break; case E_RATES: - memcpy(&rates, p + offset, 2); + rates.length = elementlen; offset += 2; length -= 2; if (rates.length != 0) { @@ -1252,7 +1245,7 @@ parse_elements(netdissect_options *ndo, } break; case E_DS: - memcpy(&ds, p + offset, 2); + ds.length = elementlen; offset += 2; length -= 2; if (ds.length != 1) { @@ -1276,7 +1269,7 @@ parse_elements(netdissect_options *ndo, } break; case E_CF: - memcpy(&cf, p + offset, 2); + cf.length = elementlen; offset += 2; length -= 2; if (cf.length != 6) { @@ -1309,7 +1302,7 @@ parse_elements(netdissect_options *ndo, } break; case E_TIM: - memcpy(&tim, p + offset, 2); + tim.length = elementlen; offset += 2; length -= 2; if (tim.length <= 3U) { @@ -1749,7 +1742,7 @@ handle_action(netdissect_options *ndo, case 7: ND_PRINT("HT "); PRINT_HT_ACTION(GET_U_1(p + 1)); break; case 13: ND_PRINT("MeshAction "); PRINT_MESH_ACTION(GET_U_1(p + 1)); break; case 14: - ND_PRINT("MultiohopAction "); + ND_PRINT("MultihopAction"); PRINT_MULTIHOP_ACTION(GET_U_1(p + 1)); break; case 15: ND_PRINT("SelfprotectAction "); @@ -2017,8 +2010,9 @@ ctrl_header_print(netdissect_options *ndo, uint16_t fc, const u_char *p) GET_LE_U_2(((const struct ctrl_bar_hdr_t *)p)->seq)); break; case CTRL_BA: - ND_PRINT("RA:%s ", - GET_ETHERADDR_STRING(((const struct ctrl_ba_hdr_t *)p)->ra)); + ND_PRINT("RA:%s TA:%s ", + GET_ETHERADDR_STRING(((const struct ctrl_ba_hdr_t *)p)->ra), + GET_ETHERADDR_STRING(((const struct ctrl_ba_hdr_t *)p)->ta)); break; case CTRL_PS_POLL: ND_PRINT("BSSID:%s TA:%s ", diff --git a/contrib/tcpdump/print-802_15_4.c b/contrib/tcpdump/print-802_15_4.c index fd75b1595622..2efcf94b4c77 100644 --- a/contrib/tcpdump/print-802_15_4.c +++ b/contrib/tcpdump/print-802_15_4.c @@ -22,9 +22,7 @@ /* \summary: IEEE 802.15.4 printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -250,7 +248,7 @@ static const char *p_mlme_short_names[] = { "TVWS PHY Operating Mode Description IE", /* 0x2b */ "TVWS Device Capabilities IE", /* 0x2c */ "TVWS Device Category IE", /* 0x2d */ - "TVWS Device Identiication IE", /* 0x2e */ + "TVWS Device Identification IE", /* 0x2e */ "TVWS Device Location IE", /* 0x2f */ "TVWS Channel Information Query IE", /* 0x30 */ "TVWS Channel Information Source IE", /* 0x31 */ @@ -418,7 +416,7 @@ static const char *mac_c_names[] = { #define FC_ADDRESSING_MODE_LONG 0x03 /* - * IEEE 802.15.4 CRC 16 function. This is using CCITT polynomical of 0x1021, + * IEEE 802.15.4 CRC 16 function. This is using the CCITT polynomial of 0x1021, * but the initial value is 0, and the bits are reversed for both in and out. * See section 7.2.10 of 802.15.4-2015 for more information. */ @@ -470,7 +468,7 @@ ieee802_15_4_reverse32(uint32_t x) } /* - * IEEE 802.15.4 CRC 32 function. This is using ANSI X3.66-1979 polynomical of + * IEEE 802.15.4 CRC 32 function. This is using the ANSI X3.66-1979 polynomial of * 0x04C11DB7, but the initial value is 0, and the bits are reversed for both * in and out. See section 7.2.10 of 802.15.4-2015 for more information. */ @@ -1299,11 +1297,11 @@ ieee802_15_4_print_mlme_ie_list(netdissect_options *ndo, ND_PRINT("] "); p += sub_ie_len; ie_len -= 2 + sub_ie_len; - } while (ie_len > 0); + } while (ie_len != 0); } /* - * Multiplexd IE (802.15.9) parsing and printing. + * Multiplexed IE (802.15.9) parsing and printing. * * Returns number of bytes consumed from packet or -1 in case of error. */ @@ -1502,7 +1500,7 @@ ieee802_15_4_print_payload_ie_list(netdissect_options *ndo, if (group_id == 0xf) { break; } - } while (caplen > 0); + } while (caplen != 0); return len; } @@ -1664,7 +1662,7 @@ ieee802_15_4_print_command_data(netdissect_options *ndo, return caplen; } break; - case 0x03: /* Diassociation Notification command */ + case 0x03: /* Disassociation Notification command */ if (caplen != 1) { ND_PRINT("Invalid Disassociation Notification command length"); return -1; @@ -2038,19 +2036,19 @@ ieee802_15_4_std_frames(netdissect_options *ndo, } switch (security_level) { - case 0: /*FALLTHOUGH */ + case 0: /*FALLTHROUGH */ case 4: miclen = 0; break; - case 1: /*FALLTHOUGH */ + case 1: /*FALLTHROUGH */ case 5: miclen = 4; break; - case 2: /*FALLTHOUGH */ + case 2: /*FALLTHROUGH */ case 6: miclen = 8; break; - case 3: /*FALLTHOUGH */ + case 3: /*FALLTHROUGH */ case 7: miclen = 16; break; @@ -2360,19 +2358,19 @@ ieee802_15_4_mp_frame(netdissect_options *ndo, } switch (security_level) { - case 0: /*FALLTHOUGH */ + case 0: /*FALLTHROUGH */ case 4: miclen = 0; break; - case 1: /*FALLTHOUGH */ + case 1: /*FALLTHROUGH */ case 5: miclen = 4; break; - case 2: /*FALLTHOUGH */ + case 2: /*FALLTHROUGH */ case 6: miclen = 8; break; - case 3: /*FALLTHOUGH */ + case 3: /*FALLTHROUGH */ case 7: miclen = 16; break; diff --git a/contrib/tcpdump/print-ah.c b/contrib/tcpdump/print-ah.c index a3d05544c2d7..3b3a792133c2 100644 --- a/contrib/tcpdump/print-ah.c +++ b/contrib/tcpdump/print-ah.c @@ -23,9 +23,7 @@ /* \summary: IPSEC Authentication Header printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-ahcp.c b/contrib/tcpdump/print-ahcp.c index d57edda9e090..d2efc7f86bd8 100644 --- a/contrib/tcpdump/print-ahcp.c +++ b/contrib/tcpdump/print-ahcp.c @@ -29,9 +29,7 @@ /* Based on draft-chroboczek-ahcp-00 and source code of ahcpd-0.53 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-aodv.c b/contrib/tcpdump/print-aodv.c index 97421433f7f4..b69f546e0bcf 100644 --- a/contrib/tcpdump/print-aodv.c +++ b/contrib/tcpdump/print-aodv.c @@ -32,9 +32,7 @@ /* \summary: Ad hoc On-Demand Distance Vector (AODV) Routing printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-aoe.c b/contrib/tcpdump/print-aoe.c index 0cd4299a7a6b..cca8c79108fd 100644 --- a/contrib/tcpdump/print-aoe.c +++ b/contrib/tcpdump/print-aoe.c @@ -31,9 +31,7 @@ * https://web.archive.org/web/20161025044402/http://brantleycoilecompany.com/AoEr11.pdf */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-ap1394.c b/contrib/tcpdump/print-ap1394.c index b1988f270650..3e0cd19f8758 100644 --- a/contrib/tcpdump/print-ap1394.c +++ b/contrib/tcpdump/print-ap1394.c @@ -21,9 +21,7 @@ /* \summary: Apple IP-over-IEEE 1394 printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-arcnet.c b/contrib/tcpdump/print-arcnet.c index 5f6aaf9c4308..d7fce713a525 100644 --- a/contrib/tcpdump/print-arcnet.c +++ b/contrib/tcpdump/print-arcnet.c @@ -23,9 +23,7 @@ /* \summary: Attached Resource Computer NETwork (ARCNET) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-arista.c b/contrib/tcpdump/print-arista.c index 079ad684bc11..6d00956aeeb0 100644 --- a/contrib/tcpdump/print-arista.c +++ b/contrib/tcpdump/print-arista.c @@ -2,9 +2,7 @@ /* \summary: EtherType protocol for Arista Networks printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-arp.c b/contrib/tcpdump/print-arp.c index 9c085029242c..dd4cf3b5507a 100644 --- a/contrib/tcpdump/print-arp.c +++ b/contrib/tcpdump/print-arp.c @@ -21,9 +21,7 @@ /* \summary: Address Resolution Protocol (ARP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-ascii.c b/contrib/tcpdump/print-ascii.c index a1dc4eb15ac0..f379c6c43678 100644 --- a/contrib/tcpdump/print-ascii.c +++ b/contrib/tcpdump/print-ascii.c @@ -38,9 +38,7 @@ /* \summary: ASCII packet dump printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -67,7 +65,7 @@ ascii_print(netdissect_options *ndo, int truncated = FALSE; ndo->ndo_protocol = "ascii"; - caplength = (ndo->ndo_snapend > cp) ? ND_BYTES_AVAILABLE_AFTER(cp) : 0; + caplength = ND_BYTES_AVAILABLE_AFTER(cp); if (length > caplength) { length = caplength; truncated = TRUE; @@ -113,7 +111,7 @@ hex_and_ascii_print_with_offset(netdissect_options *ndo, const char *ident, char hexstuff[HEXDUMP_SHORTS_PER_LINE*HEXDUMP_HEXSTUFF_PER_SHORT+1], *hsp; char asciistuff[ASCII_LINELENGTH+1], *asp; - caplength = (ndo->ndo_snapend > cp) ? ND_BYTES_AVAILABLE_AFTER(cp) : 0; + caplength = ND_BYTES_AVAILABLE_AFTER(cp); if (length > caplength) { length = caplength; truncated = TRUE; @@ -181,7 +179,7 @@ hex_print_with_offset(netdissect_options *ndo, u_int nshorts; int truncated = FALSE; - caplength = (ndo->ndo_snapend > cp) ? ND_BYTES_AVAILABLE_AFTER(cp) : 0; + caplength = ND_BYTES_AVAILABLE_AFTER(cp); if (length > caplength) { length = caplength; truncated = TRUE; diff --git a/contrib/tcpdump/print-atalk.c b/contrib/tcpdump/print-atalk.c index d9f86c7255b0..1f067ed6053e 100644 --- a/contrib/tcpdump/print-atalk.c +++ b/contrib/tcpdump/print-atalk.c @@ -21,9 +21,7 @@ /* \summary: AppleTalk printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-atm.c b/contrib/tcpdump/print-atm.c index 904fc4792e92..2dee4e65e97a 100644 --- a/contrib/tcpdump/print-atm.c +++ b/contrib/tcpdump/print-atm.c @@ -21,9 +21,7 @@ /* \summary: Asynchronous Transfer Mode (ATM) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -106,7 +104,7 @@ #define B_BEARER 0x5e /* broadband bearer capability */ #define B_LOWER 0x5f /* broadband lower information */ #define CALLING_PARTY 0x6c /* calling party number */ -#define CALLED_PARTY 0x70 /* called party nmber */ +#define CALLED_PARTY 0x70 /* called party number */ #define Q2931 0x09 diff --git a/contrib/tcpdump/print-babel.c b/contrib/tcpdump/print-babel.c index d802a720f12f..cea7eedf0772 100644 --- a/contrib/tcpdump/print-babel.c +++ b/contrib/tcpdump/print-babel.c @@ -37,9 +37,7 @@ * draft-ietf-babel-source-specific-0 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-bcm-li.c b/contrib/tcpdump/print-bcm-li.c index 12b1ebbe20cc..5ecb9ff94cad 100644 --- a/contrib/tcpdump/print-bcm-li.c +++ b/contrib/tcpdump/print-bcm-li.c @@ -21,9 +21,7 @@ /* \summary: Broadcom LI Printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-beep.c b/contrib/tcpdump/print-beep.c index 76017eaf89dc..ec5b2f19e257 100644 --- a/contrib/tcpdump/print-beep.c +++ b/contrib/tcpdump/print-beep.c @@ -11,9 +11,7 @@ /* \summary: Blocks Extensible Exchange Protocol (BEEP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-bfd.c b/contrib/tcpdump/print-bfd.c index 8c047357db3e..a7c9a5621c77 100644 --- a/contrib/tcpdump/print-bfd.c +++ b/contrib/tcpdump/print-bfd.c @@ -20,9 +20,7 @@ * RFC 5880 for version 1, and RFC 5881 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -313,8 +311,7 @@ bfd_print(netdissect_options *ndo, const u_char *pptr, /* BFDv0 */ case 0: - if (ndo->ndo_vflag < 1) - { + if (ndo->ndo_vflag < 1) { ND_PRINT("BFDv0, Control, Flags: [%s], length: %u", bittok2str(bfd_v0_flag_values, "none", flags), len); @@ -351,8 +348,7 @@ bfd_print(netdissect_options *ndo, const u_char *pptr, /* BFDv1 */ case 1: - if (ndo->ndo_vflag < 1) - { + if (ndo->ndo_vflag < 1) { ND_PRINT("BFDv1, %s, State %s, Flags: [%s], length: %u", tok2str(bfd_port_values, "unknown (%u)", port), tok2str(bfd_v1_state_values, "unknown (%u)", (flags & 0xc0) >> 6), diff --git a/contrib/tcpdump/print-bgp.c b/contrib/tcpdump/print-bgp.c index efeaea45f3b0..ed112506d4de 100644 --- a/contrib/tcpdump/print-bgp.c +++ b/contrib/tcpdump/print-bgp.c @@ -34,9 +34,7 @@ /* specification: RFC 4271 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -1161,6 +1159,8 @@ decode_multicast_vpn(netdissect_options *ndo, switch(route_type) { case BGP_MULTICAST_VPN_ROUTE_TYPE_INTRA_AS_I_PMSI: ND_TCHECK_LEN(pptr, BGP_VPN_RD_LEN); + if (route_length < BGP_VPN_RD_LEN) + goto trunc; offset = (u_int)strlen(buf); snprintf(buf + offset, buflen - offset, ", RD: %s, Originator %s", bgp_vpn_rd_print(ndo, pptr), @@ -1575,7 +1575,7 @@ trunc: /* * We can come here, either we did not have enough data, or if we * try to decode 4 byte ASs in 2 byte format. Either way, return 4, - * so that calller can try to decode each AS as of 4 bytes. If indeed + * so that caller can try to decode each AS as of 4 bytes. If indeed * there was not enough data, it will crib and end the parse anyways. */ return 4; @@ -1598,7 +1598,7 @@ check_add_path(netdissect_options *ndo, const u_char *pptr, u_int length, } /* - * Scan through the NLRI information under the assumpetion that + * Scan through the NLRI information under the assumption that * it doesn't have path IDs. */ for (offset = 0; offset < length;) { @@ -2231,8 +2231,10 @@ bgp_attr_print(netdissect_options *ndo, ND_PRINT(", no SNPA"); } - add_path4 = check_add_path(ndo, tptr, (len-ND_BYTES_BETWEEN(tptr, pptr)), 32); - add_path6 = check_add_path(ndo, tptr, (len-ND_BYTES_BETWEEN(tptr, pptr)), 128); + add_path4 = check_add_path(ndo, tptr, + (len-ND_BYTES_BETWEEN(pptr, tptr)), 32); + add_path6 = check_add_path(ndo, tptr, + (len-ND_BYTES_BETWEEN(pptr, tptr)), 128); while (tptr < pptr + len) { advance = bgp_nlri_print(ndo, af, safi, tptr, len, buf, sizeof(buf), @@ -2258,8 +2260,10 @@ bgp_attr_print(netdissect_options *ndo, tptr += 3; - add_path4 = check_add_path(ndo, tptr, (len-ND_BYTES_BETWEEN(tptr, pptr)), 32); - add_path6 = check_add_path(ndo, tptr, (len-ND_BYTES_BETWEEN(tptr, pptr)), 128); + add_path4 = check_add_path(ndo, tptr, + (len-ND_BYTES_BETWEEN(pptr, tptr)), 32); + add_path6 = check_add_path(ndo, tptr, + (len-ND_BYTES_BETWEEN(pptr, tptr)), 128); while (tptr < pptr + len) { advance = bgp_nlri_print(ndo, af, safi, tptr, len, buf, sizeof(buf), @@ -2986,8 +2990,7 @@ bgp_notification_print(netdissect_options *ndo, /* garbage, hexdump it all */ if (shutdown_comm_length > length - (BGP_NOTIFICATION_SIZE + 1)) { ND_PRINT(", invalid Shutdown Communication length"); - } - else if (shutdown_comm_length == 0) { + } else if (shutdown_comm_length == 0) { ND_PRINT(", empty Shutdown Communication"); remainder_offset += 1; } diff --git a/contrib/tcpdump/print-bootp.c b/contrib/tcpdump/print-bootp.c index d230a24cbf83..b20dabc64052 100644 --- a/contrib/tcpdump/print-bootp.c +++ b/contrib/tcpdump/print-bootp.c @@ -21,9 +21,7 @@ /* \summary: BOOTP and IPv4 DHCP printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -147,7 +145,7 @@ struct bootp { #define TAG_NIS_P_DOMAIN ((uint8_t) 64) #define TAG_NIS_P_SERVERS ((uint8_t) 65) #define TAG_MOBILE_HOME ((uint8_t) 68) -#define TAG_SMPT_SERVER ((uint8_t) 69) +#define TAG_SMTP_SERVER ((uint8_t) 69) #define TAG_POP3_SERVER ((uint8_t) 70) #define TAG_NNTP_SERVER ((uint8_t) 71) #define TAG_WWW_SERVER ((uint8_t) 72) @@ -193,6 +191,8 @@ struct bootp { /* RFC 3442 */ #define TAG_CLASSLESS_STATIC_RT ((uint8_t) 121) #define TAG_CLASSLESS_STA_RT_MS ((uint8_t) 249) +/* RFC8572 */ +#define TAG_SZTP_REDIRECT ((uint8_t) 143) /* RFC 5859 - TFTP Server Address Option for DHCPv4 */ #define TAG_TFTP_SERVER_ADDRESS ((uint8_t) 150) /* https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xhtml */ @@ -461,7 +461,7 @@ static const struct tok tag2str[] = { { TAG_NIS_P_DOMAIN, "sN+D" }, { TAG_NIS_P_SERVERS, "iN+S" }, { TAG_MOBILE_HOME, "iMH" }, - { TAG_SMPT_SERVER, "iSMTP" }, + { TAG_SMTP_SERVER, "iSMTP" }, { TAG_POP3_SERVER, "iPOP3" }, { TAG_NNTP_SERVER, "iNNTP" }, { TAG_WWW_SERVER, "iWWW" }, @@ -499,6 +499,8 @@ static const struct tok tag2str[] = { /* RFC 3442 */ { TAG_CLASSLESS_STATIC_RT, "$Classless-Static-Route" }, { TAG_CLASSLESS_STA_RT_MS, "$Classless-Static-Route-Microsoft" }, +/* RFC 8572 */ + { TAG_SZTP_REDIRECT, "$SZTP-Redirect" }, /* RFC 5859 - TFTP Server Address Option for DHCPv4 */ { TAG_TFTP_SERVER_ADDRESS, "iTFTP-Server-Address" }, /* https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp-parameters.xhtml#options */ @@ -999,6 +1001,39 @@ rfc1048_print(netdissect_options *ndo, break; } + + case TAG_SZTP_REDIRECT: + /* as per https://datatracker.ietf.org/doc/html/rfc8572#section-8.3 + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...-+-+-+-+-+-+-+ + | uri-length | URI | + +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...-+-+-+-+-+-+-+ + + * uri-length: 2 octets long; specifies the length of the URI data. + * URI: URI of the SZTP bootstrap server. + */ + while (len >= 2) { + suboptlen = GET_BE_U_2(bp); + bp += 2; + len -= 2; + ND_PRINT("\n\t "); + ND_PRINT("length %u: ", suboptlen); + if (len < suboptlen) { + ND_PRINT("length goes past end of option"); + bp += len; + len = 0; + break; + } + ND_PRINT("\""); + nd_printjn(ndo, bp, suboptlen); + ND_PRINT("\""); + len -= suboptlen; + bp += suboptlen; + } + if (len != 0) { + ND_PRINT("[ERROR: length < 2 bytes]"); + } + break; + default: ND_PRINT("[unknown special tag %u, size %u]", tag, len); diff --git a/contrib/tcpdump/print-brcmtag.c b/contrib/tcpdump/print-brcmtag.c index efc6a1eefa46..a3d15e28fd72 100644 --- a/contrib/tcpdump/print-brcmtag.c +++ b/contrib/tcpdump/print-brcmtag.c @@ -21,15 +21,12 @@ /* \summary: Broadcom Ethernet switches tag (4 bytes) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #define ND_LONGJMP_FROM_TCHECK #include "netdissect.h" -#include "ethertype.h" #include "addrtoname.h" #include "extract.h" diff --git a/contrib/tcpdump/print-bt.c b/contrib/tcpdump/print-bt.c index 46aa2782aeb5..290434b99cc0 100644 --- a/contrib/tcpdump/print-bt.c +++ b/contrib/tcpdump/print-bt.c @@ -19,9 +19,7 @@ /* \summary: Bluetooth printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-calm-fast.c b/contrib/tcpdump/print-calm-fast.c index 1220d867ec60..5b79337a62f2 100644 --- a/contrib/tcpdump/print-calm-fast.c +++ b/contrib/tcpdump/print-calm-fast.c @@ -17,9 +17,7 @@ /* \summary: Communication access for land mobiles (CALM) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-carp.c b/contrib/tcpdump/print-carp.c index 75f506685f56..a073908d7600 100644 --- a/contrib/tcpdump/print-carp.c +++ b/contrib/tcpdump/print-carp.c @@ -36,9 +36,7 @@ /* \summary: Common Address Redundancy Protocol (CARP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -52,13 +50,14 @@ carp_print(netdissect_options *ndo, const u_char *bp, u_int len, u_int ttl) const char *type_s; ndo->ndo_protocol = "carp"; + nd_print_protocol_caps(ndo); version = (GET_U_1(bp) & 0xf0) >> 4; type = GET_U_1(bp) & 0x0f; if (type == 1) type_s = "advertise"; else type_s = "unknown"; - ND_PRINT("CARPv%u-%s %u: ", version, type_s, len); + ND_PRINT("v%u-%s %u: ", version, type_s, len); if (ttl != 255) ND_PRINT("[ttl=%u!] ", ttl); if (version != 2 || type != 1) diff --git a/contrib/tcpdump/print-cdp.c b/contrib/tcpdump/print-cdp.c index 9f5c24bca6bd..c4adf180c84b 100644 --- a/contrib/tcpdump/print-cdp.c +++ b/contrib/tcpdump/print-cdp.c @@ -26,9 +26,7 @@ /* \summary: Cisco Discovery Protocol (CDP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -309,7 +307,7 @@ cdp_print(netdissect_options *ndo, } } - if (!covered) { + if (ndo->ndo_vflag && !covered) { ND_TCHECK_LEN(tptr, len); print_unknown_data(ndo, tptr, "\n\t ", len); } @@ -389,8 +387,7 @@ cdp_print_addr(netdissect_options *ndo, ND_PRINT("IPv4 (%u) %s", num, GET_IPADDR_STRING(p)); p += al; l -= al; - } - else if (pt == PT_IEEE_802_2 && pl == 8 && + } else if (pt == PT_IEEE_802_2 && pl == 8 && memcmp(p, prot_ipv6, 8) == 0 && al == 16) { /* * IPv6: protocol type = IEEE 802.2 header, @@ -408,8 +405,7 @@ cdp_print_addr(netdissect_options *ndo, ND_PRINT("IPv6 (%u) %s", num, GET_IP6ADDR_STRING(p)); p += al; l -= al; - } - else { + } else { /* * Generic case: just print raw data */ diff --git a/contrib/tcpdump/print-cfm.c b/contrib/tcpdump/print-cfm.c index e950719e691d..e78be378b128 100644 --- a/contrib/tcpdump/print-cfm.c +++ b/contrib/tcpdump/print-cfm.c @@ -17,9 +17,7 @@ /* \summary: IEEE 802.1ag Connectivity Fault Management (CFM) protocols printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-chdlc.c b/contrib/tcpdump/print-chdlc.c index 235675da42b1..135d742ce2b9 100644 --- a/contrib/tcpdump/print-chdlc.c +++ b/contrib/tcpdump/print-chdlc.c @@ -21,9 +21,7 @@ /* \summary: Cisco HDLC printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-cip.c b/contrib/tcpdump/print-cip.c index b8ef77fd2fb3..96587fe0ffc7 100644 --- a/contrib/tcpdump/print-cip.c +++ b/contrib/tcpdump/print-cip.c @@ -22,9 +22,7 @@ /* \summary: Linux Classical IP over ATM printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include <string.h> diff --git a/contrib/tcpdump/print-cnfp.c b/contrib/tcpdump/print-cnfp.c index 101148fa86c0..553b051d483b 100644 --- a/contrib/tcpdump/print-cnfp.c +++ b/contrib/tcpdump/print-cnfp.c @@ -40,9 +40,7 @@ * https://www.cisco.com/c/en/us/td/docs/net_mgmt/netflow_collection_engine/3-6/user/guide/format.html#wp1005892 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-dccp.c b/contrib/tcpdump/print-dccp.c index 392345753798..62d8988b7e1d 100644 --- a/contrib/tcpdump/print-dccp.c +++ b/contrib/tcpdump/print-dccp.c @@ -11,9 +11,7 @@ /* specification: RFC 4340 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-decnet.c b/contrib/tcpdump/print-decnet.c index 6a6dd25982f9..a114e2d3bccd 100644 --- a/contrib/tcpdump/print-decnet.c +++ b/contrib/tcpdump/print-decnet.c @@ -21,9 +21,7 @@ /* \summary: DECnet printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-dhcp6.c b/contrib/tcpdump/print-dhcp6.c index 6b0dc21335d3..c196ad7497f3 100644 --- a/contrib/tcpdump/print-dhcp6.c +++ b/contrib/tcpdump/print-dhcp6.c @@ -43,9 +43,7 @@ * RFC6334: Dual-Stack Lite option, */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -121,6 +119,10 @@ struct dhcp6_relay { /* options */ #define DH6OPT_CLIENTID 1 #define DH6OPT_SERVERID 2 +# define DUID_LLT 1 /* RFC8415 */ +# define DUID_EN 2 /* RFC8415 */ +# define DUID_LL 3 /* RFC8415 */ +# define DUID_UUID 4 /* RFC6355 */ #define DH6OPT_IA_NA 3 #define DH6OPT_IA_TA 4 #define DH6OPT_IA_ADDR 5 @@ -188,8 +190,10 @@ struct dhcp6_relay { # define DH6OPT_NTP_SUBOPTION_SRV_ADDR 1 # define DH6OPT_NTP_SUBOPTION_MC_ADDR 2 # define DH6OPT_NTP_SUBOPTION_SRV_FQDN 3 +#define DH6OPT_BOOTFILE_URL 59 /* RFC5970 */ #define DH6OPT_AFTR_NAME 64 #define DH6OPT_MUDURL 112 +#define DH6OPT_SZTP_REDIRECT 136 /* RFC8572 */ static const struct tok dh6opt_str[] = { { DH6OPT_CLIENTID, "client-ID" }, @@ -239,8 +243,10 @@ static const struct tok dh6opt_str[] = { { DH6OPT_LQ_RELAY_DATA, "LQ-relay-data" }, { DH6OPT_LQ_CLIENT_LINK, "LQ-client-link" }, { DH6OPT_NTP_SERVER, "NTP-server" }, + { DH6OPT_BOOTFILE_URL, "Bootfile-URL" }, { DH6OPT_AFTR_NAME, "AFTR-Name" }, { DH6OPT_MUDURL, "MUD-URL" }, + { DH6OPT_SZTP_REDIRECT, "SZTP-redirect" }, { 0, NULL } }; @@ -290,6 +296,8 @@ dhcp6opt_print(netdissect_options *ndo, uint16_t subopt_len; uint8_t dh6_reconf_type; uint8_t dh6_lq_query_type; + u_int first_list_value; + uint16_t remainder_len; if (cp == ep) return; @@ -314,7 +322,7 @@ dhcp6opt_print(netdissect_options *ndo, } tp = (const u_char *)(dh6o + 1); switch (GET_BE_U_2(tp)) { - case 1: + case DUID_LLT: if (optlen >= 2 + 6) { ND_PRINT(" hwaddr/time type %u time %u ", GET_BE_U_2(tp + 2), @@ -329,10 +337,10 @@ dhcp6opt_print(netdissect_options *ndo, ND_PRINT(" ?)"); } break; - case 2: - if (optlen >= 2 + 8) { - ND_PRINT(" vid "); - for (i = 2; i < 2 + 8; i++) + case DUID_EN: + if (optlen >= 2 + 4) { + ND_PRINT(" enterprise %u ", GET_BE_U_4(tp + 2)); + for (i = 2 + 4; i < optlen; i++) ND_PRINT("%02x", GET_U_1(tp + i)); /*(*/ @@ -342,7 +350,7 @@ dhcp6opt_print(netdissect_options *ndo, ND_PRINT(" ?)"); } break; - case 3: + case DUID_LL: if (optlen >= 2 + 2) { ND_PRINT(" hwaddr type %u ", GET_BE_U_2(tp + 2)); @@ -356,6 +364,19 @@ dhcp6opt_print(netdissect_options *ndo, ND_PRINT(" ?)"); } break; + case DUID_UUID: + ND_PRINT(" uuid "); + if (optlen == 2 + 16) { + for (i = 2; i < optlen; i++) + ND_PRINT("%02x", + GET_U_1(tp + i)); + /*(*/ + ND_PRINT(")"); + } else { + /*(*/ + ND_PRINT(" ?)"); + } + break; default: ND_PRINT(" type %u)", GET_BE_U_2(tp)); break; @@ -784,6 +805,39 @@ dhcp6opt_print(netdissect_options *ndo, ND_PRINT(")"); break; + case DH6OPT_BOOTFILE_URL: + tp = (const u_char *)(dh6o + 1); + ND_PRINT(" "); + nd_printjn(ndo, tp, optlen); + ND_PRINT(")"); + break; + + case DH6OPT_SZTP_REDIRECT: + case DH6OPT_USER_CLASS: + ND_PRINT(" "); + tp = (const u_char *)(dh6o + 1); + first_list_value = TRUE; + remainder_len = optlen; + while (remainder_len >= 2) { + if (first_list_value == FALSE) { + ND_PRINT(","); + } + first_list_value = FALSE; + subopt_len = GET_BE_U_2(tp); + if (subopt_len > remainder_len-2) { + break; + } + tp += 2; + nd_printjn(ndo, tp, subopt_len); + tp += subopt_len; + remainder_len -= (subopt_len+2); + } + if (remainder_len != 0 ) { + ND_PRINT(" ?"); + } + ND_PRINT(")"); + break; + default: ND_PRINT(")"); break; diff --git a/contrib/tcpdump/print-domain.c b/contrib/tcpdump/print-domain.c index d2275a5e2a30..7ac891f04716 100644 --- a/contrib/tcpdump/print-domain.c +++ b/contrib/tcpdump/print-domain.c @@ -21,9 +21,7 @@ /* \summary: Domain Name System (DNS) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -839,6 +837,10 @@ ns_rprint(netdissect_options *ndo, case T_URI: if (!ND_TTEST_LEN(cp, len)) return(NULL); + if (len < 4) { + ND_PRINT(" len %u is too short (< 4)", len); + break; + } ND_PRINT(" %u %u ", GET_BE_U_2(cp), GET_BE_U_2(cp + 2)); if (nd_printn(ndo, cp + 4, len - 4, ndo->ndo_snapend)) return(NULL); @@ -1070,8 +1072,7 @@ domain_print(netdissect_options *ndo, if (arcount) goto trunc; } - } - else { + } else { /* this is a request */ ND_PRINT("%u%s%s%s", GET_BE_U_2(np->id), ns_ops[DNS_OPCODE(flags)], @@ -1088,8 +1089,7 @@ domain_print(netdissect_options *ndo, ND_PRINT(" [%uq]", qdcount); if (ancount != 1) ND_PRINT(" [%ua]", ancount); - } - else { + } else { if (ancount) ND_PRINT(" [%ua]", ancount); if (qdcount != 1) diff --git a/contrib/tcpdump/print-dsa.c b/contrib/tcpdump/print-dsa.c index 1ed9acf672f5..42d59461fd48 100644 --- a/contrib/tcpdump/print-dsa.c +++ b/contrib/tcpdump/print-dsa.c @@ -21,9 +21,7 @@ /* \summary: Marvell (Ethertype) Distributed Switch Architecture printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-dtp.c b/contrib/tcpdump/print-dtp.c index a1ae4ba4d5aa..4bc6f5ca4841 100644 --- a/contrib/tcpdump/print-dtp.c +++ b/contrib/tcpdump/print-dtp.c @@ -17,9 +17,7 @@ /* \summary: Dynamic Trunking Protocol (DTP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -84,7 +82,7 @@ dtp_print(netdissect_options *ndo, const u_char *tptr, u_int length) /* infinite loop check */ if (len < 4 || len > length) { - ND_PRINT("[invalid TLV length %u]", len); + ND_PRINT("[TLV length %u]", len); goto invalid; } diff --git a/contrib/tcpdump/print-dvmrp.c b/contrib/tcpdump/print-dvmrp.c index 7d7ca07555ac..e57580b535d8 100644 --- a/contrib/tcpdump/print-dvmrp.c +++ b/contrib/tcpdump/print-dvmrp.c @@ -21,9 +21,7 @@ /* \summary: Distance Vector Multicast Routing Protocol printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -321,7 +319,7 @@ print_neighbors2(netdissect_options *ndo, len -= 4; } if (ncount != -1) { - ND_PRINT(" [invalid ncount]"); + ND_PRINT(" [ncount %d]", ncount); goto invalid; } } diff --git a/contrib/tcpdump/print-eap.c b/contrib/tcpdump/print-eap.c index 78439b71c003..1b1b9762a4ad 100644 --- a/contrib/tcpdump/print-eap.c +++ b/contrib/tcpdump/print-eap.c @@ -20,9 +20,7 @@ /* \summary: Extensible Authentication Protocol (EAP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -155,6 +153,7 @@ eap_print(netdissect_options *ndo, u_int count; const char *sep; + ndo->ndo_protocol = "eap"; type = GET_U_1(cp); len = GET_BE_U_2(cp + 2); if (len != length) { diff --git a/contrib/tcpdump/print-egp.c b/contrib/tcpdump/print-egp.c index cc9f44e3c09e..60a3fb4f59d9 100644 --- a/contrib/tcpdump/print-egp.c +++ b/contrib/tcpdump/print-egp.c @@ -22,9 +22,7 @@ /* specification: RFC 827 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-eigrp.c b/contrib/tcpdump/print-eigrp.c index 2702beb2972a..9116cf685b9a 100644 --- a/contrib/tcpdump/print-eigrp.c +++ b/contrib/tcpdump/print-eigrp.c @@ -23,9 +23,7 @@ * RFC 7868 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-enc.c b/contrib/tcpdump/print-enc.c index 928b02c8870e..f439500fe533 100644 --- a/contrib/tcpdump/print-enc.c +++ b/contrib/tcpdump/print-enc.c @@ -23,9 +23,7 @@ /* \summary: OpenBSD IPsec encapsulation BPF layer printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-esp.c b/contrib/tcpdump/print-esp.c index 2cee08893a12..53ee6c8f6afb 100644 --- a/contrib/tcpdump/print-esp.c +++ b/contrib/tcpdump/print-esp.c @@ -23,25 +23,15 @@ /* \summary: IPSEC Encapsulating Security Payload (ESP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include <string.h> #include <stdlib.h> -/* Any code in this file that depends on HAVE_LIBCRYPTO depends on - * HAVE_OPENSSL_EVP_H too. Undefining the former when the latter isn't defined - * is the simplest way of handling the dependency. - */ #ifdef HAVE_LIBCRYPTO -#ifdef HAVE_OPENSSL_EVP_H #include <openssl/evp.h> -#else -#undef HAVE_LIBCRYPTO -#endif #endif #include "netdissect.h" @@ -424,6 +414,7 @@ espprint_decode_encalgo(netdissect_options *ndo, const EVP_CIPHER *evp; int authlen = 0; char *colon, *p; + const char *real_decode; colon = strchr(decode, ':'); if (colon == NULL) { @@ -444,10 +435,23 @@ espprint_decode_encalgo(netdissect_options *ndo, p = strstr(decode, "-cbc"); *p = '\0'; } - evp = EVP_get_cipherbyname(decode); + /* + * Not all versions of libcrypto support calls to add aliases + * to ciphers - newer versions of libressl don't - so, instead + * of making "3des" an alias for "des_ede3_cbc", if attempting + * to get the cipher fails and the name is "3des", we try + * "des_ede3_cbc". + */ + real_decode = decode; + if (strcmp(real_decode, "3des") == 0) + real_decode = "des-ede3-cbc"; + evp = EVP_get_cipherbyname(real_decode); if (!evp) { - (*ndo->ndo_warning)(ndo, "failed to find cipher algo %s\n", decode); + if (decode != real_decode) + (*ndo->ndo_warning)(ndo, "failed to find cipher algo %s (%s)\n", real_decode, decode); + else + (*ndo->ndo_warning)(ndo, "failed to find cipher algo %s\n", decode); sa->evp = NULL; sa->authlen = 0; sa->ivlen = 0; @@ -683,7 +687,6 @@ static void esp_init(netdissect_options *ndo _U_) #if !defined(OPENSSL_API_COMPAT) || OPENSSL_API_COMPAT < 0x10100000L OpenSSL_add_all_algorithms(); #endif - EVP_add_cipher_alias(SN_des_ede3_cbc, "3des"); } DIAG_ON_DEPRECATION diff --git a/contrib/tcpdump/print-ether.c b/contrib/tcpdump/print-ether.c index cd623f902568..6768499adf77 100644 --- a/contrib/tcpdump/print-ether.c +++ b/contrib/tcpdump/print-ether.c @@ -21,9 +21,7 @@ /* \summary: Ethernet printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -238,7 +236,7 @@ recurse: */ length_type = GET_BE_U_2(p); - ND_LCHECK_U(caplen, 2); + ND_ICHECK_U(caplen, <, 2); length -= 2; caplen -= 2; p += 2; @@ -412,7 +410,7 @@ invalid: } /* - * Print an Ethernet frame while specyfing a non-standard Ethernet header + * Print an Ethernet frame while specifying a non-standard Ethernet header * length. * This might be encapsulated within another frame; we might be passed * a pointer to a function that can print header information for that diff --git a/contrib/tcpdump/print-fddi.c b/contrib/tcpdump/print-fddi.c index fb8d3ed57ca1..db29841914b8 100644 --- a/contrib/tcpdump/print-fddi.c +++ b/contrib/tcpdump/print-fddi.c @@ -21,9 +21,7 @@ /* \summary: Fiber Distributed Data Interface (FDDI) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -240,8 +238,7 @@ extract_fddi_addrs(const struct fddi_header *fddip, char *fsrc, char *fdst) fdst[i] = fddi_bit_swap[fddip->fddi_dhost[i]]; for (i = 0; i < 6; ++i) fsrc[i] = fddi_bit_swap[fddip->fddi_shost[i]]; - } - else { + } else { memcpy(fdst, (const char *)fddip->fddi_dhost, 6); memcpy(fsrc, (const char *)fddip->fddi_shost, 6); } diff --git a/contrib/tcpdump/print-forces.c b/contrib/tcpdump/print-forces.c index 1c7beb6a7692..958902503b1e 100644 --- a/contrib/tcpdump/print-forces.c +++ b/contrib/tcpdump/print-forces.c @@ -18,9 +18,7 @@ /* specification: RFC 5810 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-fr.c b/contrib/tcpdump/print-fr.c index f0d7fbeb12b3..79e32ceb07a7 100644 --- a/contrib/tcpdump/print-fr.c +++ b/contrib/tcpdump/print-fr.c @@ -21,9 +21,7 @@ /* \summary: Frame Relay printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -526,11 +524,18 @@ mfr_print(netdissect_options *ndo, break; case MFR_CTRL_IE_TIMESTAMP: - if (ie_len == sizeof(struct timeval)) { - ts_print(ndo, (const struct timeval *)tptr); + /* + * FRF.16.1 Section 3.4.4 Timestamp Information Element + * + * The maximum length is 14 octets. Format is implementation + * specific. + */ + if (ie_len > 14) { + ND_PRINT("[Timestamp IE length %d > 14]", ie_len); + nd_print_invalid(ndo); break; } - /* fall through and hexdump if no unix timestamp */ + /* fall through and hexdump */ ND_FALL_THROUGH; /* @@ -1142,8 +1147,7 @@ fr_q933_print_ie_codeset_0_5(netdissect_options *ndo, u_int iecode, dlci = ((GET_U_1(p) & 0x3F) << 4) | ((GET_U_1(p + 1) & 0x78) >> 3); if (ielength == 4) { dlci = (dlci << 6) | ((GET_U_1(p + 2) & 0x7E) >> 1); - } - else if (ielength == 5) { + } else if (ielength == 5) { dlci = (dlci << 13) | (GET_U_1(p + 2) & 0x7F) | ((GET_U_1(p + 3) & 0x7E) >> 1); } diff --git a/contrib/tcpdump/print-frag6.c b/contrib/tcpdump/print-frag6.c index 16e8a4b21926..a4b3be0d43ff 100644 --- a/contrib/tcpdump/print-frag6.c +++ b/contrib/tcpdump/print-frag6.c @@ -21,9 +21,7 @@ /* \summary: IPv6 fragmentation header printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -42,24 +40,22 @@ frag6_print(netdissect_options *ndo, const u_char *bp, const u_char *bp2) dp = (const struct ip6_frag *)bp; ip6 = (const struct ip6_hdr *)bp2; - if (ndo->ndo_vflag) { - ND_PRINT("frag (0x%08x:%u|%zu)", - GET_BE_U_4(dp->ip6f_ident), - GET_BE_U_2(dp->ip6f_offlg) & IP6F_OFF_MASK, + ND_PRINT("frag ("); + if (ndo->ndo_vflag) + ND_PRINT("0x%08x:", GET_BE_U_4(dp->ip6f_ident)); + ND_PRINT("%u|", GET_BE_U_2(dp->ip6f_offlg) & IP6F_OFF_MASK); + if ((bp - bp2) + sizeof(struct ip6_frag) > + sizeof(struct ip6_hdr) + GET_BE_U_2(ip6->ip6_plen)) + ND_PRINT("[length < 0] (invalid))"); + else + ND_PRINT("%zu)", sizeof(struct ip6_hdr) + GET_BE_U_2(ip6->ip6_plen) - - (bp - bp2) - sizeof(struct ip6_frag)); - } else { - ND_PRINT("frag (%u|%zu)", - GET_BE_U_2(dp->ip6f_offlg) & IP6F_OFF_MASK, - sizeof(struct ip6_hdr) + GET_BE_U_2(ip6->ip6_plen) - - (bp - bp2) - sizeof(struct ip6_frag)); - } + (bp - bp2) - sizeof(struct ip6_frag)); /* it is meaningless to decode non-first fragment */ if ((GET_BE_U_2(dp->ip6f_offlg) & IP6F_OFF_MASK) != 0) return -1; - else - { + else { ND_PRINT(" "); return sizeof(struct ip6_frag); } diff --git a/contrib/tcpdump/print-ftp.c b/contrib/tcpdump/print-ftp.c index b55937bba1bd..927618f577f2 100644 --- a/contrib/tcpdump/print-ftp.c +++ b/contrib/tcpdump/print-ftp.c @@ -13,9 +13,7 @@ /* \summary: File Transfer Protocol (FTP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-geneve.c b/contrib/tcpdump/print-geneve.c index 0b7ff6e51472..4358803b19a8 100644 --- a/contrib/tcpdump/print-geneve.c +++ b/contrib/tcpdump/print-geneve.c @@ -17,9 +17,7 @@ /* \summary: Generic Network Virtualization Encapsulation (Geneve) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-geonet.c b/contrib/tcpdump/print-geonet.c index 2f8046e6b965..3f8ee07572d1 100644 --- a/contrib/tcpdump/print-geonet.c +++ b/contrib/tcpdump/print-geonet.c @@ -17,9 +17,7 @@ /* \summary: ISO CALM FAST and ETSI GeoNetworking printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-gre.c b/contrib/tcpdump/print-gre.c index b1a814298b55..7832343a6d07 100644 --- a/contrib/tcpdump/print-gre.c +++ b/contrib/tcpdump/print-gre.c @@ -33,9 +33,7 @@ * RFC1701 (GRE), RFC1702 (GRE IPv4), and RFC2637 (Enhanced GRE) */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-hncp.c b/contrib/tcpdump/print-hncp.c index 37c13ec3469c..2dc3147ac4a4 100644 --- a/contrib/tcpdump/print-hncp.c +++ b/contrib/tcpdump/print-hncp.c @@ -28,9 +28,7 @@ /* \summary: Home Networking Control Protocol (HNCP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-hsrp.c b/contrib/tcpdump/print-hsrp.c index 3027826847a9..f09f00a1c43b 100644 --- a/contrib/tcpdump/print-hsrp.c +++ b/contrib/tcpdump/print-hsrp.c @@ -31,9 +31,7 @@ /* specification: RFC 2281 for version 1 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-http.c b/contrib/tcpdump/print-http.c index 6845d0d31528..cdb1fd71a21e 100644 --- a/contrib/tcpdump/print-http.c +++ b/contrib/tcpdump/print-http.c @@ -13,9 +13,7 @@ /* \summary: Hypertext Transfer Protocol (HTTP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-icmp.c b/contrib/tcpdump/print-icmp.c index 54d215e1d7fe..9b53a48a28b9 100644 --- a/contrib/tcpdump/print-icmp.c +++ b/contrib/tcpdump/print-icmp.c @@ -21,9 +21,7 @@ /* \summary: Internet Control Message Protocol (ICMP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-icmp6.c b/contrib/tcpdump/print-icmp6.c index 4738e77a9e75..e67b19b40bdc 100644 --- a/contrib/tcpdump/print-icmp6.c +++ b/contrib/tcpdump/print-icmp6.c @@ -21,9 +21,7 @@ /* \summary: IPv6 Internet Control Message Protocol (ICMPv6) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -526,7 +524,7 @@ struct nd_rpl_security { #endif }; -/* section 6.2.1, DODAG Information Solication (DIS_IS) */ +/* section 6.2.1, DODAG Information Solicitation (DIS_IS) */ struct nd_rpl_dis_is { nd_uint8_t rpl_dis_flags; nd_uint8_t rpl_dis_reserved; @@ -841,7 +839,7 @@ rpl_dio_print(netdissect_options *ndo, { const struct nd_rpl_dio *dio = (const struct nd_rpl_dio *)bp; - ND_LCHECK_ZU(length, sizeof(struct nd_rpl_dio)); + ND_ICHECK_ZU(length, <, sizeof(struct nd_rpl_dio)); ND_PRINT(" [dagid:%s,seq:%u,instance:%u,rank:%u,%smop:%s,prf:%u]", GET_IP6ADDR_STRING(dio->rpl_dagid), GET_U_1(dio->rpl_dtsn), @@ -1271,7 +1269,8 @@ icmp6_print(netdissect_options *ndo, ND_PRINT(", id 0x%04x", GET_BE_U_2(dp->icmp6_data16[0])); - cp = (const u_char *)dp + length; + cp = (const u_char *)dp + + ND_MIN(length, ND_BYTES_AVAILABLE_AFTER(dp)); p = (const u_char *)(dp + 1); while (p < cp) { ND_PRINT(", %s", GET_IP6ADDR_STRING(p)); @@ -1346,8 +1345,7 @@ get_upperlayer(netdissect_options *ndo, const u_char *bp, u_int *prot) if (ND_TTEST_2(uh->uh_dport)) { *prot = nh; return(uh); - } - else + } else return(NULL); /* NOTREACHED */ @@ -1475,8 +1473,7 @@ icmp6_opt_print(netdissect_options *ndo, const u_char *bp, int resid) ND_PRINT(" lifetime %us, domain(s):", GET_BE_U_4(opds->nd_opt_dnssl_lifetime)); domp = cp + 8; /* domain names, variable-sized, RFC1035-encoded */ - while (domp < cp + (opt_len << 3) && GET_U_1(domp) != '\0') - { + while (domp < cp + (opt_len << 3) && GET_U_1(domp) != '\0') { ND_PRINT(" "); if ((domp = fqdn_print(ndo, domp, bp)) == NULL) goto trunc; diff --git a/contrib/tcpdump/print-igmp.c b/contrib/tcpdump/print-igmp.c index 914e3d6b342c..68bb5d77cf80 100644 --- a/contrib/tcpdump/print-igmp.c +++ b/contrib/tcpdump/print-igmp.c @@ -29,9 +29,7 @@ * draft-asaeda-mboned-mtrace-v2 for the mtrace message */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-igrp.c b/contrib/tcpdump/print-igrp.c index 23dc1f5688af..26259b46d7b1 100644 --- a/contrib/tcpdump/print-igrp.c +++ b/contrib/tcpdump/print-igrp.c @@ -23,9 +23,7 @@ /* \summary: Interior Gateway Routing Protocol (IGRP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-ip-demux.c b/contrib/tcpdump/print-ip-demux.c index 758601910881..f2102bb55d73 100644 --- a/contrib/tcpdump/print-ip-demux.c +++ b/contrib/tcpdump/print-ip-demux.c @@ -21,9 +21,7 @@ /* \summary: IPv4/IPv6 payload printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-ip.c b/contrib/tcpdump/print-ip.c index 23ba99c97007..5edc62215e27 100644 --- a/contrib/tcpdump/print-ip.c +++ b/contrib/tcpdump/print-ip.c @@ -21,9 +21,7 @@ /* \summary: IP printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -318,7 +316,7 @@ static const struct tok ip_frag_values[] = { void ip_print(netdissect_options *ndo, const u_char *bp, - u_int length) + const u_int length) { const struct ip *ip; u_int off; @@ -329,51 +327,36 @@ ip_print(netdissect_options *ndo, uint16_t sum, ip_sum; const char *p_name; int truncated = 0; + int presumed_tso = 0; ndo->ndo_protocol = "ip"; ip = (const struct ip *)bp; - if (IP_V(ip) != 4) { /* print version and fail if != 4 */ - if (IP_V(ip) == 6) - ND_PRINT("IP6, wrong link-layer encapsulation"); - else - ND_PRINT("IP%u", IP_V(ip)); - nd_print_invalid(ndo); - return; - } - if (!ndo->ndo_eflag) - ND_PRINT("IP "); - ND_TCHECK_SIZE(ip); - if (length < sizeof (struct ip)) { - ND_PRINT("truncated-ip %u", length); - return; + if (!ndo->ndo_eflag) { + nd_print_protocol_caps(ndo); + ND_PRINT(" "); } + + ND_ICHECK_ZU(length, <, sizeof (struct ip)); + ND_ICHECKMSG_U("version", IP_V(ip), !=, 4); + hlen = IP_HL(ip) * 4; - if (hlen < sizeof (struct ip)) { - ND_PRINT("bad-hlen %u", hlen); - return; - } + ND_ICHECKMSG_ZU("header length", hlen, <, sizeof (struct ip)); len = GET_BE_U_2(ip->ip_len); - if (length < len) - ND_PRINT("truncated-ip - %u bytes missing! ", - len - length); - if (len < hlen) { -#ifdef GUESS_TSO - if (len) { - ND_PRINT("bad-len %u", len); - return; - } - else { - /* we guess that it is a TSO send */ - len = length; - } -#else - ND_PRINT("bad-len %u", len); - return; -#endif /* GUESS_TSO */ + if (len > length) { + ND_PRINT("[total length %u > length %u]", len, length); + nd_print_invalid(ndo); + ND_PRINT(" "); } + if (len == 0) { + /* we guess that it is a TSO send */ + len = length; + presumed_tso = 1; + } else + ND_ICHECKMSG_U("total length", len, <, hlen); + ND_TCHECK_SIZE(ip); /* * Cut off the snapshot length to the end of the IP payload. */ @@ -426,7 +409,10 @@ ip_print(netdissect_options *ndo, tok2str(ipproto_values, "unknown", ip_proto), ip_proto); - ND_PRINT(", length %u", GET_BE_U_2(ip->ip_len)); + if (presumed_tso) + ND_PRINT(", length %u [was 0, presumed TSO]", length); + else + ND_PRINT(", length %u", GET_BE_U_2(ip->ip_len)); if ((hlen - sizeof(struct ip)) > 0) { ND_PRINT(", options ("); @@ -513,6 +499,10 @@ ip_print(netdissect_options *ndo, trunc: nd_print_trunc(ndo); + return; + +invalid: + nd_print_invalid(ndo); } void diff --git a/contrib/tcpdump/print-ip6.c b/contrib/tcpdump/print-ip6.c index 2f1183c00699..dc4aa268b9ca 100644 --- a/contrib/tcpdump/print-ip6.c +++ b/contrib/tcpdump/print-ip6.c @@ -21,9 +21,7 @@ /* \summary: IPv6 printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -241,19 +239,13 @@ ip6_print(netdissect_options *ndo, const u_char *bp, u_int length) ndo->ndo_protocol = "ip6"; ip6 = (const struct ip6_hdr *)bp; - ND_TCHECK_SIZE(ip6); - if (length < sizeof (struct ip6_hdr)) { - ND_PRINT("truncated-ip6 %u", length); - return; + if (!ndo->ndo_eflag) { + nd_print_protocol_caps(ndo); + ND_PRINT(" "); } - if (!ndo->ndo_eflag) - ND_PRINT("IP6 "); - - if (IP6_VERSION(ip6) != 6) { - ND_PRINT("version error: %u != 6", IP6_VERSION(ip6)); - return; - } + ND_ICHECK_ZU(length, <, sizeof (struct ip6_hdr)); + ND_ICHECKMSG_U("version", IP6_VERSION(ip6), !=, 6); payload_len = GET_BE_U_2(ip6->ip6_plen); /* @@ -280,9 +272,12 @@ ip6_print(netdissect_options *ndo, const u_char *bp, u_int length) */ if (payload_len != 0) { len = payload_len + sizeof(struct ip6_hdr); - if (length < len) - ND_PRINT("truncated-ip6 - %u bytes missing!", - len - length); + if (len > length) { + ND_PRINT("[header+payload length %u > length %u]", + len, length); + nd_print_invalid(ndo); + ND_PRINT(" "); + } } else len = length + sizeof(struct ip6_hdr); @@ -303,6 +298,7 @@ ip6_print(netdissect_options *ndo, const u_char *bp, u_int length) nh, payload_len); } + ND_TCHECK_SIZE(ip6); /* * Cut off the snapshot length to the end of the IP payload. @@ -330,7 +326,7 @@ ip6_print(netdissect_options *ndo, const u_char *bp, u_int length) nh != IPPROTO_TCP && nh != IPPROTO_UDP && nh != IPPROTO_DCCP && nh != IPPROTO_SCTP) { ND_PRINT("%s > %s: ", GET_IP6ADDR_STRING(ip6->ip6_src), - GET_IP6ADDR_STRING(ip6->ip6_dst)); + GET_IP6ADDR_STRING(ip6->ip6_dst)); } switch (nh) { @@ -389,7 +385,7 @@ ip6_print(netdissect_options *ndo, const u_char *bp, u_int length) case IPPROTO_MOBILITY_OLD: case IPPROTO_MOBILITY: /* - * XXX - we don't use "advance"; RFC 3775 says that + * RFC 3775 says that * the next header field in a mobility header * should be IPPROTO_NONE, but speaks of * the possibility of a future extension in @@ -436,9 +432,12 @@ ip6_print(netdissect_options *ndo, const u_char *bp, u_int length) len = payload_len + sizeof(struct ip6_hdr); if (len < total_advance) goto trunc; - if (length < len) - ND_PRINT("truncated-ip6 - %u bytes missing!", - len - length); + if (len > length) { + ND_PRINT("[header+payload length %u > length %u]", + len, length); + nd_print_invalid(ndo); + ND_PRINT(" "); + } nd_change_snaplen(ndo, bp, len); /* @@ -499,4 +498,8 @@ ip6_print(netdissect_options *ndo, const u_char *bp, u_int length) return; trunc: nd_print_trunc(ndo); + return; + +invalid: + nd_print_invalid(ndo); } diff --git a/contrib/tcpdump/print-ip6opts.c b/contrib/tcpdump/print-ip6opts.c index a78c76daa27d..cbd2d9667310 100644 --- a/contrib/tcpdump/print-ip6opts.c +++ b/contrib/tcpdump/print-ip6opts.c @@ -29,9 +29,7 @@ /* \summary: IPv6 header option printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-ipcomp.c b/contrib/tcpdump/print-ipcomp.c index c0c184ddc839..a88f67975062 100644 --- a/contrib/tcpdump/print-ipcomp.c +++ b/contrib/tcpdump/print-ipcomp.c @@ -21,9 +21,7 @@ /* \summary: IP Payload Compression Protocol (IPComp) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-ipfc.c b/contrib/tcpdump/print-ipfc.c index ab5a81312f68..c707170a232c 100644 --- a/contrib/tcpdump/print-ipfc.c +++ b/contrib/tcpdump/print-ipfc.c @@ -23,9 +23,7 @@ /* specification: RFC 2625 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-ipnet.c b/contrib/tcpdump/print-ipnet.c index eddcc1d7546f..65f626163b6d 100644 --- a/contrib/tcpdump/print-ipnet.c +++ b/contrib/tcpdump/print-ipnet.c @@ -1,8 +1,6 @@ /* \summary: Solaris DLT_IPNET printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-ipoib.c b/contrib/tcpdump/print-ipoib.c index 3d43123505a1..87ae97c8f515 100644 --- a/contrib/tcpdump/print-ipoib.c +++ b/contrib/tcpdump/print-ipoib.c @@ -25,9 +25,7 @@ /* \summary: IP-over-InfiniBand (IPoIB) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-ipx.c b/contrib/tcpdump/print-ipx.c index f8c0ce7c2213..ebe7c51b01c1 100644 --- a/contrib/tcpdump/print-ipx.c +++ b/contrib/tcpdump/print-ipx.c @@ -23,9 +23,7 @@ /* \summary: Novell IPX printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -156,7 +154,7 @@ ipx_sap_print(netdissect_options *ndo, const u_char *ipx, u_int length) int command, i; command = GET_BE_U_2(ipx); - ND_LCHECK_U(length, 2); + ND_ICHECK_U(length, <, 2); ipx += 2; length -= 2; @@ -230,7 +228,7 @@ ipx_rip_print(netdissect_options *ndo, const u_char *ipx, u_int length) int command, i; command = GET_BE_U_2(ipx); - ND_LCHECK_U(length, 2); + ND_ICHECK_U(length, <, 2); ipx += 2; length -= 2; diff --git a/contrib/tcpdump/print-isakmp.c b/contrib/tcpdump/print-isakmp.c index c08bbc08d858..471935e55a45 100644 --- a/contrib/tcpdump/print-isakmp.c +++ b/contrib/tcpdump/print-isakmp.c @@ -32,16 +32,7 @@ /* specification: RFC 2407, RFC 2408, RFC 5996 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif - -/* The functions from print-esp.c used in this file are only defined when both - * OpenSSL and evp.h are detected. Employ the same preprocessor device here. - */ -#ifndef HAVE_OPENSSL_EVP_H -#undef HAVE_LIBCRYPTO -#endif #include "netdissect-stdinc.h" @@ -1828,14 +1819,16 @@ ikev1_d_print(netdissect_options *ndo, u_char tpay _U_, ND_PRINT(" spilen=%u", spi_size); num_spi = GET_BE_U_2(p->num_spi); ND_PRINT(" nspi=%u", num_spi); - ND_PRINT(" spi="); q = (const uint8_t *)(p + 1); - for (i = 0; i < num_spi; i++) { - if (i != 0) - ND_PRINT(","); - if (!rawprint(ndo, (const uint8_t *)q, spi_size)) - goto trunc; - q += spi_size; + if (spi_size) { + ND_PRINT(" spi="); + for (i = 0; i < num_spi; i++) { + if (i != 0) + ND_PRINT(","); + if (!rawprint(ndo, (const uint8_t *)q, spi_size)) + goto trunc; + q += spi_size; + } } return q; trunc: diff --git a/contrib/tcpdump/print-isoclns.c b/contrib/tcpdump/print-isoclns.c index ddd559532abd..5b8c2c2db80f 100644 --- a/contrib/tcpdump/print-isoclns.c +++ b/contrib/tcpdump/print-isoclns.c @@ -34,9 +34,7 @@ * IS-IS: ISO 10589 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -207,7 +205,7 @@ static const struct tok esis_option_values[] = { { ESIS_OPTION_SECURITY, "Security" }, { ESIS_OPTION_ES_CONF_TIME, "ES Configuration Time" }, { ESIS_OPTION_PRIORITY, "Priority" }, - { ESIS_OPTION_ADDRESS_MASK, "Addressk Mask" }, + { ESIS_OPTION_ADDRESS_MASK, "Address Mask" }, { ESIS_OPTION_SNPA_MASK, "SNPA Mask" }, { 0, NULL } }; @@ -612,7 +610,7 @@ static const struct tok isis_lsp_istype_values[] = { #define ISIS_PTP_ADJ_INIT 1 #define ISIS_PTP_ADJ_DOWN 2 -static const struct tok isis_ptp_adjancey_values[] = { +static const struct tok isis_ptp_adjacency_values[] = { { ISIS_PTP_ADJ_UP, "Up" }, { ISIS_PTP_ADJ_INIT, "Initializing" }, { ISIS_PTP_ADJ_DOWN, "Down" }, @@ -1125,9 +1123,10 @@ clnp_print(netdissect_options *ndo, default: /* dump the PDU specific data */ - if (length > ND_BYTES_BETWEEN(pptr, optr)) { + if (length > ND_BYTES_BETWEEN(optr, pptr)) { ND_PRINT("\n\t undecoded non-header data, length %u", length-li); - print_unknown_data(ndo, pptr, "\n\t ", length - ND_BYTES_BETWEEN(pptr, optr)); + print_unknown_data(ndo, pptr, "\n\t ", + length - ND_BYTES_BETWEEN(optr, pptr)); } } @@ -1487,8 +1486,7 @@ isis_print_mt_port_cap_subtlv(netdissect_options *ndo, const struct isis_subtlv_spb_mcid *subtlv_spb_mcid; int i; - while (len > 2) - { + while (len > 2) { stlv_type = GET_U_1(tptr); stlv_len = GET_U_1(tptr + 1); @@ -1508,8 +1506,7 @@ isis_print_mt_port_cap_subtlv(netdissect_options *ndo, /* Make sure the entire subTLV is in the captured data */ ND_TCHECK_LEN(tptr, stlv_len); - switch (stlv_type) - { + switch (stlv_type) { case ISIS_SUBTLV_SPB_MCID: { if (stlv_len < ISIS_SUBTLV_SPB_MCID_MIN_LEN) @@ -1550,8 +1547,7 @@ isis_print_mt_port_cap_subtlv(netdissect_options *ndo, ND_PRINT("\n\t Digest: "); - for(i=1;i<=8; i++) - { + for(i=1;i<=8; i++) { ND_PRINT("%08x ", GET_BE_U_4(tptr)); if (i%4 == 0 && i != 8) ND_PRINT("\n\t "); @@ -1566,8 +1562,7 @@ isis_print_mt_port_cap_subtlv(netdissect_options *ndo, case ISIS_SUBTLV_SPB_BVID: { - while (stlv_len != 0) - { + while (stlv_len != 0) { if (stlv_len < 4) goto subtlv_too_short; ND_PRINT("\n\t ECT: %08x", @@ -1619,8 +1614,7 @@ isis_print_mt_capability_subtlv(netdissect_options *ndo, { u_int stlv_type, stlv_len, treecount; - while (len > 2) - { + while (len > 2) { stlv_type = GET_U_1(tptr); stlv_len = GET_U_1(tptr + 1); tptr += 2; @@ -1638,8 +1632,7 @@ isis_print_mt_capability_subtlv(netdissect_options *ndo, /* Make sure the entire subTLV is in the captured data */ ND_TCHECK_LEN(tptr, stlv_len); - switch (stlv_type) - { + switch (stlv_type) { case ISIS_SUBTLV_SPB_INSTANCE: if (stlv_len < ISIS_SUBTLV_SPB_INSTANCE_MIN_LEN) goto subtlv_too_short; @@ -1667,8 +1660,7 @@ isis_print_mt_capability_subtlv(netdissect_options *ndo, len -= ISIS_SUBTLV_SPB_INSTANCE_MIN_LEN; stlv_len -= ISIS_SUBTLV_SPB_INSTANCE_MIN_LEN; - while (treecount) - { + while (treecount) { if (stlv_len < ISIS_SUBTLV_SPB_INSTANCE_VLAN_TUPLE_LEN) goto trunc; @@ -3154,7 +3146,7 @@ isis_print(netdissect_options *ndo, tlv_ptp_adj = (const struct isis_tlv_ptp_adj *)tptr; if(tlen>=1) { ND_PRINT("\n\t Adjacency State: %s (%u)", - tok2str(isis_ptp_adjancey_values, "unknown", GET_U_1(tptr)), + tok2str(isis_ptp_adjacency_values, "unknown", GET_U_1(tptr)), GET_U_1(tptr)); tlen--; } diff --git a/contrib/tcpdump/print-juniper.c b/contrib/tcpdump/print-juniper.c index 2fc0b5537e4a..f2d5c75977a0 100644 --- a/contrib/tcpdump/print-juniper.c +++ b/contrib/tcpdump/print-juniper.c @@ -22,9 +22,7 @@ __RCSID("NetBSD: print-juniper.c,v 1.3 2007/07/25 06:31:32 dogcow Exp "); #endif -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -1331,7 +1329,8 @@ juniper_parse_header(netdissect_options *ndo, /* sanity checks */ if (tlv_type == 0 || tlv_len == 0) break; - ND_LCHECK_U(extension_length, tlv_len + JUNIPER_EXT_TLV_OVERHEAD); + ND_ICHECK_U(extension_length, <, + tlv_len + JUNIPER_EXT_TLV_OVERHEAD); if (ndo->ndo_vflag > 1) ND_PRINT("\n\t %s Extension TLV #%u, length %u, value ", diff --git a/contrib/tcpdump/print-krb.c b/contrib/tcpdump/print-krb.c index 959b555c7033..69a0c1155e21 100644 --- a/contrib/tcpdump/print-krb.c +++ b/contrib/tcpdump/print-krb.c @@ -23,9 +23,7 @@ /* \summary: Kerberos printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -229,13 +227,10 @@ krb_print(netdissect_options *ndo, { const struct krb *kp; - ndo->ndo_protocol = "krb"; - kp = (const struct krb *)dat; + ndo->ndo_protocol = "kerberos"; + nd_print_protocol(ndo); - if (dat >= ndo->ndo_snapend) { - nd_print_trunc(ndo); - return; - } + kp = (const struct krb *)dat; switch (GET_U_1(kp->pvno)) { diff --git a/contrib/tcpdump/print-l2tp.c b/contrib/tcpdump/print-l2tp.c index 895efd21f008..605c20d8cf0b 100644 --- a/contrib/tcpdump/print-l2tp.c +++ b/contrib/tcpdump/print-l2tp.c @@ -25,9 +25,7 @@ /* specification: RFC 2661 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-lane.c b/contrib/tcpdump/print-lane.c index c5fa33beb4a8..5ae35acf1bde 100644 --- a/contrib/tcpdump/print-lane.c +++ b/contrib/tcpdump/print-lane.c @@ -22,9 +22,7 @@ /* \summary: ATM LANE printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-ldp.c b/contrib/tcpdump/print-ldp.c index 896bc40395fa..1ee453b20f5c 100644 --- a/contrib/tcpdump/print-ldp.c +++ b/contrib/tcpdump/print-ldp.c @@ -16,9 +16,7 @@ /* \summary: Label Distribution Protocol (LDP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -328,11 +326,17 @@ ldp_tlv_print(netdissect_options *ndo, break; case LDP_TLV_COMMON_SESSION: - TLV_TCHECK(8); + TLV_TCHECK(14); ND_PRINT("\n\t Version: %u, Keepalive: %us, Flags: [Downstream %s, Loop Detection %s]", GET_BE_U_2(tptr), GET_BE_U_2(tptr + 2), - (GET_BE_U_2(tptr + 6)&0x8000) ? "On Demand" : "Unsolicited", - (GET_BE_U_2(tptr + 6)&0x4000) ? "Enabled" : "Disabled" + (GET_BE_U_2(tptr + 4)&0x8000) ? "On Demand" : "Unsolicited", + (GET_BE_U_2(tptr + 4)&0x4000) ? "Enabled" : "Disabled" + ); + ND_PRINT("\n\t Path Vector Limit %u, Max-PDU length: %u, Receiver Label-Space-ID %s:%u", + GET_U_1(tptr+5), + GET_BE_U_2(tptr+6), + GET_IPADDR_STRING(tptr+8), + GET_BE_U_2(tptr+12) ); break; @@ -364,8 +368,7 @@ ldp_tlv_print(netdissect_options *ndo, ND_PRINT(": IPv4 prefix (invalid length)"); else ND_PRINT(": IPv4 prefix %s", buf); - } - else if (af == AFNUM_INET6) { + } else if (af == AFNUM_INET6) { i=decode_prefix6(ndo, tptr, tlv_tlen, buf, sizeof(buf)); if (i == -2) goto trunc; @@ -375,8 +378,7 @@ ldp_tlv_print(netdissect_options *ndo, ND_PRINT(": IPv6 prefix (invalid length)"); else ND_PRINT(": IPv6 prefix %s", buf); - } - else + } else ND_PRINT(": Address family %u prefix", af); break; case LDP_FEC_HOSTADDRESS: diff --git a/contrib/tcpdump/print-lisp.c b/contrib/tcpdump/print-lisp.c index 756fff0ffc5a..da1312265797 100644 --- a/contrib/tcpdump/print-lisp.c +++ b/contrib/tcpdump/print-lisp.c @@ -94,9 +94,7 @@ * +-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include "netdissect.h" @@ -129,12 +127,12 @@ enum { }; static const struct tok lisp_type [] = { - { 0, "LISP-Reserved" }, - { 1, "LISP-Map-Request" }, - { 2, "LISP-Map-Reply" }, - { 3, "LISP-Map-Register" }, - { 4, "LISP-Map-Notify" }, - { 8, "LISP-Encapsulated-Contol-Message" }, + { 0, "LISP-Reserved" }, + { 1, "LISP-Map-Request" }, + { 2, "LISP-Map-Reply" }, + { 3, "LISP-Map-Register" }, + { 4, "LISP-Map-Notify" }, + { 8, "LISP-Encapsulated-Control-Message" }, { 0, NULL } }; diff --git a/contrib/tcpdump/print-llc.c b/contrib/tcpdump/print-llc.c index ae3ae4cf5c34..ac6307a85210 100644 --- a/contrib/tcpdump/print-llc.c +++ b/contrib/tcpdump/print-llc.c @@ -24,9 +24,7 @@ /* \summary: IEEE 802.2 LLC printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-lldp.c b/contrib/tcpdump/print-lldp.c index f0e5f60c672d..a0bd6ac42001 100644 --- a/contrib/tcpdump/print-lldp.c +++ b/contrib/tcpdump/print-lldp.c @@ -19,9 +19,7 @@ /* \summary: IEEE 802.1ab Link Layer Discovery Protocol (LLDP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -1098,7 +1096,7 @@ lldp_private_tia_print(netdissect_options *ndo, tptr += 2; lci_len -= 2; - ND_PRINT("\n\t CA type \'%s\' (%u), length %u: ", + ND_PRINT("\n\t CA type '%s' (%u), length %u: ", tok2str(lldp_tia_location_lci_catype_values, "unknown", ca_type), ca_type, ca_len); diff --git a/contrib/tcpdump/print-lmp.c b/contrib/tcpdump/print-lmp.c index 925f3b07f354..66ac20301aae 100644 --- a/contrib/tcpdump/print-lmp.c +++ b/contrib/tcpdump/print-lmp.c @@ -20,9 +20,7 @@ /* specification: RFC 4204 */ /* OIF UNI 1.0: https://web.archive.org/web/20160401194747/http://www.oiforum.com/public/documents/OIF-UNI-01.0.pdf */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-loopback.c b/contrib/tcpdump/print-loopback.c index ee0caf3cfe4f..b96b63885642 100644 --- a/contrib/tcpdump/print-loopback.c +++ b/contrib/tcpdump/print-loopback.c @@ -29,12 +29,11 @@ /* * originally defined as the Ethernet Configuration Testing Protocol. - * specification: https://www.mit.edu/people/jhawk/ctp.pdf + * specification: + * https://web.archive.org/web/20060919181108/http://www.mit.edu/people/jhawk/ctp.pdf */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-lspping.c b/contrib/tcpdump/print-lspping.c index f3183cb29299..837738a7ad55 100644 --- a/contrib/tcpdump/print-lspping.c +++ b/contrib/tcpdump/print-lspping.c @@ -17,9 +17,7 @@ /* specification: RFC 4379 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-lwapp.c b/contrib/tcpdump/print-lwapp.c index 10a2e0bed043..7cee32e02735 100644 --- a/contrib/tcpdump/print-lwapp.c +++ b/contrib/tcpdump/print-lwapp.c @@ -19,9 +19,7 @@ /* specification: RFC 5412 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-lwres.c b/contrib/tcpdump/print-lwres.c index 97f176cb3005..4e4ae6d6becf 100644 --- a/contrib/tcpdump/print-lwres.c +++ b/contrib/tcpdump/print-lwres.c @@ -29,9 +29,7 @@ /* \summary: BIND9 Lightweight Resolver protocol printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -267,7 +265,7 @@ lwres_printaddr(netdissect_options *ndo, } } - return ND_BYTES_BETWEEN(p, p0); + return ND_BYTES_BETWEEN(p0, p); } void @@ -291,7 +289,9 @@ lwres_print(netdissect_options *ndo, if (ndo->ndo_vflag || v != LWRES_LWPACKETVERSION_0) ND_PRINT(" v%u", v); if (v != LWRES_LWPACKETVERSION_0) { - s = bp + GET_BE_U_4(np->length); + uint32_t pkt_len = GET_BE_U_4(np->length); + ND_TCHECK_LEN(bp, pkt_len); + s = bp + pkt_len; goto tail; } @@ -546,7 +546,7 @@ lwres_print(netdissect_options *ndo, ND_PRINT(" [len: %u != %u]", GET_BE_U_4(np->length), length); } - if (!unsupported && ND_BYTES_BETWEEN(s, bp) < GET_BE_U_4(np->length)) + if (!unsupported && ND_BYTES_BETWEEN(bp, s) < GET_BE_U_4(np->length)) ND_PRINT("[extra]"); return; diff --git a/contrib/tcpdump/print-m3ua.c b/contrib/tcpdump/print-m3ua.c index ecf7db834385..403a417b0202 100644 --- a/contrib/tcpdump/print-m3ua.c +++ b/contrib/tcpdump/print-m3ua.c @@ -26,9 +26,7 @@ /* RFC 4666 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-macsec.c b/contrib/tcpdump/print-macsec.c index 607f696ef265..0c9ea05f1335 100644 --- a/contrib/tcpdump/print-macsec.c +++ b/contrib/tcpdump/print-macsec.c @@ -21,15 +21,12 @@ /* \summary: MACsec printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include "netdissect.h" #include "addrtoname.h" -#include "ethertype.h" #include "extract.h" #define MACSEC_DEFAULT_ICV_LEN 16 diff --git a/contrib/tcpdump/print-mobile.c b/contrib/tcpdump/print-mobile.c index 528da79c9f3e..4ac71737c494 100644 --- a/contrib/tcpdump/print-mobile.c +++ b/contrib/tcpdump/print-mobile.c @@ -38,9 +38,7 @@ /* \summary: IPv4 mobility printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-mobility.c b/contrib/tcpdump/print-mobility.c index 55340ca56d2f..945a8ca2b51c 100644 --- a/contrib/tcpdump/print-mobility.c +++ b/contrib/tcpdump/print-mobility.c @@ -30,9 +30,7 @@ /* \summary: IPv6 mobility printer */ /* RFC 3775 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -130,8 +128,7 @@ mobility_opt_print(netdissect_options *ndo, else { if (i + 1 < len) { optlen = GET_U_1(bp + i + 1) + 2; - } - else + } else goto trunc; } if (i + optlen > len) diff --git a/contrib/tcpdump/print-mpcp.c b/contrib/tcpdump/print-mpcp.c index 4ba873bf3fca..519f41b1112d 100644 --- a/contrib/tcpdump/print-mpcp.c +++ b/contrib/tcpdump/print-mpcp.c @@ -17,9 +17,7 @@ /* \summary: IEEE 802.3ah Multi-Point Control Protocol (MPCP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-mpls.c b/contrib/tcpdump/print-mpls.c index c9be49649762..a80b722fa7e7 100644 --- a/contrib/tcpdump/print-mpls.c +++ b/contrib/tcpdump/print-mpls.c @@ -28,9 +28,7 @@ /* \summary: Multi-Protocol Label Switching (MPLS) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-mptcp.c b/contrib/tcpdump/print-mptcp.c index 7ffb1f51a4c6..79a79ca06dfa 100644 --- a/contrib/tcpdump/print-mptcp.c +++ b/contrib/tcpdump/print-mptcp.c @@ -36,9 +36,7 @@ /* specification: RFC 6824 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-msdp.c b/contrib/tcpdump/print-msdp.c index 7845116bdc7e..61a332d9d6bd 100644 --- a/contrib/tcpdump/print-msdp.c +++ b/contrib/tcpdump/print-msdp.c @@ -18,9 +18,7 @@ /* \summary: Multicast Source Discovery Protocol (MSDP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-msnlb.c b/contrib/tcpdump/print-msnlb.c index 8afaa7fe7107..4e242df652cc 100644 --- a/contrib/tcpdump/print-msnlb.c +++ b/contrib/tcpdump/print-msnlb.c @@ -28,9 +28,7 @@ /* \summary: MS Network Load Balancing's (NLB) heartbeat printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-nflog.c b/contrib/tcpdump/print-nflog.c index 1e75561b967d..a5f7a823489f 100644 --- a/contrib/tcpdump/print-nflog.c +++ b/contrib/tcpdump/print-nflog.c @@ -27,9 +27,7 @@ /* \summary: DLT_NFLOG printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -97,15 +95,25 @@ typedef struct nflog_timestamp { #define NFULA_PREFIX 10 /* text string - null-terminated, count includes NUL */ #define NFULA_UID 11 /* UID owning socket on which packet was sent/received */ #define NFULA_SEQ 12 /* sequence number of packets on this NFLOG socket */ -#define NFULA_SEQ_GLOBAL 13 /* sequence number of pakets on all NFLOG sockets */ +#define NFULA_SEQ_GLOBAL 13 /* sequence number of packets on all NFLOG sockets */ #define NFULA_GID 14 /* GID owning socket on which packet was sent/received */ #define NFULA_HWTYPE 15 /* ARPHRD_ type of skbuff's device */ #define NFULA_HWHEADER 16 /* skbuff's MAC-layer header */ #define NFULA_HWLEN 17 /* length of skbuff's MAC-layer header */ +/* + * Define two constants specifically for the two AF code points from the + * LINKTYPE_NFLOG specification above and use these constants instead of + * AF_INET and AF_INET6. This is the only way to dissect the "wire" encoding + * correctly because some BSD systems define AF_INET6 differently from Linux + * (see af.h) and Haiku defines both AF_INET and AF_INET6 differently from + * Linux. + */ +#define NFLOG_AF_INET 2 +#define NFLOG_AF_INET6 10 static const struct tok nflog_values[] = { - { AF_INET, "IPv4" }, - { AF_INET6, "IPv6" }, + { NFLOG_AF_INET, "IPv4" }, + { NFLOG_AF_INET6, "IPv6" }, { 0, NULL } }; @@ -203,11 +211,11 @@ nflog_if_print(netdissect_options *ndo, switch (GET_U_1(hdr->nflog_family)) { - case AF_INET: + case NFLOG_AF_INET: ip_print(ndo, p, length); break; - case AF_INET6: + case NFLOG_AF_INET6: ip6_print(ndo, p, length); break; diff --git a/contrib/tcpdump/print-nfs.c b/contrib/tcpdump/print-nfs.c index af1b274f5f74..b67ec370ed67 100644 --- a/contrib/tcpdump/print-nfs.c +++ b/contrib/tcpdump/print-nfs.c @@ -21,9 +21,7 @@ /* \summary: Network File System (NFS) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -198,7 +196,7 @@ static const struct tok sunrpc_str[] = { }; static void -print_nfsaddr(netdissect_options *ndo, +nfsaddr_print(netdissect_options *ndo, const u_char *bp, const char *s, const char *d) { const struct ip *ip; @@ -349,7 +347,7 @@ nfsreply_print(netdissect_options *ndo, snprintf(dstid, sizeof(dstid), "%u", GET_BE_U_4(rp->rm_xid)); } - print_nfsaddr(ndo, bp2, srcid, dstid); + nfsaddr_print(ndo, bp2, srcid, dstid); nfsreply_noaddr_print(ndo, bp, length, bp2); } @@ -434,6 +432,11 @@ parsereq(netdissect_options *ndo, if (length < 2 * sizeof(*dp)) goto trunc; len = GET_BE_U_4(dp + 1); + if (len > length) { + ND_PRINT(" [credentials length %u > %u]", len, length); + nd_print_invalid(ndo); + return NULL; + } rounded_len = roundup2(len, 4); ND_TCHECK_LEN(dp + 2, rounded_len); if (2 * sizeof(*dp) + rounded_len <= length) { @@ -453,6 +456,11 @@ parsereq(netdissect_options *ndo, if (length < 2 * sizeof(*dp)) goto trunc; len = GET_BE_U_4(dp + 1); + if (len > length) { + ND_PRINT(" [verifier length %u > %u]", len, length); + nd_print_invalid(ndo); + return NULL; + } rounded_len = roundup2(len, 4); ND_TCHECK_LEN(dp + 2, rounded_len); if (2 * sizeof(*dp) + rounded_len < length) { @@ -896,15 +904,17 @@ nfs_printfh(netdissect_options *ndo, if (spacep) *spacep = '\0'; - ND_PRINT(" fh %s/", temp); + ND_PRINT(" fh "); + fn_print_str(ndo, (const u_char *)temp); + ND_PRINT("/"); } else { ND_PRINT(" fh %u,%u/", fsid.Fsid_dev.Major, fsid.Fsid_dev.Minor); } - if(fsid.Fsid_dev.Minor == 257) + if(fsid.Fsid_dev.Minor == UINT_MAX && fsid.Fsid_dev.Major == UINT_MAX) /* Print the undecoded handle */ - ND_PRINT("%s", fsid.Opaque_Handle); + fn_print_str(ndo, (const u_char *)fsid.Opaque_Handle); else ND_PRINT("%u", ino); } @@ -970,8 +980,7 @@ xid_map_enter(netdissect_options *ndo, sizeof(ip->ip_src)); UNALIGNED_MEMCPY(&xmep->server, ip->ip_dst, sizeof(ip->ip_dst)); - } - else if (ip6) { + } else if (ip6) { xmep->ipver = 6; UNALIGNED_MEMCPY(&xmep->client, ip6->ip6_src, sizeof(ip6->ip6_src)); @@ -1559,7 +1568,7 @@ interp_reply(netdissect_options *ndo, if (dp == NULL) goto trunc; if (v3) { - if (parsewccres(ndo, dp, ndo->ndo_vflag, &nfserr) == 0) + if (parsewccres(ndo, dp, ndo->ndo_vflag, &nfserr) == NULL) goto trunc; } else { if (parseattrstat(ndo, dp, !ndo->ndo_qflag, 0, &nfserr) == 0) diff --git a/contrib/tcpdump/print-nsh.c b/contrib/tcpdump/print-nsh.c index 12a63cd6370c..bf86a8bae4b9 100644 --- a/contrib/tcpdump/print-nsh.c +++ b/contrib/tcpdump/print-nsh.c @@ -25,9 +25,7 @@ /* specification: RFC 8300 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -181,7 +179,7 @@ nsh_print(netdissect_options *ndo, const u_char *bp, u_int len) if (md_type == MD_TYPE1) { if (length != 6) { - ND_PRINT(" (invalid length for the MD type)"); + ND_PRINT(" (length for the MD type)"); goto invalid; } for (n = 0; n < length - 2; n++) { @@ -189,8 +187,7 @@ nsh_print(netdissect_options *ndo, const u_char *bp, u_int len) bp += NSH_HDR_WORD_SIZE; } past_headers = 1; - } - else if (md_type == MD_TYPE2) { + } else if (md_type == MD_TYPE2) { n = 0; while (n < length - 2) { uint16_t tlv_class; diff --git a/contrib/tcpdump/print-ntp.c b/contrib/tcpdump/print-ntp.c index 537975cc2e59..30bef73172e9 100644 --- a/contrib/tcpdump/print-ntp.c +++ b/contrib/tcpdump/print-ntp.c @@ -32,14 +32,10 @@ * RFC 5905 - NTPv4 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" -#include <time.h> - #include "netdissect.h" #include "addrtoname.h" #include "extract.h" diff --git a/contrib/tcpdump/print-null.c b/contrib/tcpdump/print-null.c index a1b03f86aae6..037a35fd9678 100644 --- a/contrib/tcpdump/print-null.c +++ b/contrib/tcpdump/print-null.c @@ -21,9 +21,7 @@ /* \summary: BSD loopback device printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-olsr.c b/contrib/tcpdump/print-olsr.c index 8f049237167b..d83a960e1403 100644 --- a/contrib/tcpdump/print-olsr.c +++ b/contrib/tcpdump/print-olsr.c @@ -21,9 +21,7 @@ /* specification: RFC 3626 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -361,8 +359,7 @@ olsr_print(netdissect_options *ndo, } msgptr; int msg_len_valid = 0; - if (is_ipv6) - { + if (is_ipv6) { ND_TCHECK_LEN(tptr, sizeof(struct olsr_msg6)); msgptr.v6 = (const struct olsr_msg6 *) tptr; msg_type = GET_U_1(msgptr.v6->msg_type); @@ -391,9 +388,7 @@ olsr_print(netdissect_options *ndo, msg_tlen = msg_len - sizeof(struct olsr_msg6); msg_data = tptr + sizeof(struct olsr_msg6); - } - else /* (!is_ipv6) */ - { + } else { /* (!is_ipv6) */ ND_TCHECK_LEN(tptr, sizeof(struct olsr_msg4)); msgptr.v4 = (const struct olsr_msg4 *) tptr; msg_type = GET_U_1(msgptr.v4->msg_type); @@ -534,8 +529,7 @@ olsr_print(netdissect_options *ndo, } case OLSR_HNA_MSG: - if (is_ipv6) - { + if (is_ipv6) { int i = 0; ND_PRINT("\n\t Advertised networks (total %u)", @@ -555,9 +549,7 @@ olsr_print(netdissect_options *ndo, msg_data += sizeof(struct olsr_hna6); msg_tlen -= sizeof(struct olsr_hna6); } - } - else - { + } else { int col = 0; ND_PRINT("\n\t Advertised networks (total %u)", diff --git a/contrib/tcpdump/print-openflow-1.0.c b/contrib/tcpdump/print-openflow-1.0.c index 1d7f2474875e..3ee1650da573 100644 --- a/contrib/tcpdump/print-openflow-1.0.c +++ b/contrib/tcpdump/print-openflow-1.0.c @@ -59,9 +59,7 @@ /* \summary: OpenFlow protocol version 1.0 printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -318,7 +316,6 @@ static const struct tok ofp_capabilities_bm[] = { #define OFPC_FRAG_NORMAL 0x0000U #define OFPC_FRAG_DROP 0x0001U #define OFPC_FRAG_REASM 0x0002U -#define OFPC_FRAG_MASK 0x0003U static const struct tok ofp_config_str[] = { { OFPC_FRAG_NORMAL, "FRAG_NORMAL" }, { OFPC_FRAG_DROP, "FRAG_DROP" }, @@ -700,12 +697,12 @@ of10_bsn_message_print(netdissect_options *ndo, { uint32_t subtype; - if (len < 4) - goto invalid; + ND_PRINT("\n\t"); + ND_ICHECK_U(len, <, 4); /* subtype */ subtype = GET_BE_U_4(cp); OF_FWD(4); - ND_PRINT("\n\t subtype %s", tok2str(bsn_subtype_str, "unknown (0x%08x)", subtype)); + ND_PRINT(" subtype %s", tok2str(bsn_subtype_str, "unknown (0x%08x)", subtype)); switch (subtype) { case BSN_GET_IP_MASK_REQUEST: /* @@ -720,8 +717,7 @@ of10_bsn_message_print(netdissect_options *ndo, * +---------------+---------------+---------------+---------------+ * */ - if (len != 8) - goto invalid; + ND_ICHECK_U(len, !=, 8); /* index */ ND_PRINT(", index %u", GET_U_1(cp)); OF_FWD(1); @@ -743,8 +739,7 @@ of10_bsn_message_print(netdissect_options *ndo, * +---------------+---------------+---------------+---------------+ * */ - if (len != 8) - goto invalid; + ND_ICHECK_U(len, !=, 8); /* index */ ND_PRINT(", index %u", GET_U_1(cp)); OF_FWD(1); @@ -766,8 +761,7 @@ of10_bsn_message_print(netdissect_options *ndo, * +---------------+---------------+---------------+---------------+ * */ - if (len != 4) - goto invalid; + ND_ICHECK_U(len, !=, 4); /* report_mirror_ports */ ND_PRINT(", report_mirror_ports %s", tok2str(bsn_onoff_str, "bogus (%u)", GET_U_1(cp))); @@ -789,8 +783,7 @@ of10_bsn_message_print(netdissect_options *ndo, * +---------------+---------------+---------------+---------------+ * */ - if (len) - goto invalid; + ND_ICHECK_U(len, !=, 0); break; case BSN_VIRTUAL_PORT_REMOVE_REQUEST: /* @@ -803,8 +796,7 @@ of10_bsn_message_print(netdissect_options *ndo, * +---------------+---------------+---------------+---------------+ * */ - if (len != 4) - goto invalid; + ND_ICHECK_U(len, !=, 4); /* vport_no */ ND_PRINT(", vport_no %u", GET_BE_U_4(cp)); break; @@ -821,8 +813,7 @@ of10_bsn_message_print(netdissect_options *ndo, * +---------------+---------------+-------- * */ - if (len < 4) - goto invalid; + ND_ICHECK_U(len, <, 4); /* service */ ND_PRINT(", service %u", GET_BE_U_4(cp)); OF_FWD(4); @@ -859,8 +850,7 @@ of10_bsn_message_print(netdissect_options *ndo, * +---------------+---------------+---------------+---------------+ * */ - if (len != 4) - goto invalid; + ND_ICHECK_U(len, !=, 4); /* status */ ND_PRINT(", status 0x%08x", GET_BE_U_4(cp)); break; @@ -880,12 +870,12 @@ of10_bsn_actions_print(netdissect_options *ndo, { uint32_t subtype, vlan_tag; - if (len < 4) - goto invalid; + ND_PRINT("\n\t "); + ND_ICHECK_U(len, <, 4); /* subtype */ subtype = GET_BE_U_4(cp); OF_FWD(4); - ND_PRINT("\n\t subtype %s", tok2str(bsn_action_subtype_str, "unknown (0x%08x)", subtype)); + ND_PRINT(" subtype %s", tok2str(bsn_action_subtype_str, "unknown (0x%08x)", subtype)); switch (subtype) { case BSN_ACTION_MIRROR: /* @@ -902,8 +892,7 @@ of10_bsn_actions_print(netdissect_options *ndo, * +---------------+---------------+---------------+---------------+ * */ - if (len != 12) - goto invalid; + ND_ICHECK_U(len, !=, 12); /* dest_port */ ND_PRINT(", dest_port %u", GET_BE_U_4(cp)); OF_FWD(4); @@ -945,8 +934,7 @@ of10_vendor_action_print(netdissect_options *ndo, uint32_t vendor; void (*decoder)(netdissect_options *, const u_char *, u_int); - if (len < 4) - goto invalid; + ND_ICHECK_U(len, <, 4); /* vendor */ vendor = GET_BE_U_4(cp); OF_FWD(4); @@ -989,8 +977,7 @@ of10_vendor_data_print(netdissect_options *ndo, { uint32_t vendor; - if (len < 4) - goto invalid; + ND_ICHECK_U(len, <, 4); /* vendor */ vendor = GET_BE_U_4(cp); OF_FWD(4); @@ -1099,18 +1086,18 @@ of10_queue_props_print(netdissect_options *ndo, uint16_t property, plen; u_char plen_bogus = 0, skip = 0; - if (len < OF_QUEUE_PROP_MINLEN) - goto invalid; + ND_PRINT("\n\t "); + ND_ICHECKMSG_U("remaining length", len, <, OF_QUEUE_PROP_MINLEN); /* property */ property = GET_BE_U_2(cp); OF_FWD(2); - ND_PRINT("\n\t property %s", tok2str(ofpqt_str, "invalid (0x%04x)", property)); + ND_PRINT(" property %s", tok2str(ofpqt_str, "invalid (0x%04x)", property)); /* len */ plen = GET_BE_U_2(cp); OF_FWD(2); ND_PRINT(", len %u", plen); - if (plen < OF_QUEUE_PROP_MINLEN || plen > len + 4) - goto invalid; + ND_ICHECKMSG_U("property length", plen, <, OF_QUEUE_PROP_MINLEN); + ND_ICHECKMSG_U("property length", plen, >, len + 4); /* pad */ /* Sometimes the last field, check bounds. */ OF_CHK_FWD(4); @@ -1165,17 +1152,17 @@ of10_queues_print(netdissect_options *ndo, while (len) { uint16_t desclen; - if (len < OF_PACKET_QUEUE_MINLEN) - goto invalid; + ND_PRINT("\n\t "); + ND_ICHECKMSG_U("remaining length", len, <, OF_PACKET_QUEUE_MINLEN); /* queue_id */ - ND_PRINT("\n\t queue_id %u", GET_BE_U_4(cp)); + ND_PRINT(" queue_id %u", GET_BE_U_4(cp)); OF_FWD(4); /* len */ desclen = GET_BE_U_2(cp); OF_FWD(2); ND_PRINT(", len %u", desclen); - if (desclen < OF_PACKET_QUEUE_MINLEN || desclen > len + 6) - goto invalid; + ND_ICHECKMSG_U("prop. desc. length", desclen, <, OF_PACKET_QUEUE_MINLEN); + ND_ICHECKMSG_U("prop. desc. length", desclen, >, len + 6); /* pad */ /* Sometimes the last field, check bounds. */ OF_CHK_FWD(2); @@ -1276,8 +1263,7 @@ of10_match_print(netdissect_options *ndo, && ! (wildcards & OFPFW_NW_PROTO) && nw_proto == IPPROTO_ICMP ? "icmp_code" : "tp_dst"; ND_PRINT("%smatch %s %u", pfx, field_name, GET_BE_U_2(cp)); - } - else + } else ND_TCHECK_2(cp); } @@ -1290,12 +1276,12 @@ of10_actions_print(netdissect_options *ndo, uint16_t type, alen, output_port; u_char alen_bogus = 0, skip = 0; - if (len < OF_ACTION_MINLEN) - goto invalid; + ND_PRINT("%saction", pfx); + ND_ICHECKMSG_U("remaining length", len, <, OF_ACTION_MINLEN); /* type */ type = GET_BE_U_2(cp); OF_FWD(2); - ND_PRINT("%saction type %s", pfx, tok2str(ofpat_str, "invalid (0x%04x)", type)); + ND_PRINT(" type %s", tok2str(ofpat_str, "invalid (0x%04x)", type)); /* length */ alen = GET_BE_U_2(cp); OF_FWD(2); @@ -1308,8 +1294,8 @@ of10_actions_print(netdissect_options *ndo, */ /* On action size underrun/overrun skip the rest of the action list. */ - if (alen < OF_ACTION_MINLEN || alen > len + 4) - goto invalid; + ND_ICHECK_U(alen, <, OF_ACTION_MINLEN); + ND_ICHECK_U(alen, >, len + 4); /* * After validating the basic length constraint it will be safe * to skip the current action if the action size is not valid @@ -1468,8 +1454,7 @@ of10_features_reply_print(netdissect_options *ndo, OF_FWD(4); /* ports */ while (len) { - if (len < OF_PHY_PORT_FIXLEN) - goto invalid; + ND_ICHECKMSG_U("\n\t port def. length", len, <, OF_PHY_PORT_FIXLEN); of10_phy_port_print(ndo, cp); OF_FWD(OF_PHY_PORT_FIXLEN); } @@ -1553,15 +1538,15 @@ of10_port_mod_print(netdissect_options *ndo, ND_PRINT(", hw_addr %s", GET_ETHERADDR_STRING(cp)); cp += MAC_ADDR_LEN; /* config */ - ND_PRINT("\n\t config 0x%08x", GET_BE_U_4(cp)); + ND_PRINT("\n\t config 0x%08x", GET_BE_U_4(cp)); of_bitmap_print(ndo, ofppc_bm, GET_BE_U_4(cp), OFPPC_U); cp += 4; /* mask */ - ND_PRINT("\n\t mask 0x%08x", GET_BE_U_4(cp)); + ND_PRINT("\n\t mask 0x%08x", GET_BE_U_4(cp)); of_bitmap_print(ndo, ofppc_bm, GET_BE_U_4(cp), OFPPC_U); cp += 4; /* advertise */ - ND_PRINT("\n\t advertise 0x%08x", GET_BE_U_4(cp)); + ND_PRINT("\n\t advertise 0x%08x", GET_BE_U_4(cp)); of_bitmap_print(ndo, ofppf_bm, GET_BE_U_4(cp), OFPPF_U); cp += 4; /* pad */ @@ -1617,13 +1602,11 @@ of10_stats_request_print(netdissect_options *ndo, switch(type) { case OFPST_DESC: case OFPST_TABLE: - if (len) - goto invalid; + ND_ICHECK_U(len, !=, 0); return; case OFPST_FLOW: case OFPST_AGGREGATE: - if (len != OF_FLOW_STATS_REQUEST_FIXLEN) - goto invalid; + ND_ICHECK_U(len, !=, OF_FLOW_STATS_REQUEST_FIXLEN); /* match */ of10_match_print(ndo, "\n\t ", cp); OF_FWD(OF_MATCH_FIXLEN); @@ -1638,8 +1621,7 @@ of10_stats_request_print(netdissect_options *ndo, tok2str(ofpp_str, "%u", GET_BE_U_2(cp))); return; case OFPST_PORT: - if (len != OF_PORT_STATS_REQUEST_FIXLEN) - goto invalid; + ND_ICHECK_U(len, !=, OF_PORT_STATS_REQUEST_FIXLEN); /* port_no */ ND_PRINT("\n\t port_no %s", tok2str(ofpp_str, "%u", GET_BE_U_2(cp))); @@ -1649,8 +1631,7 @@ of10_stats_request_print(netdissect_options *ndo, OF_CHK_FWD(6); return; case OFPST_QUEUE: - if (len != OF_QUEUE_STATS_REQUEST_FIXLEN) - goto invalid; + ND_ICHECK_U(len, !=, OF_QUEUE_STATS_REQUEST_FIXLEN); /* port_no */ ND_PRINT("\n\t port_no %s", tok2str(ofpp_str, "%u", GET_BE_U_2(cp))); @@ -1677,10 +1658,10 @@ static void of10_desc_stats_reply_print(netdissect_options *ndo, const u_char *cp, u_int len) { - if (len != OF_DESC_STATS_REPLY_FIXLEN) - goto invalid; + ND_PRINT("\n\t "); + ND_ICHECK_U(len, !=, OF_DESC_STATS_REPLY_FIXLEN); /* mfr_desc */ - ND_PRINT("\n\t mfr_desc '"); + ND_PRINT(" mfr_desc '"); nd_printjnp(ndo, cp, DESC_STR_LEN); ND_PRINT("'"); OF_FWD(DESC_STR_LEN); @@ -1718,13 +1699,13 @@ of10_flow_stats_reply_print(netdissect_options *ndo, while (len) { uint16_t entry_len; - if (len < OF_FLOW_STATS_REPLY_MINLEN) - goto invalid; + ND_PRINT("\n\t"); + ND_ICHECKMSG_U("remaining length", len, <, OF_FLOW_STATS_REPLY_MINLEN); /* length */ entry_len = GET_BE_U_2(cp); - ND_PRINT("\n\t length %u", entry_len); - if (entry_len < OF_FLOW_STATS_REPLY_MINLEN || entry_len > len) - goto invalid; + ND_PRINT(" length %u", entry_len); + ND_ICHECK_U(entry_len, <, OF_FLOW_STATS_REPLY_MINLEN); + ND_ICHECK_U(entry_len, >, len); OF_FWD(2); /* table_id */ ND_PRINT(", table_id %s", @@ -1777,10 +1758,10 @@ static void of10_aggregate_stats_reply_print(netdissect_options *ndo, const u_char *cp, u_int len) { - if (len != OF_AGGREGATE_STATS_REPLY_FIXLEN) - goto invalid; + ND_PRINT("\n\t"); + ND_ICHECKMSG_U("remaining length", len, !=, OF_AGGREGATE_STATS_REPLY_FIXLEN); /* packet_count */ - ND_PRINT("\n\t packet_count %" PRIu64, GET_BE_U_8(cp)); + ND_PRINT(" packet_count %" PRIu64, GET_BE_U_8(cp)); OF_FWD(8); /* byte_count */ ND_PRINT(", byte_count %" PRIu64, GET_BE_U_8(cp)); @@ -1804,10 +1785,10 @@ of10_table_stats_reply_print(netdissect_options *ndo, const u_char *cp, u_int len) { while (len) { - if (len < OF_TABLE_STATS_REPLY_FIXLEN) - goto invalid; + ND_PRINT("\n\t"); + ND_ICHECKMSG_U("remaining length", len, <, OF_TABLE_STATS_REPLY_FIXLEN); /* table_id */ - ND_PRINT("\n\t table_id %s", + ND_PRINT(" table_id %s", tok2str(tableid_str, "%u", GET_U_1(cp))); OF_FWD(1); /* pad */ @@ -1847,10 +1828,10 @@ of10_port_stats_reply_print(netdissect_options *ndo, const u_char *cp, u_int len) { while (len) { - if (len < OF_PORT_STATS_REPLY_FIXLEN) - goto invalid; + ND_PRINT("\n\t "); + ND_ICHECKMSG_U("remaining length", len, <, OF_PORT_STATS_REPLY_FIXLEN); /* port_no */ - ND_PRINT("\n\t port_no %s", + ND_PRINT(" port_no %s", tok2str(ofpp_str, "%u", GET_BE_U_2(cp))); OF_FWD(2); if (ndo->ndo_vflag < 2) { @@ -1909,10 +1890,10 @@ of10_queue_stats_reply_print(netdissect_options *ndo, const u_char *cp, u_int len) { while (len) { - if (len < OF_QUEUE_STATS_REPLY_FIXLEN) - goto invalid; + ND_PRINT("\n\t "); + ND_ICHECKMSG_U("remaining length", len, <, OF_QUEUE_STATS_REPLY_FIXLEN); /* port_no */ - ND_PRINT("\n\t port_no %s", + ND_PRINT(" port_no %s", tok2str(ofpp_str, "%u", GET_BE_U_2(cp))); OF_FWD(2); /* pad */ @@ -1986,9 +1967,9 @@ of10_packet_out_print(netdissect_options *ndo, OF_FWD(2); /* actions_len */ actions_len = GET_BE_U_2(cp); + ND_PRINT(", actions_len %u", actions_len); OF_FWD(2); - if (actions_len > len) - goto invalid; + ND_ICHECK_U(actions_len, >, len); /* actions */ of10_actions_print(ndo, "\n\t ", cp, actions_len); OF_FWD(actions_len); diff --git a/contrib/tcpdump/print-openflow-1.3.c b/contrib/tcpdump/print-openflow-1.3.c index 9e76ba1b2935..935e573909f0 100644 --- a/contrib/tcpdump/print-openflow-1.3.c +++ b/contrib/tcpdump/print-openflow-1.3.c @@ -33,9 +33,7 @@ /* \summary: OpenFlow protocol version 1.3 printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -676,7 +674,7 @@ of13_port_print(netdissect_options *ndo, cp += 4; /* state */ ND_PRINT("\n\t state 0x%08x", GET_BE_U_4(cp)); - of_bitmap_print(ndo, ofpps_bm, GET_BE_U_4(cp), OFPPS_U);; + of_bitmap_print(ndo, ofpps_bm, GET_BE_U_4(cp), OFPPS_U); cp += 4; /* curr */ ND_PRINT("\n\t curr 0x%08x", GET_BE_U_4(cp)); @@ -856,21 +854,20 @@ of13_hello_elements_print(netdissect_options *ndo, while (len) { uint16_t type, bmlen; - if (len < OF_HELLO_ELEM_MINSIZE) - goto invalid; + ND_PRINT("\n\t"); + ND_ICHECKMSG_U("remaining length", len, <, OF_HELLO_ELEM_MINSIZE); /* type */ type = GET_BE_U_2(cp); OF_FWD(2); - ND_PRINT("\n\t type %s", + ND_PRINT(" type %s", tok2str(ofphet_str, "unknown (0x%04x)", type)); /* length */ bmlen = GET_BE_U_2(cp); OF_FWD(2); ND_PRINT(", length %u", bmlen); /* cp is OF_HELLO_ELEM_MINSIZE bytes in */ - if (bmlen < OF_HELLO_ELEM_MINSIZE || - bmlen > OF_HELLO_ELEM_MINSIZE + len) - goto invalid; + ND_ICHECKMSG_U("bitmap length", bmlen, <, OF_HELLO_ELEM_MINSIZE); + ND_ICHECKMSG_U("bitmap length", bmlen, >, OF_HELLO_ELEM_MINSIZE + len); switch (type) { case OFPHET_VERSIONBITMAP: /* diff --git a/contrib/tcpdump/print-openflow.c b/contrib/tcpdump/print-openflow.c index 6024a215a133..82eeda0c7267 100644 --- a/contrib/tcpdump/print-openflow.c +++ b/contrib/tcpdump/print-openflow.c @@ -32,9 +32,7 @@ /* \summary: version-independent OpenFlow printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-ospf.c b/contrib/tcpdump/print-ospf.c index e6bebed374f8..eae546d9c296 100644 --- a/contrib/tcpdump/print-ospf.c +++ b/contrib/tcpdump/print-ospf.c @@ -23,9 +23,7 @@ /* \summary: Open Shortest Path First (OSPF) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -844,6 +842,11 @@ ospf_print_lsa(netdissect_options *ndo, break; } + + /* in OSPF everything has to be 32-bit aligned, including TLVs */ + if (tlv_length % 4) { + tlv_length += (4 - (tlv_length % 4)); + } tptr+=tlv_length; ls_length_remaining-=tlv_length; } @@ -1067,7 +1070,8 @@ ospf_decode_v2(netdissect_options *ndo, case OSPF_TYPE_LS_ACK: lshp = op->ospf_lsa.lsa_lshdr; - while (ospf_print_lshdr(ndo, lshp) != -1) { + while ((const u_char *)lshp < dataend) { + ospf_print_lshdr(ndo, lshp); ++lshp; } break; diff --git a/contrib/tcpdump/print-ospf6.c b/contrib/tcpdump/print-ospf6.c index 49167954e20c..3a227c3e12c2 100644 --- a/contrib/tcpdump/print-ospf6.c +++ b/contrib/tcpdump/print-ospf6.c @@ -23,9 +23,7 @@ /* \summary: IPv6 Open Shortest Path First (OSPFv3) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -388,14 +386,23 @@ static int ospf6_print_lshdr(netdissect_options *ndo, const struct lsa6_hdr *lshp, const u_char *dataend) { + u_int ls_length; + if ((const u_char *)(lshp + 1) > dataend) goto trunc; + ls_length = GET_BE_U_2(lshp->ls_length); + if (ls_length < sizeof(struct lsa_hdr)) { + ND_PRINT("\n\t Bogus length %u < header (%zu)", ls_length, + sizeof(struct lsa_hdr)); + goto trunc; + } + ND_PRINT("\n\t Advertising Router %s, seq 0x%08x, age %us, length %zu", GET_IPADDR_STRING(lshp->ls_router), GET_BE_U_4(lshp->ls_seq), GET_BE_U_2(lshp->ls_age), - GET_BE_U_2(lshp->ls_length)-sizeof(struct lsa6_hdr)); + ls_length-sizeof(struct lsa6_hdr)); ospf6_print_ls_type(ndo, GET_BE_U_2(lshp->ls_type), &lshp->ls_stateid); @@ -734,7 +741,7 @@ ospf6_decode_v3(netdissect_options *ndo, const struct lsr6 *lsrp; const struct lsa6_hdr *lshp; const struct lsa6 *lsap; - int i; + uint32_t i; switch (GET_U_1(op->ospf6_type)) { diff --git a/contrib/tcpdump/print-otv.c b/contrib/tcpdump/print-otv.c index a0fe9d0eb5b3..1303740009a0 100644 --- a/contrib/tcpdump/print-otv.c +++ b/contrib/tcpdump/print-otv.c @@ -17,9 +17,7 @@ /* specification: draft-hasmit-otv-04 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-pflog.c b/contrib/tcpdump/print-pflog.c index 23956524cbaf..71bf01f07555 100644 --- a/contrib/tcpdump/print-pflog.c +++ b/contrib/tcpdump/print-pflog.c @@ -21,9 +21,7 @@ /* \summary: *BSD/Darwin packet filter log file printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -37,7 +35,7 @@ static const struct tok pf_reasons[] = { { PFRES_MATCH, "0(match)" }, { PFRES_BADOFF, "1(bad-offset)" }, { PFRES_FRAG, "2(fragment)" }, - { PFRES_NORM, "3(short)" }, + { PFRES_SHORT, "3(short)" }, { PFRES_NORM, "4(normalize)" }, { PFRES_MEMORY, "5(memory)" }, { PFRES_TS, "6(bad-timestamp)" }, @@ -108,9 +106,9 @@ pflog_print(netdissect_options *ndo, const struct pfloghdr *hdr) uint32_t rulenr, subrulenr, ridentifier; ndo->ndo_protocol = "pflog"; - rulenr = GET_BE_U_4(&hdr->rulenr); - subrulenr = GET_BE_U_4(&hdr->subrulenr); - ridentifier = GET_BE_U_4(&hdr->ridentifier); + rulenr = GET_BE_U_4(hdr->rulenr); + subrulenr = GET_BE_U_4(hdr->subrulenr); + ridentifier = GET_BE_U_4(hdr->ridentifier); if (subrulenr == (uint32_t)-1) ND_PRINT("rule %u/", rulenr); else { @@ -119,17 +117,17 @@ pflog_print(netdissect_options *ndo, const struct pfloghdr *hdr) ND_PRINT(".%u/", subrulenr); } - ND_PRINT("%s", tok2str(pf_reasons, "unkn(%u)", hdr->reason)); + ND_PRINT("%s", tok2str(pf_reasons, "unkn(%u)", GET_U_1(hdr->reason))); - if (hdr->uid != UID_MAX) - ND_PRINT(" [uid %u]", (unsigned)hdr->uid); + if (GET_HE_U_4(hdr->uid) != UID_MAX) + ND_PRINT(" [uid %u]", GET_HE_U_4(hdr->uid)); if (ridentifier != 0) ND_PRINT(" [ridentifier %u]", ridentifier); ND_PRINT(": %s %s on ", - tok2str(pf_actions, "unkn(%u)", GET_U_1(&hdr->action)), - tok2str(pf_directions, "unkn(%u)", GET_U_1(&hdr->dir))); + tok2str(pf_actions, "unkn(%u)", GET_U_1(hdr->action)), + tok2str(pf_directions, "unkn(%u)", GET_U_1(hdr->dir))); nd_printjnp(ndo, (const u_char*)hdr->ifname, PFLOG_IFNAMSIZ); ND_PRINT(": "); } @@ -152,14 +150,14 @@ pflog_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, return; } -#define MIN_PFLOG_HDRLEN 45 hdr = (const struct pfloghdr *)p; - if (GET_U_1(&hdr->length) < MIN_PFLOG_HDRLEN) { + hdrlen = GET_U_1(hdr->length); + if (hdrlen < MIN_PFLOG_HDRLEN) { ND_PRINT("[pflog: invalid header length!]"); - ndo->ndo_ll_hdr_len += GET_U_1(&hdr->length); /* XXX: not really */ + ndo->ndo_ll_hdr_len += hdrlen; /* XXX: not really */ return; } - hdrlen = roundup2(hdr->length, 4); + hdrlen = roundup2(hdrlen, 4); if (caplen < hdrlen) { nd_print_trunc(ndo); @@ -173,7 +171,7 @@ pflog_if_print(netdissect_options *ndo, const struct pcap_pkthdr *h, pflog_print(ndo, hdr); /* skip to the real packet */ - af = GET_U_1(&hdr->af); + af = GET_U_1(hdr->af); length -= hdrlen; caplen -= hdrlen; p += hdrlen; diff --git a/contrib/tcpdump/print-pgm.c b/contrib/tcpdump/print-pgm.c index ccb0b46afef9..6cffb52eabe6 100644 --- a/contrib/tcpdump/print-pgm.c +++ b/contrib/tcpdump/print-pgm.c @@ -15,9 +15,7 @@ /* \summary: Pragmatic General Multicast (PGM) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-pim.c b/contrib/tcpdump/print-pim.c index f2db8c768165..30dfaa838e4f 100644 --- a/contrib/tcpdump/print-pim.c +++ b/contrib/tcpdump/print-pim.c @@ -21,9 +21,7 @@ /* \summary: Protocol Independent Multicast (PIM) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -599,8 +597,7 @@ pimv2_addr_print(netdissect_options *ndo, if (af == AF_INET) { if (!silent) ND_PRINT("%s", GET_IPADDR_STRING(bp)); - } - else if (af == AF_INET6) { + } else if (af == AF_INET6) { if (!silent) ND_PRINT("%s", GET_IP6ADDR_STRING(bp)); } @@ -616,8 +613,7 @@ pimv2_addr_print(netdissect_options *ndo, if (GET_U_1(bp + 1) != 32) ND_PRINT("/%u", GET_U_1(bp + 1)); } - } - else if (af == AF_INET6) { + } else if (af == AF_INET6) { if (!silent) { ND_PRINT("%s", GET_IP6ADDR_STRING(bp + 2)); if (GET_U_1(bp + 1) != 128) diff --git a/contrib/tcpdump/print-pktap.c b/contrib/tcpdump/print-pktap.c index 05ce5f997824..d1c391d5ce1b 100644 --- a/contrib/tcpdump/print-pktap.c +++ b/contrib/tcpdump/print-pktap.c @@ -21,9 +21,7 @@ /* \summary: Apple's DLT_PKTAP printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-ppi.c b/contrib/tcpdump/print-ppi.c index 774edfbaf8ce..0795f276ac0a 100644 --- a/contrib/tcpdump/print-ppi.c +++ b/contrib/tcpdump/print-ppi.c @@ -9,9 +9,7 @@ * https://web.archive.org/web/20160328114748/http://www.cacetech.com/documents/PPI%20Header%20format%201.0.7.pdf */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-ppp.c b/contrib/tcpdump/print-ppp.c index e5ae0646ebae..ccce71539790 100644 --- a/contrib/tcpdump/print-ppp.c +++ b/contrib/tcpdump/print-ppp.c @@ -31,12 +31,12 @@ * o BAP support */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" +#include <stdlib.h> + #ifdef __bsdi__ #include <net/slcompress.h> #include <net/if_ppp.h> @@ -196,7 +196,7 @@ static const char *lcpconfopts[] = { "deprecated(12)", /* used to be a Multi-Link-Procedure*/ "Call-Back", /* (13) */ "deprecated(14)", /* used to be a Connect-Time */ - "deprecated(15)", /* used to be a Compund-Frames */ + "deprecated(15)", /* used to be a Compound-Frames */ "deprecated(16)", /* used to be a Nominal-Data-Encap */ "MRRU", /* (17) */ "12-Bit seq #", /* (18) */ @@ -702,7 +702,6 @@ print_lcp_config_options(netdissect_options *ndo, ND_PRINT(" (length bogus, should be >= 3)"); return 0; } - ND_PRINT(": "); ND_PRINT(": Callback Operation %s (%u)", tok2str(ppp_callback_values, "Unknown", GET_U_1(p + 2)), GET_U_1(p + 2)); @@ -861,7 +860,7 @@ handle_chap(netdissect_options *ndo, * don't know which flavor of CHAP (i.e. CHAP-MD5, MS-CHAPv1, * MS-CHAPv2) is used at this point, we can't decode packet * specifically to each algorithms. Instead, we simply decode - * the GCD (Gratest Common Denominator) for all algorithms. + * the GCD (Greatest Common Denominator) for all algorithms. */ switch (code) { case CHAP_CHAL: @@ -1133,7 +1132,7 @@ print_ipcp_config_options(netdissect_options *ndo, print_unknown_data(ndo, p + 2, "\n\t ", len - 2); break; } - if (ndo->ndo_vflag > 1) + if (ndo->ndo_vflag > 1 && ND_TTEST_LEN(p + 2, len - 2)) print_unknown_data(ndo, p + 2, "\n\t ", len - 2); /* exclude TLV header */ return len; diff --git a/contrib/tcpdump/print-pppoe.c b/contrib/tcpdump/print-pppoe.c index 65518dff16d9..9649b15ffe3a 100644 --- a/contrib/tcpdump/print-pppoe.c +++ b/contrib/tcpdump/print-pppoe.c @@ -23,9 +23,7 @@ /* \summary: PPP-over-Ethernet (PPPoE) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-pptp.c b/contrib/tcpdump/print-pptp.c index e8e328bbe3da..8666e505bbc7 100644 --- a/contrib/tcpdump/print-pptp.c +++ b/contrib/tcpdump/print-pptp.c @@ -25,9 +25,7 @@ /* specification: RFC 2637 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-ptp.c b/contrib/tcpdump/print-ptp.c index a1c09c03ccef..09180110a818 100644 --- a/contrib/tcpdump/print-ptp.c +++ b/contrib/tcpdump/print-ptp.c @@ -17,9 +17,7 @@ /* specification: https://standards.ieee.org/findstds/standard/1588-2008.html*/ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include "netdissect.h" @@ -158,7 +156,7 @@ * | Requesting Port Identity | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * - * Signalling Message (msg type=0xC) + * Signaling Message (msg type=0xC) * 0 1 2 3 * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ @@ -185,7 +183,7 @@ #define M_DELAY_RESP 0x9 #define M_PDELAY_RESP_FOLLOW_UP 0xA #define M_ANNOUNCE 0xB -#define M_SIGNALLING 0xC +#define M_SIGNALING 0xC #define M_MANAGEMENT 0xD static const struct tok ptp_msg_type[] = { @@ -197,7 +195,7 @@ static const struct tok ptp_msg_type[] = { { M_DELAY_RESP, "delay resp msg"}, { M_PDELAY_RESP_FOLLOW_UP, "pdelay resp fup msg"}, { M_ANNOUNCE, "announce msg"}, - { M_SIGNALLING, "signalling msg"}, + { M_SIGNALING, "signaling msg"}, { M_MANAGEMENT, "management msg"}, { 0, NULL} }; @@ -231,8 +229,9 @@ static const struct tok ptp_control_field[] = { #define PTP_HDR_LEN 0x22 /* mask based on the first byte */ -#define PTP_VERS_MASK 0xFF -#define PTP_V1_COMPAT 0x10 +#define PTP_MAJOR_VERS_MASK 0x0F +#define PTP_MINOR_VERS_MASK 0xF0 +#define PTP_MAJOR_SDO_ID_MASK 0xF0 #define PTP_MSG_TYPE_MASK 0x0F /*mask based 2byte */ @@ -358,15 +357,15 @@ ptp_print_2(netdissect_options *ndo, const u_char *bp, u_int length) { u_int len = length; uint16_t msg_len, flags, port_id, seq_id; - uint8_t foct, domain_no, msg_type, v1_compat, rsvd1, lm_int, control; + uint8_t foct, domain_no, msg_type, major_sdo_id, rsvd1, lm_int, control; uint64_t ns_corr; uint16_t sns_corr; uint32_t rsvd2; uint64_t clk_id; foct = GET_U_1(bp); - v1_compat = foct & PTP_V1_COMPAT; - ND_PRINT(", v1 compat : %s", v1_compat?"yes":"no"); + major_sdo_id = (foct & PTP_MAJOR_SDO_ID_MASK) >> 4; + ND_PRINT(", majorSdoId : 0x%x", major_sdo_id); msg_type = foct & PTP_MSG_TYPE_MASK; ND_PRINT(", msg type : %s", tok2str(ptp_msg_type, "Reserved", msg_type)); @@ -433,7 +432,7 @@ ptp_print_2(netdissect_options *ndo, const u_char *bp, u_int length) case M_ANNOUNCE: ptp_print_announce_msg(ndo, bp, &len); break; - case M_SIGNALLING: + case M_SIGNALING: ptp_print_port_id(ndo, bp, &len); break; case M_MANAGEMENT: @@ -449,13 +448,25 @@ ptp_print_2(netdissect_options *ndo, const u_char *bp, u_int length) void ptp_print(netdissect_options *ndo, const u_char *bp, u_int length) { - u_int vers; - + u_int major_vers; + u_int minor_vers; + + /* In 1588-2019, a minorVersionPTP field has been created in the common PTP + * message header, from a previously reserved field. Implementations + * compatible to the 2019 edition shall indicate a versionPTP field value + * of 2 and minorVersionPTP field value of 1, indicating that this is PTP + * version 2.1. + */ ndo->ndo_protocol = "ptp"; - ND_LCHECK_U(length, PTP_HDR_LEN); - vers = GET_BE_U_2(bp) & PTP_VERS_MASK; - ND_PRINT("PTPv%u",vers); - switch(vers) { + ND_ICHECK_U(length, <, PTP_HDR_LEN); + major_vers = GET_BE_U_2(bp) & PTP_MAJOR_VERS_MASK; + minor_vers = (GET_BE_U_2(bp) & PTP_MINOR_VERS_MASK) >> 4; + if (minor_vers) + ND_PRINT("PTPv%u.%u", major_vers, minor_vers); + else + ND_PRINT("PTPv%u", major_vers); + + switch(major_vers) { case PTP_VER_1: ptp_print_1(ndo); break; diff --git a/contrib/tcpdump/print-radius.c b/contrib/tcpdump/print-radius.c index 57d7e507e345..1b3c0f727073 100644 --- a/contrib/tcpdump/print-radius.c +++ b/contrib/tcpdump/print-radius.c @@ -82,9 +82,7 @@ * TODO: Among other things to print ok MacIntosh and Vendor values */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -112,38 +110,38 @@ /* Radius packet codes */ /* https://www.iana.org/assignments/radius-types/radius-types.xhtml#radius-types-27 */ -#define RADCMD_ACCESS_REQ 1 /* Access-Request */ -#define RADCMD_ACCESS_ACC 2 /* Access-Accept */ -#define RADCMD_ACCESS_REJ 3 /* Access-Reject */ -#define RADCMD_ACCOUN_REQ 4 /* Accounting-Request */ -#define RADCMD_ACCOUN_RES 5 /* Accounting-Response */ -#define RADCMD_ACCESS_CHA 11 /* Access-Challenge */ -#define RADCMD_STATUS_SER 12 /* Status-Server */ -#define RADCMD_STATUS_CLI 13 /* Status-Client */ -#define RADCMD_DISCON_REQ 40 /* Disconnect-Request */ -#define RADCMD_DISCON_ACK 41 /* Disconnect-ACK */ -#define RADCMD_DISCON_NAK 42 /* Disconnect-NAK */ -#define RADCMD_COA_REQ 43 /* CoA-Request */ -#define RADCMD_COA_ACK 44 /* CoA-ACK */ -#define RADCMD_COA_NAK 45 /* CoA-NAK */ -#define RADCMD_RESERVED 255 /* Reserved */ +#define RADCMD_ACCESS_REQ 1 /* Access-Request */ +#define RADCMD_ACCESS_ACC 2 /* Access-Accept */ +#define RADCMD_ACCESS_REJ 3 /* Access-Reject */ +#define RADCMD_ACCOUNT_REQ 4 /* Accounting-Request */ +#define RADCMD_ACCOUNT_RES 5 /* Accounting-Response */ +#define RADCMD_ACCESS_CHA 11 /* Access-Challenge */ +#define RADCMD_STATUS_SER 12 /* Status-Server */ +#define RADCMD_STATUS_CLI 13 /* Status-Client */ +#define RADCMD_DISCON_REQ 40 /* Disconnect-Request */ +#define RADCMD_DISCON_ACK 41 /* Disconnect-ACK */ +#define RADCMD_DISCON_NAK 42 /* Disconnect-NAK */ +#define RADCMD_COA_REQ 43 /* CoA-Request */ +#define RADCMD_COA_ACK 44 /* CoA-ACK */ +#define RADCMD_COA_NAK 45 /* CoA-NAK */ +#define RADCMD_RESERVED 255 /* Reserved */ static const struct tok radius_command_values[] = { - { RADCMD_ACCESS_REQ, "Access-Request" }, - { RADCMD_ACCESS_ACC, "Access-Accept" }, - { RADCMD_ACCESS_REJ, "Access-Reject" }, - { RADCMD_ACCOUN_REQ, "Accounting-Request" }, - { RADCMD_ACCOUN_RES, "Accounting-Response" }, - { RADCMD_ACCESS_CHA, "Access-Challenge" }, - { RADCMD_STATUS_SER, "Status-Server" }, - { RADCMD_STATUS_CLI, "Status-Client" }, - { RADCMD_DISCON_REQ, "Disconnect-Request" }, - { RADCMD_DISCON_ACK, "Disconnect-ACK" }, - { RADCMD_DISCON_NAK, "Disconnect-NAK" }, - { RADCMD_COA_REQ, "CoA-Request" }, - { RADCMD_COA_ACK, "CoA-ACK" }, - { RADCMD_COA_NAK, "CoA-NAK" }, - { RADCMD_RESERVED, "Reserved" }, + { RADCMD_ACCESS_REQ, "Access-Request" }, + { RADCMD_ACCESS_ACC, "Access-Accept" }, + { RADCMD_ACCESS_REJ, "Access-Reject" }, + { RADCMD_ACCOUNT_REQ, "Accounting-Request" }, + { RADCMD_ACCOUNT_RES, "Accounting-Response" }, + { RADCMD_ACCESS_CHA, "Access-Challenge" }, + { RADCMD_STATUS_SER, "Status-Server" }, + { RADCMD_STATUS_CLI, "Status-Client" }, + { RADCMD_DISCON_REQ, "Disconnect-Request" }, + { RADCMD_DISCON_ACK, "Disconnect-ACK" }, + { RADCMD_DISCON_NAK, "Disconnect-NAK" }, + { RADCMD_COA_REQ, "CoA-Request" }, + { RADCMD_COA_ACK, "CoA-ACK" }, + { RADCMD_COA_NAK, "CoA-NAK" }, + { RADCMD_RESERVED, "Reserved" }, { 0, NULL} }; @@ -214,7 +212,7 @@ static void print_attr_location_information(netdissect_options *, const u_char * static void print_attr_location_data(netdissect_options *, const u_char *, u_int, u_short); static void print_basic_location_policy_rules(netdissect_options *, const u_char *, u_int, u_short); static void print_attr_time(netdissect_options *, const u_char *, u_int, u_short); -static void print_attr_vector64(netdissect_options *, register const u_char *, u_int, u_short); +static void print_attr_vector64(netdissect_options *, const u_char *, u_int, u_short); static void print_attr_strange(netdissect_options *, const u_char *, u_int, u_short); @@ -773,8 +771,7 @@ print_attr_string(netdissect_options *ndo, ND_TCHECK_LEN(data, length); - switch(attr_code) - { + switch(attr_code) { case TUNNEL_PASS: if (length < 3) goto trunc; @@ -794,8 +791,7 @@ print_attr_string(netdissect_options *ndo, case TUNNEL_ASSIGN_ID: case TUNNEL_CLIENT_AUTH: case TUNNEL_SERVER_AUTH: - if (GET_U_1(data) <= 0x1F) - { + if (GET_U_1(data) <= 0x1F) { if (length < 1) goto trunc; if (GET_U_1(data)) @@ -857,15 +853,13 @@ print_vendor_attr(netdissect_options *ndo, vendor_type = GET_U_1(data); vendor_length = GET_U_1(data + 1); - if (vendor_length < 2) - { + if (vendor_length < 2) { ND_PRINT("\n\t Vendor Attribute: %u, Length: %u (bogus, must be >= 2)", vendor_type, vendor_length); return; } - if (vendor_length > length) - { + if (vendor_length > length) { ND_PRINT("\n\t Vendor Attribute: %u, Length: %u (bogus, goes past end of vendor-specific attribute)", vendor_type, vendor_length); @@ -902,30 +896,25 @@ print_attr_num(netdissect_options *ndo, { uint32_t timeout; - if (length != 4) - { + if (length != 4) { ND_PRINT("ERROR: length %u != 4", length); return; } /* This attribute has standard values */ - if (attr_type[attr_code].siz_subtypes) - { + if (attr_type[attr_code].siz_subtypes) { static const char **table; uint32_t data_value; table = attr_type[attr_code].subtypes; - if ( (attr_code == TUNNEL_TYPE) || (attr_code == TUNNEL_MEDIUM) ) - { + if ( (attr_code == TUNNEL_TYPE) || (attr_code == TUNNEL_MEDIUM) ) { if (!GET_U_1(data)) ND_PRINT("Tag[Unused] "); else ND_PRINT("Tag[%u] ", GET_U_1(data)); data++; data_value = GET_BE_U_3(data); - } - else - { + } else { data_value = GET_BE_U_4(data); } if ( data_value <= (uint32_t)(attr_type[attr_code].siz_subtypes - 1 + @@ -934,9 +923,7 @@ print_attr_num(netdissect_options *ndo, ND_PRINT("%s", table[data_value]); else ND_PRINT("#%u", data_value); - } - else - { + } else { switch(attr_code) /* Be aware of special cases... */ { case FRM_IPX: @@ -954,8 +941,7 @@ print_attr_num(netdissect_options *ndo, timeout = GET_BE_U_4(data); if ( timeout < 60 ) ND_PRINT("%02d secs", timeout); - else - { + else { if ( timeout < 3600 ) ND_PRINT("%02d:%02d min", timeout / 60, timeout % 60); @@ -1017,14 +1003,12 @@ static void print_attr_address(netdissect_options *ndo, const u_char *data, u_int length, u_short attr_code) { - if (length != 4) - { + if (length != 4) { ND_PRINT("ERROR: length %u != 4", length); return; } - switch(attr_code) - { + switch(attr_code) { case FRM_IPADDR: case LOG_IPHOST: if (GET_BE_U_4(data) == 0xFFFFFFFF ) @@ -1053,8 +1037,7 @@ static void print_attr_address6(netdissect_options *ndo, const u_char *data, u_int length, u_short attr_code _U_) { - if (length != 16) - { + if (length != 16) { ND_PRINT("ERROR: length %u != 16", length); return; } @@ -1068,14 +1051,12 @@ print_attr_netmask6(netdissect_options *ndo, { u_char data2[16]; - if (length < 2 || length > 18) - { + if (length < 2 || length > 18) { ND_PRINT("ERROR: length %u not in range (2..18)", length); return; } ND_TCHECK_LEN(data, length); - if (GET_U_1(data + 1) > 128) - { + if (GET_U_1(data + 1) > 128) { ND_PRINT("ERROR: netmask %u not in range (0..128)", GET_U_1(data + 1)); return; } @@ -1099,14 +1080,12 @@ static void print_attr_mip6_home_link_prefix(netdissect_options *ndo, const u_char *data, u_int length, u_short attr_code _U_) { - if (length != 17) - { + if (length != 17) { ND_PRINT("ERROR: length %u != 17", length); return; } ND_TCHECK_LEN(data, length); - if (GET_U_1(data) > 128) - { + if (GET_U_1(data) > 128) { ND_PRINT("ERROR: netmask %u not in range (0..128)", GET_U_1(data)); return; } @@ -1126,8 +1105,7 @@ print_attr_operator_name(netdissect_options *ndo, u_int namespace_value; ND_TCHECK_LEN(data, length); - if (length < 2) - { + if (length < 2) { ND_PRINT("ERROR: length %u < 2", length); return; } @@ -1151,8 +1129,7 @@ print_attr_location_information(netdissect_options *ndo, uint8_t code, entity; ND_TCHECK_LEN(data, length); - if (length < 21) - { + if (length < 21) { ND_PRINT("ERROR: length %u < 21", length); return; } @@ -1199,8 +1176,7 @@ print_attr_location_data(netdissect_options *ndo, uint16_t index; ND_TCHECK_LEN(data, length); - if (length < 3) - { + if (length < 3) { ND_PRINT("ERROR: length %u < 3", length); return; } @@ -1231,8 +1207,7 @@ print_basic_location_policy_rules(netdissect_options *ndo, uint16_t flags; ND_TCHECK_LEN(data, length); - if (length < 10) - { + if (length < 10) { ND_PRINT("ERROR: length %u < 10", length); return; } @@ -1273,8 +1248,7 @@ print_attr_time(netdissect_options *ndo, time_t attr_time; char string[26]; - if (length != 4) - { + if (length != 4) { ND_PRINT("ERROR: length %u != 4", length); return; } @@ -1288,13 +1262,12 @@ print_attr_time(netdissect_options *ndo, static void print_attr_vector64(netdissect_options *ndo, - register const u_char *data, u_int length, u_short attr_code _U_) + const u_char *data, u_int length, u_short attr_code _U_) { uint64_t data_value, i; const char *sep = ""; - if (length != 8) - { + if (length != 8) { ND_PRINT("ERROR: length %u != 8", length); return; } @@ -1330,11 +1303,9 @@ print_attr_strange(netdissect_options *ndo, u_short len_data; u_int error_cause_value; - switch(attr_code) - { + switch(attr_code) { case ARAP_PASS: - if (length != 16) - { + if (length != 16) { ND_PRINT("ERROR: length %u != 16", length); return; } @@ -1348,8 +1319,7 @@ print_attr_strange(netdissect_options *ndo, break; case ARAP_FEATURES: - if (length != 14) - { + if (length != 14) { ND_PRINT("ERROR: length %u != 14", length); return; } @@ -1372,8 +1342,7 @@ print_attr_strange(netdissect_options *ndo, break; case ARAP_CHALLENGE_RESP: - if (length < 8) - { + if (length < 8) { ND_PRINT("ERROR: length %u != 8", length); return; } @@ -1382,8 +1351,7 @@ print_attr_strange(netdissect_options *ndo, break; case ERROR_CAUSE: - if (length != 4) - { + if (length != 4) { ND_PRINT("Error: length %u != 4", length); return; } @@ -1403,8 +1371,7 @@ radius_attrs_print(netdissect_options *ndo, const char *attr_string; uint8_t type, len; - while (length > 0) - { + while (length > 0) { if (length < 2) goto trunc; ND_TCHECK_SIZE(rad_attr); @@ -1420,22 +1387,18 @@ radius_attrs_print(netdissect_options *ndo, attr_string, type, len); - if (len < 2) - { + if (len < 2) { ND_PRINT(" (bogus, must be >= 2)"); return; } - if (len > length) - { + if (len > length) { ND_PRINT(" (bogus, goes past end of packet)"); return; } ND_PRINT(", Value: "); - if (type < TAM_SIZE(attr_type)) - { - if (len > 2) - { + if (type < TAM_SIZE(attr_type)) { + if (len > 2) { if ( attr_type[type].print_func ) (*attr_type[type].print_func)( ndo, ((const u_char *)(rad_attr+1)), @@ -1467,8 +1430,7 @@ radius_print(netdissect_options *ndo, rad = (const struct radius_hdr *)dat; len = GET_BE_U_2(rad->len); - if (len < MIN_RADIUS_LEN) - { + if (len < MIN_RADIUS_LEN) { nd_print_trunc(ndo); return; } @@ -1483,8 +1445,7 @@ radius_print(netdissect_options *ndo, GET_U_1(rad->id), len); return; - } - else { + } else { ND_PRINT("RADIUS, length: %u\n\t%s (%u), id: 0x%02x, Authenticator: ", len, tok2str(radius_command_values,"Unknown Command",GET_U_1(rad->code)), diff --git a/contrib/tcpdump/print-raw.c b/contrib/tcpdump/print-raw.c index 9c6558fede02..d0edd2ece948 100644 --- a/contrib/tcpdump/print-raw.c +++ b/contrib/tcpdump/print-raw.c @@ -21,9 +21,7 @@ /* \summary: Raw IP printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-realtek.c b/contrib/tcpdump/print-realtek.c index 3105bf7f86af..f32086509497 100644 --- a/contrib/tcpdump/print-realtek.c +++ b/contrib/tcpdump/print-realtek.c @@ -25,9 +25,7 @@ /* \summary: printer for various Realtek protocols */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-resp.c b/contrib/tcpdump/print-resp.c index 37a386e3122c..8f0a5380d311 100644 --- a/contrib/tcpdump/print-resp.c +++ b/contrib/tcpdump/print-resp.c @@ -29,9 +29,7 @@ /* \summary: REdis Serialization Protocol (RESP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include "netdissect.h" @@ -306,7 +304,7 @@ resp_print_string_error_integer(netdissect_options *ndo, const u_char *bp, int l * preceding the \r\n. That includes the opcode, so don't print * that. */ - len = ND_BYTES_BETWEEN(bp_ptr, bp); + len = ND_BYTES_BETWEEN(bp, bp_ptr); RESP_PRINT_SEGMENT(ndo, bp, len); ret_len = 1 /*<opcode>*/ + len /*<string>*/ + 2 /*<CRLF>*/; @@ -431,7 +429,7 @@ resp_print_inline(netdissect_options *ndo, const u_char *bp, int length) { * Found it; bp_ptr points to the \r or \n, so bp_ptr - bp is the * Length of the line text that precedes it. Print it. */ - len = ND_BYTES_BETWEEN(bp_ptr, bp); + len = ND_BYTES_BETWEEN(bp, bp_ptr); RESP_PRINT_SEGMENT(ndo, bp, len); /* diff --git a/contrib/tcpdump/print-rip.c b/contrib/tcpdump/print-rip.c index fca534fb100b..aac3e4598983 100644 --- a/contrib/tcpdump/print-rip.c +++ b/contrib/tcpdump/print-rip.c @@ -23,9 +23,7 @@ /* specification: RFC 1058, RFC 2453, RFC 4822 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -55,16 +53,25 @@ struct rip { #define RIPCMD_RESPONSE 2 /* responding to request */ #define RIPCMD_TRACEON 3 /* turn tracing on */ #define RIPCMD_TRACEOFF 4 /* turn it off */ -#define RIPCMD_POLL 5 /* want info from everybody */ -#define RIPCMD_POLLENTRY 6 /* poll for entry */ +/* 5 is reserved */ +#define RIPCMD_TRIGREQ 6 +#define RIPCMD_TRIGRESP 7 +#define RIPCMD_TRIGACK 8 +#define RIPCMD_UPDREQ 9 +#define RIPCMD_UPDRESP 10 +#define RIPCMD_UPDACK 11 static const struct tok rip_cmd_values[] = { { RIPCMD_REQUEST, "Request" }, { RIPCMD_RESPONSE, "Response" }, { RIPCMD_TRACEON, "Trace on" }, { RIPCMD_TRACEOFF, "Trace off" }, - { RIPCMD_POLL, "Poll" }, - { RIPCMD_POLLENTRY, "Poll Entry" }, + { RIPCMD_TRIGREQ, "Triggered Request" }, + { RIPCMD_TRIGRESP, "Triggered Response" }, + { RIPCMD_TRIGACK, "Triggered Acknowledgement" }, + { RIPCMD_UPDREQ, "Update Request" }, + { RIPCMD_UPDRESP, "Update Response" }, + { RIPCMD_UPDACK, "Update Acknowledge" }, { 0, NULL} }; @@ -317,22 +324,6 @@ rip_print(netdissect_options *ndo, (ndo->ndo_vflag >= 1) ? "\n\t" : "", vers); - if (vers == 0) { - /* - * RFC 1058. - * - * XXX - RFC 1058 says - * - * 0 Datagrams whose version number is zero are to be ignored. - * These are from a previous version of the protocol, whose - * packet format was machine-specific. - * - * so perhaps we should just dump the packet, in hex. - */ - print_unknown_data(ndo, (const uint8_t *)&rp->rip_cmd, "\n\t", length); - return; - } - /* dump version and lets see if we know the commands name*/ cmd = GET_U_1(rp->rip_cmd); ND_PRINT(", %s, length: %u", @@ -398,13 +389,16 @@ rip_print(netdissect_options *ndo, } break; + case RIPCMD_TRACEON: case RIPCMD_TRACEOFF: - case RIPCMD_POLL: - case RIPCMD_POLLENTRY: + case RIPCMD_TRIGREQ: + case RIPCMD_TRIGRESP: + case RIPCMD_TRIGACK: + case RIPCMD_UPDREQ: + case RIPCMD_UPDRESP: + case RIPCMD_UPDACK: break; - case RIPCMD_TRACEON: - /* fall through */ default: if (ndo->ndo_vflag <= 1) { if (!print_unknown_data(ndo, (const uint8_t *)rp, "\n\t", length)) diff --git a/contrib/tcpdump/print-ripng.c b/contrib/tcpdump/print-ripng.c index 94ebf1bc4c4e..c6955cb8ef14 100644 --- a/contrib/tcpdump/print-ripng.c +++ b/contrib/tcpdump/print-ripng.c @@ -23,9 +23,7 @@ /* specification: RFC 2080 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-rpki-rtr.c b/contrib/tcpdump/print-rpki-rtr.c index 36be3998a326..7d8d9a1d74a1 100644 --- a/contrib/tcpdump/print-rpki-rtr.c +++ b/contrib/tcpdump/print-rpki-rtr.c @@ -19,9 +19,7 @@ /* specification: RFC 6810 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -178,24 +176,24 @@ rpki_rtr_pdu_print(netdissect_options *ndo, const u_char *tptr, const u_int len, const rpki_rtr_pdu *pdu_header; u_int pdu_type, pdu_len, hexdump; const u_char *msg; + uint8_t pdu_ver; - /* Protocol Version */ - if (GET_U_1(tptr) != 0) { + if (len < sizeof(rpki_rtr_pdu)) { + ND_PRINT("(%u bytes is too few to decode)", len); + goto invalid; + } + pdu_header = (const rpki_rtr_pdu *)tptr; + pdu_ver = GET_U_1(pdu_header->version); + if (pdu_ver != 0) { /* Skip the rest of the input buffer because even if this is * a well-formed PDU of a future RPKI-Router protocol version * followed by a well-formed PDU of RPKI-Router protocol * version 0, there is no way to know exactly how to skip the * current PDU. */ - ND_PRINT("%sRPKI-RTRv%u (unknown)", indent_string(8), GET_U_1(tptr)); + ND_PRINT("%sRPKI-RTRv%u (unknown)", indent_string(8), pdu_ver); return len; } - if (len < sizeof(rpki_rtr_pdu)) { - ND_PRINT("(%u bytes is too few to decode)", len); - goto invalid; - } - ND_TCHECK_LEN(tptr, sizeof(rpki_rtr_pdu)); - pdu_header = (const rpki_rtr_pdu *)tptr; pdu_type = GET_U_1(pdu_header->pdu_type); pdu_len = GET_BE_U_4(pdu_header->length); /* Do not check bounds with pdu_len yet, do it in the case blocks @@ -206,7 +204,7 @@ rpki_rtr_pdu_print(netdissect_options *ndo, const u_char *tptr, const u_int len, ND_PRINT("%sRPKI-RTRv%u, %s PDU (%u), length: %u", indent_string(8), - GET_U_1(pdu_header->version), + pdu_ver, tok2str(rpki_rtr_pdu_values, "Unknown", pdu_type), pdu_type, pdu_len); if (pdu_len < sizeof(rpki_rtr_pdu) || pdu_len > len) @@ -291,13 +289,12 @@ rpki_rtr_pdu_print(netdissect_options *ndo, const u_char *tptr, const u_int len, /* Do not test for the "Length of Error Text" data element yet. */ if (pdu_len < tlen + 4) goto invalid; - ND_TCHECK_LEN(tptr, tlen + 4); - /* Safe up to and including the "Length of Encapsulated PDU" - * data element, more data elements may be present. - */ pdu = (const rpki_rtr_pdu_error_report *)tptr; encapsulated_pdu_length = GET_BE_U_4(pdu->encapsulated_pdu_length); tlen += 4; + /* Safe up to and including the "Length of Encapsulated PDU" + * data element, more data elements may be present. + */ error_code = GET_BE_U_2(pdu->pdu_header.u.error_code); ND_PRINT("%sError code: %s (%u), Encapsulated PDU length: %u", @@ -322,8 +319,7 @@ rpki_rtr_pdu_print(netdissect_options *ndo, const u_char *tptr, const u_int len, goto invalid; if (! recurse) { ND_TCHECK_LEN(tptr, tlen + encapsulated_pdu_length); - } - else { + } else { ND_PRINT("%s-----encapsulated PDU-----", indent_string(indent+4)); rpki_rtr_pdu_print(ndo, tptr + tlen, encapsulated_pdu_length, 0, indent + 2); @@ -333,16 +329,14 @@ rpki_rtr_pdu_print(netdissect_options *ndo, const u_char *tptr, const u_int len, if (pdu_len < tlen + 4) goto invalid; - ND_TCHECK_LEN(tptr, tlen + 4); - /* Safe up to and including the "Length of Error Text" data element, - * one more data element may be present. - */ - /* * Extract, trail-zero and print the Error message. */ text_length = GET_BE_U_4(tptr + tlen); tlen += 4; + /* Safe up to and including the "Length of Error Text" data element, + * one more data element may be present. + */ if (text_length) { if (pdu_len < tlen + text_length) diff --git a/contrib/tcpdump/print-rsvp.c b/contrib/tcpdump/print-rsvp.c index 23b6d5a77386..9226c84e61ce 100644 --- a/contrib/tcpdump/print-rsvp.c +++ b/contrib/tcpdump/print-rsvp.c @@ -19,9 +19,7 @@ /* specification: RFC 2205 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-rt6.c b/contrib/tcpdump/print-rt6.c index 096a96286c95..6019cd798eec 100644 --- a/contrib/tcpdump/print-rt6.c +++ b/contrib/tcpdump/print-rt6.c @@ -21,9 +21,7 @@ /* \summary: IPv6 routing header printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -66,7 +64,7 @@ rt6_print(netdissect_options *ndo, const u_char *bp, const u_char *bp2 _U_) } if (len % 2 == 1) { - ND_PRINT(" (invalid length %u)", len); + ND_PRINT(" [length %u]", len); goto invalid; } len >>= 1; diff --git a/contrib/tcpdump/print-rtsp.c b/contrib/tcpdump/print-rtsp.c index 626a5ed9c89c..f240a90f99c1 100644 --- a/contrib/tcpdump/print-rtsp.c +++ b/contrib/tcpdump/print-rtsp.c @@ -13,9 +13,7 @@ /* \summary: Real Time Streaming Protocol (RTSP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-rx.c b/contrib/tcpdump/print-rx.c index 0a1a8d12d40d..3641a4c79e53 100644 --- a/contrib/tcpdump/print-rx.c +++ b/contrib/tcpdump/print-rx.c @@ -35,9 +35,7 @@ * Ken Hornstein <kenh@cmf.nrl.navy.mil> */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include <stdio.h> #include <string.h> @@ -799,7 +797,7 @@ rx_cache_find(netdissect_options *ndo, const struct rx_header *rxh, bp += sizeof(int32_t); \ ND_PRINT(" %s", \ nd_format_time(str, sizeof(str), \ - "%Y/%m/%d %H:%M:%S", localtime(&_t))); \ + "%Y-%m-%d %H:%M:%S", localtime(&_t))); \ } #define STOREATTROUT() { uint32_t mask, _i; \ diff --git a/contrib/tcpdump/print-sctp.c b/contrib/tcpdump/print-sctp.c index ad0f7851889a..e49fc41fad26 100644 --- a/contrib/tcpdump/print-sctp.c +++ b/contrib/tcpdump/print-sctp.c @@ -35,9 +35,7 @@ /* \summary: Stream Control Transmission Protocol (SCTP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -293,7 +291,7 @@ struct sctpUnifiedAbortHeavy{ }; /* For the graceful shutdown we must carry - * the tag (in common header) and the highest consequitive acking value + * the tag (in common header) and the highest consecutive acking value */ struct sctpShutdown { nd_uint32_t TSN_Seen; @@ -554,8 +552,7 @@ sctp_print(netdissect_options *ndo, chunkID = GET_U_1(chunkDescPtr->chunkID); ND_PRINT("[%s] ", tok2str(sctp_chunkid_str, "Unknown chunk type: 0x%x", chunkID)); - switch (chunkID) - { + switch (chunkID) { case SCTP_DATA : { const struct sctpDataPart *dataHdrPtr; diff --git a/contrib/tcpdump/print-sflow.c b/contrib/tcpdump/print-sflow.c index f508ccc4233e..22de02b720cd 100644 --- a/contrib/tcpdump/print-sflow.c +++ b/contrib/tcpdump/print-sflow.c @@ -21,9 +21,7 @@ /* specification: https://sflow.org/developers/specifications.php */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -690,7 +688,7 @@ sflow_print_flow_records(netdissect_options *ndo, sflow_flow_record = (const struct sflow_flow_record_t *)tptr; - /* so, the funky encoding means we cannot blythly mask-off + /* so, the funky encoding means we cannot blithely mask-off bits, we must also check the enterprise. */ enterprise = GET_BE_U_4(sflow_flow_record->format); @@ -876,7 +874,7 @@ sflow_print(netdissect_options *ndo, len); /* skip Common header */ - ND_LCHECK_ZU(tlen, sizeof(struct sflow_datagram_t)); + ND_ICHECK_ZU(tlen, <, sizeof(struct sflow_datagram_t)); tptr += sizeof(struct sflow_datagram_t); tlen -= sizeof(struct sflow_datagram_t); } else { @@ -892,7 +890,7 @@ sflow_print(netdissect_options *ndo, len); /* skip Common header */ - ND_LCHECK_ZU(tlen, sizeof(struct sflow_v6_datagram_t)); + ND_ICHECK_ZU(tlen, <, sizeof(struct sflow_v6_datagram_t)); tptr += sizeof(struct sflow_v6_datagram_t); tlen -= sizeof(struct sflow_v6_datagram_t); } diff --git a/contrib/tcpdump/print-sip.c b/contrib/tcpdump/print-sip.c index bfbfddfd4749..9af728a3576f 100644 --- a/contrib/tcpdump/print-sip.c +++ b/contrib/tcpdump/print-sip.c @@ -17,9 +17,7 @@ /* \summary: Session Initiation Protocol (SIP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-sl.c b/contrib/tcpdump/print-sl.c index 85b762496d24..c80f0765d24a 100644 --- a/contrib/tcpdump/print-sl.c +++ b/contrib/tcpdump/print-sl.c @@ -21,9 +21,7 @@ /* \summary: Compressed Serial Line Internet Protocol printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-sll.c b/contrib/tcpdump/print-sll.c index eb8d620a448b..de767781e016 100644 --- a/contrib/tcpdump/print-sll.c +++ b/contrib/tcpdump/print-sll.c @@ -21,9 +21,7 @@ /* \summary: Linux cooked sockets capture printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #ifdef HAVE_NET_IF_H /* diff --git a/contrib/tcpdump/print-slow.c b/contrib/tcpdump/print-slow.c index 118381808fda..72062d930f22 100644 --- a/contrib/tcpdump/print-slow.c +++ b/contrib/tcpdump/print-slow.c @@ -20,9 +20,7 @@ /* \summary: IEEE "slow protocols" (802.3ad/802.3ah) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-smb.c b/contrib/tcpdump/print-smb.c index bcd7363dec95..46dd2ef37360 100644 --- a/contrib/tcpdump/print-smb.c +++ b/contrib/tcpdump/print-smb.c @@ -8,9 +8,7 @@ /* \summary: SMB/CIFS printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -414,7 +412,8 @@ print_negprot(netdissect_options *ndo, smb_fdata(ndo, words + 1, f1, ND_MIN(words + 1 + wct * 2, maxbuf), unicodestr); else - smb_data_print(ndo, words + 1, ND_MIN(wct * 2, ND_BYTES_BETWEEN(maxbuf, words + 1))); + smb_data_print(ndo, words + 1, + ND_MIN(wct * 2, ND_BYTES_BETWEEN(words + 1, maxbuf))); bcc = GET_LE_U_2(data); ND_PRINT("smb_bcc=%u\n", bcc); @@ -424,7 +423,7 @@ print_negprot(netdissect_options *ndo, maxbuf), unicodestr); else smb_data_print(ndo, data + 2, - ND_MIN(GET_LE_U_2(data), ND_BYTES_BETWEEN(maxbuf, data + 2))); + ND_MIN(GET_LE_U_2(data), ND_BYTES_BETWEEN(data + 2, maxbuf))); } } @@ -454,7 +453,8 @@ print_sesssetup(netdissect_options *ndo, smb_fdata(ndo, words + 1, f1, ND_MIN(words + 1 + wct * 2, maxbuf), unicodestr); else - smb_data_print(ndo, words + 1, ND_MIN(wct * 2, ND_BYTES_BETWEEN(maxbuf, words + 1))); + smb_data_print(ndo, words + 1, + ND_MIN(wct * 2, ND_BYTES_BETWEEN(words + 1, maxbuf))); bcc = GET_LE_U_2(data); ND_PRINT("smb_bcc=%u\n", bcc); @@ -464,7 +464,7 @@ print_sesssetup(netdissect_options *ndo, maxbuf), unicodestr); else smb_data_print(ndo, data + 2, - ND_MIN(GET_LE_U_2(data), ND_BYTES_BETWEEN(maxbuf, data + 2))); + ND_MIN(GET_LE_U_2(data), ND_BYTES_BETWEEN(data + 2, maxbuf))); } } @@ -499,7 +499,7 @@ print_lockingandx(netdissect_options *ndo, maxbuf), unicodestr); else smb_data_print(ndo, data + 2, - ND_MIN(GET_LE_U_2(data), ND_BYTES_BETWEEN(maxbuf, data + 2))); + ND_MIN(GET_LE_U_2(data), ND_BYTES_BETWEEN(data + 2, maxbuf))); } } @@ -871,7 +871,8 @@ print_smb(netdissect_options *ndo, } else { if (bcc > 0) { ND_PRINT("smb_buf[]=\n"); - smb_data_print(ndo, data + 2, ND_MIN(bcc, ND_BYTES_BETWEEN(maxbuf, data + 2))); + smb_data_print(ndo, data + 2, + ND_MIN(bcc, ND_BYTES_BETWEEN(data + 2, maxbuf))); } } } @@ -1194,7 +1195,8 @@ nbt_udp137_print(netdissect_options *ndo, } else { if (p >= maxbuf) goto out; - smb_data_print(ndo, p, ND_MIN(rdlen, length - ND_BYTES_BETWEEN(p, data))); + smb_data_print(ndo, p, + ND_MIN(rdlen, length - ND_BYTES_BETWEEN(data, p))); p += rdlen; } } diff --git a/contrib/tcpdump/print-smtp.c b/contrib/tcpdump/print-smtp.c index 4acf87c962a6..fba7f2371ba5 100644 --- a/contrib/tcpdump/print-smtp.c +++ b/contrib/tcpdump/print-smtp.c @@ -13,9 +13,7 @@ /* \summary: Simple Mail Transfer Protocol (SMTP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-snmp.c b/contrib/tcpdump/print-snmp.c index 6aae34caa7de..76f0bbacaf0b 100644 --- a/contrib/tcpdump/print-snmp.c +++ b/contrib/tcpdump/print-snmp.c @@ -58,14 +58,13 @@ /* \summary: Simple Network Management Protocol (SNMP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include <stdio.h> #include <string.h> +#include <limits.h> #ifdef USE_LIBSMI #include <smi.h> @@ -531,7 +530,7 @@ asn1_parse(netdissect_options *ndo, break; case INTEGER: { - int32_t data; + uint32_t data; elem->type = BE_INT; data = 0; @@ -540,7 +539,7 @@ asn1_parse(netdissect_options *ndo, return -1; } if (GET_U_1(p) & ASN_BIT8) /* negative */ - data = -1; + data = UINT_MAX; for (i = elem->asnlen; i != 0; p++, i--) data = (data << ASN_SHIFT8) | GET_U_1(p); elem->data.integer = data; @@ -743,7 +742,8 @@ asn1_print(netdissect_options *ndo, break; case BE_OID: { - int o = 0, first = -1; + int first = -1; + uint32_t o = 0; p = (const u_char *)elem->data.raw; i = asnlen; @@ -1088,7 +1088,7 @@ smi_print_value(netdissect_options *ndo, } if (NOTIFY_CLASS(pduid) && smiNode->access < SMI_ACCESS_NOTIFY) { - ND_PRINT("[notNotifyable]"); + ND_PRINT("[notNotifiable]"); } if (READ_CLASS(pduid) && smiNode->access < SMI_ACCESS_READ_ONLY) { diff --git a/contrib/tcpdump/print-someip.c b/contrib/tcpdump/print-someip.c index 210e413f6481..d21219aeadfb 100644 --- a/contrib/tcpdump/print-someip.c +++ b/contrib/tcpdump/print-someip.c @@ -15,14 +15,11 @@ /* \summary: Autosar SOME/IP Protocol printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include "netdissect.h" #include "extract.h" -#include "udp.h" /* * SOMEIP Header (R19-11) diff --git a/contrib/tcpdump/print-ssh.c b/contrib/tcpdump/print-ssh.c index 5207c52ee247..f9dd419cb5ae 100644 --- a/contrib/tcpdump/print-ssh.c +++ b/contrib/tcpdump/print-ssh.c @@ -13,9 +13,7 @@ /* \summary: Secure Shell (SSH) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include "netdissect-ctype.h" diff --git a/contrib/tcpdump/print-stp.c b/contrib/tcpdump/print-stp.c index a4d49c4797f8..7e928b33f3b1 100644 --- a/contrib/tcpdump/print-stp.c +++ b/contrib/tcpdump/print-stp.c @@ -10,9 +10,7 @@ /* \summary: IEEE 802.1d Spanning Tree Protocol (STP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -443,8 +441,7 @@ stp_print(netdissect_options *ndo, const u_char *p, u_int length) } stp_print_mstp_bpdu(ndo, stp_bpdu, length); - if (protocol_version == STP_PROTO_SPB) - { + if (protocol_version == STP_PROTO_SPB) { /* Validate v4 length */ spb_len = GET_BE_U_2(p + MST_BPDU_VER3_LEN_OFFSET + mstp_len); spb_len += 2; diff --git a/contrib/tcpdump/print-sunatm.c b/contrib/tcpdump/print-sunatm.c index 0fe5eee8e411..97d592c7757d 100644 --- a/contrib/tcpdump/print-sunatm.c +++ b/contrib/tcpdump/print-sunatm.c @@ -32,9 +32,7 @@ /* \summary: SunATM DLPI capture printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-sunrpc.c b/contrib/tcpdump/print-sunrpc.c index b2b33f25a020..5fc6597fc287 100644 --- a/contrib/tcpdump/print-sunrpc.c +++ b/contrib/tcpdump/print-sunrpc.c @@ -21,9 +21,7 @@ /* \summary: Sun Remote Procedure Call printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif /* * At least on HP-UX: diff --git a/contrib/tcpdump/print-symantec.c b/contrib/tcpdump/print-symantec.c index 0d394e30f2ec..3cbf221246e9 100644 --- a/contrib/tcpdump/print-symantec.c +++ b/contrib/tcpdump/print-symantec.c @@ -21,9 +21,7 @@ /* \summary: Symantec Enterprise Firewall printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-syslog.c b/contrib/tcpdump/print-syslog.c index b0e1c91aa784..b4a801d2a418 100644 --- a/contrib/tcpdump/print-syslog.c +++ b/contrib/tcpdump/print-syslog.c @@ -17,9 +17,7 @@ /* \summary: Syslog protocol printer */ /* specification: RFC 3164 (not RFC 5424) */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -109,8 +107,7 @@ syslog_print(netdissect_options *ndo, facility = (pri & SYSLOG_FACILITY_MASK) >> 3; severity = pri & SYSLOG_SEVERITY_MASK; - if (ndo->ndo_vflag < 1 ) - { + if (ndo->ndo_vflag < 1 ) { ND_PRINT("SYSLOG %s.%s, length: %u", tok2str(syslog_facility_values, "unknown (%u)", facility), tok2str(syslog_severity_values, "unknown (%u)", severity), diff --git a/contrib/tcpdump/print-tcp.c b/contrib/tcpdump/print-tcp.c index 72964eb88ea2..b727dde05543 100644 --- a/contrib/tcpdump/print-tcp.c +++ b/contrib/tcpdump/print-tcp.c @@ -30,9 +30,7 @@ __RCSID("$NetBSD: print-tcp.c,v 1.8 2007/07/24 11:53:48 drochner Exp $"); #endif -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -127,7 +125,7 @@ static const struct tok tcp_option_values[] = { { TCPOPT_TIMESTAMP, "TS" }, { TCPOPT_CC, "cc" }, { TCPOPT_CCNEW, "ccnew" }, - { TCPOPT_CCECHO, "" }, + { TCPOPT_CCECHO, "ccecho" }, { TCPOPT_SIGNATURE, "md5" }, { TCPOPT_SCPS, "scps" }, { TCPOPT_UTO, "uto" }, @@ -738,7 +736,12 @@ tcp_print(netdissect_options *ndo, return; } - if (IS_SRC_OR_DST_PORT(TELNET_PORT)) { + if (IS_SRC_OR_DST_PORT(FTP_PORT)) { + ND_PRINT(": "); + ftp_print(ndo, bp, length); + } else if (IS_SRC_OR_DST_PORT(SSH_PORT)) { + ssh_print(ndo, bp, length); + } else if (IS_SRC_OR_DST_PORT(TELNET_PORT)) { telnet_print(ndo, bp, length); } else if (IS_SRC_OR_DST_PORT(SMTP_PORT)) { ND_PRINT(": "); @@ -746,42 +749,45 @@ tcp_print(netdissect_options *ndo, } else if (IS_SRC_OR_DST_PORT(WHOIS_PORT)) { ND_PRINT(": "); whois_print(ndo, bp, length); - } else if (IS_SRC_OR_DST_PORT(BGP_PORT)) - bgp_print(ndo, bp, length); - else if (IS_SRC_OR_DST_PORT(PPTP_PORT)) - pptp_print(ndo, bp); - else if (IS_SRC_OR_DST_PORT(REDIS_PORT)) - resp_print(ndo, bp, length); - else if (IS_SRC_OR_DST_PORT(SSH_PORT)) - ssh_print(ndo, bp, length); + } else if (IS_SRC_OR_DST_PORT(NAMESERVER_PORT)) { + /* over_tcp: TRUE, is_mdns: FALSE */ + domain_print(ndo, bp, length, TRUE, FALSE); + } else if (IS_SRC_OR_DST_PORT(HTTP_PORT)) { + ND_PRINT(": "); + http_print(ndo, bp, length); #ifdef ENABLE_SMB - else if (IS_SRC_OR_DST_PORT(NETBIOS_SSN_PORT)) + } else if (IS_SRC_OR_DST_PORT(NETBIOS_SSN_PORT)) { nbt_tcp_print(ndo, bp, length); - else if (IS_SRC_OR_DST_PORT(SMB_PORT)) +#endif + } else if (IS_SRC_OR_DST_PORT(BGP_PORT)) { + bgp_print(ndo, bp, length); + } else if (IS_SRC_OR_DST_PORT(RPKI_RTR_PORT)) { + rpki_rtr_print(ndo, bp, length); +#ifdef ENABLE_SMB + } else if (IS_SRC_OR_DST_PORT(SMB_PORT)) { smb_tcp_print(ndo, bp, length); #endif + } else if (IS_SRC_OR_DST_PORT(RTSP_PORT)) { + ND_PRINT(": "); + rtsp_print(ndo, bp, length); + } else if (IS_SRC_OR_DST_PORT(MSDP_PORT)) { + msdp_print(ndo, bp, length); + } else if (IS_SRC_OR_DST_PORT(LDP_PORT)) { + ldp_print(ndo, bp, length); + } else if (IS_SRC_OR_DST_PORT(PPTP_PORT)) + pptp_print(ndo, bp); + else if (IS_SRC_OR_DST_PORT(REDIS_PORT)) + resp_print(ndo, bp, length); else if (IS_SRC_OR_DST_PORT(BEEP_PORT)) beep_print(ndo, bp, length); - else if (IS_SRC_OR_DST_PORT(OPENFLOW_PORT_OLD) || IS_SRC_OR_DST_PORT(OPENFLOW_PORT_IANA)) + else if (IS_SRC_OR_DST_PORT(OPENFLOW_PORT_OLD) || IS_SRC_OR_DST_PORT(OPENFLOW_PORT_IANA)) { openflow_print(ndo, bp, length); - else if (IS_SRC_OR_DST_PORT(FTP_PORT)) { - ND_PRINT(": "); - ftp_print(ndo, bp, length); - } else if (IS_SRC_OR_DST_PORT(HTTP_PORT) || IS_SRC_OR_DST_PORT(HTTP_PORT_ALT)) { + } else if (IS_SRC_OR_DST_PORT(HTTP_PORT_ALT)) { ND_PRINT(": "); http_print(ndo, bp, length); - } else if (IS_SRC_OR_DST_PORT(RTSP_PORT) || IS_SRC_OR_DST_PORT(RTSP_PORT_ALT)) { + } else if (IS_SRC_OR_DST_PORT(RTSP_PORT_ALT)) { ND_PRINT(": "); rtsp_print(ndo, bp, length); - } else if (IS_SRC_OR_DST_PORT(NAMESERVER_PORT)) { - /* over_tcp: TRUE, is_mdns: FALSE */ - domain_print(ndo, bp, length, TRUE, FALSE); - } else if (IS_SRC_OR_DST_PORT(MSDP_PORT)) { - msdp_print(ndo, bp, length); - } else if (IS_SRC_OR_DST_PORT(RPKI_RTR_PORT)) { - rpki_rtr_print(ndo, bp, length); - } else if (IS_SRC_OR_DST_PORT(LDP_PORT)) { - ldp_print(ndo, bp, length); } else if ((IS_SRC_OR_DST_PORT(NFS_PORT)) && length >= 4 && ND_TTEST_4(bp)) { /* diff --git a/contrib/tcpdump/print-telnet.c b/contrib/tcpdump/print-telnet.c index ea7464f0dc4d..97be4b916071 100644 --- a/contrib/tcpdump/print-telnet.c +++ b/contrib/tcpdump/print-telnet.c @@ -47,9 +47,7 @@ /* \summary: Telnet option printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -117,7 +115,7 @@ static const char *telcmds[] = { #define TELOPT_NAOVTS 14 /* negotiate about vertical tab stops */ #define TELOPT_NAOVTD 15 /* negotiate about vertical tab disposition */ #define TELOPT_NAOLFD 16 /* negotiate about output LF disposition */ -#define TELOPT_XASCII 17 /* extended ascic character set */ +#define TELOPT_XASCII 17 /* extended ascii character set */ #define TELOPT_LOGOUT 18 /* force logout */ #define TELOPT_BM 19 /* byte macro */ #define TELOPT_DET 20 /* data entry terminal */ diff --git a/contrib/tcpdump/print-tftp.c b/contrib/tcpdump/print-tftp.c index 39fc6964b8a2..ec64a5c9dfa9 100644 --- a/contrib/tcpdump/print-tftp.c +++ b/contrib/tcpdump/print-tftp.c @@ -21,9 +21,7 @@ /* \summary: Trivial File Transfer Protocol (TFTP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-timed.c b/contrib/tcpdump/print-timed.c index ebd0ac8adca6..6733ef1beef3 100644 --- a/contrib/tcpdump/print-timed.c +++ b/contrib/tcpdump/print-timed.c @@ -23,9 +23,7 @@ /* specification: https://docs.freebsd.org/44doc/smm/12.timed/paper.pdf */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-tipc.c b/contrib/tcpdump/print-tipc.c index 54179a4ea605..ec5f1a542c7b 100644 --- a/contrib/tcpdump/print-tipc.c +++ b/contrib/tcpdump/print-tipc.c @@ -27,14 +27,11 @@ * https://web.archive.org/web/20161025110514/http://tipc.sourceforge.net/doc/tipc_message_formats.html */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include "netdissect.h" -#include "ethertype.h" #include "extract.h" @@ -327,8 +324,7 @@ tipc_print(netdissect_options *ndo, const u_char *bp, u_int length _U_, w0 = GET_BE_U_4(ap->w0); user = TIPC_USER(w0); - switch (user) - { + switch (user) { case TIPC_USER_LOW_IMPORTANCE: case TIPC_USER_MEDIUM_IMPORTANCE: case TIPC_USER_HIGH_IMPORTANCE: diff --git a/contrib/tcpdump/print-token.c b/contrib/tcpdump/print-token.c index bcb72584c294..6426cfe23514 100644 --- a/contrib/tcpdump/print-token.c +++ b/contrib/tcpdump/print-token.c @@ -26,9 +26,7 @@ /* \summary: Token Ring printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-udld.c b/contrib/tcpdump/print-udld.c index aec1d9e57278..a778c7262f74 100644 --- a/contrib/tcpdump/print-udld.c +++ b/contrib/tcpdump/print-udld.c @@ -19,9 +19,7 @@ /* specification: RFC 5171 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-udp.c b/contrib/tcpdump/print-udp.c index 769cbe417256..26371f040119 100644 --- a/contrib/tcpdump/print-udp.c +++ b/contrib/tcpdump/print-udp.c @@ -21,9 +21,7 @@ /* \summary: UDP printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -479,8 +477,7 @@ udp_print(netdissect_options *ndo, const u_char *bp, u_int length, case PT_AODV: udpipaddr_print(ndo, ip, sport, dport); - aodv_print(ndo, cp, length, - ip6 != NULL); + aodv_print(ndo, cp, length, IP_V(ip) == 6); break; case PT_RADIUS: @@ -572,8 +569,7 @@ udp_print(netdissect_options *ndo, const u_char *bp, u_int length, } else ND_PRINT("[udp sum ok] "); } - } - else if (IP_V(ip) == 6) { + } else if (IP_V(ip) == 6) { /* for IPv6, UDP checksum is mandatory */ if (ND_TTEST_LEN(cp, length)) { sum = udp6_cksum(ndo, ip6, up, length + sizeof(struct udphdr)); @@ -593,40 +589,63 @@ udp_print(netdissect_options *ndo, const u_char *bp, u_int length, if (IS_SRC_OR_DST_PORT(NAMESERVER_PORT)) /* over_tcp: FALSE, is_mdns: FALSE */ domain_print(ndo, cp, length, FALSE, FALSE); - else if (IS_SRC_OR_DST_PORT(MULTICASTDNS_PORT)) - /* over_tcp: FALSE, is_mdns: TRUE */ - domain_print(ndo, cp, length, FALSE, TRUE); - else if (IS_SRC_OR_DST_PORT(TIMED_PORT)) - timed_print(ndo, (const u_char *)cp); + else if (IS_SRC_OR_DST_PORT(BOOTPC_PORT) || + IS_SRC_OR_DST_PORT(BOOTPS_PORT)) + bootp_print(ndo, cp, length); else if (IS_SRC_OR_DST_PORT(TFTP_PORT)) tftp_print(ndo, cp, length); - else if (IS_SRC_OR_DST_PORT(BOOTPC_PORT) || IS_SRC_OR_DST_PORT(BOOTPS_PORT)) - bootp_print(ndo, cp, length); + else if (IS_SRC_OR_DST_PORT(KERBEROS_PORT)) + krb_print(ndo, (const u_char *)cp); + else if (IS_SRC_OR_DST_PORT(NTP_PORT)) + ntp_print(ndo, cp, length); +#ifdef ENABLE_SMB + else if (IS_SRC_OR_DST_PORT(NETBIOS_NS_PORT)) + nbt_udp137_print(ndo, cp, length); + else if (IS_SRC_OR_DST_PORT(NETBIOS_DGRAM_PORT)) + nbt_udp138_print(ndo, cp, length); +#endif + else if (IS_SRC_OR_DST_PORT(SNMP_PORT) || + IS_SRC_OR_DST_PORT(SNMPTRAP_PORT)) + snmp_print(ndo, cp, length); + else if (IS_SRC_OR_DST_PORT(PTP_EVENT_PORT) || + IS_SRC_OR_DST_PORT(PTP_GENERAL_PORT)) + ptp_print(ndo, cp, length); + else if (IS_SRC_OR_DST_PORT(CISCO_AUTORP_PORT)) + cisco_autorp_print(ndo, cp, length); + else if (IS_SRC_OR_DST_PORT(ISAKMP_PORT)) + isakmp_print(ndo, cp, length, bp2); + else if (IS_SRC_OR_DST_PORT(SYSLOG_PORT)) + syslog_print(ndo, cp, length); else if (IS_SRC_OR_DST_PORT(RIP_PORT)) rip_print(ndo, cp, length); + else if (IS_SRC_OR_DST_PORT(RIPNG_PORT)) + ripng_print(ndo, cp, length); + else if (IS_SRC_OR_DST_PORT(TIMED_PORT)) + timed_print(ndo, (const u_char *)cp); + else if (IS_SRC_OR_DST_PORT(DHCP6_SERV_PORT) || + IS_SRC_OR_DST_PORT(DHCP6_CLI_PORT)) + dhcp6_print(ndo, cp, length); + else if (IS_SRC_OR_DST_PORT(LDP_PORT)) + ldp_print(ndo, cp, length); else if (IS_SRC_OR_DST_PORT(AODV_PORT)) - aodv_print(ndo, cp, length, - ip6 != NULL); - else if (IS_SRC_OR_DST_PORT(ISAKMP_PORT)) - isakmp_print(ndo, cp, length, bp2); + aodv_print(ndo, cp, length, IP_V(ip) == 6); + else if (IS_SRC_OR_DST_PORT(OLSR_PORT)) + olsr_print(ndo, cp, length, IP_V(ip) == 6); + else if (IS_SRC_OR_DST_PORT(LMP_PORT)) + lmp_print(ndo, cp, length); + else if (IS_SRC_OR_DST_PORT(KERBEROS_SEC_PORT)) + krb_print(ndo, (const u_char *)cp); + else if (IS_SRC_OR_DST_PORT(LWRES_PORT)) + lwres_print(ndo, cp, length); + else if (IS_SRC_OR_DST_PORT(MULTICASTDNS_PORT)) + /* over_tcp: FALSE, is_mdns: TRUE */ + domain_print(ndo, cp, length, FALSE, TRUE); else if (IS_SRC_OR_DST_PORT(ISAKMP_PORT_NATT)) isakmp_rfc3948_print(ndo, cp, length, bp2, IP_V(ip), fragmented, ttl_hl); else if (IS_SRC_OR_DST_PORT(ISAKMP_PORT_USER1) || IS_SRC_OR_DST_PORT(ISAKMP_PORT_USER2)) isakmp_print(ndo, cp, length, bp2); - else if (IS_SRC_OR_DST_PORT(SNMP_PORT) || IS_SRC_OR_DST_PORT(SNMPTRAP_PORT)) - snmp_print(ndo, cp, length); - else if (IS_SRC_OR_DST_PORT(NTP_PORT)) - ntp_print(ndo, cp, length); - else if (IS_SRC_OR_DST_PORT(KERBEROS_PORT) || IS_SRC_OR_DST_PORT(KERBEROS_SEC_PORT)) - krb_print(ndo, (const u_char *)cp); else if (IS_SRC_OR_DST_PORT(L2TP_PORT)) l2tp_print(ndo, cp, length); -#ifdef ENABLE_SMB - else if (IS_SRC_OR_DST_PORT(NETBIOS_NS_PORT)) - nbt_udp137_print(ndo, cp, length); - else if (IS_SRC_OR_DST_PORT(NETBIOS_DGRAM_PORT)) - nbt_udp138_print(ndo, cp, length); -#endif else if (dport == VAT_PORT) vat_print(ndo, cp, length); else if (IS_SRC_OR_DST_PORT(ZEPHYR_SRV_PORT) || IS_SRC_OR_DST_PORT(ZEPHYR_CLT_PORT)) @@ -639,10 +658,6 @@ udp_print(netdissect_options *ndo, const u_char *bp, u_int length, (dport >= RX_PORT_LOW && dport <= RX_PORT_HIGH)) rx_print(ndo, cp, length, sport, dport, (const u_char *) ip); - else if (IS_SRC_OR_DST_PORT(RIPNG_PORT)) - ripng_print(ndo, cp, length); - else if (IS_SRC_OR_DST_PORT(DHCP6_SERV_PORT) || IS_SRC_OR_DST_PORT(DHCP6_CLI_PORT)) - dhcp6_print(ndo, cp, length); else if (IS_SRC_OR_DST_PORT(AHCP_PORT)) ahcp_print(ndo, cp, length); else if (IS_SRC_OR_DST_PORT(BABEL_PORT) || IS_SRC_OR_DST_PORT(BABEL_PORT_OLD)) @@ -654,8 +669,6 @@ udp_print(netdissect_options *ndo, const u_char *bp, u_int length, */ else if (dport == WB_PORT) wb_print(ndo, cp, length); - else if (IS_SRC_OR_DST_PORT(CISCO_AUTORP_PORT)) - cisco_autorp_print(ndo, cp, length); else if (IS_SRC_OR_DST_PORT(RADIUS_PORT) || IS_SRC_OR_DST_PORT(RADIUS_NEW_PORT) || IS_SRC_OR_DST_PORT(RADIUS_ACCOUNTING_PORT) || @@ -665,24 +678,13 @@ udp_print(netdissect_options *ndo, const u_char *bp, u_int length, radius_print(ndo, cp, length); else if (dport == HSRP_PORT) hsrp_print(ndo, cp, length); - else if (IS_SRC_OR_DST_PORT(LWRES_PORT)) - lwres_print(ndo, cp, length); - else if (IS_SRC_OR_DST_PORT(LDP_PORT)) - ldp_print(ndo, cp, length); - else if (IS_SRC_OR_DST_PORT(OLSR_PORT)) - olsr_print(ndo, cp, length, - (IP_V(ip) == 6) ? 1 : 0); else if (IS_SRC_OR_DST_PORT(MPLS_LSP_PING_PORT)) lspping_print(ndo, cp, length); - else if (sport == BCM_LI_PORT) - bcm_li_print(ndo, cp, length); else if (dport == BFD_CONTROL_PORT || dport == BFD_MULTIHOP_PORT || dport == BFD_LAG_PORT || dport == BFD_ECHO_PORT ) bfd_print(ndo, cp, length, dport); - else if (IS_SRC_OR_DST_PORT(LMP_PORT)) - lmp_print(ndo, cp, length); else if (IS_SRC_OR_DST_PORT(VQP_PORT)) vqp_print(ndo, cp, length); else if (IS_SRC_OR_DST_PORT(SFLOW_PORT)) @@ -695,8 +697,6 @@ udp_print(netdissect_options *ndo, const u_char *bp, u_int length, lwapp_data_print(ndo, cp, length); else if (IS_SRC_OR_DST_PORT(SIP_PORT)) sip_print(ndo, cp, length); - else if (IS_SRC_OR_DST_PORT(SYSLOG_PORT)) - syslog_print(ndo, cp, length); else if (IS_SRC_OR_DST_PORT(OTV_PORT)) otv_print(ndo, cp, length); else if (IS_SRC_OR_DST_PORT(VXLAN_PORT)) @@ -717,11 +717,10 @@ udp_print(netdissect_options *ndo, const u_char *bp, u_int length, if (ndo->ndo_vflag) ND_PRINT("kip "); llap_print(ndo, cp, length); - } else if (IS_SRC_OR_DST_PORT(PTP_EVENT_PORT) || - IS_SRC_OR_DST_PORT(PTP_GENERAL_PORT)) { - ptp_print(ndo, cp, length); } else if (IS_SRC_OR_DST_PORT(SOMEIP_PORT)) someip_print(ndo, cp, length); + else if (sport == BCM_LI_PORT) + bcm_li_print(ndo, cp, length); else { if (ulen > length && !fragmented) ND_PRINT("UDP, bad length %u > %u", diff --git a/contrib/tcpdump/print-unsupported.c b/contrib/tcpdump/print-unsupported.c index 009cf6f9b9ce..2dbab773720d 100644 --- a/contrib/tcpdump/print-unsupported.c +++ b/contrib/tcpdump/print-unsupported.c @@ -16,9 +16,7 @@ /* \summary: unsupported link-layer protocols printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-usb.c b/contrib/tcpdump/print-usb.c index 3f5937ba16ca..98bd91b20fb3 100644 --- a/contrib/tcpdump/print-usb.c +++ b/contrib/tcpdump/print-usb.c @@ -21,9 +21,7 @@ /* \summary: USB printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -148,8 +146,7 @@ get_direction(int transfer_type, int event_type) case URB_BULK: case URB_CONTROL: case URB_ISOCHRONOUS: - switch(event_type) - { + switch(event_type) { case URB_SUBMIT: direction = 2; break; @@ -162,8 +159,7 @@ get_direction(int transfer_type, int event_type) } break; case URB_INTERRUPT: - switch(event_type) - { + switch(event_type) { case URB_SUBMIT: direction = 1; break; @@ -196,8 +192,7 @@ usb_header_print(netdissect_options *ndo, const pcap_usb_header *uh) ND_PRINT(" "); transfer_type = GET_U_1(uh->transfer_type); - switch(transfer_type) - { + switch(transfer_type) { case URB_ISOCHRONOUS: ND_PRINT("ISOCHRONOUS"); break; @@ -215,8 +210,7 @@ usb_header_print(netdissect_options *ndo, const pcap_usb_header *uh) } event_type = GET_U_1(uh->event_type); - switch(event_type) - { + switch(event_type) { case URB_SUBMIT: ND_PRINT(" SUBMIT"); break; diff --git a/contrib/tcpdump/print-vjc.c b/contrib/tcpdump/print-vjc.c index 830330717ea4..48a36f10ad88 100644 --- a/contrib/tcpdump/print-vjc.c +++ b/contrib/tcpdump/print-vjc.c @@ -23,9 +23,7 @@ /* specification: RFC 1144 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-vqp.c b/contrib/tcpdump/print-vqp.c index 1b2f6bfe022b..57b7b3f1d18e 100644 --- a/contrib/tcpdump/print-vqp.c +++ b/contrib/tcpdump/print-vqp.c @@ -17,9 +17,7 @@ /* \summary: Cisco VLAN Query Protocol (VQP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-vrrp.c b/contrib/tcpdump/print-vrrp.c index 7ac595561b56..bd0bb30dc482 100644 --- a/contrib/tcpdump/print-vrrp.c +++ b/contrib/tcpdump/print-vrrp.c @@ -25,9 +25,7 @@ /* \summary: Virtual Router Redundancy Protocol (VRRP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-vsock.c b/contrib/tcpdump/print-vsock.c index bb18c92b8cef..bcb08cc77e10 100644 --- a/contrib/tcpdump/print-vsock.c +++ b/contrib/tcpdump/print-vsock.c @@ -23,9 +23,7 @@ /* \summary: Linux vsock printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include <stddef.h> diff --git a/contrib/tcpdump/print-vtp.c b/contrib/tcpdump/print-vtp.c index bcee64cfe58d..5b6030477da3 100644 --- a/contrib/tcpdump/print-vtp.c +++ b/contrib/tcpdump/print-vtp.c @@ -21,9 +21,7 @@ /* \summary: Cisco VLAN Trunking Protocol (VTP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -148,7 +146,7 @@ vtp_print(netdissect_options *ndo, ND_PRINT("\n\tDomain name: "); mgmtd_len = GET_U_1(tptr + 3); if (mgmtd_len < 1 || mgmtd_len > VTP_DOMAIN_NAME_LEN) { - ND_PRINT(" [invalid MgmtD Len %u]", mgmtd_len); + ND_PRINT(" [MgmtD Len %u]", mgmtd_len); goto invalid; } nd_printjnp(ndo, tptr + 4, mgmtd_len); @@ -300,7 +298,7 @@ vtp_print(netdissect_options *ndo, * in units of 16-bit words. */ if (tlv_len != 1) { - ND_PRINT(" (invalid TLV length %u != 1)", tlv_len); + ND_PRINT(" [TLV length %u != 1]", tlv_len); goto invalid; } else { tlv_value = GET_BE_U_2(tptr + 2); diff --git a/contrib/tcpdump/print-vxlan-gpe.c b/contrib/tcpdump/print-vxlan-gpe.c index 13cba4229377..e990f9667769 100644 --- a/contrib/tcpdump/print-vxlan-gpe.c +++ b/contrib/tcpdump/print-vxlan-gpe.c @@ -25,9 +25,7 @@ /* specification: draft-ietf-nvo3-vxlan-gpe-10 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-vxlan.c b/contrib/tcpdump/print-vxlan.c index 60dcd44def50..b40061b67d8a 100644 --- a/contrib/tcpdump/print-vxlan.c +++ b/contrib/tcpdump/print-vxlan.c @@ -17,9 +17,7 @@ /* specification: RFC 7348 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-wb.c b/contrib/tcpdump/print-wb.c index 35b5a196d8bf..30c751b8f684 100644 --- a/contrib/tcpdump/print-wb.c +++ b/contrib/tcpdump/print-wb.c @@ -21,9 +21,7 @@ /* \summary: White Board printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-whois.c b/contrib/tcpdump/print-whois.c index 30c254aafbe2..2111a56d2737 100644 --- a/contrib/tcpdump/print-whois.c +++ b/contrib/tcpdump/print-whois.c @@ -15,9 +15,7 @@ /* RFC 3912 */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-zep.c b/contrib/tcpdump/print-zep.c index 52901e789b1d..c507e369d38b 100644 --- a/contrib/tcpdump/print-zep.c +++ b/contrib/tcpdump/print-zep.c @@ -21,9 +21,7 @@ /* \summary: ZigBee Encapsulation Protocol (ZEP) printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -85,7 +83,7 @@ static void zep_print_ts(netdissect_options *ndo, const u_char *p) char time_buf[128]; ND_PRINT(" (%s)", - nd_format_time(time_buf, sizeof (time_buf), "%Y/%m/%d %H:%M:%S", + nd_format_time(time_buf, sizeof (time_buf), "%Y-%m-%d %H:%M:%S", localtime(&seconds))); } } @@ -120,7 +118,7 @@ zep_print(netdissect_options *ndo, if (version == 1) { /* ZEP v1 packet. */ - ND_LCHECK_U(len, 16); + ND_ICHECK_U(len, <, 16); ND_PRINT("Channel ID %u, Device ID 0x%04x, ", GET_U_1(bp + 3), GET_BE_U_2(bp + 4)); if (GET_U_1(bp + 6)) @@ -136,7 +134,7 @@ zep_print(netdissect_options *ndo, /* ZEP v2 packet. */ if (GET_U_1(bp + 3) == 2) { /* ZEP v2 ack. */ - ND_LCHECK_U(len, 8); + ND_ICHECK_U(len, <, 8); seq_no = GET_BE_U_4(bp + 4); ND_PRINT("ACK, seq# = %u", seq_no); inner_len = 0; @@ -144,7 +142,7 @@ zep_print(netdissect_options *ndo, len -= 8; } else { /* ZEP v2 data, or some other. */ - ND_LCHECK_U(len, 32); + ND_ICHECK_U(len, <, 32); ND_PRINT("Type %u, Channel ID %u, Device ID 0x%04x, ", GET_U_1(bp + 3), GET_U_1(bp + 4), GET_BE_U_2(bp + 5)); diff --git a/contrib/tcpdump/print-zephyr.c b/contrib/tcpdump/print-zephyr.c index 11e1e59316a4..796f4e93f79c 100644 --- a/contrib/tcpdump/print-zephyr.c +++ b/contrib/tcpdump/print-zephyr.c @@ -22,9 +22,7 @@ /* \summary: Zephyr printer */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/print-zeromq.c b/contrib/tcpdump/print-zeromq.c index c702046822b1..820104758a2b 100644 --- a/contrib/tcpdump/print-zeromq.c +++ b/contrib/tcpdump/print-zeromq.c @@ -26,10 +26,9 @@ */ /* \summary: ZeroMQ Message Transport Protocol (ZMTP) printer */ +/* specification: https://rfc.zeromq.org/spec/13/ */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -42,6 +41,18 @@ */ #define VBYTES 128 +static const struct tok flags_bm[] = { + { 0x01, "MORE" }, + { 0x02, "R1" }, + { 0x04, "R2" }, + { 0x08, "R3" }, + { 0x10, "R4" }, + { 0x20, "R5" }, + { 0x40, "R6" }, + { 0x80, "R7" }, + { 0, NULL } +}; + /* * Below is an excerpt from the "13/ZMTP" specification: * @@ -104,16 +115,7 @@ zmtp1_print_frame(netdissect_options *ndo, const u_char *cp, const u_char *ep) if (ndo->ndo_vflag) { uint64_t body_len_printed = ND_MIN(body_len_captured, body_len_declared); - ND_PRINT(" (%s|%s|%s|%s|%s|%s|%s|%s)", - flags & 0x80 ? "MBZ" : "-", - flags & 0x40 ? "MBZ" : "-", - flags & 0x20 ? "MBZ" : "-", - flags & 0x10 ? "MBZ" : "-", - flags & 0x08 ? "MBZ" : "-", - flags & 0x04 ? "MBZ" : "-", - flags & 0x02 ? "MBZ" : "-", - flags & 0x01 ? "MORE" : "-"); - + ND_PRINT(" (%s)", bittok2str(flags_bm, "none", flags)); if (ndo->ndo_vflag == 1) body_len_printed = ND_MIN(VBYTES + 1, body_len_printed); if (body_len_printed > 1) { diff --git a/contrib/tcpdump/print.c b/contrib/tcpdump/print.c index 96d34b772f08..9f7969e539cf 100644 --- a/contrib/tcpdump/print.c +++ b/contrib/tcpdump/print.c @@ -25,9 +25,7 @@ * Seth Webster <swebster@sst.ll.mit.edu> */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include <stdlib.h> #include <string.h> @@ -267,9 +265,7 @@ static int ndo_printf(netdissect_options *ndo, void init_print(netdissect_options *ndo, uint32_t localnet, uint32_t mask) { - init_addrtoname(ndo, localnet, mask); - init_checksum(); } if_printer @@ -326,6 +322,11 @@ get_if_printer(int type) return printer; } +#ifdef ENABLE_INSTRUMENT_FUNCTIONS +extern int profile_func_level; +static int pretty_print_packet_level = -1; +#endif + void pretty_print_packet(netdissect_options *ndo, const struct pcap_pkthdr *h, const u_char *sp, u_int packets_captured) @@ -333,6 +334,11 @@ pretty_print_packet(netdissect_options *ndo, const struct pcap_pkthdr *h, u_int hdrlen = 0; int invalid_header = 0; +#ifdef ENABLE_INSTRUMENT_FUNCTIONS + if (pretty_print_packet_level == -1) + pretty_print_packet_level = profile_func_level; +#endif + if (ndo->ndo_packet_number) ND_PRINT("%5u ", packets_captured); @@ -421,6 +427,10 @@ pretty_print_packet(netdissect_options *ndo, const struct pcap_pkthdr *h, nd_print_trunc(ndo); /* Print the full packet */ ndo->ndo_ll_hdr_len = 0; +#ifdef ENABLE_INSTRUMENT_FUNCTIONS + /* truncation => reassignment */ + profile_func_level = pretty_print_packet_level; +#endif break; } hdrlen = ndo->ndo_ll_hdr_len; diff --git a/contrib/tcpdump/signature.c b/contrib/tcpdump/signature.c index 77d6e81ac3ab..f10a90b94ee9 100644 --- a/contrib/tcpdump/signature.c +++ b/contrib/tcpdump/signature.c @@ -15,9 +15,7 @@ * Original code by Hannes Gredler (hannes@gredler.at) */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" diff --git a/contrib/tcpdump/smbutil.c b/contrib/tcpdump/smbutil.c index 97217a8d9fc6..fa5e133fa2a8 100644 --- a/contrib/tcpdump/smbutil.c +++ b/contrib/tcpdump/smbutil.c @@ -6,9 +6,7 @@ * or later */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" @@ -251,7 +249,7 @@ name_len(netdissect_options *ndo, s += GET_U_1(s) + 1; ND_TCHECK_1(s); } - return(ND_BYTES_BETWEEN(s, s0) + 1); + return(ND_BYTES_BETWEEN(s0, s) + 1); trunc: return(-1); /* name goes past the end of the buffer */ @@ -334,7 +332,7 @@ write_bits(netdissect_options *ndo, u_int i = 0; while ((p = strchr(fmt, '|'))) { - u_int l = ND_BYTES_BETWEEN(p, fmt); + u_int l = ND_BYTES_BETWEEN(fmt, p); if (l && (val & (1 << i))) ND_PRINT("%.*s ", (int)l, fmt); fmt = p + 1; @@ -493,7 +491,7 @@ smb_fdata1(netdissect_options *ndo, u_int l; p = strchr(++fmt, '}'); - l = ND_BYTES_BETWEEN(p, fmt); + l = ND_BYTES_BETWEEN(fmt, p); if (l > sizeof(bitfmt) - 1) l = sizeof(bitfmt)-1; @@ -742,8 +740,9 @@ smb_fdata1(netdissect_options *ndo, switch (t) { case 1: - name_type = name_extract(ndo, startbuf, ND_BYTES_BETWEEN(buf, startbuf), - maxbuf, nbuf); + name_type = name_extract(ndo, startbuf, + ND_BYTES_BETWEEN(startbuf, buf), + maxbuf, nbuf); if (name_type < 0) goto trunc; len = name_len(ndo, buf, maxbuf); @@ -799,8 +798,8 @@ smb_fdata1(netdissect_options *ndo, break; } if (t != 0) { - tstring = nd_format_time(buffer, sizeof(buffer), "%a %b %e %T %Y", - localtime(&t)); + tstring = nd_format_time(buffer, sizeof(buffer), "%Y-%m-%d %T", + localtime(&t)); } else tstring = "NULL"; ND_PRINT("%s\n", tstring); @@ -933,7 +932,7 @@ smb_fdata(netdissect_options *ndo, } } if (!depth && buf < maxbuf) { - u_int len = ND_BYTES_BETWEEN(maxbuf, buf); + u_int len = ND_BYTES_BETWEEN(buf, maxbuf); ND_PRINT("Data: (%u bytes)\n", len); smb_data_print(ndo, buf, len); return(buf + len); diff --git a/contrib/tcpdump/status-exit-codes.h b/contrib/tcpdump/status-exit-codes.h index 34d9d16b3c68..1fc350265d9b 100644 --- a/contrib/tcpdump/status-exit-codes.h +++ b/contrib/tcpdump/status-exit-codes.h @@ -22,7 +22,6 @@ typedef enum { S_SUCCESS = 0, /* not a libnetdissect status */ S_ERR_HOST_PROGRAM = 1, /* not a libnetdissect status */ - S_ERR_ND_NO_PRINTER = 11, S_ERR_ND_MEM_ALLOC = 12, S_ERR_ND_OPEN_FILE = 13, S_ERR_ND_WRITE_FILE = 14, diff --git a/contrib/tcpdump/strtoaddr.c b/contrib/tcpdump/strtoaddr.c index c6f79d9a6ec4..bf8a9d3d5250 100644 --- a/contrib/tcpdump/strtoaddr.c +++ b/contrib/tcpdump/strtoaddr.c @@ -15,9 +15,7 @@ * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include <stddef.h> diff --git a/contrib/tcpdump/tcp.h b/contrib/tcpdump/tcp.h index 491157b0ae7d..b1ee4aa95f36 100644 --- a/contrib/tcpdump/tcp.h +++ b/contrib/tcpdump/tcp.h @@ -139,6 +139,9 @@ struct tcphdr { #ifndef NFS_PORT #define NFS_PORT 2049 #endif +#ifndef REDIS_PORT +#define REDIS_PORT 6379 +#endif #ifndef OPENFLOW_PORT_OLD #define OPENFLOW_PORT_OLD 6633 #endif @@ -154,6 +157,3 @@ struct tcphdr { #ifndef BEEP_PORT #define BEEP_PORT 10288 #endif -#ifndef REDIS_PORT -#define REDIS_PORT 6379 -#endif diff --git a/contrib/tcpdump/tcpdump.1.in b/contrib/tcpdump/tcpdump.1.in index 87e0fbb8cf19..3ed261df6fe7 100644 --- a/contrib/tcpdump/tcpdump.1.in +++ b/contrib/tcpdump/tcpdump.1.in @@ -20,7 +20,7 @@ .\" WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF .\" MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. .\" -.TH TCPDUMP 1 "12 March 2023" +.TH TCPDUMP 1 "26 March 2024" .SH NAME tcpdump \- dump traffic on a network .SH SYNOPSIS @@ -32,7 +32,6 @@ tcpdump \- dump traffic on a network .B \-B .I buffer_size ] -.br .ti +8 [ .B \-c @@ -408,7 +407,7 @@ which should include a time format as defined by .BR strftime (3). If no time format is specified, each new file will overwrite the previous. Whenever a generated filename is not unique, tcpdump will overwrite the -pre-existing data; providing a time specification that is coarser than the +preexisting data; providing a time specification that is coarser than the capture period is therefore not advised. .IP If used in conjunction with the @@ -625,7 +624,7 @@ instead of ``nic.ddn.mil''. .TP .B \-\-number .PD -Print an optional packet number at the beginning of the line. +Print a packet number at the beginning of the line. .TP .B \-O .PD 0 @@ -1105,8 +1104,7 @@ gives a brief description and examples of most of the formats. .sp 1.5 .B .. -.HD -Timestamps +.SS Timestamps .LP By default, all output lines are preceded by a timestamp. The timestamp @@ -1126,8 +1124,16 @@ packet from the network and the time when an interrupt was delivered to the kernel to get it to read the packet and a delay between the time when the kernel serviced the `new packet' interrupt and the time when it applied a time stamp to the packet. -.HD -Link Level Headers +.SS Interface +.LP +When the \fIany\fP interface is selected on capture or when a link-type +\fILINUX_SLL2\fP capture file is read the +interface name is printed after the timestamp. This is followed by the packet +type with \fIIn\fP and \fIOut\fP denoting a packet destined for this host or +originating from this host respectively. Other possible values are \fIB\fP +for broadcast packets, \fIM\fP for multicast packets, and \fIP\fP for packets +destined for other hosts. +.SS Link Level Headers .LP If the '-e' option is given, the link level header is printed out. On Ethernets, the source and destination addresses, protocol, @@ -1191,8 +1197,7 @@ data and 6 bytes of compressed header: \fBO ctcp * A+6 S+49 I+6 3 (6)\fP .fi .RE -.HD -ARP/RARP Packets +.SS ARP/RARP Packets .LP ARP/RARP output shows the type of request and its arguments. The @@ -1235,8 +1240,7 @@ CSAM RTSG 0806 64: arp reply csam is-at CSAM\fR For the first packet this says the Ethernet source address is RTSG, the destination is the Ethernet broadcast address, the type field contained hex 0806 (type ETHER_ARP) and the total length was 64 bytes. -.HD -IPv4 Packets +.SS IPv4 Packets .LP If the link-layer header is not being printed, for IPv4 packets, \fBIP\fP is printed after the time stamp. @@ -1263,7 +1267,8 @@ part of a fragmented datagram or not. and \fBDF\fP is reported if F is set. If neither are set, \fB.\fP is reported. \fIproto\fP is the protocol ID field. -\fIlength\fP is the total length field. +\fIlength\fP is the total length field; if the packet is a presumed TSO +(TCP Segmentation Offload) send, [was 0, presumed TSO] is reported. \fIoptions\fP are the IP options, if any. .LP Next, for TCP and UDP packets, the source and destination IP addresses @@ -1279,8 +1284,7 @@ protocol header. Fragmentation information will be printed only with the .B \-v flag, in the IP header information, as described above. -.HD -TCP Packets +.SS TCP Packets .LP \fI(N.B.:The following description assumes familiarity with the TCP protocol described in RFC 793. @@ -1387,8 +1391,7 @@ If the header length indicates options are present but the IP datagram length is not long enough for the options to actually be there, \fItcpdump\fP reports it as ``[\fIbad hdr length\fP]''. -.HD -.B Capturing TCP packets with particular flag combinations (SYN-ACK, URG-ACK, etc.) +.SS Particular TCP Flag Combinations (SYN-ACK, URG-ACK, etc.) .PP There are 8 bits in the control bits section of the TCP header: .IP @@ -1506,7 +1509,7 @@ We can use this expression as the filter for \fItcpdump\fP in order to watch packets which have only SYN set: .RS .B -tcpdump -i xl0 tcp[13] == 2 +tcpdump -i xl0 'tcp[13] == 2' .RE .PP The expression says "let the 13th octet of a TCP datagram have @@ -1590,9 +1593,7 @@ This can be demonstrated as: Note that you should use single quotes or a backslash in the expression to hide the AND ('&') special character from the shell. -.HD -.B -UDP Packets +.SS UDP Packets .LP UDP format is illustrated by this rwho packet: .RS @@ -1611,8 +1612,7 @@ Some UDP services are recognized (from the source or destination port number) and the higher level protocol information printed. In particular, Domain Name service requests (RFC 1034/1035) and Sun RPC calls (RFC 1050) to NFS. -.HD -TCP or UDP Name Server Requests +.SS TCP or UDP Name Server Requests .LP \fI(N.B.:The following description assumes familiarity with the Domain Service protocol described in RFC 1035. @@ -1658,8 +1658,7 @@ is the appropriate count. If any of the response bits are set (AA, RA or rcode) or any of the `must be zero' bits are set in bytes two and three, `[b2&3=\fIx\fP]' is printed, where \fIx\fP is the hex value of header bytes two and three. -.HD -TCP or UDP Name Server Responses +.SS TCP or UDP Name Server Responses .LP Name server responses are formatted as .RS @@ -1682,7 +1681,7 @@ The op (Query) and response code (NoError) were omitted, as was the class (C_IN) of the A record. .LP In the second example, \fIhelios\fP responds to query 2 with a -response code of non-existent domain (NXDomain) with no answers, +response code of nonexistent domain (NXDomain) with no answers, one name server and no authority records. The `*' indicates that the \fIauthoritative answer\fP bit was set. @@ -1694,8 +1693,7 @@ RA, \fInot\fP set) and `|' (truncated message, TC, set). If the `question' section doesn't contain exactly one entry, `[\fIn\fPq]' is printed. -.HD -SMB/CIFS decoding +.SS SMB/CIFS Decoding .LP \fItcpdump\fP now includes fairly extensive SMB/CIFS/NBT decoding for data on UDP/137, UDP/138 and TCP/139. @@ -1712,8 +1710,7 @@ For information on SMB packet formats and what all the fields mean see \%https://download.samba.org/pub/samba/specs/ and other online resources. The SMB patches were written by Andrew Tridgell (tridge@samba.org). -.HD -NFS Requests and Replies +.SS NFS Requests and Replies .LP Sun NFS (Network File System) requests and replies are printed as: .RS @@ -1795,8 +1792,7 @@ Instead, replies using the transaction ID. If a reply does not closely follow the corresponding request, it might not be parsable. -.HD -AFS Requests and Replies +.SS AFS Requests and Replies .LP Transarc AFS (Andrew File System) requests and replies are printed as: @@ -1860,8 +1856,7 @@ If a reply does not closely follow the corresponding request, it might not be parsable. -.HD -KIP AppleTalk (DDP in UDP) +.SS KIP AppleTalk (DDP in UDP) .LP AppleTalk DDP packets encapsulated in UDP datagrams are de-encapsulated and dumped as DDP packets (i.e., all the UDP header information is @@ -1925,7 +1920,8 @@ Other protocols just dump the protocol name (or number if no name is registered for the protocol) and packet size. -\fBNBP packets\fP are formatted like the following examples: +.SS NBP Packets +NBP packets are formatted like the following examples: .RS .nf .sp .5 @@ -1945,7 +1941,8 @@ The third line is another reply to the same request saying host techpit has laserwriter "techpit" registered on port 186. -\fBATP packet\fP formatting is demonstrated by the following example: +.SS ATP Packets +ATP packet formatting is demonstrated by the following example: .RS .nf .sp .5 @@ -2044,24 +2041,6 @@ in the tcpdump source tree root. NIT doesn't let you watch your own outbound traffic, BPF will. We recommend that you use the latter. .LP -On Linux systems with 2.0[.x] kernels: -.IP -packets on the loopback device will be seen twice; -.IP -packet filtering cannot be done in the kernel, so that all packets must -be copied from the kernel in order to be filtered in user mode; -.IP -all of a packet, not just the part that's within the snapshot length, -will be copied from the kernel (the 2.0[.x] packet capture mechanism, if -asked to copy only part of a packet to userspace, will not report the -true length of the packet; this would cause most IP packets to get an -error from -.BR tcpdump ); -.IP -capturing on some PPP devices won't work correctly. -.LP -We recommend that you upgrade to a 2.2 or later kernel. -.LP Some attempt should be made to reassemble IP fragments or, at least to compute the right length for the higher level protocol. .LP diff --git a/contrib/tcpdump/tcpdump.c b/contrib/tcpdump/tcpdump.c index 8cfcb04fc093..6cf7a066ab5c 100644 --- a/contrib/tcpdump/tcpdump.c +++ b/contrib/tcpdump/tcpdump.c @@ -33,12 +33,10 @@ * combined efforts of Van, Steve McCanne and Craig Leres of LBL. */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif /* - * Some older versions of Mac OS X may ship pcap.h from libpcap 0.6 with a + * Some older versions of Mac OS X ship pcap.h from libpcap 0.6 with a * libpcap based on 0.8. That means it has pcap_findalldevs() but the * header doesn't define pcap_if_t, meaning that we can't actually *use* * pcap_findalldevs(). @@ -63,9 +61,7 @@ The Regents of the University of California. All rights reserved.\n"; #include <sys/stat.h> -#ifdef HAVE_FCNTL_H #include <fcntl.h> -#endif #ifdef HAVE_LIBCRYPTO #include <openssl/crypto.h> @@ -439,15 +435,15 @@ show_tstamp_types_and_exit(pcap_t *pc, const char *device) device); exit_tcpdump(S_SUCCESS); } - fprintf(stderr, "Time stamp types for %s (use option -j to set):\n", + fprintf(stdout, "Time stamp types for %s (use option -j to set):\n", device); for (i = 0; i < n_tstamp_types; i++) { tstamp_type_name = pcap_tstamp_type_val_to_name(tstamp_types[i]); if (tstamp_type_name != NULL) { - (void) fprintf(stderr, " %s (%s)\n", tstamp_type_name, + (void) fprintf(stdout, " %s (%s)\n", tstamp_type_name, pcap_tstamp_type_val_to_description(tstamp_types[i])); } else { - (void) fprintf(stderr, " %d\n", tstamp_types[i]); + (void) fprintf(stdout, " %d\n", tstamp_types[i]); } } pcap_free_tstamp_types(tstamp_types); @@ -476,28 +472,30 @@ show_dlts_and_exit(pcap_t *pc, const char *device) * monitor mode might be different from the ones available when * not in monitor mode). */ + (void) fprintf(stdout, "Data link types for "); if (supports_monitor_mode) - (void) fprintf(stderr, "Data link types for %s %s (use option -y to set):\n", + (void) fprintf(stdout, "%s %s", device, Iflag ? "when in monitor mode" : "when not in monitor mode"); else - (void) fprintf(stderr, "Data link types for %s (use option -y to set):\n", + (void) fprintf(stdout, "%s", device); + (void) fprintf(stdout, " (use option -y to set):\n"); for (i = 0; i < n_dlts; i++) { dlt_name = pcap_datalink_val_to_name(dlts[i]); if (dlt_name != NULL) { - (void) fprintf(stderr, " %s (%s)", dlt_name, + (void) fprintf(stdout, " %s (%s)", dlt_name, pcap_datalink_val_to_description(dlts[i])); /* * OK, does tcpdump handle that type? */ if (!has_printer(dlts[i])) - (void) fprintf(stderr, " (printing not supported)"); - fprintf(stderr, "\n"); + (void) fprintf(stdout, " (printing not supported)"); + fprintf(stdout, "\n"); } else { - (void) fprintf(stderr, " DLT %d (printing not supported)\n", + (void) fprintf(stdout, " DLT %d (printing not supported)\n", dlts[i]); } } @@ -812,7 +810,7 @@ droproot(const char *username, const char *chroot_dir) } else error("Couldn't find user '%.32s'", username); #ifdef HAVE_LIBCAP_NG - /* We don't need CAP_SETUID, CAP_SETGID and CAP_SYS_CHROOT any more. */ + /* We don't need CAP_SETUID, CAP_SETGID and CAP_SYS_CHROOT anymore. */ DIAG_OFF_ASSIGN_ENUM capng_updatev( CAPNG_DROP, @@ -983,7 +981,7 @@ tstamp_precision_to_string(int precision) * along the lines of ioctl(), the fact that ioctl() operations are * largely specific to particular character devices but fcntl() operations * are either generic to all descriptors or generic to all descriptors for - * regular files nonwithstanding. + * regular files notwithstanding. * * The Capsicum people decided that fine-grained control of descriptor * operations was required, so that you need to grant permission for @@ -1170,7 +1168,7 @@ parse_interface_number(const char *device) /* * No, it's not an ordinal. */ - error("Invalid adapter index"); + error("Invalid adapter index %s", device); } return (devnum); } else { @@ -1245,8 +1243,11 @@ _U_ for (i = 0, dev = devlist; i < devnum-1 && dev != NULL; i++, dev = dev->next) ; - if (dev == NULL) - error("Invalid adapter index"); + if (dev == NULL) { + pcap_freealldevs(devlist); + error("Invalid adapter index %ld: only %ld interfaces found", + devnum, i); + } device = strdup(dev->name); pcap_freealldevs(devlist); return (device); @@ -1564,6 +1565,11 @@ main(int argc, char **argv) if (abort_on_misalignment(ebuf, sizeof(ebuf)) < 0) error("%s", ebuf); + /* + * An explicit tzset() call is usually not needed as it happens + * implicitly the first time we call localtime() or mktime(), + * but in some cases (sandboxing, chroot) this may be too late. + */ tzset(); while ( @@ -1734,7 +1740,7 @@ main(int argc, char **argv) if (nd_load_smi_module(optarg, ebuf, sizeof(ebuf)) == -1) error("%s", ebuf); } else { - (void)fprintf(stderr, "%s: ignoring option `-m %s' ", + (void)fprintf(stderr, "%s: ignoring option '-m %s' ", program_name, optarg); (void)fprintf(stderr, "(no libsmi support)\n"); } @@ -1778,7 +1784,7 @@ main(int argc, char **argv) else if (ascii_strcasecmp(optarg, "inout") == 0) Qflag = PCAP_D_INOUT; else - error("unknown capture direction `%s'", optarg); + error("unknown capture direction '%s'", optarg); break; #endif /* HAVE_PCAP_SETDIRECTION */ @@ -1844,7 +1850,7 @@ main(int argc, char **argv) else if (ascii_strcasecmp(optarg, "domain") == 0) ndo->ndo_packettype = PT_DOMAIN; else - error("unknown packet type `%s'", optarg); + error("unknown packet type '%s'", optarg); break; case 'u': @@ -1977,14 +1983,6 @@ main(int argc, char **argv) show_remote_devices_and_exit(); #endif -#if defined(DLT_LINUX_SLL2) && defined(HAVE_PCAP_SET_DATALINK) -/* Set default linktype DLT_LINUX_SLL2 when capturing on the "any" device */ - if (device != NULL && - strncmp (device, "any", strlen("any")) == 0 - && yflag_dlt == -1) - yflag_dlt = DLT_LINUX_SLL2; -#endif - switch (ndo->ndo_tflag) { case 0: /* Default */ @@ -2034,6 +2032,8 @@ main(int argc, char **argv) /* Run with '-Z root' to restore old behaviour */ if (!username) username = WITH_USER; + else if (strcmp(username, "root") == 0) + username = NULL; } #endif @@ -2237,6 +2237,24 @@ main(int argc, char **argv) pcap_datalink_val_to_name(yflag_dlt)); (void)fflush(stderr); } +#if defined(DLT_LINUX_SLL2) && defined(HAVE_PCAP_SET_DATALINK) + else { + /* + * Attempt to set default linktype to + * DLT_LINUX_SLL2 when capturing on the + * "any" device. + * + * If the attempt fails, just quietly drive + * on; this may be a non-Linux "any" device + * that doesn't support DLT_LINUX_SLL2. + */ + if (strcmp(device, "any") == 0) { +DIAG_OFF_WARN_UNUSED_RESULT + (void) pcap_set_datalink(pd, DLT_LINUX_SLL2); +DIAG_ON_WARN_UNUSED_RESULT + } + } +#endif i = pcap_snapshot(pd); if (ndo->ndo_snaplen < i) { if (ndo->ndo_snaplen != 0) @@ -2288,7 +2306,21 @@ main(int argc, char **argv) #endif /* Cooperate with nohup(1) */ #ifndef _WIN32 + /* + * In illumos /usr/include/sys/iso/signal_iso.h causes Clang to + * generate a -Wstrict-prototypes warning here, see [1]. The + * __illumos__ macro is available since at least GCC 11 and Clang 13, + * see [2]. + * 1: https://www.illumos.org/issues/16344 + * 2: https://www.illumos.org/issues/13726 + */ +#ifdef __illumos__ + DIAG_OFF_STRICT_PROTOTYPES +#endif /* __illumos__ */ if ((oldhandler = setsignal(SIGHUP, cleanup)) != SIG_DFL) +#ifdef __illumos__ + DIAG_ON_STRICT_PROTOTYPES +#endif /* __illumos__ */ (void)setsignal(SIGHUP, oldhandler); #endif /* _WIN32 */ @@ -2569,7 +2601,7 @@ DIAG_ON_ASSIGN_ENUM cansandbox = (cansandbox && (ndo->ndo_nflag || capdns != NULL)); #else cansandbox = (cansandbox && ndo->ndo_nflag); -#endif /* HAVE_CASPER */ +#endif /* HAVE_CASPER */ cansandbox = (cansandbox && (pcap_fileno(pd) != -1 || RFileName != NULL)); @@ -2664,6 +2696,8 @@ DIAG_ON_ASSIGN_ENUM */ dlt = new_dlt; ndo->ndo_if_printer = get_if_printer(dlt); + /* Free the old filter */ + pcap_freecode(&fcode); if (pcap_compile(pd, &fcode, cmdbuf, Oflag, netmask) < 0) error("%s", pcap_geterr(pd)); } @@ -2724,7 +2758,14 @@ static void ) new.sa_flags = SA_RESTART; if (sigaction(sig, &new, &old) < 0) + /* The same workaround as for SIG_DFL above. */ +#ifdef __illumos__ + DIAG_OFF_STRICT_PROTOTYPES +#endif /* __illumos__ */ return (SIG_ERR); +#ifdef __illumos__ + DIAG_ON_STRICT_PROTOTYPES +#endif /* __illumos__ */ return (old.sa_handler); #endif } @@ -2786,7 +2827,7 @@ cleanup(int signo _U_) static void child_cleanup(int signo _U_) { - wait(NULL); + while (waitpid(-1, NULL, WNOHANG) >= 0); } #endif /* HAVE_FORK && HAVE_VFORK */ @@ -3228,6 +3269,8 @@ print_version(FILE *f) (void)fprintf (f, "Compiled with MemorySanitizer/Clang.\n"); # endif #endif /* __SANITIZE_ADDRESS__ or __has_feature */ + (void)fprintf (f, "%zu-bit build, %zu-bit time_t\n", + sizeof(void *) * 8, sizeof(time_t) * 8); } DIAG_ON_DEPRECATION diff --git a/contrib/tcpdump/udp.h b/contrib/tcpdump/udp.h index e714180ffd97..1eec850268e4 100644 --- a/contrib/tcpdump/udp.h +++ b/contrib/tcpdump/udp.h @@ -78,10 +78,10 @@ struct udphdr { #define SNMPTRAP_PORT 162 /*XXX*/ #endif #ifndef PTP_EVENT_PORT -#define PTP_EVENT_PORT 319 /* IANA */ +#define PTP_EVENT_PORT 319 /* IANA */ #endif #ifndef PTP_GENERAL_PORT -#define PTP_GENERAL_PORT 320 /* IANA */ +#define PTP_GENERAL_PORT 320 /* IANA */ #endif #ifndef CISCO_AUTORP_PORT #define CISCO_AUTORP_PORT 496 /*XXX*/ @@ -110,7 +110,7 @@ struct udphdr { #ifndef LDP_PORT #define LDP_PORT 646 #endif -#ifndef AQDV_PORT +#ifndef AODV_PORT #define AODV_PORT 654 /*XXX*/ #endif #ifndef OLSR_PORT @@ -152,7 +152,7 @@ struct udphdr { #ifndef ZEPHYR_SRV_PORT #define ZEPHYR_SRV_PORT 2103 /*XXX*/ #endif -#ifndef ZEPHYR_CLI_PORT +#ifndef ZEPHYR_CLT_PORT #define ZEPHYR_CLT_PORT 2104 /*XXX*/ #endif #ifndef VAT_PORT @@ -161,9 +161,6 @@ struct udphdr { #ifndef MPLS_LSP_PING_PORT #define MPLS_LSP_PING_PORT 3503 /* draft-ietf-mpls-lsp-ping-02.txt */ #endif -#ifndef BCM_LI_PORT -#define BCM_LI_PORT 49152 /* SDK default */ -#endif #ifndef BFD_CONTROL_PORT #define BFD_CONTROL_PORT 3784 /* RFC 5881 */ #endif @@ -248,3 +245,6 @@ struct udphdr { #ifndef SOMEIP_PORT #define SOMEIP_PORT 30490 /* https://www.autosar.org/standards/foundation */ #endif +#ifndef BCM_LI_PORT +#define BCM_LI_PORT 49152 /* SDK default */ +#endif diff --git a/contrib/tcpdump/util-print.c b/contrib/tcpdump/util-print.c index 0548337860ee..85ec24a33ed2 100644 --- a/contrib/tcpdump/util-print.c +++ b/contrib/tcpdump/util-print.c @@ -35,17 +35,12 @@ * FOR A PARTICULAR PURPOSE. */ -#ifdef HAVE_CONFIG_H #include <config.h> -#endif #include "netdissect-stdinc.h" #include <sys/stat.h> -#ifdef HAVE_FCNTL_H -#include <fcntl.h> -#endif #include <stdio.h> #include <stdarg.h> #include <stdlib.h> @@ -172,6 +167,23 @@ nd_printn(netdissect_options *ndo, } /* + * Print a counted filename (or other ASCII string), part of + * the packet buffer, filtering out non-printable characters. + * Stop if truncated (via GET_U_1/longjmp) or after n bytes, + * whichever is first. + * The suffix comes from: j:longJmp, n:after N bytes. + */ +void +nd_printjn(netdissect_options *ndo, const u_char *s, u_int n) +{ + while (n > 0) { + fn_print_char(ndo, GET_U_1(s)); + n--; + s++; + } +} + +/* * Print a null-padded filename (or other ASCII string), part of * the packet buffer, filtering out non-printable characters. * Stop if truncated (via GET_U_1/longjmp) or after n bytes or before @@ -197,17 +209,17 @@ nd_printjnp(netdissect_options *ndo, const u_char *s, u_int n) * Print the timestamp .FRAC part (Microseconds/nanoseconds) */ static void -ts_frac_print(netdissect_options *ndo, long usec) +ts_frac_print(netdissect_options *ndo, const struct timeval *tv) { #ifdef HAVE_PCAP_SET_TSTAMP_PRECISION switch (ndo->ndo_tstamp_precision) { case PCAP_TSTAMP_PRECISION_MICRO: - ND_PRINT(".%06u", (unsigned)usec); + ND_PRINT(".%06u", (unsigned)tv->tv_usec); break; case PCAP_TSTAMP_PRECISION_NANO: - ND_PRINT(".%09u", (unsigned)usec); + ND_PRINT(".%09u", (unsigned)tv->tv_usec); break; default: @@ -215,7 +227,7 @@ ts_frac_print(netdissect_options *ndo, long usec) break; } #else - ND_PRINT(".%06u", (unsigned)usec); + ND_PRINT(".%06u", (unsigned)tv->tv_usec); #endif } @@ -225,23 +237,22 @@ ts_frac_print(netdissect_options *ndo, long usec) * if date_flag == WITH_DATE print YY:MM:DD before HH:MM:SS.FRAC */ static void -ts_date_hmsfrac_print(netdissect_options *ndo, long sec, long usec, +ts_date_hmsfrac_print(netdissect_options *ndo, const struct timeval *tv, enum date_flag date_flag, enum time_flag time_flag) { - time_t Time = sec; struct tm *tm; char timebuf[32]; const char *timestr; - if ((unsigned)sec & 0x80000000) { - ND_PRINT("[Error converting time]"); + if (tv->tv_sec < 0) { + ND_PRINT("[timestamp < 1970-01-01 00:00:00 UTC]"); return; } if (time_flag == LOCAL_TIME) - tm = localtime(&Time); + tm = localtime(&tv->tv_sec); else - tm = gmtime(&Time); + tm = gmtime(&tv->tv_sec); if (date_flag == WITH_DATE) { timestr = nd_format_time(timebuf, sizeof(timebuf), @@ -252,22 +263,22 @@ ts_date_hmsfrac_print(netdissect_options *ndo, long sec, long usec, } ND_PRINT("%s", timestr); - ts_frac_print(ndo, usec); + ts_frac_print(ndo, tv); } /* * Print the timestamp - Unix timeval style, as SECS.FRAC. */ static void -ts_unix_print(netdissect_options *ndo, long sec, long usec) +ts_unix_print(netdissect_options *ndo, const struct timeval *tv) { - if ((unsigned)sec & 0x80000000) { - ND_PRINT("[Error converting time]"); + if (tv->tv_sec < 0) { + ND_PRINT("[timestamp < 1970-01-01 00:00:00 UTC]"); return; } - ND_PRINT("%u", (unsigned)sec); - ts_frac_print(ndo, usec); + ND_PRINT("%u", (unsigned)tv->tv_sec); + ts_frac_print(ndo, tv); } /* @@ -285,8 +296,7 @@ ts_print(netdissect_options *ndo, switch (ndo->ndo_tflag) { case 0: /* Default */ - ts_date_hmsfrac_print(ndo, tvp->tv_sec, tvp->tv_usec, - WITHOUT_DATE, LOCAL_TIME); + ts_date_hmsfrac_print(ndo, tvp, WITHOUT_DATE, LOCAL_TIME); ND_PRINT(" "); break; @@ -294,7 +304,7 @@ ts_print(netdissect_options *ndo, break; case 2: /* Unix timeval style */ - ts_unix_print(ndo, tvp->tv_sec, tvp->tv_usec); + ts_unix_print(ndo, tvp); ND_PRINT(" "); break; @@ -325,8 +335,7 @@ ts_print(netdissect_options *ndo, netdissect_timevalsub(tvp, &tv_ref, &tv_result, nano_prec); ND_PRINT((negative_offset ? "-" : " ")); - ts_date_hmsfrac_print(ndo, tv_result.tv_sec, tv_result.tv_usec, - WITHOUT_DATE, UTC_TIME); + ts_date_hmsfrac_print(ndo, &tv_result, WITHOUT_DATE, UTC_TIME); ND_PRINT(" "); if (ndo->ndo_tflag == 3) @@ -334,8 +343,7 @@ ts_print(netdissect_options *ndo, break; case 4: /* Date + Default */ - ts_date_hmsfrac_print(ndo, tvp->tv_sec, tvp->tv_usec, - WITH_DATE, LOCAL_TIME); + ts_date_hmsfrac_print(ndo, tvp, WITH_DATE, LOCAL_TIME); ND_PRINT(" "); break; } @@ -814,11 +822,10 @@ print_txt_line(netdissect_options *ndo, const char *prefix, /* * All printable ASCII, but no line ending after that point - * in the buffer; treat this as if it were truncated. + * in the buffer. */ linelen = idx - startidx; ND_PRINT("%s%.*s", prefix, (int)linelen, pptr + startidx); - nd_print_trunc(ndo); return (0); print: diff --git a/usr.sbin/tcpdump/tcpdump/config.h b/usr.sbin/tcpdump/tcpdump/config.h index 8fc7d8c2523f..5e343d5ed0c3 100644 --- a/usr.sbin/tcpdump/tcpdump/config.h +++ b/usr.sbin/tcpdump/tcpdump/config.h @@ -237,7 +237,7 @@ #define PACKAGE_NAME "tcpdump" /* Define to the full name and version of this package. */ -#define PACKAGE_STRING "tcpdump 4.99.4" +#define PACKAGE_STRING "tcpdump 4.99.5" /* Define to the one symbol short name of this package. */ #define PACKAGE_TARNAME "tcpdump" @@ -246,7 +246,7 @@ #define PACKAGE_URL "" /* Define to the version of this package. */ -#define PACKAGE_VERSION "4.99.4" +#define PACKAGE_VERSION "4.99.5" /* The size of `void *', as computed by sizeof. */ /* #undef SIZEOF_VOID_P */ |