summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES1705
-rw-r--r--CMakeLists.txt57
-rw-r--r--INSTALL.md39
-rw-r--r--LICENSE.md32
-rw-r--r--Makefile.Watcom50
-rw-r--r--Makefile.am25
-rw-r--r--Makefile.dj5
-rw-r--r--Makefile.in29
-rw-r--r--Makefile.m3214
-rw-r--r--Makefile.msvc45
-rw-r--r--Makefile.netware11
-rw-r--r--README.md6
-rw-r--r--README.msvc2
-rw-r--r--RELEASE-NOTES106
-rw-r--r--acinclude.m43
-rw-r--r--aclocal.m44
-rw-r--r--aminclude_static.am2
-rwxr-xr-xbuildconf2
-rw-r--r--buildconf.bat3
-rw-r--r--c-ares-config.cmake.in16
-rw-r--r--cmake/EnableWarnings.cmake408
-rwxr-xr-xconfig.guess1500
-rwxr-xr-xconfig.sub2609
-rwxr-xr-xconfigure1454
-rw-r--r--configure.ac79
-rw-r--r--docs/CMakeLists.txt2
-rw-r--r--docs/Makefile.am7
-rw-r--r--docs/Makefile.in15
-rw-r--r--docs/Makefile.inc2
-rw-r--r--docs/acountry.154
-rw-r--r--docs/adig.142
-rw-r--r--docs/ahost.120
-rw-r--r--docs/ares_cancel.32
-rw-r--r--docs/ares_create_query.32
-rw-r--r--docs/ares_destroy.32
-rw-r--r--docs/ares_destroy_options.38
-rw-r--r--docs/ares_dup.314
-rw-r--r--docs/ares_expand_name.315
-rw-r--r--docs/ares_expand_string.312
-rw-r--r--docs/ares_fds.32
-rw-r--r--docs/ares_free_data.371
-rw-r--r--docs/ares_free_hostent.38
-rw-r--r--docs/ares_free_string.38
-rw-r--r--docs/ares_freeaddrinfo.32
-rw-r--r--docs/ares_get_servers.313
-rw-r--r--docs/ares_get_servers_ports.33
-rw-r--r--docs/ares_getaddrinfo.333
-rw-r--r--docs/ares_gethostbyaddr.319
-rw-r--r--docs/ares_gethostbyname.318
-rw-r--r--docs/ares_gethostbyname_file.310
-rw-r--r--docs/ares_getnameinfo.319
-rw-r--r--docs/ares_getsock.310
-rw-r--r--docs/ares_inet_ntop.314
-rw-r--r--docs/ares_inet_pton.312
-rw-r--r--docs/ares_init.312
-rw-r--r--docs/ares_init_options.361
-rw-r--r--docs/ares_library_cleanup.313
-rw-r--r--docs/ares_library_init.323
-rw-r--r--docs/ares_library_init_android.36
-rw-r--r--docs/ares_library_initialized.36
-rw-r--r--docs/ares_mkquery.312
-rw-r--r--docs/ares_parse_a_reply.312
-rw-r--r--docs/ares_parse_aaaa_reply.312
-rw-r--r--docs/ares_parse_caa_reply.32
-rw-r--r--docs/ares_parse_mx_reply.313
-rw-r--r--docs/ares_parse_naptr_reply.312
-rw-r--r--docs/ares_parse_ns_reply.310
-rw-r--r--docs/ares_parse_ptr_reply.312
-rw-r--r--docs/ares_parse_soa_reply.312
-rw-r--r--docs/ares_parse_srv_reply.312
-rw-r--r--docs/ares_parse_txt_reply.339
-rw-r--r--docs/ares_parse_uri_reply.324
-rw-r--r--docs/ares_process.34
-rw-r--r--docs/ares_query.319
-rw-r--r--docs/ares_save_options.39
-rw-r--r--docs/ares_search.319
-rw-r--r--docs/ares_send.317
-rw-r--r--docs/ares_set_local_dev.38
-rw-r--r--docs/ares_set_local_ip4.38
-rw-r--r--docs/ares_set_local_ip6.316
-rw-r--r--docs/ares_set_servers.315
-rw-r--r--docs/ares_set_servers_csv.311
-rw-r--r--docs/ares_set_servers_ports.33
-rw-r--r--docs/ares_set_servers_ports_csv.33
-rw-r--r--docs/ares_set_socket_callback.320
-rw-r--r--docs/ares_set_socket_configure_callback.321
-rw-r--r--docs/ares_set_socket_functions.346
-rw-r--r--docs/ares_set_sortlist.311
-rw-r--r--docs/ares_strerror.38
-rw-r--r--docs/ares_timeout.32
-rw-r--r--docs/ares_version.32
-rw-r--r--get_ver.awk2
-rw-r--r--include/CMakeLists.txt2
-rw-r--r--include/Makefile.am2
-rw-r--r--include/Makefile.in8
-rw-r--r--include/ares.h763
-rw-r--r--include/ares_build.h38
-rw-r--r--include/ares_build.h.cmake9
-rw-r--r--include/ares_build.h.in39
-rw-r--r--include/ares_dns.h157
-rw-r--r--include/ares_nameser.h404
-rw-r--r--include/ares_rules.h60
-rw-r--r--include/ares_version.h41
-rw-r--r--libcares.pc.cmake8
-rw-r--r--libcares.pc.in2
-rwxr-xr-xltmain.sh827
-rw-r--r--m4/ax_append_compile_flags.m465
-rw-r--r--m4/ax_append_flag.m469
-rw-r--r--m4/ax_check_compile_flag.m472
-rw-r--r--m4/ax_check_user_namespace.m47
-rw-r--r--m4/ax_check_uts_namespace.m47
-rw-r--r--m4/ax_cxx_compile_stdcxx.m41009
-rw-r--r--m4/ax_cxx_compile_stdcxx_11.m4158
-rw-r--r--m4/ax_pthread.m4444
-rw-r--r--m4/cares-compilers.m471
-rw-r--r--m4/cares-confopts.m412
-rw-r--r--m4/cares-functions.m4190
-rw-r--r--m4/cares-reentrant.m45
-rw-r--r--m4/libtool.m4229
-rw-r--r--m4/ltoptions.m44
-rw-r--r--m4/ltsugar.m42
-rw-r--r--m4/ltversion.m413
-rw-r--r--m4/lt~obsolete.m44
-rw-r--r--m4/xc-am-iface.m43
-rw-r--r--m4/xc-cc-check.m43
-rw-r--r--m4/xc-lt-iface.m44
-rw-r--r--m4/xc-translit.m44
-rw-r--r--m4/xc-val-flgs.m44
-rw-r--r--m4/zz40-xc-ovr.m43
-rwxr-xr-xmaketgz2
-rw-r--r--msvc_ver.inc2
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/Makefile.am2
-rw-r--r--src/Makefile.in8
-rw-r--r--src/lib/CMakeLists.txt16
-rw-r--r--src/lib/Makefile.am2
-rw-r--r--src/lib/Makefile.in263
-rw-r--r--src/lib/Makefile.inc40
-rw-r--r--src/lib/ares__addrinfo2hostent.c356
-rw-r--r--src/lib/ares__addrinfo_localhost.c278
-rw-r--r--src/lib/ares__buf.c954
-rw-r--r--src/lib/ares__buf.h416
-rw-r--r--src/lib/ares__close_sockets.c143
-rw-r--r--src/lib/ares__get_hostent.c415
-rw-r--r--src/lib/ares__htable.c359
-rw-r--r--src/lib/ares__htable.h163
-rw-r--r--src/lib/ares__htable_asvp.c194
-rw-r--r--src/lib/ares__htable_asvp.h120
-rw-r--r--src/lib/ares__htable_stvp.c193
-rw-r--r--src/lib/ares__htable_stvp.h117
-rw-r--r--src/lib/ares__llist.c315
-rw-r--r--src/lib/ares__llist.h203
-rw-r--r--src/lib/ares__parse_into_addrinfo.c339
-rw-r--r--src/lib/ares__read_line.c101
-rw-r--r--src/lib/ares__readaddrinfo.c371
-rw-r--r--src/lib/ares__slist.c451
-rw-r--r--src/lib/ares__slist.h198
-rw-r--r--src/lib/ares__sortaddrinfo.c522
-rw-r--r--src/lib/ares__timeval.c75
-rw-r--r--src/lib/ares_android.c360
-rw-r--r--src/lib/ares_android.h39
-rw-r--r--src/lib/ares_cancel.c101
-rw-r--r--src/lib/ares_config.h.cmake14
-rw-r--r--src/lib/ares_config.h.in9
-rw-r--r--src/lib/ares_create_query.c145
-rw-r--r--src/lib/ares_data.c266
-rw-r--r--src/lib/ares_data.h88
-rw-r--r--src/lib/ares_destroy.c157
-rw-r--r--src/lib/ares_dns_mapping.c520
-rw-r--r--src/lib/ares_dns_parse.c1043
-rw-r--r--src/lib/ares_dns_record.c935
-rw-r--r--src/lib/ares_dns_record.h798
-rw-r--r--src/lib/ares_expand_name.c343
-rw-r--r--src/lib/ares_expand_string.c118
-rw-r--r--src/lib/ares_fds.c85
-rw-r--r--src/lib/ares_free_hostent.c52
-rw-r--r--src/lib/ares_free_string.c37
-rw-r--r--src/lib/ares_freeaddrinfo.c69
-rw-r--r--src/lib/ares_getaddrinfo.c1095
-rw-r--r--src/lib/ares_getenv.c38
-rw-r--r--src/lib/ares_getenv.h42
-rw-r--r--src/lib/ares_gethostbyaddr.c345
-rw-r--r--src/lib/ares_gethostbyname.c373
-rw-r--r--src/lib/ares_getnameinfo.c640
-rw-r--r--src/lib/ares_getsock.c106
-rw-r--r--src/lib/ares_inet_net_pton.h42
-rw-r--r--src/lib/ares_init.c2748
-rw-r--r--src/lib/ares_iphlpapi.h161
-rw-r--r--src/lib/ares_ipv6.h73
-rw-r--r--src/lib/ares_library_init.c214
-rw-r--r--src/lib/ares_library_init.h43
-rw-r--r--src/lib/ares_llist.c63
-rw-r--r--src/lib/ares_llist.h39
-rw-r--r--src/lib/ares_math.c67
-rw-r--r--src/lib/ares_mkquery.c37
-rw-r--r--src/lib/ares_nowarn.c260
-rw-r--r--src/lib/ares_nowarn.h61
-rw-r--r--src/lib/ares_options.c455
-rw-r--r--src/lib/ares_parse_a_reply.c93
-rw-r--r--src/lib/ares_parse_aaaa_reply.c94
-rw-r--r--src/lib/ares_parse_caa_reply.c288
-rw-r--r--src/lib/ares_parse_mx_reply.c214
-rw-r--r--src/lib/ares_parse_naptr_reply.c257
-rw-r--r--src/lib/ares_parse_ns_reply.c258
-rw-r--r--src/lib/ares_parse_ptr_reply.c360
-rw-r--r--src/lib/ares_parse_soa_reply.c240
-rw-r--r--src/lib/ares_parse_srv_reply.c234
-rw-r--r--src/lib/ares_parse_txt_reply.c291
-rw-r--r--src/lib/ares_parse_uri_reply.c243
-rw-r--r--src/lib/ares_platform.c21948
-rw-r--r--src/lib/ares_platform.h43
-rw-r--r--src/lib/ares_private.h571
-rw-r--r--src/lib/ares_process.c2090
-rw-r--r--src/lib/ares_query.c223
-rw-r--r--src/lib/ares_rand.c359
-rw-r--r--src/lib/ares_search.c448
-rw-r--r--src/lib/ares_send.c165
-rw-r--r--src/lib/ares_setup.h116
-rw-r--r--src/lib/ares_str.c95
-rw-r--r--src/lib/ares_str.h49
-rw-r--r--src/lib/ares_strcasecmp.c71
-rw-r--r--src/lib/ares_strcasecmp.h42
-rw-r--r--src/lib/ares_strdup.c42
-rw-r--r--src/lib/ares_strdup.h24
-rw-r--r--src/lib/ares_strerror.c125
-rw-r--r--src/lib/ares_strsplit.c221
-rw-r--r--src/lib/ares_strsplit.h60
-rw-r--r--src/lib/ares_timeout.c125
-rw-r--r--src/lib/ares_version.c30
-rw-r--r--src/lib/ares_writev.c79
-rw-r--r--src/lib/ares_writev.h36
-rw-r--r--src/lib/bitncmp.c23
-rw-r--r--src/lib/bitncmp.h45
-rw-r--r--src/lib/cares.rc36
-rw-r--r--src/lib/config-dos.h174
-rw-r--r--src/lib/config-win32.h104
-rw-r--r--src/lib/inet_net_pton.c427
-rw-r--r--src/lib/inet_ntop.c101
-rw-r--r--src/lib/setup_once.h458
-rw-r--r--src/lib/windows_port.c21
-rw-r--r--src/tools/CMakeLists.txt25
-rw-r--r--src/tools/Makefile.am12
-rw-r--r--src/tools/Makefile.in193
-rw-r--r--src/tools/Makefile.inc4
-rw-r--r--src/tools/acountry.c652
-rw-r--r--src/tools/adig.c1121
-rw-r--r--src/tools/ahost.c274
-rw-r--r--src/tools/ares_getopt.c124
-rw-r--r--src/tools/ares_getopt.h28
-rw-r--r--test/CMakeLists.txt2
-rw-r--r--test/Makefile.am31
-rw-r--r--test/Makefile.in57
-rw-r--r--test/Makefile.inc2
-rw-r--r--test/Makefile.m326
-rw-r--r--test/Makefile.msvc3
-rw-r--r--test/README.md1
-rw-r--r--test/aclocal.m41
-rw-r--r--test/aminclude_static.am2
-rw-r--r--test/ares-fuzz.c45
-rw-r--r--test/ares-test-ai.h65
-rw-r--r--test/ares-test-fuzz-name.c31
-rw-r--r--test/ares-test-fuzz.c115
-rw-r--r--test/ares-test-init.cc52
-rw-r--r--test/ares-test-internal.cc125
-rw-r--r--test/ares-test-live.cc68
-rw-r--r--test/ares-test-main.cc17
-rw-r--r--test/ares-test-misc.cc21
-rw-r--r--test/ares-test-mock-ai.cc26
-rw-r--r--test/ares-test-mock.cc154
-rw-r--r--test/ares-test-ns.cc17
-rw-r--r--test/ares-test-parse-a.cc17
-rw-r--r--test/ares-test-parse-aaaa.cc17
-rw-r--r--test/ares-test-parse-caa.cc17
-rw-r--r--test/ares-test-parse-mx.cc17
-rw-r--r--test/ares-test-parse-naptr.cc17
-rw-r--r--test/ares-test-parse-ns.cc17
-rw-r--r--test/ares-test-parse-ptr.cc17
-rw-r--r--test/ares-test-parse-soa-any.cc17
-rw-r--r--test/ares-test-parse-soa.cc17
-rw-r--r--test/ares-test-parse-srv.cc17
-rw-r--r--test/ares-test-parse-txt.cc38
-rw-r--r--test/ares-test-parse-uri.cc17
-rw-r--r--test/ares-test-parse.cc52
-rw-r--r--test/ares-test.cc64
-rw-r--r--test/ares-test.h474
-rwxr-xr-xtest/buildconf4
-rwxr-xr-xtest/config.guess1500
-rwxr-xr-xtest/config.sub2609
-rwxr-xr-xtest/configure1501
-rw-r--r--test/configure.ac20
-rw-r--r--test/dns-dump.cc17
-rw-r--r--test/dns-proto-test.cc17
-rw-r--r--test/dns-proto.cc35
-rw-r--r--test/dns-proto.h414
-rwxr-xr-xtest/fuzzcheck.sh2
-rw-r--r--test/gmock-1.11.0/gmock-gtest-all.cc2
-rw-r--r--test/gmock-1.11.0/gmock/gmock.h2
-rw-r--r--test/gmock-1.11.0/gtest/gtest.h2
-rwxr-xr-xtest/ltmain.sh827
299 files changed, 43585 insertions, 31004 deletions
diff --git a/CHANGES b/CHANGES
index fcdc043..e171d13 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,1179 @@
Changelog for the c-ares project. Generated with git2changes.pl
+Version 1.21.0 (26 Oct 2023)
+
+Brad House (26 Oct 2023)
+- SonarCloud: reduce reported complexity that exists for no reason.
+
+- SonarCloud: fix some #undef codesmells
+
+- formatting
+
+- document ARES_RR_* records
+
+- no reason to limit on truncation
+
+- linguist fixes
+
+- don't use test cases to determine language of c-ares
+
+- fix grammar
+
+- fix count
+
+GitHub (25 Oct 2023)
+- [Brad House brought this change]
+
+ 1.21.0 release prep (#585)
+
+Brad House (25 Oct 2023)
+- fix build warning
+
+GitHub (25 Oct 2023)
+- [Brad House brought this change]
+
+ SonarCloud: clean up more codesmells (#584)
+
+Brad House (25 Oct 2023)
+- resolve reported memory leaks
+
+- add test vector said to cause a memory leak
+
+GitHub (25 Oct 2023)
+- [Brad House brought this change]
+
+ sonarcloud: fix more codesmells (#583)
+
+- [Brad House brought this change]
+
+ sonarcloud easy codesmells (#582)
+
+ Fix By: Brad House (@bradh352)
+
+- [Brad House brought this change]
+
+ Modernization: replace multiple hand-parsers with new memory-safe parser (#581)
+
+ New DNS record parsing code. The old code was basically just some helper macros and functions for parsing an entire DNS message. The caller had to know the RFCs to use the parsers, except for some pre-made exceptions. The new parsing code parses the entire DNS message into an opaque data structure in a memory safe manner with various accessors for reading and manipulating the data.
+
+ The existing parser helpers for the various record types were reimplemented as wrappers around the new parser.
+
+ The accessors allow easy iteration across the DNS record datastructure, and can be used to easily create dig-like output without needing to know anything about the various record types and formats as dynamic helpers are provided for enumeration of values and data types of those values.
+
+ At some point in the future, this new DNS record structure, accessors, and parser will be exposed publicly. This is not done at this point as we don't want to do that until the API is completely stable. Likely a write() function to output the DNS record back into an actual message buffer will be introduced with the stable API as well.
+
+ Some subtle bugs in the existing code were uncovered, some which had test cases which turned out to be bogus. Validation with third-party implementations (e.g. BIND9) were performed to validate such cases were indeed bugs.
+
+ Adding additional RR parsers such as for TLSA (#470) or SVCB/HTTPS (#566) are trivial now since focus can be put on only parsing the data within the RR, not the entire message. That said, as the new parser is not yet public, it isn't clear the best way to expose any new RRs (probably best to wait for the new parser to be public rather than hacking in another legacy function).
+
+ Some additional RRs that are part of DNS RFC1035 or EDNS RFC6891 that didn't have previously implemented parsers are now also implemented (e.g. HINFO, OPT). Any unrecognized RRs are encapsulated into a "RAW_RR" as binary data which can be inserted or extracted, but are otherwise not interpreted in any way.
+
+ Fix By: Brad House (@bradh352)
+
+- [Gregor Jasny brought this change]
+
+ feat: use CMake to control symbol visibility (#574)
+
+ In contrast to #572 this solution does not need any extra headers. But it is also limited to GCC-like compilers.
+
+ Fix By: Gregor Jasny (@gjasny)
+
+- [Brad House brought this change]
+
+ remove ares_nowarn helpers #580
+
+ Now that the code internally is using proper datatypes, there is no longer a need for ares_nowarn helpers. Remove them.
+
+ Fix By: Brad House (@bradh352)
+
+Brad House (16 Oct 2023)
+- clang-format: fix structure alignment
+
+ It appears the structure alignment chosen just doesn't work right.
+ Switch to 'left', it appears to be mostly correct.
+
+ Fix By: Brad House (@bradh352)
+
+GitHub (15 Oct 2023)
+- [Brad House brought this change]
+
+ Reformat code using clang-format (#579)
+
+ c-ares uses multiple code styles, standardize on one. Talking with @bagder he feels strongly about maintaining an 80 column limit, but feels less strongly about things I feel strongly about (like alignment).
+
+ Can re-run the formatter on the codebase via:
+ ```
+ clang-format -i */*.c */*.h */*/*.c */*/*.h
+ ```
+
+ Fix By: Brad House (@bradh352)
+
+Brad House (15 Oct 2023)
+- inet_ntop requires ares_private.h
+
+- SonarCloud: Fix additional code smells
+
+ Fix By: Brad House (@bradh352)
+
+- SonarCloud: Ignore codesmells c89 doesn't support
+
+ C89 doesn't support iterator declaration in for loop, kill warning.
+
+ Fix By: Brad House (@bradh352)
+
+GitHub (15 Oct 2023)
+- [Brad House brought this change]
+
+ set compiler standard to ISO C90/ANSI C89 (#577)
+
+ SonarCloud is outputting some code smells for things that aren't possible for C89. Hopefully setting the code standard to C89/C90 properly will fix those bogus warnings.
+
+ Fix By: Brad House (@bradh352)
+
+Brad House (15 Oct 2023)
+- fix new ares_strcpy to ensure null termination
+
+- build fix
+
+GitHub (15 Oct 2023)
+- [Brad House brought this change]
+
+ SonarCloud: Fix up codesmells due to strlen(), strcpy(), and strncpy() (#576)
+
+ Create ares_strlen() and ares_strcpy() in order to resolve SonarCloud codesmells related to their use.
+
+ ares_strlen() just becomes null-safe.
+
+ ares_strcpy() is equivalent to strlcpy(), so unlike strncpy() it guarantees NULL termination.
+
+ Fix By: Brad House (@bradh352)
+
+Brad House (15 Oct 2023)
+- SonarCloud: try to appease it better
+
+- SonarCloud: Fix reported bugs
+
+ SonarCloud reported a few bugs, this commit should fix those reports.
+
+ Fix By: Brad House (@bradh352)
+
+GitHub (15 Oct 2023)
+- [Brad House brought this change]
+
+ Fix internal datatype usage and warnings (#573)
+
+ PR #568 increased the warning levels and c-ares code emitted a bunch of warnings. This PR fixes those warnings and starts transitioning internal data types into more proper forms (e.g. data lengths should be size_t not int). It does, however, have to manually cast back to what the public API needs due to API and ABI compliance (we aren't looking to break integrations, just clean up internals).
+
+ Fix By: Brad House (@bradh352)
+
+Brad House (15 Oct 2023)
+- SonarCloud: exclude tests
+
+- fix source directories
+
+GitHub (15 Oct 2023)
+- [Brad House brought this change]
+
+ Sonarcloud (#575)
+
+- [Brad House brought this change]
+
+ Increase compiler warnings by default (#568)
+
+ c-ares was missing a couple of common compiler warnings during building that are widely recognized as a best practice. This PR makes no code changes, only build system changes to increase warning levels.
+
+ This PR does cause some new warnings to be emitted, a follow-up PR will address those.
+
+ Fix By: Brad House (@bradh352)
+
+- [Brad House brought this change]
+
+ introduce ares_bool_t datatype (#570)
+
+ c-ares currently uses int for boolean, which can be confusing as there are some functions which return int but use '0' as the success condition. Some internal variable usage is similar. Lets try to identify the boolean use cases and split them out into their own data type of ares_bool_t. Since we're trying to keep C89 compatibility, we can't rely on stdbool.h or the _Bool C99 data type, so we'll define our own.
+
+ Also, chose using an enum rather than say unsigned char or int because of the type safety benefits it provides. Compilers should warn if you try to pass, ARES_TRUE on to a ares_status_t enum (or similar) since they are different enums.
+
+ Fix By: Brad House (@bradh352)
+
+Brad House (12 Oct 2023)
+- Socket callbacks were passed SOCK_STREAM instead of SOCK_DGRAM on udp
+
+ A regression was introduced in 1.20.0 that would pass SOCK_STREAM on udp
+ connections due to code refactoring. If a client application validated this
+ data, it could cause issues as seen in gRPC.
+
+ Fixes Issue: #571
+ Fix By: Brad House (@bradh352)
+
+- Enhance test of ares_getsock()
+
+ In an attempt to see if ares_getsock() was broken as per #571, do
+ further sanity checks of the results of ares_getsock(). It seems
+ as though ares_getsock() is fine.
+
+ Fix By: Brad House (@bradh352)
+
+GitHub (10 Oct 2023)
+- [Brad House brought this change]
+
+ Tool: STAYOPEN flag could make tools not terminate (#569)
+
+ If a flag is set to keep the connections to the DNS servers open even if there are no queries, the tools would not exit until the remote server closed the connection due to the user of ares_fds() to determine if there are any active queries. Instead, rely on ares_timeout() returning NULL if there are no active queries (technically this returns the value passed to max_tv in ares_timeout(), but in our use case, that is always NULL).
+
+ Fixes Issue: #452
+ Fix By: Brad House (@bradh352)
+
+- [Brad House brought this change]
+
+ ares_status_t enum for status codes (#567)
+
+ The list of possible error codes in c-ares was a #define list. This not only doesn't provide for any sort of type safety but it also lacks clarification on what a function may return or what it takes, as an int could be an ares status, a boolean, or possibly even a length in the current code.
+
+ We are not changing any public APIs as though the C standard states the underlying size and type of an enum is int, there are compiler attributes to override this as well as compiler flags like -fshort-enums. GCC in particular is known to expand an enum's width based on the data values (e.g., it can emit a 64bit integer enum).
+
+ All internal usages should be changed by this PR, but of course, there may be some I missed.
+
+ Fix By: Brad House (@bradh352)
+
+Daniel Stenberg (9 Oct 2023)
+- docs: provide better man page references
+
+ When referring to another c-ares function use \fI function(3) \fP to let
+ the webpage rendering find and cross-link them appropriately.
+
+ SEE ALSO references should be ".BR name (3),", with a space before the
+ open parenthesis. This helps the manpage to HTML renderer.
+
+ Closes #565
+
+Version 1.20.1 (8 Oct 2023)
+
+GitHub (8 Oct 2023)
+- [Daniel Stenberg brought this change]
+
+ ares-test: silence warning (#564)
+
+ warning: comparison of integer expressions of different signedness
+
+ Fix By: Daniel Stenberg (@bagder)
+
+Brad House (8 Oct 2023)
+- fix README.md
+
+GitHub (8 Oct 2023)
+- [Brad House brought this change]
+
+ 1.20.1 release (#563)
+
+- [Brad House brought this change]
+
+ fix reference to freed memory (#562)
+
+ Issue #561 shows free'd memory could be accessed in some error conditions.
+
+ Fixes Issue #561
+ Fix By: Brad House (@bradh352)
+
+Brad House (8 Oct 2023)
+- reported build/test systems may timeout on intensive tests. reduce test case to still be relevant but to reduce false positive errors
+
+GitHub (8 Oct 2023)
+- [Gregor Jasny brought this change]
+
+ Regression: Fix typo in fuzzcheck target name (#559)
+
+ This seems to be a vim'esque typo introduced with c1b00c41.
+
+ Fix By: Gregor Jasny (@gjasny)
+
+Version 1.20.0 (6 Oct 2023)
+
+Brad House (6 Oct 2023)
+- fix slist search off by 1
+
+GitHub (6 Oct 2023)
+- [Brad House brought this change]
+
+ 1.20.0 release prep (#557)
+
+- [Brad House brought this change]
+
+ ares__buf should return standard error codes. more helpers implemented. (#558)
+
+ The purpose of this PR is to hopefully make the private API of this set of routines less likely to need to be changed in a future release. While this is not a public API, it could become harder in the future to change usage as it becomes more widely used within c-ares.
+
+ Fix By: Brad House (@bradh352)
+
+- [Brad House brought this change]
+
+ Update from 1989 MIT license text to modern MIT license text (#556)
+
+ ares (and thus c-ares) was originally licensed under the 1989 MIT license text:
+ https://fedoraproject.org/wiki/Licensing:MIT#Old_Style_(no_advertising_without_permission)
+
+ This change updates the license to the modern MIT license as recognized here:
+ https://opensource.org/license/mit/
+
+ care has been taken to ensure correct attributions remain for the authors contained within the copyright headers, and all authors with attributions in the headers have been contacted for approval regarding the change. Any authors which were not able to be contacted, the original copyright maintains, luckily that exists in only a single file `ares_parse_caa_reply.c` at this time.
+
+ Please see PR #556 for the documented approvals by each contributor.
+
+ Fix By: Brad House (@bradh352)
+
+- [Brad House brought this change]
+
+ Test Harness: use ares_timeout() to calculate the value to pass to select() these days. (#555)
+
+ The test framework was using 100ms timeout passed to select(), and not using ares_timeout() to calculate the actual recommended value based on the queries in queue. Using ares_timeout() tests the functionality of ares_timeout() itself and will provide more responsive results.
+
+ Fix By: Brad House (@bradh352)
+
+- [Brad House brought this change]
+
+ Fix for TCP back to back queries (#552)
+
+ As per #266, TCP queries are basically broken. If we get a partial reply, things just don't work, but unlike UDP, TCP may get fragmented and we need to properly handle that.
+
+ I've started creating a basic parser/buffer framework for c-ares for memory safety reasons, but it also helps for things like this where we shouldn't be manually tracking positions and fetching only a couple of bytes at a time from a socket. This parser/buffer will be expanded and used more in the future.
+
+ This also resolves #206 by allowing NULL to be specified for some socket callbacks so they will auto-route to the built-in c-ares functions.
+
+ Fixes: #206, #266
+ Fix By: Brad House (@bradh352)
+
+- [Brad House brought this change]
+
+ remove acountry from built tools as nerd.dk is gone (#554)
+
+ The acountry utility required a third party DNSBL service from nerd.dk in order to operate. That service has been offline for about a year and there is no other comparable service offering. We are keeping the code in the repository as an example, but no longer building it.
+
+ Fixes: #537
+ Fix By: Brad House (@bradh352)
+
+- [Brad House brought this change]
+
+ Don't requeue any queries for getaddrinfo() during destruction. (#553)
+
+ During ares_destroy(), any outstanding queries are terminated, however ares_getaddrinfo() had an ordering issue with status codes which in some circumstances could lead to a new query being enqueued rather than honoring the termination.
+
+ Fixes #532
+ Fix By: @Chilledheart and Brad House (@bradh352)
+
+- [Brad House brought this change]
+
+ ares_getaddrinfo(): Fail faster on AF_UNSPEC if we've already received one address class (#551)
+
+ As per #541, when using AF_UNSPEC with ares_getaddrinfo() (and in turn with ares_gethostbynam()) if we receive a successful response for one address class, we should not allow the other address class to continue on with retries, just return the address class we have.
+
+ This will limit the overall query time to whatever timeout remains for the pending query for the other address class, it will not, however, terminate the other query as it may still prove to be successful (possibly coming in less than a millisecond later) and we'd want that result still. It just turns off additional error processing to get the result back quicker.
+
+ Fixes Bug: #541
+ Fix By: Brad House (@bradh352)
+
+- [Sam Morris brought this change]
+
+ Avoid producing an ill-formed result when qualifying a name with the root domain (#546)
+
+ This prevents the result of qualifying "name" with "." being "name.." which is ill-formed.
+
+ Fixes Bug: #545
+ Fix By: Sam Morris (@yrro)
+
+- [Brad House brought this change]
+
+ Configuration option to limit number of UDP queries per ephemeral port (#549)
+
+ Add a new ARES_OPT_UDP_MAX_QUERIES option with udp_max_queries parameter that can be passed to ares_init_options(). This value defaults to 0 (unlimited) to maintain existing compatibility, any positive number will cause new UDP ephemeral ports to be created once the threshold is reached, we'll call these 'connections' even though its technically wrong for UDP.
+
+ Implementation Details:
+ * Each server entry in a channel now has a linked-list of connections/ports for udp and tcp. The first connection in the list is the one most likely to be eligible to accept new queries.
+ * Queries are now tracked by connection rather than by server.
+ * Every time a query is detached from a connection, the connection that it was attached to will be checked to see if it needs to be cleaned up.
+ * Insertion, lookup, and searching for connections has been implemented as O(1) complexity so the number of connections will not impact performance.
+ * Remove is_broken from the server, it appears it would be set and immediately unset, so must have been invalidated via a prior patch. A future patch should probably track consecutive server errors and de-prioritize such servers. The code right now will always try servers in the order of configuration, so a bad server in the list will always be tried and may rely on timeout logic to try the next.
+ * Various other cleanups to remove code duplication and for clarification.
+
+ Fixes Bug: #444
+ Fix By: Brad House (@bradh352)
+
+- [Brad House brought this change]
+
+ its not 1991 anymore, lower default timeout and retry count (#542)
+
+ A lot of time has passed since the original timeouts and retry counts were chosen. We have on and off issues reported due to this. Even on geostationary satellite links, latency is worst case around 1.5s. This PR changes the per-server timeout to 2s and the retry count lowered from 4 to 3.
+
+ Fix By: Brad House (@bradh352)
+
+- [Brad House brought this change]
+
+ Modernization: Implement base data-structures and replace usage (#540)
+
+ c-ares currently lacks modern data structures that can make coding easier and more efficient. This PR implements a new linked list, skip list (sorted linked list), and hashtable implementation that are easy to use and hard to misuse. Though these implementations use more memory allocations than the prior implementation, the ability to more rapidly iterate on the codebase is a bigger win than any marginal performance difference (which is unlikely to be visible, modern systems are much more powerful than when c-ares was initially created).
+
+ The data structure implementation favors readability and audit-ability over performance, however using the algorithmically correct data type for the purpose should offset any perceived losses.
+
+ The primary motivation for this PR is to facilitate future implementation for Issues #444, #135, #458, and possibly #301
+
+ A couple additional notes:
+
+ The ares_timeout() function is now O(1) complexity instead of O(n) due to the use of a skiplist.
+ Some obscure bugs were uncovered which were actually being incorrectly validated in the test cases. These have been addressed in this PR but are not explicitly discussed.
+ Fixed some dead code warnings in ares_rand for systems that don't need rc4
+
+ Fix By: Brad House (@bradh352)
+
+- [Jérôme Duval brought this change]
+
+ fix missing prefix for CMake generated libcares.pc (#530)
+
+ 'pkg-config grpc --cflags' complains with:
+ Variable 'prefix' not defined in libcares.pc
+
+ Fix By: Jérôme Duval (@korli)
+
+bradh352 (11 Jul 2023)
+- windows get_DNS_Windows port fix for ipv6
+
+- windows get_DNS_Windows port is in network byte order
+
+- backoff to debian 11 due to coverage check failure
+
+- extend on PR #534, windows should also honor a port
+
+GitHub (11 Jul 2023)
+- [Brad House brought this change]
+
+ Support configuration of DNS server ports (#534)
+
+ As per https://man.openbsd.org/OpenBSD-5.1/resolv.conf.5 we should
+ support bracketed syntax for resolv.conf entries to contain an optional
+ port number.
+
+ We also need to utilize this format for configuration of MacOS
+ DNS servers as seen when using the Viscosity OpenVPN client, where
+ it starts a private DNS server listening on localhost on a non-standard
+ port.
+
+ Fix By: Brad House (@bradh352)
+
+Daniel Stenberg (9 Jun 2023)
+- provide SPDX identifiers and a REUSE CI job to verify
+
+ All files have their licence and copyright information clearly
+ identifiable. If not in the file header, they are set separately in
+ .reuse/dep5.
+
+ All used license texts are provided in LICENSES/
+
+GitHub (30 May 2023)
+- [Alexey A Tikhonov brought this change]
+
+ Remove unreachable code as reported by Coverity (#527)
+
+ Coverity reported some code as unreachable. A manual inspection confirmed the reports.
+
+ Fix By: Alexey A Tikhonov (@alexey-tikhonov)
+
+- [Ben Noordhuis brought this change]
+
+ rand: add support for getrandom() (#526)
+
+ glibc provides arc4random_buf() but musl does not and /dev/urandom is
+ not always available.
+
+- [Tim Wojtulewicz brought this change]
+
+ Replace uses of sprintf with snprintf (#525)
+
+ sprintf isn't safe even if you think you are using it right. Switch to snprintf().
+
+ Fix By: Tim Wojtulewicz (@timwoj)
+
+bradh352 (23 May 2023)
+- update version and release procedure
+
+GitHub (22 May 2023)
+- [Douglas R. Reno brought this change]
+
+ INSTALL.md: Add Watcom instructions and update Windows documentation URLs (#524)
+
+ This commit adds instructions on how to use the WATCOM compiler to build c-ares. This was just tested on c-ares-1.19.1 and works well.
+
+ While going through the links for the C Runtime documentation for Windows systems, I discovered that all three of the KB articles that were linked are now nonexistent. This commit replaces KB94248 with the current replacement available on Microsoft's website, which also makes the other two KB articles obsolete.
+
+ Fix By: Douglas R. Reno (@renodr)
+
+Version 1.19.1 (22 May 2023)
+
+bradh352 (22 May 2023)
+- Makefile.inc Windows requires tabs not spaces for nmake
+
+GitHub (22 May 2023)
+- [Daniel Stenberg brought this change]
+
+ ares_expand_name: fix compiler warnings (#522)
+
+ Fix some compiler warnings (not introduced in this release)
+
+ Fix By: Daniel Stenberg (@bagder)
+
+bradh352 (22 May 2023)
+- windows MSVC compiler fix on 32bit
+
+- update security advisory links
+
+- minor CI issues fixes for imported inet_net_pton
+
+- ares_rand static analysis fixes from CI
+
+- windows build fix
+
+- security release notes
+
+GitHub (22 May 2023)
+- [Brad House brought this change]
+
+ Merge pull request from GHSA-9g78-jv2r-p7vc
+
+- [Brad House brought this change]
+
+ Merge pull request from GHSA-x6mf-cxr9-8q6v
+
+ * Merged latest OpenBSD changes for inet_net_pton_ipv6() into c-ares.
+ * Always use our own IP conversion functions now, do not delegate to OS
+ so we can have consistency in testing and fuzzing.
+ * Removed bogus test cases that never should have passed.
+ * Add new test case for crash bug found.
+
+ Fix By: Brad House (@bradh352)
+
+- [Brad House brought this change]
+
+ Merge pull request from GHSA-8r8p-23f3-64c2
+
+ * segment random number generation into own file
+
+ * abstract random code to make it more modular so we can have multiple backends
+
+ * rand: add support for arc4random_buf() and also direct CARES_RANDOM_FILE reading
+
+ * autotools: fix detection of arc4random_buf
+
+ * rework initial rc4 seed for PRNG as last fallback
+
+ * rc4: more proper implementation, simplified for clarity
+
+ * clarifications
+
+bradh352 (20 May 2023)
+- add public release note information
+
+- bump version to 1.19.1
+
+GitHub (6 May 2023)
+- [Gregor Jasny brought this change]
+
+ test: fix warning about uninitialized memory (#515)
+
+ fix warning in tests
+
+ Fix By: Gregor Jasny (@gjasny)
+
+- [lifenjoiner brought this change]
+
+ Turn off IPV6_V6ONLY on Windows if it is supported (#520)
+
+ Turn off IPV6_V6ONLY on Windows if it is supported, support for IPv4-mapped IPv6 addresses.
+
+ IPV6_V6ONLY refs:
+ https://en.wikipedia.org/wiki/IPv6#IPv4-mapped_IPv6_addresses
+ https://github.com/golang/go/blob/master/src/net/ipsock_posix.go
+ https://en.wikipedia.org/wiki/Unix-like
+ off:
+ https://www.kernel.org/doc/html/latest/networking/ip-sysctl.html#proc-sys-net-ipv6-variables
+ https://man.netbsd.org/inet6.4
+ https://man.freebsd.org/cgi/man.cgi?query=inet6
+ https://github.com/apple-oss-distributions/xnu/blob/main/bsd/man/man4/inet6.4
+ on:
+ https://learn.microsoft.com/en-us/windows/win32/winsock/ipproto-ipv6-socket-options
+ acts like off, but returns 1 and dummy setting:
+ https://man.dragonflybsd.org/?command=inet6
+ https://man.dragonflybsd.org/?command=ip6
+ unsupported and read-only returns 1:
+ https://man.openbsd.org/inet6.4
+
+ default value refs:
+ https://datatracker.ietf.org/doc/html/rfc3493#section-5.3
+ https://www.kernel.org/doc/html/latest/networking/ip-sysctl.html#proc-sys-net-ipv6-variables
+
+- [Brad House brought this change]
+
+ Merge pull request from GHSA-54xr-f67r-4pc4
+
+ * CARES_RANDOM_FILE should always default to /dev/urandom
+
+ During cross-compilation, CARES_RANDOM_FILE may not be able to be appropriately
+ detected, therefore we should always set it to /dev/urandom and allow the
+ entity requesting compilation override the value. The code does appropriately
+ fall back if CARES_RANDOM_FILE cannot be opened.
+
+ * use set not option
+
+bradh352 (18 Mar 2023)
+- ares_getaddrinfo using service of "0" should be allowed
+
+ As per #517 glibc allows a service/servname of "0" to be treated the
+ same as if NULL was provided. Also, add a sanity check to ensure
+ the port number is in range instead of a blind cast.
+
+ Fixes: #517
+ Fix By: Brad House (@bradh352)
+
+GitHub (10 Feb 2023)
+- [Nikolaos Chatzikonstantinou brought this change]
+
+ fix memory leak in ares_send (#511)
+
+ When the condition channel->nservers < 1 holds, the function returns
+ prematurely, without deallocating query->tcpbuf. We rearrange the
+ check to be done prior to the allocations, avoiding the memory
+ leak. In this way, we also avoid unnecessary allocations if
+ channel->nservers < 1 holds.
+
+ Fix By: Nikolaos Chatzikonstantinou (@createyourpersonalaccount)
+
+- [Nikolaos Chatzikonstantinou brought this change]
+
+ change comment style to old-style (#513)
+
+ Following the README.md guidelines,
+
+ "Comments must be written in the old-style"
+
+ the comment is changed to the old style.
+
+ Fix By: Nikolaos Chatzikonstantinou (@createyourpersonalaccount)
+
+- [Nikolaos Chatzikonstantinou brought this change]
+
+ use strncasecmp in ares__strsplit (#512)
+
+ strncasecmp on platforms that don't already have it is already #define'd to a private implementation. There is no need to have OS-specific logic. Also removes ares__strsplit.h as a header as ares_private.h already includes it.
+
+ Fix By: Nikolaos Chatzikonstantinou (@createyourpersonalaccount)
+
+- [Yijie Ma brought this change]
+
+ Fix a typo in ares_init_options.3 (#510)
+
+ that -> than
+
+ Fix By: Yijie Ma (@yijiem)
+
+- [Douglas R. Reno brought this change]
+
+ Watcom Portability Improvements (#509)
+
+ - Modify the Watcom Makefile for the source code reorganization (#352)
+ - Add *.map files into .gitignore
+ - Fix build errors with Watcom's builtin Windows SDK (which is rather
+ outdated). It's smart enough to understand Windows Vista, but doesn't
+ have PMIB_UNICASTIPADDRESS_TABLE or MIB_IPFORWARD_ROW2.
+
+ It may be possible to use a different Windows SDK with the Watcom
+ compiler, such as the most recent Windows 10 SDK. Alternatively the SDK
+ in OpenWatcom 2.0 (which is in development) should fix this.
+
+ I have no problems testing this Makefile prior to releases, just give me
+ a ping.
+
+ Tested with Windows Vista, Windows 7, and Windows 10 using 'adig',
+ 'acountry', and 'ahost'. This also seems to work on Windows XP, though
+ this is likely due to the compiler in use.
+
+ Fix By: Douglas R. Reno (@renodr)
+ Fixes Bug: #352
+
+- [Jay Freeman (saurik) brought this change]
+
+ ignore aminclude_static.am, as generated by AX_AM_MACROS_STATIC (#508)
+
+ Fix By: Jay Freeman (@saurik)
+
+- [Jay Freeman (saurik) brought this change]
+
+ sync ax_pthread.m4 with upstream (#507)
+
+ The version in the repository is many years old so this PR simply pulls in the latest
+ available revision from:
+ http://git.savannah.gnu.org/gitweb/?p=autoconf-archive.git;a=tree;f=m4
+
+ Fix By: Jay Freeman (@saurik)
+
+- [Chilledheart brought this change]
+
+ Windows: Invalid stack variable out of scope for HOSTS file path (#502)
+
+ In some conditions Windows might try to use a stack address that has gone out of scope when determining where to read the hosts data from for file lookups.
+
+ Fix By: @Chilledheart
+
+- [Brad House brought this change]
+
+ sync ax_cxx_compile_stdcxx_11.m4 with upstream (#505)
+
+ It was reported that ax_cxx_compile_stdcxx_11.m4 was not compatible with uclibc.
+ The version in the repository is many years old so this PR simply pulls in the latest
+ available revision from:
+ http://git.savannah.gnu.org/gitweb/?p=autoconf-archive.git;a=tree;f=m4
+
+ Fixes Bug: #504
+ Fix By: Brad House (@bradh352)
+
+Version 1.19.0 (18 Jan 2023)
+
+bradh352 (18 Jan 2023)
+- Prep for 1.19.0 release
+
+- Fix inverted logic in 25523e2
+
+ Fix .localhost. handling in prior commit
+
+ Fix By: Brad House (@bradh352)
+
+- RFC6761 localhost definition includes subdomains
+
+ RFC6761 6.3 states:
+ The domain "localhost." and any names falling within ".localhost."
+
+ We were only honoring "localhost".
+
+ Fixes: #477
+ Fix By: Brad House (@bradh352)
+
+- docs: ARES_OPT_UDP_PORT and ARES_OPT_TCP_PORT docs wrong byte order
+
+ As per #487, documentation states the port should be in network byte
+ order, but we can see from the test cases using MockServers on
+ different ports that this is not the case, it is definitely in host
+ byte order.
+
+ Fix By: Brad House (@bradh352)
+
+GitHub (18 Jan 2023)
+- [hopper-vul brought this change]
+
+ Add str len check in config_sortlist to avoid stack overflow (#497)
+
+ In ares_set_sortlist, it calls config_sortlist(..., sortstr) to parse
+ the input str and initialize a sortlist configuration.
+
+ However, ares_set_sortlist has not any checks about the validity of the input str.
+ It is very easy to create an arbitrary length stack overflow with the unchecked
+ `memcpy(ipbuf, str, q-str);` and `memcpy(ipbufpfx, str, q-str);`
+ statements in the config_sortlist call, which could potentially cause severe
+ security impact in practical programs.
+
+ This commit add necessary check for `ipbuf` and `ipbufpfx` which avoid the
+ potential stack overflows.
+
+ fixes #496
+
+ Fix By: @hopper-vul
+
+bradh352 (18 Jan 2023)
+- Fix build due to str-split sed gone wrong
+
+ Fix By: Brad House (@bradh352)
+
+- cirrus-ci: switch to scan-build-py for MacOS
+
+ MacOS seems to work better with scan-build-py
+
+ Fix By: Brad House (@bradh352)
+
+- ares_strsplit* -> ares__strsplit* to comply with internal function naming
+
+ Inspired by #495, but was missing test cases and would failed to build.
+
+ Fix By: Brad House (@bradh352), Daniel Stenberg (@bagder)
+
+- Cirrus-CI: MacOS Homebrew has changed from /usr/local/opt to /opt/homebrew
+
+ Fix paths for homebrew.
+
+ Fix By: Brad House (@bradh352)
+
+- cirrus-ci: iOS build needs to use ARM MacOS image
+
+ CirrusCI removed Intel-based MacOS images. Need to switch
+ iOS builds to use new ARM images as well.
+
+ Fix By: Brad House (@bradh352)
+
+- cirrus-ci: new MacOS image
+
+ Cirrus-CI has recently EOL'd Intel MacOS VMs, switch to the latest
+ ARM-based image.
+
+ Fix By: Brad House (@bradh352)
+
+- acountry was passing stack variable to callback
+
+ Recent ASAN versions picked up that acountry was passing stack
+ variables to ares_gethostbyname() then leaving the stack context.
+ We will now allocate a buffer for this.
+
+ Fix By: Brad House (@bradh352)
+
+GitHub (13 Dec 2022)
+- [Daniel Stenberg brought this change]
+
+ docs: reformat/cleanup man pages SYNOPSIS sections (#494)
+
+ To make them render "nicer" in both terminals and on the website.
+
+ - Removes the bold
+ - Removes .PP lines
+ - Indents them more like proper code style
+
+ Fix By: Daniel Stenberg (@bagder)
+
+- [Nikolaos Chatzikonstantinou brought this change]
+
+ bug fix: new ares_strsplit (#492)
+
+ * add ares_strsplit unit test
+
+ The test reveals a bug in the implementation of ares_strsplit when the
+ make_set parameter is set to 1, as distinct domains are confused for
+ equal:
+
+ out = ares_strsplit("example.com, example.co", ", ", 1, &n);
+
+ evaluates to n = 1 with out = { "example.com" }.
+
+ * bugfix and cleanup of ares_strsplit
+
+ The purpose of ares_strsplit in c-ares is to split a comma-delimited
+ string of unique (up to letter case) domains. However, because the
+ terminating NUL byte was not checked in the substrings when comparing
+ for uniqueness, the function would sometimes drop domains it should
+ not. For example,
+
+ ares_strsplit("example.com, example.co", ",")
+
+ would only result in a single domain "example.com".
+
+ Aside from this bugfix, the following cleanup is performed:
+
+ 1. The tokenization now happens with the help of strcspn instead of the
+ custom function is_delim.
+ 2. The function list_contains has been inlined.
+ 3. The interface of ares_strsplit has been simplified by removing the
+ parameter make_set since in practice it was always 1.
+ 4. There are fewer passes over the input string.
+ 5. We resize the table using realloc() down to its minimum size.
+ 6. The docstring of ares_strsplit is updated and also a couple typos
+ are fixed.
+
+ There occurs a single use of ares_strsplit and since the make_set
+ parameter has been removed, the call in ares_init.c is modified
+ accordingly. The unit test for ares_strsplit is also updated.
+
+ Fix By: Nikolaos Chatzikonstantinou (@createyourpersonalaccount)
+
+bradh352 (23 Oct 2022)
+- CirrusCI: update freebsd image
+
+ Old FreeBSD image for CirrusCI has issues with newer symbols, update to later one.
+
+ Fix By: Brad House (@bradh352)
+
+GitHub (23 Oct 2022)
+- [Stephen Sachs brought this change]
+
+ Fix Intel compiler deprecated options (#485)
+
+ Options `-we ###` and `-wd ###` should not include a whitespace. They are also deprecated and `-diag-error` and `-diag-disable` are their replacements.
+
+ Intel compiler 2021.6 is not able to be used in configure without the proposed patch.
+
+ Fix By: Stephen Sachs (@stephenmsachs)
+
+- [Jonathan Ringer brought this change]
+
+ Allow for CMake to use absolute install paths (#486)
+
+ Generated libcares.pc could have bad paths when using absolute paths.
+
+ Fix By: Jonathan Ringer (@jonringer)
+
+- [Thomas Dreibholz brought this change]
+
+ Fix for issue #488: ensure that the number of iovec entries does not exceed system limits. (#489)
+
+ c-ares could try to exceed maximum number of iovec entries supported by system.
+
+ Fix By: Thomas Dreibholz (@dreibh)
+
+- [bsergean brought this change]
+
+ Add include guards to ares_data.h (#491)
+
+ All the other header files in the src/lib folder do have an include guard so it look like an overthought.
+
+ Fix By: @bsergean
+
+- [Brad Spencer brought this change]
+
+ Fix typo in docs for ares_process_fd (#490)
+
+ A single letter was missing
+
+ Fix By: Brad Spencer (@b-spencer)
+
+- [lifenjoiner brought this change]
+
+ tools: refine help (#481)
+
+ fix invalid help options and documentation typos
+
+ Fix By: @lifenjoiner
+
+- [lifenjoiner brought this change]
+
+ Git: ignore CMake temporary files (#480)
+
+ exclude more files from git
+
+ Fix By: @lifenjoiner
+
+- [lifenjoiner brought this change]
+
+ adig: fix `-T` option (#479)
+
+ Helper was missing flag to enable TCP mode of operation.
+
+ Fix By: @lifenjoiner
+
+- [Frank brought this change]
+
+ Add vcpkg installation instructions (#478)
+
+ Update to include vcpkg installation instructions
+
+ Fix By: @FrankXie05
+
+- [marc-groundctl brought this change]
+
+ Convert total timeout to per-query (#467)
+
+ On Apple platforms, libresolv reports the total timeout in retrans, not the per-query time. This patch undoes that math to get the per-query time, which is what c-ares expects. This is not perfect because libresolv is inconsistent on whether the timeout is multiplied by retry or retry+1, but I don't see any way to distinguish these cases.
+
+ Fix By: Marc Aldorasi (@marc-groundctl)
+
+- [marc-groundctl brought this change]
+
+ Don't include version info in the static library (#468)
+
+ The static library should not contain version info, since it would be linked into an executable or dll with its own version info.
+
+ Fix By: @marc-groundctl
+
+- [Ridge Kennedy brought this change]
+
+ Fix ares_getaddrinfo() numerical address fast path with AF_UNSPEC (#469)
+
+ The conversion of numeric IPv4 addresses in fake_addrinfo() is broken when
+ the family is AF_UNSPEC. The initial call to ares_inet_pton with AF_INET
+ will succeed, but the subsequent call using AF_INET6 will fail. This results
+ in the fake_addrinfo() fast path failing, and ares_getaddrinfo() making a
+ query when none should be required.
+
+ Resolve this by only attempting the call to ares_inet_pton with AF_INET6
+ if the initial call with AF_INET was unsuccessful.
+
+ Fix By: Ridge Kennedy (@ridgek)
+
+- [Manish Mehra brought this change]
+
+ Configurable hosts path for file_lookup (#465)
+
+ This changeset adds support for configurable hosts file
+ ARES_OPT_HOSTS_FILE (similar to ARES_OPT_RESOLVCONF).
+
+ Co-authored-by: Manish Mehra (@mmehra)
+
+bradh352 (27 Apr 2022)
+- CMake: Windows DLLs lack version information
+
+ The cares.rc was not included in the build for CMake. Conditionally
+ add it when building for Windows.
+
+ Fix By: Brad House (@bradh352)
+ Fixes Bug: #460
+
+GitHub (27 Apr 2022)
+- [Kai Pastor brought this change]
+
+ CMake: Guard target creation in exported config (#464)
+
+ User projects may call 'find_package(c-ares)' multiple times (e.g.
+ via dependencies), but targets must be created only once.
+ Shared and static target must be treated independently.
+
+ Fix By: Kai Pastor (@dg0yt)
+
+bradh352 (27 Apr 2022)
+- Honor valid DNS result even if other class returned an error
+
+ When using ares_getaddrinfo() with PF_UNSPEC, if a DNS server returned
+ good data on an A record, followed by bad data on an AAAA record, the
+ good record would be thrown away and an error returned.
+
+ If we got a good response from one of the two queries, regardless of
+ the order returned, we should honor that.
+
+ Fix By: Dmitry Karpov (dkarpov@roku.com)
+ Signed Off By: Brad House (@bradh352)
+
+GitHub (2 Apr 2022)
+- [Sam James brought this change]
+
+ configure.ac: fix STDC_HEADERS typo (#459)
+
+ There is no autoconf macro called STDC_HEADERS. AC_HEADER_STDC however does
+ exist and it defines the STDC_HEADERS macro for use.
+
+ Not clear that STDC_HEADERS from its use in the repo is needed but
+ would rather not meddle with it for now.
+
+ Fixes an annoying warning on `./configure`:
+ ```
+ /var/tmp/portage/net-dns/c-ares-1.18.1/work/c-ares-1.18.1/configure: 24546: STDC_HEADERS: not found
+ ```
+
+ Signed-off-by: Sam James <sam@gentoo.org>
+
+bradh352 (2 Mar 2022)
+- Asterisks should be allowed in host validation as CNAMEs may reference wildcard domains
+
+ CloudFlare appears to use this logic in CNAMEs as per
+ https://github.com/nodejs/node/issues/42171
+
+ Fixes: #457
+ Fix By: Brad House (@bradh352)
+
+- Don't return on file lookup failure, set status
+
+ When resolving a host via /etc/hosts, don't return with a predefined
+ error as there may be other tries.
+
+ Fix By: Brad House (@bradh352)
+
+- 'localhost' special treatment enhancement
+
+ Since localhost is special-cased, any errors should be ignored when
+ reading /etc/hosts as otherwise we could return an error if there
+ were for instance an invalidly formatted /etc/hosts or if /etc/hosts
+ had a permissions error while reading.
+
+ This exact behavior appears to have been seen on OS/400 PASE
+ environments which allows AIX binares to run.
+
+ Fix By: Brad House (@bradh352)
+
+- If chain building c-ares as part of another project, detect of res_servicename could fail (#451)
+
+ If libresolv is already included with the build, c-ares wouldn't properly detect its use.
+
+ May fix: #451
+ Fix by: Brad House (@bradh352)
+
+- no analyze capability on ios
+
+- attempt to use scan-build on ios
+
+- disable tests on ios
+
+- fix switch statement
+
+- code coverage had gotten disabled
+
+- looks like shell expansion doesn't work with cirrus-ci, lets do it another way
+
+- attempt to autobuild for iOS
+
+GitHub (8 Dec 2021)
+- [Brad House brought this change]
+
+ Windows: rework/simplify initialization code, drop long EOL systems (#445)
+
+ There was a lot of windows initialization code specific to the era that predates Windows Vista such as reading DNS configuration from the registry, and dynamically loading libraries to get access to functions that didn't exist in XP or earlier releases.
+
+ Vista was released in January 2007, and was EOL'd in 2017, and support for Vista is still maintained with this patch set.
+
+ XP was EOL'd in Apr 8 2014.
+
+ I believe the last OS based on something earlier than Vista was POSReady 2009, as it was XP based for some reason, and that was EOL'd in January 2019. Considering any POS system falls under the PCI-DSS rules, they aren't allow to run POSReady 2009 any more so there is no reason to try to continue supporting such systems.
+
+ We have also targeted with our build system Vista support for the last few years, and while developers could change the target, we haven't had any reports that they have.
+
+bradh352 (9 Nov 2021)
+- Fix memory leak in reading /etc/hosts
+
+ When an /etc/hosts lookup is performed, but fails with ENOTFOUND, and
+ a valid RFC6761 Section 6.3 fallback is performed, it could overwrite
+ variables that were already set and therefore leave the pointers
+ dangling, never to be cleaned up.
+
+ Clean up explicitly on ENOTFOUND when returning from the file parser.
+
+ Fixes: #439
+ Fix By: Brad House (@bradh352)
+
+GitHub (2 Nov 2021)
+- [Bobby Reynolds brought this change]
+
+ Fix cross-compilation from Windows to Linux due to CPACK logic (#436)
+
+ When determining value for CPACK_PACKAGE_ARCHITECTURE, prefer to use
+ value from CMAKE_SYSTEM_PROCESSOR before falling back to uname output.
+
+ Additionally, if building from a Windows host, emit a fatal error
+ instead of attempting to call uname.
+
+ Fix By: Bobby Reynolds (@reynoldsbd)
+
+bradh352 (1 Nov 2021)
+- fix coveralls link
+
+- coveralls needs token
+
+- coveralls appears to require git
+
+- fix a couple of coveralls vars
+
+- more coveralls fixes
+
+- add code coverage libs to LDADD instead of _LIBS
+
+- make verbose
+
+- try to fix code coverage building
+
+- need -y for install
+
+- try to fix asan/ubsan/lsan when built with clang. try to support code coverage properly.
+
+- try another path
+
+- fix pip
+
+- attempt to enable some other build types that travis supported
+
Version 1.18.1 (26 Oct 2021)
bradh352 (26 Oct 2021)
@@ -4588,534 +5762,3 @@ Yang Tse (3 Dec 2010)
- configure: undo using autobuilds to temporarily verify strict aliasing warnings.
- fix compiler warning: rounding, sign extension, or loss of accuracy may result
-
-Daniel Stenberg (2 Dec 2010)
-- [Ben Noordhuis brought this change]
-
- ares_parse_a_reply: fix CNAME response parsing
-
- Reply to a CNAME query doesn't contain addresses, causing
- ares_parse_a_reply() to bail out with ARES_ENODATA
-
- Bug: http://groups.google.com/group/nodejs/browse_thread/thread/a1268c9ea5e9ad9b
-
-Yang Tse (1 Dec 2010)
-- fix compiler warning: conversion may lose significant bits
-
-- atoi: remove atoi usage
-
-- ares_init: fix compiler warning: conversion may lose significant bits
-
-- configure: fix autoconf warning
-
-- inet_pton: fix compiler warning
-
-- configure: use autobuilds to temporarily verify strict aliasing warnings.
-
- Temporarily, When cross-compiling with gcc 3.0 or later, enable strict aliasing
- rules and warnings. Given that cross-compiled targets autobuilds do not run the
- test-suite, there is no risk of running code that violates strict aliasing rules
-
-- ares_getnameinfo: Partially revert commit 85520d66e0ac7ac73411bc25e98769a88b2f
-
- Upon socket address family and length validation failure return ARES_ENOTIMP
- in callback again, this is the error code documented in man page and used
- mostly all over the library.
-
-- ares_getnameinfo: Validate socket address family and length.
-
- Validate socket address family and that the socket address length is appropriate
- for the specified family. Failure is reported with ARES_EBADFAMILY in callback.
-
-- ares_getnameinfo: fix two compiler warnings
-
-- Added another VS10 version string
-
-- Fix GCC 4 compiler warning 'dereferencing type-punned pointer might break strict-aliasing rules'.
-
-- Revert commit 494274e653936335c255a47599970de3df21e7c4
-
-- configure: fix autoconf 2.68 warning: no AC_LANG_SOURCE call detected in body
-
-- Fix compiler warning: array subscript has type 'char'
-
-- Fix GCC 4 compiler warning 'dereferencing type-punned pointer might break strict-aliasing rules'.
-
-- Revert following commits:
- 07bc7ea79509bcc9ef6e09151e81766ed00d3392
- 3392a50ea3f8573ea4b7a9d82b9833dab60cb0e9
- 9912637d32c9987719a1ea12db591aee2941891c
-
- The purpose of the whole patch was to silence a compiler warning triggered
- with GCC 4 on file ares_process.c The specific compiler warning was
- 'dereferencing type-punned pointer might break strict-aliasing rules'.
-
- A simpler patch will follow to equally silence the warning.
-
-- ares_options: reorder header inclusions to make inclusion of
- ares_private.h the last included one again.
-
-Daniel Stenberg (12 Nov 2010)
-- [Patrik Thunstrom brought this change]
-
- adig: fix NAPTR parsing
-
- I ran across a small "issue" in your adig example.
-
- It is simply the last part of the NAPTR record, the replacement element,
- which is not a string, as currently handled in adig, but a domain name.
-
-- ares_save_options: assignments instead of memcpy
-
-- init_by_options: don't copy an empty sortlist
-
- If there aren't any sort items to copy, don't bother. Without this
- little precaution it would do a malloc(0) which causes undefined
- behaviors and is frowned upon by curl's memdebug-system.
-
-Guenter Knauf (3 Oct 2010)
-- Minor Watcom makefile tweaks.
-
-Daniel Stenberg (30 Sep 2010)
-- [Mike Crowe brought this change]
-
- Fix lookup with HOSTALIASES set.
-
- ares__read_line returns ARES_EOF when it reaches the end of the
- file. This will happen every time when reading to the end of the
- HOSTALIASES file. Unfortunately single_domain treats this error as
- being fatal.
-
- Signed-off-by: Mike Crowe <mac@mcrowe.com>
-
-Ben Greear (24 Aug 2010)
-- Add missing break that caused get_ares_servers to fail.
-
- Reported-by: Ning Dong <flintning@163.com>
- Signed-off-by: Ben Greear <greearb@candelatech.com>
-
-Yang Tse (11 Aug 2010)
-- configure: werror related adjustments
-
-Guenter Knauf (8 Aug 2010)
-- Added copyright string to ares_version.h and make use of it in other files.
-
-- Block created ares_build.h for NetWare to avoid usage from other platforms.
-
-- Fix to overwrite default libname.
-
-- Some more Watcom makefile massage ...
-
-- Some more Watcom makefile massage ...
-
-Ben Greear (4 Aug 2010)
-- sock-addr-storage: Detect and deal with lack of .ss_family member.
-
- AIX, at least, does not have sockaddr_storage.ss_family member.
- Detect this in the configure logic and use proper #ifdefs in the
- ares_process logic.
-
- Signed-off-by: Ben Greear <greearb@candelatech.com>
- Tested-by: Tor Arntsen <tor@spacetec.no>
-
-Guenter Knauf (3 Aug 2010)
-- Added Watcom makefile based on libcurl's Makefile.Watcom.
-
-Ben Greear (31 Jul 2010)
-- typo: Fix compile bug for platforms that don't have sockaddr_storage.
-
- Bug was introduced by me in previous commit.
-
- Signed-off-by: Ben Greear <greearb@candelatech.com>
-
-- Fix aliasing warning in gcc 4.4.4 (at least).
-
- Should be no functional change, though the code gets a bit
- ugglier.
-
- Signed-off-by: Ben Greear <greearb@candelatech.com>
-
-Daniel Stenberg (31 Jul 2010)
-- ares_set_servers_csv: use ISDIGIT
-
- The IS*() set of macros are preferred to the regular is*() functions as
- they help us avoid the most common pitfalls.
-
-Ben Greear (30 Jul 2010)
-- cast arg to isdigit to int
-
- Looks like it might silence a warning on Netware build.
-
- Signed-off-by: Ben Greear <greearb@candelatech.com>
-
-- remove all uses of uint32_t
-
- Previous fix forgot a few.
-
- Signed-off-by: Ben Greear <greearb@candelatech.com>
-
-- fix signed v/s unsigned casts warning in ares_gethostbyaddr.c
-
- Signed-off-by: Ben Greear <greearb@candelatech.com>
-
-- local-bind-fixup: Fix inet_pton warning.
-
- Conditionally include <arpa/inet.h> for inet_pton
- headers.
-
- Signed-off-by: Ben Greear <greearb@candelatech.com>
-
-- build: Enable compiling with -Werror.
-
- This helps find compile warnings because they simply break
- the build.
-
- To use:
- ./configure --enable-warnings --enable-werror
-
- Signed-off-by: Ben Greear <greearb@candelatech.com>
-
-- ipv6: Fix some build issues related to the local-bind feature.
-
- Signed-off-by: Ben Greear <greearb@candelatech.com>
-
-Guenter Knauf (29 Jul 2010)
-- Replaced uint32_t with unsigned int to fix broken builds on a couple of platforms.
-
-Daniel Stenberg (18 Jul 2010)
-- [Ben Greear brought this change]
-
- local-bind: Support binding to local interface/IPs
-
- Add 3 new functions to set the local binding for the out-going
- socket connection, and add ares_set_servers_csv() to set a
- list of servers at once as a comma-separated string.
-
- Signed-off-by: Ben Greear <greearb@candelatech.com>
-
-- version: now start on 1.7.4
-
-- [Andrew C. Morrow brought this change]
-
- fix memory leak in ares_getnameinfo
-
-Version 1.7.3 (11 Jun 2010)
-
-Daniel Stenberg (11 Jun 2010)
-- changelogs: updated for 1.7.3
-
-- [BogDan Vatra brought this change]
-
- init: allow c-ares to work on Android OS
-
-- changelog: fill in the 1.7.2 changes
-
-- added another pdf to ignore
-
-Yang Tse (11 Jun 2010)
-- add ares_parse_mx_reply.c to VS dsp file
-
-Daniel Stenberg (10 Jun 2010)
-- tarball: add $(CSOURCES) $(HHEADERS) to EXTRA_DIST
-
- It's not clear to me why we need this, but we apparently may
- otherwise not get all files bundled in the dist tarball.
-
-- version: start working on 1.7.3
-
-Version 1.7.2 (10 Jun 2010)
-
-Daniel Stenberg (10 Jun 2010)
-- RELEASE-NOTES: 1.7.2 details added
-
-- [Jakub Hrozek brought this change]
-
- ares_init: Last, not first instance of domain or search should win
-
-- style: make code less than 80 columns wide
-
-Yang Tse (31 May 2010)
-- [Tor Arntsen brought this change]
-
- improve alternative definition of bool to use enum instead of unsigned char
-
-- fix VS2010 compiler warnings
-
-Daniel Stenberg (18 Apr 2010)
-- [Jérémy Lal brought this change]
-
- added ares_parse_mx_reply
-
-- repair the file mode
-
-- remove all $Id$ lines
-
-- remove all .cvsignore files
-
-- spell fix
-
- reported by Gregor Jasny on the mailing list
-
-- [Peter Pentchev brought this change]
-
- Fix a couple of typos and grammar nits.
-
-- ignore the GPG signature files too
-
-- start the journey towards 1.7.2
-
-- no longer CVS tagging
-
-- ignore generated PDFs
-
-Version 1.7.1 (23 Mar 2010)
-
-Daniel Stenberg (23 Mar 2010)
-- 1.7.1
-
-- made README the primary readme file
-
- ... and did README.cares to contain a historic reason etc.
-
-- s/CVS/git
-
-- git now, not CVS
-
-- ignore lots of generated files
-
-- [Daniel Johnson brought this change]
-
- Fix warnings for clang
-
-Yang Tse (17 Mar 2010)
-- replaced intel compiler option -no-ansi-alias with -fno-strict-aliasing
-
-- update outdated serial number
-
-- fix compiler warning
-
-- watt32 compilation fix
-
-- Added another VS10 version string
-
-- fix line break
-
-- removed usage of 's6_addr', fixing compilation issue triggered with no
- longer using 'in6_addr' but only our 'ares_in6_addr' struct
-
-Daniel Stenberg (5 Mar 2010)
-- Daniel Johnson provided fixes for building with the clang compiler
-
-Yang Tse (5 Mar 2010)
-- Added IPv6 name servers support
-
-Gisle Vanem (5 Mar 2010)
-- Ops!. Readded ares_nowarn.h.
-
-- Added ares_nowarn.c.
-
-Yang Tse (28 Feb 2010)
-- Added SIZEOF_INT and SIZEOF_SHORT definitions for non-configure systems
-
-- Added ares_nowarn.* to VC6 project file
-
-- Added SIZEOF_INT definition
-
-- fix compiler warning
-
-- fix compiler warning
-
-- fix compiler warning
-
-Daniel Stenberg (17 Feb 2010)
-- ares_reinit()
-
- - To allow an app to force a re-read of /etc/resolv.conf etc, pretty much
- like the res_init() resolver function offers
-
-- - Tommie Gannert pointed out a silly bug in ares_process_fd() since it didn't
- check for broken connections like ares_process() did. Based on that, I
- merged the two functions into a single generic one with two front-ends.
-
-Yang Tse (30 Dec 2009)
-- VMS specific preprocessor symbol checking adjustments
-
-- Mention last changes
-
-- - Fix configure_socket() to use ares_socket_t instead of int data type.
-
-- - Where run-time error checks enabling compiler option /GZ was used it is now
- replaced with equivalent /RTCsu for Visual Studio 2003 and newer versions.
-
- - Compiler option /GX is now replaced with equivalent /EHsc for all versions.
-
-- - Ingmar Runge noticed that Windows config-win32.h configuration file
- did not include a definition for HAVE_CLOSESOCKET which resulted in
- function close() being inappropriately used to close sockets.
-
-Daniel Stenberg (30 Nov 2009)
-- start working on 1.7.1
-
-Version 1.7.0 (27 Nov 2009)
-
-Yang Tse (27 Nov 2009)
-- Preserve empty line following last target
-
-- - Larry Lansing fixed ares_parse_srv_reply to properly parse replies
- which might contain non-SRV answers, skipping over potential non-SRV
- ones such as CNAMEs.
-
-- When using icc, compile with -fpic and link with intel dynamic libraries.
-
-- Added 'currently' in italics to insist on transient situation.
-
-- Fix language
-
-- Daniel wants upcoming release to be 1.7.0
-
-- Mention last changes
-
-- - Removed from external interface preprocessor symbol definition for
- CARES_HAVE_ARES_FREE_DATA. Current functionality of ares_free_data()
- makes it unnecessary.
-
-- Added README.msvc
-
-- Changed c-ares naming conventions when using MSVC as described in README.msvc
-
-- - Mention other recent changes
-
-- - Jakub Hrozek renamed addrttl and addr6ttl structs to ares_addrttl and
- ares_addr6ttl in order to prevent name space pollution, along with
- necessary changes to code base and man pages.This change does not break
- ABI, there is no need to recompile existing applications. But existing
- applications using these structs with the old name will need source code
- adjustments when recompiled using c-ares 1.6.1.
-
-- - Jakub Hrozek fixed more function prototypes in man pages to sync them
- with the ones declared in ares.h
-
-- Make configure remove the ares_build.h file included in distribution tarballs.
-
-- Fix macro redefinition.
-
-- Fix name space pollution.
-
-- Allow using different extra import libraries for debug and release builds.
-
-- Add manifest stuff to msvc makefile
-
-- Sync man page with reality
-
-- Add missing external API decoration for ares_set_socket_callback()
-
-- Add ares_free_data() man page.
-
-- - Provide in external interface preprocessor symbol definitions for
- CARES_HAVE_ARES_FREE_DATA as an indication of function availability.
-
-- Remove typecast
-
-- Fix comment
-
-- Add ares_data.c and ares_data.h
-
-- Jakub Hrozek modified ares_parse_srv_reply() and ares_parse_txt_reply() API
- to return a linked lists of results. These were also modified to internally
- use the ares_data memory struct and as such its result must be free'ed with
- ares_free_data().
-
-- Initial support for the generic ares_free_data() function that will allow
- applications to free memory allocated and returned by some c-ares funtions.
-
-- Make usage of calloc()'s arguments consistent with rest of code base
-
-- workaround icc 9.1 optimizer issue
-
-- Add icc fvisibility bug test
-
-- Fix icc 9.0 compiler warning: external definition with no prior declaration
-
-- Fix three var names
-
-- Add check for assert.h header file
-
-- getaddrinfo is fully thread safe on solaris versions which
- implement the function even when h_errno is not a macro.
-
- The h_errno macro test now only done on systems for which there
- is no hard coded knowledge about getaddrinfo's thread safeness.
-
-- Remove files generated on previous buildconf/configure run
-
-- Remove enable-thread / disable-thread configure option. These were only placebo
- options. The library is always built as thread safe as possible on every system.
-
-- Refactor how preprocessor symbol _THREAD_SAFE definition is done.
-
-- Assume that getaddrinfo is thread safe, unless hard coded
- knowledge says the contrary or h_errno is not defined.
-
-- Related with the threadsafe capability of getaddrinfo:
-
- - Constantine Sapuntzakis reported that Darwin 6.0 a.k.a. MAC OS X 10.2
- and newer have a threadsafe getaddrinfo.
-
- - Fix Dragonfly BSD triplet detection.
-
- - In case the hard-coded knowledge says that getaddrinfo is threadsafe,
- an additional check is done to verify that h_errno is also defined.
- If h_errno isn't defined, we finally assume that it isn't threadsafe.
- Jamie Lokier provided the inspiration for this extra check.
-
-- AIX 5.2 and newer have threadsafe getaddrinfo.
-
- Add some comments to better understand what the regex's pretend to achieve.
-
-- HP-UX 11.11 and later have threadsafe getaddrinfo
-
-- Check if getaddrinfo is threadsafe when function check allows it to be used
-
-- Renamed fpGetNetworkParams and fpSystemFunction036 to avoid namespace pollution with static library
-
-- Add kernel32.lib
-
-- Mention last changes
-
-- Reinstate copyright symbol lost in previous commit
-
-- Make some strings different in resource file for debug or release builds
-
-- Ignore more subdirs
-
-- Fix compiler warning: conditional expression is constant
-
-- Sync linker and resource compiler options with Makefile.msvc
-
-- Follow Makefile.msvc subdirectory naming scheme, and sync compiler options
-
-- Updated MSVC makefile that allows building dynamic and static
- c-ares libraries in debug and release flavours.
-
- Additionally each of the three sample programs is built against
- each of the four possible c-ares libraries, generating all this
- a total number of 12 executables and 4 libraries.
-
-- Test for USE_WINSOCK since it is more restrictive than WIN32
-
-- Make header inclusion depend on HAVE_*_H definition
-
-- Remove unneeded preprocessor directives
-
-- Adjust c-ares include paths for memory tracking enabled (--enable-curldebug) builds
-
-- source files used by sample programs
-
-- Renamed c-ares setup.h to ares_setup.h
-
-- Adjust include paths to take in account that currently:
-
- c-ares with --enable-curldebug uses memdebug.h from libcurl's lib subdirectory.
-
- memdebug.h needs access to libcurl's setup.h from libcurl's lib subdirectory
- and also needs access to libcurl's generated curl_config.h
diff --git a/CMakeLists.txt b/CMakeLists.txt
index cc4b590..47c6193 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,4 +1,8 @@
-CMAKE_MINIMUM_REQUIRED (VERSION 3.1.0)
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
+CMAKE_MINIMUM_REQUIRED (VERSION 3.5.0)
+
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/")
INCLUDE (CheckIncludeFiles)
INCLUDE (CheckTypeSize)
@@ -8,10 +12,12 @@ INCLUDE (CheckCSourceCompiles)
INCLUDE (CheckStructHasMember)
INCLUDE (CheckLibraryExists)
-PROJECT (c-ares LANGUAGES C VERSION "1.18.0" )
+PROJECT (c-ares LANGUAGES C VERSION "1.21.0" )
+
+INCLUDE (EnableWarnings)
# Set this version before release
-SET (CARES_VERSION "1.18.1")
+SET (CARES_VERSION "1.21.0")
INCLUDE (GNUInstallDirs) # include this *AFTER* PROJECT(), otherwise paths are wrong.
@@ -26,7 +32,7 @@ INCLUDE (GNUInstallDirs) # include this *AFTER* PROJECT(), otherwise paths are w
# For example, a version of 4:0:2 would generate output such as:
# libname.so -> libname.so.2
# libname.so.2 -> libname.so.2.2.0
-SET (CARES_LIB_VERSIONINFO "7:1:5")
+SET (CARES_LIB_VERSIONINFO "9:2:7")
OPTION (CARES_STATIC "Build as a static library" OFF)
@@ -36,6 +42,9 @@ OPTION (CARES_STATIC_PIC "Build the static library as PIC (position independent)
OPTION (CARES_BUILD_TESTS "Build and run tests" OFF)
OPTION (CARES_BUILD_CONTAINER_TESTS "Build and run container tests (implies CARES_BUILD_TESTS, Linux only)" OFF)
OPTION (CARES_BUILD_TOOLS "Build tools" ON)
+OPTION (CARES_SYMBOL_HIDING "Hide private symbols in shared libraries" OFF)
+SET (CARES_RANDOM_FILE "/dev/urandom" CACHE STRING "Suitable File / Device Path for entropy, such as /dev/urandom")
+
# Tests require static to be enabled on Windows to be able to access otherwise hidden symbols
IF (CARES_BUILD_TESTS AND (NOT CARES_STATIC) AND WIN32)
@@ -66,6 +75,21 @@ IF (MSVC)
ENDIF ()
ENDIF ()
+IF (CARES_SYMBOL_HIDING)
+ IF (CMAKE_VERSION VERSION_LESS 3.12)
+ MESSAGE (FATAL_ERROR "Hiding symbols requires CMake 3.12")
+ ENDIF ()
+ CMAKE_POLICY (SET CMP0063 NEW)
+ SET (CARES_SYMBOL_SCOPE_EXTERN [=[__attribute__ ((visibility("default")))]=])
+ CHECK_C_SOURCE_COMPILES ("
+ ${CARES_SYMBOL_SCOPE_EXTERN} int somefunc() { return 0; }
+ int main() { return somefunc(); }
+ " HAVE_VISIBILITY_ATTRIBUTE)
+ IF (NOT HAVE_VISIBILITY_ATTRIBUTE)
+ MESSAGE (FATAL_ERROR "C compiler does not accept visibility attribute")
+ ENDIF ()
+ENDIF ()
+
# Keep build organized.
SET (CMAKE_RUNTIME_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_BINDIR}")
SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY "${PROJECT_BINARY_DIR}/${CMAKE_INSTALL_LIBDIR}")
@@ -82,9 +106,14 @@ SET (TARGETS_INST_DEST
# Function in Library
# CHECK_LIBRARY_EXISTS can't be used as it will return true if the function
-# is found in a different dependent library.
+# is found in a different required/dependent library.
MACRO (CARES_FUNCTION_IN_LIBRARY func lib var)
+
+ SET (_ORIG_CMAKE_REQUIRED_LIBRARIES "${CMAKE_REQUIRED_LIBRARIES}")
+ SET (CMAKE_REQUIRED_LIBRARIES )
CHECK_FUNCTION_EXISTS ("${func}" "_CARES_FUNC_IN_LIB_GLOBAL_${func}")
+ SET (CMAKE_REQUIRED_LIBRARIES "${_ORIG_CMAKE_REQUIRED_LIBRARIES}")
+
IF ("${_CARES_FUNC_IN_LIB_GLOBAL_${func}}")
SET (${var} FALSE)
ELSE ()
@@ -157,6 +186,7 @@ CARES_FUNCTION_IN_LIBRARY (clock_gettime rt HAVE_LIBRT)
# Look for necessary includes
CHECK_INCLUDE_FILES (sys/types.h HAVE_SYS_TYPES_H)
+CHECK_INCLUDE_FILES (sys/random.h HAVE_SYS_RANDOM_H)
CHECK_INCLUDE_FILES (sys/socket.h HAVE_SYS_SOCKET_H)
CHECK_INCLUDE_FILES (sys/sockio.h HAVE_SYS_SOCKIO_H)
CHECK_INCLUDE_FILES (arpa/inet.h HAVE_ARPA_INET_H)
@@ -274,6 +304,7 @@ CARES_EXTRAINCLUDE_IFSET (HAVE_STDLIB_H stdlib.h)
CARES_EXTRAINCLUDE_IFSET (HAVE_STRING_H string.h)
CARES_EXTRAINCLUDE_IFSET (HAVE_STRINGS_H strings.h)
CARES_EXTRAINCLUDE_IFSET (HAVE_SYS_IOCTL_H sys/ioctl.h)
+CARES_EXTRAINCLUDE_IFSET (HAVE_SYS_RANDOM_H sys/random.h)
CARES_EXTRAINCLUDE_IFSET (HAVE_SYS_SELECT_H sys/select.h)
CARES_EXTRAINCLUDE_IFSET (HAVE_SYS_SOCKET_H sys/socket.h)
CARES_EXTRAINCLUDE_IFSET (HAVE_SYS_SOCKIO_H sys/sockio.h)
@@ -358,6 +389,7 @@ CHECK_SYMBOL_EXISTS (gethostbyaddr "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETHOST
CHECK_SYMBOL_EXISTS (gethostbyname "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETHOSTBYNAME)
CHECK_SYMBOL_EXISTS (gethostname "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETHOSTNAME)
CHECK_SYMBOL_EXISTS (getnameinfo "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETNAMEINFO)
+CHECK_SYMBOL_EXISTS (getrandom "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETRANDOM)
CHECK_SYMBOL_EXISTS (getservbyport_r "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETSERVBYPORT_R)
CHECK_SYMBOL_EXISTS (getservbyname_r "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETSERVBYNAME_R)
CHECK_SYMBOL_EXISTS (gettimeofday "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_GETTIMEOFDAY)
@@ -386,6 +418,8 @@ CHECK_SYMBOL_EXISTS (strncasecmp "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_STRNCAS
CHECK_SYMBOL_EXISTS (strncmpi "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_STRNCMPI)
CHECK_SYMBOL_EXISTS (strnicmp "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_STRNICMP)
CHECK_SYMBOL_EXISTS (writev "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_WRITEV)
+CHECK_SYMBOL_EXISTS (arc4random_buf "${CMAKE_EXTRA_INCLUDE_FILES}" HAVE_ARC4RANDOM_BUF)
+
# On Android, the system headers may define __system_property_get(), but excluded
# from libc. We need to perform a link test instead of a header/symbol test.
@@ -397,10 +431,6 @@ SET (CMAKE_REQUIRED_DEFINITIONS)
SET (CMAKE_REQUIRED_LIBRARIES)
-find_file(CARES_RANDOM_FILE urandom /dev)
-mark_as_advanced(CARES_RANDOM_FILE)
-
-
################################################################################
# recv, recvfrom, send, getnameinfo, gethostname
# ARGUMENTS AND RETURN VALUES
@@ -557,6 +587,9 @@ ENDIF ()
IF (HAVE_SYS_TYPES_H)
SET (CARES_HAVE_SYS_TYPES_H 1)
ENDIF ()
+IF (HAVE_SYS_RANDOM_H)
+ SET (CARES_HAVE_SYS_RANDOM_H 1)
+ENDIF()
IF (HAVE_SYS_SOCKET_H)
SET (CARES_HAVE_SYS_SOCKET_H 1)
ENDIF()
@@ -689,6 +722,12 @@ IF (CARES_INSTALL)
if( ${CMAKE_SYSTEM_NAME} STREQUAL "Linux" )
if ( "${CPACK_PACKAGE_ARCHITECTURE}" STREQUAL "" )
+ set( CPACK_PACKAGE_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}" )
+ endif()
+ if ( "${CPACK_PACKAGE_ARCHITECTURE}" STREQUAL "" )
+ if ( "${CMAKE_HOST_SYSTEM_NAME}" STREQUAL "Windows" )
+ message( FATAL_ERROR "Failed to determine CPACK_PACKAGE_ARCHITECTURE. Is CMAKE_SYSTEM_PROCESSOR set?" )
+ endif()
# Note: the architecture should default to the local architecture, but it
# in fact comes up empty. We call `uname -m` to ask the kernel instead.
EXECUTE_PROCESS( COMMAND uname -m COMMAND tr -d '\n' OUTPUT_VARIABLE CPACK_PACKAGE_ARCHITECTURE )
diff --git a/INSTALL.md b/INSTALL.md
index 1e33ad7..9b2f847 100644
--- a/INSTALL.md
+++ b/INSTALL.md
@@ -291,16 +291,12 @@ As a general rule, building a DLL with static CRT linkage is highly
discouraged, and intermixing CRTs in the same app is something to
avoid at any cost.
-Reading and comprehension of Microsoft Knowledge Base articles
-KB94248 and KB140584 is a must for any Windows developer. Especially
+Reading and comprehension of the following Microsoft Learn article
+is a must for any Windows developer. Especially
important is full understanding if you are not going to follow the
advice given above.
- - [KB94248](http://support.microsoft.com/kb/94248/en-us) - How To Use the C Run-Time
-
- - [KB140584](http://support.microsoft.com/kb/140584/en-us) - How to link with the correct C Run-Time (CRT) library
-
- - [KB190799](http://msdn.microsoft.com/en-us/library/ms235460) - Potential Errors Passing CRT Objects Across DLL Boundaries
+ - [Use the C Run-Time](https://learn.microsoft.com/en-us/troubleshoot/developer/visualstudio/cpp/libraries/use-c-run-time)
If your app is misbehaving in some strange way, or it is suffering
from memory corruption, before asking for further help, please try
@@ -382,6 +378,35 @@ sure that the var `OSTYPE` contains the string 'linux'; set the var
`NDKBASE` to point to the base of your Novell NDK; and then type
`make -f Makefile.netware` from the top source directory;
+VCPKG
+=====
+
+You can build and install c-ares using [vcpkg](https://github.com/Microsoft/vcpkg/) dependency manager:
+
+```sh or powershell
+ git clone https://github.com/Microsoft/vcpkg.git
+ cd vcpkg
+ ./bootstrap-vcpkg.sh
+ ./vcpkg integrate install
+ ./vcpkg install c-ares
+```
+
+The c-ares port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository.
+
+WATCOM
+=====
+
+To build c-ares with OpenWatcom, you need to have at least version 1.9 of OpenWatcom. You can get the latest version from [http://openwatcom.org/ftp/install/](http://openwatcom.org/ftp/install/). Install the version that corresponds to your current host platform.
+
+After installing OpenWatcom, open a new command prompt and execute the following commands:
+
+```
+ cd \path\to\cmake\source
+ buildconf.bat
+ wmake -u -f Makefile.Watcom
+```
+
+After running wmake, you should get adig.exe, ahost.exe, and the static and dynamic versions of libcares.
PORTS
=====
diff --git a/LICENSE.md b/LICENSE.md
index ad6bb52..1341454 100644
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,15 +1,27 @@
# c-ares license
-Copyright (c) 2007 - 2018, Daniel Stenberg with many contributors, see AUTHORS
+MIT License
+
+
+Copyright (c) 1998 Massachusetts Institute of Technology
+Copyright (c) 2007 - 2023 Daniel Stenberg with many contributors, see AUTHORS
file.
-Copyright 1998 by the Massachusetts Institute of Technology.
+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 (including the next
+paragraph) shall be included in all copies or substantial portions of the
+Software.
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted, 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.
+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
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/Makefile.Watcom b/Makefile.Watcom
index fa529a5..6ea10e5 100644
--- a/Makefile.Watcom
+++ b/Makefile.Watcom
@@ -1,6 +1,9 @@
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
#
# Watcom / OpenWatcom / Win32 makefile for cares.
# Quick hack by Guenter; comments to: /dev/nul
+# Updated by Douglas R. Reno, comments to: renodr2002@gmail.com. 2023
#
!ifndef %watcom
@@ -16,7 +19,7 @@ LIBNAME = $(%libname)
LIBNAME = cares
!endif
TARGETS = $(LIBNAME).dll $(LIBNAME)_imp.lib $(LIBNAME).lib
-DEMOS = adig.exe ahost.exe acountry.exe
+DEMOS = adig.exe ahost.exe
CC = wcc386
LD = wlink
@@ -38,9 +41,9 @@ MD = mkdir
RD = rmdir /q /s 2>NUL
CP = copy
-CFLAGS = -3r -mf -hc -zff -zgf -zq -zm -zc -s -fr=con -w2 -fpi -oilrtfm &
- -wcd=201 -bt=nt -d+ -dWIN32 -dCARES_BUILDING_LIBRARY &
- -dNTDDI_VERSION=0x05010000 -I. $(SYS_INCL)
+CFLAGS = -3r -mf -hc -zff -zgf -zq -zm -zc -s -fr=con -w2 -fpi -oilrtfm -aa &
+ -wcd=201 -bt=nt -d+ -dWIN32 -dCARES_BUILDING_LIBRARY &
+ -dNTDDI_VERSION=0x06000000 -I. -I.\include -I.\src\lib $(SYS_INCL)
LFLAGS = option quiet, map, caseexact, eliminate
@@ -69,7 +72,7 @@ LIB_ARG = $(OBJ_BASE)\stat\wlib.arg
!ifneq __MAKEOPTS__ -u
!error You MUST call wmake with the -u switch!
!else
-!include Makefile.inc
+!include src\lib\Makefile.inc
!endif
OBJS = $(CSOURCES:.c=.obj)
@@ -82,10 +85,11 @@ OBJ_DIR = $(OBJ_BASE)\stat
OBJS_STAT = $+ $(OBJS) $-
OBJ_DIR = $(OBJ_BASE)\dyn
-OBJS_DYN = $+ $(OBJS) $-
+OBJS_DYN += $(OBJS) $-
ARESBUILDH = ares_build.h
RESOURCE = $(OBJ_BASE)\dyn\cares.res
+ARESBUILDH = include\ares_build.h
all: $(ARESBUILDH) $(OBJ_BASE) $(TARGETS) $(DEMOS) .SYMBOLIC
@echo Welcome to cares
@@ -94,10 +98,10 @@ $(OBJ_BASE):
-$(MD) $^@
-$(MD) $^@\stat
-$(MD) $^@\dyn
- -$(MD) $^@\demos
+ -$(MD) $^@\tools
$(ARESBUILDH): .EXISTSONLY
- $(CP) $^@.dist $^@
+ @echo Make sure to run buildconf.bat!
$(LIBNAME).dll: $(OBJS_DYN) $(RESOURCE) $(LINK_ARG)
$(LD) name $^@ @$]@
@@ -105,14 +109,16 @@ $(LIBNAME).dll: $(OBJS_DYN) $(RESOURCE) $(LINK_ARG)
$(LIBNAME).lib: $(OBJS_STAT) $(LIB_ARG)
$(AR) -q -b -c $^@ @$]@
-adig.exe: $(OBJ_BASE)\demos\adig.obj $(OBJ_BASE)\demos\ares_getopt.obj $(LIBNAME).lib
- $(LD) name $^@ system nt $(LFLAGS) file { $(OBJ_BASE)\demos\ares_getopt.obj $[@ } library $]@, ws2_32.lib
+$(OBJ_BASE)\tools\ares_getopt.obj:
+ $(CC) $(CFLAGS) -DCARES_STATICLIB .\src\tools\ares_getopt.c -fo=$^@
-ahost.exe: $(OBJ_BASE)\demos\ahost.obj $(OBJ_BASE)\demos\ares_getopt.obj $(LIBNAME).lib
- $(LD) name $^@ system nt $(LFLAGS) file { $(OBJ_BASE)\demos\ares_getopt.obj $[@ } library $]@, ws2_32.lib
+adig.exe: $(OBJ_BASE)\tools\ares_getopt.obj $(LIBNAME).lib
+ $(CC) $(CFLAGS) src\tools\adig.c -fo=$(OBJ_BASE)\tools\adig.obj
+ $(LD) name $^@ system nt $(LFLAGS) file { $(OBJ_BASE)\tools\adig.obj $[@ } library $]@, ws2_32.lib, iphlpapi.lib
-acountry.exe: $(OBJ_BASE)\demos\acountry.obj $(OBJ_BASE)\demos\ares_getopt.obj $(LIBNAME).lib
- $(LD) name $^@ system nt $(LFLAGS) file { $(OBJ_BASE)\demos\ares_getopt.obj $[@ } library $]@, ws2_32.lib
+ahost.exe: $(OBJ_BASE)\tools\ares_getopt.obj $(LIBNAME).lib
+ $(CC) $(CFLAGS) src\tools\ahost.c -fo=$(OBJ_BASE)\tools\ahost.obj
+ $(LD) name $^@ system nt $(LFLAGS) file { $(OBJ_BASE)\tools\ahost.obj $[@ } library $]@, ws2_32.lib, iphlpapi.lib
clean: .SYMBOLIC
-$(RM) $(OBJS_STAT)
@@ -124,24 +130,23 @@ vclean realclean: clean .SYMBOLIC
-$(RM) $(DEMOS) $(DEMOS:.exe=.map)
-$(RD) $(OBJ_BASE)\stat
-$(RD) $(OBJ_BASE)\dyn
- -$(RD) $(OBJ_BASE)\demos
+ -$(RD) $(OBJ_BASE)\tools
-$(RD) $(OBJ_BASE)
.ERASE
-$(RESOURCE): cares.rc .AUTODEPEND
+.c: .\src\lib
+
+.ERASE
+$(RESOURCE): src\lib\cares.rc .AUTODEPEND
$(RC) $(DEBUG) -q -r -zm -I..\include $(SYS_INCL) $[@ -fo=$^@
.ERASE
.c{$(OBJ_BASE)\dyn}.obj:
- $(CC) $(CFLAGS) -bd $[@ -fo=$^@
+ $(CC) $(CFLAGS) -bd .\src\lib\$^& -fo=$^@
.ERASE
.c{$(OBJ_BASE)\stat}.obj:
- $(CC) $(CFLAGS) -DCARES_STATICLIB $[@ -fo=$^@
-
-.ERASE
-.c{$(OBJ_BASE)\demos}.obj:
- $(CC) $(CFLAGS) -DCARES_STATICLIB $[@ -fo=$^@
+ $(CC) $(CFLAGS) -DCARES_STATICLIB .\src\lib\$^& -fo=$^@
$(LINK_ARG): $(__MAKEFILES__)
%create $^@
@@ -155,6 +160,7 @@ $(LINK_ARG): $(__MAKEFILES__)
@%append $^@ library $(%watt_root)\lib\wattcpw_imp.lib
!else
@%append $^@ library ws2_32.lib
+ @%append $^@ library iphlpapi.lib
!endif
$(LIB_ARG): $(__MAKEFILES__)
diff --git a/Makefile.am b/Makefile.am
index eef3d3d..d1ab53c 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -1,3 +1,24 @@
+#############################################################
+#
+# Copyright (C) the Massachusetts Institute of Technology.
+# Copyright (C) Daniel Stenberg
+#
+# Permission to use, copy, modify, and distribute this
+# software and its documentation for any purpose and without
+# fee is hereby granted, 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.
+#
+# SPDX-License-Identifier: MIT
+#
+#############################################################
+
AUTOMAKE_OPTIONS = foreign nostdinc 1.9.6
ACLOCAL_AMFLAGS = -I m4 --install
@@ -9,8 +30,8 @@ EXTRA_DIST = AUTHORS CHANGES README.cares $(man_MANS) RELEASE-NOTES \
c-ares-config.cmake.in libcares.pc.cmake libcares.pc.in buildconf get_ver.awk \
maketgz TODO README.msvc $(MSVCFILES) INSTALL.md README.md LICENSE.md \
CMakeLists.txt Makefile.dj Makefile.m32 Makefile.netware Makefile.msvc \
- Makefile.Watcom AUTHORS CONTRIBUTING.md SECURITY.md TODO
-
+ Makefile.Watcom AUTHORS CONTRIBUTING.md SECURITY.md TODO \
+ cmake/EnableWarnings.cmake
CLEANFILES = $(PDFPAGES) $(HTMLPAGES)
diff --git a/Makefile.dj b/Makefile.dj
index a88aae2..2f22188 100644
--- a/Makefile.dj
+++ b/Makefile.dj
@@ -1,6 +1,7 @@
#
# c-ares Makefile for djgpp/gcc/Watt-32.
-# By Gisle Vanem <gvanem@yahoo.no> 2004 - 2020.
+# Copyright (C) Gisle Vanem <gvanem@yahoo.no>
+# SPDX-License-Identifier: MIT
#
include src/lib/Makefile.inc
@@ -46,7 +47,7 @@ OBJECTS = $(addprefix $(OBJ_DIR)/, \
GENERATED = src/lib/ares_config.h \
include/ares_build.h
-TARGETS = libcares.a acountry.exe adig.exe ahost.exe
+TARGETS = libcares.a adig.exe ahost.exe
.SECONDARY: $(OBJ_DIR)/ares_getopt.o
diff --git a/Makefile.in b/Makefile.in
index 7d7b59e..0aa9ca8 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -14,6 +14,27 @@
@SET_MAKE@
+#############################################################
+#
+# Copyright (C) the Massachusetts Institute of Technology.
+# Copyright (C) Daniel Stenberg
+#
+# Permission to use, copy, modify, and distribute this
+# software and its documentation for any purpose and without
+# fee is hereby granted, 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.
+#
+# SPDX-License-Identifier: MIT
+#
+#############################################################
+
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
@@ -94,8 +115,12 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \
$(top_srcdir)/m4/ax_ac_print_to_file.m4 \
$(top_srcdir)/m4/ax_add_am_macro_static.m4 \
$(top_srcdir)/m4/ax_am_macros_static.m4 \
+ $(top_srcdir)/m4/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4/ax_append_flag.m4 \
+ $(top_srcdir)/m4/ax_check_compile_flag.m4 \
$(top_srcdir)/m4/ax_check_gnu_make.m4 \
$(top_srcdir)/m4/ax_code_coverage.m4 \
+ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
$(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \
$(top_srcdir)/m4/ax_file_escapes.m4 \
$(top_srcdir)/m4/ax_require_defined.m4 \
@@ -297,6 +322,7 @@ EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
+FILECMD = @FILECMD@
GCOV = @GCOV@
GENHTML = @GENHTML@
GREP = @GREP@
@@ -407,7 +433,8 @@ EXTRA_DIST = AUTHORS CHANGES README.cares $(man_MANS) RELEASE-NOTES \
c-ares-config.cmake.in libcares.pc.cmake libcares.pc.in buildconf get_ver.awk \
maketgz TODO README.msvc $(MSVCFILES) INSTALL.md README.md LICENSE.md \
CMakeLists.txt Makefile.dj Makefile.m32 Makefile.netware Makefile.msvc \
- Makefile.Watcom AUTHORS CONTRIBUTING.md SECURITY.md TODO
+ Makefile.Watcom AUTHORS CONTRIBUTING.md SECURITY.md TODO \
+ cmake/EnableWarnings.cmake
CLEANFILES = $(PDFPAGES) $(HTMLPAGES)
DISTCLEANFILES = include/ares_build.h
diff --git a/Makefile.m32 b/Makefile.m32
index 66d28b1..e51e64b 100644
--- a/Makefile.m32
+++ b/Makefile.m32
@@ -1,10 +1,12 @@
#############################################################
#
-## Makefile for building libcares.a with MingW32 (GCC-3.2)
-## Use: make -f Makefile.m32 [demos]
-##
-## Quick hack by Guenter; comments to: /dev/nul
+# Makefile for building libcares.a with MingW32 (GCC-3.2)
+# Use: make -f Makefile.m32 [demos]
#
+# Quick hack by Guenter; comments to: /dev/nul
+#
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
########################################################
## Nothing more to do below this line!
@@ -34,7 +36,7 @@ $(LIB): $(OBJLIB)
all: $(LIB) demos
-demos: src/tools/adig.exe src/tools/ahost.exe src/tools/acountry.exe
+demos: src/tools/adig.exe src/tools/ahost.exe
tags:
etags *.[ch]
@@ -68,7 +70,7 @@ install:
done)
clean:
- $(RM) src/tools/ares_getopt.o $(OBJLIB) $(LIB) src/tools/adig.exe src/tools/ahost.exe src/tools/acountry.exe
+ $(RM) src/tools/ares_getopt.o $(OBJLIB) $(LIB) src/tools/adig.exe src/tools/ahost.exe
distclean: clean
$(RM) config.cache config.log config.status Makefile
diff --git a/Makefile.msvc b/Makefile.msvc
index 62cc48f..17daa0c 100644
--- a/Makefile.msvc
+++ b/Makefile.msvc
@@ -12,6 +12,8 @@
# 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.
+#
+# SPDX-License-Identifier: MIT
# ------------------------------------------------------------------------------
#
@@ -20,7 +22,7 @@
# Usage: nmake /f makefile.msvc CFG=<config> <target>
#
# <config> must be one of: [ lib-release | lib-debug | dll-release | dll-debug }
-# <target> must be one of: [ ALL | c-ares | acountry | adig | ahost | clean }
+# <target> must be one of: [ ALL | c-ares | adig | ahost | clean }
#
# If a <target> other than ALL or clean is given, <config> becomes mandatory.
#
@@ -130,7 +132,7 @@ VALID_CFGSET = TRUE
! MESSAGE Usage: nmake /f makefile.msvc CFG=<config> <target>
! MESSAGE
! MESSAGE <config> must be one of: [ lib-release | lib-debug | dll-release | dll-debug }
-! MESSAGE <target> must be one of: [ ALL | c-ares | acountry | adig | ahost | clean }
+! MESSAGE <target> must be one of: [ ALL | c-ares | adig | ahost | clean }
! MESSAGE
! MESSAGE If a <target> other than ALL or clean is given, <config> becomes mandatory.
! MESSAGE
@@ -145,7 +147,6 @@ VALID_CFGSET = TRUE
# --------------------------------------------------------
CARES_DIR = $(BASE_DIR)\cares
-PROG1_DIR = $(BASE_DIR)\acountry
PROG2_DIR = $(BASE_DIR)\adig
PROG3_DIR = $(BASE_DIR)\ahost
@@ -156,20 +157,16 @@ PROG3_DIR = $(BASE_DIR)\ahost
!IF "$(VALID_CFGSET)" == "TRUE"
CARES_OUTDIR = $(CARES_DIR)\$(CFG)
-PROG1_OUTDIR = $(PROG1_DIR)\$(CFG)
PROG2_OUTDIR = $(PROG2_DIR)\$(CFG)
PROG3_OUTDIR = $(PROG3_DIR)\$(CFG)
CARES_OBJDIR = $(CARES_OUTDIR)\obj
-PROG1_OBJDIR = $(PROG1_OUTDIR)\obj
PROG2_OBJDIR = $(PROG2_OUTDIR)\obj
PROG3_OBJDIR = $(PROG3_OUTDIR)\obj
!ELSE
!UNDEF CARES_OUTDIR
-!UNDEF PROG1_OUTDIR
!UNDEF PROG2_OUTDIR
!UNDEF PROG3_OUTDIR
!UNDEF CARES_OBJDIR
-!UNDEF PROG1_OBJDIR
!UNDEF PROG2_OBJDIR
!UNDEF PROG3_OBJDIR
!ENDIF
@@ -301,17 +298,6 @@ CARES_OBJS = $(CARES_OBJS:.c=.obj)
CARES_OBJS = $(CARES_OBJS) $(CARES_OBJDIR)\cares.res
!ENDIF
-!IF [ECHO PROG1_OBJS=^$(PROG1_OBJDIR)\$(SAMPLESOURCES: = $(PROG1_OBJDIR^)\) > .\prog1_objs.inc] == 0
-!INCLUDE .\prog1_objs.inc
-!IF [DEL .\prog1_objs.inc]
-!ENDIF
-!ELSE
-!ERROR Problem generating PROG1_OBJS list.
-!ENDIF
-PROG1_OBJS = $(PROG1_OBJS:.c=.obj)
-PROG1_OBJS = $(PROG1_OBJS:/=\)
-PROG1_OBJS = $(PROG1_OBJS) $(PROG1_OBJDIR)\acountry.obj
-
!IF [ECHO PROG2_OBJS=^$(PROG2_OBJDIR)\$(SAMPLESOURCES: = $(PROG2_OBJDIR^)\) > .\prog2_objs.inc] == 0
!INCLUDE .\prog2_objs.inc
!IF [DEL .\prog2_objs.inc]
@@ -350,9 +336,6 @@ PROG3_OBJS = $(PROG3_OBJS) $(PROG3_OBJDIR)\ahost.obj
{$(SRCDIR)\src\lib}.c{$(CARES_OBJDIR)}.obj:
$(CC_CMD) $(CC_CFLAGS) $(CARES_CFLAGS) /Fo$@ /Fd$(@D)\ /c $<
-{$(SRCDIR)\src\tools}.c{$(PROG1_OBJDIR)}.obj:
- $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $<
-
{$(SRCDIR)\src\tools}.c{$(PROG2_OBJDIR)}.obj:
$(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$@ /Fd$(@D)\ /c $<
@@ -362,9 +345,6 @@ PROG3_OBJS = $(PROG3_OBJS) $(PROG3_OBJDIR)\ahost.obj
# Hack Alert! we reference ../lib/ files in the Makefile.inc for tools as they
# share some files with the library itself. We need to hack around that here.
-{$(SRCDIR)\src\lib}.c{$(PROG1_OBJDIR)\..\lib}.obj:
- $(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$(PROG1_OBJDIR)\$(@F) /Fd$(PROG1_OBJDIR)\ /c $<
-
{$(SRCDIR)\src\lib}.c{$(PROG2_OBJDIR)\..\lib}.obj:
$(CC_CMD) $(CC_CFLAGS) $(SPROG_CFLAGS) /Fo$(PROG2_OBJDIR)\$(@F) /Fd$(PROG2_OBJDIR)\ /c $<
@@ -403,7 +383,7 @@ install:
!IF "$(VALID_CFGSET)" == "TRUE"
-ALL: c-ares acountry adig ahost
+ALL: c-ares adig ahost
@
# $(HHEADERS) $(CSOURCES)
@@ -413,11 +393,6 @@ c-ares: $(CARES_OBJDIR) $(CARES_OBJS) $(CARES_OUTDIR)
@if exist $(CARES_OUTDIR)\$(CARES_TARGET).manifest mt -nologo -manifest $(CARES_OUTDIR)\$(CARES_TARGET).manifest -outputresource:$(CARES_OUTDIR)\$(CARES_TARGET);2
! ENDIF
-# acountry.c $(SAMPLESOURCES) $(SAMPLEHEADERS)
-acountry: c-ares $(PROG1_OBJDIR) $(PROG1_OBJS) $(PROG1_OUTDIR)
- $(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG1_OUTDIR)\acountry.exe $(PROG1_OBJS:..\lib=)
- @if exist $(PROG1_OUTDIR)\acountry.exe.manifest mt -nologo -manifest $(PROG1_OUTDIR)\acountry.exe.manifest -outputresource:$(PROG1_OUTDIR)\acountry.exe;1
-
# adig.c $(SAMPLESOURCES) $(SAMPLEHEADERS)
adig: c-ares $(PROG2_OBJDIR) $(PROG2_OBJS) $(PROG2_OUTDIR)
$(SPROG_LINK) $(SPROG_LFLAGS) /out:$(PROG2_OUTDIR)\adig.exe $(PROG2_OBJS:..\lib=)
@@ -431,9 +406,6 @@ ahost: c-ares $(PROG3_OBJDIR) $(PROG3_OBJS) $(PROG3_OUTDIR)
$(CARES_OUTDIR): $(CARES_DIR)
@if not exist $(CARES_OUTDIR) mkdir $(CARES_OUTDIR)
-$(PROG1_OUTDIR): $(PROG1_DIR)
- @if not exist $(PROG1_OUTDIR) mkdir $(PROG1_OUTDIR)
-
$(PROG2_OUTDIR): $(PROG2_DIR)
@if not exist $(PROG2_OUTDIR) mkdir $(PROG2_OUTDIR)
@@ -443,9 +415,6 @@ $(PROG3_OUTDIR): $(PROG3_DIR)
$(CARES_OBJDIR): $(CARES_OUTDIR)
@if not exist $(CARES_OBJDIR) mkdir $(CARES_OBJDIR)
-$(PROG1_OBJDIR): $(PROG1_OUTDIR)
- @if not exist $(PROG1_OBJDIR) mkdir $(PROG1_OBJDIR)
-
$(PROG2_OBJDIR): $(PROG2_OUTDIR)
@if not exist $(PROG2_OBJDIR) mkdir $(PROG2_OBJDIR)
@@ -454,7 +423,6 @@ $(PROG3_OBJDIR): $(PROG3_OUTDIR)
clean:
@-RMDIR /S /Q $(CARES_OUTDIR) >NUL 2>&1
- @-RMDIR /S /Q $(PROG1_OUTDIR) >NUL 2>&1
@-RMDIR /S /Q $(PROG2_OUTDIR) >NUL 2>&1
@-RMDIR /S /Q $(PROG3_OUTDIR) >NUL 2>&1
@@ -479,9 +447,6 @@ $(BASE_DIR):
$(CARES_DIR): $(BASE_DIR)
@if not exist $(CARES_DIR) mkdir $(CARES_DIR)
-$(PROG1_DIR): $(BASE_DIR)
- @if not exist $(PROG1_DIR) mkdir $(PROG1_DIR)
-
$(PROG2_DIR): $(BASE_DIR)
@if not exist $(PROG2_DIR) mkdir $(PROG2_DIR)
diff --git a/Makefile.netware b/Makefile.netware
index e1a8a55..790b17a 100644
--- a/Makefile.netware
+++ b/Makefile.netware
@@ -1,9 +1,10 @@
#################################################################
#
-## Makefile for building libcares (NetWare version - gnu make)
-## Use: make -f Makefile.netware
-##
-## Comments to: Guenter Knauf http://www.gknw.de/phpbb
+# Makefile for building libcares (NetWare version - gnu make)
+# Use: make -f Makefile.netware
+#
+# Copyright (C) Guenter Knauf
+# SPDX-License-Identifier: MIT
#
#################################################################
@@ -17,7 +18,7 @@ INSTDIR = ../ares-$(LIBCARES_VERSION_STR)-bin-nw
endif
# Edit the vars below to change NLM target settings.
-TARGETS = adig.nlm ahost.nlm acountry.nlm
+TARGETS = adig.nlm ahost.nlm
LTARGET = libcares.$(LIBEXT)
VERSION = $(LIBCARES_VERSION)
COPYR = $(LIBCARES_COPYRIGHT_STR)
diff --git a/README.md b/README.md
index 24a96c4..4857dd3 100644
--- a/README.md
+++ b/README.md
@@ -3,10 +3,9 @@ c-ares
[![Build Status](https://api.cirrus-ci.com/github/c-ares/c-ares.svg)](https://cirrus-ci.com/github/c-ares/c-ares)
[![Windows Build Status](https://ci.appveyor.com/api/projects/status/aevgc5914tm72pvs/branch/master?svg=true)](https://ci.appveyor.com/project/c-ares/c-ares/branch/master)
-[![Coverage Status](https://coveralls.io/repos/c-ares/c-ares/badge.svg?branch=master&service=github)](https://coveralls.io/github/c-ares/c-ares?branch=master)
+[![Coverage Status](https://coveralls.io/repos/github/c-ares/c-ares/badge.svg)](https://coveralls.io/github/c-ares/c-ares)
[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/291/badge)](https://bestpractices.coreinfrastructure.org/projects/291)
[![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/c-ares.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:c-ares)
-[![Releases](https://coderelease.io/badge/c-ares/c-ares)](https://coderelease.io/github/repository/c-ares/c-ares)
This is c-ares, an asynchronous resolver library. It is intended for
applications which need to perform DNS queries without blocking, or need to
@@ -22,8 +21,7 @@ If you find bugs, correct flaws, have questions or have comments in general in
regard to c-ares (or by all means the original ares too), get in touch with us
on the c-ares mailing list: https://lists.haxx.se/listinfo/c-ares
-c-ares is of course distributed under the same MIT-style license as the
-original ares.
+c-ares is distributed under the MIT license.
You'll find all c-ares details and news here:
https://c-ares.org/
diff --git a/README.msvc b/README.msvc
index 396f497..97d4f0c 100644
--- a/README.msvc
+++ b/README.msvc
@@ -28,7 +28,7 @@
depends on the MSVC compiler version being used to build c-ares.
Below the MSVCXX folder there will exist four folders named 'cares',
- 'ahost', 'acountry', and 'adig'. The 'cares' folder is the one that
+ 'ahost', and 'adig'. The 'cares' folder is the one that
holds the c-ares libraries you have just generated, the other three
hold sample programs that use the libraries.
diff --git a/RELEASE-NOTES b/RELEASE-NOTES
index d095749..f26ba4b 100644
--- a/RELEASE-NOTES
+++ b/RELEASE-NOTES
@@ -1,85 +1,39 @@
-c-ares version 1.18.1
+c-ares version 1.21.0
-This is an urgent bugfix release for a regression made in 1.18.0.
-
-Bug fixes:
- o ares_getaddrinfo() would return ai_addrlen of 16 for ipv6
- adddresses rather than the sizeof(struct sockaddr_in6)
-
-
-
-c-ares version 1.18.0
-
-This is a feature and bugfix release. It addresses a couple of new feature
-requests as well as a couple of bug fixes.
+This is a bugfix and cleanup release with some significant internal changes.
Changes:
- o Add support for URI(Uniform Resource Identifier) records via
- ares_parse_uri_reply() [1]
- o Provide ares_nameser.h as a public interface as needed by NodeJS [5]
- o Update URLs from c-ares.haxx.se to c-ares.org [9]
- o During a domain search, treat ARES_ENODATA as ARES_NXDOMAIN so that the
- search process will continue to the next domain in the search. [11]
- o Turn ares_gethostbyname() into a wrapper for ares_getaddrinfo() as they
- followed very similar code paths and ares_gethostbyaddr() has some more
- desirable features such as priority sorting and parallel queries for
- AF_UNSPEC. [12]
- o ares_getaddrinfo() now contains a name element in the address info
- structure as the last element. This is not an API or ABI break due to
- the structure always being internally allocated and it being the last
- element. [12]
- o ares_parse_a_reply() and ares_parse_aaaa_reply() were nearly identical, those
- now use the same helper functions for parsing rather than having their own
- code. [12]
- o RFC6761 Section 6.3 says "localhost" lookups need to be special cased to
- return loopback addresses, and not forward queries to recursive dns servers.
- On Windows this now returns all loopback addresses, on other systems it
- returns 127.0.0.1 or ::1 always, and will never forward a request for
- "localhost" to outside DNS servers. [13]
- o Haiki: port [14]
-
-Bug fixes:
- o add build to .gitignore [2]
- o z/OS minor update, add missing semicolon in ares_init.c [3]
- o Fix building when latest ax_code_coverage.m4 is imported [4]
- o Work around autotools 'error: too many loops' and other newer autotools
- import related bugs.
- o MinGW cross builds need advapi32 link as lower case [6]
- o Cygwin build fix due to containing both socket.h and winsock2.h [7]
- o ares_expand_name should allow underscores (_) as SRV records legitimately use
- them [8]
- o Allow '/' as a valid character for a returned name for CNAME in-addr.arpa
- delegation [10]
- o ares_getaddrinfo() was not honoring HOSTALIASES [12]
- o ares_getaddrinfo() had some test cases disabled due to a bug in the test
- framework itself which has now been resolved [12]
- o Due to Travis-CI becoming unfriendly to open-source, Cirrus-CI has now been
- brought online for automated unit testing.
+ o Provide better man page cross-links. [1]
+ o Introduce ares_status_t as an enum rather than using #define list and
+ integer data type for internal functions. [2]
+ o Introduce ares_bool_t datatype rather than using an integer with 0/1 so
+ it is clear based on the function prototype what it returns. [5]
+ o Increase compiler warning levels by default. [6]
+ o Use size_t and other more proper datatypes internally (rather than int). [7]
+ o Many developers have used different code styles over the years, standardize
+ on one and use clang-format to enforce the style. [8]
+ o CMake can now control symbol visibility [9]
+ o Replace multiple DNS hand-made parsers with new memory-safe DNS message
+ parser. [10]
+
+Bug Fixes:
+ o Tools: STAYOPEN flag could make tools not terminate. [3]
+ o Socket callbacks were passed SOCK_STREAM instead of SOCK_DGRAM on udp. [4]
Thanks go to these friendly people for their efforts and contributions:
- Biswapriyo Nath (@Biswa96)
Brad House (@bradh352)
- Daniel Bevenius (@danbev)
Daniel Stenberg (@bagder)
- Dhrumil Rana (@dhrumilrana)
- Felix Yan (@felixonmars)
- Jérôme Duval (@korli)
- Martin Holeš (@martin-256)
- Sinan Kaya
-(9 contributors)
+ Gregor Jasny (@gjasny)
+(3 contributors)
References to bug reports and discussions on issues:
- [1] = https://github.com/c-ares/c-ares/pull/411
- [2] = https://github.com/c-ares/c-ares/pull/410
- [3] = https://github.com/c-ares/c-ares/pull/414
- [4] = https://github.com/c-ares/c-ares/pull/418
- [5] = https://github.com/c-ares/c-ares/pull/417
- [6] = https://github.com/c-ares/c-ares/pull/420
- [7] = https://github.com/c-ares/c-ares/pull/422
- [8] = https://github.com/c-ares/c-ares/issues/424
- [9] = https://github.com/c-ares/c-ares/issues/423
- [10] = https://github.com/c-ares/c-ares/issues/427
- [11] = https://github.com/c-ares/c-ares/issues/426
- [12] = https://github.com/c-ares/c-ares/pull/428
- [13] = https://github.com/c-ares/c-ares/pull/430
- [14] = https://github.com/c-ares/c-ares/pull/431
+ [1] = https://github.com/c-ares/c-ares/pull/565
+ [2] = https://github.com/c-ares/c-ares/pull/567
+ [3] = https://github.com/c-ares/c-ares/pull/569
+ [4] = https://github.com/c-ares/c-ares/commit/a070d78
+ [5] = https://github.com/c-ares/c-ares/pull/570
+ [6] = https://github.com/c-ares/c-ares/pull/568
+ [7] = https://github.com/c-ares/c-ares/pull/573
+ [8] = https://github.com/c-ares/c-ares/pull/579
+ [9] = https://github.com/c-ares/c-ares/pull/574
+ [10] = https://github.com/c-ares/c-ares/pull/581
diff --git a/acinclude.m4 b/acinclude.m4
index c255198..2644cdf 100644
--- a/acinclude.m4
+++ b/acinclude.m4
@@ -1,4 +1,5 @@
-
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
dnl CURL_CHECK_DEF (SYMBOL, [INCLUDES], [SILENT])
dnl -------------------------------------------------
diff --git a/aclocal.m4 b/aclocal.m4
index e7ced79..0ce0d0b 100644
--- a/aclocal.m4
+++ b/aclocal.m4
@@ -1188,8 +1188,12 @@ m4_include([m4/ax_ac_append_to_file.m4])
m4_include([m4/ax_ac_print_to_file.m4])
m4_include([m4/ax_add_am_macro_static.m4])
m4_include([m4/ax_am_macros_static.m4])
+m4_include([m4/ax_append_compile_flags.m4])
+m4_include([m4/ax_append_flag.m4])
+m4_include([m4/ax_check_compile_flag.m4])
m4_include([m4/ax_check_gnu_make.m4])
m4_include([m4/ax_code_coverage.m4])
+m4_include([m4/ax_cxx_compile_stdcxx.m4])
m4_include([m4/ax_cxx_compile_stdcxx_11.m4])
m4_include([m4/ax_file_escapes.m4])
m4_include([m4/ax_require_defined.m4])
diff --git a/aminclude_static.am b/aminclude_static.am
index c90aef6..1b76c9f 100644
--- a/aminclude_static.am
+++ b/aminclude_static.am
@@ -1,6 +1,6 @@
# aminclude_static.am generated automatically by Autoconf
-# from AX_AM_MACROS_STATIC on Wed Oct 27 08:06:13 CEST 2021
+# from AX_AM_MACROS_STATIC on Fri Oct 27 08:44:51 CEST 2023
# Code coverage
diff --git a/buildconf b/buildconf
index 4e4c17e..94c6abc 100755
--- a/buildconf
+++ b/buildconf
@@ -1,4 +1,6 @@
#!/bin/sh
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
echo "*** Do not use buildconf. Instead, just use: autoreconf -fi" >&2
exec ${AUTORECONF:-autoreconf} -fi "${@}"
diff --git a/buildconf.bat b/buildconf.bat
index dcee452..0227c88 100644
--- a/buildconf.bat
+++ b/buildconf.bat
@@ -6,6 +6,9 @@ REM systems where there is no autotools support (i.e. Microsoft).
REM
REM This file is not included nor needed for c-ares' release
REM archives, neither for c-ares' daily snapshot archives.
+REM
+REM Copyright (C) The c-ares project and its contributors
+REM SPDX-License-Identifier: MIT
if exist GIT-INFO goto start_doing
ECHO ERROR: This file shall only be used with a c-ares git checkout.
diff --git a/c-ares-config.cmake.in b/c-ares-config.cmake.in
index 464837b..f68ed83 100644
--- a/c-ares-config.cmake.in
+++ b/c-ares-config.cmake.in
@@ -1,3 +1,6 @@
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
+
@PACKAGE_INIT@
set_and_check(c-ares_INCLUDE_DIR "@PACKAGE_CMAKE_INSTALL_INCLUDEDIR@")
@@ -8,14 +11,17 @@ include("${CMAKE_CURRENT_LIST_DIR}/c-ares-targets.cmake")
set(c-ares_LIBRARY c-ares::cares)
if(@CARES_SHARED@)
- add_library(c-ares::cares_shared INTERFACE IMPORTED)
- set_target_properties(c-ares::cares_shared PROPERTIES INTERFACE_LINK_LIBRARIES "c-ares::cares")
+ if(NOT TARGET c-ares::cares_shared)
+ add_library(c-ares::cares_shared INTERFACE IMPORTED)
+ set_target_properties(c-ares::cares_shared PROPERTIES INTERFACE_LINK_LIBRARIES "c-ares::cares")
+ endif()
set(c-ares_SHARED_LIBRARY c-ares::cares_shared)
-elseif(@CARES_STATIC@)
- add_library(c-ares::cares_static INTERFACE IMPORTED)
- set_target_properties(c-ares::cares_static PROPERTIES INTERFACE_LINK_LIBRARIES "c-ares::cares")
endif()
if(@CARES_STATIC@)
+ if(NOT TARGET c-ares::cares_static)
+ add_library(c-ares::cares_static INTERFACE IMPORTED)
+ set_target_properties(c-ares::cares_static PROPERTIES INTERFACE_LINK_LIBRARIES "c-ares::cares")
+ endif()
set(c-ares_STATIC_LIBRARY c-ares::cares_static)
endif()
diff --git a/cmake/EnableWarnings.cmake b/cmake/EnableWarnings.cmake
new file mode 100644
index 0000000..ddc8204
--- /dev/null
+++ b/cmake/EnableWarnings.cmake
@@ -0,0 +1,408 @@
+# Copyright (c) Monetra Technologies LLC
+# SPDX-License-Identifier: MIT
+
+# EnableWarnings.cmake
+#
+# Checks for and turns on a large number of warning C flags.
+#
+# Adds the following helper functions:
+#
+# remove_warnings(... list of warnings ...)
+# Turn off given list of individual warnings for all targets and subdirectories added after this.
+#
+# remove_all_warnings()
+# Remove all warning flags, add -w to suppress built-in warnings.
+#
+# remove_all_warnings_from_targets(... list of targets ...)
+# Suppress warnings for the given targets only.
+#
+# push_warnings()
+# Save current warning flags by pushing them onto an internal stack. Note that modifications to the internal
+# stack are only visible in the current CMakeLists.txt file and its children.
+#
+# Note: changing warning flags multiple times in the same directory only affects add_subdirectory() calls.
+# Targets in the directory will always use the warning flags in effect at the end of the CMakeLists.txt
+# file - this is due to really weird and annoying legacy behavior of CMAKE_C_FLAGS.
+#
+# pop_warnings()
+# Restore the last set of flags that were saved with push_warnings(). Note that modifications to the internal
+# stack are only visible in the current CMakeLists.txt file and its children.
+#
+
+if (_internal_enable_warnings_already_run)
+ return()
+endif ()
+set(_internal_enable_warnings_already_run TRUE)
+
+include(CheckCCompilerFlag)
+include(CheckCXXCompilerFlag)
+
+get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
+
+# internal helper: _int_enable_warnings_set_flags_ex(langs_var configs_var [warnings flags])
+function(_int_enable_warnings_set_flags_ex langs_var configs_var)
+ if (NOT ARGN)
+ return()
+ endif ()
+
+ if (NOT ${configs_var})
+ set(${configs_var} "NONE")
+ endif ()
+ string(TOUPPER "${${configs_var}}" ${configs_var})
+
+ foreach(_flag ${ARGN})
+ string(MAKE_C_IDENTIFIER "HAVE_${_flag}" varname)
+
+ if ("C" IN_LIST ${langs_var})
+ check_c_compiler_flag(${_flag} ${varname})
+ if (${varname})
+ foreach (config IN LISTS ${configs_var})
+ if (config STREQUAL "NONE")
+ set(config)
+ else ()
+ set(config "_${config}")
+ endif ()
+ string(APPEND CMAKE_C_FLAGS${config} " ${_flag}")
+ endforeach ()
+ endif ()
+ endif ()
+
+ if ("CXX" IN_LIST ${langs_var})
+ string(APPEND varname "_CXX")
+ check_cxx_compiler_flag(${_flag} ${varname})
+ if (${varname})
+ foreach (config IN LISTS ${configs_var})
+ if (config STREQUAL "NONE")
+ set(config)
+ else ()
+ set(config "_${config}")
+ endif ()
+ string(APPEND CMAKE_CXX_FLAGS${config} " ${_flag}")
+ endforeach ()
+ endif ()
+ endif ()
+ endforeach()
+
+ foreach(lang C CXX)
+ foreach (config IN LISTS ${configs_var})
+ string(TOUPPER "${config}" config)
+ if (config STREQUAL "NONE")
+ set(config)
+ else ()
+ set(config "_${config}")
+ endif ()
+ string(STRIP "${CMAKE_${lang}_FLAGS${config}}" CMAKE_${lang}_FLAGS${config})
+ set(CMAKE_${lang}_FLAGS${config} "${CMAKE_${lang}_FLAGS${config}}" PARENT_SCOPE)
+ endforeach ()
+ endforeach()
+endfunction()
+
+# internal helper: _int_enable_warnings_set_flags(langs_var [warnings flags])
+macro(_int_enable_warnings_set_flags langs_var)
+ set(configs "NONE")
+ _int_enable_warnings_set_flags_ex(${langs_var} configs ${ARGN})
+endmacro()
+
+set(_flags_C)
+set(_flags_CXX)
+set(_debug_flags_C)
+set(_debug_flags_CXX)
+
+if (MSVC)
+ # Visual Studio uses a completely different nomenclature for warnings than gcc/mingw/clang, so none of the
+ # "-W[name]" warnings will work.
+
+ # W4 would be better but it produces unnecessary warnings like:
+ # * warning C4706: assignment within conditional expression
+ # Triggered when doing "while(1)"
+ # * warning C4115: 'timeval' : named type definition in parentheses
+ # * warning C4201: nonstandard extension used : nameless struct/union
+ # Triggered by system includes (commctrl.h, shtypes.h, Shlobj.h)
+ set(_flags
+ /W3
+ /we4013 # Treat "function undefined, assuming extern returning int" warning as an error. https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-3-c4013
+ )
+
+ # Disable some warnings to reduce noise level on visual studio.
+ if (NOT WIN32_STRICT_WARNINGS)
+ list(APPEND _flags
+ /wd4018 # Disable signed/unsigned mismatch warnings. https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-3-c4018
+ /wd4068 # Disable unknown pragma warning. https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-1-c4068
+ /wd4244 # Disable integer type conversion warnings. https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-levels-3-and-4-c4244
+ /wd4267 # Disable warnings about converting size_t to a smaller type. https://docs.microsoft.com/en-us/cpp/error-messages/compiler-warnings/compiler-warning-level-3-c4267
+ )
+ endif ()
+ list(APPEND _flags_C ${_flags})
+ list(APPEND _flags_CXX ${_flags})
+
+elseif (CMAKE_C_COMPILER_ID MATCHES "Intel")
+ # Intel's compiler warning flags are more like Visual Studio than GCC, though the numbers aren't the same.
+ set(_flags
+ # Use warning level 3, quite wordy.
+ -w3
+ # Disable warnings we don't care about (add more as they are encountered).
+ -wd383 # Spammy warning about initializing from a temporary object in C++ (which is done all the time ...).
+ -wd11074 # Diagnostic related to inlining.
+ -wd11076 # Diagnostic related to inlining.
+ )
+
+ list(APPEND _flags_C ${_flags})
+ list(APPEND _flags_CXX ${_flags})
+
+elseif (CMAKE_C_COMPILER_ID MATCHES "XL")
+ set (_flags
+ -qwarn64
+ -qformat=all
+ -qflag=i:i
+ )
+ list(APPEND _flags_C ${_flags})
+ list(APPEND _flags_CXX ${_flags})
+
+else ()
+ # If we're compiling with GCC / Clang / MinGW (or anything else besides Visual Studio or Intel):
+ # C Flags:
+ list(APPEND _flags_C
+ -Wall
+ -Wextra
+
+ # Enable additional warnings not covered by Wall and Wextra.
+ -Wcast-align
+ -Wconversion
+ -Wdeclaration-after-statement
+ -Wdouble-promotion
+ -Wfloat-equal
+ -Wformat-security
+ -Winit-self
+ -Wjump-misses-init
+ -Wlogical-op
+ -Wmissing-braces
+ -Wmissing-declarations
+ -Wmissing-format-attribute
+ -Wmissing-include-dirs
+ -Wmissing-prototypes
+ -Wnested-externs
+ -Wno-coverage-mismatch
+ -Wold-style-definition
+ -Wpacked
+ -Wpointer-arith
+ -Wredundant-decls
+ -Wshadow
+ -Wsign-conversion
+ -Wstrict-overflow
+ -Wstrict-prototypes
+ -Wtrampolines
+ -Wundef
+ -Wunused
+ -Wvariadic-macros
+ -Wvla
+ -Wwrite-strings
+
+ # On Windows MinGW I think implicit fallthrough enabled by -Wextra must not default to 3
+ -Wimplicit-fallthrough=3
+
+ # Treat implicit variable typing and implicit function declarations as errors.
+ -Werror=implicit-int
+ -Werror=implicit-function-declaration
+
+ # Make MacOSX honor -mmacosx-version-min
+ -Werror=partial-availability
+
+ # Some clang versions might warn if an argument like "-I/path/to/headers" is unused,
+ # silence these.
+ -Qunused-arguments
+ )
+
+ # C++ flags:
+ list(APPEND _flags_CXX
+ -Wall
+ -Wextra
+
+ # Enable additional warnings not covered by Wall and Wextra.
+ -Wcast-align
+ -Wformat-security
+ -Wmissing-declarations
+ -Wmissing-format-attribute
+ -Wpacked-bitfield-compat
+ -Wredundant-decls
+ -Wvla
+
+ # Turn off unused parameter warnings with C++ (they happen often in C++ and Qt).
+ -Wno-unused-parameter
+
+ # Some clang versions might warn if an argument like "-I/path/to/headers" is unused,
+ # silence these.
+ -Qunused-arguments
+ )
+
+ # Note: when cross-compiling to Windows from Cygwin, the Qt Mingw packages have a bunch of
+ # noisy type-conversion warnings in headers. So, only enable those warnings if we're
+ # not building that configuration.
+ if (NOT (WIN32 AND (CMAKE_HOST_SYSTEM_NAME MATCHES "CYGWIN")))
+ list(APPEND _flags_CXX
+ -Wconversion
+ -Wfloat-equal
+ -Wsign-conversion
+ )
+ endif ()
+
+ # Add flags to force colored output even when output is redirected via pipe.
+ if (CMAKE_GENERATOR MATCHES "Ninja")
+ set(color_default TRUE)
+ else ()
+ set(color_default FALSE)
+ endif ()
+ option(FORCE_COLOR "Force compiler to always colorize, even when output is redirected." ${color_default})
+ mark_as_advanced(FORCE FORCE_COLOR)
+ if (FORCE_COLOR)
+ set(_flags
+ -fdiagnostics-color=always # GCC
+ -fcolor-diagnostics # Clang
+ )
+ list(APPEND _flags_C ${_flags})
+ list(APPEND _flags_CXX ${_flags})
+ endif ()
+
+ # Add -fno-omit-frame-pointer (and optionally -fno-inline) to make debugging and stack dumps nicer.
+ set(_flags
+ -fno-omit-frame-pointer
+ )
+ option(M_NO_INLINE "Disable function inlining for RelWithDebInfo and Debug configurations?" FALSE)
+ if (M_NO_INLINE)
+ list(APPEND _flags
+ -fno-inline
+ )
+ endif ()
+ list(APPEND _debug_flags_C ${_flags})
+ list(APPEND _debug_flags_CXX ${_flags})
+endif ()
+
+# Check and set compiler flags.
+set(_debug_configs
+ RelWithDebInfo
+ Debug
+)
+foreach(_lang ${languages})
+ _int_enable_warnings_set_flags(_lang ${_flags_${_lang}})
+ _int_enable_warnings_set_flags_ex(_lang _debug_configs ${_debug_flags_${_lang}})
+
+ # Ensure pure Debug builds are NOT optimized (not possible on Visual Studio).
+ # Any optimization of a Debug build will prevent debuggers like lldb from
+ # fully displaying backtraces and stepping.
+ if (NOT MSVC)
+ set(_config Debug)
+ _int_enable_warnings_set_flags_ex(_lang _config -O0)
+ endif ()
+endforeach()
+
+
+
+# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+# Helper functions
+
+
+# This function can be called in subdirectories, to prune out warnings that they don't want.
+# vararg: warning flags to remove from list of enabled warnings. All "no" flags after EXPLICIT_DISABLE
+# will be added to C flags.
+#
+# Ex.: remove_warnings(-Wall -Wdouble-promotion -Wcomment) prunes those warnings flags from the compile command.
+function(remove_warnings)
+ get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
+ set(langs C)
+ if ("CXX" IN_LIST languages)
+ list(APPEND langs CXX)
+ endif ()
+
+ foreach(lang ${langs})
+ set(toadd)
+ set(in_explicit_disable FALSE)
+ foreach (flag ${ARGN})
+ if (flag STREQUAL "EXPLICIT_DISABLE")
+ set(in_explicit_disable TRUE)
+ elseif (in_explicit_disable)
+ list(APPEND toadd "${flag}")
+ else ()
+ string(REGEX REPLACE "${flag}([ \t]+|$)" "" CMAKE_${lang}_FLAGS "${CMAKE_${lang}_FLAGS}")
+ endif ()
+ endforeach ()
+ _int_enable_warnings_set_flags(lang ${toadd})
+ string(STRIP "${CMAKE_${lang}_FLAGS}" CMAKE_${lang}_FLAGS)
+ set(CMAKE_${lang}_FLAGS "${CMAKE_${lang}_FLAGS}" PARENT_SCOPE)
+ endforeach()
+endfunction()
+
+
+# Explicitly suppress all warnings. As long as this flag is the last warning flag, warnings will be
+# suppressed even if earlier flags enabled warnings.
+function(remove_all_warnings)
+ get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
+ set(langs C)
+ if ("CXX" IN_LIST languages)
+ list(APPEND langs CXX)
+ endif ()
+
+ foreach(lang ${langs})
+ string(REGEX REPLACE "[-/][Ww][^ \t]*([ \t]+|$)" "" CMAKE_${lang}_FLAGS "${CMAKE_${lang}_FLAGS}")
+ if (MSVC)
+ string(APPEND CMAKE_${lang}_FLAGS " /w")
+ else ()
+ string(APPEND CMAKE_${lang}_FLAGS " -w")
+ endif ()
+ string(STRIP "${CMAKE_${lang}_FLAGS}" CMAKE_${lang}_FLAGS)
+ set(CMAKE_${lang}_FLAGS "${CMAKE_${lang}_FLAGS}" PARENT_SCOPE)
+ endforeach()
+endfunction()
+
+
+function(remove_all_warnings_from_targets)
+ foreach (target ${ARGN})
+ if (MSVC)
+ target_compile_options(${target} PRIVATE "/w")
+ else ()
+ target_compile_options(${target} PRIVATE "-w")
+ endif ()
+ endforeach()
+endfunction()
+
+
+# Save the current warning settings to an internal variable.
+function(push_warnings)
+ get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
+ set(langs C)
+ if ("CXX" IN_LIST languages)
+ list(APPEND langs CXX)
+ endif ()
+
+ foreach(lang ${langs})
+ if (CMAKE_${lang}_FLAGS MATCHES ";")
+ message(AUTHOR_WARNING "Cannot push warnings for ${lang}, CMAKE_${lang}_FLAGS contains semicolons")
+ continue()
+ endif ()
+ # Add current flags to end of internal list.
+ list(APPEND _enable_warnings_internal_${lang}_flags_stack "${CMAKE_${lang}_FLAGS}")
+ # Propagate results up to caller's scope.
+ set(_enable_warnings_internal_${lang}_flags_stack "${_enable_warnings_internal_${lang}_flags_stack}" PARENT_SCOPE)
+ endforeach()
+endfunction()
+
+
+# Restore the current warning settings from an internal variable.
+function(pop_warnings)
+ get_property(languages GLOBAL PROPERTY ENABLED_LANGUAGES)
+ set(langs C)
+ if ("CXX" IN_LIST languages)
+ list(APPEND langs CXX)
+ endif ()
+
+ foreach(lang ${langs})
+ if (NOT _enable_warnings_internal_${lang}_flags_stack)
+ continue()
+ endif ()
+ # Pop flags off of end of list, overwrite current flags with whatever we popped off.
+ list(GET _enable_warnings_internal_${lang}_flags_stack -1 CMAKE_${lang}_FLAGS)
+ list(REMOVE_AT _enable_warnings_internal_${lang}_flags_stack -1)
+ # Propagate results up to caller's scope.
+ set(_enable_warnings_internal_${lang}_flags_stack "${_enable_warnings_internal_${lang}_flags_stack}" PARENT_SCOPE)
+ string(STRIP "${CMAKE_${lang}_FLAGS}" CMAKE_${lang}_FLAGS)
+ set(CMAKE_${lang}_FLAGS "${CMAKE_${lang}_FLAGS}" PARENT_SCOPE)
+ endforeach()
+endfunction()
diff --git a/config.guess b/config.guess
index f50dcdb..7f76b62 100755
--- a/config.guess
+++ b/config.guess
@@ -1,12 +1,14 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2018 Free Software Foundation, Inc.
+# Copyright 1992-2022 Free Software Foundation, Inc.
-timestamp='2018-02-24'
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2022-01-09'
# 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
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
@@ -27,11 +29,19 @@ timestamp='2018-02-24'
# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
#
# You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
#
# Please send patches to <config-patches@gnu.org>.
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX. However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
+
me=`echo "$0" | sed -e 's,.*/,,'`
usage="\
@@ -50,7 +60,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2018 Free Software Foundation, Inc.
+Copyright 1992-2022 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."
@@ -84,7 +94,8 @@ if test $# != 0; then
exit 1
fi
-trap 'exit 1' 1 2 15
+# Just in case it came from the environment.
+GUESS=
# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
# compiler to aid in system detection is discouraged as it requires
@@ -96,73 +107,90 @@ trap 'exit 1' 1 2 15
# Portable tmp directory creation inspired by the Autoconf team.
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,) echo "int x;" > "$dummy.c" ;
- for c in cc gcc c89 c99 ; do
- if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$c"; break ;
- fi ;
- done ;
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found ;
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
+tmp=
+# shellcheck disable=SC2172
+trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15
+
+set_cc_for_build() {
+ # prevent multiple calls if $tmp is already set
+ test "$tmp" && return 0
+ : "${TMPDIR=/tmp}"
+ # shellcheck disable=SC2039,SC3028
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
+ dummy=$tmp/dummy
+ case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
+ ,,) echo "int x;" > "$dummy.c"
+ for driver in cc gcc c89 c99 ; do
+ if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
+ CC_FOR_BUILD=$driver
+ break
+ fi
+ done
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+ esac
+}
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+if test -f /.attbin/uname ; then
PATH=$PATH:/.attbin ; export PATH
fi
UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-case "$UNAME_SYSTEM" in
+case $UNAME_SYSTEM in
Linux|GNU|GNU/*)
- # If the system lacks a compiler, then just pick glibc.
- # We could probably try harder.
- LIBC=gnu
+ LIBC=unknown
- eval "$set_cc_for_build"
+ set_cc_for_build
cat <<-EOF > "$dummy.c"
#include <features.h>
#if defined(__UCLIBC__)
LIBC=uclibc
#elif defined(__dietlibc__)
LIBC=dietlibc
- #else
+ #elif defined(__GLIBC__)
LIBC=gnu
+ #else
+ #include <stdarg.h>
+ /* First heuristic to detect musl libc. */
+ #ifdef __DEFINED_va_list
+ LIBC=musl
+ #endif
#endif
EOF
- eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
+ cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+ eval "$cc_set_libc"
- # If ldd exists, use it to detect musl libc.
- if command -v ldd >/dev/null && \
- ldd --version 2>&1 | grep -q ^musl
- then
- LIBC=musl
+ # Second heuristic to detect musl libc.
+ if [ "$LIBC" = unknown ] &&
+ command -v ldd >/dev/null &&
+ ldd --version 2>&1 | grep -q ^musl; then
+ LIBC=musl
+ fi
+
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ if [ "$LIBC" = unknown ]; then
+ LIBC=gnu
fi
;;
esac
# Note: order is significant - the case branches are not exclusive.
-case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
+case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in
*:NetBSD:*:*)
# NetBSD (nbsd) targets should (where applicable) match one or
# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
@@ -174,12 +202,12 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
#
# Note: NetBSD doesn't particularly care about the vendor
# portion of the name. We always set it to "unknown".
- sysctl="sysctl -n hw.machine_arch"
UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
- "/sbin/$sysctl" 2>/dev/null || \
- "/usr/sbin/$sysctl" 2>/dev/null || \
+ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \
+ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \
echo unknown)`
- case "$UNAME_MACHINE_ARCH" in
+ case $UNAME_MACHINE_ARCH in
+ aarch64eb) machine=aarch64_be-unknown ;;
armeb) machine=armeb-unknown ;;
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
@@ -188,18 +216,18 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
earmv*)
arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
- machine="${arch}${endian}"-unknown
+ machine=${arch}${endian}-unknown
;;
- *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
+ *) machine=$UNAME_MACHINE_ARCH-unknown ;;
esac
# The Operating System including object format, if it has switched
# to ELF recently (or will in the future) and ABI.
- case "$UNAME_MACHINE_ARCH" in
+ case $UNAME_MACHINE_ARCH in
earm*)
os=netbsdelf
;;
arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- eval "$set_cc_for_build"
+ set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ELF__
then
@@ -215,7 +243,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
;;
esac
# Determine ABI tags.
- case "$UNAME_MACHINE_ARCH" in
+ case $UNAME_MACHINE_ARCH in
earm*)
expr='s/^earmv[0-9]/-eabi/;s/eb$//'
abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
@@ -226,7 +254,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# thus, need a distinct triplet. However, they do not need
# kernel version information, so it can be replaced with a
# suitable tag, in the style of linux-gnu.
- case "$UNAME_VERSION" in
+ case $UNAME_VERSION in
Debian*)
release='-gnu'
;;
@@ -237,45 +265,57 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "$machine-${os}${release}${abi}"
- exit ;;
+ GUESS=$machine-${os}${release}${abi-}
+ ;;
*:Bitrig:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
- echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE
+ ;;
*:OpenBSD:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
- echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE
+ ;;
+ *:SecBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE
+ ;;
*:LibertyBSD:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
- echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE
+ ;;
*:MidnightBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE
+ ;;
*:ekkoBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE
+ ;;
*:SolidBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE
+ ;;
+ *:OS108:*:*)
+ GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE
+ ;;
macppc:MirBSD:*:*)
- echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE
+ ;;
*:MirBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE
+ ;;
*:Sortix:*:*)
- echo "$UNAME_MACHINE"-unknown-sortix
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-sortix
+ ;;
+ *:Twizzler:*:*)
+ GUESS=$UNAME_MACHINE-unknown-twizzler
+ ;;
*:Redox:*:*)
- echo "$UNAME_MACHINE"-unknown-redox
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-redox
+ ;;
mips:OSF1:*.*)
- echo mips-dec-osf1
- exit ;;
+ GUESS=mips-dec-osf1
+ ;;
alpha:OSF1:*:*)
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ trap '' 0
case $UNAME_RELEASE in
*4.0)
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
@@ -289,7 +329,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# covers most systems running today. This code pipes the CPU
# types through head -n 1, so we only detect the type of CPU 0.
ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
- case "$ALPHA_CPU_TYPE" in
+ case $ALPHA_CPU_TYPE in
"EV4 (21064)")
UNAME_MACHINE=alpha ;;
"EV4.5 (21064)")
@@ -326,117 +366,121 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# A Tn.n version is a released field test version.
# A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r.
- echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`"
- # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
- exitcode=$?
- trap '' 0
- exit $exitcode ;;
+ OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+ GUESS=$UNAME_MACHINE-dec-osf$OSF_REL
+ ;;
Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit ;;
+ GUESS=m68k-unknown-sysv4
+ ;;
*:[Aa]miga[Oo][Ss]:*:*)
- echo "$UNAME_MACHINE"-unknown-amigaos
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-amigaos
+ ;;
*:[Mm]orph[Oo][Ss]:*:*)
- echo "$UNAME_MACHINE"-unknown-morphos
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-morphos
+ ;;
*:OS/390:*:*)
- echo i370-ibm-openedition
- exit ;;
+ GUESS=i370-ibm-openedition
+ ;;
*:z/VM:*:*)
- echo s390-ibm-zvmoe
- exit ;;
+ GUESS=s390-ibm-zvmoe
+ ;;
*:OS400:*:*)
- echo powerpc-ibm-os400
- exit ;;
+ GUESS=powerpc-ibm-os400
+ ;;
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix"$UNAME_RELEASE"
- exit ;;
+ GUESS=arm-acorn-riscix$UNAME_RELEASE
+ ;;
arm*:riscos:*:*|arm*:RISCOS:*:*)
- echo arm-unknown-riscos
- exit ;;
+ GUESS=arm-unknown-riscos
+ ;;
SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit ;;
+ GUESS=hppa1.1-hitachi-hiuxmpp
+ ;;
Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit ;;
+ case `(/bin/universe) 2>/dev/null` in
+ att) GUESS=pyramid-pyramid-sysv3 ;;
+ *) GUESS=pyramid-pyramid-bsd ;;
+ esac
+ ;;
NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit ;;
+ GUESS=pyramid-pyramid-svr4
+ ;;
DRS?6000:unix:4.0:6*)
- echo sparc-icl-nx6
- exit ;;
+ GUESS=sparc-icl-nx6
+ ;;
DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
case `/usr/bin/uname -p` in
- sparc) echo sparc-icl-nx7; exit ;;
- esac ;;
+ sparc) GUESS=sparc-icl-nx7 ;;
+ esac
+ ;;
s390x:SunOS:*:*)
- echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL
+ ;;
sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-hal-solaris2$SUN_REL
+ ;;
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-sun-solaris2$SUN_REL
+ ;;
i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
- echo i386-pc-auroraux"$UNAME_RELEASE"
- exit ;;
+ GUESS=i386-pc-auroraux$UNAME_RELEASE
+ ;;
i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
- eval "$set_cc_for_build"
+ set_cc_for_build
SUN_ARCH=i386
# If there is a compiler, see if it is configured for 64-bit objects.
# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
# This test works for both compilers.
- if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \
grep IS_64BIT_ARCH >/dev/null
then
SUN_ARCH=x86_64
fi
fi
- echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=$SUN_ARCH-pc-solaris2$SUN_REL
+ ;;
sun4*:SunOS:6*:*)
# According to config.sub, this is the proper way to canonicalize
# SunOS6. Hard to guess exactly what SunOS6 will be like, but
# it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-sun-solaris3$SUN_REL
+ ;;
sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
+ case `/usr/bin/arch -k` in
Series*|S4*)
UNAME_RELEASE=`uname -v`
;;
esac
# Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'`
+ GUESS=sparc-sun-sunos$SUN_REL
+ ;;
sun3*:SunOS:*:*)
- echo m68k-sun-sunos"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-sun-sunos$UNAME_RELEASE
+ ;;
sun*:*:4.2BSD:*)
UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
- case "`/bin/arch`" in
+ case `/bin/arch` in
sun3)
- echo m68k-sun-sunos"$UNAME_RELEASE"
+ GUESS=m68k-sun-sunos$UNAME_RELEASE
;;
sun4)
- echo sparc-sun-sunos"$UNAME_RELEASE"
+ GUESS=sparc-sun-sunos$UNAME_RELEASE
;;
esac
- exit ;;
+ ;;
aushp:SunOS:*:*)
- echo sparc-auspex-sunos"$UNAME_RELEASE"
- exit ;;
+ GUESS=sparc-auspex-sunos$UNAME_RELEASE
+ ;;
# The situation for MiNT is a little confusing. The machine name
# can be virtually everything (everything which is not
# "atarist" or "atariste" at least should have a processor
@@ -446,43 +490,43 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# MiNT. But MiNT is downward compatible to TOS, so this should
# be no problem.
atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
*falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-milan-mint$UNAME_RELEASE
+ ;;
hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-hades-mint$UNAME_RELEASE
+ ;;
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-unknown-mint$UNAME_RELEASE
+ ;;
m68k:machten:*:*)
- echo m68k-apple-machten"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-apple-machten$UNAME_RELEASE
+ ;;
powerpc:machten:*:*)
- echo powerpc-apple-machten"$UNAME_RELEASE"
- exit ;;
+ GUESS=powerpc-apple-machten$UNAME_RELEASE
+ ;;
RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit ;;
+ GUESS=mips-dec-mach_bsd4.3
+ ;;
RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix"$UNAME_RELEASE"
- exit ;;
+ GUESS=mips-dec-ultrix$UNAME_RELEASE
+ ;;
VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix"$UNAME_RELEASE"
- exit ;;
+ GUESS=vax-dec-ultrix$UNAME_RELEASE
+ ;;
2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix"$UNAME_RELEASE"
- exit ;;
+ GUESS=clipper-intergraph-clix$UNAME_RELEASE
+ ;;
mips:*:*:UMIPS | mips:*:*:RISCos)
- eval "$set_cc_for_build"
+ set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
#ifdef __cplusplus
#include <stdio.h> /* for printf() prototype */
@@ -508,78 +552,79 @@ EOF
dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
{ echo "$SYSTEM_NAME"; exit; }
- echo mips-mips-riscos"$UNAME_RELEASE"
- exit ;;
+ GUESS=mips-mips-riscos$UNAME_RELEASE
+ ;;
Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit ;;
+ GUESS=powerpc-motorola-powermax
+ ;;
Motorola:*:4.3:PL8-*)
- echo powerpc-harris-powermax
- exit ;;
+ GUESS=powerpc-harris-powermax
+ ;;
Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- echo powerpc-harris-powermax
- exit ;;
+ GUESS=powerpc-harris-powermax
+ ;;
Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit ;;
+ GUESS=powerpc-harris-powerunix
+ ;;
m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit ;;
+ GUESS=m88k-harris-cxux7
+ ;;
m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit ;;
+ GUESS=m88k-motorola-sysv4
+ ;;
m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit ;;
+ GUESS=m88k-motorola-sysv3
+ ;;
AViiON:dgux:*:*)
# DG/UX returns AViiON for all architectures
UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ]
+ if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110
then
- if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \
- [ "$TARGET_BINARY_INTERFACE"x = x ]
+ if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \
+ test "$TARGET_BINARY_INTERFACE"x = x
then
- echo m88k-dg-dgux"$UNAME_RELEASE"
+ GUESS=m88k-dg-dgux$UNAME_RELEASE
else
- echo m88k-dg-dguxbcs"$UNAME_RELEASE"
+ GUESS=m88k-dg-dguxbcs$UNAME_RELEASE
fi
else
- echo i586-dg-dgux"$UNAME_RELEASE"
+ GUESS=i586-dg-dgux$UNAME_RELEASE
fi
- exit ;;
+ ;;
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit ;;
+ GUESS=m88k-dolphin-sysv3
+ ;;
M88*:*:R3*:*)
# Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit ;;
+ GUESS=m88k-motorola-sysv3
+ ;;
XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit ;;
+ GUESS=m88k-tektronix-sysv3
+ ;;
Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit ;;
+ GUESS=m68k-tektronix-bsd
+ ;;
*:IRIX*:*:*)
- echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`"
- exit ;;
+ IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'`
+ GUESS=mips-sgi-irix$IRIX_REL
+ ;;
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ ;; # Note that: echo "'`uname -s`'" gives 'AIX '
i*86:AIX:*:*)
- echo i386-ibm-aix
- exit ;;
+ GUESS=i386-ibm-aix
+ ;;
ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
+ if test -x /usr/bin/oslevel ; then
IBM_REV=`/usr/bin/oslevel`
else
- IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+ IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
fi
- echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV"
- exit ;;
+ GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV
+ ;;
*:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- eval "$set_cc_for_build"
+ set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
#include <sys/systemcfg.h>
@@ -593,16 +638,16 @@ EOF
EOF
if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
then
- echo "$SYSTEM_NAME"
+ GUESS=$SYSTEM_NAME
else
- echo rs6000-ibm-aix3.2.5
+ GUESS=rs6000-ibm-aix3.2.5
fi
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
+ GUESS=rs6000-ibm-aix3.2.4
else
- echo rs6000-ibm-aix3.2
+ GUESS=rs6000-ibm-aix3.2
fi
- exit ;;
+ ;;
*:AIX:*:[4567])
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
@@ -610,57 +655,57 @@ EOF
else
IBM_ARCH=powerpc
fi
- if [ -x /usr/bin/lslpp ] ; then
- IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+ if test -x /usr/bin/lslpp ; then
+ IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \
awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
else
- IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+ IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
fi
- echo "$IBM_ARCH"-ibm-aix"$IBM_REV"
- exit ;;
+ GUESS=$IBM_ARCH-ibm-aix$IBM_REV
+ ;;
*:AIX:*:*)
- echo rs6000-ibm-aix
- exit ;;
+ GUESS=rs6000-ibm-aix
+ ;;
ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
- echo romp-ibm-bsd4.4
- exit ;;
+ GUESS=romp-ibm-bsd4.4
+ ;;
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to
- exit ;; # report: romp-ibm BSD 4.3
+ GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to
+ ;; # report: romp-ibm BSD 4.3
*:BOSX:*:*)
- echo rs6000-bull-bosx
- exit ;;
+ GUESS=rs6000-bull-bosx
+ ;;
DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit ;;
+ GUESS=m68k-bull-sysv3
+ ;;
9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit ;;
+ GUESS=m68k-hp-bsd
+ ;;
hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit ;;
+ GUESS=m68k-hp-bsd4.4
+ ;;
9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
- case "$UNAME_MACHINE" in
+ HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+ case $UNAME_MACHINE in
9000/31?) HP_ARCH=m68000 ;;
9000/[34]??) HP_ARCH=m68k ;;
9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
+ if test -x /usr/bin/getconf; then
sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "$sc_cpu_version" in
+ case $sc_cpu_version in
523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
532) # CPU_PA_RISC2_0
- case "$sc_kernel_bits" in
+ case $sc_kernel_bits in
32) HP_ARCH=hppa2.0n ;;
64) HP_ARCH=hppa2.0w ;;
'') HP_ARCH=hppa2.0 ;; # HP-UX 10.20
esac ;;
esac
fi
- if [ "$HP_ARCH" = "" ]; then
- eval "$set_cc_for_build"
+ if test "$HP_ARCH" = ""; then
+ set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
#define _HPUX_SOURCE
@@ -698,9 +743,9 @@ EOF
test -z "$HP_ARCH" && HP_ARCH=hppa
fi ;;
esac
- if [ "$HP_ARCH" = hppa2.0w ]
+ if test "$HP_ARCH" = hppa2.0w
then
- eval "$set_cc_for_build"
+ set_cc_for_build
# hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
# 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
@@ -719,14 +764,14 @@ EOF
HP_ARCH=hppa64
fi
fi
- echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
- exit ;;
+ GUESS=$HP_ARCH-hp-hpux$HPUX_REV
+ ;;
ia64:HP-UX:*:*)
- HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux"$HPUX_REV"
- exit ;;
+ HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+ GUESS=ia64-hp-hpux$HPUX_REV
+ ;;
3050*:HI-UX:*:*)
- eval "$set_cc_for_build"
+ set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
#include <unistd.h>
int
@@ -754,36 +799,36 @@ EOF
EOF
$CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
{ echo "$SYSTEM_NAME"; exit; }
- echo unknown-hitachi-hiuxwe2
- exit ;;
+ GUESS=unknown-hitachi-hiuxwe2
+ ;;
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
- echo hppa1.1-hp-bsd
- exit ;;
+ GUESS=hppa1.1-hp-bsd
+ ;;
9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit ;;
+ GUESS=hppa1.0-hp-bsd
+ ;;
*9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit ;;
+ GUESS=hppa1.0-hp-mpeix
+ ;;
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
- echo hppa1.1-hp-osf
- exit ;;
+ GUESS=hppa1.1-hp-osf
+ ;;
hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit ;;
+ GUESS=hppa1.0-hp-osf
+ ;;
i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo "$UNAME_MACHINE"-unknown-osf1mk
+ if test -x /usr/sbin/sysversion ; then
+ GUESS=$UNAME_MACHINE-unknown-osf1mk
else
- echo "$UNAME_MACHINE"-unknown-osf1
+ GUESS=$UNAME_MACHINE-unknown-osf1
fi
- exit ;;
+ ;;
parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit ;;
+ GUESS=hppa1.1-hp-lites
+ ;;
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit ;;
+ GUESS=c1-convex-bsd
+ ;;
C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
if getsysinfo -f scalar_acc
then echo c32-convex-bsd
@@ -791,17 +836,18 @@ EOF
fi
exit ;;
C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit ;;
+ GUESS=c34-convex-bsd
+ ;;
C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit ;;
+ GUESS=c38-convex-bsd
+ ;;
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit ;;
+ GUESS=c4-convex-bsd
+ ;;
CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=ymp-cray-unicos$CRAY_REL
+ ;;
CRAY*[A-Z]90:*:*:*)
echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
@@ -809,103 +855,129 @@ EOF
-e 's/\.[^.]*$/.X/'
exit ;;
CRAY*TS:*:*:*)
- echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=t90-cray-unicos$CRAY_REL
+ ;;
CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=alphaev5-cray-unicosmk$CRAY_REL
+ ;;
CRAY*SV1:*:*:*)
- echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=sv1-cray-unicos$CRAY_REL
+ ;;
*:UNICOS/mp:*:*)
- echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=craynv-cray-unicosmp$CRAY_REL
+ ;;
F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
+ GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+ ;;
5000:UNIX_System_V:4.*:*)
FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
+ GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+ ;;
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE
+ ;;
sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi"$UNAME_RELEASE"
- exit ;;
+ GUESS=sparc-unknown-bsdi$UNAME_RELEASE
+ ;;
*:BSD/OS:*:*)
- echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE
+ ;;
+ arm:FreeBSD:*:*)
+ UNAME_PROCESSOR=`uname -p`
+ set_cc_for_build
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi
+ else
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf
+ fi
+ ;;
*:FreeBSD:*:*)
UNAME_PROCESSOR=`/usr/bin/uname -p`
- case "$UNAME_PROCESSOR" in
+ case $UNAME_PROCESSOR in
amd64)
UNAME_PROCESSOR=x86_64 ;;
i386)
UNAME_PROCESSOR=i586 ;;
esac
- echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
- exit ;;
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL
+ ;;
i*:CYGWIN*:*)
- echo "$UNAME_MACHINE"-pc-cygwin
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-cygwin
+ ;;
*:MINGW64*:*)
- echo "$UNAME_MACHINE"-pc-mingw64
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-mingw64
+ ;;
*:MINGW*:*)
- echo "$UNAME_MACHINE"-pc-mingw32
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-mingw32
+ ;;
*:MSYS*:*)
- echo "$UNAME_MACHINE"-pc-msys
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-msys
+ ;;
i*:PW*:*)
- echo "$UNAME_MACHINE"-pc-pw32
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-pw32
+ ;;
+ *:SerenityOS:*:*)
+ GUESS=$UNAME_MACHINE-pc-serenity
+ ;;
*:Interix*:*)
- case "$UNAME_MACHINE" in
+ case $UNAME_MACHINE in
x86)
- echo i586-pc-interix"$UNAME_RELEASE"
- exit ;;
+ GUESS=i586-pc-interix$UNAME_RELEASE
+ ;;
authenticamd | genuineintel | EM64T)
- echo x86_64-unknown-interix"$UNAME_RELEASE"
- exit ;;
+ GUESS=x86_64-unknown-interix$UNAME_RELEASE
+ ;;
IA64)
- echo ia64-unknown-interix"$UNAME_RELEASE"
- exit ;;
+ GUESS=ia64-unknown-interix$UNAME_RELEASE
+ ;;
esac ;;
i*:UWIN*:*)
- echo "$UNAME_MACHINE"-pc-uwin
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-uwin
+ ;;
amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
- echo x86_64-unknown-cygwin
- exit ;;
+ GUESS=x86_64-pc-cygwin
+ ;;
prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=powerpcle-unknown-solaris2$SUN_REL
+ ;;
*:GNU:*:*)
# the GNU system
- echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`"
- exit ;;
+ GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'`
+ GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'`
+ GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL
+ ;;
*:GNU/*:*:*)
# other systems with GNU libc and userland
- echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
- exit ;;
- i*86:Minix:*:*)
- echo "$UNAME_MACHINE"-pc-minix
- exit ;;
+ GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"`
+ GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC
+ ;;
+ *:Minix:*:*)
+ GUESS=$UNAME_MACHINE-unknown-minix
+ ;;
aarch64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
aarch64_be:Linux:*:*)
UNAME_MACHINE=aarch64_be
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in
EV5) UNAME_MACHINE=alphaev5 ;;
EV56) UNAME_MACHINE=alphaev56 ;;
PCA56) UNAME_MACHINE=alphapca56 ;;
@@ -916,187 +988,225 @@ EOF
esac
objdump --private-headers /bin/sh | grep -q ld.so.1
if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- arc:Linux:*:* | arceb:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
arm*:Linux:*:*)
- eval "$set_cc_for_build"
+ set_cc_for_build
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_EABI__
then
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
else
if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_PCS_VFP
then
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi
+ GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi
else
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf
+ GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf
fi
fi
- exit ;;
+ ;;
avr32*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
cris:Linux:*:*)
- echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+ ;;
crisv32:Linux:*:*)
- echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+ ;;
e2k:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
frv:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
hexagon:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
i*86:Linux:*:*)
- echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-linux-$LIBC
+ ;;
ia64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
k1om:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
m32r*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
m68*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
mips:Linux:*:* | mips64:Linux:*:*)
- eval "$set_cc_for_build"
+ set_cc_for_build
+ IS_GLIBC=0
+ test x"${LIBC}" = xgnu && IS_GLIBC=1
sed 's/^ //' << EOF > "$dummy.c"
#undef CPU
- #undef ${UNAME_MACHINE}
- #undef ${UNAME_MACHINE}el
+ #undef mips
+ #undef mipsel
+ #undef mips64
+ #undef mips64el
+ #if ${IS_GLIBC} && defined(_ABI64)
+ LIBCABI=gnuabi64
+ #else
+ #if ${IS_GLIBC} && defined(_ABIN32)
+ LIBCABI=gnuabin32
+ #else
+ LIBCABI=${LIBC}
+ #endif
+ #endif
+
+ #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+ CPU=mipsisa64r6
+ #else
+ #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+ CPU=mipsisa32r6
+ #else
+ #if defined(__mips64)
+ CPU=mips64
+ #else
+ CPU=mips
+ #endif
+ #endif
+ #endif
+
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=${UNAME_MACHINE}el
+ MIPS_ENDIAN=el
#else
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=${UNAME_MACHINE}
+ MIPS_ENDIAN=
#else
- CPU=
+ MIPS_ENDIAN=
#endif
#endif
EOF
- eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`"
- test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; }
+ cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`
+ eval "$cc_set_vars"
+ test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
;;
mips64el:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
openrisc*:Linux:*:*)
- echo or1k-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=or1k-unknown-linux-$LIBC
+ ;;
or32:Linux:*:* | or1k*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
padre:Linux:*:*)
- echo sparc-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=sparc-unknown-linux-$LIBC
+ ;;
parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=hppa64-unknown-linux-$LIBC
+ ;;
parisc:Linux:*:* | hppa:Linux:*:*)
# Look for CPU level
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
- PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
- *) echo hppa-unknown-linux-"$LIBC" ;;
+ PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;;
+ PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;;
+ *) GUESS=hppa-unknown-linux-$LIBC ;;
esac
- exit ;;
+ ;;
ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=powerpc64-unknown-linux-$LIBC
+ ;;
ppc:Linux:*:*)
- echo powerpc-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=powerpc-unknown-linux-$LIBC
+ ;;
ppc64le:Linux:*:*)
- echo powerpc64le-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=powerpc64le-unknown-linux-$LIBC
+ ;;
ppcle:Linux:*:*)
- echo powerpcle-unknown-linux-"$LIBC"
- exit ;;
- riscv32:Linux:*:* | riscv64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=powerpcle-unknown-linux-$LIBC
+ ;;
+ riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
s390:Linux:*:* | s390x:Linux:*:*)
- echo "$UNAME_MACHINE"-ibm-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-ibm-linux-$LIBC
+ ;;
sh64*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
sh*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
sparc:Linux:*:* | sparc64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
tile*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
vax:Linux:*:*)
- echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-dec-linux-$LIBC
+ ;;
x86_64:Linux:*:*)
- if objdump -f /bin/sh | grep -q elf32-x86-64; then
- echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32
- else
- echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
+ set_cc_for_build
+ LIBCABI=$LIBC
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_X32 >/dev/null
+ then
+ LIBCABI=${LIBC}x32
+ fi
fi
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI
+ ;;
xtensa*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
i*86:DYNIX/ptx:4*:*)
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
# earlier versions are messed up and put the nodename in both
# sysname and nodename.
- echo i386-sequent-sysv4
- exit ;;
+ GUESS=i386-sequent-sysv4
+ ;;
i*86:UNIX_SV:4.2MP:2.*)
# Unixware is an offshoot of SVR4, but it has its own version
# number series starting with 2...
# I am not positive that other SVR4 systems won't match this,
# I just have to hope. -- rms.
# Use sysv4.2uw... so that sysv4* matches it.
- echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION"
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION
+ ;;
i*86:OS/2:*:*)
# If we were able to find `uname', then EMX Unix compatibility
# is probably installed.
- echo "$UNAME_MACHINE"-pc-os2-emx
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-os2-emx
+ ;;
i*86:XTS-300:*:STOP)
- echo "$UNAME_MACHINE"-unknown-stop
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-stop
+ ;;
i*86:atheos:*:*)
- echo "$UNAME_MACHINE"-unknown-atheos
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-atheos
+ ;;
i*86:syllable:*:*)
- echo "$UNAME_MACHINE"-pc-syllable
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-syllable
+ ;;
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
- echo i386-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=i386-unknown-lynxos$UNAME_RELEASE
+ ;;
i*86:*DOS:*:*)
- echo "$UNAME_MACHINE"-pc-msdosdjgpp
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-msdosdjgpp
+ ;;
i*86:*:4.*:*)
UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
+ GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL
else
- echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL"
+ GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL
fi
- exit ;;
+ ;;
i*86:*:5:[678]*)
# UnixWare 7.x, OpenUNIX and OpenServer 6.
case `/bin/uname -X | grep "^Machine"` in
@@ -1104,12 +1214,12 @@ EOF
*Pentium) UNAME_MACHINE=i586 ;;
*Pent*|*Celeron) UNAME_MACHINE=i686 ;;
esac
- echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ ;;
i*86:*:3.2:*)
if test -f /usr/options/cb.name; then
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
+ GUESS=$UNAME_MACHINE-pc-isc$UNAME_REL
elif /bin/uname -X 2>/dev/null >/dev/null ; then
UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
@@ -1119,11 +1229,11 @@ EOF
&& UNAME_MACHINE=i686
(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
&& UNAME_MACHINE=i686
- echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL"
+ GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL
else
- echo "$UNAME_MACHINE"-pc-sysv32
+ GUESS=$UNAME_MACHINE-pc-sysv32
fi
- exit ;;
+ ;;
pc:*:*:*)
# Left here for compatibility:
# uname -m prints for DJGPP always 'pc', but it prints nothing about
@@ -1131,31 +1241,31 @@ EOF
# Note: whatever this is, it MUST be the same as what config.sub
# prints for the "djgpp" host, or else GDB configure will decide that
# this is a cross-build.
- echo i586-pc-msdosdjgpp
- exit ;;
+ GUESS=i586-pc-msdosdjgpp
+ ;;
Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit ;;
+ GUESS=i386-pc-mach3
+ ;;
paragon:*:*:*)
- echo i860-intel-osf1
- exit ;;
+ GUESS=i860-intel-osf1
+ ;;
i860:*:4.*:*) # i860-SVR4
if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4
+ GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4
else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4
+ GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4
fi
- exit ;;
+ ;;
mini*:CTIX:SYS*5:*)
# "miniframe"
- echo m68010-convergent-sysv
- exit ;;
+ GUESS=m68010-convergent-sysv
+ ;;
mc68k:UNIX:SYSTEM5:3.51m)
- echo m68k-convergent-sysv
- exit ;;
+ GUESS=m68k-convergent-sysv
+ ;;
M680?0:D-NIX:5.3:*)
- echo m68k-diab-dnix
- exit ;;
+ GUESS=m68k-diab-dnix
+ ;;
M68*:*:R3V[5678]*:*)
test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
@@ -1180,249 +1290,404 @@ EOF
/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
&& { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-unknown-lynxos$UNAME_RELEASE
+ ;;
mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit ;;
+ GUESS=m68k-atari-sysv4
+ ;;
TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=sparc-unknown-lynxos$UNAME_RELEASE
+ ;;
rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=rs6000-unknown-lynxos$UNAME_RELEASE
+ ;;
PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
- echo powerpc-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=powerpc-unknown-lynxos$UNAME_RELEASE
+ ;;
SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv"$UNAME_RELEASE"
- exit ;;
+ GUESS=mips-dde-sysv$UNAME_RELEASE
+ ;;
RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
+ GUESS=mips-sni-sysv4
+ ;;
RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
+ GUESS=mips-sni-sysv4
+ ;;
*:SINIX-*:*:*)
if uname -p 2>/dev/null >/dev/null ; then
UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo "$UNAME_MACHINE"-sni-sysv4
+ GUESS=$UNAME_MACHINE-sni-sysv4
else
- echo ns32k-sni-sysv
+ GUESS=ns32k-sni-sysv
fi
- exit ;;
+ ;;
PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
# says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit ;;
+ GUESS=i586-unisys-sysv4
+ ;;
*:UNIX_System_V:4*:FTX*)
# From Gerald Hewes <hewes@openmarket.com>.
# How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit ;;
+ GUESS=hppa1.1-stratus-sysv4
+ ;;
*:*:*:FTX*)
# From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit ;;
+ GUESS=i860-stratus-sysv4
+ ;;
i*86:VOS:*:*)
# From Paul.Green@stratus.com.
- echo "$UNAME_MACHINE"-stratus-vos
- exit ;;
+ GUESS=$UNAME_MACHINE-stratus-vos
+ ;;
*:VOS:*:*)
# From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit ;;
+ GUESS=hppa1.1-stratus-vos
+ ;;
mc68*:A/UX:*:*)
- echo m68k-apple-aux"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-apple-aux$UNAME_RELEASE
+ ;;
news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit ;;
+ GUESS=mips-sony-newsos6
+ ;;
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv"$UNAME_RELEASE"
+ if test -d /usr/nec; then
+ GUESS=mips-nec-sysv$UNAME_RELEASE
else
- echo mips-unknown-sysv"$UNAME_RELEASE"
+ GUESS=mips-unknown-sysv$UNAME_RELEASE
fi
- exit ;;
+ ;;
BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit ;;
+ GUESS=powerpc-be-beos
+ ;;
BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit ;;
+ GUESS=powerpc-apple-beos
+ ;;
BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit ;;
+ GUESS=i586-pc-beos
+ ;;
BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
- echo i586-pc-haiku
- exit ;;
+ GUESS=i586-pc-haiku
+ ;;
x86_64:Haiku:*:*)
- echo x86_64-unknown-haiku
- exit ;;
+ GUESS=x86_64-unknown-haiku
+ ;;
SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx4-nec-superux$UNAME_RELEASE
+ ;;
SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx5-nec-superux$UNAME_RELEASE
+ ;;
SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx6-nec-superux$UNAME_RELEASE
+ ;;
SX-7:SUPER-UX:*:*)
- echo sx7-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx7-nec-superux$UNAME_RELEASE
+ ;;
SX-8:SUPER-UX:*:*)
- echo sx8-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx8-nec-superux$UNAME_RELEASE
+ ;;
SX-8R:SUPER-UX:*:*)
- echo sx8r-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx8r-nec-superux$UNAME_RELEASE
+ ;;
SX-ACE:SUPER-UX:*:*)
- echo sxace-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sxace-nec-superux$UNAME_RELEASE
+ ;;
Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody"$UNAME_RELEASE"
- exit ;;
+ GUESS=powerpc-apple-rhapsody$UNAME_RELEASE
+ ;;
*:Rhapsody:*:*)
- echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE
+ ;;
+ arm64:Darwin:*:*)
+ GUESS=aarch64-apple-darwin$UNAME_RELEASE
+ ;;
*:Darwin:*:*)
- UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- eval "$set_cc_for_build"
- if test "$UNAME_PROCESSOR" = unknown ; then
- UNAME_PROCESSOR=powerpc
+ UNAME_PROCESSOR=`uname -p`
+ case $UNAME_PROCESSOR in
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ if command -v xcode-select > /dev/null 2> /dev/null && \
+ ! xcode-select --print-path > /dev/null 2> /dev/null ; then
+ # Avoid executing cc if there is no toolchain installed as
+ # cc will be a stub that puts up a graphical alert
+ # prompting the user to install developer tools.
+ CC_FOR_BUILD=no_compiler_found
+ else
+ set_cc_for_build
fi
- if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then
- if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
- if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- case $UNAME_PROCESSOR in
- i386) UNAME_PROCESSOR=x86_64 ;;
- powerpc) UNAME_PROCESSOR=powerpc64 ;;
- esac
- fi
- # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
- if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_PPC >/dev/null
- then
- UNAME_PROCESSOR=powerpc
- fi
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+ if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_PPC >/dev/null
+ then
+ UNAME_PROCESSOR=powerpc
fi
elif test "$UNAME_PROCESSOR" = i386 ; then
- # Avoid executing cc on OS X 10.9, as it ships with a stub
- # that puts up a graphical alert prompting to install
- # developer tools. Any system running Mac OS X 10.7 or
- # later (Darwin 11 and later) is required to have a 64-bit
- # processor. This is not true of the ARM version of Darwin
- # that Apple uses in portable devices.
- UNAME_PROCESSOR=x86_64
+ # uname -m returns i386 or x86_64
+ UNAME_PROCESSOR=$UNAME_MACHINE
fi
- echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE
+ ;;
*:procnto*:*:* | *:QNX:[0123456789]*:*)
UNAME_PROCESSOR=`uname -p`
if test "$UNAME_PROCESSOR" = x86; then
UNAME_PROCESSOR=i386
UNAME_MACHINE=pc
fi
- echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE
+ ;;
*:QNX:*:4*)
- echo i386-pc-qnx
- exit ;;
+ GUESS=i386-pc-qnx
+ ;;
NEO-*:NONSTOP_KERNEL:*:*)
- echo neo-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=neo-tandem-nsk$UNAME_RELEASE
+ ;;
NSE-*:NONSTOP_KERNEL:*:*)
- echo nse-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=nse-tandem-nsk$UNAME_RELEASE
+ ;;
NSR-*:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=nsr-tandem-nsk$UNAME_RELEASE
+ ;;
NSV-*:NONSTOP_KERNEL:*:*)
- echo nsv-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=nsv-tandem-nsk$UNAME_RELEASE
+ ;;
NSX-*:NONSTOP_KERNEL:*:*)
- echo nsx-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=nsx-tandem-nsk$UNAME_RELEASE
+ ;;
*:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit ;;
+ GUESS=mips-compaq-nonstopux
+ ;;
BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit ;;
+ GUESS=bs2000-siemens-sysv
+ ;;
DS/*:UNIX_System_V:*:*)
- echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE
+ ;;
*:Plan9:*:*)
# "uname -m" is not consistent, so use $cputype instead. 386
# is converted to i386 for consistency with other x86
# operating systems.
- if test "$cputype" = 386; then
+ if test "${cputype-}" = 386; then
UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
+ elif test "x${cputype-}" != x; then
+ UNAME_MACHINE=$cputype
fi
- echo "$UNAME_MACHINE"-unknown-plan9
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-plan9
+ ;;
*:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit ;;
+ GUESS=pdp10-unknown-tops10
+ ;;
*:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit ;;
+ GUESS=pdp10-unknown-tenex
+ ;;
KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit ;;
+ GUESS=pdp10-dec-tops20
+ ;;
XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit ;;
+ GUESS=pdp10-xkl-tops20
+ ;;
*:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit ;;
+ GUESS=pdp10-unknown-tops20
+ ;;
*:ITS:*:*)
- echo pdp10-unknown-its
- exit ;;
+ GUESS=pdp10-unknown-its
+ ;;
SEI:*:*:SEIUX)
- echo mips-sei-seiux"$UNAME_RELEASE"
- exit ;;
+ GUESS=mips-sei-seiux$UNAME_RELEASE
+ ;;
*:DragonFly:*:*)
- echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
- exit ;;
+ DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL
+ ;;
*:*VMS:*:*)
UNAME_MACHINE=`(uname -p) 2>/dev/null`
- case "$UNAME_MACHINE" in
- A*) echo alpha-dec-vms ; exit ;;
- I*) echo ia64-dec-vms ; exit ;;
- V*) echo vax-dec-vms ; exit ;;
+ case $UNAME_MACHINE in
+ A*) GUESS=alpha-dec-vms ;;
+ I*) GUESS=ia64-dec-vms ;;
+ V*) GUESS=vax-dec-vms ;;
esac ;;
*:XENIX:*:SysV)
- echo i386-pc-xenix
- exit ;;
+ GUESS=i386-pc-xenix
+ ;;
i*86:skyos:*:*)
- echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`"
- exit ;;
+ SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`
+ GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL
+ ;;
i*86:rdos:*:*)
- echo "$UNAME_MACHINE"-pc-rdos
- exit ;;
- i*86:AROS:*:*)
- echo "$UNAME_MACHINE"-pc-aros
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-rdos
+ ;;
+ i*86:Fiwix:*:*)
+ GUESS=$UNAME_MACHINE-pc-fiwix
+ ;;
+ *:AROS:*:*)
+ GUESS=$UNAME_MACHINE-unknown-aros
+ ;;
x86_64:VMkernel:*:*)
- echo "$UNAME_MACHINE"-unknown-esx
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-esx
+ ;;
amd64:Isilon\ OneFS:*:*)
- echo x86_64-unknown-onefs
- exit ;;
+ GUESS=x86_64-unknown-onefs
+ ;;
+ *:Unleashed:*:*)
+ GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE
+ ;;
esac
+# Do we have a guess based on uname results?
+if test "x$GUESS" != x; then
+ echo "$GUESS"
+ exit
+fi
+
+# No uname command or uname output not recognized.
+set_cc_for_build
+cat > "$dummy.c" <<EOF
+#ifdef _SEQUENT_
+#include <sys/types.h>
+#include <sys/utsname.h>
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#include <signal.h>
+#if defined(_SIZE_T_) || defined(SIGLOST)
+#include <sys/utsname.h>
+#endif
+#endif
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+#endif
+
+#if defined (vax)
+#if !defined (ultrix)
+#include <sys/param.h>
+#if defined (BSD)
+#if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+#else
+#if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#else
+ printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#endif
+#else
+ printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#else
+#if defined(_SIZE_T_) || defined(SIGLOST)
+ struct utsname un;
+ uname (&un);
+ printf ("vax-dec-ultrix%s\n", un.release); exit (0);
+#else
+ printf ("vax-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#if defined(_SIZE_T_) || defined(SIGLOST)
+ struct utsname *un;
+ uname (&un);
+ printf ("mips-dec-ultrix%s\n", un.release); exit (0);
+#else
+ printf ("mips-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; }
+
echo "$0: unable to guess system type" >&2
-case "$UNAME_MACHINE:$UNAME_SYSTEM" in
+case $UNAME_MACHINE:$UNAME_SYSTEM in
mips:Linux | mips64:Linux)
# If we got here on MIPS GNU/Linux, output extra information.
cat >&2 <<EOF
@@ -1439,9 +1704,17 @@ This script (version $timestamp), has failed to recognize the
operating system you are using. If your script is old, overwrite *all*
copies of config.guess and config.sub with the latest versions from:
- https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+ https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
and
- https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+ https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
+EOF
+
+our_year=`echo $timestamp | sed 's,-.*,,'`
+thisyear=`date +%Y`
+# shellcheck disable=SC2003
+script_age=`expr "$thisyear" - "$our_year"`
+if test "$script_age" -lt 3 ; then
+ cat >&2 <<EOF
If $0 has already been updated, send the following data and any
information you think might be pertinent to config-patches@gnu.org to
@@ -1469,11 +1742,12 @@ UNAME_RELEASE = "$UNAME_RELEASE"
UNAME_SYSTEM = "$UNAME_SYSTEM"
UNAME_VERSION = "$UNAME_VERSION"
EOF
+fi
exit 1
# Local variables:
-# eval: (add-hook 'write-file-functions 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "timestamp='"
# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'"
diff --git a/config.sub b/config.sub
index 1d8e98b..dba16e8 100755
--- a/config.sub
+++ b/config.sub
@@ -1,12 +1,14 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2018 Free Software Foundation, Inc.
+# Copyright 1992-2022 Free Software Foundation, Inc.
-timestamp='2018-02-22'
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2022-01-03'
# 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
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
@@ -33,7 +35,7 @@ timestamp='2018-02-22'
# Otherwise, we print the canonical config type on stdout and succeed.
# You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
# This file is supposed to be the same for all GNU packages
# and recognize all the CPU types, system types and aliases
@@ -50,6 +52,13 @@ timestamp='2018-02-22'
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# It is wrong to echo any other type of specification.
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX. However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
me=`echo "$0" | sed -e 's,.*/,,'`
usage="\
@@ -67,7 +76,7 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2018 Free Software Foundation, Inc.
+Copyright 1992-2022 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."
@@ -89,7 +98,7 @@ while test $# -gt 0 ; do
- ) # Use stdin as input.
break ;;
-* )
- echo "$me: invalid option $1$help"
+ echo "$me: invalid option $1$help" >&2
exit 1 ;;
*local*)
@@ -110,1223 +119,1186 @@ case $# in
exit 1;;
esac
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
- linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
- knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
- kopensolaris*-gnu* | cloudabi*-eabi* | \
- storm-chaos* | os2-emx* | rtmk-nova*)
- os=-$maybe_os
- basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- android-linux)
- os=-linux-android
- basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
- ;;
- *)
- basic_machine=`echo "$1" | sed 's/-[^-]*$//'`
- if [ "$basic_machine" != "$1" ]
- then os=`echo "$1" | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
+# Split fields of configuration type
+# shellcheck disable=SC2162
+saved_IFS=$IFS
+IFS="-" read field1 field2 field3 field4 <<EOF
+$1
+EOF
+IFS=$saved_IFS
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis | -knuth | -cray | -microblaze*)
- os=
- basic_machine=$1
- ;;
- -bluegene*)
- os=-cnk
- ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
- ;;
- -scout)
- ;;
- -wrs)
- os=-vxworks
- basic_machine=$1
- ;;
- -chorusos*)
- os=-chorusos
- basic_machine=$1
- ;;
- -chorusrdb)
- os=-chorusrdb
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco6)
- os=-sco5v6
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco5v6*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -udk*)
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*178)
- os=-lynxos178
- ;;
- -lynx*5)
- os=-lynxos5
+# Separate into logical components for further validation
+case $1 in
+ *-*-*-*-*)
+ echo Invalid configuration \`"$1"\': more than four components >&2
+ exit 1
;;
- -lynx*)
- os=-lynxos
+ *-*-*-*)
+ basic_machine=$field1-$field2
+ basic_os=$field3-$field4
;;
- -ptx*)
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'`
+ *-*-*)
+ # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
+ # parts
+ maybe_os=$field2-$field3
+ case $maybe_os 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*)
+ basic_machine=$field1
+ basic_os=$maybe_os
+ ;;
+ android-linux)
+ basic_machine=$field1-unknown
+ basic_os=linux-android
+ ;;
+ *)
+ basic_machine=$field1-$field2
+ basic_os=$field3
+ ;;
+ esac
;;
- -psos*)
- os=-psos
+ *-*)
+ # A lone config we happen to match not fitting any pattern
+ case $field1-$field2 in
+ decstation-3100)
+ basic_machine=mips-dec
+ basic_os=
+ ;;
+ *-*)
+ # Second component is usually, but not always the OS
+ case $field2 in
+ # Prevent following clause from handling this valid os
+ sun*os*)
+ basic_machine=$field1
+ basic_os=$field2
+ ;;
+ zephyr*)
+ basic_machine=$field1-unknown
+ basic_os=$field2
+ ;;
+ # Manufacturers
+ dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
+ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
+ | unicom* | ibm* | next | hp | isi* | apollo | altos* \
+ | convergent* | ncr* | news | 32* | 3600* | 3100* \
+ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
+ | ultra | tti* | harris | dolphin | highlevel | gould \
+ | cbm | ns | masscomp | apple | axis | knuth | cray \
+ | microblaze* | sim | cisco \
+ | oki | wec | wrs | winbond)
+ basic_machine=$field1-$field2
+ basic_os=
+ ;;
+ *)
+ basic_machine=$field1
+ basic_os=$field2
+ ;;
+ esac
+ ;;
+ esac
;;
- -mint | -mint[0-9]*)
- basic_machine=m68k-atari
- os=-mint
+ *)
+ # Convert single-component short-hands not valid as part of
+ # multi-component configurations.
+ case $field1 in
+ 386bsd)
+ basic_machine=i386-pc
+ basic_os=bsd
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ basic_os=scout
+ ;;
+ alliant)
+ basic_machine=fx80-alliant
+ basic_os=
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ basic_os=
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ basic_os=bsd
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ basic_os=sysv
+ ;;
+ amiga)
+ basic_machine=m68k-unknown
+ basic_os=
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ basic_os=amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ basic_os=sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ basic_os=sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ basic_os=bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ basic_os=aros
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ basic_os=aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ basic_os=dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ basic_os=linux
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ basic_os=cegcc
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ basic_os=bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ basic_os=bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ basic_os=bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ basic_os=bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ basic_os=bsd
+ ;;
+ cray)
+ basic_machine=j90-cray
+ basic_os=unicos
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ basic_os=
+ ;;
+ da30)
+ basic_machine=m68k-da30
+ basic_os=
+ ;;
+ decstation | pmax | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ basic_os=
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ basic_os=sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ basic_os=dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ basic_os=msdosdjgpp
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ basic_os=ebmon
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ basic_os=ose
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ basic_os=sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ basic_os=go32
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ basic_os=hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ basic_os=xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ basic_os=hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ basic_os=sysv3
+ ;;
+ hp300 | hp300hpux)
+ basic_machine=m68k-hp
+ basic_os=hpux
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ basic_os=bsd
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ basic_os=osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ basic_os=proelf
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ basic_os=mach
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ basic_os=sysv
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ basic_os=linux
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ basic_os=sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ basic_os=sysv
+ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ basic_os=mingw64
+ ;;
+ mingw32)
+ basic_machine=i686-pc
+ basic_os=mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ basic_os=mingw32ce
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ basic_os=coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ basic_os=morphos
+ ;;
+ moxiebox)
+ basic_machine=moxie-unknown
+ basic_os=moxiebox
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ basic_os=msdos
+ ;;
+ msys)
+ basic_machine=i686-pc
+ basic_os=msys
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ basic_os=mvs
+ ;;
+ nacl)
+ basic_machine=le32-unknown
+ basic_os=nacl
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ basic_os=sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-pc
+ basic_os=netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ basic_os=linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ basic_os=newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ basic_os=newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ basic_os=sysv
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ basic_os=cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ basic_os=cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ basic_os=nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ basic_os=mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ basic_os=nonstopux
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ basic_os=os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ basic_os=ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ basic_os=os68k
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ basic_os=osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ basic_os=linux
+ ;;
+ psp)
+ basic_machine=mipsallegrexel-sony
+ basic_os=psp
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ basic_os=pw32
+ ;;
+ rdos | rdos64)
+ basic_machine=x86_64-pc
+ basic_os=rdos
+ ;;
+ rdos32)
+ basic_machine=i386-pc
+ basic_os=rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ basic_os=coff
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ sei)
+ basic_machine=mips-sei
+ basic_os=seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ basic_os=
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ basic_os=sysv2
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ basic_os=
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ basic_os=sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ basic_os=
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ basic_os=sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ basic_os=sunos4
+ ;;
+ sun3)
+ basic_machine=m68k-sun
+ basic_os=
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ basic_os=sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ basic_os=sunos4
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ basic_os=
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ basic_os=sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ basic_os=sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ basic_os=solaris2
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ basic_os=
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ basic_os=unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ basic_os=dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ basic_os=unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ basic_os=unicos
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ basic_os=tops20
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ basic_os=tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ basic_os=sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ basic_os=none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ basic_os=sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ basic_os=vms
+ ;;
+ vsta)
+ basic_machine=i386-pc
+ basic_os=vsta
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ basic_os=vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ basic_os=vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ basic_os=vxworks
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ basic_os=mingw32
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ basic_os=unicos
+ ;;
+ *)
+ basic_machine=$1
+ basic_os=
+ ;;
+ esac
;;
esac
-# Decode aliases for certain CPU-COMPANY combinations.
+# Decode 1-component or ad-hoc basic machines
case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
- | aarch64 | aarch64_be \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- | am33_2.0 \
- | arc | arceb \
- | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
- | avr | avr32 \
- | ba \
- | be32 | be64 \
- | bfin \
- | c4x | c8051 | clipper \
- | d10v | d30v | dlx | dsp16xx \
- | e2k | epiphany \
- | fido | fr30 | frv | ft32 \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | hexagon \
- | i370 | i860 | i960 | ia16 | ia64 \
- | ip2k | iq2000 \
- | k1om \
- | le32 | le64 \
- | lm32 \
- | m32c | m32r | m32rle | m68000 | m68k | m88k \
- | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
- | mips64octeon | mips64octeonel \
- | mips64orion | mips64orionel \
- | mips64r5900 | mips64r5900el \
- | mips64vr | mips64vrel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
- | mips64vr5900 | mips64vr5900el \
- | mipsisa32 | mipsisa32el \
- | mipsisa32r2 | mipsisa32r2el \
- | mipsisa32r6 | mipsisa32r6el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64r2 | mipsisa64r2el \
- | mipsisa64r6 | mipsisa64r6el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipsr5900 | mipsr5900el \
- | mipstx39 | mipstx39el \
- | mn10200 | mn10300 \
- | moxie \
- | mt \
- | msp430 \
- | nds32 | nds32le | nds32be \
- | nios | nios2 | nios2eb | nios2el \
- | ns16k | ns32k \
- | open8 | or1k | or1knd | or32 \
- | pdp10 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle \
- | pru \
- | pyramid \
- | riscv32 | riscv64 \
- | rl78 | rx \
- | score \
- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
- | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
- | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
- | spu \
- | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
- | ubicom32 \
- | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
- | visium \
- | wasm32 \
- | x86 | xc16x | xstormy16 | xtensa \
- | z8k | z80)
- basic_machine=$basic_machine-unknown
- ;;
- c54x)
- basic_machine=tic54x-unknown
- ;;
- c55x)
- basic_machine=tic55x-unknown
- ;;
- c6x)
- basic_machine=tic6x-unknown
- ;;
- leon|leon[3-9])
- basic_machine=sparc-$basic_machine
- ;;
- m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
- basic_machine=$basic_machine-unknown
- os=-none
+ # Here we handle the default manufacturer of certain CPU types. It is in
+ # some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ cpu=hppa1.1
+ vendor=winbond
;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65)
+ op50n)
+ cpu=hppa1.1
+ vendor=oki
;;
- ms1)
- basic_machine=mt-unknown
+ op60c)
+ cpu=hppa1.1
+ vendor=oki
;;
-
- strongarm | thumb | xscale)
- basic_machine=arm-unknown
+ ibm*)
+ cpu=i370
+ vendor=ibm
;;
- xgate)
- basic_machine=$basic_machine-unknown
- os=-none
+ orion105)
+ cpu=clipper
+ vendor=highlevel
;;
- xscaleeb)
- basic_machine=armeb-unknown
+ mac | mpw | mac-mpw)
+ cpu=m68k
+ vendor=apple
;;
-
- xscaleel)
- basic_machine=armel-unknown
+ pmac | pmac-mpw)
+ cpu=powerpc
+ vendor=apple
;;
- # 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)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
- | aarch64-* | aarch64_be-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
- | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* | avr32-* \
- | ba-* \
- | be32-* | be64-* \
- | bfin-* | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* \
- | c8051-* | clipper-* | craynv-* | cydra-* \
- | d10v-* | d30v-* | dlx-* \
- | e2k-* | elxsi-* \
- | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | hexagon-* \
- | i*86-* | i860-* | i960-* | ia16-* | ia64-* \
- | ip2k-* | iq2000-* \
- | k1om-* \
- | le32-* | le64-* \
- | lm32-* \
- | m32c-* | m32r-* | m32rle-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
- | microblaze-* | microblazeel-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- | mips16-* \
- | mips64-* | mips64el-* \
- | mips64octeon-* | mips64octeonel-* \
- | mips64orion-* | mips64orionel-* \
- | mips64r5900-* | mips64r5900el-* \
- | mips64vr-* | mips64vrel-* \
- | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* \
- | mips64vr5000-* | mips64vr5000el-* \
- | mips64vr5900-* | mips64vr5900el-* \
- | mipsisa32-* | mipsisa32el-* \
- | mipsisa32r2-* | mipsisa32r2el-* \
- | mipsisa32r6-* | mipsisa32r6el-* \
- | mipsisa64-* | mipsisa64el-* \
- | mipsisa64r2-* | mipsisa64r2el-* \
- | mipsisa64r6-* | mipsisa64r6el-* \
- | mipsisa64sb1-* | mipsisa64sb1el-* \
- | mipsisa64sr71k-* | mipsisa64sr71kel-* \
- | mipsr5900-* | mipsr5900el-* \
- | mipstx39-* | mipstx39el-* \
- | mmix-* \
- | mt-* \
- | msp430-* \
- | nds32-* | nds32le-* | nds32be-* \
- | nios-* | nios2-* | nios2eb-* | nios2el-* \
- | none-* | np1-* | ns16k-* | ns32k-* \
- | open8-* \
- | or1k*-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
- | pru-* \
- | pyramid-* \
- | riscv32-* | riscv64-* \
- | rl78-* | romp-* | rs6000-* | rx-* \
- | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
- | sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
- | tahoe-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- | tile*-* \
- | tron-* \
- | ubicom32-* \
- | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
- | vax-* \
- | visium-* \
- | wasm32-* \
- | we32k-* \
- | x86-* | x86_64-* | xc16x-* | xps100-* \
- | xstormy16-* | xtensa*-* \
- | ymp-* \
- | z8k-* | z80-*)
- ;;
- # Recognize the basic CPU types without company name, with glob match.
- xtensa*)
- basic_machine=$basic_machine-unknown
- ;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
- 386bsd)
- basic_machine=i386-pc
- os=-bsd
- ;;
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
+ cpu=m68000
+ vendor=att
;;
3b*)
- basic_machine=we32k-att
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=-udi
- ;;
- abacus)
- basic_machine=abacus-unknown
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amd64)
- basic_machine=x86_64-pc
- ;;
- amd64-*)
- basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-unknown
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=-amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=-bsd
- ;;
- aros)
- basic_machine=i386-pc
- os=-aros
- ;;
- asmjs)
- basic_machine=asmjs-unknown
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- blackfin)
- basic_machine=bfin-unknown
- os=-linux
- ;;
- blackfin-*)
- basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- os=-linux
+ cpu=we32k
+ vendor=att
;;
bluegene*)
- basic_machine=powerpc-ibm
- os=-cnk
- ;;
- c54x-*)
- basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- c55x-*)
- basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- c6x-*)
- basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- c90)
- basic_machine=c90-cray
- os=-unicos
- ;;
- cegcc)
- basic_machine=arm-unknown
- os=-cegcc
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | j90)
- basic_machine=j90-cray
- os=-unicos
- ;;
- craynv)
- basic_machine=craynv-cray
- os=-unicosmp
- ;;
- cr16 | cr16-*)
- basic_machine=cr16-unknown
- os=-elf
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- crisv32 | crisv32-* | etraxfs*)
- basic_machine=crisv32-axis
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
- crx)
- basic_machine=crx-unknown
- os=-elf
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
+ cpu=powerpc
+ vendor=ibm
+ basic_os=cnk
;;
decsystem10* | dec10*)
- basic_machine=pdp10-dec
- os=-tops10
+ cpu=pdp10
+ vendor=dec
+ basic_os=tops10
;;
decsystem20* | dec20*)
- basic_machine=pdp10-dec
- os=-tops20
+ cpu=pdp10
+ vendor=dec
+ basic_os=tops20
;;
delta | 3300 | motorola-3300 | motorola-delta \
| 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- dicos)
- basic_machine=i686-pc
- os=-dicos
- ;;
- djgpp)
- basic_machine=i586-pc
- os=-msdosdjgpp
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
+ cpu=m68k
+ vendor=motorola
;;
dpx2*)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- e500v[12])
- basic_machine=powerpc-unknown
- os=$os"spe"
- ;;
- e500v[12]-*)
- basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- os=$os"spe"
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
+ cpu=m68k
+ vendor=bull
+ basic_os=sysv3
;;
encore | umax | mmax)
- basic_machine=ns32k-encore
+ cpu=ns32k
+ vendor=encore
;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=-ose
+ elxsi)
+ cpu=elxsi
+ vendor=elxsi
+ basic_os=${basic_os:-bsd}
;;
fx2800)
- basic_machine=i860-alliant
+ cpu=i860
+ vendor=alliant
;;
genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=-go32
+ cpu=ns32k
+ vendor=ns
;;
h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=-xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
+ cpu=hppa1.1
+ vendor=hitachi
+ basic_os=hiuxwe2
;;
hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
+ cpu=hppa1.0
+ vendor=hp
;;
hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
+ cpu=m68000
+ vendor=hp
;;
hp9k3[2-9][0-9])
- basic_machine=m68k-hp
+ cpu=m68k
+ vendor=hp
;;
hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
+ cpu=hppa1.0
+ vendor=hp
;;
hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
+ cpu=hppa1.1
+ vendor=hp
;;
hp9k78[0-9] | hp78[0-9])
# FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
+ cpu=hppa1.1
+ vendor=hp
;;
hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
# FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
+ cpu=hppa1.1
+ vendor=hp
;;
hp9k8[0-9][13679] | hp8[0-9][13679])
- basic_machine=hppa1.1-hp
+ cpu=hppa1.1
+ vendor=hp
;;
hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=-osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
+ cpu=hppa1.0
+ vendor=hp
;;
i*86v32)
- basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
- os=-sysv32
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=sysv32
;;
i*86v4*)
- basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
- os=-sysv4
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=sysv4
;;
i*86v)
- basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
- os=-sysv
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=sysv
;;
i*86sol2)
- basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- i386mach)
- basic_machine=i386-mach
- os=-mach
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=solaris2
;;
- vsta)
- basic_machine=i386-unknown
- os=-vsta
+ j90 | j90-cray)
+ cpu=j90
+ vendor=cray
+ basic_os=${basic_os:-unicos}
;;
iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
+ cpu=mips
+ vendor=sgi
+ case $basic_os in
+ irix*)
;;
*)
- os=-irix4
+ basic_os=irix4
;;
esac
;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- leon-*|leon[3-9]-*)
- basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'`
- ;;
- m68knommu)
- basic_machine=m68k-unknown
- os=-linux
- ;;
- m68knommu-*)
- basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- microblaze*)
- basic_machine=microblaze-xilinx
- ;;
- mingw64)
- basic_machine=x86_64-pc
- os=-mingw64
- ;;
- mingw32)
- basic_machine=i686-pc
- os=-mingw32
- ;;
- mingw32ce)
- basic_machine=arm-unknown
- os=-mingw32ce
- ;;
miniframe)
- basic_machine=m68000-convergent
- ;;
- *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
- mips3*-*)
- basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- morphos)
- basic_machine=powerpc-unknown
- os=-morphos
- ;;
- moxiebox)
- basic_machine=moxie-unknown
- os=-moxiebox
+ cpu=m68000
+ vendor=convergent
;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
- ms1-*)
- basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'`
- ;;
- msys)
- basic_machine=i686-pc
- os=-msys
- ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
- nacl)
- basic_machine=le32-unknown
- os=-nacl
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown
- os=-netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=-linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
+ *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ cpu=m68k
+ vendor=atari
+ basic_os=mint
;;
news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=-sysv
+ cpu=mips
+ vendor=sony
+ basic_os=newsos
;;
next | m*-next)
- basic_machine=m68k-next
- case $os in
- -nextstep* )
+ cpu=m68k
+ vendor=next
+ case $basic_os in
+ openstep*)
+ ;;
+ nextstep*)
;;
- -ns2*)
- os=-nextstep2
+ ns2*)
+ basic_os=nextstep2
;;
*)
- os=-nextstep3
+ basic_os=nextstep3
;;
esac
;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=-mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=-nonstopux
- ;;
np1)
- basic_machine=np1-gould
- ;;
- neo-tandem)
- basic_machine=neo-tandem
- ;;
- nse-tandem)
- basic_machine=nse-tandem
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- nsv-tandem)
- basic_machine=nsv-tandem
- ;;
- nsx-tandem)
- basic_machine=nsx-tandem
+ cpu=np1
+ vendor=gould
;;
op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- openrisc | openrisc-*)
- basic_machine=or32-unknown
- ;;
- os400)
- basic_machine=powerpc-ibm
- os=-os400
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=-ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=-os68k
+ cpu=hppa1.1
+ vendor=oki
+ basic_os=proelf
;;
pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- parisc)
- basic_machine=hppa-unknown
- os=-linux
- ;;
- parisc-*)
- basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- os=-linux
+ cpu=hppa1.1
+ vendor=hitachi
+ basic_os=hiuxwe2
;;
pbd)
- basic_machine=sparc-tti
+ cpu=sparc
+ vendor=tti
;;
pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pc98)
- basic_machine=i386-pc
+ cpu=m68k
+ vendor=tti
;;
- pc98-*)
- basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- pentium | p5 | k5 | k6 | nexgen | viac3)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon | athlon_*)
- basic_machine=i686-pc
- ;;
- pentiumii | pentium2 | pentiumiii | pentium3)
- basic_machine=i686-pc
- ;;
- pentium4)
- basic_machine=i786-pc
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
- basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
- basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- pentium4-*)
- basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ pc532)
+ cpu=ns32k
+ vendor=pc532
;;
pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=power-ibm
- ;;
- ppc | ppcbe) basic_machine=powerpc-unknown
+ cpu=pn
+ vendor=gould
;;
- ppc-* | ppcbe-*)
- basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle)
- basic_machine=powerpcle-unknown
+ power)
+ cpu=power
+ vendor=ibm
;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ps2)
+ cpu=i386
+ vendor=ibm
;;
- ppc64) basic_machine=powerpc64-unknown
+ rm[46]00)
+ cpu=mips
+ vendor=siemens
;;
- ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ rtpc | rtpc-*)
+ cpu=romp
+ vendor=ibm
;;
- ppc64le | powerpc64little)
- basic_machine=powerpc64le-unknown
+ sde)
+ cpu=mipsisa32
+ vendor=sde
+ basic_os=${basic_os:-elf}
;;
- ppc64le-* | powerpc64little-*)
- basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ simso-wrs)
+ cpu=sparclite
+ vendor=wrs
+ basic_os=vxworks
;;
- ps2)
- basic_machine=i386-ibm
+ tower | tower-32)
+ cpu=m68k
+ vendor=ncr
;;
- pw32)
- basic_machine=i586-unknown
- os=-pw32
+ vpp*|vx|vx-*)
+ cpu=f301
+ vendor=fujitsu
;;
- rdos | rdos64)
- basic_machine=x86_64-pc
- os=-rdos
+ w65)
+ cpu=w65
+ vendor=wdc
;;
- rdos32)
- basic_machine=i386-pc
- os=-rdos
+ w89k-*)
+ cpu=hppa1.1
+ vendor=winbond
+ basic_os=proelf
;;
- rom68k)
- basic_machine=m68k-rom68k
- os=-coff
+ none)
+ cpu=none
+ vendor=none
;;
- rm[46]00)
- basic_machine=mips-siemens
+ leon|leon[3-9])
+ cpu=sparc
+ vendor=$basic_machine
;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
+ leon-*|leon[3-9]-*)
+ cpu=sparc
+ vendor=`echo "$basic_machine" | sed 's/-.*//'`
;;
- s390 | s390-*)
- basic_machine=s390-ibm
+
+ *-*)
+ # shellcheck disable=SC2162
+ saved_IFS=$IFS
+ IFS="-" read cpu vendor <<EOF
+$basic_machine
+EOF
+ IFS=$saved_IFS
;;
- s390x | s390x-*)
- basic_machine=s390x-ibm
+ # 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)
+ cpu=$basic_machine
+ vendor=pc
;;
- sa29200)
- basic_machine=a29k-amd
- os=-udi
+ # These rules are duplicated from below for sake of the special case above;
+ # i.e. things that normalized to x86 arches should also default to "pc"
+ pc98)
+ cpu=i386
+ vendor=pc
;;
- sb1)
- basic_machine=mipsisa64sb1-unknown
+ x64 | amd64)
+ cpu=x86_64
+ vendor=pc
;;
- sb1el)
- basic_machine=mipsisa64sb1el-unknown
+ # Recognize the basic CPU types without company name.
+ *)
+ cpu=$basic_machine
+ vendor=unknown
;;
- sde)
- basic_machine=mipsisa32-sde
- os=-elf
+esac
+
+unset -v basic_machine
+
+# Decode basic machines in the full and proper CPU-Company form.
+case $cpu-$vendor in
+ # Here we handle the default manufacturer of certain CPU types in canonical form. It is in
+ # some cases the only manufacturer, in others, it is the most popular.
+ craynv-unknown)
+ vendor=cray
+ basic_os=${basic_os:-unicosmp}
;;
- sei)
- basic_machine=mips-sei
- os=-seiux
+ c90-unknown | c90-cray)
+ vendor=cray
+ basic_os=${Basic_os:-unicos}
;;
- sequent)
- basic_machine=i386-sequent
+ fx80-unknown)
+ vendor=alliant
;;
- sh5el)
- basic_machine=sh5le-unknown
+ romp-unknown)
+ vendor=ibm
;;
- simso-wrs)
- basic_machine=sparclite-wrs
- os=-vxworks
+ mmix-unknown)
+ vendor=knuth
;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
+ microblaze-unknown | microblazeel-unknown)
+ vendor=xilinx
;;
- spur)
- basic_machine=spur-unknown
+ rs6000-unknown)
+ vendor=ibm
;;
- st2000)
- basic_machine=m68k-tandem
+ vax-unknown)
+ vendor=dec
;;
- stratus)
- basic_machine=i860-stratus
- os=-sysv4
+ pdp11-unknown)
+ vendor=dec
;;
- strongarm-* | thumb-*)
- basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ we32k-unknown)
+ vendor=att
;;
- sun2)
- basic_machine=m68000-sun
+ cydra-unknown)
+ vendor=cydrome
;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
+ i370-ibm*)
+ vendor=ibm
;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
+ orion-unknown)
+ vendor=highlevel
;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
+ xps-unknown | xps100-unknown)
+ cpu=xps100
+ vendor=honeywell
;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
+
+ # Here we normalize CPU types with a missing or matching vendor
+ armh-unknown | armh-alt)
+ cpu=armv7l
+ vendor=alt
+ basic_os=${basic_os:-linux-gnueabihf}
;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
+ dpx20-unknown | dpx20-bull)
+ cpu=rs6000
+ vendor=bull
+ basic_os=${basic_os:-bosx}
;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
+
+ # Here we normalize CPU types irrespective of the vendor
+ amd64-*)
+ cpu=x86_64
;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
+ blackfin-*)
+ cpu=bfin
+ basic_os=linux
;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
+ c54x-*)
+ cpu=tic54x
;;
- sun4)
- basic_machine=sparc-sun
+ c55x-*)
+ cpu=tic55x
;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
+ c6x-*)
+ cpu=tic6x
;;
- sv1)
- basic_machine=sv1-cray
- os=-unicos
+ e500v[12]-*)
+ cpu=powerpc
+ basic_os=${basic_os}"spe"
;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
+ mips3*-*)
+ cpu=mips64
;;
- t3e)
- basic_machine=alphaev5-cray
- os=-unicos
+ ms1-*)
+ cpu=mt
;;
- t90)
- basic_machine=t90-cray
- os=-unicos
+ m68knommu-*)
+ cpu=m68k
+ basic_os=linux
;;
- tile*)
- basic_machine=$basic_machine-unknown
- os=-linux-gnu
+ m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
+ cpu=s12z
;;
- tx39)
- basic_machine=mipstx39-unknown
+ openrisc-*)
+ cpu=or32
;;
- tx39el)
- basic_machine=mipstx39el-unknown
+ parisc-*)
+ cpu=hppa
+ basic_os=linux
;;
- toad1)
- basic_machine=pdp10-xkl
- os=-tops20
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ cpu=i586
;;
- tower | tower-32)
- basic_machine=m68k-ncr
+ pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
+ cpu=i686
;;
- tpf)
- basic_machine=s390x-ibm
- os=-tpf
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ cpu=i686
;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
+ pentium4-*)
+ cpu=i786
;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
+ pc98-*)
+ cpu=i386
;;
- v810 | necv810)
- basic_machine=v810-nec
- os=-none
+ ppc-* | ppcbe-*)
+ cpu=powerpc
;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
+ ppcle-* | powerpclittle-*)
+ cpu=powerpcle
;;
- vms)
- basic_machine=vax-dec
- os=-vms
+ ppc64-*)
+ cpu=powerpc64
;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
+ ppc64le-* | powerpc64little-*)
+ cpu=powerpc64le
;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
+ sb1-*)
+ cpu=mipsisa64sb1
;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
+ sb1el-*)
+ cpu=mipsisa64sb1el
;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
+ sh5e[lb]-*)
+ cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
;;
- w65*)
- basic_machine=w65-wdc
- os=-none
+ spur-*)
+ cpu=spur
;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=-proelf
+ strongarm-* | thumb-*)
+ cpu=arm
;;
- x64)
- basic_machine=x86_64-pc
+ tx39-*)
+ cpu=mipstx39
;;
- xbox)
- basic_machine=i686-pc
- os=-mingw32
+ tx39el-*)
+ cpu=mipstx39el
;;
- xps | xps100)
- basic_machine=xps100-honeywell
+ x64-*)
+ cpu=x86_64
;;
xscale-* | xscalee[bl]-*)
- basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'`
- ;;
- ymp)
- basic_machine=ymp-cray
- os=-unicos
+ cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
;;
- none)
- basic_machine=none-none
- os=-none
+ arm64-* | aarch64le-*)
+ cpu=aarch64
;;
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k)
- basic_machine=hppa1.1-winbond
- ;;
- op50n)
- basic_machine=hppa1.1-oki
- ;;
- op60c)
- basic_machine=hppa1.1-oki
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- mmix)
- basic_machine=mmix-knuth
+ # Recognize the canonical CPU Types that limit and/or modify the
+ # company names they are paired with.
+ cr16-*)
+ basic_os=${basic_os:-elf}
;;
- rs6000)
- basic_machine=rs6000-ibm
+ crisv32-* | etraxfs*-*)
+ cpu=crisv32
+ vendor=axis
;;
- vax)
- basic_machine=vax-dec
+ cris-* | etrax*-*)
+ cpu=cris
+ vendor=axis
;;
- pdp11)
- basic_machine=pdp11-dec
+ crx-*)
+ basic_os=${basic_os:-elf}
;;
- we32k)
- basic_machine=we32k-att
+ neo-tandem)
+ cpu=neo
+ vendor=tandem
;;
- sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
- basic_machine=sh-unknown
+ nse-tandem)
+ cpu=nse
+ vendor=tandem
;;
- cydra)
- basic_machine=cydra-cydrome
+ nsr-tandem)
+ cpu=nsr
+ vendor=tandem
;;
- orion)
- basic_machine=orion-highlevel
+ nsv-tandem)
+ cpu=nsv
+ vendor=tandem
;;
- orion105)
- basic_machine=clipper-highlevel
+ nsx-tandem)
+ cpu=nsx
+ vendor=tandem
;;
- mac | mpw | mac-mpw)
- basic_machine=m68k-apple
+ mipsallegrexel-sony)
+ cpu=mipsallegrexel
+ vendor=sony
;;
- pmac | pmac-mpw)
- basic_machine=powerpc-apple
- ;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
+ tile*-*)
+ basic_os=${basic_os:-linux-gnu}
;;
+
*)
- echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2
- exit 1
+ # Recognize the canonical CPU types that are allowed with any
+ # company name.
+ case $cpu in
+ 1750a | 580 \
+ | a29k \
+ | aarch64 | aarch64_be \
+ | abacus \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
+ | alphapca5[67] | alpha64pca5[67] \
+ | am33_2.0 \
+ | amdgcn \
+ | arc | arceb | arc32 | arc64 \
+ | arm | arm[lb]e | arme[lb] | armv* \
+ | avr | avr32 \
+ | asmjs \
+ | ba \
+ | be32 | be64 \
+ | bfin | bpf | bs2000 \
+ | c[123]* | c30 | [cjt]90 | c4x \
+ | c8051 | clipper | craynv | csky | cydra \
+ | d10v | d30v | dlx | dsp16xx \
+ | e2k | elxsi | epiphany \
+ | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
+ | h8300 | h8500 \
+ | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
+ | i370 | i*86 | i860 | i960 | ia16 | ia64 \
+ | ip2k | iq2000 \
+ | k1om \
+ | le32 | le64 \
+ | lm32 \
+ | loongarch32 | loongarch64 | loongarchx32 \
+ | m32c | m32r | m32rle \
+ | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
+ | 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 \
+ | mmix \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nfp \
+ | nios | nios2 | nios2eb | nios2el \
+ | none | np1 | ns16k | ns32k | nvptx \
+ | open8 \
+ | or1k* \
+ | or32 \
+ | orion \
+ | picochip \
+ | pdp10 | pdp11 | pj | pjl | pn | power \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
+ | pru \
+ | pyramid \
+ | riscv | riscv32 | riscv32be | riscv64 | riscv64be \
+ | rl78 | romp | rs6000 | rx \
+ | s390 | s390x \
+ | score \
+ | sh | shl \
+ | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
+ | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
+ | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
+ | spu \
+ | tahoe \
+ | thumbv7* \
+ | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
+ | tron \
+ | ubicom32 \
+ | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
+ | vax \
+ | visium \
+ | w65 \
+ | wasm32 | wasm64 \
+ | we32k \
+ | x86 | x86_64 | xc16x | xgate | xps100 \
+ | xstormy16 | xtensa* \
+ | ymp \
+ | z8k | z80)
+ ;;
+
+ *)
+ echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
+ exit 1
+ ;;
+ esac
;;
esac
# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'`
+case $vendor in
+ digital*)
+ vendor=dec
;;
- *-commodore*)
- basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'`
+ commodore*)
+ vendor=cbm
;;
*)
;;
@@ -1334,203 +1306,215 @@ esac
# Decode manufacturer-specific aliases for certain operating systems.
-if [ x"$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.
+case $basic_os in
+ gnu/linux*)
+ kernel=linux
+ os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
+ ;;
+ os2-emx)
+ kernel=os2
+ os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
+ ;;
+ nto-qnx*)
+ kernel=nto
+ os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
+ ;;
+ *-*)
+ # shellcheck disable=SC2162
+ saved_IFS=$IFS
+ IFS="-" read kernel os <<EOF
+$basic_os
+EOF
+ IFS=$saved_IFS
+ ;;
+ # Default OS when just kernel was specified
+ nto*)
+ kernel=nto
+ os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
+ ;;
+ linux*)
+ kernel=linux
+ os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
+ ;;
+ *)
+ kernel=
+ os=$basic_os
+ ;;
+esac
+
+# Now, normalize the OS (knowing we just have one component, it's not a kernel,
+# etc.)
case $os in
# First match some system type aliases that might get confused
# with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -auroraux)
- os=-auroraux
+ # solaris* is a basic system type, with this one exception.
+ auroraux)
+ os=auroraux
;;
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ bluegene*)
+ os=cnk
;;
- -solaris)
- os=-solaris2
+ solaris1 | solaris1.*)
+ os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
;;
- -unixware*)
- os=-sysv4.2uw
+ solaris)
+ os=solaris2
;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ unixware*)
+ os=sysv4.2uw
;;
# es1800 is here to avoid being matched by es* (a different OS)
- -es1800*)
- os=-ose
+ es1800*)
+ os=ose
;;
- # Now accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST end in a * to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
- | -sym* | -kopensolaris* | -plan9* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* | -cloudabi* | -sortix* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \
- | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
- | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
- | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
- | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
- | -linux-newlib* | -linux-musl* | -linux-uclibc* \
- | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
- | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
- | -morphos* | -superux* | -rtmk* | -windiss* \
- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
- | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \
- | -midnightbsd*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=-nto$os
- ;;
- esac
+ # Some version numbers need modification
+ chorusos*)
+ os=chorusos
;;
- -nto-qnx*)
+ isc)
+ os=isc2.2
;;
- -nto*)
- os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ sco6)
+ os=sco5v6
;;
- -sim | -xray | -os68k* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ sco5)
+ os=sco3.2v5
;;
- -mac*)
- os=`echo "$os" | sed -e 's|mac|macos|'`
+ sco4)
+ os=sco3.2v4
;;
- -linux-dietlibc)
- os=-linux-dietlibc
+ sco3.2.[4-9]*)
+ os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
;;
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ sco*v* | scout)
+ # Don't match below
;;
- -sunos5*)
- os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
+ sco*)
+ os=sco3.2v2
;;
- -sunos6*)
- os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
+ psos*)
+ os=psos
;;
- -opened*)
- os=-openedition
+ qnx*)
+ os=qnx
;;
- -os400*)
- os=-os400
+ hiux*)
+ os=hiuxwe2
;;
- -wince*)
- os=-wince
+ lynx*178)
+ os=lynxos178
;;
- -utek*)
- os=-bsd
+ lynx*5)
+ os=lynxos5
;;
- -dynix*)
- os=-bsd
+ lynxos*)
+ # don't get caught up in next wildcard
;;
- -acis*)
- os=-aos
+ lynx*)
+ os=lynxos
;;
- -atheos*)
- os=-atheos
+ mac[0-9]*)
+ os=`echo "$os" | sed -e 's|mac|macos|'`
;;
- -syllable*)
- os=-syllable
+ opened*)
+ os=openedition
;;
- -386bsd)
- os=-bsd
+ os400*)
+ os=os400
;;
- -ctix* | -uts*)
- os=-sysv
+ sunos5*)
+ os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
;;
- -nova*)
- os=-rtmk-nova
+ sunos6*)
+ os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
;;
- -ns2)
- os=-nextstep2
+ wince*)
+ os=wince
;;
- -nsk*)
- os=-nsk
+ utek*)
+ os=bsd
;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
+ dynix*)
+ os=bsd
;;
- -sinix*)
- os=-sysv4
+ acis*)
+ os=aos
;;
- -tpf*)
- os=-tpf
+ atheos*)
+ os=atheos
;;
- -triton*)
- os=-sysv3
+ syllable*)
+ os=syllable
+ ;;
+ 386bsd)
+ os=bsd
+ ;;
+ ctix* | uts*)
+ os=sysv
+ ;;
+ nova*)
+ os=rtmk-nova
+ ;;
+ ns2)
+ os=nextstep2
+ ;;
+ # Preserve the version number of sinix5.
+ sinix5.*)
+ os=`echo "$os" | sed -e 's|sinix|sysv|'`
;;
- -oss*)
- os=-sysv3
+ sinix*)
+ os=sysv4
;;
- -svr4*)
- os=-sysv4
+ tpf*)
+ os=tpf
;;
- -svr3)
- os=-sysv3
+ triton*)
+ os=sysv3
;;
- -sysvr4)
- os=-sysv4
+ oss*)
+ os=sysv3
;;
- # This must come after -sysvr4.
- -sysv*)
+ svr4*)
+ os=sysv4
;;
- -ose*)
- os=-ose
+ svr3)
+ os=sysv3
;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- os=-mint
+ sysvr4)
+ os=sysv4
;;
- -zvmoe)
- os=-zvmoe
+ ose*)
+ os=ose
;;
- -dicos*)
- os=-dicos
+ *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
+ os=mint
;;
- -pikeos*)
+ dicos*)
+ os=dicos
+ ;;
+ pikeos*)
# Until real need of OS specific support for
# particular features comes up, bare metal
# configurations are quite functional.
- case $basic_machine in
+ case $cpu in
arm*)
- os=-eabi
+ os=eabi
;;
*)
- os=-elf
+ os=elf
;;
esac
;;
- -nacl*)
- ;;
- -ios)
- ;;
- -none)
- ;;
*)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2
- exit 1
+ # No normalization, but not necessarily accepted, that comes below.
;;
esac
+
else
# Here we handle the default operating systems that come with various machines.
@@ -1543,258 +1527,363 @@ else
# will signal an error saying that MANUFACTURER isn't an operating
# system, and we'll never get to this point.
-case $basic_machine in
+kernel=
+case $cpu-$vendor in
score-*)
- os=-elf
+ os=elf
;;
spu-*)
- os=-elf
+ os=elf
;;
*-acorn)
- os=-riscix1.2
+ os=riscix1.2
;;
arm*-rebel)
- os=-linux
+ kernel=linux
+ os=gnu
;;
arm*-semi)
- os=-aout
+ os=aout
;;
c4x-* | tic4x-*)
- os=-coff
+ os=coff
;;
c8051-*)
- os=-elf
+ os=elf
+ ;;
+ clipper-intergraph)
+ os=clix
;;
hexagon-*)
- os=-elf
+ os=elf
;;
tic54x-*)
- os=-coff
+ os=coff
;;
tic55x-*)
- os=-coff
+ os=coff
;;
tic6x-*)
- os=-coff
+ os=coff
;;
# This must come before the *-dec entry.
pdp10-*)
- os=-tops20
+ os=tops20
;;
pdp11-*)
- os=-none
+ os=none
;;
*-dec | vax-*)
- os=-ultrix4.2
+ os=ultrix4.2
;;
m68*-apollo)
- os=-domain
+ os=domain
;;
i386-sun)
- os=-sunos4.0.2
+ os=sunos4.0.2
;;
m68000-sun)
- os=-sunos3
+ os=sunos3
;;
m68*-cisco)
- os=-aout
+ os=aout
;;
mep-*)
- os=-elf
+ os=elf
;;
mips*-cisco)
- os=-elf
+ os=elf
;;
mips*-*)
- os=-elf
+ os=elf
;;
or32-*)
- os=-coff
+ os=coff
;;
*-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
+ os=sysv3
;;
sparc-* | *-sun)
- os=-sunos4.1.1
+ os=sunos4.1.1
;;
pru-*)
- os=-elf
+ os=elf
;;
*-be)
- os=-beos
+ os=beos
;;
*-ibm)
- os=-aix
+ os=aix
;;
*-knuth)
- os=-mmixware
+ os=mmixware
;;
*-wec)
- os=-proelf
+ os=proelf
;;
*-winbond)
- os=-proelf
+ os=proelf
;;
*-oki)
- os=-proelf
+ os=proelf
;;
*-hp)
- os=-hpux
+ os=hpux
;;
*-hitachi)
- os=-hiux
+ os=hiux
;;
i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
+ os=sysv
;;
*-cbm)
- os=-amigaos
+ os=amigaos
;;
*-dg)
- os=-dgux
+ os=dgux
;;
*-dolphin)
- os=-sysv3
+ os=sysv3
;;
m68k-ccur)
- os=-rtu
+ os=rtu
;;
m88k-omron*)
- os=-luna
+ os=luna
;;
*-next)
- os=-nextstep
+ os=nextstep
;;
*-sequent)
- os=-ptx
+ os=ptx
;;
*-crds)
- os=-unos
+ os=unos
;;
*-ns)
- os=-genix
+ os=genix
;;
i370-*)
- os=-mvs
+ os=mvs
;;
*-gould)
- os=-sysv
+ os=sysv
;;
*-highlevel)
- os=-bsd
+ os=bsd
;;
*-encore)
- os=-bsd
+ os=bsd
;;
*-sgi)
- os=-irix
+ os=irix
;;
*-siemens)
- os=-sysv4
+ os=sysv4
;;
*-masscomp)
- os=-rtu
+ os=rtu
;;
f30[01]-fujitsu | f700-fujitsu)
- os=-uxpv
+ os=uxpv
;;
*-rom68k)
- os=-coff
+ os=coff
;;
*-*bug)
- os=-coff
+ os=coff
;;
*-apple)
- os=-macos
+ os=macos
;;
*-atari*)
- os=-mint
+ os=mint
+ ;;
+ *-wrs)
+ os=vxworks
;;
*)
- os=-none
+ os=none
;;
esac
+
fi
+# Now, validate our (potentially fixed-up) OS.
+case $os in
+ # Sometimes we do "kernel-libc", so those need to count as OSes.
+ musl* | newlib* | relibc* | uclibc*)
+ ;;
+ # Likewise for "kernel-abi"
+ eabi* | gnueabi*)
+ ;;
+ # VxWorks passes extra cpu info in the 4th filed.
+ simlinux | simwindows | spe)
+ ;;
+ # Now accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST end in a * to match a version number.
+ gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
+ | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
+ | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
+ | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \
+ | hiux* | abug | nacl* | netware* | windows* \
+ | os9* | macos* | osx* | ios* \
+ | mpw* | magic* | mmixware* | mon960* | lnews* \
+ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
+ | aos* | aros* | cloudabi* | sortix* | twizzler* \
+ | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
+ | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
+ | 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* \
+ | udi* | lites* | ieee* | go32* | aux* | hcos* \
+ | chorusrdb* | cegcc* | glidix* | serenity* \
+ | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
+ | midipix* | mingw32* | mingw64* | mint* \
+ | uxpv* | beos* | mpeix* | udk* | moxiebox* \
+ | interix* | uwin* | mks* | rhapsody* | darwin* \
+ | openstep* | oskit* | conix* | pw32* | nonstopux* \
+ | storm-chaos* | tops10* | tenex* | tops20* | its* \
+ | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
+ | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
+ | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
+ | skyos* | haiku* | rdos* | toppers* | drops* | es* \
+ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
+ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
+ | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
+ | fiwix* )
+ ;;
+ # 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.
+ ;;
+ none)
+ ;;
+ *)
+ echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 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* )
+ ;;
+ uclinux-uclibc* )
+ ;;
+ -dietlibc* | -newlib* | -musl* | -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
+ exit 1
+ ;;
+ kfreebsd*-gnu* | kopensolaris*-gnu*)
+ ;;
+ vxworks-simlinux | vxworks-simwindows | vxworks-spe)
+ ;;
+ nto-qnx*)
+ ;;
+ os2-emx)
+ ;;
+ *-eabi* | *-gnueabi*)
+ ;;
+ -*)
+ # Blank kernel with real OS is always fine.
+ ;;
+ *-*)
+ echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
+ exit 1
+ ;;
+esac
+
# Here we handle the case where we know the os, and the CPU type, but not the
# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
+case $vendor in
+ unknown)
+ case $cpu-$os in
+ *-riscix*)
vendor=acorn
;;
- -sunos*)
+ *-sunos*)
vendor=sun
;;
- -cnk*|-aix*)
+ *-cnk* | *-aix*)
vendor=ibm
;;
- -beos*)
+ *-beos*)
vendor=be
;;
- -hpux*)
+ *-hpux*)
vendor=hp
;;
- -mpeix*)
+ *-mpeix*)
vendor=hp
;;
- -hiux*)
+ *-hiux*)
vendor=hitachi
;;
- -unos*)
+ *-unos*)
vendor=crds
;;
- -dgux*)
+ *-dgux*)
vendor=dg
;;
- -luna*)
+ *-luna*)
vendor=omron
;;
- -genix*)
+ *-genix*)
vendor=ns
;;
- -mvs* | -opened*)
+ *-clix*)
+ vendor=intergraph
+ ;;
+ *-mvs* | *-opened*)
+ vendor=ibm
+ ;;
+ *-os400*)
vendor=ibm
;;
- -os400*)
+ s390-* | s390x-*)
vendor=ibm
;;
- -ptx*)
+ *-ptx*)
vendor=sequent
;;
- -tpf*)
+ *-tpf*)
vendor=ibm
;;
- -vxsim* | -vxworks* | -windiss*)
+ *-vxsim* | *-vxworks* | *-windiss*)
vendor=wrs
;;
- -aux*)
+ *-aux*)
vendor=apple
;;
- -hms*)
+ *-hms*)
vendor=hitachi
;;
- -mpw* | -macos*)
+ *-mpw* | *-macos*)
vendor=apple
;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
vendor=atari
;;
- -vos*)
+ *-vos*)
vendor=stratus
;;
esac
- basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"`
;;
esac
-echo "$basic_machine$os"
+echo "$cpu-$vendor-${kernel:+$kernel-}$os"
exit
# Local variables:
-# eval: (add-hook 'write-file-functions 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "timestamp='"
# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'"
diff --git a/configure b/configure
index 737f0a0..d79785c 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.71 for c-ares 1.18.1.
+# Generated by GNU Autoconf 2.71 for c-ares 1.21.0.
#
# Report bugs to <c-ares mailing list: http://lists.haxx.se/listinfo/c-ares>.
#
@@ -855,8 +855,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='c-ares'
PACKAGE_TARNAME='c-ares'
-PACKAGE_VERSION='1.18.1'
-PACKAGE_STRING='c-ares 1.18.1'
+PACKAGE_VERSION='1.21.0'
+PACKAGE_STRING='c-ares 1.21.0'
PACKAGE_BUGREPORT='c-ares mailing list: http://lists.haxx.se/listinfo/c-ares'
PACKAGE_URL=''
@@ -927,6 +927,7 @@ DSYMUTIL
MANIFEST_TOOL
RANLIB
ac_ct_AR
+FILECMD
LN_S
NM
ac_ct_DUMPBIN
@@ -1649,7 +1650,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 c-ares 1.18.1 to adapt to many kinds of systems.
+\`configure' configures c-ares 1.21.0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1720,7 +1721,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of c-ares 1.18.1:";;
+ short | recursive ) echo "Configuration of c-ares 1.21.0:";;
esac
cat <<\_ACEOF
@@ -1860,7 +1861,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-c-ares configure 1.18.1
+c-ares configure 1.21.0
generated by GNU Autoconf 2.71
Copyright (C) 2021 Free Software Foundation, Inc.
@@ -2452,7 +2453,7 @@ 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 c-ares $as_me 1.18.1, which was
+It was created by c-ares $as_me 1.21.0, which was
generated by GNU Autoconf 2.71. Invocation command line was
$ $0$ac_configure_args_raw
@@ -3425,7 +3426,7 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
-CARES_VERSION_INFO="7:1:5"
+CARES_VERSION_INFO="9:2:7"
@@ -3562,20 +3563,17 @@ printf "%s\n" "yes" >&6; }
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to enable strict compiler warnings" >&5
printf %s "checking whether to enable strict compiler warnings... " >&6; }
- OPT_COMPILER_WARNINGS="default"
+ OPT_COMPILER_WARNINGS="yes"
# Check whether --enable-warnings was given.
if test ${enable_warnings+y}
then :
- enableval=$enable_warnings; OPT_COMPILER_WARNINGS=$enableval
+ enableval=$enable_warnings; OPT_COMPILER_WARNINGS=yes
fi
case "$OPT_COMPILER_WARNINGS" in
no)
want_warnings="no"
;;
- default)
- want_warnings="$want_debug"
- ;;
*)
want_warnings="yes"
;;
@@ -6204,11 +6202,11 @@ if test x$ac_prog_cxx_stdcxx = xno
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5
printf %s "checking for $CXX option to enable C++11 features... " >&6; }
-if test ${ac_cv_prog_cxx_11+y}
+if test ${ac_cv_prog_cxx_cxx11+y}
then :
printf %s "(cached) " >&6
else $as_nop
- ac_cv_prog_cxx_11=no
+ ac_cv_prog_cxx_cxx11=no
ac_save_CXX=$CXX
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -6250,11 +6248,11 @@ if test x$ac_prog_cxx_stdcxx = xno
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5
printf %s "checking for $CXX option to enable C++98 features... " >&6; }
-if test ${ac_cv_prog_cxx_98+y}
+if test ${ac_cv_prog_cxx_cxx98+y}
then :
printf %s "(cached) " >&6
else $as_nop
- ac_cv_prog_cxx_98=no
+ ac_cv_prog_cxx_cxx98=no
ac_save_CXX=$CXX
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -6300,144 +6298,323 @@ ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ex
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
- ax_cxx_compile_cxx11_required=false
+ ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=false
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
ac_success=no
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5
-printf %s "checking whether $CXX supports C++11 features by default... " >&6; }
-if test ${ax_cv_cxx_compile_cxx11+y}
+
+
+
+
+
+ if test x$ac_success = xno; then
+ for alternative in ${ax_cxx_compile_alternatives}; do
+ for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do
+ cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh`
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5
+printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; }
+if eval test \${$cachevar+y}
then :
printf %s "(cached) " >&6
else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ ac_save_CXX="$CXX"
+ CXX="$CXX $switch"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
- template <typename T>
+
+// If the compiler admits that it is not ready for C++11, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+// MSVC always sets __cplusplus to 199711L in older versions; newer versions
+// only set it correctly if /Zc:__cplusplus is specified as well as a
+// /std:c++NN switch:
+// https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
+#elif __cplusplus < 201103L && !defined _MSC_VER
+
+#error "This is not a C++11 compiler"
+
+#else
+
+namespace cxx11
+{
+
+ namespace test_static_assert
+ {
+
+ template <typename T>
struct check
{
static_assert(sizeof(int) <= sizeof(T), "not big enough");
};
- struct Base {
- virtual void f() {}
+ }
+
+ namespace test_final_override
+ {
+
+ struct Base
+ {
+ virtual ~Base() {}
+ virtual void f() {}
};
- struct Child : public Base {
- virtual void f() override {}
+
+ struct Derived : public Base
+ {
+ virtual ~Derived() override {}
+ virtual void f() override {}
};
- typedef check<check<bool>> right_angle_brackets;
+ }
+
+ namespace test_double_right_angle_brackets
+ {
- int a;
- decltype(a) b;
+ template < typename T >
+ struct check {};
- typedef check<int> check_type;
- check_type c;
- check_type&& cr = static_cast<check_type&&>(c);
+ typedef check<void> single_type;
+ typedef check<check<void>> double_type;
+ typedef check<check<check<void>>> triple_type;
+ typedef check<check<check<check<void>>>> quadruple_type;
- auto d = a;
- auto l = [](){};
+ }
- // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
- // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function because of this
- namespace test_template_alias_sfinae {
- struct foo {};
+ namespace test_decltype
+ {
- template<typename T>
- using member = typename T::member_type;
+ int
+ f()
+ {
+ int a = 1;
+ decltype(a) b = 2;
+ return a + b;
+ }
- template<typename T>
- void func(...) {}
+ }
- template<typename T>
- void func(member<T>*) {}
+ namespace test_type_deduction
+ {
- void test();
+ template < typename T1, typename T2 >
+ struct is_same
+ {
+ static const bool value = false;
+ };
- void test() {
- func<foo>(0);
- }
+ template < typename T >
+ struct is_same<T, T>
+ {
+ static const bool value = true;
+ };
+
+ template < typename T1, typename T2 >
+ auto
+ add(T1 a1, T2 a2) -> decltype(a1 + a2)
+ {
+ return a1 + a2;
}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"
-then :
- ax_cv_cxx_compile_cxx11=yes
-else $as_nop
- ax_cv_cxx_compile_cxx11=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5
-printf "%s\n" "$ax_cv_cxx_compile_cxx11" >&6; }
- if test x$ax_cv_cxx_compile_cxx11 = xyes; then
- ac_success=yes
- fi
+ int
+ test(const int c, volatile int v)
+ {
+ static_assert(is_same<int, decltype(0)>::value == true, "");
+ static_assert(is_same<int, decltype(c)>::value == false, "");
+ static_assert(is_same<int, decltype(v)>::value == false, "");
+ auto ac = c;
+ auto av = v;
+ auto sumi = ac + av + 'x';
+ auto sumf = ac + av + 1.0;
+ static_assert(is_same<int, decltype(ac)>::value == true, "");
+ static_assert(is_same<int, decltype(av)>::value == true, "");
+ static_assert(is_same<int, decltype(sumi)>::value == true, "");
+ static_assert(is_same<int, decltype(sumf)>::value == false, "");
+ static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
+ return (sumf > 0.0) ? sumi : add(c, v);
+ }
+ }
+ namespace test_noexcept
+ {
- if test x$ac_success = xno; then
- for switch in -std=c++11 -std=c++0x; do
- cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh`
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5
-printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; }
-if eval test \${$cachevar+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS $switch"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ int f() { return 0; }
+ int g() noexcept { return 0; }
- template <typename T>
- struct check
+ static_assert(noexcept(f()) == false, "");
+ static_assert(noexcept(g()) == true, "");
+
+ }
+
+ namespace test_constexpr
+ {
+
+ template < typename CharT >
+ unsigned long constexpr
+ strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
{
- static_assert(sizeof(int) <= sizeof(T), "not big enough");
+ return *s ? strlen_c_r(s + 1, acc + 1) : acc;
+ }
+
+ template < typename CharT >
+ unsigned long constexpr
+ strlen_c(const CharT *const s) noexcept
+ {
+ return strlen_c_r(s, 0UL);
+ }
+
+ static_assert(strlen_c("") == 0UL, "");
+ static_assert(strlen_c("1") == 1UL, "");
+ static_assert(strlen_c("example") == 7UL, "");
+ static_assert(strlen_c("another\0example") == 7UL, "");
+
+ }
+
+ namespace test_rvalue_references
+ {
+
+ template < int N >
+ struct answer
+ {
+ static constexpr int value = N;
};
- struct Base {
- virtual void f() {}
+ answer<1> f(int&) { return answer<1>(); }
+ answer<2> f(const int&) { return answer<2>(); }
+ answer<3> f(int&&) { return answer<3>(); }
+
+ void
+ test()
+ {
+ int i = 0;
+ const int c = 0;
+ static_assert(decltype(f(i))::value == 1, "");
+ static_assert(decltype(f(c))::value == 2, "");
+ static_assert(decltype(f(0))::value == 3, "");
+ }
+
+ }
+
+ namespace test_uniform_initialization
+ {
+
+ struct test
+ {
+ static const int zero {};
+ static const int one {1};
+ };
+
+ static_assert(test::zero == 0, "");
+ static_assert(test::one == 1, "");
+
+ }
+
+ namespace test_lambdas
+ {
+
+ void
+ test1()
+ {
+ auto lambda1 = [](){};
+ auto lambda2 = lambda1;
+ lambda1();
+ lambda2();
+ }
+
+ int
+ test2()
+ {
+ auto a = [](int i, int j){ return i + j; }(1, 2);
+ auto b = []() -> int { return '0'; }();
+ auto c = [=](){ return a + b; }();
+ auto d = [&](){ return c; }();
+ auto e = [a, &b](int x) mutable {
+ const auto identity = [](int y){ return y; };
+ for (auto i = 0; i < a; ++i)
+ a += b--;
+ return x + identity(a + b);
+ }(0);
+ return a + b + c + d + e;
+ }
+
+ int
+ test3()
+ {
+ const auto nullary = [](){ return 0; };
+ const auto unary = [](int x){ return x; };
+ using nullary_t = decltype(nullary);
+ using unary_t = decltype(unary);
+ const auto higher1st = [](nullary_t f){ return f(); };
+ const auto higher2nd = [unary](nullary_t f1){
+ return [unary, f1](unary_t f2){ return f2(unary(f1())); };
+ };
+ return higher1st(nullary) + higher2nd(nullary)(unary);
+ }
+
+ }
+
+ namespace test_variadic_templates
+ {
+
+ template <int...>
+ struct sum;
+
+ template <int N0, int... N1toN>
+ struct sum<N0, N1toN...>
+ {
+ static constexpr auto value = N0 + sum<N1toN...>::value;
};
- struct Child : public Base {
- virtual void f() override {}
+
+ template <>
+ struct sum<>
+ {
+ static constexpr auto value = 0;
};
- typedef check<check<bool>> right_angle_brackets;
+ static_assert(sum<>::value == 0, "");
+ static_assert(sum<1>::value == 1, "");
+ static_assert(sum<23>::value == 23, "");
+ static_assert(sum<1, 2>::value == 3, "");
+ static_assert(sum<5, 5, 11>::value == 21, "");
+ static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
- int a;
- decltype(a) b;
+ }
- typedef check<int> check_type;
- check_type c;
- check_type&& cr = static_cast<check_type&&>(c);
+ // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
+ // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
+ // because of this.
+ namespace test_template_alias_sfinae
+ {
- auto d = a;
- auto l = [](){};
+ struct foo {};
- // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
- // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function because of this
- namespace test_template_alias_sfinae {
- struct foo {};
+ template<typename T>
+ using member = typename T::member_type;
- template<typename T>
- using member = typename T::member_type;
+ template<typename T>
+ void func(...) {}
- template<typename T>
- void func(...) {}
+ template<typename T>
+ void func(member<T>*) {}
- template<typename T>
- void func(member<T>*) {}
+ void test();
+
+ void test() { func<foo>(0); }
+
+ }
+
+} // namespace cxx11
+
+#endif // __cplusplus >= 201103L
- void test();
- void test() {
- func<foo>(0);
- }
- }
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"
@@ -6447,14 +6624,21 @@ else $as_nop
eval $cachevar=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
- CXXFLAGS="$ac_save_CXXFLAGS"
+ CXX="$ac_save_CXX"
fi
eval ac_res=\$$cachevar
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
printf "%s\n" "$ac_res" >&6; }
- if eval test x\$$cachevar = xyes; then
- CXXFLAGS="$CXXFLAGS $switch"
- ac_success=yes
+ if eval test x\$$cachevar = xyes; then
+ CXX="$CXX $switch"
+ if test -n "$CXXCPP" ; then
+ CXXCPP="$CXXCPP $switch"
+ fi
+ ac_success=yes
+ break
+ fi
+ done
+ if test x$ac_success = xyes; then
break
fi
done
@@ -6469,22 +6653,20 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test x$ac_success = xno; then
as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5
fi
- else
- if test x$ac_success = xno; then
- HAVE_CXX11=0
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5
+ fi
+ if test x$ac_success = xno; then
+ HAVE_CXX11=0
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5
printf "%s\n" "$as_me: No compiler with C++11 support was found" >&6;}
- else
- HAVE_CXX11=1
+ else
+ HAVE_CXX11=1
printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h
- fi
-
-
fi
+
am__api_version='1.16'
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
@@ -6875,7 +7057,7 @@ fi
# Define the identity of the package.
PACKAGE='c-ares'
- VERSION='1.18.1'
+ VERSION='1.21.0'
printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h
@@ -8733,8 +8915,8 @@ esac
-macro_version='2.4.6'
-macro_revision='2.4.6'
+macro_version='2.4.7'
+macro_revision='2.4.7'
@@ -9145,13 +9327,13 @@ else
mingw*) lt_bad_file=conftest.nm/nofile ;;
*) lt_bad_file=/dev/null ;;
esac
- case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+ case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in
*$lt_bad_file* | *'Invalid file or object type'*)
lt_cv_path_NM="$tmp_nm -B"
break 2
;;
*)
- case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in
*/dev/null*)
lt_cv_path_NM="$tmp_nm -p"
break 2
@@ -9289,7 +9471,7 @@ esac
fi
fi
- case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
+ case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in
*COFF*)
DUMPBIN="$DUMPBIN -symbols -headers"
;;
@@ -9393,7 +9575,7 @@ else $as_nop
lt_cv_sys_max_cmd_len=8192;
;;
- bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
+ bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*)
# This has been around since 386BSD, at least. Likely further.
if test -x /sbin/sysctl; then
lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
@@ -9436,7 +9618,7 @@ else $as_nop
sysv5* | sco5v6* | sysv4.2uw2*)
kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
if test -n "$kargmax"; then
- lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'`
else
lt_cv_sys_max_cmd_len=32768
fi
@@ -9642,6 +9824,114 @@ esac
if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args.
+set dummy ${ac_tool_prefix}file; 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_FILECMD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$FILECMD"; then
+ ac_cv_prog_FILECMD="$FILECMD" # 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_FILECMD="${ac_tool_prefix}file"
+ 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
+FILECMD=$ac_cv_prog_FILECMD
+if test -n "$FILECMD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5
+printf "%s\n" "$FILECMD" >&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_FILECMD"; then
+ ac_ct_FILECMD=$FILECMD
+ # Extract the first word of "file", so it can be a program name with args.
+set dummy file; 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_FILECMD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_FILECMD"; then
+ ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # 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_FILECMD="file"
+ 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_FILECMD=$ac_cv_prog_ac_ct_FILECMD
+if test -n "$ac_ct_FILECMD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5
+printf "%s\n" "$ac_ct_FILECMD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_FILECMD" = x; then
+ FILECMD=":"
+ 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
+ FILECMD=$ac_ct_FILECMD
+ fi
+else
+ FILECMD="$ac_cv_prog_FILECMD"
+fi
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
set dummy ${ac_tool_prefix}objdump; ac_word=$2
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -9781,7 +10071,7 @@ beos*)
bsdi[45]*)
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
- lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_cmd='$FILECMD -L'
lt_cv_file_magic_test_file=/shlib/libc.so
;;
@@ -9815,14 +10105,14 @@ darwin* | rhapsody*)
lt_cv_deplibs_check_method=pass_all
;;
-freebsd* | dragonfly*)
+freebsd* | dragonfly* | midnightbsd*)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
case $host_cpu in
i*86 )
# Not sure whether the presence of OpenBSD here was a mistake.
# Let's accept both of them until this is cleared up.
lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
- lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_cmd=$FILECMD
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
;;
esac
@@ -9836,7 +10126,7 @@ haiku*)
;;
hpux10.20* | hpux11*)
- lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_cmd=$FILECMD
case $host_cpu in
ia64*)
lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
@@ -9883,7 +10173,7 @@ netbsd* | netbsdelf*-gnu)
newos6*)
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
- lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_cmd=$FILECMD
lt_cv_file_magic_test_file=/usr/lib/libnls.so
;;
@@ -10253,13 +10543,29 @@ esac
fi
: ${AR=ar}
-: ${AR_FLAGS=cr}
+# Use ARFLAGS variable as AR's operation code to sync the variable naming with
+# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have
+# higher priority because thats what people were doing historically (setting
+# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS
+# variable obsoleted/removed.
+
+test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr}
+lt_ar_flags=$AR_FLAGS
+
+
+
+
+
+
+# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override
+# by AR_FLAGS because that was never working and AR_FLAGS is about to die.
+
@@ -10676,7 +10982,7 @@ esac
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
# Gets list of data symbols to import.
- lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+ lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'"
# Adjust the below global symbol transforms to fixup imported variables.
lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
@@ -10694,20 +11000,20 @@ fi
# Transform an extracted symbol line into a proper C declaration.
# Some systems (esp. on ia64) link data and code symbols differently,
# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+lt_cv_sys_global_symbol_to_cdecl="$SED -n"\
$lt_cdecl_hook\
" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\
$lt_c_name_hook\
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
# Transform an extracted symbol line into symbol name with lib prefix and
# symbol address.
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\
$lt_c_name_lib_hook\
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
@@ -10731,7 +11037,7 @@ for ac_symprfx in "" "_"; do
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
# Fake it for dumpbin and say T for any non-static function,
# D for any global variable and I for any imported variable.
- # Also find C++ and __fastcall symbols from MSVC++,
+ # Also find C++ and __fastcall symbols from MSVC++ or ICC,
# which start with @ or ?.
lt_cv_sys_global_symbol_pipe="$AWK '"\
" {last_section=section; section=\$ 3};"\
@@ -10749,9 +11055,9 @@ for ac_symprfx in "" "_"; do
" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
" ' prfx=^$ac_symprfx"
else
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
fi
- lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'"
# Check to see that the pipe works correctly.
pipe_works=no
@@ -10951,7 +11257,7 @@ case $with_sysroot in #(
fi
;; #(
/*)
- lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+ lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
;; #(
no|'')
;; #(
@@ -11076,7 +11382,7 @@ ia64-*-hpux*)
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*ELF-32*)
HPUX_IA64_MODE=32
;;
@@ -11097,7 +11403,7 @@ ia64-*-hpux*)
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
if test yes = "$lt_cv_prog_gnu_ld"; then
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -melf32bsmip"
;;
@@ -11109,7 +11415,7 @@ ia64-*-hpux*)
;;
esac
else
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -32"
;;
@@ -11135,7 +11441,7 @@ mips64*-*linux*)
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
emul=elf
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*32-bit*)
emul="${emul}32"
;;
@@ -11143,7 +11449,7 @@ mips64*-*linux*)
emul="${emul}64"
;;
esac
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*MSB*)
emul="${emul}btsmip"
;;
@@ -11151,7 +11457,7 @@ mips64*-*linux*)
emul="${emul}ltsmip"
;;
esac
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*N32*)
emul="${emul}n32"
;;
@@ -11175,14 +11481,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- case `/usr/bin/file conftest.o` in
+ case `$FILECMD conftest.o` in
*32-bit*)
case $host in
x86_64-*kfreebsd*-gnu)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
- case `/usr/bin/file conftest.o` in
+ case `$FILECMD conftest.o` in
*x86-64*)
LD="${LD-ld} -m elf32_x86_64"
;;
@@ -11290,7 +11596,7 @@ printf "%s\n" "$lt_cv_cc_needs_belf" >&6; }
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- case `/usr/bin/file conftest.o` in
+ case `$FILECMD conftest.o` in
*64-bit*)
case $lt_cv_prog_gnu_ld in
yes*)
@@ -12073,8 +12379,8 @@ int forced_loaded() { return 2;}
_LT_EOF
echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
$LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
- echo "$AR cr libconftest.a conftest.o" >&5
- $AR cr libconftest.a conftest.o 2>&5
+ echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5
+ $AR $AR_FLAGS libconftest.a conftest.o 2>&5
echo "$RANLIB libconftest.a" >&5
$RANLIB libconftest.a 2>&5
cat > conftest.c << _LT_EOF
@@ -12101,17 +12407,12 @@ printf "%s\n" "$lt_cv_ld_force_load" >&6; }
_lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
darwin1.*)
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
- darwin*) # darwin 5.x on
- # if running on 10.5 or later, the deployment target defaults
- # to the OS version, if on x86, and 10.4, the deployment
- # target defaults to 10.4. Don't you love it?
- case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
- 10.0,*86*-darwin8*|10.0,*-darwin[912]*)
- _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
- 10.*|11.*)
- _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+ darwin*)
+ case $MACOSX_DEPLOYMENT_TARGET,$host in
+ 10.[012],*|,*powerpc*-darwin[5-8]*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ *)
+ _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
esac
;;
esac
@@ -12944,8 +13245,8 @@ esac
ofile=libtool
can_build_shared=yes
-# All known linkers require a '.a' archive for static linking (except MSVC,
-# which needs '.lib').
+# All known linkers require a '.a' archive for static linking (except MSVC and
+# ICC, which need '.lib').
libext=a
with_gnu_ld=$lt_cv_prog_gnu_ld
@@ -13463,7 +13764,7 @@ lt_prog_compiler_static=
lt_prog_compiler_static='-qstaticlink'
;;
*)
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
# Sun Fortran 8.3 passes all unrecognized flags to the linker
lt_prog_compiler_pic='-KPIC'
@@ -13886,15 +14187,15 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
case $host_os in
cygwin* | mingw* | pw32* | cegcc*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
# When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
+ # Microsoft Visual C++ or Intel C++ Compiler.
if test yes != "$GCC"; then
with_gnu_ld=no
fi
;;
interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++)
+ # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC)
with_gnu_ld=yes
;;
openbsd* | bitrig*)
@@ -13949,7 +14250,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
whole_archive_flag_spec=
fi
supports_anon_versioning=no
- case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in
+ case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
*GNU\ gold*) supports_anon_versioning=yes ;;
*\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
*\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
@@ -14061,6 +14362,7 @@ _LT_EOF
emximp -o $lib $output_objdir/$libname.def'
old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
enable_shared_with_static_runtimes=yes
+ file_list_spec='@'
;;
interix[3-9]*)
@@ -14075,7 +14377,7 @@ _LT_EOF
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
;;
gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
@@ -14118,7 +14420,7 @@ _LT_EOF
compiler_needs_object=yes
;;
esac
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*) # Sun C 5.9
whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
compiler_needs_object=yes
@@ -14130,13 +14432,14 @@ _LT_EOF
if test yes = "$supports_anon_versioning"; then
archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
fi
case $cc_basename in
tcc*)
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
export_dynamic_flag_spec='-rdynamic'
;;
xlf* | bgf* | bgxlf* | mpixlf*)
@@ -14146,7 +14449,7 @@ _LT_EOF
archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
if test yes = "$supports_anon_versioning"; then
archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
fi
@@ -14278,7 +14581,7 @@ _LT_EOF
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
else
- export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+ export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
fi
aix_use_runtimelinking=no
@@ -14549,12 +14852,12 @@ fi
cygwin* | mingw* | pw32* | cegcc*)
# When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
+ # Microsoft Visual C++ or Intel C++ Compiler.
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
case $cc_basename in
- cl*)
- # Native MSVC
+ cl* | icl*)
+ # Native MSVC or ICC
hardcode_libdir_flag_spec=' '
allow_undefined_flag=unsupported
always_export_symbols=yes
@@ -14595,7 +14898,7 @@ fi
fi'
;;
*)
- # Assume MSVC wrapper
+ # Assume MSVC and ICC wrapper
hardcode_libdir_flag_spec=' '
allow_undefined_flag=unsupported
# Tell ltmain to make .lib files, not .a files.
@@ -14636,8 +14939,8 @@ fi
output_verbose_link_cmd=func_echo_all
archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
- archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
- module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+ archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+ module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
else
ld_shlibs=no
@@ -14671,7 +14974,7 @@ fi
;;
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
@@ -14852,6 +15155,7 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; }
# Fabrice Bellard et al's Tiny C Compiler
ld_shlibs=yes
archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
;;
esac
;;
@@ -14923,6 +15227,7 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; }
emximp -o $lib $output_objdir/$libname.def'
old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
enable_shared_with_static_runtimes=yes
+ file_list_spec='@'
;;
osf3*)
@@ -15615,7 +15920,7 @@ cygwin* | mingw* | pw32* | cegcc*)
case $host_os in
cygwin*)
# Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
;;
@@ -15625,14 +15930,14 @@ cygwin* | mingw* | pw32* | cegcc*)
;;
pw32*)
# pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
;;
esac
dynamic_linker='Win32 ld.exe'
;;
- *,cl*)
- # Native MSVC
+ *,cl* | *,icl*)
+ # Native MSVC or ICC
libname_spec='$name'
soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
library_names_spec='$libname.dll.lib'
@@ -15651,7 +15956,7 @@ cygwin* | mingw* | pw32* | cegcc*)
done
IFS=$lt_save_ifs
# Convert to MSYS style.
- sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
;;
cygwin*)
# Convert to unix form, then to dos form, then back to unix form
@@ -15688,7 +15993,7 @@ cygwin* | mingw* | pw32* | cegcc*)
;;
*)
- # Assume MSVC wrapper
+ # Assume MSVC and ICC wrapper
library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
dynamic_linker='Win32 ld.exe'
;;
@@ -15721,7 +16026,7 @@ dgux*)
shlibpath_var=LD_LIBRARY_PATH
;;
-freebsd* | dragonfly*)
+freebsd* | dragonfly* | midnightbsd*)
# DragonFly does not have aout. When/if they implement a new
# versioning mechanism, adjust this.
if test -x /usr/bin/objformat; then
@@ -16886,30 +17191,41 @@ striplib=
old_striplib=
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
printf %s "checking whether stripping libraries is possible... " >&6; }
-if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
- test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
- test -z "$striplib" && striplib="$STRIP --strip-unneeded"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+if test -z "$STRIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
else
-# FIXME - insert some real tests, host_os isn't really good enough
- case $host_os in
- darwin*)
- if test -n "$STRIP"; then
+ if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ old_striplib="$STRIP --strip-debug"
+ striplib="$STRIP --strip-unneeded"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ else
+ case $host_os in
+ darwin*)
+ # FIXME - insert some real tests, host_os isn't really good enough
striplib="$STRIP -x"
old_striplib="$STRIP -S"
{ 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
+ ;;
+ freebsd*)
+ if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then
+ old_striplib="$STRIP --strip-debug"
+ striplib="$STRIP --strip-unneeded"
+ { 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; }
- fi
- ;;
- *)
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ fi
+ ;;
+ *)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
- ;;
- esac
+ ;;
+ esac
+ fi
fi
@@ -17679,8 +17995,8 @@ fi
cygwin* | mingw* | pw32* | cegcc*)
case $GXX,$cc_basename in
- ,cl* | no,cl*)
- # Native MSVC
+ ,cl* | no,cl* | ,icl* | no,icl*)
+ # Native MSVC or ICC
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
hardcode_libdir_flag_spec_CXX=' '
@@ -17771,11 +18087,11 @@ fi
output_verbose_link_cmd=func_echo_all
archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
- archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
- module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+ archive_expsym_cmds_CXX="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+ module_expsym_cmds_CXX="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
if test yes != "$lt_cv_apple_cc_single_mod"; then
archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
- archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
+ archive_expsym_cmds_CXX="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
fi
else
@@ -17810,6 +18126,7 @@ fi
emximp -o $lib $output_objdir/$libname.def'
old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
enable_shared_with_static_runtimes_CXX=yes
+ file_list_spec_CXX='@'
;;
dgux*)
@@ -17840,7 +18157,7 @@ fi
archive_cmds_need_lc_CXX=no
;;
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
# FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
# conventions
ld_shlibs_CXX=yes
@@ -17977,7 +18294,7 @@ fi
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds_CXX='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
;;
irix5* | irix6*)
case $cc_basename in
@@ -18117,13 +18434,13 @@ fi
archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
if test yes = "$supports_anon_versioning"; then
archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
fi
;;
*)
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*)
# Sun C++ 5.9
no_undefined_flag_CXX=' -zdefs'
@@ -18780,7 +19097,7 @@ lt_prog_compiler_static_CXX=
;;
esac
;;
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
# FreeBSD uses GNU C++
;;
hpux9* | hpux10* | hpux11*)
@@ -18863,7 +19180,7 @@ lt_prog_compiler_static_CXX=
lt_prog_compiler_static_CXX='-qstaticlink'
;;
*)
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*)
# Sun C++ 5.9
lt_prog_compiler_pic_CXX='-KPIC'
@@ -19250,7 +19567,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
else
- export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+ export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
fi
;;
pw32*)
@@ -19258,7 +19575,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
;;
cygwin* | mingw* | cegcc*)
case $cc_basename in
- cl*)
+ cl* | icl*)
exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
;;
*)
@@ -19609,7 +19926,7 @@ cygwin* | mingw* | pw32* | cegcc*)
case $host_os in
cygwin*)
# Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
;;
mingw* | cegcc*)
@@ -19618,14 +19935,14 @@ cygwin* | mingw* | pw32* | cegcc*)
;;
pw32*)
# pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
;;
esac
dynamic_linker='Win32 ld.exe'
;;
- *,cl*)
- # Native MSVC
+ *,cl* | *,icl*)
+ # Native MSVC or ICC
libname_spec='$name'
soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
library_names_spec='$libname.dll.lib'
@@ -19644,7 +19961,7 @@ cygwin* | mingw* | pw32* | cegcc*)
done
IFS=$lt_save_ifs
# Convert to MSYS style.
- sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
;;
cygwin*)
# Convert to unix form, then to dos form, then back to unix form
@@ -19681,7 +19998,7 @@ cygwin* | mingw* | pw32* | cegcc*)
;;
*)
- # Assume MSVC wrapper
+ # Assume MSVC and ICC wrapper
library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
dynamic_linker='Win32 ld.exe'
;;
@@ -19713,7 +20030,7 @@ dgux*)
shlibpath_var=LD_LIBRARY_PATH
;;
-freebsd* | dragonfly*)
+freebsd* | dragonfly* | midnightbsd*)
# DragonFly does not have aout. When/if they implement a new
# versioning mechanism, adjust this.
if test -x /usr/bin/objformat; then
@@ -21736,8 +22053,8 @@ squeeze() {
INTEL_UNIX_C)
#
tmp_CFLAGS="$tmp_CFLAGS -std=gnu89"
- tmp_CPPFLAGS="$tmp_CPPFLAGS -we 140,147,165,266"
- tmp_CPPFLAGS="$tmp_CPPFLAGS -wd 279,981,1469"
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -diag-error 140,147,165,266"
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -diag-disable 279,981,1469"
;;
#
INTEL_WINDOWS_C)
@@ -22394,26 +22711,13 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
#
if test "$want_warnings" = "yes"; then
tmp_CFLAGS="$tmp_CFLAGS -pedantic"
- tmp_CFLAGS="$tmp_CFLAGS -Wall -Wextra"
- tmp_CFLAGS="$tmp_CFLAGS -Wpointer-arith -Wwrite-strings"
- tmp_CFLAGS="$tmp_CFLAGS -Wshadow"
- tmp_CFLAGS="$tmp_CFLAGS -Winline -Wnested-externs"
- tmp_CFLAGS="$tmp_CFLAGS -Wmissing-declarations"
- tmp_CFLAGS="$tmp_CFLAGS -Wmissing-prototypes"
+ tmp_CFLAGS="$tmp_CFLAGS -Winline"
tmp_CFLAGS="$tmp_CFLAGS -Wno-long-long"
- tmp_CFLAGS="$tmp_CFLAGS -Wfloat-equal"
tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar -Wsign-compare"
- tmp_CFLAGS="$tmp_CFLAGS -Wundef"
tmp_CFLAGS="$tmp_CFLAGS -Wno-format-nonliteral"
- tmp_CFLAGS="$tmp_CFLAGS -Wendif-labels -Wstrict-prototypes"
- tmp_CFLAGS="$tmp_CFLAGS -Wdeclaration-after-statement"
- tmp_CFLAGS="$tmp_CFLAGS -Wcast-align"
+ tmp_CFLAGS="$tmp_CFLAGS -Wendif-labels"
tmp_CFLAGS="$tmp_CFLAGS -Wno-system-headers"
tmp_CFLAGS="$tmp_CFLAGS -Wshorten-64-to-32"
- #
- if test "$compiler_num" -ge "101"; then
- tmp_CFLAGS="$tmp_CFLAGS -Wunused"
- fi
fi
;;
#
@@ -22433,21 +22737,12 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
tmp_CFLAGS="$tmp_CFLAGS -pedantic"
fi
#
- tmp_CFLAGS="$tmp_CFLAGS -Wall -W"
- #
- if test "$compiler_num" -ge "104"; then
- tmp_CFLAGS="$tmp_CFLAGS -Wpointer-arith -Wwrite-strings"
- if test "x$cross_compiling" != "xyes" ||
- test "$compiler_num" -ge "300"; then
- tmp_CFLAGS="$tmp_CFLAGS -Wunused -Wshadow"
- fi
- fi
+ tmp_CFLAGS="$tmp_CFLAGS -W"
#
if test "$compiler_num" -ge "207"; then
- tmp_CFLAGS="$tmp_CFLAGS -Winline -Wnested-externs"
+ tmp_CFLAGS="$tmp_CFLAGS -Winline"
if test "x$cross_compiling" != "xyes" ||
test "$compiler_num" -ge "300"; then
- tmp_CFLAGS="$tmp_CFLAGS -Wmissing-declarations"
tmp_CFLAGS="$tmp_CFLAGS -Wmissing-prototypes"
fi
fi
@@ -22457,9 +22752,7 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
fi
#
if test "$compiler_num" -ge "296"; then
- tmp_CFLAGS="$tmp_CFLAGS -Wfloat-equal"
tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar -Wsign-compare"
- tmp_CFLAGS="$tmp_CFLAGS -Wundef"
fi
#
if test "$compiler_num" -ge "297"; then
@@ -22471,26 +22764,18 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
fi
#
if test "$compiler_num" -ge "303"; then
- tmp_CFLAGS="$tmp_CFLAGS -Wendif-labels -Wstrict-prototypes"
- fi
- #
- if test "$compiler_num" -ge "304"; then
- tmp_CFLAGS="$tmp_CFLAGS -Wdeclaration-after-statement"
+ tmp_CFLAGS="$tmp_CFLAGS -Wendif-labels"
fi
#
if test "$compiler_num" -ge "400"; then
tmp_CFLAGS="$tmp_CFLAGS -Wstrict-aliasing=3"
fi
#
- if test "$compiler_num" -ge "402"; then
- tmp_CFLAGS="$tmp_CFLAGS -Wcast-align"
- fi
- #
if test "$compiler_num" -ge "403"; then
tmp_CFLAGS="$tmp_CFLAGS -Wtype-limits -Wold-style-declaration"
tmp_CFLAGS="$tmp_CFLAGS -Wmissing-parameter-type -Wempty-body"
tmp_CFLAGS="$tmp_CFLAGS -Wclobbered -Wignored-qualifiers"
- tmp_CFLAGS="$tmp_CFLAGS -Wconversion -Wno-sign-conversion -Wvla"
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-sign-conversion"
fi
#
if test "$compiler_num" -ge "405"; then
@@ -22532,15 +22817,13 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
#
if test "$want_warnings" = "yes"; then
if test "$compiler_num" -gt "600"; then
- tmp_CPPFLAGS="$tmp_CPPFLAGS -Wall -w2"
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -w2"
tmp_CPPFLAGS="$tmp_CPPFLAGS -Wcheck"
tmp_CPPFLAGS="$tmp_CPPFLAGS -Wcomment"
tmp_CPPFLAGS="$tmp_CPPFLAGS -Wdeprecated"
tmp_CPPFLAGS="$tmp_CPPFLAGS -Wmissing-prototypes"
tmp_CPPFLAGS="$tmp_CPPFLAGS -Wp64"
- tmp_CPPFLAGS="$tmp_CPPFLAGS -Wpointer-arith"
tmp_CPPFLAGS="$tmp_CPPFLAGS -Wreturn-type"
- tmp_CPPFLAGS="$tmp_CPPFLAGS -Wshadow"
tmp_CPPFLAGS="$tmp_CPPFLAGS -Wuninitialized"
tmp_CPPFLAGS="$tmp_CPPFLAGS -Wunused-function"
fi
@@ -22590,8 +22873,7 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
TINY_C)
#
if test "$want_warnings" = "yes"; then
- tmp_CFLAGS="$tmp_CFLAGS -Wall"
- tmp_CFLAGS="$tmp_CFLAGS -Wwrite-strings"
+ tmp_CFLAGS="$tmp_CFLAGS"
tmp_CFLAGS="$tmp_CFLAGS -Wunsupported"
fi
;;
@@ -22599,7 +22881,7 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_options" >&2;}
WATCOM_UNIX_C)
#
if test "$want_warnings" = "yes"; then
- tmp_CFLAGS="$tmp_CFLAGS -Wall -Wextra"
+ tmp_CFLAGS="$tmp_CFLAGS"
fi
;;
#
@@ -22757,6 +23039,172 @@ printf "%s\n" "$as_me: WARNING: compiler options rejected: $tmp_CFLAGS $tmp_CPPF
fi
+if test "$want_warnings" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts " >&5
+printf %s "checking whether C compiler accepts ... " >&6; }
+if test ${ax_cv_check_cflags__+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS "
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ ax_cv_check_cflags__=yes
+else $as_nop
+ ax_cv_check_cflags__=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_check_cflags__" >&5
+printf "%s\n" "$ax_cv_check_cflags__" >&6; }
+if test x"$ax_cv_check_cflags__" = xyes
+then :
+ :
+else $as_nop
+ :
+fi
+
+if test ${CFLAGS+y}
+then :
+ case " $CFLAGS " in
+ *" "*)
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains "; } >&5
+ (: CFLAGS already contains ) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+ *)
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS \""; } >&5
+ (: CFLAGS="$CFLAGS ") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ CFLAGS="$CFLAGS "
+ ;;
+ esac
+else $as_nop
+ CFLAGS=""
+fi
+
+
+
+for flag in -Wall \
+ -Wextra \
+ -Wcast-align \
+ -Wconversion \
+ -Wdeclaration-after-statement \
+ -Wdouble-promotion \
+ -Wfloat-equal \
+ -Wformat-security \
+ -Winit-self \
+ -Wjump-misses-init \
+ -Wlogical-op \
+ -Wmissing-braces \
+ -Wmissing-declarations \
+ -Wmissing-format-attribute \
+ -Wmissing-include-dirs \
+ -Wmissing-prototypes \
+ -Wnested-externs \
+ -Wno-coverage-mismatch \
+ -Wold-style-definition \
+ -Wpacked \
+ -Wpointer-arith \
+ -Wredundant-decls \
+ -Wshadow \
+ -Wsign-conversion \
+ -Wstrict-overflow \
+ -Wstrict-prototypes \
+ -Wtrampolines \
+ -Wundef \
+ -Wunused \
+ -Wvariadic-macros \
+ -Wvla \
+ -Wwrite-strings \
+ -Werror=implicit-int \
+ -Werror=implicit-function-declaration \
+ -Werror=partial-availability \
+ ; do
+ as_CACHEVAR=`printf "%s\n" "ax_cv_check_cflags_-Werror_$flag" | $as_tr_sh`
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5
+printf %s "checking whether C compiler accepts $flag... " >&6; }
+if eval test \${$as_CACHEVAR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+
+ ax_check_save_flags=$CFLAGS
+ CFLAGS="$CFLAGS -Werror $flag"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+int
+main (void)
+{
+
+ ;
+ return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"
+then :
+ eval "$as_CACHEVAR=yes"
+else $as_nop
+ eval "$as_CACHEVAR=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ CFLAGS=$ax_check_save_flags
+fi
+eval ac_res=\$$as_CACHEVAR
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+printf "%s\n" "$ac_res" >&6; }
+if test x"`eval 'as_val=${'$as_CACHEVAR'};printf "%s\n" "$as_val"'`" = xyes
+then :
+ if test ${CFLAGS+y}
+then :
+ case " $CFLAGS " in
+ *" $flag "*)
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5
+ (: CFLAGS already contains $flag) 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ ;;
+ *)
+ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS \$flag\""; } >&5
+ (: CFLAGS="$CFLAGS $flag") 2>&5
+ ac_status=$?
+ printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+ test $ac_status = 0; }
+ CFLAGS="$CFLAGS $flag"
+ ;;
+ esac
+else $as_nop
+ CFLAGS="$flag"
+fi
+
+else $as_nop
+ :
+fi
+
+done
+
+fi
+
if test "$compiler_id" = "INTEL_UNIX_C"; then
#
if test "$compiler_num" -ge "1000"; then
@@ -24543,7 +24991,83 @@ fi
-STDC_HEADERS
+# Autoupdate added the next two lines to ensure that your configure
+# script's behavior did not change. They are probably safe to remove.
+
+{ 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"
+
+
+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
printf %s "checking for egrep... " >&6; }
@@ -29162,6 +29686,182 @@ printf "%s\n" "no" >&6; }
fi
+cares_includes_sys_random="\
+/* includes start */
+#ifdef HAVE_SYS_RANDOM_H
+# include <sys/random.h>
+#endif
+/* includes end */"
+ ac_fn_c_check_header_compile "$LINENO" "sys/random.h" "ac_cv_header_sys_random_h" "$cares_includes_sys_random
+"
+if test "x$ac_cv_header_sys_random_h" = xyes
+then :
+ printf "%s\n" "#define HAVE_SYS_RANDOM_H 1" >>confdefs.h
+
+fi
+
+
+
+ #
+ tst_links_getrandom="unknown"
+ tst_proto_getrandom="unknown"
+ tst_compi_getrandom="unknown"
+ tst_allow_getrandom="unknown"
+ #
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getrandom can be linked" >&5
+printf %s "checking if getrandom can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ /* Define getrandom to an innocuous variant, in case <limits.h> declares getrandom.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define getrandom innocuous_getrandom
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char getrandom (); below. */
+
+#include <limits.h>
+#undef getrandom
+
+/* 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 getrandom ();
+/* 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_getrandom || defined __stub___getrandom
+choke me
+#endif
+
+int
+main (void)
+{
+return getrandom ();
+ ;
+ 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; }
+ tst_links_getrandom="yes"
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ tst_links_getrandom="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_getrandom" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getrandom is prototyped" >&5
+printf %s "checking if getrandom is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $cares_includes_sys_random
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "getrandom" >/dev/null 2>&1
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ tst_proto_getrandom="yes"
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ tst_proto_getrandom="no"
+
+fi
+rm -rf conftest*
+
+ fi
+ #
+ if test "$tst_proto_getrandom" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getrandom is compilable" >&5
+printf %s "checking if getrandom is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $cares_includes_sys_random
+
+int
+main (void)
+{
+
+ if(0 != getrandom(0, 0, 0))
+ return 1;
+
+ ;
+ 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; }
+ tst_compi_getrandom="yes"
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ tst_compi_getrandom="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_getrandom" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getrandom usage allowed" >&5
+printf %s "checking if getrandom usage allowed... " >&6; }
+ if test "x$cares_disallow_getrandom" != "xyes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ tst_allow_getrandom="yes"
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ tst_allow_getrandom="no"
+ fi
+ fi
+ #
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if getrandom might be used" >&5
+printf %s "checking if getrandom might be used... " >&6; }
+ if test "$tst_links_getrandom" = "yes" &&
+ test "$tst_proto_getrandom" = "yes" &&
+ test "$tst_compi_getrandom" = "yes" &&
+ test "$tst_allow_getrandom" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+printf "%s\n" "#define HAVE_GETRANDOM 1" >>confdefs.h
+
+ ac_cv_func_getrandom="yes"
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ ac_cv_func_getrandom="no"
+ fi
+
+
#
tst_links_getservbyport_r="unknown"
tst_proto_getservbyport_r="unknown"
@@ -32800,6 +33500,166 @@ printf "%s\n" "no" >&6; }
fi
+ #
+ tst_links_arc4random_buf="unknown"
+ tst_proto_arc4random_buf="unknown"
+ tst_compi_arc4random_buf="unknown"
+ tst_allow_arc4random_buf="unknown"
+ #
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if arc4random_buf can be linked" >&5
+printf %s "checking if arc4random_buf can be linked... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ /* Define arc4random_buf to an innocuous variant, in case <limits.h> declares arc4random_buf.
+ For example, HP-UX 11i <limits.h> declares gettimeofday. */
+#define arc4random_buf innocuous_arc4random_buf
+
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char arc4random_buf (); below. */
+
+#include <limits.h>
+#undef arc4random_buf
+
+/* 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 arc4random_buf ();
+/* 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_arc4random_buf || defined __stub___arc4random_buf
+choke me
+#endif
+
+int
+main (void)
+{
+return arc4random_buf ();
+ ;
+ 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; }
+ tst_links_arc4random_buf="yes"
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ tst_links_arc4random_buf="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ #
+ if test "$tst_links_arc4random_buf" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if arc4random_buf is prototyped" >&5
+printf %s "checking if arc4random_buf is prototyped... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+ $cares_includes_stdlib
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "arc4random_buf" >/dev/null 2>&1
+then :
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ tst_proto_arc4random_buf="yes"
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ tst_proto_arc4random_buf="no"
+
+fi
+rm -rf conftest*
+
+ fi
+ #
+ if test "$tst_proto_arc4random_buf" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if arc4random_buf is compilable" >&5
+printf %s "checking if arc4random_buf is compilable... " >&6; }
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+
+ $cares_includes_stdlib
+
+int
+main (void)
+{
+
+ arc4random_buf(NULL, 0);
+ return 1;
+
+ ;
+ 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; }
+ tst_compi_arc4random_buf="yes"
+
+else $as_nop
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ tst_compi_arc4random_buf="no"
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
+ fi
+ #
+ if test "$tst_compi_arc4random_buf" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if arc4random_buf usage allowed" >&5
+printf %s "checking if arc4random_buf usage allowed... " >&6; }
+ if test "x$cares_disallow_arc4random_buf" != "xyes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ tst_allow_arc4random_buf="yes"
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ tst_allow_arc4random_buf="no"
+ fi
+ fi
+ #
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if arc4random_buf might be used" >&5
+printf %s "checking if arc4random_buf might be used... " >&6; }
+ if test "$tst_links_arc4random_buf" = "yes" &&
+ test "$tst_proto_arc4random_buf" = "yes" &&
+ test "$tst_compi_arc4random_buf" = "yes" &&
+ test "$tst_allow_arc4random_buf" = "yes"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+
+printf "%s\n" "#define HAVE_ARC4RANDOM_BUF 1" >>confdefs.h
+
+ ac_cv_func_arc4random_buf="yes"
+ else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+ ac_cv_func_arc4random_buf="no"
+ fi
+
+
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PF_INET6" >&5
@@ -33738,37 +34598,7 @@ if test ${with_random+y}
then :
withval=$with_random; CARES_RANDOM_FILE="$withval"
else $as_nop
-
- if test "$cross_compiling" = "no"; then
- as_ac_File=`printf "%s\n" "ac_cv_file_"/dev/urandom"" | $as_tr_sh`
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for \"/dev/urandom\"" >&5
-printf %s "checking for \"/dev/urandom\"... " >&6; }
-if eval test \${$as_ac_File+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- test "$cross_compiling" = yes &&
- as_fn_error $? "cannot check for file existence when cross compiling" "$LINENO" 5
-if test -r ""/dev/urandom""; then
- eval "$as_ac_File=yes"
-else
- eval "$as_ac_File=no"
-fi
-fi
-eval ac_res=\$$as_ac_File
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-printf "%s\n" "$ac_res" >&6; }
-if eval test \"x\$"$as_ac_File"\" = x"yes"
-then :
CARES_RANDOM_FILE="/dev/urandom"
-fi
-
- else
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cannot check for /dev/urandom while cross compiling; assuming none" >&5
-printf "%s\n" "$as_me: WARNING: cannot check for /dev/urandom while cross compiling; assuming none" >&2;}
- fi
-
-
fi
@@ -34652,7 +35482,7 @@ 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 c-ares $as_me 1.18.1, which was
+This file was extended by c-ares $as_me 1.21.0, which was
generated by GNU Autoconf 2.71. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -34720,7 +35550,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
-c-ares config.status 1.18.1
+c-ares config.status 1.21.0
configured by $0, generated by GNU Autoconf 2.71,
with options \\"\$ac_cs_config\\"
@@ -34886,12 +35716,14 @@ lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_q
lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`'
deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`'
want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`'
AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
@@ -35069,13 +35901,13 @@ LN_S \
lt_SP2NL \
lt_NL2SP \
reload_flag \
+FILECMD \
deplibs_check_method \
file_magic_cmd \
file_magic_glob \
want_nocaseglob \
sharedlib_from_linklib_cmd \
AR \
-AR_FLAGS \
archiver_list_spec \
STRIP \
RANLIB \
@@ -36077,6 +36909,9 @@ to_host_file_cmd=$lt_cv_to_host_file_cmd
# convert \$build files to toolchain format.
to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+# A file(cmd) program that detects file types.
+FILECMD=$lt_FILECMD
+
# Method to check whether dependent libraries are shared objects.
deplibs_check_method=$lt_deplibs_check_method
@@ -36095,8 +36930,11 @@ sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
# The archiver.
AR=$lt_AR
+# Flags to create an archive (by configure).
+lt_ar_flags=$lt_ar_flags
+
# Flags to create an archive.
-AR_FLAGS=$lt_AR_FLAGS
+AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"}
# How to feed a file listing to the archiver.
archiver_list_spec=$lt_archiver_list_spec
@@ -36486,7 +37324,7 @@ ltmain=$ac_aux_dir/ltmain.sh
# if finds mixed CR/LF and LF-only lines. Since sed operates in
# text mode, it properly converts lines to CR/LF. This bash problem
# is reportedly fixed, but why not run on old versions too?
- sed '$q' "$ltmain" >> "$cfgfile" \
+ $SED '$q' "$ltmain" >> "$cfgfile" \
|| (rm -f "$cfgfile"; exit 1)
mv -f "$cfgfile" "$ofile" ||
diff --git a/configure.ac b/configure.ac
index 1d0fb5c..7bc578d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1,9 +1,29 @@
+#############################################################
+#
+# Copyright (C) the Massachusetts Institute of Technology.
+# Copyright (C) Daniel Stenberg
+#
+# Permission to use, copy, modify, and distribute this
+# software and its documentation for any purpose and without
+# fee is hereby granted, 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.
+#
+# SPDX-License-Identifier: MIT
+#
+#############################################################
AC_PREREQ([2.60])
-AC_INIT([c-ares], [1.18.1],
+AC_INIT([c-ares], [1.21.0],
[c-ares mailing list: http://lists.haxx.se/listinfo/c-ares])
-CARES_VERSION_INFO="7:1:5"
+CARES_VERSION_INFO="9:2:7"
dnl This flag accepts an argument of the form current[:revision[:age]]. So,
dnl passing -version-info 3:12:1 sets current to 3, revision to 12, and age to
dnl 1.
@@ -182,6 +202,45 @@ CARES_SET_COMPILER_DEBUG_OPTS
CARES_SET_COMPILER_OPTIMIZE_OPTS
CARES_SET_COMPILER_WARNING_OPTS
+if test "$want_warnings" = "yes"; then
+ AX_APPEND_COMPILE_FLAGS([-Wall \
+ -Wextra \
+ -Wcast-align \
+ -Wconversion \
+ -Wdeclaration-after-statement \
+ -Wdouble-promotion \
+ -Wfloat-equal \
+ -Wformat-security \
+ -Winit-self \
+ -Wjump-misses-init \
+ -Wlogical-op \
+ -Wmissing-braces \
+ -Wmissing-declarations \
+ -Wmissing-format-attribute \
+ -Wmissing-include-dirs \
+ -Wmissing-prototypes \
+ -Wnested-externs \
+ -Wno-coverage-mismatch \
+ -Wold-style-definition \
+ -Wpacked \
+ -Wpointer-arith \
+ -Wredundant-decls \
+ -Wshadow \
+ -Wsign-conversion \
+ -Wstrict-overflow \
+ -Wstrict-prototypes \
+ -Wtrampolines \
+ -Wundef \
+ -Wunused \
+ -Wvariadic-macros \
+ -Wvla \
+ -Wwrite-strings \
+ -Werror=implicit-int \
+ -Werror=implicit-function-declaration \
+ -Werror=partial-availability \
+ ], [CFLAGS], [-Werror])
+fi
+
if test "$compiler_id" = "INTEL_UNIX_C"; then
#
if test "$compiler_num" -ge "1000"; then
@@ -493,7 +552,7 @@ dnl Back to "normal" configuring
dnl **********************************************************************
dnl Checks for header files.
-STDC_HEADERS
+AC_HEADER_STDC
AC_PROG_EGREP
@@ -666,6 +725,7 @@ CARES_CHECK_FUNC_GETENV
CARES_CHECK_FUNC_GETHOSTBYADDR
CARES_CHECK_FUNC_GETHOSTBYNAME
CARES_CHECK_FUNC_GETHOSTNAME
+CARES_CHECK_FUNC_GETRANDOM
CARES_CHECK_FUNC_GETSERVBYPORT_R
CARES_CHECK_FUNC_INET_NET_PTON
CARES_CHECK_FUNC_INET_NTOP
@@ -683,6 +743,7 @@ CARES_CHECK_FUNC_STRNCASECMP
CARES_CHECK_FUNC_STRNCMPI
CARES_CHECK_FUNC_STRNICMP
CARES_CHECK_FUNC_WRITEV
+CARES_CHECK_FUNC_ARC4RANDOM_BUF
dnl check for AF_INET6
@@ -896,17 +957,7 @@ AC_ARG_WITH(random,
AS_HELP_STRING([--with-random=FILE],
[read randomness from FILE (default=/dev/urandom)]),
[ CARES_RANDOM_FILE="$withval" ],
- [
- dnl Check for random device. If we're cross compiling, we can't
- dnl check, and it's better to assume it doesn't exist than it is
- dnl to fail on AC_CHECK_FILE or later.
- if test "$cross_compiling" = "no"; then
- AC_CHECK_FILE("/dev/urandom", [ CARES_RANDOM_FILE="/dev/urandom"] )
- else
- AC_MSG_WARN([cannot check for /dev/urandom while cross compiling; assuming none])
- fi
-
- ]
+ [ CARES_RANDOM_FILE="/dev/urandom" ]
)
if test -n "$CARES_RANDOM_FILE" && test X"$CARES_RANDOM_FILE" != Xno ; then
AC_SUBST(CARES_RANDOM_FILE)
diff --git a/docs/CMakeLists.txt b/docs/CMakeLists.txt
index 5b91d31..3fcf39e 100644
--- a/docs/CMakeLists.txt
+++ b/docs/CMakeLists.txt
@@ -1,3 +1,5 @@
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
# Headers and Man Pages installation target
IF (CARES_INSTALL)
# ManPages
diff --git a/docs/Makefile.am b/docs/Makefile.am
index 289445c..1aff381 100644
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@ -1,6 +1,5 @@
-#***************************************************************************
-
-###########################################################################
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
AUTOMAKE_OPTIONS = foreign subdir-objects no-dependencies
@@ -8,4 +7,4 @@ include Makefile.inc
man_MANS = $(MANPAGES)
-EXTRA_DIST = $(MANPAGES) ahost.1 adig.1 acountry.1 Makefile.inc CMakeLists.txt
+EXTRA_DIST = $(MANPAGES) ahost.1 adig.1 Makefile.inc CMakeLists.txt
diff --git a/docs/Makefile.in b/docs/Makefile.in
index b4e656e..02eac58 100644
--- a/docs/Makefile.in
+++ b/docs/Makefile.in
@@ -14,9 +14,8 @@
@SET_MAKE@
-#***************************************************************************
-
-###########################################################################
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
@@ -97,8 +96,12 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \
$(top_srcdir)/m4/ax_ac_print_to_file.m4 \
$(top_srcdir)/m4/ax_add_am_macro_static.m4 \
$(top_srcdir)/m4/ax_am_macros_static.m4 \
+ $(top_srcdir)/m4/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4/ax_append_flag.m4 \
+ $(top_srcdir)/m4/ax_check_compile_flag.m4 \
$(top_srcdir)/m4/ax_check_gnu_make.m4 \
$(top_srcdir)/m4/ax_code_coverage.m4 \
+ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
$(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \
$(top_srcdir)/m4/ax_file_escapes.m4 \
$(top_srcdir)/m4/ax_require_defined.m4 \
@@ -224,6 +227,7 @@ EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
+FILECMD = @FILECMD@
GCOV = @GCOV@
GENHTML = @GENHTML@
GREP = @GREP@
@@ -325,6 +329,9 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AUTOMAKE_OPTIONS = foreign subdir-objects no-dependencies
+
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
MANPAGES = ares_cancel.3 \
ares_create_query.3 \
ares_destroy.3 \
@@ -386,7 +393,7 @@ MANPAGES = ares_cancel.3 \
ares_version.3
man_MANS = $(MANPAGES)
-EXTRA_DIST = $(MANPAGES) ahost.1 adig.1 acountry.1 Makefile.inc CMakeLists.txt
+EXTRA_DIST = $(MANPAGES) ahost.1 adig.1 Makefile.inc CMakeLists.txt
all: all-am
.SUFFIXES:
diff --git a/docs/Makefile.inc b/docs/Makefile.inc
index 3aa62aa..f042c06 100644
--- a/docs/Makefile.inc
+++ b/docs/Makefile.inc
@@ -1,3 +1,5 @@
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
MANPAGES = ares_cancel.3 \
ares_create_query.3 \
ares_destroy.3 \
diff --git a/docs/acountry.1 b/docs/acountry.1
deleted file mode 100644
index 8c3aaea..0000000
--- a/docs/acountry.1
+++ /dev/null
@@ -1,54 +0,0 @@
-.TH ACOUNTRY "1" "April 2011" "c-ares utilities"
-.SH NAME
-acountry \- print the country where an IPv4 address or host is located
-.SH SYNOPSIS
-.B acountry
-[\fIOPTION\fR]... \fIHOST\fR...
-.SH DESCRIPTION
-.PP
-.\" Add any additional description here
-.PP
-Print the country where HOST (an IPv4 address or hostname) is located,
-using the countries.nerd.dk DNS domain to identify the country.
-.PP
-This utility comes with the \fBc\-ares\fR asynchronous resolver library.
-.SH OPTIONS
-.TP
-\fB\-d\fR
-Print some extra debugging output.
-.TP
-\fB\-h\fR, \fB\-\-help\fR
-Display this help and exit.
-.TP
-\fB\-v\fR
-Be more verbose. Print extra information.
-.SH "REPORTING BUGS"
-Report bugs to the c-ares mailing list:
-.br
-\fBhttps://lists.haxx.se/listinfo/c-ares\fR
-.SH "SEE ALSO"
-.PP
-adig(1), ahost(1).
-.PP
-The DNSBL countries.nerd.dk
-.br
-\fBhttp://countries.nerd.dk/\fR
-.SH COPYRIGHT
-This utility is based on code/ideas contained in sofware written by Greg Hudson (ares)
-carrying the following notice:
-.br
-Copyright 1998 by the Massachusetts Institute of Technology.
-.br
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted,
-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.
-.br
-No further copyright claims are being made by the author(s) of this utility.
-.SH AUTHOR
-Gisle Vanem
diff --git a/docs/adig.1 b/docs/adig.1
index 2056b95..6760bbe 100644
--- a/docs/adig.1
+++ b/docs/adig.1
@@ -1,3 +1,21 @@
+.\"
+.\" Copyright (C) the Massachusetts Institute of Technology.
+.\" Copyright (C) Daniel Stenberg
+.\"
+.\" Permission to use, copy, modify, and distribute this
+.\" software and its documentation for any purpose and without
+.\" fee is hereby granted, 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.
+.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ADIG "1" "April 2011" "c-ares utilities"
.SH NAME
adig \- print information collected from Domain Name System (DNS) servers
@@ -18,34 +36,40 @@ This utility comes with the \fBc\-ares\fR asynchronous resolver library.
\fB\-c\fR class
Set the query class.
Possible values for class are
-NY, CHAOS, HS, IN (default).
+ANY, CHAOS, HS and IN (default).
.TP
\fB\-d\fR
Print some extra debugging output.
.TP
\fB\-f\fR flag
-Add a flag.
+Add a behavior control flag.
Possible values for flag are
-igntc, noaliases, norecurse, primary, stayopen, usevc.
+ igntc - ignore to query in TCP to get truncated UDP answer,
+ noaliases - don't honor the HOSTALIASES environment variable,
+ norecurse - don't query upstream servers recursively,
+ primary - use the first server,
+ stayopen - don't close the communication sockets, and
+ usevc - always use TCP.
.TP
-\fB\-h\fR, \fB\-\-help\fR
+\fB\-h\fR, \fB\-?\fR
Display this help and exit.
.TP
-\fB\-T\fR port
-Use specified TCP port to connect to DNS server.
-.TP
\fB\-s\fR server
Connect to specified DNS server, instead of the system's default one(s).
+Servers are tried in round-robin, if the previous one failed.
.TP
\fB\-t\fR type
Query records of specified type.
Possible values for type are
A (default), AAAA, AFSDB, ANY, AXFR, CNAME, GPOS, HINFO, ISDN, KEY, LOC, MAILA,
MAILB, MB, MD, MF, MG, MINFO, MR, MX, NAPTR, NS, NSAP, NSAP_PTR, NULL,
-PTR, PX, RP, RT, SIG, SOA, SRV, TXT, URI, WKS, X25,
+PTR, PX, RP, RT, SIG, SOA, SRV, TXT, URI, WKS and X25.
+.TP
+\fB\-T\fR port
+Connect to the specified TCP port of DNS server.
.TP
\fB\-U\fR port
-Use specified UDP port to connect to DNS server.
+Connect to the specified UDP port of DNS server.
.TP
\fB\-x\fR
For an IPv4 \fB-t PTR a.b.c.d\fR lookup, query for
diff --git a/docs/ahost.1 b/docs/ahost.1
index 430af82..30b968d 100644
--- a/docs/ahost.1
+++ b/docs/ahost.1
@@ -1,3 +1,21 @@
+.\"
+.\" Copyright (C) the Massachusetts Institute of Technology.
+.\" Copyright (C) Daniel Stenberg
+.\"
+.\" Permission to use, copy, modify, and distribute this
+.\" software and its documentation for any purpose and without
+.\" fee is hereby granted, 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.
+.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH AHOST "1" "April 2011" "c-ares utilities"
.SH NAME
ahost \- print the A or AAAA record associated with a hostname or IP address
@@ -17,7 +35,7 @@ This utility comes with the \fBc\-ares\fR asynchronous resolver library.
\fB\-d\fR
Print some extra debugging output.
.TP
-\fB\-h\fR, \fB\-\-help\fR
+\fB\-h\fR, \fB\-?\fR
Display this help and exit.
.TP
\fB\-t\fR type
diff --git a/docs/ares_cancel.3 b/docs/ares_cancel.3
index 1a2d3f5..49f025d 100644
--- a/docs/ares_cancel.3
+++ b/docs/ares_cancel.3
@@ -13,6 +13,8 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_CANCEL 3 "31 March 2004"
.SH NAME
ares_cancel \- Cancel a resolve
diff --git a/docs/ares_create_query.3 b/docs/ares_create_query.3
index 1ab0624..28d1260 100644
--- a/docs/ares_create_query.3
+++ b/docs/ares_create_query.3
@@ -13,6 +13,8 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_CREATE_QUERY 3 "17 Aug 2012"
.SH NAME
ares_create_query \- Compose a single-question DNS query buffer
diff --git a/docs/ares_destroy.3 b/docs/ares_destroy.3
index 9cdee30..a65a522 100644
--- a/docs/ares_destroy.3
+++ b/docs/ares_destroy.3
@@ -13,6 +13,8 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_DESTROY 3 "7 December 2004"
.SH NAME
ares_destroy \- Destroy a resolver channel
diff --git a/docs/ares_destroy_options.3 b/docs/ares_destroy_options.3
index 31e346b..96520d3 100644
--- a/docs/ares_destroy_options.3
+++ b/docs/ares_destroy_options.3
@@ -13,14 +13,16 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_DESTROY_OPTIONS 3 "1 June 2007"
.SH NAME
ares_destroy_options \- Destroy options initialized with ares_save_options
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B void ares_destroy_options(struct ares_options *\fIoptions\fP)
+#include <ares.h>
+
+void ares_destroy_options(struct ares_options *\fIoptions\fP)
.fi
.SH DESCRIPTION
The \fBares_destroy_options(3)\fP function destroys the options struct
diff --git a/docs/ares_dup.3 b/docs/ares_dup.3
index e64c104..ba68c7c 100644
--- a/docs/ares_dup.3
+++ b/docs/ares_dup.3
@@ -13,14 +13,16 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_DUP 3 "26 May 2009"
.SH NAME
ares_dup \- Duplicate a resolver channel
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_dup(ares_channel *\fIdest\fP, ares_channel \fIsource\fP)
+#include <ares.h>
+
+int ares_dup(ares_channel *\fIdest\fP, ares_channel \fIsource\fP)
.fi
.SH DESCRIPTION
The \fBares_dup(3)\fP function duplicates an existing communications channel
@@ -29,9 +31,9 @@ set the variable pointed to by \fIdest\fP to a handle used to identify the
name service channel. The caller should invoke \fIares_destroy(3)\fP on the
handle when the channel is no longer needed.
.SH SEE ALSO
-.BR ares_destroy(3),
-.BR ares_init(3),
-.BR ares_library_init(3)
+.BR ares_destroy (3),
+.BR ares_init (3),
+.BR ares_library_init (3)
.SH AVAILABILITY
\fIares_dup(3)\fP was added in c-ares 1.6.0
.SH AUTHOR
diff --git a/docs/ares_expand_name.3 b/docs/ares_expand_name.3
index fc18df3..2f3866b 100644
--- a/docs/ares_expand_name.3
+++ b/docs/ares_expand_name.3
@@ -13,16 +13,18 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_EXPAND_NAME 3 "20 Nov 2009"
.SH NAME
ares_expand_name \- Expand a DNS-encoded domain name
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_expand_name(const unsigned char *\fIencoded\fP,
-.B const unsigned char *\fIabuf\fP, int \fIalen\fP, char **\fIs\fP,
-.B long *\fIenclen\fP)
+#include <ares.h>
+
+int ares_expand_name(const unsigned char *\fIencoded\fP,
+ const unsigned char *\fIabuf\fP, int \fIalen\fP,
+ char **\fIs\fP, long *\fIenclen\fP)
.fi
.SH DESCRIPTION
The
@@ -58,7 +60,8 @@ The encoded domain name was malformed and could not be expanded.
.B ARES_ENOMEM
Memory was exhausted.
.SH SEE ALSO
-.BR ares_mkquery (3), ares_free_string (3)
+.BR ares_mkquery (3),
+.BR ares_free_string (3)
.SH AUTHOR
Greg Hudson, MIT Information Systems
.br
diff --git a/docs/ares_expand_string.3 b/docs/ares_expand_string.3
index 33dd7bd..5728818 100644
--- a/docs/ares_expand_string.3
+++ b/docs/ares_expand_string.3
@@ -13,16 +13,18 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_EXPAND_NAME 3 "20 Nov 2009"
.SH NAME
ares_expand_string \- Expand a length encoded string
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_expand_string(const unsigned char *\fIencoded\fP,
-.B const unsigned char *\fIabuf\fP, int \fIalen\fP, unsigned char **\fIs\fP,
-.B long *\fIenclen\fP)
+#include <ares.h>
+
+int ares_expand_string(const unsigned char *\fIencoded\fP,
+ const unsigned char *\fIabuf\fP, int \fIalen\fP,
+ unsigned char **\fIs\fP, long *\fIenclen\fP)
.fi
.SH DESCRIPTION
The
diff --git a/docs/ares_fds.3 b/docs/ares_fds.3
index 07063fb..08731ea 100644
--- a/docs/ares_fds.3
+++ b/docs/ares_fds.3
@@ -13,6 +13,8 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_FDS 3 "23 July 1998"
.SH NAME
ares_fds \- return file descriptors to select on
diff --git a/docs/ares_free_data.3 b/docs/ares_free_data.3
index 18e83ce..67cde08 100644
--- a/docs/ares_free_data.3
+++ b/docs/ares_free_data.3
@@ -14,66 +14,65 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_FREE_DATA 3 "5 March 2010"
.SH NAME
ares_free_data \- Free data allocated by several c-ares functions
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B void ares_free_data(void *\fIdataptr\fP)
-.PP
-.B cc file.c -lcares
+#include <ares.h>
+
+void ares_free_data(void *\fIdataptr\fP)
.fi
.SH DESCRIPTION
.PP
-The
-.B ares_free_data(3)
-function frees one or more data structures allocated and returned
-by several c-ares functions. Specifically the data returned by the
-following list of functions must be deallocated using this function.
+The \fBares_free_data(3)\fP function frees one or more data structures
+allocated and returned by several c-ares functions. Specifically the data
+returned by the following list of functions must be deallocated using this
+function.
.TP 5
.B ares_get_servers(3)
-When used to free the data returned by ares_get_servers(3) this
-will free the whole linked list of ares_addr_node structures returned
-by ares_get_servers(3).
+When used to free the data returned by \fIares_get_servers(3)\fP this will
+free the whole linked list of ares_addr_node structures returned by
+\fIares_get_servers(3)\fP.
.TP
.B ares_parse_srv_reply(3)
-When used to free the data returned by ares_parse_srv_reply(3) this
-will free the whole linked list of ares_srv_reply structures returned
-by ares_parse_srv_reply(3), along with any additional storage
-associated with those structures.
+When used to free the data returned by \fIares_parse_srv_reply(3)\fP this will
+free the whole linked list of ares_srv_reply structures returned by
+\fIares_parse_srv_reply(3)\fP, along with any additional storage associated
+with those structures.
.TP
.B ares_parse_mx_reply(3)
-When used to free the data returned by ares_parse_mx_reply(3) this
-will free the whole linked list of ares_mx_reply structures returned
-by ares_parse_mx_reply(3), along with any additional storage
-associated with those structures.
+When used to free the data returned by \fIares_parse_mx_reply(3)\fP this will
+free the whole linked list of ares_mx_reply structures returned by
+\fIares_parse_mx_reply(3)\fP, along with any additional storage associated
+with those structures.
.TP
.B ares_parse_txt_reply(3)
-When used to free the data returned by ares_parse_txt_reply(3) this
-will free the whole linked list of ares_txt_reply structures returned
-by ares_parse_txt_reply(3), along with any additional storage
-associated with those structures.
+When used to free the data returned by \fIares_parse_txt_reply(3)\fP this will
+free the whole linked list of ares_txt_reply structures returned by
+\fIares_parse_txt_reply(3)\fP, along with any additional storage associated
+with those structures.
.TP
.B ares_parse_soa_reply(3)
-When used to free the data returned by ares_parse_soa_reply(3) this
-will free the ares_soa_reply structure, along with any additional storage
+When used to free the data returned by \fIares_parse_soa_reply(3)\fP this will
+free the ares_soa_reply structure, along with any additional storage
associated with those structure.
.B ares_parse_uri_reply(3)
-When used to free the data returned by ares_parse_uri_reply(3) this
-will free list of ares_uri_reply structures, along with any additional
-storage associated with those structure.
+When used to free the data returned by \fIares_parse_uri_reply(3)\fP this will
+free list of ares_uri_reply structures, along with any additional storage
+associated with those structure.
.SH RETURN VALUE
-The ares_free_data() function does not return a value.
+The \fIares_free_data(3)\fP function does not return a value.
.SH AVAILABILITY
This function was first introduced in c-ares version 1.7.0.
.SH SEE ALSO
-.BR ares_get_servers(3),
-.BR ares_parse_srv_reply(3),
-.BR ares_parse_mx_reply(3),
-.BR ares_parse_txt_reply(3),
-.BR ares_parse_soa_reply(3)
+.BR ares_get_servers (3),
+.BR ares_parse_srv_reply (3),
+.BR ares_parse_mx_reply (3),
+.BR ares_parse_txt_reply (3),
+.BR ares_parse_soa_reply (3)
.SH AUTHOR
Yang Tse
.PP
diff --git a/docs/ares_free_hostent.3 b/docs/ares_free_hostent.3
index d692801..ef78408 100644
--- a/docs/ares_free_hostent.3
+++ b/docs/ares_free_hostent.3
@@ -13,14 +13,16 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_FREE_HOSTENT 3 "23 July 1998"
.SH NAME
ares_free_hostent \- Free host structure allocated by ares functions
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B void ares_free_hostent(struct hostent *\fIhost\fP)
+#include <ares.h>
+
+void ares_free_hostent(struct hostent *\fIhost\fP)
.fi
.SH DESCRIPTION
The
diff --git a/docs/ares_free_string.3 b/docs/ares_free_string.3
index 61d88aa..7a4063f 100644
--- a/docs/ares_free_string.3
+++ b/docs/ares_free_string.3
@@ -13,14 +13,16 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_FREE_STRING 3 "4 February 2004"
.SH NAME
ares_free_string \- Free strings allocated by ares functions
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B void ares_free_string(void *\fIstr\fP)
+#include <ares.h>
+
+void ares_free_string(void *\fIstr\fP)
.fi
.SH DESCRIPTION
The \fIares_free_string(3)\fP function frees a string allocated by an ares
diff --git a/docs/ares_freeaddrinfo.3 b/docs/ares_freeaddrinfo.3
index 8a8ad59..8a3bb12 100644
--- a/docs/ares_freeaddrinfo.3
+++ b/docs/ares_freeaddrinfo.3
@@ -13,6 +13,8 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_FREEADDRINFO 3 "31 October 2018"
.SH NAME
ares_freeaddrinfo \- Free addrinfo structure allocated by ares functions
diff --git a/docs/ares_get_servers.3 b/docs/ares_get_servers.3
index d606428..fbd911e 100644
--- a/docs/ares_get_servers.3
+++ b/docs/ares_get_servers.3
@@ -14,15 +14,20 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_GET_SERVERS 3 "5 March 2010"
.SH NAME
ares_get_servers, ares_get_servers_ports \- Retrieve name servers from an initialized ares_channel
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_get_servers(ares_channel \fIchannel\fP, struct ares_addr_node **\fIservers\fP)
-.B int ares_get_servers_ports(ares_channel \fIchannel\fP, struct ares_addr_port_node **\fIservers\fP)
+#include <ares.h>
+
+int ares_get_servers(ares_channel \fIchannel\fP,
+ struct ares_addr_node **\fIservers\fP)
+
+int ares_get_servers_ports(ares_channel \fIchannel\fP,
+ struct ares_addr_port_node **\fIservers\fP)
.fi
.SH DESCRIPTION
The \fBares_get_servers(3)\fP function retrieves name servers configuration
diff --git a/docs/ares_get_servers_ports.3 b/docs/ares_get_servers_ports.3
index 1f5d1f7..2fb6485 100644
--- a/docs/ares_get_servers_ports.3
+++ b/docs/ares_get_servers_ports.3
@@ -1 +1,4 @@
+.\"
+.\" Copyright (C) Daniel Stenberg
+.\" SPDX-License-Identifier: MIT
.so man3/ares_get_servers.3
diff --git a/docs/ares_getaddrinfo.3 b/docs/ares_getaddrinfo.3
index 33c8a50..407020d 100644
--- a/docs/ares_getaddrinfo.3
+++ b/docs/ares_getaddrinfo.3
@@ -13,25 +13,27 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_GETADDRINFO 3 "4 November 2018"
.SH NAME
ares_getaddrinfo \- Initiate a host query by name and service
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B typedef void (*ares_addrinfo_callback)(void *\fIarg\fP, int \fIstatus\fP,
-.B int \fItimeouts\fP, struct ares_addrinfo *\fIresult\fP)
-.PP
-.B void ares_getaddrinfo(ares_channel \fIchannel\fP, const char *\fIname\fP,
-.B const char* \fIservice\fP, const struct ares_addrinfo_hints *\fIhints\fP,
-.B ares_addrinfo_callback \fIcallback\fP, void *\fIarg\fP)
+#include <ares.h>
+
+typedef void (*ares_addrinfo_callback)(void *\fIarg\fP, int \fIstatus\fP,
+ int \fItimeouts\fP,
+ struct ares_addrinfo *\fIresult\fP)
+
+void ares_getaddrinfo(ares_channel \fIchannel\fP, const char *\fIname\fP,
+ const char* \fIservice\fP,
+ const struct ares_addrinfo_hints *\fIhints\fP,
+ ares_addrinfo_callback \fIcallback\fP, void *\fIarg\fP)
.fi
.SH DESCRIPTION
-The
-.B ares_getaddrinfo
-function initiates a host query by name on the name service channel
-identified by
+The \fBares_getaddrinfo(3)\fP function initiates a host query by name on the
+name service channel identified by
.IR channel .
The
.I name
@@ -91,9 +93,7 @@ during a later call to \fIares_process(3)\fP, \fIares_destroy(3)\fP or
.PP
The callback argument
.I arg
-is copied from the
-.B ares_getaddrinfo
-argument
+is copied from the \fBares_getaddrinfo(3)\fP argument
.IR arg .
The callback argument
.I status
@@ -179,8 +179,7 @@ struct ares_addrinfo_cname {
.EE
.RE
.PP
-The reserved memory has to be deleted by
-.B ares_freeaddrinfo.
+The reserved memory has to be deleted by \fBares_freeaddrinfo(3)\fP.
The result is sorted according to RFC6724 except:
- Rule 3 (Avoid deprecated addresses)
diff --git a/docs/ares_gethostbyaddr.3 b/docs/ares_gethostbyaddr.3
index 7727307..eaeb58d 100644
--- a/docs/ares_gethostbyaddr.3
+++ b/docs/ares_gethostbyaddr.3
@@ -13,19 +13,22 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_GETHOSTBYADDR 3 "24 July 1998"
.SH NAME
ares_gethostbyaddr \- Initiate a host query by address
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B typedef void (*ares_host_callback)(void *\fIarg\fP, int \fIstatus\fP,
-.B int \fItimeouts\fP, struct hostent *\fIhostent\fP)
-.PP
-.B void ares_gethostbyaddr(ares_channel \fIchannel\fP, const void *\fIaddr\fP,
-.B int \fIaddrlen\fP, int \fIfamily\fP, ares_host_callback \fIcallback\fP,
-.B void *\fIarg\fP)
+#include <ares.h>
+
+typedef void (*ares_host_callback)(void *\fIarg\fP, int \fIstatus\fP,
+ int \fItimeouts\fP,
+ struct hostent *\fIhostent\fP)
+
+void ares_gethostbyaddr(ares_channel \fIchannel\fP, const void *\fIaddr\fP,
+ int \fIaddrlen\fP, int \fIfamily\fP,
+ ares_host_callback \fIcallback\fP, void *\fIarg\fP)
.fi
.SH DESCRIPTION
The
diff --git a/docs/ares_gethostbyname.3 b/docs/ares_gethostbyname.3
index cfd6a0a..b3614eb 100644
--- a/docs/ares_gethostbyname.3
+++ b/docs/ares_gethostbyname.3
@@ -13,18 +13,22 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_GETHOSTBYNAME 3 "25 July 1998"
.SH NAME
ares_gethostbyname \- Initiate a host query by name
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B typedef void (*ares_host_callback)(void *\fIarg\fP, int \fIstatus\fP,
-.B int \fItimeouts\fP, struct hostent *\fIhostent\fP)
-.PP
-.B void ares_gethostbyname(ares_channel \fIchannel\fP, const char *\fIname\fP,
-.B int \fIfamily\fP, ares_host_callback \fIcallback\fP, void *\fIarg\fP)
+#include <ares.h>
+
+typedef void (*ares_host_callback)(void *\fIarg\fP, int \fIstatus\fP,
+ int \fItimeouts\fP,
+ struct hostent *\fIhostent\fP)
+
+void ares_gethostbyname(ares_channel \fIchannel\fP, const char *\fIname\fP,
+ int \fIfamily\fP, ares_host_callback \fIcallback\fP,
+ void *\fIarg\fP)
.fi
.SH DESCRIPTION
The
diff --git a/docs/ares_gethostbyname_file.3 b/docs/ares_gethostbyname_file.3
index 8f59b41..5bbb28a 100644
--- a/docs/ares_gethostbyname_file.3
+++ b/docs/ares_gethostbyname_file.3
@@ -13,15 +13,17 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_GETHOSTBYNAME 3 "25 July 1998"
.SH NAME
ares_gethostbyname_file \- Lookup a name in the system's hosts file
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_gethostbyname_file(ares_channel \fIchannel\fP, const char *\fIname\fP,
-.B int \fIfamily\fP, struct hostent **host)
+#include <ares.h>
+
+int ares_gethostbyname_file(ares_channel \fIchannel\fP, const char *\fIname\fP,
+ int \fIfamily\fP, struct hostent **host)
.fi
.SH DESCRIPTION
The
diff --git a/docs/ares_getnameinfo.3 b/docs/ares_getnameinfo.3
index 1017432..bde3e80 100644
--- a/docs/ares_getnameinfo.3
+++ b/docs/ares_getnameinfo.3
@@ -13,19 +13,22 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_GETNAMEINFO 3 "1 May 2009"
.SH NAME
ares_getnameinfo \- Address-to-nodename translation in protocol-independent manner
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B typedef void (*ares_nameinfo_callback)(void *\fIarg\fP, int \fIstatus\fP,
-.B int \fItimeouts\fP, char *\fInode\fP, char *\fIservice\fP)
-.PP
-.B void ares_getnameinfo(ares_channel \fIchannel\fP, const struct sockaddr *\fIsa\fP,
-.B ares_socklen_t \fIsalen\fP, int \fIflags\fP, ares_nameinfo_callback \fIcallback\fP,
-.B void *\fIarg\fP)
+#include <ares.h>
+
+typedef void (*ares_nameinfo_callback)(void *\fIarg\fP, int \fIstatus\fP,
+ int \fItimeouts\fP, char *\fInode\fP,
+ char *\fIservice\fP)
+
+void ares_getnameinfo(ares_channel \fIchannel\fP, const struct sockaddr *\fIsa\fP,
+ ares_socklen_t \fIsalen\fP, int \fIflags\fP,
+ ares_nameinfo_callback \fIcallback\fP, void *\fIarg\fP)
.fi
.SH DESCRIPTION
The
diff --git a/docs/ares_getsock.3 b/docs/ares_getsock.3
index 1373291..c502e48 100644
--- a/docs/ares_getsock.3
+++ b/docs/ares_getsock.3
@@ -13,15 +13,17 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_GETSOCK 3 "11 March 2010"
.SH NAME
ares_getsock \- get socket descriptors to wait on
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_getsock(ares_channel \fIchannel\fP, ares_socket_t *\fIsocks\fP,
-.B int \fInumsocks\fP);
+#include <ares.h>
+
+int ares_getsock(ares_channel \fIchannel\fP, ares_socket_t *\fIsocks\fP,
+ int \fInumsocks\fP);
.fi
.SH DESCRIPTION
The
diff --git a/docs/ares_inet_ntop.3 b/docs/ares_inet_ntop.3
index 93ee09c..83306a1 100644
--- a/docs/ares_inet_ntop.3
+++ b/docs/ares_inet_ntop.3
@@ -13,15 +13,17 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_INET_NTOP 3 "17 Feb 2013"
.SH NAME
ares_inet_ntop \- convert a network format address to presentation format
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B const char *
-.B ares_inet_ntop(int af, const void *src, char *dst, ares_socklen_t size);
+#include <ares.h>
+
+const char *ares_inet_ntop(int \fIaf\fP, const void *\fIsrc\fP, char *\fIdst\fP,
+ ares_socklen_t \fIsize\fP);
.fi
.SH DESCRIPTION
This is a portable version with the identical functionality of the commonly
@@ -38,8 +40,8 @@ the size of this buffer, which shall be large enough to hold the text string
(INET_ADDRSTRLEN (16) characters for IPv4, INET6_ADDRSTRLEN (46) characters
for IPv6).
.SH SEE ALSO
-.BR ares_init(3),
-.BR ares_inet_pton(3)
+.BR ares_init (3),
+.BR ares_inet_pton (3)
.SH AVAILABILITY
made properly publicly available in c-ares for real in version 1.10.0
.SH AUTHOR
diff --git a/docs/ares_inet_pton.3 b/docs/ares_inet_pton.3
index b7d86bb..d727533 100644
--- a/docs/ares_inet_pton.3
+++ b/docs/ares_inet_pton.3
@@ -13,14 +13,16 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_INET_PTON 3 "17 Feb 2013"
.SH NAME
ares_inet_pton \- convert an IPv4 or IPv6 address from text to binary form
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B const char *ares_inet_pton(int af, const char *src, void *dst);
+#include <ares.h>
+
+const char *ares_inet_pton(int \fIaf\fP, const char *\fIsrc\fP, void *\fIdst\fP);
.fi
.SH DESCRIPTION
This is a portable version with the identical functionality of the commonly
@@ -34,8 +36,8 @@ in. The \fBdst\fP argument points to a buffer into which the function stores
the numeric address; this shall be large enough to hold the numeric address
(32 bits for AF_INET, 128 bits for AF_INET6).
.SH SEE ALSO
-.BR ares_init(3),
-.BR ares_inet_ntop(3)
+.BR ares_init (3),
+.BR ares_inet_ntop (3)
.SH AVAILABILITY
made properly publicly available in c-ares for real in version 1.10.0
.SH AUTHOR
diff --git a/docs/ares_init.3 b/docs/ares_init.3
index 0baf4b7..9c8347a 100644
--- a/docs/ares_init.3
+++ b/docs/ares_init.3
@@ -14,6 +14,8 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_INIT 3 "5 March 2010"
.SH NAME
ares_init \- Initialize a resolver channel
@@ -68,11 +70,11 @@ please see the
.BR resolv.conf (5)
manual page.
.SH SEE ALSO
-.BR ares_init_options(3),
-.BR ares_destroy(3),
-.BR ares_dup(3),
-.BR ares_library_init(3),
-.BR ares_set_servers(3)
+.BR ares_init_options (3),
+.BR ares_destroy (3),
+.BR ares_dup (3),
+.BR ares_library_init (3),
+.BR ares_set_servers (3)
.SH AUTHOR
Greg Hudson, MIT Information Systems
.br
diff --git a/docs/ares_init_options.3 b/docs/ares_init_options.3
index b9d52a8..46a45e9 100644
--- a/docs/ares_init_options.3
+++ b/docs/ares_init_options.3
@@ -14,6 +14,8 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_INIT 3 "5 March 2010"
.SH NAME
ares_init_options \- Initialize a resolver channel
@@ -41,6 +43,8 @@ struct ares_options {
int nsort;
int ednspsz;
char *resolvconf_path;
+ char *hosts_path;
+ int udp_max_queries;
};
int ares_init_options(ares_channel *\fIchannelptr\fP,
@@ -70,7 +74,7 @@ description of possible flag values.
The number of seconds each name server is given to respond to a query on the
first try. (After the first try, the timeout algorithm becomes more
complicated, but scales linearly with the value of \fItimeout\fP.) The
-default is five seconds. This option is being deprecated by
+default is two seconds. This option is being deprecated by
\fIARES_OPT_TIMEOUTMS\fP starting in c-ares 1.5.2.
.TP 18
.B ARES_OPT_TIMEOUTMS
@@ -79,7 +83,7 @@ default is five seconds. This option is being deprecated by
The number of milliseconds each name server is given to respond to a query on
the first try. (After the first try, the timeout algorithm becomes more
complicated, but scales linearly with the value of \fItimeout\fP.) The
-default is five seconds. Note that this option is specified with the same
+default is two seconds. Note that this option is specified with the same
struct field as the former \fIARES_OPT_TIMEOUT\fP, it is but the option bits
that tell c-ares how to interpret the number. This option was added in c-ares
1.5.2.
@@ -88,7 +92,7 @@ that tell c-ares how to interpret the number. This option was added in c-ares
.B int \fItries\fP;
.br
The number of tries the resolver will try contacting each name server
-before giving up. The default is four tries.
+before giving up. The default is three tries.
.TP 18
.B ARES_OPT_NDOTS
.B int \fIndots\fP;
@@ -101,16 +105,14 @@ resolv.conf or the RES_OPTIONS environment variable.
.B ARES_OPT_UDP_PORT
.B unsigned short \fIudp_port\fP;
.br
-The port to use for queries over UDP, in network byte order.
-The default value is 53 (in network byte order), the standard name
-service port.
+The port to use for queries over UDP, in host byte order.
+The default value is 53, the standard name service port.
.TP 18
.B ARES_OPT_TCP_PORT
.B unsigned short \fItcp_port\fP;
.br
-The port to use for queries over TCP, in network byte order.
-The default value is 53 (in network byte order), the standard name
-service port.
+The port to use for queries over TCP, in host byte order.
+The default value is 53, the standard name service port.
.TP 18
.B ARES_OPT_SERVERS
.B struct in_addr *\fIservers\fP;
@@ -118,10 +120,9 @@ service port.
.B int \fInservers\fP;
.br
The list of IPv4 servers to contact, instead of the servers specified in
-resolv.conf or the local named. In order to allow specification of either
-IPv4 or IPv6 name servers, the
-.BR ares_set_servers(3)
-function must be used instead.
+resolv.conf or the local named. In order to allow specification of either IPv4
+or IPv6 name servers, the \Bares_set_servers(3)\fP function must be used
+instead.
.TP 18
.B ARES_OPT_DOMAINS
.B char **\fIdomains\fP;
@@ -195,6 +196,24 @@ should be set to a path string, and will be honoured on *nix like systems. The
default is
.B /etc/resolv.conf
.br
+.TP 18
+.B ARES_OPT_HOSTS_FILE
+.B char *\fIhosts_path\fP;
+.br
+The path to use for reading the hosts file. The
+.I hosts_path
+should be set to a path string, and will be honoured on *nix like systems. The
+default is
+.B /etc/hosts
+.br
+.TP 18
+.B ARES_OPT_UDP_MAX_QUERIES
+.B int \fIudp_max_queries\fP;
+.br
+The maximum number of udp queries that can be sent on a single ephemeral port
+to a given DNS server before a new ephemeral port is assigned. Any value of 0
+or less will be considered unlimited, and is the default.
+.br
.PP
The \fIoptmask\fP parameter also includes options without a corresponding
field in the
@@ -274,19 +293,19 @@ When initializing from
path location)
\fBares_init_options(3)\fP reads the \fIdomain\fP and \fIsearch\fP directives
to allow lookups of short names relative to the domains specified. The
-\fIdomain\fP and \fIsearch\fP directives override one another. If more that
+\fIdomain\fP and \fIsearch\fP directives override one another. If more than
one instance of either \fIdomain\fP or \fIsearch\fP directives is specified,
the last occurrence wins. For more information, please see the
.BR resolv.conf (5)
manual page.
.SH SEE ALSO
-.BR ares_init(3),
-.BR ares_destroy(3),
-.BR ares_dup(3),
-.BR ares_library_init(3),
-.BR ares_save_options(3),
-.BR ares_set_servers(3),
-.BR ares_set_sortlist(3)
+.BR ares_init (3),
+.BR ares_destroy (3),
+.BR ares_dup (3),
+.BR ares_library_init (3),
+.BR ares_save_options (3),
+.BR ares_set_servers (3),
+.BR ares_set_sortlist (3)
.SH AUTHOR
Greg Hudson, MIT Information Systems
.br
diff --git a/docs/ares_library_cleanup.3 b/docs/ares_library_cleanup.3
index a1ffa6a..d6d7695 100644
--- a/docs/ares_library_cleanup.3
+++ b/docs/ares_library_cleanup.3
@@ -14,6 +14,8 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_LIBRARY_CLEANUP 3 "19 May 2009"
.SH NAME
ares_library_cleanup \- c-ares library deinitialization
@@ -61,11 +63,10 @@ the DllMain function. Doing so will produce deadlocks and other problems.
This function was first introduced in c-ares version 1.7.0 along with the
definition of preprocessor symbol \fICARES_HAVE_ARES_LIBRARY_CLEANUP\fP as an
indication of the availability of this function. Reference counting in
-\fIares_library_init()\fP and \fIares_library_cleanup()\fP, which requires
+\fIares_library_init(3)\fP and \fIares_library_cleanup(3)\fP, which requires
calls to the former function to match calls to the latter, is present since
-c-ares version 1.10.0.
-Earlier versions would deinitialize the library on the first call
-to \fIares_library_cleanup()\fP.
+c-ares version 1.10.0. Earlier versions would deinitialize the library on the
+first call to \fIares_library_cleanup(3)\fP.
.PP
Since the introduction of this function, it is absolutely mandatory to call it
for any Win32/64 program using c-ares.
@@ -74,8 +75,8 @@ Non-Win32/64 systems can still use c-ares version 1.7.0 without calling
\fIares_library_cleanup(3)\fP due to the fact that \fIcurrently\fP it is nearly
a do-nothing function on non-Win32/64 platforms.
.SH SEE ALSO
-.BR ares_library_init(3),
-.BR ares_cancel(3)
+.BR ares_library_init (3),
+.BR ares_cancel (3)
.SH AUTHOR
Yang Tse
.PP
diff --git a/docs/ares_library_init.3 b/docs/ares_library_init.3
index b38cf32..2f61ce2 100644
--- a/docs/ares_library_init.3
+++ b/docs/ares_library_init.3
@@ -14,6 +14,8 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_LIBRARY_INIT 3 "19 May 2009"
.SH NAME
ares_library_init \- c-ares library initialization
@@ -79,23 +81,24 @@ DllMain function. Doing so will produce deadlocks and other problems.
Initialize everything possible. This sets all known bits.
.TP
.B ARES_LIB_INIT_WIN32
-Initialize Win32/64 specific libraries.
+Initialize Win32/64 specific libraries. As of c-ares 1.19.0, this is ignored
+as there are no currently dynamically loaded libraries.
.TP
.B ARES_LIB_INIT_NONE
Initialize nothing extra. This sets no bit.
.SH RETURN VALUE
-Upon successful completion, ares_library_init() will return 0. Otherwise, a
-non-zero error number will be returned to indicate the error. Except for
+Upon successful completion, \fIares_library_init(3)\fP returns 0. Otherwise,
+a non-zero error number is returned to indicate the error. Except for
\fIares_strerror(3)\fP, you shall not call any other c-ares function upon
\fIares_library_init(3)\fP failure.
.SH AVAILABILITY
This function was first introduced in c-ares version 1.7.0 along with the
definition of preprocessor symbol \fICARES_HAVE_ARES_LIBRARY_INIT\fP as an
-indication of the availability of this function. Its recursive behavior,
-which requires a matching number of calls to \fIares_library_cleanup()\fP
-in order to deinitialize the library, is present since c-ares version
-1.10.0. Earlier versions would deinitialize the library on the first call
-to \fIares_library_cleanup()\fP.
+indication of the availability of this function. Its recursive behavior, which
+requires a matching number of calls to \fIares_library_cleanup(3)\fP in order
+to deinitialize the library, is present since c-ares version 1.10.0. Earlier
+versions would deinitialize the library on the first call to
+\fIares_library_cleanup(3)\fP.
.PP
Since the introduction of this function it is absolutely mandatory to
call it for any Win32/64 program using c-ares.
@@ -104,8 +107,8 @@ Non-Win32/64 systems can still use c-ares version 1.7.0 without calling
\fIares_library_init(3)\fP due to the fact that \fIcurrently\fP it is nearly
a do-nothing function on non-Win32/64 platforms at this point.
.SH SEE ALSO
-.BR ares_library_cleanup(3),
-.BR ares_strerror(3)
+.BR ares_library_cleanup (3),
+.BR ares_strerror (3)
.SH AUTHOR
Yang Tse
.PP
diff --git a/docs/ares_library_init_android.3 b/docs/ares_library_init_android.3
index 9e1ac4c..7370a8a 100644
--- a/docs/ares_library_init_android.3
+++ b/docs/ares_library_init_android.3
@@ -13,6 +13,8 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_LIBRARY_INIT_ANDROID 3 "13 Sept 2017"
.SH NAME
ares_library_init_android \- c-ares library Android initialization
@@ -133,8 +135,8 @@ Context. It is assumed the JVM has aleady been registered through
.SH AVAILABILITY
This function was first introduced in c-ares version 1.15.0.
.SH SEE ALSO
-.BR ares_library_init(3),
-.BR ares_library_cleanup(3),
+.BR ares_library_init (3),
+.BR ares_library_cleanup (3),
.SH AUTHOR
John Schember
.PP
diff --git a/docs/ares_library_initialized.3 b/docs/ares_library_initialized.3
index 3e2727f..8ddc145 100644
--- a/docs/ares_library_initialized.3
+++ b/docs/ares_library_initialized.3
@@ -13,6 +13,8 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_LIBRARY_INITIALIZED 3 "29 Sep 2016"
.SH NAME
ares_library_initialized \- get the initialization state
@@ -30,5 +32,5 @@ initialization is needed.
.SH AVAILABILITY
This function was first introduced in c-ares version 1.11.0
.SH SEE ALSO
-.BR ares_library_init(3),
-.BR ares_library_cleanup(3)
+.BR ares_library_init (3),
+.BR ares_library_cleanup (3)
diff --git a/docs/ares_mkquery.3 b/docs/ares_mkquery.3
index c8afad8..c878843 100644
--- a/docs/ares_mkquery.3
+++ b/docs/ares_mkquery.3
@@ -13,16 +13,18 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_MKQUERY 3 "20 Nov 2009"
.SH NAME
ares_mkquery \- Compose a single-question DNS query buffer
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_mkquery(const char *\fIname\fP, int \fIdnsclass\fP, int \fItype\fP,
-.B unsigned short \fIid\fP, int \fIrd\fP, unsigned char **\fIbuf\fP,
-.B int *\fIbuflen\fP)
+#include <ares.h>
+
+int ares_mkquery(const char *\fIname\fP, int \fIdnsclass\fP, int \fItype\fP,
+ unsigned short \fIid\fP, int \fIrd\fP, unsigned char **\fIbuf\fP,
+ int *\fIbuflen\fP)
.fi
.SH DESCRIPTION
Deprecated function. See \fIares_create_query(3)\fP instead!
diff --git a/docs/ares_parse_a_reply.3 b/docs/ares_parse_a_reply.3
index 8e4908a..8dd20c3 100644
--- a/docs/ares_parse_a_reply.3
+++ b/docs/ares_parse_a_reply.3
@@ -13,16 +13,18 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_PARSE_A_REPLY 3 "25 July 1998"
.SH NAME
ares_parse_a_reply \- Parse a reply to a DNS query of type A
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_parse_a_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
-.B struct hostent **\fIhost\fP,
-.B struct ares_addrttl *\fIaddrttls\fP, int *\fInaddrttls\fP);
+#include <ares.h>
+
+int ares_parse_a_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
+ struct hostent **\fIhost\fP,
+ struct ares_addrttl *\fIaddrttls\fP, int *\fInaddrttls\fP);
.fi
.SH DESCRIPTION
The
diff --git a/docs/ares_parse_aaaa_reply.3 b/docs/ares_parse_aaaa_reply.3
index 674acc5..ebb4904 100644
--- a/docs/ares_parse_aaaa_reply.3
+++ b/docs/ares_parse_aaaa_reply.3
@@ -13,16 +13,18 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_PARSE_AAAA_REPLY 3 "20 Nov 2009"
.SH NAME
ares_parse_aaaa_reply \- Parse a reply to a DNS query of type AAAA
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_parse_aaaa_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
-.B struct hostent **\fIhost\fP,
-.B struct ares_addr6ttl *\fIaddrttls\fP, int *\fInaddrttls\fP);
+#include <ares.h>
+
+int ares_parse_aaaa_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
+ struct hostent **\fIhost\fP,
+ struct ares_addr6ttl *\fIaddrttls\fP, int *\fInaddrttls\fP);
.fi
.SH DESCRIPTION
The
diff --git a/docs/ares_parse_caa_reply.3 b/docs/ares_parse_caa_reply.3
index 71bd6be..f99fb26 100644
--- a/docs/ares_parse_caa_reply.3
+++ b/docs/ares_parse_caa_reply.3
@@ -13,6 +13,8 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_PARSE_CAA_REPLY 3 "16 September 2020"
.SH NAME
ares_parse_caa_reply \- Parse a reply to a DNS query of type CAA
diff --git a/docs/ares_parse_mx_reply.3 b/docs/ares_parse_mx_reply.3
index 87df459..851380a 100644
--- a/docs/ares_parse_mx_reply.3
+++ b/docs/ares_parse_mx_reply.3
@@ -13,15 +13,16 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_PARSE_MX_REPLY 3 "4 August 2009"
.SH NAME
ares_parse_mx_reply \- Parse a reply to a DNS query of type MX
.SH SYNOPSIS
-.nf
-.B #include <ares.h>
-.PP
-.B int ares_parse_mx_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP,
-.B struct ares_mx_reply** \fImx_out\fP);
+#include <ares.h>
+
+int ares_parse_mx_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP,
+ struct ares_mx_reply** \fImx_out\fP);
.fi
.SH DESCRIPTION
The
@@ -39,7 +40,7 @@ memory and a pointer to it stored into the variable pointed to by
It is the caller's responsibility to free the resulting
.IR mx_out
structure when it is no longer needed using the function
-.B ares_free_data
+\fBares_free_data(3)\fP.
.PP
The structure
.I ares_mx_reply
diff --git a/docs/ares_parse_naptr_reply.3 b/docs/ares_parse_naptr_reply.3
index 2a5f1e5..b5ef19c 100644
--- a/docs/ares_parse_naptr_reply.3
+++ b/docs/ares_parse_naptr_reply.3
@@ -13,15 +13,17 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_PARSE_NAPTR_REPLY 3 "23 February 2012"
.SH NAME
ares_parse_naptr_reply \- Parse a reply to a DNS query of type NAPTR
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_parse_naptr_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP,
-.B struct ares_naptr_reply** \fInaptr_out\fP);
+#include <ares.h>
+
+int ares_parse_naptr_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP,
+ struct ares_naptr_reply** \fInaptr_out\fP);
.fi
.SH DESCRIPTION
The
@@ -39,7 +41,7 @@ memory and a pointer to it stored into the variable pointed to by
It is the caller's responsibility to free the resulting
.IR naptr_out
structure when it is no longer needed using the function
-.B ares_free_data
+\fBares_free_data(3)\fP.
.PP
The structure
.I ares_naptr_reply
diff --git a/docs/ares_parse_ns_reply.3 b/docs/ares_parse_ns_reply.3
index b6340ac..2fed14c 100644
--- a/docs/ares_parse_ns_reply.3
+++ b/docs/ares_parse_ns_reply.3
@@ -13,15 +13,17 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_PARSE_NS_REPLY 3 "10 February 2007"
.SH NAME
ares_parse_ns_reply \- Parse a reply to a DNS query of type NS into a hostent
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_parse_ns_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
-.B struct hostent **\fIhost\fP);
+#include <ares.h>
+
+int ares_parse_ns_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
+ struct hostent **\fIhost\fP);
.fi
.SH DESCRIPTION
The
diff --git a/docs/ares_parse_ptr_reply.3 b/docs/ares_parse_ptr_reply.3
index 1016a68..c554eca 100644
--- a/docs/ares_parse_ptr_reply.3
+++ b/docs/ares_parse_ptr_reply.3
@@ -13,16 +13,18 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_PARSE_PTR_REPLY 3 "25 July 1998"
.SH NAME
ares_parse_ptr_reply \- Parse a reply to a DNS query of type PTR into a hostent
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_parse_ptr_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
-.B const void *\fIaddr\fP, int \fIaddrlen\fP, int \fIfamily\fP,
-.B struct hostent **\fIhost\fP);
+#include <ares.h>
+
+int ares_parse_ptr_reply(const unsigned char *\fIabuf\fP, int \fIalen\fP,
+ const void *\fIaddr\fP, int \fIaddrlen\fP,
+ int \fIfamily\fP, struct hostent **\fIhost\fP);
.fi
.SH DESCRIPTION
The
diff --git a/docs/ares_parse_soa_reply.3 b/docs/ares_parse_soa_reply.3
index 1c4456f..f816126 100644
--- a/docs/ares_parse_soa_reply.3
+++ b/docs/ares_parse_soa_reply.3
@@ -13,15 +13,17 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_PARSE_SOA_REPLY 3 "29 May 2012"
.SH NAME
ares_parse_soa_reply \- Parse a reply to a DNS query of type SOA
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_parse_soa_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP,
-.B struct ares_soa_reply** \fIsoa_out\fP);
+#include <ares.h>
+
+int ares_parse_soa_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP,
+ struct ares_soa_reply** \fIsoa_out\fP);
.fi
.SH DESCRIPTION
The
@@ -38,7 +40,7 @@ memory and a pointer to it stored into the variable pointed to by
It is the caller's responsibility to free the resulting
.IR soa_out
structure when it is no longer needed using the function
-.B ares_free_data
+\fBares_free_data(3)\fP.
.PP
The structure
.I ares_soa_reply
diff --git a/docs/ares_parse_srv_reply.3 b/docs/ares_parse_srv_reply.3
index 9b561ff..d16f0d8 100644
--- a/docs/ares_parse_srv_reply.3
+++ b/docs/ares_parse_srv_reply.3
@@ -13,15 +13,17 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_PARSE_SRV_REPLY 3 "4 August 2009"
.SH NAME
ares_parse_srv_reply \- Parse a reply to a DNS query of type SRV
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_parse_srv_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP,
-.B struct ares_srv_reply** \fIsrv_out\fP);
+#include <ares.h>
+
+int ares_parse_srv_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP,
+ struct ares_srv_reply** \fIsrv_out\fP);
.fi
.SH DESCRIPTION
The
@@ -39,7 +41,7 @@ memory and a pointer to it stored into the variable pointed to by
It is the caller's responsibility to free the resulting
.IR srv_out
structure when it is no longer needed using the function
-.B ares_free_data
+\fBares_free_data(3)\fP.
.PP
The structure
.I ares_srv_reply
diff --git a/docs/ares_parse_txt_reply.3 b/docs/ares_parse_txt_reply.3
index e15d0ea..22807fa 100644
--- a/docs/ares_parse_txt_reply.3
+++ b/docs/ares_parse_txt_reply.3
@@ -13,24 +13,25 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_PARSE_TXT_REPLY 3 "27 October 2009"
.SH NAME
ares_parse_txt_reply \- Parse a reply to a DNS query of type TXT
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_parse_txt_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP,
-.B struct ares_txt_reply **\fItxt_out\fP);
-.PP
-.B int ares_parse_txt_reply_ext(const unsigned char* \fIabuf\fP, int \fIalen\fP,
-.B struct ares_txt_ext **\fItxt_out\fP);
+#include <ares.h>
+
+int ares_parse_txt_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP,
+ struct ares_txt_reply **\fItxt_out\fP);
+
+int ares_parse_txt_reply_ext(const unsigned char* \fIabuf\fP, int \fIalen\fP,
+ struct ares_txt_ext **\fItxt_out\fP);
.fi
.SH DESCRIPTION
-The
-.BR "ares_parse_txt_reply" " (" "ares_parse_txt_reply_ext" ")"
-function parses the response to a query of type TXT into a
-linked list (one element per sub-string) of
+The \fIares_parse_txt_reply(3)\fP and \fIares_parse_txt_reply_ext(3)\fP
+functions parse the response to a query of type TXT into a linked list (one
+element per sub-string) of
.IR "struct ares_txt_reply" " (" "struct ares_txt_ext" ")"
The parameters
.I abuf
@@ -42,13 +43,11 @@ memory and a pointer to it stored into the variable pointed to by
It is the caller's responsibility to free the resulting
.IR txt_out
structure when it is no longer needed using the function
-.B ares_free_data
-.PP
+\fBares_free_data(3)\fP.
+
The structure
.I ares_txt_reply
contains the following fields:
-.sp
-.in +4n
.nf
struct ares_txt_reply {
struct ares_txt_reply *next;
@@ -56,13 +55,10 @@ struct ares_txt_reply {
unsigned char *txt;
};
.fi
-.in
-.PP
+
The structure
.I ares_txt_ext
contains the following fields:
-.sp
-.in +4n
.nf
struct ares_txt_ext {
struct ares_txt_ext *next;
@@ -71,8 +67,6 @@ struct ares_txt_ext {
unsigned char record_start;
};
.fi
-.in
-.PP
The
.I record_start
field in
@@ -85,7 +79,7 @@ will have at least one item with
equal to 1, and may have some items with
.I record_start
equal to 0 between them.
-.PP
+
These sequences of
.I struct ares_txt_ext
(starting from the item with
@@ -93,7 +87,6 @@ These sequences of
equal to 1, and ending right before the record start item) may be treated as
either components of a single TXT record or as a multi-parted TXT record,
depending on particular use case.
-.PP
.SH RETURN VALUES
.BR "ares_parse_txt_reply" " (" "ares_parse_txt_reply_ext" ")"
can return any of the following values:
diff --git a/docs/ares_parse_uri_reply.3 b/docs/ares_parse_uri_reply.3
index 09da1a9..d2ec037 100644
--- a/docs/ares_parse_uri_reply.3
+++ b/docs/ares_parse_uri_reply.3
@@ -13,21 +13,21 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_PARSE_URI_REPLY 3 "14 August 2020"
.SH NAME
ares_parse_uri_reply \- Parse a reply to a DNS query of type URI
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_parse_uri_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP,
-.B struct ares_uri_reply** \fIuri_out\fP);
+#include <ares.h>
+
+int ares_parse_uri_reply(const unsigned char* \fIabuf\fP, int \fIalen\fP,
+ struct ares_uri_reply** \fIuri_out\fP);
.fi
.SH DESCRIPTION
-The
-.B ares_parse_uri_reply
-function parses the response to a query of type URI into a
-linked list of
+The \fIares_parse_uri_reply(3)\fP function parses the response to a query of
+type URI into a linked list of
.I struct ares_uri_reply
The parameters
.I abuf
@@ -39,13 +39,11 @@ memory and a pointer to it stored into the variable pointed to by
It is the caller's responsibility to free the resulting
.IR uri_out
structure when it is no longer needed using the function
-.B ares_free_data
-.PP
+\fBares_free_data(3)\fP.
+
The structure
.I ares_uri_reply
contains the following fields:
-.sp
-.in +4n
.nf
struct ares_uri_reply {
struct ares_uri_reply *next;
@@ -55,8 +53,6 @@ struct ares_uri_reply {
int ttl;
};
.fi
-.in
-.PP
.SH RETURN VALUES
.B ares_parse_uri_reply
can return any of the following values:
diff --git a/docs/ares_process.3 b/docs/ares_process.3
index caabbf1..4f6ec98 100644
--- a/docs/ares_process.3
+++ b/docs/ares_process.3
@@ -13,6 +13,8 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_PROCESS 3 "25 July 1998"
.SH NAME
ares_process \- Process events for name resolution
@@ -44,7 +46,7 @@ if they complete successfully or fail.
\fBares_process_fd(3)\fP works the same way but acts and operates only on the
specific file descriptors (sockets) you pass in to the function. Use
ARES_SOCKET_BAD for "no action". This function is provided to allow users of
-c-ares to void \fIselect(3)\fP in their applications and within c-ares.
+c-ares to avoid \fIselect(3)\fP in their applications and within c-ares.
To only process possible timeout conditions without a socket event occurring,
one may pass NULL as the values for both \fIread_fds\fP and \fIwrite_fds\fP for
diff --git a/docs/ares_query.3 b/docs/ares_query.3
index 733fbc9..aa40f85 100644
--- a/docs/ares_query.3
+++ b/docs/ares_query.3
@@ -13,19 +13,22 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_QUERY 3 "24 July 1998"
.SH NAME
ares_query \- Initiate a single-question DNS query
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP,
-.B int \fItimeouts\fP, unsigned char *\fIabuf\fP, int \fIalen\fP)
-.PP
-.B void ares_query(ares_channel \fIchannel\fP, const char *\fIname\fP,
-.B int \fIdnsclass\fP, int \fItype\fP, ares_callback \fIcallback\fP,
-.B void *\fIarg\fP)
+#include <ares.h>
+
+typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP,
+ int \fItimeouts\fP, unsigned char *\fIabuf\fP,
+ int \fIalen\fP)
+
+void ares_query(ares_channel \fIchannel\fP, const char *\fIname\fP,
+ int \fIdnsclass\fP, int \fItype\fP,
+ ares_callback \fIcallback\fP, void *\fIarg\fP)
.fi
.SH DESCRIPTION
The
diff --git a/docs/ares_save_options.3 b/docs/ares_save_options.3
index bddae04..308eb39 100644
--- a/docs/ares_save_options.3
+++ b/docs/ares_save_options.3
@@ -13,14 +13,17 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_SAVE_OPTIONS 3 "5 March 2010"
.SH NAME
ares_save_options \- Save configuration values obtained from initialized ares_channel
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_save_options(ares_channel \fIchannel\fP, struct ares_options *\fIoptions\fP, int *\fIoptmask\fP)
+#include <ares.h>
+
+int ares_save_options(ares_channel \fIchannel\fP,
+ struct ares_options *\fIoptions\fP, int *\fIoptmask\fP)
.fi
.SH DESCRIPTION
The \fBares_save_options(3)\fP function saves the channel data identified by
diff --git a/docs/ares_search.3 b/docs/ares_search.3
index 2c85d20..c81f03b 100644
--- a/docs/ares_search.3
+++ b/docs/ares_search.3
@@ -13,19 +13,22 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_SEARCH 3 "24 July 1998"
.SH NAME
ares_search \- Initiate a DNS query with domain search
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP,
-.B int \fItimeouts\fP, unsigned char *\fIabuf\fP, int \fIalen\fP)
-.PP
-.B void ares_search(ares_channel \fIchannel\fP, const char *\fIname\fP,
-.B int \fIdnsclass\fP, int \fItype\fP, ares_callback \fIcallback\fP,
-.B void *\fIarg\fP)
+#include <ares.h>
+
+typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP,
+ int \fItimeouts\fP, unsigned char *\fIabuf\fP,
+ int \fIalen\fP)
+
+void ares_search(ares_channel \fIchannel\fP, const char *\fIname\fP,
+ int \fIdnsclass\fP, int \fItype\fP,
+ ares_callback \fIcallback\fP, void *\fIarg\fP)
.fi
.SH DESCRIPTION
The
diff --git a/docs/ares_send.3 b/docs/ares_send.3
index b89abfe..59f2e2b 100644
--- a/docs/ares_send.3
+++ b/docs/ares_send.3
@@ -13,18 +13,21 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_SEND 3 "25 July 1998"
.SH NAME
ares_send \- Initiate a DNS query
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP,
-.B int \fItimeouts\fP, unsigned char *\fIabuf\fP, int \fIalen\fP)
-.PP
-.B void ares_send(ares_channel \fIchannel\fP, const unsigned char *\fIqbuf\fP,
-.B int \fIqlen\fP, ares_callback \fIcallback\fP, void *\fIarg\fP)
+#include <ares.h>
+
+typedef void (*ares_callback)(void *\fIarg\fP, int \fIstatus\fP,
+ int \fItimeouts\fP, unsigned char *\fIabuf\fP,
+ int \fIalen\fP)
+
+void ares_send(ares_channel \fIchannel\fP, const unsigned char *\fIqbuf\fP,
+ int \fIqlen\fP, ares_callback \fIcallback\fP, void *\fIarg\fP)
.fi
.SH DESCRIPTION
The
diff --git a/docs/ares_set_local_dev.3 b/docs/ares_set_local_dev.3
index 7d82133..7c32d1a 100644
--- a/docs/ares_set_local_dev.3
+++ b/docs/ares_set_local_dev.3
@@ -13,14 +13,16 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_SET_LOCAL_DEV 3 "30 June 2010"
.SH NAME
ares_set_local_dev \- Bind to a specific network device when creating sockets.
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B void ares_set_local_dev(ares_channel \fIchannel\fP, const char* \fIlocal_dev_name\fP)
+#include <ares.h>
+
+void ares_set_local_dev(ares_channel \fIchannel\fP, const char* \fIlocal_dev_name\fP)
.fi
.SH DESCRIPTION
The \fBares_set_local_dev\fP function causes all future sockets
diff --git a/docs/ares_set_local_ip4.3 b/docs/ares_set_local_ip4.3
index e68e80e..86965ab 100644
--- a/docs/ares_set_local_ip4.3
+++ b/docs/ares_set_local_ip4.3
@@ -13,14 +13,16 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_SET_LOCAL_IP4 3 "30 June 2010"
.SH NAME
ares_set_local_ip4 \- Set local IPv4 address outgoing requests.
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B void ares_set_local_ip4(ares_channel \fIchannel\fP, unsigned int \fIlocal_ip\fP)
+#include <ares.h>
+
+void ares_set_local_ip4(ares_channel \fIchannel\fP, unsigned int \fIlocal_ip\fP)
.fi
.SH DESCRIPTION
The \fBares_set_local_ip4\fP function sets the IP address for outbound
diff --git a/docs/ares_set_local_ip6.3 b/docs/ares_set_local_ip6.3
index e659f5c..585be29 100644
--- a/docs/ares_set_local_ip6.3
+++ b/docs/ares_set_local_ip6.3
@@ -13,20 +13,22 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_SET_LOCAL_IP6 3 "30 June 2010"
.SH NAME
ares_set_local_ip6 \- Set local IPv6 address outgoing requests.
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B void ares_set_local_ip6(ares_channel \fIchannel\fP, const unsigned char* \fIlocal_ip6\fP)
+#include <ares.h>
+
+void ares_set_local_ip6(ares_channel \fIchannel\fP, const unsigned char* \fIlocal_ip6\fP)
.fi
.SH DESCRIPTION
-The \fBares_set_local_ip6\fP function sets the IPv6 address for outbound
-IPv6 requests. The parameter \fIlocal_ip6\fP is specified in network byte
-order. This allows users to specify outbound interfaces when used on
-multi-homed systems. The local_ip6 argument must be 16 bytes in length.
+The \fBares_set_local_ip6\fP function sets the IPv6 address for outbound IPv6
+requests. The parameter \fIlocal_ip6\fP is specified in network byte order.
+This allows users to specify outbound interfaces when used on multi-homed
+systems. The \fIlocal_ip6\fP argument must be 16 bytes in length.
.SH SEE ALSO
.BR ares_set_local_ip4 (3)
.SH NOTES
diff --git a/docs/ares_set_servers.3 b/docs/ares_set_servers.3
index 65ad1e1..c455d1b 100644
--- a/docs/ares_set_servers.3
+++ b/docs/ares_set_servers.3
@@ -13,15 +13,20 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_SET_SERVERS 3 "5 March 2010"
.SH NAME
ares_set_servers, ares_set_servers_ports \- Initialize an ares_channel name servers configuration
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_set_servers(ares_channel \fIchannel\fP, struct ares_addr_node *\fIservers\fP)
-.B int ares_set_servers_ports(ares_channel \fIchannel\fP, struct ares_addr_port_node *\fIservers\fP)
+#include <ares.h>
+
+int ares_set_servers(ares_channel \fIchannel\fP,
+ struct ares_addr_node *\fIservers\fP)
+
+int ares_set_servers_ports(ares_channel \fIchannel\fP,
+ struct ares_addr_port_node *\fIservers\fP)
.fi
.SH DESCRIPTION
The \fBares_set_servers(3)\fP function initializes name servers configuration
@@ -79,7 +84,7 @@ Changing name servers configuration while queries are outstanding is not impleme
.BR ares_set_servers_csv (3),
.BR ares_get_servers (3),
.BR ares_init_options (3),
-.BR ares_dup(3)
+.BR ares_dup (3)
.SH AVAILABILITY
\fBares_set_servers(3)\fP was added in c-ares 1.7.1;
\fBares_set_servers_ports(3)\fP was added in c-ares 1.11.0.
diff --git a/docs/ares_set_servers_csv.3 b/docs/ares_set_servers_csv.3
index 638d269..fd37a17 100644
--- a/docs/ares_set_servers_csv.3
+++ b/docs/ares_set_servers_csv.3
@@ -13,15 +13,18 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_SET_SERVERS_CSV 3 "30 June 2010"
.SH NAME
ares_set_servers_csv, ares_set_servers_ports_csv \- Set list of DNS servers to be used.
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_set_servers_csv(ares_channel \fIchannel\fP, const char* \fIservers\fP)
-.B int ares_set_servers_ports_csv(ares_channel \fIchannel\fP, const char* \fIservers\fP)
+#include <ares.h>
+
+int ares_set_servers_csv(ares_channel \fIchannel\fP, const char* \fIservers\fP)
+
+int ares_set_servers_ports_csv(ares_channel \fIchannel\fP, const char* \fIservers\fP)
.fi
.SH DESCRIPTION
The \fBares_set_servers_csv\fP and \fBares_set_servers_ports_csv\fPfunctions set
diff --git a/docs/ares_set_servers_ports.3 b/docs/ares_set_servers_ports.3
index a3be189..5b08f58 100644
--- a/docs/ares_set_servers_ports.3
+++ b/docs/ares_set_servers_ports.3
@@ -1 +1,4 @@
+.\"
+.\" Copyright (C) Daniel Stenberg
+.\" SPDX-License-Identifier: MIT
.so man3/ares_set_servers.3
diff --git a/docs/ares_set_servers_ports_csv.3 b/docs/ares_set_servers_ports_csv.3
index 30535c6..77fd3bb 100644
--- a/docs/ares_set_servers_ports_csv.3
+++ b/docs/ares_set_servers_ports_csv.3
@@ -1 +1,4 @@
+.\"
+.\" Copyright (C) Daniel Stenberg
+.\" SPDX-License-Identifier: MIT
.so man3/ares_set_servers_csv.3
diff --git a/docs/ares_set_socket_callback.3 b/docs/ares_set_socket_callback.3
index 14a5ad2..11ee0de 100644
--- a/docs/ares_set_socket_callback.3
+++ b/docs/ares_set_socket_callback.3
@@ -1,18 +1,21 @@
.\"
+.\" Copyright (C) Daniel Stenberg
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_SET_SOCKET_CALLBACK 3 "20 Nov 2009"
.SH NAME
ares_set_socket_callback \- Set a socket creation callback
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B typedef int (*ares_sock_create_callback)(ares_socket_t \fIsocket_fd\fP,
+#include <ares.h>
+
+typedef int (*ares_sock_create_callback)(ares_socket_t \fIsocket_fd\fP,
int \fItype\fP,
void *\fIuserdata\fP)
-.PP
-.B void ares_set_socket_callback(ares_channel \fIchannel\fP,
- ares_sock_create_callback \fIcallback\fP,
- void *\fIuserdata\fP)
+
+void ares_set_socket_callback(ares_channel \fIchannel\fP,
+ ares_sock_create_callback \fIcallback\fP,
+ void *\fIuserdata\fP)
.PP
.B cc file.c -lcares
.fi
@@ -24,7 +27,8 @@ connected to the remote server. The callback must return ARES_SUCCESS if
things are fine, or return -1 to signal an error. A returned error will
abort the ares operation.
.SH SEE ALSO
-.BR ares_init_options (3), ares_set_socket_configure_callback (3)
+.BR ares_init_options (3),
+.BR ares_set_socket_configure_callback (3)
.SH AVAILABILITY
ares_set_socket_callback(3) was added in c-ares 1.6.0
.SH AUTHOR
diff --git a/docs/ares_set_socket_configure_callback.3 b/docs/ares_set_socket_configure_callback.3
index d3b2f93..e0a93d5 100644
--- a/docs/ares_set_socket_configure_callback.3
+++ b/docs/ares_set_socket_configure_callback.3
@@ -1,20 +1,20 @@
.\"
+.\" Copyright (C) Daniel Stenberg
+.\" SPDX-License-Identifier: MIT
.TH ARES_SET_SOCKET_CONFIGURE_CALLBACK 3 "6 Feb 2016"
.SH NAME
ares_set_socket_configure_callback \- Set a socket configuration callback
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B typedef int (*ares_sock_config_callback)(ares_socket_t \fIsocket_fd\fP,
+#include <ares.h>
+
+typedef int (*ares_sock_config_callback)(ares_socket_t \fIsocket_fd\fP,
int \fItype\fP,
void *\fIuserdata\fP)
-.PP
-.B void ares_set_socket_configure_callback(ares_channel \fIchannel\fP,
- ares_sock_config_callback \fIcallback\fP,
- void *\fIuserdata\fP)
-.PP
-.B cc file.c -lcares
+
+void ares_set_socket_configure_callback(ares_channel \fIchannel\fP,
+ ares_sock_config_callback \fIcallback\fP,
+ void *\fIuserdata\fP)
.fi
.SH DESCRIPTION
.PP
@@ -25,7 +25,8 @@ to configure various socket options. The callback must return ARES_SUCCESS
if things are fine, or return -1 to signal an error. A returned error will
abort the ares operation.
.SH SEE ALSO
-.BR ares_init_options (3), ares_set_socket_callback (3)
+.BR ares_init_options (3),
+.BR ares_set_socket_callback (3)
.SH AVAILABILITY
ares_set_socket_configure_callback(3) was added in c-ares 1.11.0
.SH AUTHOR
diff --git a/docs/ares_set_socket_functions.3 b/docs/ares_set_socket_functions.3
index 1cb0b85..09cb1ac 100644
--- a/docs/ares_set_socket_functions.3
+++ b/docs/ares_set_socket_functions.3
@@ -1,31 +1,33 @@
-.\"
+.\" Copyright (C) Daniel Stenberg
+.\" SPDX-License-Identifier: MIT
.TH ARES_SET_SOCKET_FUNCTIONS 3 "13 Dec 2016"
.SH NAME
ares_set_socket_functions \- Set socket io callbacks
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B struct ares_socket_functions {
- ares_socket_t(*\fIasocket\fP)(int, int, int, void *);
- int(*\fIaclose\fP)(ares_socket_t, void *);
- int(*\fIaconnect\fP)(ares_socket_t, const struct sockaddr *, ares_socklen_t, void *);
- ares_ssize_t(*\fIarecvfrom\fP)(ares_socket_t, void *, size_t, int, struct sockaddr *, ares_socklen_t *, void *);
- ares_ssize_t(*\fIasendv\fP)(ares_socket_t, const struct iovec *, int, void *);
- };
+#include <ares.h>
-.PP
-.B void ares_set_socket_functions(ares_channel \fIchannel\fP,
- const struct ares_socket_functions * \fIfunctions\fP,
- void *\fIuser_data\fP);
+struct ares_socket_functions {
+ ares_socket_t (*\fIasocket\fP)(int, int, int, void *);
+ int (*\fIaclose\fP)(ares_socket_t, void *);
+ int (*\fIaconnect\fP)(ares_socket_t, const struct sockaddr *, ares_socklen_t, void *);
+ ares_ssize_t (*\fIarecvfrom\fP)(ares_socket_t, void *, size_t, int,
+ struct sockaddr *, ares_socklen_t *, void *);
+ ares_ssize_t (*\fIasendv\fP)(ares_socket_t, const struct iovec *, int, void *);
+};
+void ares_set_socket_functions(ares_channel \fIchannel\fP,
+ const struct ares_socket_functions * \fIfunctions\fP,
+ void *\fIuser_data\fP);
.fi
.SH DESCRIPTION
.PP
This function sets a set of callback \fIfunctions\fP in the given ares channel handle.
These callback functions will be invoked to create/destroy socket objects and perform
io, instead of the normal system calls. A client application can override normal network
-operation fully through this functionality, and provide its own transport layer.
+operation fully through this functionality, and provide its own transport layer. You
+can choose to only implement some of the socket functions, and provide NULL to any
+others and c-ares will use its built-in system functions in that case.
.PP
All callback functions are expected to operate like their system equivalents, and to
set
@@ -88,12 +90,12 @@ and must thus remain valid through out the channels and any created socket's lif
Added in c-ares 1.13.0
.SH SEE ALSO
.BR ares_init_options (3),
-.BR socket(2),
-.BR close(2),
-.BR connect(2),
-.BR recv(2),
-.BR recvfrom(2),
-.BR send(2),
-.BR writev(2)
+.BR socket (2),
+.BR close (2),
+.BR connect (2),
+.BR recv (2),
+.BR recvfrom (2),
+.BR send (2),
+.BR writev (2)
.SH AUTHOR
Carl Wilund
diff --git a/docs/ares_set_sortlist.3 b/docs/ares_set_sortlist.3
index 24a9790..365d976 100644
--- a/docs/ares_set_sortlist.3
+++ b/docs/ares_set_sortlist.3
@@ -1,4 +1,5 @@
.\"
+.\" Copyright (C) Daniel Stenberg
.\" Permission to use, copy, modify, and distribute this
.\" software and its documentation for any purpose and without
.\" fee is hereby granted, provided that the above copyright
@@ -11,14 +12,16 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_SET_SORTLIST 3 "23 November 2015"
.SH NAME
ares_set_sortlist \- Initialize an ares_channel sortlist configuration
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B int ares_set_sortlist(ares_channel \fIchannel\fP, const char *\fIsortstr\fP)
+#include <ares.h>
+
+int ares_set_sortlist(ares_channel \fIchannel\fP, const char *\fIsortstr\fP)
.fi
.SH DESCRIPTION
The \fBares_set_sortlist(3)\fP function initializes an address sortlist configuration
@@ -53,6 +56,6 @@ was invalid.
c-ares library initialization not yet performed.
.SH SEE ALSO
.BR ares_init_options (3),
-.BR ares_dup(3)
+.BR ares_dup (3)
.SH AVAILABILITY
ares_set_sortlist(3) was added in c-ares 1.11.0
diff --git a/docs/ares_strerror.3 b/docs/ares_strerror.3
index 4b50d5b..745a0d6 100644
--- a/docs/ares_strerror.3
+++ b/docs/ares_strerror.3
@@ -13,14 +13,16 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_STRERROR 3 "25 July 1998"
.SH NAME
ares_strerror \- Get the description of an ares library error code
.SH SYNOPSIS
.nf
-.B #include <ares.h>
-.PP
-.B const char *ares_strerror(int \fIcode\fP)
+#include <ares.h>
+
+const char *ares_strerror(int \fIcode\fP)
.fi
.SH DESCRIPTION
The
diff --git a/docs/ares_timeout.3 b/docs/ares_timeout.3
index c57685d..d61bdd9 100644
--- a/docs/ares_timeout.3
+++ b/docs/ares_timeout.3
@@ -13,6 +13,8 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_TIMEOUT 3 "25 July 1998"
.SH NAME
ares_timeout \- return maximum time to wait
diff --git a/docs/ares_version.3 b/docs/ares_version.3
index 9ba7831..e6a338e 100644
--- a/docs/ares_version.3
+++ b/docs/ares_version.3
@@ -13,6 +13,8 @@
.\" this software for any purpose. It is provided "as is"
.\" without express or implied warranty.
.\"
+.\" SPDX-License-Identifier: MIT
+.\"
.TH ARES_VERSION 3 "29 January 2004"
.SH NAME
ares_version \- Get the version number of the library
diff --git a/get_ver.awk b/get_ver.awk
index 5e3db6d..263ca02 100644
--- a/get_ver.awk
+++ b/get_ver.awk
@@ -1,6 +1,8 @@
# ***************************************************************************
# * Project: c-ares
# *
+# * Copyright (C) The c-ares project and its contributors
+# * SPDX-License-Identifier: MIT
# ***************************************************************************
# awk script which fetches c-ares version number and string from input
# file and writes them to STDOUT. Here you can get an awk version for Win32:
diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt
index 3321956..4801d87 100644
--- a/include/CMakeLists.txt
+++ b/include/CMakeLists.txt
@@ -1,3 +1,5 @@
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
# Write ares_build.h configuration file. This is an installed file.
CONFIGURE_FILE (ares_build.h.cmake ${PROJECT_BINARY_DIR}/ares_build.h)
diff --git a/include/Makefile.am b/include/Makefile.am
index d208bec..c9db567 100644
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@ -1,3 +1,5 @@
+# Copyright (C) Daniel Stenberg
+# SPDX-License-Identifier: MIT
AUTOMAKE_OPTIONS = foreign nostdinc 1.9.6
ACLOCAL_AMFLAGS = -I m4 --install
diff --git a/include/Makefile.in b/include/Makefile.in
index fad83f2..decb4e3 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -94,8 +94,12 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \
$(top_srcdir)/m4/ax_ac_print_to_file.m4 \
$(top_srcdir)/m4/ax_add_am_macro_static.m4 \
$(top_srcdir)/m4/ax_am_macros_static.m4 \
+ $(top_srcdir)/m4/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4/ax_append_flag.m4 \
+ $(top_srcdir)/m4/ax_check_compile_flag.m4 \
$(top_srcdir)/m4/ax_check_gnu_make.m4 \
$(top_srcdir)/m4/ax_code_coverage.m4 \
+ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
$(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \
$(top_srcdir)/m4/ax_file_escapes.m4 \
$(top_srcdir)/m4/ax_require_defined.m4 \
@@ -234,6 +238,7 @@ EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
+FILECMD = @FILECMD@
GCOV = @GCOV@
GENHTML = @GENHTML@
GREP = @GREP@
@@ -334,6 +339,9 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+
+# Copyright (C) Daniel Stenberg
+# SPDX-License-Identifier: MIT
AUTOMAKE_OPTIONS = foreign nostdinc 1.9.6
ACLOCAL_AMFLAGS = -I m4 --install
diff --git a/include/ares.h b/include/ares.h
index cf8a855..49eb6e1 100644
--- a/include/ares.h
+++ b/include/ares.h
@@ -1,33 +1,43 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2007-2013 by Daniel Stenberg
+/* MIT License
+ *
+ * Copyright (c) Massachusetts Institute of Technology
+ * Copyright (c) Daniel Stenberg
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
#ifndef ARES__H
#define ARES__H
-#include "ares_version.h" /* c-ares version defines */
-#include "ares_build.h" /* c-ares build definitions */
-#include "ares_rules.h" /* c-ares rules enforcement */
+#include "ares_version.h" /* c-ares version defines */
+#include "ares_build.h" /* c-ares build definitions */
+#include "ares_rules.h" /* c-ares rules enforcement */
/*
* Define WIN32 when build target is Win32 API
*/
-#if (defined(_WIN32) || defined(__WIN32__)) && \
- !defined(WIN32) && !defined(__SYMBIAN32__)
+#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32) && \
+ !defined(__SYMBIAN32__)
# define WIN32
#endif
@@ -37,13 +47,13 @@
libc5-based Linux systems. Only include it on system that are known to
require it! */
#if defined(_AIX) || defined(__NOVELL_LIBC__) || defined(__NetBSD__) || \
- defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \
- defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \
- defined(__QNXNTO__) || defined(__MVS__) || defined(__HAIKU__)
-#include <sys/select.h>
+ defined(__minix) || defined(__SYMBIAN32__) || defined(__INTEGRITY) || \
+ defined(ANDROID) || defined(__ANDROID__) || defined(__OpenBSD__) || \
+ defined(__QNXNTO__) || defined(__MVS__) || defined(__HAIKU__)
+# include <sys/select.h>
#endif
#if (defined(NETWARE) && !defined(__NOVELL_LIBC__))
-#include <sys/bsdskt.h>
+# include <sys/bsdskt.h>
#endif
#if defined(WATT32)
@@ -63,16 +73,23 @@
# include <windows.h>
# include <winsock2.h>
# include <ws2tcpip.h>
+/* To aid with linking against a static c-ares build, lets tell the microsoft
+ * compiler to pull in needed dependencies */
+# ifdef _MSC_VER
+# pragma comment(lib, "ws2_32")
+# pragma comment(lib, "advapi32")
+# pragma comment(lib, "iphlpapi")
+# endif
#else
# include <sys/socket.h>
# include <netinet/in.h>
#endif
#if defined(ANDROID) || defined(__ANDROID__)
-#include <jni.h>
+# include <jni.h>
#endif
-#ifdef __cplusplus
+#ifdef __cplusplus
extern "C" {
#endif
@@ -84,9 +101,9 @@ extern "C" {
# define CARES_EXTERN
#elif defined(WIN32) || defined(_WIN32) || defined(__SYMBIAN32__)
# if defined(CARES_BUILDING_LIBRARY)
-# define CARES_EXTERN __declspec(dllexport)
+# define CARES_EXTERN __declspec(dllexport)
# else
-# define CARES_EXTERN __declspec(dllimport)
+# define CARES_EXTERN __declspec(dllimport)
# endif
#elif defined(CARES_BUILDING_LIBRARY) && defined(CARES_SYMBOL_HIDING)
# define CARES_EXTERN CARES_SYMBOL_SCOPE_EXTERN
@@ -95,127 +112,137 @@ extern "C" {
#endif
-#define ARES_SUCCESS 0
-
-/* Server error codes (ARES_ENODATA indicates no relevant answer) */
-#define ARES_ENODATA 1
-#define ARES_EFORMERR 2
-#define ARES_ESERVFAIL 3
-#define ARES_ENOTFOUND 4
-#define ARES_ENOTIMP 5
-#define ARES_EREFUSED 6
-
-/* Locally generated error codes */
-#define ARES_EBADQUERY 7
-#define ARES_EBADNAME 8
-#define ARES_EBADFAMILY 9
-#define ARES_EBADRESP 10
-#define ARES_ECONNREFUSED 11
-#define ARES_ETIMEOUT 12
-#define ARES_EOF 13
-#define ARES_EFILE 14
-#define ARES_ENOMEM 15
-#define ARES_EDESTRUCTION 16
-#define ARES_EBADSTR 17
-
-/* ares_getnameinfo error codes */
-#define ARES_EBADFLAGS 18
-
-/* ares_getaddrinfo error codes */
-#define ARES_ENONAME 19
-#define ARES_EBADHINTS 20
-
-/* Uninitialized library error code */
-#define ARES_ENOTINITIALIZED 21 /* introduced in 1.7.0 */
-
-/* ares_library_init error codes */
-#define ARES_ELOADIPHLPAPI 22 /* introduced in 1.7.0 */
-#define ARES_EADDRGETNETWORKPARAMS 23 /* introduced in 1.7.0 */
-
-/* More error codes */
-#define ARES_ECANCELLED 24 /* introduced in 1.7.0 */
-
-/* More ares_getaddrinfo error codes */
-#define ARES_ESERVICE 25 /* introduced in 1.?.0 */
+typedef enum {
+ ARES_SUCCESS = 0,
+
+ /* Server error codes (ARES_ENODATA indicates no relevant answer) */
+ ARES_ENODATA = 1,
+ ARES_EFORMERR = 2,
+ ARES_ESERVFAIL = 3,
+ ARES_ENOTFOUND = 4,
+ ARES_ENOTIMP = 5,
+ ARES_EREFUSED = 6,
+
+ /* Locally generated error codes */
+ ARES_EBADQUERY = 7,
+ ARES_EBADNAME = 8,
+ ARES_EBADFAMILY = 9,
+ ARES_EBADRESP = 10,
+ ARES_ECONNREFUSED = 11,
+ ARES_ETIMEOUT = 12,
+ ARES_EOF = 13,
+ ARES_EFILE = 14,
+ ARES_ENOMEM = 15,
+ ARES_EDESTRUCTION = 16,
+ ARES_EBADSTR = 17,
+
+ /* ares_getnameinfo error codes */
+ ARES_EBADFLAGS = 18,
+
+ /* ares_getaddrinfo error codes */
+ ARES_ENONAME = 19,
+ ARES_EBADHINTS = 20,
+
+ /* Uninitialized library error code */
+ ARES_ENOTINITIALIZED = 21, /* introduced in 1.7.0 */
+
+ /* ares_library_init error codes */
+ ARES_ELOADIPHLPAPI = 22, /* introduced in 1.7.0 */
+ ARES_EADDRGETNETWORKPARAMS = 23, /* introduced in 1.7.0 */
+
+ /* More error codes */
+ ARES_ECANCELLED = 24, /* introduced in 1.7.0 */
+
+ /* More ares_getaddrinfo error codes */
+ ARES_ESERVICE = 25 /* introduced in 1.?.0 */
+} ares_status_t;
+
+typedef enum {
+ ARES_FALSE = 0,
+ ARES_TRUE = 1
+} ares_bool_t;
/* Flag values */
-#define ARES_FLAG_USEVC (1 << 0)
-#define ARES_FLAG_PRIMARY (1 << 1)
-#define ARES_FLAG_IGNTC (1 << 2)
-#define ARES_FLAG_NORECURSE (1 << 3)
-#define ARES_FLAG_STAYOPEN (1 << 4)
-#define ARES_FLAG_NOSEARCH (1 << 5)
-#define ARES_FLAG_NOALIASES (1 << 6)
-#define ARES_FLAG_NOCHECKRESP (1 << 7)
-#define ARES_FLAG_EDNS (1 << 8)
+#define ARES_FLAG_USEVC (1 << 0)
+#define ARES_FLAG_PRIMARY (1 << 1)
+#define ARES_FLAG_IGNTC (1 << 2)
+#define ARES_FLAG_NORECURSE (1 << 3)
+#define ARES_FLAG_STAYOPEN (1 << 4)
+#define ARES_FLAG_NOSEARCH (1 << 5)
+#define ARES_FLAG_NOALIASES (1 << 6)
+#define ARES_FLAG_NOCHECKRESP (1 << 7)
+#define ARES_FLAG_EDNS (1 << 8)
/* Option mask values */
-#define ARES_OPT_FLAGS (1 << 0)
-#define ARES_OPT_TIMEOUT (1 << 1)
-#define ARES_OPT_TRIES (1 << 2)
-#define ARES_OPT_NDOTS (1 << 3)
-#define ARES_OPT_UDP_PORT (1 << 4)
-#define ARES_OPT_TCP_PORT (1 << 5)
-#define ARES_OPT_SERVERS (1 << 6)
-#define ARES_OPT_DOMAINS (1 << 7)
-#define ARES_OPT_LOOKUPS (1 << 8)
-#define ARES_OPT_SOCK_STATE_CB (1 << 9)
-#define ARES_OPT_SORTLIST (1 << 10)
-#define ARES_OPT_SOCK_SNDBUF (1 << 11)
-#define ARES_OPT_SOCK_RCVBUF (1 << 12)
-#define ARES_OPT_TIMEOUTMS (1 << 13)
-#define ARES_OPT_ROTATE (1 << 14)
-#define ARES_OPT_EDNSPSZ (1 << 15)
-#define ARES_OPT_NOROTATE (1 << 16)
-#define ARES_OPT_RESOLVCONF (1 << 17)
+#define ARES_OPT_FLAGS (1 << 0)
+#define ARES_OPT_TIMEOUT (1 << 1)
+#define ARES_OPT_TRIES (1 << 2)
+#define ARES_OPT_NDOTS (1 << 3)
+#define ARES_OPT_UDP_PORT (1 << 4)
+#define ARES_OPT_TCP_PORT (1 << 5)
+#define ARES_OPT_SERVERS (1 << 6)
+#define ARES_OPT_DOMAINS (1 << 7)
+#define ARES_OPT_LOOKUPS (1 << 8)
+#define ARES_OPT_SOCK_STATE_CB (1 << 9)
+#define ARES_OPT_SORTLIST (1 << 10)
+#define ARES_OPT_SOCK_SNDBUF (1 << 11)
+#define ARES_OPT_SOCK_RCVBUF (1 << 12)
+#define ARES_OPT_TIMEOUTMS (1 << 13)
+#define ARES_OPT_ROTATE (1 << 14)
+#define ARES_OPT_EDNSPSZ (1 << 15)
+#define ARES_OPT_NOROTATE (1 << 16)
+#define ARES_OPT_RESOLVCONF (1 << 17)
+#define ARES_OPT_HOSTS_FILE (1 << 18)
+#define ARES_OPT_UDP_MAX_QUERIES (1 << 19)
/* Nameinfo flag values */
-#define ARES_NI_NOFQDN (1 << 0)
-#define ARES_NI_NUMERICHOST (1 << 1)
-#define ARES_NI_NAMEREQD (1 << 2)
-#define ARES_NI_NUMERICSERV (1 << 3)
-#define ARES_NI_DGRAM (1 << 4)
-#define ARES_NI_TCP 0
-#define ARES_NI_UDP ARES_NI_DGRAM
-#define ARES_NI_SCTP (1 << 5)
-#define ARES_NI_DCCP (1 << 6)
-#define ARES_NI_NUMERICSCOPE (1 << 7)
-#define ARES_NI_LOOKUPHOST (1 << 8)
-#define ARES_NI_LOOKUPSERVICE (1 << 9)
+#define ARES_NI_NOFQDN (1 << 0)
+#define ARES_NI_NUMERICHOST (1 << 1)
+#define ARES_NI_NAMEREQD (1 << 2)
+#define ARES_NI_NUMERICSERV (1 << 3)
+#define ARES_NI_DGRAM (1 << 4)
+#define ARES_NI_TCP 0
+#define ARES_NI_UDP ARES_NI_DGRAM
+#define ARES_NI_SCTP (1 << 5)
+#define ARES_NI_DCCP (1 << 6)
+#define ARES_NI_NUMERICSCOPE (1 << 7)
+#define ARES_NI_LOOKUPHOST (1 << 8)
+#define ARES_NI_LOOKUPSERVICE (1 << 9)
/* Reserved for future use */
-#define ARES_NI_IDN (1 << 10)
-#define ARES_NI_IDN_ALLOW_UNASSIGNED (1 << 11)
+#define ARES_NI_IDN (1 << 10)
+#define ARES_NI_IDN_ALLOW_UNASSIGNED (1 << 11)
#define ARES_NI_IDN_USE_STD3_ASCII_RULES (1 << 12)
/* Addrinfo flag values */
-#define ARES_AI_CANONNAME (1 << 0)
-#define ARES_AI_NUMERICHOST (1 << 1)
-#define ARES_AI_PASSIVE (1 << 2)
-#define ARES_AI_NUMERICSERV (1 << 3)
-#define ARES_AI_V4MAPPED (1 << 4)
-#define ARES_AI_ALL (1 << 5)
-#define ARES_AI_ADDRCONFIG (1 << 6)
-#define ARES_AI_NOSORT (1 << 7)
-#define ARES_AI_ENVHOSTS (1 << 8)
+#define ARES_AI_CANONNAME (1 << 0)
+#define ARES_AI_NUMERICHOST (1 << 1)
+#define ARES_AI_PASSIVE (1 << 2)
+#define ARES_AI_NUMERICSERV (1 << 3)
+#define ARES_AI_V4MAPPED (1 << 4)
+#define ARES_AI_ALL (1 << 5)
+#define ARES_AI_ADDRCONFIG (1 << 6)
+#define ARES_AI_NOSORT (1 << 7)
+#define ARES_AI_ENVHOSTS (1 << 8)
/* Reserved for future use */
-#define ARES_AI_IDN (1 << 10)
-#define ARES_AI_IDN_ALLOW_UNASSIGNED (1 << 11)
+#define ARES_AI_IDN (1 << 10)
+#define ARES_AI_IDN_ALLOW_UNASSIGNED (1 << 11)
#define ARES_AI_IDN_USE_STD3_ASCII_RULES (1 << 12)
-#define ARES_AI_CANONIDN (1 << 13)
-
-#define ARES_AI_MASK (ARES_AI_CANONNAME|ARES_AI_NUMERICHOST|ARES_AI_PASSIVE| \
- ARES_AI_NUMERICSERV|ARES_AI_V4MAPPED|ARES_AI_ALL| \
- ARES_AI_ADDRCONFIG)
-#define ARES_GETSOCK_MAXNUM 16 /* ares_getsock() can return info about this
- many sockets */
-#define ARES_GETSOCK_READABLE(bits,num) (bits & (1<< (num)))
-#define ARES_GETSOCK_WRITABLE(bits,num) (bits & (1 << ((num) + \
- ARES_GETSOCK_MAXNUM)))
+#define ARES_AI_CANONIDN (1 << 13)
+
+#define ARES_AI_MASK \
+ (ARES_AI_CANONNAME | ARES_AI_NUMERICHOST | ARES_AI_PASSIVE | \
+ ARES_AI_NUMERICSERV | ARES_AI_V4MAPPED | ARES_AI_ALL | ARES_AI_ADDRCONFIG)
+#define ARES_GETSOCK_MAXNUM \
+ 16 /* ares_getsock() can return info about this \
+ many sockets */
+#define ARES_GETSOCK_READABLE(bits, num) (bits & (1 << (num)))
+#define ARES_GETSOCK_WRITABLE(bits, num) \
+ (bits & (1 << ((num) + ARES_GETSOCK_MAXNUM)))
/* c-ares library initialization flag values */
-#define ARES_LIB_INIT_NONE (0)
-#define ARES_LIB_INIT_WIN32 (1 << 0)
-#define ARES_LIB_INIT_ALL (ARES_LIB_INIT_WIN32)
+#define ARES_LIB_INIT_NONE (0)
+#define ARES_LIB_INIT_WIN32 (1 << 0)
+#define ARES_LIB_INIT_ALL (ARES_LIB_INIT_WIN32)
/*
@@ -223,20 +250,18 @@ extern "C" {
*/
#ifndef ares_socket_typedef
-#ifdef WIN32
+# ifdef WIN32
typedef SOCKET ares_socket_t;
-#define ARES_SOCKET_BAD INVALID_SOCKET
-#else
+# define ARES_SOCKET_BAD INVALID_SOCKET
+# else
typedef int ares_socket_t;
-#define ARES_SOCKET_BAD -1
-#endif
-#define ares_socket_typedef
+# define ARES_SOCKET_BAD -1
+# endif
+# define ares_socket_typedef
#endif /* ares_socket_typedef */
-typedef void (*ares_sock_state_cb)(void *data,
- ares_socket_t socket_fd,
- int readable,
- int writable);
+typedef void (*ares_sock_state_cb)(void *data, ares_socket_t socket_fd,
+ int readable, int writable);
struct apattern;
@@ -258,25 +283,27 @@ struct apattern;
*/
struct ares_options {
- int flags;
- int timeout; /* in seconds or milliseconds, depending on options */
- int tries;
- int ndots;
+ int flags;
+ int timeout; /* in seconds or milliseconds, depending on options */
+ int tries;
+ int ndots;
unsigned short udp_port;
unsigned short tcp_port;
- int socket_send_buffer_size;
- int socket_receive_buffer_size;
- struct in_addr *servers;
- int nservers;
- char **domains;
- int ndomains;
- char *lookups;
+ int socket_send_buffer_size;
+ int socket_receive_buffer_size;
+ struct in_addr *servers;
+ int nservers;
+ char **domains;
+ int ndomains;
+ char *lookups;
ares_sock_state_cb sock_state_cb;
- void *sock_state_cb_data;
- struct apattern *sortlist;
- int nsort;
- int ednspsz;
- char *resolvconf_path;
+ void *sock_state_cb_data;
+ struct apattern *sortlist;
+ int nsort;
+ int ednspsz;
+ char *resolvconf_path;
+ char *hosts_path;
+ int udp_max_queries;
};
struct hostent;
@@ -288,107 +315,89 @@ struct ares_addrinfo_hints;
typedef struct ares_channeldata *ares_channel;
-typedef void (*ares_callback)(void *arg,
- int status,
- int timeouts,
- unsigned char *abuf,
- int alen);
+typedef void (*ares_callback)(void *arg, int status, int timeouts,
+ unsigned char *abuf, int alen);
-typedef void (*ares_host_callback)(void *arg,
- int status,
- int timeouts,
+typedef void (*ares_host_callback)(void *arg, int status, int timeouts,
struct hostent *hostent);
-typedef void (*ares_nameinfo_callback)(void *arg,
- int status,
- int timeouts,
- char *node,
- char *service);
+typedef void (*ares_nameinfo_callback)(void *arg, int status, int timeouts,
+ char *node, char *service);
-typedef int (*ares_sock_create_callback)(ares_socket_t socket_fd,
- int type,
- void *data);
+typedef int (*ares_sock_create_callback)(ares_socket_t socket_fd, int type,
+ void *data);
-typedef int (*ares_sock_config_callback)(ares_socket_t socket_fd,
- int type,
- void *data);
+typedef int (*ares_sock_config_callback)(ares_socket_t socket_fd, int type,
+ void *data);
-typedef void (*ares_addrinfo_callback)(void *arg,
- int status,
- int timeouts,
- struct ares_addrinfo *res);
+typedef void (*ares_addrinfo_callback)(void *arg, int status, int timeouts,
+ struct ares_addrinfo *res);
CARES_EXTERN int ares_library_init(int flags);
-CARES_EXTERN int ares_library_init_mem(int flags,
- void *(*amalloc)(size_t size),
- void (*afree)(void *ptr),
- void *(*arealloc)(void *ptr, size_t size));
+CARES_EXTERN int ares_library_init_mem(int flags, void *(*amalloc)(size_t size),
+ void (*afree)(void *ptr),
+ void *(*arealloc)(void *ptr,
+ size_t size));
#if defined(ANDROID) || defined(__ANDROID__)
CARES_EXTERN void ares_library_init_jvm(JavaVM *jvm);
-CARES_EXTERN int ares_library_init_android(jobject connectivity_manager);
-CARES_EXTERN int ares_library_android_initialized(void);
+CARES_EXTERN int ares_library_init_android(jobject connectivity_manager);
+CARES_EXTERN int ares_library_android_initialized(void);
#endif
-CARES_EXTERN int ares_library_initialized(void);
+CARES_EXTERN int ares_library_initialized(void);
-CARES_EXTERN void ares_library_cleanup(void);
+CARES_EXTERN void ares_library_cleanup(void);
CARES_EXTERN const char *ares_version(int *version);
-CARES_EXTERN int ares_init(ares_channel *channelptr);
+CARES_EXTERN int ares_init(ares_channel *channelptr);
-CARES_EXTERN int ares_init_options(ares_channel *channelptr,
- struct ares_options *options,
- int optmask);
+CARES_EXTERN int ares_init_options(ares_channel *channelptr,
+ struct ares_options *options, int optmask);
-CARES_EXTERN int ares_save_options(ares_channel channel,
- struct ares_options *options,
- int *optmask);
+CARES_EXTERN int ares_save_options(ares_channel channel,
+ struct ares_options *options, int *optmask);
-CARES_EXTERN void ares_destroy_options(struct ares_options *options);
+CARES_EXTERN void ares_destroy_options(struct ares_options *options);
-CARES_EXTERN int ares_dup(ares_channel *dest,
- ares_channel src);
+CARES_EXTERN int ares_dup(ares_channel *dest, ares_channel src);
-CARES_EXTERN void ares_destroy(ares_channel channel);
+CARES_EXTERN void ares_destroy(ares_channel channel);
-CARES_EXTERN void ares_cancel(ares_channel channel);
+CARES_EXTERN void ares_cancel(ares_channel channel);
/* These next 3 configure local binding for the out-going socket
* connection. Use these to specify source IP and/or network device
* on multi-homed systems.
*/
-CARES_EXTERN void ares_set_local_ip4(ares_channel channel, unsigned int local_ip);
+CARES_EXTERN void ares_set_local_ip4(ares_channel channel,
+ unsigned int local_ip);
/* local_ip6 should be 16 bytes in length */
-CARES_EXTERN void ares_set_local_ip6(ares_channel channel,
- const unsigned char* local_ip6);
+CARES_EXTERN void ares_set_local_ip6(ares_channel channel,
+ const unsigned char *local_ip6);
/* local_dev_name should be null terminated. */
-CARES_EXTERN void ares_set_local_dev(ares_channel channel,
- const char* local_dev_name);
+CARES_EXTERN void ares_set_local_dev(ares_channel channel,
+ const char *local_dev_name);
-CARES_EXTERN void ares_set_socket_callback(ares_channel channel,
- ares_sock_create_callback callback,
- void *user_data);
+CARES_EXTERN void ares_set_socket_callback(ares_channel channel,
+ ares_sock_create_callback callback,
+ void *user_data);
-CARES_EXTERN void ares_set_socket_configure_callback(ares_channel channel,
- ares_sock_config_callback callback,
- void *user_data);
+CARES_EXTERN void ares_set_socket_configure_callback(
+ ares_channel channel, ares_sock_config_callback callback, void *user_data);
-CARES_EXTERN int ares_set_sortlist(ares_channel channel,
- const char *sortstr);
+CARES_EXTERN int ares_set_sortlist(ares_channel channel, const char *sortstr);
-CARES_EXTERN void ares_getaddrinfo(ares_channel channel,
- const char* node,
- const char* service,
- const struct ares_addrinfo_hints* hints,
- ares_addrinfo_callback callback,
- void* arg);
+CARES_EXTERN void ares_getaddrinfo(ares_channel channel, const char *node,
+ const char *service,
+ const struct ares_addrinfo_hints *hints,
+ ares_addrinfo_callback callback, void *arg);
-CARES_EXTERN void ares_freeaddrinfo(struct ares_addrinfo* ai);
+CARES_EXTERN void ares_freeaddrinfo(struct ares_addrinfo *ai);
/*
* Virtual function set to have user-managed socket IO.
@@ -399,111 +408,80 @@ CARES_EXTERN void ares_freeaddrinfo(struct ares_addrinfo* ai);
* ares_sock_config_callback call.
*/
struct iovec;
+
struct ares_socket_functions {
- ares_socket_t(*asocket)(int, int, int, void *);
- int(*aclose)(ares_socket_t, void *);
- int(*aconnect)(ares_socket_t, const struct sockaddr *, ares_socklen_t, void *);
- ares_ssize_t(*arecvfrom)(ares_socket_t, void *, size_t, int, struct sockaddr *, ares_socklen_t *, void *);
- ares_ssize_t(*asendv)(ares_socket_t, const struct iovec *, int, void *);
+ ares_socket_t (*asocket)(int, int, int, void *);
+ int (*aclose)(ares_socket_t, void *);
+ int (*aconnect)(ares_socket_t, const struct sockaddr *, ares_socklen_t,
+ void *);
+ ares_ssize_t (*arecvfrom)(ares_socket_t, void *, size_t, int,
+ struct sockaddr *, ares_socklen_t *, void *);
+ ares_ssize_t (*asendv)(ares_socket_t, const struct iovec *, int, void *);
};
-CARES_EXTERN void ares_set_socket_functions(ares_channel channel,
- const struct ares_socket_functions * funcs,
- void *user_data);
-
-CARES_EXTERN void ares_send(ares_channel channel,
- const unsigned char *qbuf,
- int qlen,
- ares_callback callback,
- void *arg);
-
-CARES_EXTERN void ares_query(ares_channel channel,
- const char *name,
- int dnsclass,
- int type,
- ares_callback callback,
+CARES_EXTERN void
+ ares_set_socket_functions(ares_channel channel,
+ const struct ares_socket_functions *funcs,
+ void *user_data);
+
+CARES_EXTERN void ares_send(ares_channel channel, const unsigned char *qbuf,
+ int qlen, ares_callback callback, void *arg);
+
+CARES_EXTERN void ares_query(ares_channel channel, const char *name,
+ int dnsclass, int type, ares_callback callback,
void *arg);
-CARES_EXTERN void ares_search(ares_channel channel,
- const char *name,
- int dnsclass,
- int type,
- ares_callback callback,
+CARES_EXTERN void ares_search(ares_channel channel, const char *name,
+ int dnsclass, int type, ares_callback callback,
void *arg);
-CARES_EXTERN void ares_gethostbyname(ares_channel channel,
- const char *name,
- int family,
- ares_host_callback callback,
+CARES_EXTERN void ares_gethostbyname(ares_channel channel, const char *name,
+ int family, ares_host_callback callback,
void *arg);
-CARES_EXTERN int ares_gethostbyname_file(ares_channel channel,
- const char *name,
- int family,
- struct hostent **host);
+CARES_EXTERN int ares_gethostbyname_file(ares_channel channel, const char *name,
+ int family, struct hostent **host);
-CARES_EXTERN void ares_gethostbyaddr(ares_channel channel,
- const void *addr,
- int addrlen,
- int family,
- ares_host_callback callback,
- void *arg);
+CARES_EXTERN void ares_gethostbyaddr(ares_channel channel, const void *addr,
+ int addrlen, int family,
+ ares_host_callback callback, void *arg);
-CARES_EXTERN void ares_getnameinfo(ares_channel channel,
+CARES_EXTERN void ares_getnameinfo(ares_channel channel,
const struct sockaddr *sa,
- ares_socklen_t salen,
- int flags,
- ares_nameinfo_callback callback,
- void *arg);
+ ares_socklen_t salen, int flags,
+ ares_nameinfo_callback callback, void *arg);
-CARES_EXTERN int ares_fds(ares_channel channel,
- fd_set *read_fds,
- fd_set *write_fds);
+CARES_EXTERN int ares_fds(ares_channel channel, fd_set *read_fds,
+ fd_set *write_fds);
-CARES_EXTERN int ares_getsock(ares_channel channel,
- ares_socket_t *socks,
- int numsocks);
+CARES_EXTERN int ares_getsock(ares_channel channel, ares_socket_t *socks,
+ int numsocks);
-CARES_EXTERN struct timeval *ares_timeout(ares_channel channel,
- struct timeval *maxtv,
- struct timeval *tv);
+CARES_EXTERN struct timeval *
+ ares_timeout(ares_channel channel, struct timeval *maxtv, struct timeval *tv);
-CARES_EXTERN void ares_process(ares_channel channel,
- fd_set *read_fds,
+CARES_EXTERN void ares_process(ares_channel channel, fd_set *read_fds,
fd_set *write_fds);
-CARES_EXTERN void ares_process_fd(ares_channel channel,
- ares_socket_t read_fd,
+CARES_EXTERN void ares_process_fd(ares_channel channel, ares_socket_t read_fd,
ares_socket_t write_fd);
-CARES_EXTERN int ares_create_query(const char *name,
- int dnsclass,
- int type,
- unsigned short id,
- int rd,
- unsigned char **buf,
- int *buflen,
- int max_udp_size);
-
-CARES_EXTERN int ares_mkquery(const char *name,
- int dnsclass,
- int type,
- unsigned short id,
- int rd,
- unsigned char **buf,
- int *buflen);
-
-CARES_EXTERN int ares_expand_name(const unsigned char *encoded,
- const unsigned char *abuf,
- int alen,
- char **s,
- long *enclen);
-
-CARES_EXTERN int ares_expand_string(const unsigned char *encoded,
- const unsigned char *abuf,
- int alen,
- unsigned char **s,
- long *enclen);
+CARES_EXTERN int ares_create_query(const char *name, int dnsclass, int type,
+ unsigned short id, int rd,
+ unsigned char **buf, int *buflen,
+ int max_udp_size);
+
+CARES_EXTERN int ares_mkquery(const char *name, int dnsclass, int type,
+ unsigned short id, int rd, unsigned char **buf,
+ int *buflen);
+
+CARES_EXTERN int ares_expand_name(const unsigned char *encoded,
+ const unsigned char *abuf, int alen, char **s,
+ long *enclen);
+
+CARES_EXTERN int ares_expand_string(const unsigned char *encoded,
+ const unsigned char *abuf, int alen,
+ unsigned char **s, long *enclen);
/*
* NOTE: before c-ares 1.7.0 we would most often use the system in6_addr
@@ -525,47 +503,47 @@ struct ares_addrttl {
struct ares_addr6ttl {
struct ares_in6_addr ip6addr;
- int ttl;
+ int ttl;
};
struct ares_caa_reply {
- struct ares_caa_reply *next;
- int critical;
- unsigned char *property;
- size_t plength; /* plength excludes null termination */
- unsigned char *value;
- size_t length; /* length excludes null termination */
+ struct ares_caa_reply *next;
+ int critical;
+ unsigned char *property;
+ size_t plength; /* plength excludes null termination */
+ unsigned char *value;
+ size_t length; /* length excludes null termination */
};
struct ares_srv_reply {
- struct ares_srv_reply *next;
- char *host;
- unsigned short priority;
- unsigned short weight;
- unsigned short port;
+ struct ares_srv_reply *next;
+ char *host;
+ unsigned short priority;
+ unsigned short weight;
+ unsigned short port;
};
struct ares_mx_reply {
- struct ares_mx_reply *next;
- char *host;
- unsigned short priority;
+ struct ares_mx_reply *next;
+ char *host;
+ unsigned short priority;
};
struct ares_txt_reply {
- struct ares_txt_reply *next;
- unsigned char *txt;
- size_t length; /* length excludes null termination */
+ struct ares_txt_reply *next;
+ unsigned char *txt;
+ size_t length; /* length excludes null termination */
};
/* NOTE: This structure is a superset of ares_txt_reply
*/
struct ares_txt_ext {
- struct ares_txt_ext *next;
- unsigned char *txt;
- size_t length;
+ struct ares_txt_ext *next;
+ unsigned char *txt;
+ size_t length;
/* 1 - if start of new record
* 0 - if a chunk in the same record */
- unsigned char record_start;
+ unsigned char record_start;
};
struct ares_naptr_reply {
@@ -589,11 +567,11 @@ struct ares_soa_reply {
};
struct ares_uri_reply {
- struct ares_uri_reply *next;
- unsigned short priority;
- unsigned short weight;
- char *uri;
- int ttl;
+ struct ares_uri_reply *next;
+ unsigned short priority;
+ unsigned short weight;
+ char *uri;
+ int ttl;
};
/*
@@ -643,60 +621,46 @@ struct ares_addrinfo_hints {
** so written.
*/
-CARES_EXTERN int ares_parse_a_reply(const unsigned char *abuf,
- int alen,
- struct hostent **host,
- struct ares_addrttl *addrttls,
- int *naddrttls);
-
-CARES_EXTERN int ares_parse_aaaa_reply(const unsigned char *abuf,
- int alen,
- struct hostent **host,
- struct ares_addr6ttl *addrttls,
- int *naddrttls);
-
-CARES_EXTERN int ares_parse_caa_reply(const unsigned char* abuf,
- int alen,
- struct ares_caa_reply** caa_out);
-
-CARES_EXTERN int ares_parse_ptr_reply(const unsigned char *abuf,
- int alen,
- const void *addr,
- int addrlen,
- int family,
- struct hostent **host);
+CARES_EXTERN int ares_parse_a_reply(const unsigned char *abuf, int alen,
+ struct hostent **host,
+ struct ares_addrttl *addrttls,
+ int *naddrttls);
+
+CARES_EXTERN int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
+ struct hostent **host,
+ struct ares_addr6ttl *addrttls,
+ int *naddrttls);
+
+CARES_EXTERN int ares_parse_caa_reply(const unsigned char *abuf, int alen,
+ struct ares_caa_reply **caa_out);
+
+CARES_EXTERN int ares_parse_ptr_reply(const unsigned char *abuf, int alen,
+ const void *addr, int addrlen, int family,
+ struct hostent **host);
-CARES_EXTERN int ares_parse_ns_reply(const unsigned char *abuf,
- int alen,
- struct hostent **host);
+CARES_EXTERN int ares_parse_ns_reply(const unsigned char *abuf, int alen,
+ struct hostent **host);
-CARES_EXTERN int ares_parse_srv_reply(const unsigned char* abuf,
- int alen,
- struct ares_srv_reply** srv_out);
+CARES_EXTERN int ares_parse_srv_reply(const unsigned char *abuf, int alen,
+ struct ares_srv_reply **srv_out);
-CARES_EXTERN int ares_parse_mx_reply(const unsigned char* abuf,
- int alen,
- struct ares_mx_reply** mx_out);
+CARES_EXTERN int ares_parse_mx_reply(const unsigned char *abuf, int alen,
+ struct ares_mx_reply **mx_out);
-CARES_EXTERN int ares_parse_txt_reply(const unsigned char* abuf,
- int alen,
- struct ares_txt_reply** txt_out);
+CARES_EXTERN int ares_parse_txt_reply(const unsigned char *abuf, int alen,
+ struct ares_txt_reply **txt_out);
-CARES_EXTERN int ares_parse_txt_reply_ext(const unsigned char* abuf,
- int alen,
- struct ares_txt_ext** txt_out);
+CARES_EXTERN int ares_parse_txt_reply_ext(const unsigned char *abuf, int alen,
+ struct ares_txt_ext **txt_out);
-CARES_EXTERN int ares_parse_naptr_reply(const unsigned char* abuf,
- int alen,
- struct ares_naptr_reply** naptr_out);
+CARES_EXTERN int ares_parse_naptr_reply(const unsigned char *abuf, int alen,
+ struct ares_naptr_reply **naptr_out);
-CARES_EXTERN int ares_parse_soa_reply(const unsigned char* abuf,
- int alen,
- struct ares_soa_reply** soa_out);
+CARES_EXTERN int ares_parse_soa_reply(const unsigned char *abuf, int alen,
+ struct ares_soa_reply **soa_out);
-CARES_EXTERN int ares_parse_uri_reply(const unsigned char* abuf,
- int alen,
- struct ares_uri_reply** uri_out);
+CARES_EXTERN int ares_parse_uri_reply(const unsigned char *abuf, int alen,
+ struct ares_uri_reply **uri_out);
CARES_EXTERN void ares_free_string(void *str);
@@ -708,7 +672,8 @@ CARES_EXTERN const char *ares_strerror(int code);
struct ares_addr_node {
struct ares_addr_node *next;
- int family;
+ int family;
+
union {
struct in_addr addr4;
struct ares_in6_addr addr6;
@@ -717,38 +682,40 @@ struct ares_addr_node {
struct ares_addr_port_node {
struct ares_addr_port_node *next;
- int family;
+ int family;
+
union {
struct in_addr addr4;
struct ares_in6_addr addr6;
} addr;
+
int udp_port;
int tcp_port;
};
-CARES_EXTERN int ares_set_servers(ares_channel channel,
- struct ares_addr_node *servers);
-CARES_EXTERN int ares_set_servers_ports(ares_channel channel,
- struct ares_addr_port_node *servers);
+CARES_EXTERN int ares_set_servers(ares_channel channel,
+ struct ares_addr_node *servers);
+CARES_EXTERN int ares_set_servers_ports(ares_channel channel,
+ struct ares_addr_port_node *servers);
/* Incomming string format: host[:port][,host[:port]]... */
-CARES_EXTERN int ares_set_servers_csv(ares_channel channel,
- const char* servers);
-CARES_EXTERN int ares_set_servers_ports_csv(ares_channel channel,
- const char* servers);
+CARES_EXTERN int ares_set_servers_csv(ares_channel channel,
+ const char *servers);
+CARES_EXTERN int ares_set_servers_ports_csv(ares_channel channel,
+ const char *servers);
-CARES_EXTERN int ares_get_servers(ares_channel channel,
- struct ares_addr_node **servers);
-CARES_EXTERN int ares_get_servers_ports(ares_channel channel,
- struct ares_addr_port_node **servers);
+CARES_EXTERN int ares_get_servers(ares_channel channel,
+ struct ares_addr_node **servers);
+CARES_EXTERN int ares_get_servers_ports(ares_channel channel,
+ struct ares_addr_port_node **servers);
CARES_EXTERN const char *ares_inet_ntop(int af, const void *src, char *dst,
ares_socklen_t size);
-CARES_EXTERN int ares_inet_pton(int af, const char *src, void *dst);
+CARES_EXTERN int ares_inet_pton(int af, const char *src, void *dst);
-#ifdef __cplusplus
+#ifdef __cplusplus
}
#endif
diff --git a/include/ares_build.h b/include/ares_build.h
index 7f7d2e0..0a2b7a7 100644
--- a/include/ares_build.h
+++ b/include/ares_build.h
@@ -1,20 +1,32 @@
+/* MIT License
+ *
+ * Copyright (c) 2009 Daniel Stenberg
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#ifndef __CARES_BUILD_H
#define __CARES_BUILD_H
-/* Copyright (C) 2009 - 2021 by Daniel Stenberg et al
- *
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, 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.
- */
-
/* ================================================================ */
/* NOTES FOR CONFIGURE CAPABLE SYSTEMS */
/* ================================================================ */
diff --git a/include/ares_build.h.cmake b/include/ares_build.h.cmake
index e847f17..e2ab717 100644
--- a/include/ares_build.h.cmake
+++ b/include/ares_build.h.cmake
@@ -1,5 +1,9 @@
#ifndef __CARES_BUILD_H
#define __CARES_BUILD_H
+/*
+ * Copyright (C) The c-ares project and its contributors
+ * SPDX-License-Identifier: MIT
+ */
#define CARES_TYPEOF_ARES_SOCKLEN_T @CARES_TYPEOF_ARES_SOCKLEN_T@
#define CARES_TYPEOF_ARES_SSIZE_T @CARES_TYPEOF_ARES_SSIZE_T@
@@ -8,6 +12,7 @@
* files. We need to include some dependent headers that may be system specific
* for C-Ares */
#cmakedefine CARES_HAVE_SYS_TYPES_H
+#cmakedefine CARES_HAVE_SYS_RANDOM_H
#cmakedefine CARES_HAVE_SYS_SOCKET_H
#cmakedefine CARES_HAVE_WINDOWS_H
#cmakedefine CARES_HAVE_WS2TCPIP_H
@@ -20,6 +25,10 @@
# include <sys/types.h>
#endif
+#ifdef CARES_HAVE_SYS_RANDOM_H
+# include <sys/random.h>
+#endif
+
#ifdef CARES_HAVE_SYS_SOCKET_H
# include <sys/socket.h>
#endif
diff --git a/include/ares_build.h.in b/include/ares_build.h.in
index 8abc874..c8624da 100644
--- a/include/ares_build.h.in
+++ b/include/ares_build.h.in
@@ -1,19 +1,30 @@
-#ifndef __CARES_BUILD_H
-#define __CARES_BUILD_H
-
-
-/* Copyright (C) 2009 - 2021 by Daniel Stenberg et al
+/* MIT License
+ *
+ * Copyright (c) 2009 Daniel Stenberg
*
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, 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.
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
+#ifndef __CARES_BUILD_H
+#define __CARES_BUILD_H
/* ================================================================ */
/* NOTES FOR CONFIGURE CAPABLE SYSTEMS */
diff --git a/include/ares_dns.h b/include/ares_dns.h
index bc8aa7b..46edbbb 100644
--- a/include/ares_dns.h
+++ b/include/ares_dns.h
@@ -1,20 +1,31 @@
-#ifndef HEADER_CARES_DNS_H
-#define HEADER_CARES_DNS_H
-
-/* Copyright 1998, 2011 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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:
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
+#ifndef HEADER_CARES_DNS_H
+#define HEADER_CARES_DNS_H
/*
* NOTE TO INTEGRATORS:
@@ -29,84 +40,88 @@
* Macro DNS__16BIT reads a network short (16 bit) given in network
* byte order, and returns its value as an unsigned short.
*/
-#define DNS__16BIT(p) ((unsigned short)((unsigned int) 0xffff & \
- (((unsigned int)((unsigned char)(p)[0]) << 8U) | \
- ((unsigned int)((unsigned char)(p)[1])))))
+#define DNS__16BIT(p) \
+ ((unsigned short)((unsigned int)0xffff & \
+ (((unsigned int)((unsigned char)(p)[0]) << 8U) | \
+ ((unsigned int)((unsigned char)(p)[1])))))
/*
* Macro DNS__32BIT reads a network long (32 bit) given in network
* byte order, and returns its value as an unsigned int.
*/
-#define DNS__32BIT(p) ((unsigned int) \
- (((unsigned int)((unsigned char)(p)[0]) << 24U) | \
- ((unsigned int)((unsigned char)(p)[1]) << 16U) | \
- ((unsigned int)((unsigned char)(p)[2]) << 8U) | \
- ((unsigned int)((unsigned char)(p)[3]))))
+#define DNS__32BIT(p) \
+ ((unsigned int)(((unsigned int)((unsigned char)(p)[0]) << 24U) | \
+ ((unsigned int)((unsigned char)(p)[1]) << 16U) | \
+ ((unsigned int)((unsigned char)(p)[2]) << 8U) | \
+ ((unsigned int)((unsigned char)(p)[3]))))
-#define DNS__SET16BIT(p, v) (((p)[0] = (unsigned char)(((v) >> 8) & 0xff)), \
- ((p)[1] = (unsigned char)((v) & 0xff)))
-#define DNS__SET32BIT(p, v) (((p)[0] = (unsigned char)(((v) >> 24) & 0xff)), \
- ((p)[1] = (unsigned char)(((v) >> 16) & 0xff)), \
- ((p)[2] = (unsigned char)(((v) >> 8) & 0xff)), \
- ((p)[3] = (unsigned char)((v) & 0xff)))
+#define DNS__SET16BIT(p, v) \
+ (((p)[0] = (unsigned char)(((v) >> 8) & 0xff)), \
+ ((p)[1] = (unsigned char)((v) & 0xff)))
+#define DNS__SET32BIT(p, v) \
+ (((p)[0] = (unsigned char)(((v) >> 24) & 0xff)), \
+ ((p)[1] = (unsigned char)(((v) >> 16) & 0xff)), \
+ ((p)[2] = (unsigned char)(((v) >> 8) & 0xff)), \
+ ((p)[3] = (unsigned char)((v) & 0xff)))
#if 0
/* we cannot use this approach on systems where we can't access 16/32 bit
data on un-aligned addresses */
-#define DNS__16BIT(p) ntohs(*(unsigned short*)(p))
-#define DNS__32BIT(p) ntohl(*(unsigned long*)(p))
-#define DNS__SET16BIT(p, v) *(unsigned short*)(p) = htons(v)
-#define DNS__SET32BIT(p, v) *(unsigned long*)(p) = htonl(v)
+# define DNS__16BIT(p) ntohs(*(unsigned short *)(p))
+# define DNS__32BIT(p) ntohl(*(unsigned long *)(p))
+# define DNS__SET16BIT(p, v) *(unsigned short *)(p) = htons(v)
+# define DNS__SET32BIT(p, v) *(unsigned long *)(p) = htonl(v)
#endif
/* Macros for parsing a DNS header */
-#define DNS_HEADER_QID(h) DNS__16BIT(h)
-#define DNS_HEADER_QR(h) (((h)[2] >> 7) & 0x1)
-#define DNS_HEADER_OPCODE(h) (((h)[2] >> 3) & 0xf)
-#define DNS_HEADER_AA(h) (((h)[2] >> 2) & 0x1)
-#define DNS_HEADER_TC(h) (((h)[2] >> 1) & 0x1)
-#define DNS_HEADER_RD(h) ((h)[2] & 0x1)
-#define DNS_HEADER_RA(h) (((h)[3] >> 7) & 0x1)
-#define DNS_HEADER_Z(h) (((h)[3] >> 4) & 0x7)
-#define DNS_HEADER_RCODE(h) ((h)[3] & 0xf)
-#define DNS_HEADER_QDCOUNT(h) DNS__16BIT((h) + 4)
-#define DNS_HEADER_ANCOUNT(h) DNS__16BIT((h) + 6)
-#define DNS_HEADER_NSCOUNT(h) DNS__16BIT((h) + 8)
-#define DNS_HEADER_ARCOUNT(h) DNS__16BIT((h) + 10)
+#define DNS_HEADER_QID(h) DNS__16BIT(h)
+#define DNS_HEADER_QR(h) (((h)[2] >> 7) & 0x1)
+#define DNS_HEADER_OPCODE(h) (((h)[2] >> 3) & 0xf)
+#define DNS_HEADER_AA(h) (((h)[2] >> 2) & 0x1)
+#define DNS_HEADER_TC(h) (((h)[2] >> 1) & 0x1)
+#define DNS_HEADER_RD(h) ((h)[2] & 0x1)
+#define DNS_HEADER_RA(h) (((h)[3] >> 7) & 0x1)
+#define DNS_HEADER_Z(h) (((h)[3] >> 4) & 0x7)
+#define DNS_HEADER_RCODE(h) ((h)[3] & 0xf)
+#define DNS_HEADER_QDCOUNT(h) DNS__16BIT((h) + 4)
+#define DNS_HEADER_ANCOUNT(h) DNS__16BIT((h) + 6)
+#define DNS_HEADER_NSCOUNT(h) DNS__16BIT((h) + 8)
+#define DNS_HEADER_ARCOUNT(h) DNS__16BIT((h) + 10)
/* Macros for constructing a DNS header */
-#define DNS_HEADER_SET_QID(h, v) DNS__SET16BIT(h, v)
-#define DNS_HEADER_SET_QR(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 7))
-#define DNS_HEADER_SET_OPCODE(h, v) ((h)[2] |= (unsigned char)(((v) & 0xf) << 3))
-#define DNS_HEADER_SET_AA(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 2))
-#define DNS_HEADER_SET_TC(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 1))
-#define DNS_HEADER_SET_RD(h, v) ((h)[2] |= (unsigned char)((v) & 0x1))
-#define DNS_HEADER_SET_RA(h, v) ((h)[3] |= (unsigned char)(((v) & 0x1) << 7))
-#define DNS_HEADER_SET_Z(h, v) ((h)[3] |= (unsigned char)(((v) & 0x7) << 4))
-#define DNS_HEADER_SET_RCODE(h, v) ((h)[3] |= (unsigned char)((v) & 0xf))
-#define DNS_HEADER_SET_QDCOUNT(h, v) DNS__SET16BIT((h) + 4, v)
-#define DNS_HEADER_SET_ANCOUNT(h, v) DNS__SET16BIT((h) + 6, v)
-#define DNS_HEADER_SET_NSCOUNT(h, v) DNS__SET16BIT((h) + 8, v)
-#define DNS_HEADER_SET_ARCOUNT(h, v) DNS__SET16BIT((h) + 10, v)
+#define DNS_HEADER_SET_QID(h, v) DNS__SET16BIT(h, v)
+#define DNS_HEADER_SET_QR(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 7))
+#define DNS_HEADER_SET_OPCODE(h, v) \
+ ((h)[2] |= (unsigned char)(((v) & 0xf) << 3))
+#define DNS_HEADER_SET_AA(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 2))
+#define DNS_HEADER_SET_TC(h, v) ((h)[2] |= (unsigned char)(((v) & 0x1) << 1))
+#define DNS_HEADER_SET_RD(h, v) ((h)[2] |= (unsigned char)((v) & 0x1))
+#define DNS_HEADER_SET_RA(h, v) ((h)[3] |= (unsigned char)(((v) & 0x1) << 7))
+#define DNS_HEADER_SET_Z(h, v) ((h)[3] |= (unsigned char)(((v) & 0x7) << 4))
+#define DNS_HEADER_SET_RCODE(h, v) ((h)[3] |= (unsigned char)((v) & 0xf))
+#define DNS_HEADER_SET_QDCOUNT(h, v) DNS__SET16BIT((h) + 4, v)
+#define DNS_HEADER_SET_ANCOUNT(h, v) DNS__SET16BIT((h) + 6, v)
+#define DNS_HEADER_SET_NSCOUNT(h, v) DNS__SET16BIT((h) + 8, v)
+#define DNS_HEADER_SET_ARCOUNT(h, v) DNS__SET16BIT((h) + 10, v)
/* Macros for parsing the fixed part of a DNS question */
-#define DNS_QUESTION_TYPE(q) DNS__16BIT(q)
-#define DNS_QUESTION_CLASS(q) DNS__16BIT((q) + 2)
+#define DNS_QUESTION_TYPE(q) DNS__16BIT(q)
+#define DNS_QUESTION_CLASS(q) DNS__16BIT((q) + 2)
/* Macros for constructing the fixed part of a DNS question */
-#define DNS_QUESTION_SET_TYPE(q, v) DNS__SET16BIT(q, v)
-#define DNS_QUESTION_SET_CLASS(q, v) DNS__SET16BIT((q) + 2, v)
+#define DNS_QUESTION_SET_TYPE(q, v) DNS__SET16BIT(q, v)
+#define DNS_QUESTION_SET_CLASS(q, v) DNS__SET16BIT((q) + 2, v)
/* Macros for parsing the fixed part of a DNS resource record */
-#define DNS_RR_TYPE(r) DNS__16BIT(r)
-#define DNS_RR_CLASS(r) DNS__16BIT((r) + 2)
-#define DNS_RR_TTL(r) DNS__32BIT((r) + 4)
-#define DNS_RR_LEN(r) DNS__16BIT((r) + 8)
+#define DNS_RR_TYPE(r) DNS__16BIT(r)
+#define DNS_RR_CLASS(r) DNS__16BIT((r) + 2)
+#define DNS_RR_TTL(r) DNS__32BIT((r) + 4)
+#define DNS_RR_LEN(r) DNS__16BIT((r) + 8)
/* Macros for constructing the fixed part of a DNS resource record */
-#define DNS_RR_SET_TYPE(r, v) DNS__SET16BIT(r, v)
-#define DNS_RR_SET_CLASS(r, v) DNS__SET16BIT((r) + 2, v)
-#define DNS_RR_SET_TTL(r, v) DNS__SET32BIT((r) + 4, v)
-#define DNS_RR_SET_LEN(r, v) DNS__SET16BIT((r) + 8, v)
+#define DNS_RR_SET_TYPE(r, v) DNS__SET16BIT(r, v)
+#define DNS_RR_SET_CLASS(r, v) DNS__SET16BIT((r) + 2, v)
+#define DNS_RR_SET_TTL(r, v) DNS__SET32BIT((r) + 4, v)
+#define DNS_RR_SET_LEN(r, v) DNS__SET16BIT((r) + 8, v)
#endif /* HEADER_CARES_DNS_H */
diff --git a/include/ares_nameser.h b/include/ares_nameser.h
index 18a9e5a..bdc746b 100644
--- a/include/ares_nameser.h
+++ b/include/ares_nameser.h
@@ -1,3 +1,29 @@
+/* MIT License
+ *
+ * Copyright (c) Massachusetts Institute of Technology
+ * Copyright (c) Daniel Stenberg
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#ifndef ARES_NAMESER_H
#define ARES_NAMESER_H
@@ -18,51 +44,51 @@
*/
#ifndef NS_PACKETSZ
-# define NS_PACKETSZ 512 /* maximum packet size */
+# define NS_PACKETSZ 512 /* maximum packet size */
#endif
#ifndef NS_MAXDNAME
-# define NS_MAXDNAME 256 /* maximum domain name */
+# define NS_MAXDNAME 256 /* maximum domain name */
#endif
#ifndef NS_MAXCDNAME
-# define NS_MAXCDNAME 255 /* maximum compressed domain name */
+# define NS_MAXCDNAME 255 /* maximum compressed domain name */
#endif
#ifndef NS_MAXLABEL
-# define NS_MAXLABEL 63
+# define NS_MAXLABEL 63
#endif
#ifndef NS_HFIXEDSZ
-# define NS_HFIXEDSZ 12 /* #/bytes of fixed data in header */
+# define NS_HFIXEDSZ 12 /* #/bytes of fixed data in header */
#endif
#ifndef NS_QFIXEDSZ
-# define NS_QFIXEDSZ 4 /* #/bytes of fixed data in query */
+# define NS_QFIXEDSZ 4 /* #/bytes of fixed data in query */
#endif
#ifndef NS_RRFIXEDSZ
-# define NS_RRFIXEDSZ 10 /* #/bytes of fixed data in r record */
+# define NS_RRFIXEDSZ 10 /* #/bytes of fixed data in r record */
#endif
#ifndef NS_INT16SZ
-# define NS_INT16SZ 2
+# define NS_INT16SZ 2
#endif
#ifndef NS_INADDRSZ
-# define NS_INADDRSZ 4
+# define NS_INADDRSZ 4
#endif
#ifndef NS_IN6ADDRSZ
-# define NS_IN6ADDRSZ 16
+# define NS_IN6ADDRSZ 16
#endif
#ifndef NS_CMPRSFLGS
-# define NS_CMPRSFLGS 0xc0 /* Flag bits indicating name compression. */
+# define NS_CMPRSFLGS 0xc0 /* Flag bits indicating name compression. */
#endif
#ifndef NS_DEFAULTPORT
-# define NS_DEFAULTPORT 53 /* For both TCP and UDP. */
+# define NS_DEFAULTPORT 53 /* For both TCP and UDP. */
#endif
/* ============================================================================
@@ -73,106 +99,106 @@
#ifndef CARES_HAVE_ARPA_NAMESER_H
typedef enum __ns_class {
- ns_c_invalid = 0, /* Cookie. */
- ns_c_in = 1, /* Internet. */
- ns_c_2 = 2, /* unallocated/unsupported. */
- ns_c_chaos = 3, /* MIT Chaos-net. */
- ns_c_hs = 4, /* MIT Hesiod. */
- /* Query class values which do not appear in resource records */
- ns_c_none = 254, /* for prereq. sections in update requests */
- ns_c_any = 255, /* Wildcard match. */
- ns_c_max = 65536
+ ns_c_invalid = 0, /* Cookie. */
+ ns_c_in = 1, /* Internet. */
+ ns_c_2 = 2, /* unallocated/unsupported. */
+ ns_c_chaos = 3, /* MIT Chaos-net. */
+ ns_c_hs = 4, /* MIT Hesiod. */
+ /* Query class values which do not appear in resource records */
+ ns_c_none = 254, /* for prereq. sections in update requests */
+ ns_c_any = 255, /* Wildcard match. */
+ ns_c_max = 65536
} ns_class;
typedef enum __ns_type {
- ns_t_invalid = 0, /* Cookie. */
- ns_t_a = 1, /* Host address. */
- ns_t_ns = 2, /* Authoritative server. */
- ns_t_md = 3, /* Mail destination. */
- ns_t_mf = 4, /* Mail forwarder. */
- ns_t_cname = 5, /* Canonical name. */
- ns_t_soa = 6, /* Start of authority zone. */
- ns_t_mb = 7, /* Mailbox domain name. */
- ns_t_mg = 8, /* Mail group member. */
- ns_t_mr = 9, /* Mail rename name. */
- ns_t_null = 10, /* Null resource record. */
- ns_t_wks = 11, /* Well known service. */
- ns_t_ptr = 12, /* Domain name pointer. */
- ns_t_hinfo = 13, /* Host information. */
- ns_t_minfo = 14, /* Mailbox information. */
- ns_t_mx = 15, /* Mail routing information. */
- ns_t_txt = 16, /* Text strings. */
- ns_t_rp = 17, /* Responsible person. */
- ns_t_afsdb = 18, /* AFS cell database. */
- ns_t_x25 = 19, /* X_25 calling address. */
- ns_t_isdn = 20, /* ISDN calling address. */
- ns_t_rt = 21, /* Router. */
- ns_t_nsap = 22, /* NSAP address. */
- ns_t_nsap_ptr = 23, /* Reverse NSAP lookup (deprecated). */
- ns_t_sig = 24, /* Security signature. */
- ns_t_key = 25, /* Security key. */
- ns_t_px = 26, /* X.400 mail mapping. */
- ns_t_gpos = 27, /* Geographical position (withdrawn). */
- ns_t_aaaa = 28, /* Ip6 Address. */
- ns_t_loc = 29, /* Location Information. */
- ns_t_nxt = 30, /* Next domain (security). */
- ns_t_eid = 31, /* Endpoint identifier. */
- ns_t_nimloc = 32, /* Nimrod Locator. */
- ns_t_srv = 33, /* Server Selection. */
- ns_t_atma = 34, /* ATM Address */
- ns_t_naptr = 35, /* Naming Authority PoinTeR */
- ns_t_kx = 36, /* Key Exchange */
- ns_t_cert = 37, /* Certification record */
- ns_t_a6 = 38, /* IPv6 address (deprecates AAAA) */
- ns_t_dname = 39, /* Non-terminal DNAME (for IPv6) */
- ns_t_sink = 40, /* Kitchen sink (experimentatl) */
- ns_t_opt = 41, /* EDNS0 option (meta-RR) */
- ns_t_apl = 42, /* Address prefix list (RFC3123) */
- ns_t_ds = 43, /* Delegation Signer (RFC4034) */
- ns_t_sshfp = 44, /* SSH Key Fingerprint (RFC4255) */
- ns_t_rrsig = 46, /* Resource Record Signature (RFC4034) */
- ns_t_nsec = 47, /* Next Secure (RFC4034) */
- ns_t_dnskey = 48, /* DNS Public Key (RFC4034) */
- ns_t_tkey = 249, /* Transaction key */
- ns_t_tsig = 250, /* Transaction signature. */
- ns_t_ixfr = 251, /* Incremental zone transfer. */
- ns_t_axfr = 252, /* Transfer zone of authority. */
- ns_t_mailb = 253, /* Transfer mailbox records. */
- ns_t_maila = 254, /* Transfer mail agent records. */
- ns_t_any = 255, /* Wildcard match. */
- ns_t_uri = 256, /* Uniform Resource Identifier (RFC7553) */
- ns_t_caa = 257, /* Certification Authority Authorization. */
- ns_t_max = 65536
+ ns_t_invalid = 0, /* Cookie. */
+ ns_t_a = 1, /* Host address. */
+ ns_t_ns = 2, /* Authoritative server. */
+ ns_t_md = 3, /* Mail destination. */
+ ns_t_mf = 4, /* Mail forwarder. */
+ ns_t_cname = 5, /* Canonical name. */
+ ns_t_soa = 6, /* Start of authority zone. */
+ ns_t_mb = 7, /* Mailbox domain name. */
+ ns_t_mg = 8, /* Mail group member. */
+ ns_t_mr = 9, /* Mail rename name. */
+ ns_t_null = 10, /* Null resource record. */
+ ns_t_wks = 11, /* Well known service. */
+ ns_t_ptr = 12, /* Domain name pointer. */
+ ns_t_hinfo = 13, /* Host information. */
+ ns_t_minfo = 14, /* Mailbox information. */
+ ns_t_mx = 15, /* Mail routing information. */
+ ns_t_txt = 16, /* Text strings. */
+ ns_t_rp = 17, /* Responsible person. */
+ ns_t_afsdb = 18, /* AFS cell database. */
+ ns_t_x25 = 19, /* X_25 calling address. */
+ ns_t_isdn = 20, /* ISDN calling address. */
+ ns_t_rt = 21, /* Router. */
+ ns_t_nsap = 22, /* NSAP address. */
+ ns_t_nsap_ptr = 23, /* Reverse NSAP lookup (deprecated). */
+ ns_t_sig = 24, /* Security signature. */
+ ns_t_key = 25, /* Security key. */
+ ns_t_px = 26, /* X.400 mail mapping. */
+ ns_t_gpos = 27, /* Geographical position (withdrawn). */
+ ns_t_aaaa = 28, /* Ip6 Address. */
+ ns_t_loc = 29, /* Location Information. */
+ ns_t_nxt = 30, /* Next domain (security). */
+ ns_t_eid = 31, /* Endpoint identifier. */
+ ns_t_nimloc = 32, /* Nimrod Locator. */
+ ns_t_srv = 33, /* Server Selection. */
+ ns_t_atma = 34, /* ATM Address */
+ ns_t_naptr = 35, /* Naming Authority PoinTeR */
+ ns_t_kx = 36, /* Key Exchange */
+ ns_t_cert = 37, /* Certification record */
+ ns_t_a6 = 38, /* IPv6 address (deprecates AAAA) */
+ ns_t_dname = 39, /* Non-terminal DNAME (for IPv6) */
+ ns_t_sink = 40, /* Kitchen sink (experimentatl) */
+ ns_t_opt = 41, /* EDNS0 option (meta-RR) */
+ ns_t_apl = 42, /* Address prefix list (RFC3123) */
+ ns_t_ds = 43, /* Delegation Signer (RFC4034) */
+ ns_t_sshfp = 44, /* SSH Key Fingerprint (RFC4255) */
+ ns_t_rrsig = 46, /* Resource Record Signature (RFC4034) */
+ ns_t_nsec = 47, /* Next Secure (RFC4034) */
+ ns_t_dnskey = 48, /* DNS Public Key (RFC4034) */
+ ns_t_tkey = 249, /* Transaction key */
+ ns_t_tsig = 250, /* Transaction signature. */
+ ns_t_ixfr = 251, /* Incremental zone transfer. */
+ ns_t_axfr = 252, /* Transfer zone of authority. */
+ ns_t_mailb = 253, /* Transfer mailbox records. */
+ ns_t_maila = 254, /* Transfer mail agent records. */
+ ns_t_any = 255, /* Wildcard match. */
+ ns_t_uri = 256, /* Uniform Resource Identifier (RFC7553) */
+ ns_t_caa = 257, /* Certification Authority Authorization. */
+ ns_t_max = 65536
} ns_type;
typedef enum __ns_opcode {
- ns_o_query = 0, /* Standard query. */
- ns_o_iquery = 1, /* Inverse query (deprecated/unsupported). */
- ns_o_status = 2, /* Name server status query (unsupported). */
- /* Opcode 3 is undefined/reserved. */
- ns_o_notify = 4, /* Zone change notification. */
- ns_o_update = 5, /* Zone update message. */
- ns_o_max = 6
+ ns_o_query = 0, /* Standard query. */
+ ns_o_iquery = 1, /* Inverse query (deprecated/unsupported). */
+ ns_o_status = 2, /* Name server status query (unsupported). */
+ /* Opcode 3 is undefined/reserved. */
+ ns_o_notify = 4, /* Zone change notification. */
+ ns_o_update = 5, /* Zone update message. */
+ ns_o_max = 6
} ns_opcode;
typedef enum __ns_rcode {
- ns_r_noerror = 0, /* No error occurred. */
- ns_r_formerr = 1, /* Format error. */
- ns_r_servfail = 2, /* Server failure. */
- ns_r_nxdomain = 3, /* Name error. */
- ns_r_notimpl = 4, /* Unimplemented. */
- ns_r_refused = 5, /* Operation refused. */
- /* these are for BIND_UPDATE */
- ns_r_yxdomain = 6, /* Name exists */
- ns_r_yxrrset = 7, /* RRset exists */
- ns_r_nxrrset = 8, /* RRset does not exist */
- ns_r_notauth = 9, /* Not authoritative for zone */
- ns_r_notzone = 10, /* Zone of record different from zone section */
- ns_r_max = 11,
- /* The following are TSIG extended errors */
- ns_r_badsig = 16,
- ns_r_badkey = 17,
- ns_r_badtime = 18
+ ns_r_noerror = 0, /* No error occurred. */
+ ns_r_formerr = 1, /* Format error. */
+ ns_r_servfail = 2, /* Server failure. */
+ ns_r_nxdomain = 3, /* Name error. */
+ ns_r_notimpl = 4, /* Unimplemented. */
+ ns_r_refused = 5, /* Operation refused. */
+ /* these are for BIND_UPDATE */
+ ns_r_yxdomain = 6, /* Name exists */
+ ns_r_yxrrset = 7, /* RRset exists */
+ ns_r_nxrrset = 8, /* RRset does not exist */
+ ns_r_notauth = 9, /* Not authoritative for zone */
+ ns_r_notzone = 10, /* Zone of record different from zone section */
+ ns_r_max = 11,
+ /* The following are TSIG extended errors */
+ ns_r_badsig = 16,
+ ns_r_badkey = 17,
+ ns_r_badtime = 18
} ns_rcode;
#endif /* CARES_HAVE_ARPA_NAMESER_H */
@@ -186,45 +212,45 @@ typedef enum __ns_rcode {
*/
#ifndef PACKETSZ
-# define PACKETSZ NS_PACKETSZ
+# define PACKETSZ NS_PACKETSZ
#endif
#ifndef MAXDNAME
-# define MAXDNAME NS_MAXDNAME
+# define MAXDNAME NS_MAXDNAME
#endif
#ifndef MAXCDNAME
-# define MAXCDNAME NS_MAXCDNAME
+# define MAXCDNAME NS_MAXCDNAME
#endif
#ifndef MAXLABEL
-# define MAXLABEL NS_MAXLABEL
+# define MAXLABEL NS_MAXLABEL
#endif
#ifndef HFIXEDSZ
-# define HFIXEDSZ NS_HFIXEDSZ
+# define HFIXEDSZ NS_HFIXEDSZ
#endif
#ifndef QFIXEDSZ
-# define QFIXEDSZ NS_QFIXEDSZ
+# define QFIXEDSZ NS_QFIXEDSZ
#endif
#ifndef RRFIXEDSZ
-# define RRFIXEDSZ NS_RRFIXEDSZ
+# define RRFIXEDSZ NS_RRFIXEDSZ
#endif
#ifndef INDIR_MASK
-# define INDIR_MASK NS_CMPRSFLGS
+# define INDIR_MASK NS_CMPRSFLGS
#endif
#ifndef NAMESERVER_PORT
-# define NAMESERVER_PORT NS_DEFAULTPORT
+# define NAMESERVER_PORT NS_DEFAULTPORT
#endif
/* opcodes */
#ifndef O_QUERY
-# define O_QUERY 0 /* ns_o_query */
+# define O_QUERY 0 /* ns_o_query */
#endif
#ifndef O_IQUERY
# define O_IQUERY 1 /* ns_o_iquery */
@@ -242,242 +268,242 @@ typedef enum __ns_rcode {
/* response codes */
#ifndef SERVFAIL
-# define SERVFAIL ns_r_servfail
+# define SERVFAIL ns_r_servfail
#endif
#ifndef NOTIMP
-# define NOTIMP ns_r_notimpl
+# define NOTIMP ns_r_notimpl
#endif
#ifndef REFUSED
-# define REFUSED ns_r_refused
+# define REFUSED ns_r_refused
#endif
#if defined(_WIN32) && !defined(HAVE_ARPA_NAMESER_COMPAT_H) && defined(NOERROR)
# undef NOERROR /* it seems this is already defined in winerror.h */
#endif
#ifndef NOERROR
-# define NOERROR ns_r_noerror
+# define NOERROR ns_r_noerror
#endif
#ifndef FORMERR
-# define FORMERR ns_r_formerr
+# define FORMERR ns_r_formerr
#endif
#ifndef NXDOMAIN
-# define NXDOMAIN ns_r_nxdomain
+# define NXDOMAIN ns_r_nxdomain
#endif
/* Non-standard response codes, use numeric values */
#ifndef YXDOMAIN
-# define YXDOMAIN 6 /* ns_r_yxdomain */
+# define YXDOMAIN 6 /* ns_r_yxdomain */
#endif
#ifndef YXRRSET
-# define YXRRSET 7 /* ns_r_yxrrset */
+# define YXRRSET 7 /* ns_r_yxrrset */
#endif
#ifndef NXRRSET
-# define NXRRSET 8 /* ns_r_nxrrset */
+# define NXRRSET 8 /* ns_r_nxrrset */
#endif
#ifndef NOTAUTH
-# define NOTAUTH 9 /* ns_r_notauth */
+# define NOTAUTH 9 /* ns_r_notauth */
#endif
#ifndef NOTZONE
-# define NOTZONE 10 /* ns_r_notzone */
+# define NOTZONE 10 /* ns_r_notzone */
#endif
#ifndef TSIG_BADSIG
-# define TSIG_BADSIG 16 /* ns_r_badsig */
+# define TSIG_BADSIG 16 /* ns_r_badsig */
#endif
#ifndef TSIG_BADKEY
-# define TSIG_BADKEY 17 /* ns_r_badkey */
+# define TSIG_BADKEY 17 /* ns_r_badkey */
#endif
#ifndef TSIG_BADTIME
-# define TSIG_BADTIME 18 /* ns_r_badtime */
+# define TSIG_BADTIME 18 /* ns_r_badtime */
#endif
/* classes */
#ifndef C_IN
-# define C_IN 1 /* ns_c_in */
+# define C_IN 1 /* ns_c_in */
#endif
#ifndef C_CHAOS
-# define C_CHAOS 3 /* ns_c_chaos */
+# define C_CHAOS 3 /* ns_c_chaos */
#endif
#ifndef C_HS
-# define C_HS 4 /* ns_c_hs */
+# define C_HS 4 /* ns_c_hs */
#endif
#ifndef C_NONE
-# define C_NONE 254 /* ns_c_none */
+# define C_NONE 254 /* ns_c_none */
#endif
#ifndef C_ANY
-# define C_ANY 255 /* ns_c_any */
+# define C_ANY 255 /* ns_c_any */
#endif
/* types */
#ifndef T_A
-# define T_A 1 /* ns_t_a */
+# define T_A 1 /* ns_t_a */
#endif
#ifndef T_NS
-# define T_NS 2 /* ns_t_ns */
+# define T_NS 2 /* ns_t_ns */
#endif
#ifndef T_MD
-# define T_MD 3 /* ns_t_md */
+# define T_MD 3 /* ns_t_md */
#endif
#ifndef T_MF
-# define T_MF 4 /* ns_t_mf */
+# define T_MF 4 /* ns_t_mf */
#endif
#ifndef T_CNAME
-# define T_CNAME 5 /* ns_t_cname */
+# define T_CNAME 5 /* ns_t_cname */
#endif
#ifndef T_SOA
-# define T_SOA 6 /* ns_t_soa */
+# define T_SOA 6 /* ns_t_soa */
#endif
#ifndef T_MB
-# define T_MB 7 /* ns_t_mb */
+# define T_MB 7 /* ns_t_mb */
#endif
#ifndef T_MG
-# define T_MG 8 /* ns_t_mg */
+# define T_MG 8 /* ns_t_mg */
#endif
#ifndef T_MR
-# define T_MR 9 /* ns_t_mr */
+# define T_MR 9 /* ns_t_mr */
#endif
#ifndef T_NULL
-# define T_NULL 10 /* ns_t_null */
+# define T_NULL 10 /* ns_t_null */
#endif
#ifndef T_WKS
-# define T_WKS 11 /* ns_t_wks */
+# define T_WKS 11 /* ns_t_wks */
#endif
#ifndef T_PTR
-# define T_PTR 12 /* ns_t_ptr */
+# define T_PTR 12 /* ns_t_ptr */
#endif
#ifndef T_HINFO
-# define T_HINFO 13 /* ns_t_hinfo */
+# define T_HINFO 13 /* ns_t_hinfo */
#endif
#ifndef T_MINFO
-# define T_MINFO 14 /* ns_t_minfo */
+# define T_MINFO 14 /* ns_t_minfo */
#endif
#ifndef T_MX
-# define T_MX 15 /* ns_t_mx */
+# define T_MX 15 /* ns_t_mx */
#endif
#ifndef T_TXT
-# define T_TXT 16 /* ns_t_txt */
+# define T_TXT 16 /* ns_t_txt */
#endif
#ifndef T_RP
-# define T_RP 17 /* ns_t_rp */
+# define T_RP 17 /* ns_t_rp */
#endif
#ifndef T_AFSDB
-# define T_AFSDB 18 /* ns_t_afsdb */
+# define T_AFSDB 18 /* ns_t_afsdb */
#endif
#ifndef T_X25
-# define T_X25 19 /* ns_t_x25 */
+# define T_X25 19 /* ns_t_x25 */
#endif
#ifndef T_ISDN
-# define T_ISDN 20 /* ns_t_isdn */
+# define T_ISDN 20 /* ns_t_isdn */
#endif
#ifndef T_RT
-# define T_RT 21 /* ns_t_rt */
+# define T_RT 21 /* ns_t_rt */
#endif
#ifndef T_NSAP
-# define T_NSAP 22 /* ns_t_nsap */
+# define T_NSAP 22 /* ns_t_nsap */
#endif
#ifndef T_NSAP_PTR
-# define T_NSAP_PTR 23 /* ns_t_nsap_ptr */
+# define T_NSAP_PTR 23 /* ns_t_nsap_ptr */
#endif
#ifndef T_SIG
-# define T_SIG 24 /* ns_t_sig */
+# define T_SIG 24 /* ns_t_sig */
#endif
#ifndef T_KEY
-# define T_KEY 25 /* ns_t_key */
+# define T_KEY 25 /* ns_t_key */
#endif
#ifndef T_PX
-# define T_PX 26 /* ns_t_px */
+# define T_PX 26 /* ns_t_px */
#endif
#ifndef T_GPOS
-# define T_GPOS 27 /* ns_t_gpos */
+# define T_GPOS 27 /* ns_t_gpos */
#endif
#ifndef T_AAAA
-# define T_AAAA 28 /* ns_t_aaaa */
+# define T_AAAA 28 /* ns_t_aaaa */
#endif
#ifndef T_LOC
-# define T_LOC 29 /* ns_t_loc */
+# define T_LOC 29 /* ns_t_loc */
#endif
#ifndef T_NXT
-# define T_NXT 30 /* ns_t_nxt */
+# define T_NXT 30 /* ns_t_nxt */
#endif
#ifndef T_EID
-# define T_EID 31 /* ns_t_eid */
+# define T_EID 31 /* ns_t_eid */
#endif
#ifndef T_NIMLOC
-# define T_NIMLOC 32 /* ns_t_nimloc */
+# define T_NIMLOC 32 /* ns_t_nimloc */
#endif
#ifndef T_SRV
-# define T_SRV 33 /* ns_t_srv */
+# define T_SRV 33 /* ns_t_srv */
#endif
#ifndef T_ATMA
-# define T_ATMA 34 /* ns_t_atma */
+# define T_ATMA 34 /* ns_t_atma */
#endif
#ifndef T_NAPTR
-# define T_NAPTR 35 /* ns_t_naptr */
+# define T_NAPTR 35 /* ns_t_naptr */
#endif
#ifndef T_KX
-# define T_KX 36 /* ns_t_kx */
+# define T_KX 36 /* ns_t_kx */
#endif
#ifndef T_CERT
-# define T_CERT 37 /* ns_t_cert */
+# define T_CERT 37 /* ns_t_cert */
#endif
#ifndef T_A6
-# define T_A6 38 /* ns_t_a6 */
+# define T_A6 38 /* ns_t_a6 */
#endif
#ifndef T_DNAME
-# define T_DNAME 39 /* ns_t_dname */
+# define T_DNAME 39 /* ns_t_dname */
#endif
#ifndef T_SINK
-# define T_SINK 40 /* ns_t_sink */
+# define T_SINK 40 /* ns_t_sink */
#endif
#ifndef T_OPT
-# define T_OPT 41 /* ns_t_opt */
+# define T_OPT 41 /* ns_t_opt */
#endif
#ifndef T_APL
-# define T_APL 42 /* ns_t_apl */
+# define T_APL 42 /* ns_t_apl */
#endif
#ifndef T_DS
-# define T_DS 43 /* ns_t_ds */
+# define T_DS 43 /* ns_t_ds */
#endif
#ifndef T_SSHFP
-# define T_SSHFP 44 /* ns_t_sshfp */
+# define T_SSHFP 44 /* ns_t_sshfp */
#endif
#ifndef T_RRSIG
-# define T_RRSIG 46 /* ns_t_rrsig */
+# define T_RRSIG 46 /* ns_t_rrsig */
#endif
#ifndef T_NSEC
-# define T_NSEC 47 /* ns_t_nsec */
+# define T_NSEC 47 /* ns_t_nsec */
#endif
#ifndef T_DNSKEY
-# define T_DNSKEY 48 /* ns_t_dnskey */
+# define T_DNSKEY 48 /* ns_t_dnskey */
#endif
#ifndef T_TKEY
-# define T_TKEY 249 /* ns_t_tkey */
+# define T_TKEY 249 /* ns_t_tkey */
#endif
#ifndef T_TSIG
-# define T_TSIG 250 /* ns_t_tsig */
+# define T_TSIG 250 /* ns_t_tsig */
#endif
#ifndef T_IXFR
-# define T_IXFR 251 /* ns_t_ixfr */
+# define T_IXFR 251 /* ns_t_ixfr */
#endif
#ifndef T_AXFR
-# define T_AXFR 252 /* ns_t_axfr */
+# define T_AXFR 252 /* ns_t_axfr */
#endif
#ifndef T_MAILB
-# define T_MAILB 253 /* ns_t_mailb */
+# define T_MAILB 253 /* ns_t_mailb */
#endif
#ifndef T_MAILA
-# define T_MAILA 254 /* ns_t_maila */
+# define T_MAILA 254 /* ns_t_maila */
#endif
#ifndef T_ANY
-# define T_ANY 255 /* ns_t_any */
+# define T_ANY 255 /* ns_t_any */
#endif
#ifndef T_URI
-# define T_URI 256 /* ns_t_uri */
+# define T_URI 256 /* ns_t_uri */
#endif
#ifndef T_CAA
-# define T_CAA 257 /* ns_t_caa */
+# define T_CAA 257 /* ns_t_caa */
#endif
#ifndef T_MAX
-# define T_MAX 65536 /* ns_t_max */
+# define T_MAX 65536 /* ns_t_max */
#endif
diff --git a/include/ares_rules.h b/include/ares_rules.h
index 1706ab7..450dc8a 100644
--- a/include/ares_rules.h
+++ b/include/ares_rules.h
@@ -1,19 +1,30 @@
-#ifndef __CARES_RULES_H
-#define __CARES_RULES_H
-
-
-/* Copyright (C) 2009 - 2021 by Daniel Stenberg et al
+/* MIT License
+ *
+ * Copyright (c) 2009 Daniel Stenberg
+ *
+ * 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:
*
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, 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.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
+#ifndef __CARES_RULES_H
+#define __CARES_RULES_H
/* ================================================================ */
/* COMPILE TIME SANITY CHECKS */
@@ -70,7 +81,7 @@
#ifndef CARES_TYPEOF_ARES_SOCKLEN_T
# error "CARES_TYPEOF_ARES_SOCKLEN_T definition is missing!"
- Error Compilation_aborted_CARES_TYPEOF_ARES_SOCKLEN_T_is_missing
+Error Compilation_aborted_CARES_TYPEOF_ARES_SOCKLEN_T_is_missing
#endif
/*
@@ -81,15 +92,14 @@
#define CareschkszGE(t1, t2) sizeof(t1) >= sizeof(t2) ? 1 : -1
-/*
- * Verify that the size previously defined and expected for
- * ares_socklen_t is actually the same as the one reported
- * by sizeof() at compile time.
- */
+ /*
+ * Verify that the size previously defined and expected for
+ * ares_socklen_t is actually the same as the one reported
+ * by sizeof() at compile time.
+ */
-typedef char
- __cares_rule_02__
- [CareschkszEQ(ares_socklen_t, sizeof(CARES_TYPEOF_ARES_SOCKLEN_T))];
+ typedef char __cares_rule_02__[CareschkszEQ(
+ ares_socklen_t, sizeof(CARES_TYPEOF_ARES_SOCKLEN_T))];
/*
* Verify at compile time that the size of ares_socklen_t as reported
@@ -97,9 +107,7 @@ typedef char
* the current compilation.
*/
-typedef char
- __cares_rule_03__
- [CareschkszGE(ares_socklen_t, int)];
+typedef char __cares_rule_03__[CareschkszGE(ares_socklen_t, int)];
/* ================================================================ */
/* EXTERNALLY AND INTERNALLY VISIBLE DEFINITIONS */
diff --git a/include/ares_version.h b/include/ares_version.h
index 22c6f62..1fadc7e 100644
--- a/include/ares_version.h
+++ b/include/ares_version.h
@@ -1,20 +1,45 @@
+/* MIT License
+ *
+ * Copyright (c) Daniel Stenberg
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#ifndef ARES__VERSION_H
#define ARES__VERSION_H
/* This is the global package copyright */
-#define ARES_COPYRIGHT "2004 - 2021 Daniel Stenberg, <daniel@haxx.se>."
+#define ARES_COPYRIGHT "2004 - 2023 Daniel Stenberg, <daniel@haxx.se>."
#define ARES_VERSION_MAJOR 1
-#define ARES_VERSION_MINOR 18
-#define ARES_VERSION_PATCH 1
-#define ARES_VERSION ((ARES_VERSION_MAJOR<<16)|\
- (ARES_VERSION_MINOR<<8)|\
- (ARES_VERSION_PATCH))
-#define ARES_VERSION_STR "1.18.1"
+#define ARES_VERSION_MINOR 21
+#define ARES_VERSION_PATCH 0
+#define ARES_VERSION \
+ ((ARES_VERSION_MAJOR << 16) | (ARES_VERSION_MINOR << 8) | \
+ (ARES_VERSION_PATCH))
+#define ARES_VERSION_STR "1.21.0"
#if (ARES_VERSION >= 0x010700)
-# define CARES_HAVE_ARES_LIBRARY_INIT 1
+# define CARES_HAVE_ARES_LIBRARY_INIT 1
# define CARES_HAVE_ARES_LIBRARY_CLEANUP 1
#else
# undef CARES_HAVE_ARES_LIBRARY_INIT
diff --git a/libcares.pc.cmake b/libcares.pc.cmake
index 67fd301..df49368 100644
--- a/libcares.pc.cmake
+++ b/libcares.pc.cmake
@@ -4,10 +4,12 @@
# | (_|_____| (_| | | | __/\__ \
# \___| \__,_|_| \___||___/
#
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
prefix=@CMAKE_INSTALL_PREFIX@
-exec_prefix=${prefix}/@CMAKE_INSTALL_BINDIR@
-libdir=${prefix}/@CMAKE_INSTALL_LIBDIR@
-includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@
+exec_prefix=@CMAKE_INSTALL_FULL_BINDIR@
+libdir=@CMAKE_INSTALL_FULL_LIBDIR@
+includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@
Name: c-ares
URL: https://c-ares.org/
diff --git a/libcares.pc.in b/libcares.pc.in
index e7ef5d2..aa4bfc9 100644
--- a/libcares.pc.in
+++ b/libcares.pc.in
@@ -4,6 +4,8 @@
# | (_|_____| (_| | | | __/\__ \
# \___| \__,_|_| \___||___/
#
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
diff --git a/ltmain.sh b/ltmain.sh
index 21e5e07..9b12fbb 100755
--- a/ltmain.sh
+++ b/ltmain.sh
@@ -1,12 +1,12 @@
-#! /bin/sh
+#! /usr/bin/env sh
## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
-## by inline-source v2014-01-03.01
+## by inline-source v2019-02-19.15
-# libtool (GNU libtool) 2.4.6
+# libtool (GNU libtool) 2.4.7
# Provide generalized library-building support services.
# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-# Copyright (C) 1996-2015 Free Software Foundation, Inc.
+# Copyright (C) 1996-2019, 2021-2022 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.
@@ -31,8 +31,8 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION="2.4.6 Debian-2.4.6-15"
-package_revision=2.4.6
+VERSION="2.4.7 Debian-2.4.7-5"
+package_revision=2.4.7
## ------ ##
@@ -64,34 +64,25 @@ package_revision=2.4.6
# libraries, which are installed to $pkgauxdir.
# Set a version string for this script.
-scriptversion=2015-01-20.17; # UTC
+scriptversion=2019-02-19.15; # UTC
# General shell script boiler plate, and helper functions.
# Written by Gary V. Vaughan, 2004
-# Copyright (C) 2004-2015 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.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-
-# As a special exception to the GNU General Public License, if you distribute
-# this file as part of a program or library that is built using GNU Libtool,
-# you may include this file under the same distribution terms that you use
-# for the rest of that program.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# This is free software. There is NO warranty; not even for
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+# Copyright (C) 2004-2019, 2021 Bootstrap Authors
+#
+# This file is dual licensed under the terms of the MIT license
+# <https://opensource.org/license/MIT>, and GPL version 2 or later
+# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
+# these licenses when using or redistributing this software or any of
+# the files within it. See the URLs above, or the file `LICENSE`
+# included in the Bootstrap distribution for the full license texts.
-# Please report bugs or propose patches to gary@gnu.org.
+# Please report bugs or propose patches to:
+# <https://github.com/gnulib-modules/bootstrap/issues>
## ------ ##
@@ -139,9 +130,12 @@ do
_G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
fi"
done
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+# These NLS vars are set unconditionally (bootstrap issue #24). Unset those
+# in case the environment reset is needed later and the $save_* variant is not
+# defined (see the code above).
+LC_ALL=C
+LANGUAGE=C
+export LANGUAGE LC_ALL
# Make sure IFS has a sensible default
sp=' '
@@ -159,6 +153,26 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
+# func_unset VAR
+# --------------
+# Portably unset VAR.
+# In some shells, an 'unset VAR' statement leaves a non-zero return
+# status if VAR is already unset, which might be problematic if the
+# statement is used at the end of a function (thus poisoning its return
+# value) or when 'set -e' is active (causing even a spurious abort of
+# the script in this case).
+func_unset ()
+{
+ { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; }
+}
+
+
+# Make sure CDPATH doesn't cause `cd` commands to output the target dir.
+func_unset CDPATH
+
+# Make sure ${,E,F}GREP behave sanely.
+func_unset GREP_OPTIONS
+
## ------------------------- ##
## Locate command utilities. ##
@@ -259,7 +273,7 @@ test -z "$SED" && {
rm -f conftest.in conftest.tmp conftest.nl conftest.out
}
- func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
+ func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin"
rm -f conftest.sed
SED=$func_path_progs_result
}
@@ -295,7 +309,7 @@ test -z "$GREP" && {
rm -f conftest.in conftest.tmp conftest.nl conftest.out
}
- func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
+ func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin"
GREP=$func_path_progs_result
}
@@ -360,6 +374,35 @@ sed_double_backslash="\
s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
s/\n//g"
+# require_check_ifs_backslash
+# ---------------------------
+# Check if we can use backslash as IFS='\' separator, and set
+# $check_ifs_backshlash_broken to ':' or 'false'.
+require_check_ifs_backslash=func_require_check_ifs_backslash
+func_require_check_ifs_backslash ()
+{
+ _G_save_IFS=$IFS
+ IFS='\'
+ _G_check_ifs_backshlash='a\\b'
+ for _G_i in $_G_check_ifs_backshlash
+ do
+ case $_G_i in
+ a)
+ check_ifs_backshlash_broken=false
+ ;;
+ '')
+ break
+ ;;
+ *)
+ check_ifs_backshlash_broken=:
+ break
+ ;;
+ esac
+ done
+ IFS=$_G_save_IFS
+ require_check_ifs_backslash=:
+}
+
## ----------------- ##
## Global variables. ##
@@ -580,16 +623,16 @@ if test yes = "$_G_HAVE_PLUSEQ_OP"; then
{
$debug_cmd
- func_quote_for_eval "$2"
- eval "$1+=\\ \$func_quote_for_eval_result"
+ func_quote_arg pretty "$2"
+ eval "$1+=\\ \$func_quote_arg_result"
}'
else
func_append_quoted ()
{
$debug_cmd
- func_quote_for_eval "$2"
- eval "$1=\$$1\\ \$func_quote_for_eval_result"
+ func_quote_arg pretty "$2"
+ eval "$1=\$$1\\ \$func_quote_arg_result"
}
fi
@@ -1091,85 +1134,203 @@ func_relative_path ()
}
-# func_quote_for_eval ARG...
-# --------------------------
-# Aesthetically quote ARGs to be evaled later.
-# This function returns two values:
-# i) func_quote_for_eval_result
-# double-quoted, suitable for a subsequent eval
-# ii) func_quote_for_eval_unquoted_result
-# has all characters that are still active within double
-# quotes backslashified.
-func_quote_for_eval ()
+# func_quote_portable EVAL ARG
+# ----------------------------
+# Internal function to portably implement func_quote_arg. Note that we still
+# keep attention to performance here so we as much as possible try to avoid
+# calling sed binary (so far O(N) complexity as long as func_append is O(1)).
+func_quote_portable ()
{
$debug_cmd
- func_quote_for_eval_unquoted_result=
- func_quote_for_eval_result=
- while test 0 -lt $#; do
- case $1 in
- *[\\\`\"\$]*)
- _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
- *)
- _G_unquoted_arg=$1 ;;
- esac
- if test -n "$func_quote_for_eval_unquoted_result"; then
- func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
- else
- func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
+ $require_check_ifs_backslash
+
+ func_quote_portable_result=$2
+
+ # one-time-loop (easy break)
+ while true
+ do
+ if $1; then
+ func_quote_portable_result=`$ECHO "$2" | $SED \
+ -e "$sed_double_quote_subst" -e "$sed_double_backslash"`
+ break
fi
- case $_G_unquoted_arg in
- # Double-quote args containing shell metacharacters to delay
- # word splitting, command substitution and variable expansion
- # for a subsequent eval.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, so we specify it separately.
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- _G_quoted_arg=\"$_G_unquoted_arg\"
+ # Quote for eval.
+ case $func_quote_portable_result in
+ *[\\\`\"\$]*)
+ # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string
+ # contains the shell wildcard characters.
+ case $check_ifs_backshlash_broken$func_quote_portable_result in
+ :*|*[\[\*\?]*)
+ func_quote_portable_result=`$ECHO "$func_quote_portable_result" \
+ | $SED "$sed_quote_subst"`
+ break
+ ;;
+ esac
+
+ func_quote_portable_old_IFS=$IFS
+ for _G_char in '\' '`' '"' '$'
+ do
+ # STATE($1) PREV($2) SEPARATOR($3)
+ set start "" ""
+ func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy
+ IFS=$_G_char
+ for _G_part in $func_quote_portable_result
+ do
+ case $1 in
+ quote)
+ func_append func_quote_portable_result "$3$2"
+ set quote "$_G_part" "\\$_G_char"
+ ;;
+ start)
+ set first "" ""
+ func_quote_portable_result=
+ ;;
+ first)
+ set quote "$_G_part" ""
+ ;;
+ esac
+ done
+ done
+ IFS=$func_quote_portable_old_IFS
;;
- *)
- _G_quoted_arg=$_G_unquoted_arg
- ;;
+ *) ;;
esac
-
- if test -n "$func_quote_for_eval_result"; then
- func_append func_quote_for_eval_result " $_G_quoted_arg"
- else
- func_append func_quote_for_eval_result "$_G_quoted_arg"
- fi
- shift
+ break
done
+
+ func_quote_portable_unquoted_result=$func_quote_portable_result
+ case $func_quote_portable_result in
+ # double-quote args containing shell metacharacters to delay
+ # word splitting, command substitution and variable expansion
+ # for a subsequent eval.
+ # many bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ func_quote_portable_result=\"$func_quote_portable_result\"
+ ;;
+ esac
}
-# func_quote_for_expand ARG
-# -------------------------
-# Aesthetically quote ARG to be evaled later; same as above,
-# but do not quote variable references.
-func_quote_for_expand ()
-{
- $debug_cmd
+# func_quotefast_eval ARG
+# -----------------------
+# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG',
+# but optimized for speed. Result is stored in $func_quotefast_eval.
+if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then
+ printf -v _GL_test_printf_tilde %q '~'
+ if test '\~' = "$_GL_test_printf_tilde"; then
+ func_quotefast_eval ()
+ {
+ printf -v func_quotefast_eval_result %q "$1"
+ }
+ else
+ # Broken older Bash implementations. Make those faster too if possible.
+ func_quotefast_eval ()
+ {
+ case $1 in
+ '~'*)
+ func_quote_portable false "$1"
+ func_quotefast_eval_result=$func_quote_portable_result
+ ;;
+ *)
+ printf -v func_quotefast_eval_result %q "$1"
+ ;;
+ esac
+ }
+ fi
+else
+ func_quotefast_eval ()
+ {
+ func_quote_portable false "$1"
+ func_quotefast_eval_result=$func_quote_portable_result
+ }
+fi
- case $1 in
- *[\\\`\"]*)
- _G_arg=`$ECHO "$1" | $SED \
- -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
- *)
- _G_arg=$1 ;;
+
+# func_quote_arg MODEs ARG
+# ------------------------
+# Quote one ARG to be evaled later. MODEs argument may contain zero or more
+# specifiers listed below separated by ',' character. This function returns two
+# values:
+# i) func_quote_arg_result
+# double-quoted (when needed), suitable for a subsequent eval
+# ii) func_quote_arg_unquoted_result
+# has all characters that are still active within double
+# quotes backslashified. Available only if 'unquoted' is specified.
+#
+# Available modes:
+# ----------------
+# 'eval' (default)
+# - escape shell special characters
+# 'expand'
+# - the same as 'eval'; but do not quote variable references
+# 'pretty'
+# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might
+# be used later in func_quote to get output like: 'echo "a b"' instead
+# of 'echo a\ b'. This is slower than default on some shells.
+# 'unquoted'
+# - produce also $func_quote_arg_unquoted_result which does not contain
+# wrapping double-quotes.
+#
+# Examples for 'func_quote_arg pretty,unquoted string':
+#
+# string | *_result | *_unquoted_result
+# ------------+-----------------------+-------------------
+# " | \" | \"
+# a b | "a b" | a b
+# "a b" | "\"a b\"" | \"a b\"
+# * | "*" | *
+# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\"
+#
+# Examples for 'func_quote_arg pretty,unquoted,expand string':
+#
+# string | *_result | *_unquoted_result
+# --------------+---------------------+--------------------
+# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\"
+func_quote_arg ()
+{
+ _G_quote_expand=false
+ case ,$1, in
+ *,expand,*)
+ _G_quote_expand=:
+ ;;
esac
- case $_G_arg in
- # Double-quote args containing shell metacharacters to delay
- # word splitting and command substitution for a subsequent eval.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, so we specify it separately.
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- _G_arg=\"$_G_arg\"
+ case ,$1, in
+ *,pretty,*|*,expand,*|*,unquoted,*)
+ func_quote_portable $_G_quote_expand "$2"
+ func_quote_arg_result=$func_quote_portable_result
+ func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result
+ ;;
+ *)
+ # Faster quote-for-eval for some shells.
+ func_quotefast_eval "$2"
+ func_quote_arg_result=$func_quotefast_eval_result
;;
esac
+}
+
- func_quote_for_expand_result=$_G_arg
+# func_quote MODEs ARGs...
+# ------------------------
+# Quote all ARGs to be evaled later and join them into single command. See
+# func_quote_arg's description for more info.
+func_quote ()
+{
+ $debug_cmd
+ _G_func_quote_mode=$1 ; shift
+ func_quote_result=
+ while test 0 -lt $#; do
+ func_quote_arg "$_G_func_quote_mode" "$1"
+ if test -n "$func_quote_result"; then
+ func_append func_quote_result " $func_quote_arg_result"
+ else
+ func_append func_quote_result "$func_quote_arg_result"
+ fi
+ shift
+ done
}
@@ -1215,8 +1376,8 @@ func_show_eval ()
_G_cmd=$1
_G_fail_exp=${2-':'}
- func_quote_for_expand "$_G_cmd"
- eval "func_notquiet $func_quote_for_expand_result"
+ func_quote_arg pretty,expand "$_G_cmd"
+ eval "func_notquiet $func_quote_arg_result"
$opt_dry_run || {
eval "$_G_cmd"
@@ -1241,8 +1402,8 @@ func_show_eval_locale ()
_G_fail_exp=${2-':'}
$opt_quiet || {
- func_quote_for_expand "$_G_cmd"
- eval "func_echo $func_quote_for_expand_result"
+ func_quote_arg expand,pretty "$_G_cmd"
+ eval "func_echo $func_quote_arg_result"
}
$opt_dry_run || {
@@ -1369,30 +1530,26 @@ func_lt_ver ()
# End:
#! /bin/sh
-# Set a version string for this script.
-scriptversion=2015-10-07.11; # UTC
-
# A portable, pluggable option parser for Bourne shell.
# Written by Gary V. Vaughan, 2010
-# Copyright (C) 2010-2015 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.
-
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
+# This is free software. There is NO warranty; not even for
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+# Copyright (C) 2010-2019, 2021 Bootstrap Authors
+#
+# This file is dual licensed under the terms of the MIT license
+# <https://opensource.org/license/MIT>, and GPL version 2 or later
+# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
+# these licenses when using or redistributing this software or any of
+# the files within it. See the URLs above, or the file `LICENSE`
+# included in the Bootstrap distribution for the full license texts.
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
+# Please report bugs or propose patches to:
+# <https://github.com/gnulib-modules/bootstrap/issues>
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-# Please report bugs or propose patches to gary@gnu.org.
+# Set a version string for this script.
+scriptversion=2019-02-19.15; # UTC
## ------ ##
@@ -1415,7 +1572,7 @@ scriptversion=2015-10-07.11; # UTC
#
# In order for the '--version' option to work, you will need to have a
# suitably formatted comment like the one at the top of this file
-# starting with '# Written by ' and ending with '# warranty; '.
+# starting with '# Written by ' and ending with '# Copyright'.
#
# For '-h' and '--help' to work, you will also need a one line
# description of your script's purpose in a comment directly above the
@@ -1427,7 +1584,7 @@ scriptversion=2015-10-07.11; # UTC
# to display verbose messages only when your user has specified
# '--verbose'.
#
-# After sourcing this file, you can plug processing for additional
+# After sourcing this file, you can plug in processing for additional
# options by amending the variables from the 'Configuration' section
# below, and following the instructions in the 'Option parsing'
# section further down.
@@ -1476,8 +1633,8 @@ fatal_help="Try '\$progname --help' for more information."
## ------------------------- ##
# This section contains functions for adding, removing, and running hooks
-# to the main code. A hook is just a named list of of function, that can
-# be run in order later on.
+# in the main code. A hook is just a list of function names that can be
+# run in order later on.
# func_hookable FUNC_NAME
# -----------------------
@@ -1510,7 +1667,8 @@ func_add_hook ()
# func_remove_hook FUNC_NAME HOOK_FUNC
# ------------------------------------
-# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
+# Remove HOOK_FUNC from the list of hook functions to be called by
+# FUNC_NAME.
func_remove_hook ()
{
$debug_cmd
@@ -1519,10 +1677,28 @@ func_remove_hook ()
}
+# func_propagate_result FUNC_NAME_A FUNC_NAME_B
+# ---------------------------------------------
+# If the *_result variable of FUNC_NAME_A _is set_, assign its value to
+# *_result variable of FUNC_NAME_B.
+func_propagate_result ()
+{
+ $debug_cmd
+
+ func_propagate_result_result=:
+ if eval "test \"\${${1}_result+set}\" = set"
+ then
+ eval "${2}_result=\$${1}_result"
+ else
+ func_propagate_result_result=false
+ fi
+}
+
+
# func_run_hooks FUNC_NAME [ARG]...
# ---------------------------------
# Run all hook functions registered to FUNC_NAME.
-# It is assumed that the list of hook functions contains nothing more
+# It's assumed that the list of hook functions contains nothing more
# than a whitespace-delimited list of legal shell function names, and
# no effort is wasted trying to catch shell meta-characters or preserve
# whitespace.
@@ -1534,22 +1710,19 @@ func_run_hooks ()
case " $hookable_fns " in
*" $1 "*) ;;
- *) func_fatal_error "'$1' does not support hook funcions.n" ;;
+ *) func_fatal_error "'$1' does not support hook functions." ;;
esac
eval _G_hook_fns=\$$1_hooks; shift
for _G_hook in $_G_hook_fns; do
- if eval $_G_hook '"$@"'; then
- # store returned options list back into positional
- # parameters for next 'cmd' execution.
- eval _G_hook_result=\$${_G_hook}_result
- eval set dummy "$_G_hook_result"; shift
- _G_rc_run_hooks=:
+ func_unset "${_G_hook}_result"
+ eval $_G_hook '${1+"$@"}'
+ func_propagate_result $_G_hook func_run_hooks
+ if $func_propagate_result_result; then
+ eval set dummy "$func_run_hooks_result"; shift
fi
done
-
- $_G_rc_run_hooks && func_run_hooks_result=$_G_hook_result
}
@@ -1559,14 +1732,16 @@ func_run_hooks ()
## --------------- ##
# In order to add your own option parsing hooks, you must accept the
-# full positional parameter list in your hook function, you may remove/edit
-# any options that you action, and then pass back the remaining unprocessed
-# options in '<hooked_function_name>_result', escaped suitably for
-# 'eval'. In this case you also must return $EXIT_SUCCESS to let the
-# hook's caller know that it should pay attention to
-# '<hooked_function_name>_result'. Returning $EXIT_FAILURE signalizes that
-# arguments are left untouched by the hook and therefore caller will ignore the
-# result variable.
+# full positional parameter list from your hook function. You may remove
+# or edit any options that you action, and then pass back the remaining
+# unprocessed options in '<hooked_function_name>_result', escaped
+# suitably for 'eval'.
+#
+# The '<hooked_function_name>_result' variable is automatically unset
+# before your hook gets called; for best performance, only set the
+# *_result variable when necessary (i.e. don't call the 'func_quote'
+# function unnecessarily because it can be an expensive operation on some
+# machines).
#
# Like this:
#
@@ -1578,11 +1753,8 @@ func_run_hooks ()
# usage_message=$usage_message'
# -s, --silent don'\''t print informational messages
# '
-# # No change in '$@' (ignored completely by this hook). There is
-# # no need to do the equivalent (but slower) action:
-# # func_quote_for_eval ${1+"$@"}
-# # my_options_prep_result=$func_quote_for_eval_result
-# false
+# # No change in '$@' (ignored completely by this hook). Leave
+# # my_options_prep_result variable intact.
# }
# func_add_hook func_options_prep my_options_prep
#
@@ -1593,7 +1765,7 @@ func_run_hooks ()
#
# args_changed=false
#
-# # Note that for efficiency, we parse as many options as we can
+# # Note that, for efficiency, we parse as many options as we can
# # recognise in a loop before passing the remainder back to the
# # caller on the first unrecognised argument we encounter.
# while test $# -gt 0; do
@@ -1610,18 +1782,17 @@ func_run_hooks ()
# args_changed=:
# ;;
# *) # Make sure the first unrecognised option "$_G_opt"
-# # is added back to "$@", we could need that later
-# # if $args_changed is true.
+# # is added back to "$@" in case we need it later,
+# # if $args_changed was set to 'true'.
# set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
# esac
# done
#
+# # Only call 'func_quote' here if we processed at least one argument.
# if $args_changed; then
-# func_quote_for_eval ${1+"$@"}
-# my_silent_option_result=$func_quote_for_eval_result
+# func_quote eval ${1+"$@"}
+# my_silent_option_result=$func_quote_result
# fi
-#
-# $args_changed
# }
# func_add_hook func_parse_options my_silent_option
#
@@ -1632,8 +1803,6 @@ func_run_hooks ()
#
# $opt_silent && $opt_verbose && func_fatal_help "\
# '--silent' and '--verbose' options are mutually exclusive."
-#
-# false
# }
# func_add_hook func_validate_options my_option_validation
#
@@ -1649,13 +1818,8 @@ func_options_finish ()
{
$debug_cmd
- _G_func_options_finish_exit=false
- if func_run_hooks func_options ${1+"$@"}; then
- func_options_finish_result=$func_run_hooks_result
- _G_func_options_finish_exit=:
- fi
-
- $_G_func_options_finish_exit
+ func_run_hooks func_options ${1+"$@"}
+ func_propagate_result func_run_hooks func_options_finish
}
@@ -1668,28 +1832,27 @@ func_options ()
{
$debug_cmd
- _G_rc_options=false
+ _G_options_quoted=false
for my_func in options_prep parse_options validate_options options_finish
do
- if eval func_$my_func '${1+"$@"}'; then
- eval _G_res_var='$'"func_${my_func}_result"
- eval set dummy "$_G_res_var" ; shift
- _G_rc_options=:
+ func_unset func_${my_func}_result
+ func_unset func_run_hooks_result
+ eval func_$my_func '${1+"$@"}'
+ func_propagate_result func_$my_func func_options
+ if $func_propagate_result_result; then
+ eval set dummy "$func_options_result"; shift
+ _G_options_quoted=:
fi
done
- # Save modified positional parameters for caller. As a top-level
- # options-parser function we always need to set the 'func_options_result'
- # variable (regardless the $_G_rc_options value).
- if $_G_rc_options; then
- func_options_result=$_G_res_var
- else
- func_quote_for_eval ${1+"$@"}
- func_options_result=$func_quote_for_eval_result
- fi
-
- $_G_rc_options
+ $_G_options_quoted || {
+ # As we (func_options) are top-level options-parser function and
+ # nobody quoted "$@" for us yet, we need to do it explicitly for
+ # caller.
+ func_quote eval ${1+"$@"}
+ func_options_result=$func_quote_result
+ }
}
@@ -1699,8 +1862,7 @@ func_options ()
# Note that when calling hook functions, we pass through the list of
# positional parameters. If a hook function modifies that list, and
# needs to propagate that back to rest of this script, then the complete
-# modified list must be put in 'func_run_hooks_result' before
-# returning $EXIT_SUCCESS (otherwise $EXIT_FAILURE is returned).
+# modified list must be put in 'func_run_hooks_result' before returning.
func_hookable func_options_prep
func_options_prep ()
{
@@ -1710,14 +1872,8 @@ func_options_prep ()
opt_verbose=false
opt_warning_types=
- _G_rc_options_prep=false
- if func_run_hooks func_options_prep ${1+"$@"}; then
- _G_rc_options_prep=:
- # save modified positional parameters for caller
- func_options_prep_result=$func_run_hooks_result
- fi
-
- $_G_rc_options_prep
+ func_run_hooks func_options_prep ${1+"$@"}
+ func_propagate_result func_run_hooks func_options_prep
}
@@ -1729,27 +1885,32 @@ func_parse_options ()
{
$debug_cmd
- func_parse_options_result=
-
- _G_rc_parse_options=false
+ _G_parse_options_requote=false
# this just eases exit handling
while test $# -gt 0; do
# Defer to hook functions for initial option parsing, so they
# get priority in the event of reusing an option name.
- if func_run_hooks func_parse_options ${1+"$@"}; then
- eval set dummy "$func_run_hooks_result"; shift
- _G_rc_parse_options=:
+ func_run_hooks func_parse_options ${1+"$@"}
+ func_propagate_result func_run_hooks func_parse_options
+ if $func_propagate_result_result; then
+ eval set dummy "$func_parse_options_result"; shift
+ # Even though we may have changed "$@", we passed the "$@" array
+ # down into the hook and it quoted it for us (because we are in
+ # this if-branch). No need to quote it again.
+ _G_parse_options_requote=false
fi
# Break out of the loop if we already parsed every option.
test $# -gt 0 || break
+ # We expect that one of the options parsed in this function matches
+ # and thus we remove _G_opt from "$@" and need to re-quote.
_G_match_parse_options=:
_G_opt=$1
shift
case $_G_opt in
--debug|-x) debug_cmd='set -x'
- func_echo "enabling shell trace mode"
+ func_echo "enabling shell trace mode" >&2
$debug_cmd
;;
@@ -1760,7 +1921,7 @@ func_parse_options ()
--warnings|--warning|-W)
if test $# = 0 && func_missing_arg $_G_opt; then
- _G_rc_parse_options=:
+ _G_parse_options_requote=:
break
fi
case " $warning_categories $1" in
@@ -1815,7 +1976,7 @@ func_parse_options ()
shift
;;
- --) _G_rc_parse_options=: ; break ;;
+ --) _G_parse_options_requote=: ; break ;;
-*) func_fatal_help "unrecognised option: '$_G_opt'" ;;
*) set dummy "$_G_opt" ${1+"$@"}; shift
_G_match_parse_options=false
@@ -1823,17 +1984,16 @@ func_parse_options ()
;;
esac
- $_G_match_parse_options && _G_rc_parse_options=:
+ if $_G_match_parse_options; then
+ _G_parse_options_requote=:
+ fi
done
-
- if $_G_rc_parse_options; then
+ if $_G_parse_options_requote; then
# save modified positional parameters for caller
- func_quote_for_eval ${1+"$@"}
- func_parse_options_result=$func_quote_for_eval_result
+ func_quote eval ${1+"$@"}
+ func_parse_options_result=$func_quote_result
fi
-
- $_G_rc_parse_options
}
@@ -1846,21 +2006,14 @@ func_validate_options ()
{
$debug_cmd
- _G_rc_validate_options=false
-
# Display all warnings if -W was not given.
test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
- if func_run_hooks func_validate_options ${1+"$@"}; then
- # save modified positional parameters for caller
- func_validate_options_result=$func_run_hooks_result
- _G_rc_validate_options=:
- fi
+ func_run_hooks func_validate_options ${1+"$@"}
+ func_propagate_result func_run_hooks func_validate_options
# Bail if the options were screwed!
$exit_cmd $EXIT_FAILURE
-
- $_G_rc_validate_options
}
@@ -1916,8 +2069,8 @@ func_missing_arg ()
# func_split_equals STRING
# ------------------------
-# Set func_split_equals_lhs and func_split_equals_rhs shell variables after
-# splitting STRING at the '=' sign.
+# Set func_split_equals_lhs and func_split_equals_rhs shell variables
+# after splitting STRING at the '=' sign.
test -z "$_G_HAVE_XSI_OPS" \
&& (eval 'x=a/b/c;
test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
@@ -1932,8 +2085,9 @@ then
func_split_equals_lhs=${1%%=*}
func_split_equals_rhs=${1#*=}
- test "x$func_split_equals_lhs" = "x$1" \
- && func_split_equals_rhs=
+ if test "x$func_split_equals_lhs" = "x$1"; then
+ func_split_equals_rhs=
+ fi
}'
else
# ...otherwise fall back to using expr, which is often a shell builtin.
@@ -1943,7 +2097,7 @@ else
func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
func_split_equals_rhs=
- test "x$func_split_equals_lhs" = "x$1" \
+ test "x$func_split_equals_lhs=" = "x$1" \
|| func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
}
fi #func_split_equals
@@ -1969,7 +2123,7 @@ else
{
$debug_cmd
- func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
+ func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'`
func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
}
fi #func_split_short_opt
@@ -2011,31 +2165,44 @@ func_usage_message ()
# func_version
# ------------
# Echo version message to standard output and exit.
+# The version message is extracted from the calling file's header
+# comments, with leading '# ' stripped:
+# 1. First display the progname and version
+# 2. Followed by the header comment line matching /^# Written by /
+# 3. Then a blank line followed by the first following line matching
+# /^# Copyright /
+# 4. Immediately followed by any lines between the previous matches,
+# except lines preceding the intervening completely blank line.
+# For example, see the header comments of this file.
func_version ()
{
$debug_cmd
printf '%s\n' "$progname $scriptversion"
$SED -n '
- /(C)/!b go
- :more
- /\./!{
- N
- s|\n# | |
- b more
- }
- :go
- /^# Written by /,/# warranty; / {
- s|^# ||
- s|^# *$||
- s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
- p
+ /^# Written by /!b
+ s|^# ||; p; n
+
+ :fwd2blnk
+ /./ {
+ n
+ b fwd2blnk
}
- /^# Written by / {
- s|^# ||
- p
+ p; n
+
+ :holdwrnt
+ s|^# ||
+ s|^# *$||
+ /^Copyright /!{
+ /./H
+ n
+ b holdwrnt
}
- /^warranty; /q' < "$progpath"
+
+ s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
+ G
+ s|\(\n\)\n*|\1|g
+ p; q' < "$progpath"
exit $?
}
@@ -2045,12 +2212,12 @@ func_version ()
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'before-save-hook 'time-stamp)
-# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC"
# time-stamp-time-zone: "UTC"
# End:
# Set a version string.
-scriptversion='(GNU libtool) 2.4.6'
+scriptversion='(GNU libtool) 2.4.7'
# func_echo ARG...
@@ -2141,7 +2308,7 @@ include the following information:
compiler: $LTCC
compiler flags: $LTCFLAGS
linker: $LD (gnu? $with_gnu_ld)
- version: $progname $scriptversion Debian-2.4.6-15
+ version: $progname $scriptversion Debian-2.4.7-5
automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
@@ -2197,7 +2364,7 @@ fi
# a configuration failure hint, and exit.
func_fatal_configuration ()
{
- func__fatal_error ${1+"$@"} \
+ func_fatal_error ${1+"$@"} \
"See the $PACKAGE documentation for more information." \
"Fatal configuration error."
}
@@ -2345,6 +2512,8 @@ libtool_options_prep ()
_G_rc_lt_options_prep=:
+ _G_rc_lt_options_prep=:
+
# Shorthand for --mode=foo, only valid as the first argument
case $1 in
clean|clea|cle|cl)
@@ -2375,11 +2544,9 @@ libtool_options_prep ()
if $_G_rc_lt_options_prep; then
# Pass back the list of options.
- func_quote_for_eval ${1+"$@"}
- libtool_options_prep_result=$func_quote_for_eval_result
+ func_quote eval ${1+"$@"}
+ libtool_options_prep_result=$func_quote_result
fi
-
- $_G_rc_lt_options_prep
}
func_add_hook func_options_prep libtool_options_prep
@@ -2482,11 +2649,9 @@ libtool_parse_options ()
if $_G_rc_lt_parse_options; then
# save modified positional parameters for caller
- func_quote_for_eval ${1+"$@"}
- libtool_parse_options_result=$func_quote_for_eval_result
+ func_quote eval ${1+"$@"}
+ libtool_parse_options_result=$func_quote_result
fi
-
- $_G_rc_lt_parse_options
}
func_add_hook func_parse_options libtool_parse_options
@@ -2543,8 +2708,8 @@ libtool_validate_options ()
}
# Pass back the unparsed argument list
- func_quote_for_eval ${1+"$@"}
- libtool_validate_options_result=$func_quote_for_eval_result
+ func_quote eval ${1+"$@"}
+ libtool_validate_options_result=$func_quote_result
}
func_add_hook func_validate_options libtool_validate_options
@@ -3510,8 +3675,8 @@ func_mode_compile ()
esac
done
- func_quote_for_eval "$libobj"
- test "X$libobj" != "X$func_quote_for_eval_result" \
+ func_quote_arg pretty "$libobj"
+ test "X$libobj" != "X$func_quote_arg_result" \
&& $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
&& func_warning "libobj name '$libobj' may not contain shell special characters."
func_dirname_and_basename "$obj" "/" ""
@@ -3584,8 +3749,8 @@ compiler."
func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
srcfile=$func_to_tool_file_result
- func_quote_for_eval "$srcfile"
- qsrcfile=$func_quote_for_eval_result
+ func_quote_arg pretty "$srcfile"
+ qsrcfile=$func_quote_arg_result
# Only build a PIC object if we are building libtool libraries.
if test yes = "$build_libtool_libs"; then
@@ -3740,7 +3905,8 @@ This mode accepts the following additional options:
-prefer-non-pic try to build non-PIC objects only
-shared do not build a '.o' file suitable for static linking
-static only build a '.o' file suitable for static linking
- -Wc,FLAG pass FLAG directly to the compiler
+ -Wc,FLAG
+ -Xcompiler FLAG pass FLAG directly to the compiler
COMPILE-COMMAND is a command to be used in creating a 'standard' object file
from the given SOURCEFILE.
@@ -3846,6 +4012,8 @@ The following components of LINK-COMMAND are treated specially:
-weak LIBNAME declare that the target provides the LIBNAME interface
-Wc,FLAG
-Xcompiler FLAG pass linker-specific FLAG directly to the compiler
+ -Wa,FLAG
+ -Xassembler FLAG pass linker-specific FLAG directly to the assembler
-Wl,FLAG
-Xlinker FLAG pass linker-specific FLAG directly to the linker
-XCClinker FLAG pass link-specific FLAG to the compiler driver (CC)
@@ -4188,8 +4356,8 @@ func_mode_install ()
case $nonopt in *shtool*) :;; *) false;; esac
then
# Aesthetically quote it.
- func_quote_for_eval "$nonopt"
- install_prog="$func_quote_for_eval_result "
+ func_quote_arg pretty "$nonopt"
+ install_prog="$func_quote_arg_result "
arg=$1
shift
else
@@ -4199,8 +4367,8 @@ func_mode_install ()
# The real first argument should be the name of the installation program.
# Aesthetically quote it.
- func_quote_for_eval "$arg"
- func_append install_prog "$func_quote_for_eval_result"
+ func_quote_arg pretty "$arg"
+ func_append install_prog "$func_quote_arg_result"
install_shared_prog=$install_prog
case " $install_prog " in
*[\\\ /]cp\ *) install_cp=: ;;
@@ -4257,12 +4425,12 @@ func_mode_install ()
esac
# Aesthetically quote the argument.
- func_quote_for_eval "$arg"
- func_append install_prog " $func_quote_for_eval_result"
+ func_quote_arg pretty "$arg"
+ func_append install_prog " $func_quote_arg_result"
if test -n "$arg2"; then
- func_quote_for_eval "$arg2"
+ func_quote_arg pretty "$arg2"
fi
- func_append install_shared_prog " $func_quote_for_eval_result"
+ func_append install_shared_prog " $func_quote_arg_result"
done
test -z "$install_prog" && \
@@ -4273,8 +4441,8 @@ func_mode_install ()
if test -n "$install_override_mode" && $no_mode; then
if $install_cp; then :; else
- func_quote_for_eval "$install_override_mode"
- func_append install_shared_prog " -m $func_quote_for_eval_result"
+ func_quote_arg pretty "$install_override_mode"
+ func_append install_shared_prog " -m $func_quote_arg_result"
fi
fi
@@ -4570,8 +4738,8 @@ func_mode_install ()
relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
$opt_quiet || {
- func_quote_for_expand "$relink_command"
- eval "func_echo $func_quote_for_expand_result"
+ func_quote_arg expand,pretty "$relink_command"
+ eval "func_echo $func_quote_arg_result"
}
if eval "$relink_command"; then :
else
@@ -5350,7 +5518,8 @@ else
if test \"\$libtool_execute_magic\" != \"$magic\"; then
file=\"\$0\""
- qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+ func_quote_arg pretty "$ECHO"
+ qECHO=$func_quote_arg_result
$ECHO "\
# A function that is used when there is no print builtin or printf.
@@ -5360,7 +5529,7 @@ func_fallback_echo ()
\$1
_LTECHO_EOF'
}
- ECHO=\"$qECHO\"
+ ECHO=$qECHO
fi
# Very basic option parsing. These options are (a) specific to
@@ -6703,9 +6872,9 @@ func_mode_link ()
while test "$#" -gt 0; do
arg=$1
shift
- func_quote_for_eval "$arg"
- qarg=$func_quote_for_eval_unquoted_result
- func_append libtool_args " $func_quote_for_eval_result"
+ func_quote_arg pretty,unquoted "$arg"
+ qarg=$func_quote_arg_unquoted_result
+ func_append libtool_args " $func_quote_arg_result"
# If the previous option needs an argument, assign it.
if test -n "$prev"; then
@@ -6941,6 +7110,13 @@ func_mode_link ()
prev=
continue
;;
+ xassembler)
+ func_append compiler_flags " -Xassembler $qarg"
+ prev=
+ func_append compile_command " -Xassembler $qarg"
+ func_append finalize_command " -Xassembler $qarg"
+ continue
+ ;;
xcclinker)
func_append linker_flags " $qarg"
func_append compiler_flags " $qarg"
@@ -7111,7 +7287,7 @@ func_mode_link ()
# These systems don't actually have a C library (as such)
test X-lc = "X$arg" && continue
;;
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
# Do not include libc due to us having libc/libc_r.
test X-lc = "X$arg" && continue
;;
@@ -7131,7 +7307,7 @@ func_mode_link ()
esac
elif test X-lc_r = "X$arg"; then
case $host in
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
# Do not include libc_r directly, use -pthread flag.
continue
;;
@@ -7161,8 +7337,20 @@ func_mode_link ()
prev=xcompiler
continue
;;
-
- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+ # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199.
+ -pthread)
+ case $host in
+ *solaris2*) ;;
+ *)
+ case "$new_inherited_linker_flags " in
+ *" $arg "*) ;;
+ * ) func_append new_inherited_linker_flags " $arg" ;;
+ esac
+ ;;
+ esac
+ continue
+ ;;
+ -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \
|-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
func_append compiler_flags " $arg"
func_append compile_command " $arg"
@@ -7303,9 +7491,9 @@ func_mode_link ()
save_ifs=$IFS; IFS=,
for flag in $args; do
IFS=$save_ifs
- func_quote_for_eval "$flag"
- func_append arg " $func_quote_for_eval_result"
- func_append compiler_flags " $func_quote_for_eval_result"
+ func_quote_arg pretty "$flag"
+ func_append arg " $func_quote_arg_result"
+ func_append compiler_flags " $func_quote_arg_result"
done
IFS=$save_ifs
func_stripname ' ' '' "$arg"
@@ -7319,16 +7507,21 @@ func_mode_link ()
save_ifs=$IFS; IFS=,
for flag in $args; do
IFS=$save_ifs
- func_quote_for_eval "$flag"
- func_append arg " $wl$func_quote_for_eval_result"
- func_append compiler_flags " $wl$func_quote_for_eval_result"
- func_append linker_flags " $func_quote_for_eval_result"
+ func_quote_arg pretty "$flag"
+ func_append arg " $wl$func_quote_arg_result"
+ func_append compiler_flags " $wl$func_quote_arg_result"
+ func_append linker_flags " $func_quote_arg_result"
done
IFS=$save_ifs
func_stripname ' ' '' "$arg"
arg=$func_stripname_result
;;
+ -Xassembler)
+ prev=xassembler
+ continue
+ ;;
+
-Xcompiler)
prev=xcompiler
continue
@@ -7346,8 +7539,8 @@ func_mode_link ()
# -msg_* for osf cc
-msg_*)
- func_quote_for_eval "$arg"
- arg=$func_quote_for_eval_result
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
;;
# Flags to be passed through unchanged, with rationale:
@@ -7370,12 +7563,13 @@ func_mode_link ()
# -fuse-ld=* Linker select flags for GCC
# -static-* direct GCC to link specific libraries statically
# -fcilkplus Cilk Plus language extension features for C/C++
+ # -Wa,* Pass flags directly to the assembler
-64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
-O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
- -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus)
- func_quote_for_eval "$arg"
- arg=$func_quote_for_eval_result
+ -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus|-Wa,*)
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
func_append compile_command " $arg"
func_append finalize_command " $arg"
func_append compiler_flags " $arg"
@@ -7396,15 +7590,15 @@ func_mode_link ()
continue
else
# Otherwise treat like 'Some other compiler flag' below
- func_quote_for_eval "$arg"
- arg=$func_quote_for_eval_result
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
fi
;;
# Some other compiler flag.
-* | +*)
- func_quote_for_eval "$arg"
- arg=$func_quote_for_eval_result
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
;;
*.$objext)
@@ -7524,8 +7718,8 @@ func_mode_link ()
*)
# Unknown arguments in both finalize_command and compile_command need
# to be aesthetically quoted because they are evaled later.
- func_quote_for_eval "$arg"
- arg=$func_quote_for_eval_result
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
;;
esac # arg
@@ -8733,7 +8927,7 @@ func_mode_link ()
test CXX = "$tagname" && {
case $host_os in
linux*)
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*) # Sun C++ 5.9
func_suncc_cstd_abi
@@ -8906,7 +9100,7 @@ func_mode_link ()
#
case $version_type in
# correct linux to gnu/linux during the next big refactor
- darwin|freebsd-elf|linux|osf|windows|none)
+ darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none)
func_arith $number_major + $number_minor
current=$func_arith_result
age=$number_minor
@@ -9000,7 +9194,7 @@ func_mode_link ()
versuffix=.$current.$revision
;;
- freebsd-elf)
+ freebsd-elf | midnightbsd-elf)
func_arith $current - $age
major=.$func_arith_result
versuffix=$major.$age.$revision
@@ -9226,7 +9420,7 @@ func_mode_link ()
*-*-netbsd*)
# Don't link with libc until the a.out ld.so is fixed.
;;
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
# Do not include libc due to us having libc/libc_r.
;;
*-*-sco3.2v5* | *-*-sco5v6*)
@@ -10037,8 +10231,8 @@ EOF
for cmd in $concat_cmds; do
IFS=$save_ifs
$opt_quiet || {
- func_quote_for_expand "$cmd"
- eval "func_echo $func_quote_for_expand_result"
+ func_quote_arg expand,pretty "$cmd"
+ eval "func_echo $func_quote_arg_result"
}
$opt_dry_run || eval "$cmd" || {
lt_exit=$?
@@ -10131,8 +10325,8 @@ EOF
eval cmd=\"$cmd\"
IFS=$save_ifs
$opt_quiet || {
- func_quote_for_expand "$cmd"
- eval "func_echo $func_quote_for_expand_result"
+ func_quote_arg expand,pretty "$cmd"
+ eval "func_echo $func_quote_arg_result"
}
$opt_dry_run || eval "$cmd" || {
lt_exit=$?
@@ -10606,12 +10800,13 @@ EOF
elif eval var_value=\$$var; test -z "$var_value"; then
relink_command="$var=; export $var; $relink_command"
else
- func_quote_for_eval "$var_value"
- relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ func_quote_arg pretty "$var_value"
+ relink_command="$var=$func_quote_arg_result; export $var; $relink_command"
fi
done
- relink_command="(cd `pwd`; $relink_command)"
- relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+ func_quote eval cd "`pwd`"
+ func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)"
+ relink_command=$func_quote_arg_unquoted_result
fi
# Only actually do things if not in dry run mode.
@@ -10851,13 +11046,15 @@ EOF
elif eval var_value=\$$var; test -z "$var_value"; then
relink_command="$var=; export $var; $relink_command"
else
- func_quote_for_eval "$var_value"
- relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ func_quote_arg pretty,unquoted "$var_value"
+ relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command"
fi
done
# Quote the link command for shipping.
- relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
- relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+ func_quote eval cd "`pwd`"
+ relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+ func_quote_arg pretty,unquoted "$relink_command"
+ relink_command=$func_quote_arg_unquoted_result
if test yes = "$hardcode_automatic"; then
relink_command=
fi
diff --git a/m4/ax_append_compile_flags.m4 b/m4/ax_append_compile_flags.m4
new file mode 100644
index 0000000..1f8e708
--- /dev/null
+++ b/m4/ax_append_compile_flags.m4
@@ -0,0 +1,65 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_append_compile_flags.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_APPEND_COMPILE_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS])
+#
+# DESCRIPTION
+#
+# For every FLAG1, FLAG2 it is checked whether the compiler works with the
+# flag. If it does, the flag is added FLAGS-VARIABLE
+#
+# If FLAGS-VARIABLE is not specified, the current language's flags (e.g.
+# CFLAGS) is used. During the check the flag is always added to the
+# current language's flags.
+#
+# If EXTRA-FLAGS is defined, it is added to the current language's default
+# flags (e.g. CFLAGS) when the check is done. The check is thus made with
+# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
+# force the compiler to issue an error when a bad flag is given.
+#
+# NOTE: This macro depends on the AX_APPEND_FLAG and
+# AX_CHECK_COMPILE_FLAG. Please keep this macro in sync with
+# AX_APPEND_LINK_FLAGS.
+#
+# LICENSE
+#
+# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception, the respective Autoconf Macro's copyright owner
+# gives unlimited permission to copy, distribute and modify the configure
+# scripts that are the output of Autoconf when processing the Macro. You
+# need not follow the terms of the GNU General Public License when using
+# or distributing such scripts, even though portions of the text of the
+# Macro appear in them. The GNU General Public License (GPL) does govern
+# all other use of the material that constitutes the Autoconf Macro.
+#
+# This special exception to the GPL applies to versions of the Autoconf
+# Macro released by the Autoconf Archive. When you make and distribute a
+# modified version of the Autoconf Macro, you may extend this special
+# exception to the GPL to apply to your modified version as well.
+
+#serial 3
+
+AC_DEFUN([AX_APPEND_COMPILE_FLAGS],
+[AC_REQUIRE([AX_CHECK_COMPILE_FLAG])
+AC_REQUIRE([AX_APPEND_FLAG])
+for flag in $1; do
+ AX_CHECK_COMPILE_FLAG([$flag], [AX_APPEND_FLAG([$flag], [$2])], [], [$3])
+done
+])dnl AX_APPEND_COMPILE_FLAGS
diff --git a/m4/ax_append_flag.m4 b/m4/ax_append_flag.m4
new file mode 100644
index 0000000..1d38b76
--- /dev/null
+++ b/m4/ax_append_flag.m4
@@ -0,0 +1,69 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_append_flag.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_APPEND_FLAG(FLAG, [FLAGS-VARIABLE])
+#
+# DESCRIPTION
+#
+# FLAG is appended to the FLAGS-VARIABLE shell variable, with a space
+# added in between.
+#
+# If FLAGS-VARIABLE is not specified, the current language's flags (e.g.
+# CFLAGS) is used. FLAGS-VARIABLE is not changed if it already contains
+# FLAG. If FLAGS-VARIABLE is unset in the shell, it is set to exactly
+# FLAG.
+#
+# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
+# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception, the respective Autoconf Macro's copyright owner
+# gives unlimited permission to copy, distribute and modify the configure
+# scripts that are the output of Autoconf when processing the Macro. You
+# need not follow the terms of the GNU General Public License when using
+# or distributing such scripts, even though portions of the text of the
+# Macro appear in them. The GNU General Public License (GPL) does govern
+# all other use of the material that constitutes the Autoconf Macro.
+#
+# This special exception to the GPL applies to versions of the Autoconf
+# Macro released by the Autoconf Archive. When you make and distribute a
+# modified version of the Autoconf Macro, you may extend this special
+# exception to the GPL to apply to your modified version as well.
+
+#serial 2
+
+AC_DEFUN([AX_APPEND_FLAG],
+[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX
+AS_VAR_PUSHDEF([FLAGS], [m4_default($2,_AC_LANG_PREFIX[FLAGS])])dnl
+AS_VAR_SET_IF(FLAGS,
+ [case " AS_VAR_GET(FLAGS) " in
+ *" $1 "*)
+ AC_RUN_LOG([: FLAGS already contains $1])
+ ;;
+ *)
+ AC_RUN_LOG([: FLAGS="$FLAGS $1"])
+ AS_VAR_SET(FLAGS, ["AS_VAR_GET(FLAGS) $1"])
+ ;;
+ esac],
+ [AS_VAR_SET(FLAGS,["$1"])])
+AS_VAR_POPDEF([FLAGS])dnl
+])dnl AX_APPEND_FLAG
diff --git a/m4/ax_check_compile_flag.m4 b/m4/ax_check_compile_flag.m4
new file mode 100644
index 0000000..c3a8d69
--- /dev/null
+++ b/m4/ax_check_compile_flag.m4
@@ -0,0 +1,72 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_check_compile_flag.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_CHECK_COMPILE_FLAG(FLAG, [ACTION-SUCCESS], [ACTION-FAILURE], [EXTRA-FLAGS])
+#
+# DESCRIPTION
+#
+# Check whether the given FLAG works with the current language's compiler
+# or gives an error. (Warnings, however, are ignored)
+#
+# ACTION-SUCCESS/ACTION-FAILURE are shell commands to execute on
+# success/failure.
+#
+# If EXTRA-FLAGS is defined, it is added to the current language's default
+# flags (e.g. CFLAGS) when the check is done. The check is thus made with
+# the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to
+# force the compiler to issue an error when a bad flag is given.
+#
+# NOTE: Implementation based on AX_CFLAGS_GCC_OPTION. Please keep this
+# macro in sync with AX_CHECK_{PREPROC,LINK}_FLAG.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Guido U. Draheim <guidod@gmx.de>
+# Copyright (c) 2011 Maarten Bosmans <mkbosmans@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception, the respective Autoconf Macro's copyright owner
+# gives unlimited permission to copy, distribute and modify the configure
+# scripts that are the output of Autoconf when processing the Macro. You
+# need not follow the terms of the GNU General Public License when using
+# or distributing such scripts, even though portions of the text of the
+# Macro appear in them. The GNU General Public License (GPL) does govern
+# all other use of the material that constitutes the Autoconf Macro.
+#
+# This special exception to the GPL applies to versions of the Autoconf
+# Macro released by the Autoconf Archive. When you make and distribute a
+# modified version of the Autoconf Macro, you may extend this special
+# exception to the GPL to apply to your modified version as well.
+
+#serial 2
+
+AC_DEFUN([AX_CHECK_COMPILE_FLAG],
+[AC_PREREQ(2.59)dnl for _AC_LANG_PREFIX
+AS_VAR_PUSHDEF([CACHEVAR],[ax_cv_check_[]_AC_LANG_ABBREV[]flags_$4_$1])dnl
+AC_CACHE_CHECK([whether _AC_LANG compiler accepts $1], CACHEVAR, [
+ ax_check_save_flags=$[]_AC_LANG_PREFIX[]FLAGS
+ _AC_LANG_PREFIX[]FLAGS="$[]_AC_LANG_PREFIX[]FLAGS $4 $1"
+ AC_COMPILE_IFELSE([AC_LANG_PROGRAM()],
+ [AS_VAR_SET(CACHEVAR,[yes])],
+ [AS_VAR_SET(CACHEVAR,[no])])
+ _AC_LANG_PREFIX[]FLAGS=$ax_check_save_flags])
+AS_IF([test x"AS_VAR_GET(CACHEVAR)" = xyes],
+ [m4_default([$2], :)],
+ [m4_default([$3], :)])
+AS_VAR_POPDEF([CACHEVAR])dnl
+])dnl AX_CHECK_COMPILE_FLAGS
diff --git a/m4/ax_check_user_namespace.m4 b/m4/ax_check_user_namespace.m4
index 27ba698..aca7216 100644
--- a/m4/ax_check_user_namespace.m4
+++ b/m4/ax_check_user_namespace.m4
@@ -8,6 +8,9 @@
#
# This macro checks whether the local system supports Linux user namespaces.
# If so, it calls AC_DEFINE(HAVE_USER_NAMESPACE).
+#
+# Copyright (C) The c-ares team
+# SPDX-License-Identifier: MIT
AC_DEFUN([AX_CHECK_USER_NAMESPACE],[dnl
AC_CACHE_CHECK([whether user namespaces are supported],
@@ -34,9 +37,9 @@ int main() {
pid_t child = clone(userfn, userst + 1024*1024, CLONE_NEWUSER|SIGCHLD, 0);
if (child < 0) return 1;
- sprintf(buffer, "/proc/%d/uid_map", child);
+ snprintf(buffer, sizeof(buffer), "/proc/%d/uid_map", child);
fd = open(buffer, O_CREAT|O_WRONLY|O_TRUNC, 0755);
- sprintf(buffer, "0 %d 1\n", getuid());
+ snprintf(buffer, sizeof(buffer), "0 %d 1\n", getuid());
write(fd, buffer, strlen(buffer));
close(fd);
diff --git a/m4/ax_check_uts_namespace.m4 b/m4/ax_check_uts_namespace.m4
index cf7b145..5708acf 100644
--- a/m4/ax_check_uts_namespace.m4
+++ b/m4/ax_check_uts_namespace.m4
@@ -10,6 +10,9 @@
# Also requires user namespaces to be available, so that non-root users
# can enter the namespace.
# If so, it calls AC_DEFINE(HAVE_UTS_NAMESPACE).
+#
+# Copyright (C) The c-ares team
+# SPDX-License-Identifier: MIT
AC_DEFUN([AX_CHECK_UTS_NAMESPACE],[dnl
AC_CACHE_CHECK([whether UTS namespaces are supported],
@@ -55,9 +58,9 @@ int main() {
pid_t child = clone(fn, st + 1024*1024, CLONE_NEWUSER|SIGCHLD, 0);
if (child < 0) return 1;
- sprintf(buffer, "/proc/%d/uid_map", child);
+ snprintf(buffer, sizeof(buffer), "/proc/%d/uid_map", child);
fd = open(buffer, O_CREAT|O_WRONLY|O_TRUNC, 0755);
- sprintf(buffer, "0 %d 1\n", getuid());
+ snprintf(buffer, sizeof(buffer), "0 %d 1\n", getuid());
write(fd, buffer, strlen(buffer));
close(fd);
diff --git a/m4/ax_cxx_compile_stdcxx.m4 b/m4/ax_cxx_compile_stdcxx.m4
new file mode 100644
index 0000000..a3d964c
--- /dev/null
+++ b/m4/ax_cxx_compile_stdcxx.m4
@@ -0,0 +1,1009 @@
+# ===========================================================================
+# https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional])
+#
+# DESCRIPTION
+#
+# Check for baseline language coverage in the compiler for the specified
+# version of the C++ standard. If necessary, add switches to CXX and
+# CXXCPP to enable support. VERSION may be '11', '14', '17', or '20' for
+# the respective C++ standard version.
+#
+# The second argument, if specified, indicates whether you insist on an
+# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
+# -std=c++11). If neither is specified, you get whatever works, with
+# preference for no added switch, and then for an extended mode.
+#
+# The third argument, if specified 'mandatory' or if left unspecified,
+# indicates that baseline support for the specified C++ standard is
+# required and that the macro should error out if no mode with that
+# support is found. If specified 'optional', then configuration proceeds
+# regardless, after defining HAVE_CXX${VERSION} if and only if a
+# supporting mode is found.
+#
+# LICENSE
+#
+# Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com>
+# Copyright (c) 2012 Zack Weinberg <zackw@panix.com>
+# Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu>
+# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com>
+# Copyright (c) 2015 Paul Norman <penorman@mac.com>
+# Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu>
+# Copyright (c) 2016, 2018 Krzesimir Nowak <qdlacz@gmail.com>
+# Copyright (c) 2019 Enji Cooper <yaneurabeya@gmail.com>
+# Copyright (c) 2020 Jason Merrill <jason@redhat.com>
+# Copyright (c) 2021 Jörn Heusipp <osmanx@problemloesungsmaschine.de>
+#
+# Copying and distribution of this file, with or without modification, are
+# permitted in any medium without royalty provided the copyright notice
+# and this notice are preserved. This file is offered as-is, without any
+# warranty.
+
+#serial 15
+
+dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro
+dnl (serial version number 13).
+
+AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
+ m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"],
+ [$1], [14], [ax_cxx_compile_alternatives="14 1y"],
+ [$1], [17], [ax_cxx_compile_alternatives="17 1z"],
+ [$1], [20], [ax_cxx_compile_alternatives="20"],
+ [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl
+ m4_if([$2], [], [],
+ [$2], [ext], [],
+ [$2], [noext], [],
+ [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX])])dnl
+ m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true],
+ [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true],
+ [$3], [optional], [ax_cxx_compile_cxx$1_required=false],
+ [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])])
+ AC_LANG_PUSH([C++])dnl
+ ac_success=no
+
+ m4_if([$2], [], [dnl
+ AC_CACHE_CHECK(whether $CXX supports C++$1 features by default,
+ ax_cv_cxx_compile_cxx$1,
+ [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
+ [ax_cv_cxx_compile_cxx$1=yes],
+ [ax_cv_cxx_compile_cxx$1=no])])
+ if test x$ax_cv_cxx_compile_cxx$1 = xyes; then
+ ac_success=yes
+ fi])
+
+ m4_if([$2], [noext], [], [dnl
+ if test x$ac_success = xno; then
+ for alternative in ${ax_cxx_compile_alternatives}; do
+ switch="-std=gnu++${alternative}"
+ cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
+ AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
+ $cachevar,
+ [ac_save_CXX="$CXX"
+ CXX="$CXX $switch"
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
+ [eval $cachevar=yes],
+ [eval $cachevar=no])
+ CXX="$ac_save_CXX"])
+ if eval test x\$$cachevar = xyes; then
+ CXX="$CXX $switch"
+ if test -n "$CXXCPP" ; then
+ CXXCPP="$CXXCPP $switch"
+ fi
+ ac_success=yes
+ break
+ fi
+ done
+ fi])
+
+ m4_if([$2], [ext], [], [dnl
+ if test x$ac_success = xno; then
+ dnl HP's aCC needs +std=c++11 according to:
+ dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf
+ dnl Cray's crayCC needs "-h std=c++11"
+ for alternative in ${ax_cxx_compile_alternatives}; do
+ for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do
+ cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
+ AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
+ $cachevar,
+ [ac_save_CXX="$CXX"
+ CXX="$CXX $switch"
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
+ [eval $cachevar=yes],
+ [eval $cachevar=no])
+ CXX="$ac_save_CXX"])
+ if eval test x\$$cachevar = xyes; then
+ CXX="$CXX $switch"
+ if test -n "$CXXCPP" ; then
+ CXXCPP="$CXXCPP $switch"
+ fi
+ ac_success=yes
+ break
+ fi
+ done
+ if test x$ac_success = xyes; then
+ break
+ fi
+ done
+ fi])
+ AC_LANG_POP([C++])
+ if test x$ax_cxx_compile_cxx$1_required = xtrue; then
+ if test x$ac_success = xno; then
+ AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.])
+ fi
+ fi
+ if test x$ac_success = xno; then
+ HAVE_CXX$1=0
+ AC_MSG_NOTICE([No compiler with C++$1 support was found])
+ else
+ HAVE_CXX$1=1
+ AC_DEFINE(HAVE_CXX$1,1,
+ [define if the compiler supports basic C++$1 syntax])
+ fi
+ AC_SUBST(HAVE_CXX$1)
+])
+
+
+dnl Test body for checking C++11 support
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11],
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
+)
+
+dnl Test body for checking C++14 support
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14],
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
+)
+
+dnl Test body for checking C++17 support
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17],
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_17
+)
+
+dnl Test body for checking C++20 support
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_20],
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_17
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_20
+)
+
+
+dnl Tests for new features in C++11
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[
+
+// If the compiler admits that it is not ready for C++11, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+// MSVC always sets __cplusplus to 199711L in older versions; newer versions
+// only set it correctly if /Zc:__cplusplus is specified as well as a
+// /std:c++NN switch:
+// https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
+#elif __cplusplus < 201103L && !defined _MSC_VER
+
+#error "This is not a C++11 compiler"
+
+#else
+
+namespace cxx11
+{
+
+ namespace test_static_assert
+ {
+
+ template <typename T>
+ struct check
+ {
+ static_assert(sizeof(int) <= sizeof(T), "not big enough");
+ };
+
+ }
+
+ namespace test_final_override
+ {
+
+ struct Base
+ {
+ virtual ~Base() {}
+ virtual void f() {}
+ };
+
+ struct Derived : public Base
+ {
+ virtual ~Derived() override {}
+ virtual void f() override {}
+ };
+
+ }
+
+ namespace test_double_right_angle_brackets
+ {
+
+ template < typename T >
+ struct check {};
+
+ typedef check<void> single_type;
+ typedef check<check<void>> double_type;
+ typedef check<check<check<void>>> triple_type;
+ typedef check<check<check<check<void>>>> quadruple_type;
+
+ }
+
+ namespace test_decltype
+ {
+
+ int
+ f()
+ {
+ int a = 1;
+ decltype(a) b = 2;
+ return a + b;
+ }
+
+ }
+
+ namespace test_type_deduction
+ {
+
+ template < typename T1, typename T2 >
+ struct is_same
+ {
+ static const bool value = false;
+ };
+
+ template < typename T >
+ struct is_same<T, T>
+ {
+ static const bool value = true;
+ };
+
+ template < typename T1, typename T2 >
+ auto
+ add(T1 a1, T2 a2) -> decltype(a1 + a2)
+ {
+ return a1 + a2;
+ }
+
+ int
+ test(const int c, volatile int v)
+ {
+ static_assert(is_same<int, decltype(0)>::value == true, "");
+ static_assert(is_same<int, decltype(c)>::value == false, "");
+ static_assert(is_same<int, decltype(v)>::value == false, "");
+ auto ac = c;
+ auto av = v;
+ auto sumi = ac + av + 'x';
+ auto sumf = ac + av + 1.0;
+ static_assert(is_same<int, decltype(ac)>::value == true, "");
+ static_assert(is_same<int, decltype(av)>::value == true, "");
+ static_assert(is_same<int, decltype(sumi)>::value == true, "");
+ static_assert(is_same<int, decltype(sumf)>::value == false, "");
+ static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
+ return (sumf > 0.0) ? sumi : add(c, v);
+ }
+
+ }
+
+ namespace test_noexcept
+ {
+
+ int f() { return 0; }
+ int g() noexcept { return 0; }
+
+ static_assert(noexcept(f()) == false, "");
+ static_assert(noexcept(g()) == true, "");
+
+ }
+
+ namespace test_constexpr
+ {
+
+ template < typename CharT >
+ unsigned long constexpr
+ strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
+ {
+ return *s ? strlen_c_r(s + 1, acc + 1) : acc;
+ }
+
+ template < typename CharT >
+ unsigned long constexpr
+ strlen_c(const CharT *const s) noexcept
+ {
+ return strlen_c_r(s, 0UL);
+ }
+
+ static_assert(strlen_c("") == 0UL, "");
+ static_assert(strlen_c("1") == 1UL, "");
+ static_assert(strlen_c("example") == 7UL, "");
+ static_assert(strlen_c("another\0example") == 7UL, "");
+
+ }
+
+ namespace test_rvalue_references
+ {
+
+ template < int N >
+ struct answer
+ {
+ static constexpr int value = N;
+ };
+
+ answer<1> f(int&) { return answer<1>(); }
+ answer<2> f(const int&) { return answer<2>(); }
+ answer<3> f(int&&) { return answer<3>(); }
+
+ void
+ test()
+ {
+ int i = 0;
+ const int c = 0;
+ static_assert(decltype(f(i))::value == 1, "");
+ static_assert(decltype(f(c))::value == 2, "");
+ static_assert(decltype(f(0))::value == 3, "");
+ }
+
+ }
+
+ namespace test_uniform_initialization
+ {
+
+ struct test
+ {
+ static const int zero {};
+ static const int one {1};
+ };
+
+ static_assert(test::zero == 0, "");
+ static_assert(test::one == 1, "");
+
+ }
+
+ namespace test_lambdas
+ {
+
+ void
+ test1()
+ {
+ auto lambda1 = [](){};
+ auto lambda2 = lambda1;
+ lambda1();
+ lambda2();
+ }
+
+ int
+ test2()
+ {
+ auto a = [](int i, int j){ return i + j; }(1, 2);
+ auto b = []() -> int { return '0'; }();
+ auto c = [=](){ return a + b; }();
+ auto d = [&](){ return c; }();
+ auto e = [a, &b](int x) mutable {
+ const auto identity = [](int y){ return y; };
+ for (auto i = 0; i < a; ++i)
+ a += b--;
+ return x + identity(a + b);
+ }(0);
+ return a + b + c + d + e;
+ }
+
+ int
+ test3()
+ {
+ const auto nullary = [](){ return 0; };
+ const auto unary = [](int x){ return x; };
+ using nullary_t = decltype(nullary);
+ using unary_t = decltype(unary);
+ const auto higher1st = [](nullary_t f){ return f(); };
+ const auto higher2nd = [unary](nullary_t f1){
+ return [unary, f1](unary_t f2){ return f2(unary(f1())); };
+ };
+ return higher1st(nullary) + higher2nd(nullary)(unary);
+ }
+
+ }
+
+ namespace test_variadic_templates
+ {
+
+ template <int...>
+ struct sum;
+
+ template <int N0, int... N1toN>
+ struct sum<N0, N1toN...>
+ {
+ static constexpr auto value = N0 + sum<N1toN...>::value;
+ };
+
+ template <>
+ struct sum<>
+ {
+ static constexpr auto value = 0;
+ };
+
+ static_assert(sum<>::value == 0, "");
+ static_assert(sum<1>::value == 1, "");
+ static_assert(sum<23>::value == 23, "");
+ static_assert(sum<1, 2>::value == 3, "");
+ static_assert(sum<5, 5, 11>::value == 21, "");
+ static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
+
+ }
+
+ // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
+ // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
+ // because of this.
+ namespace test_template_alias_sfinae
+ {
+
+ struct foo {};
+
+ template<typename T>
+ using member = typename T::member_type;
+
+ template<typename T>
+ void func(...) {}
+
+ template<typename T>
+ void func(member<T>*) {}
+
+ void test();
+
+ void test() { func<foo>(0); }
+
+ }
+
+} // namespace cxx11
+
+#endif // __cplusplus >= 201103L
+
+]])
+
+
+dnl Tests for new features in C++14
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[
+
+// If the compiler admits that it is not ready for C++14, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201402L && !defined _MSC_VER
+
+#error "This is not a C++14 compiler"
+
+#else
+
+namespace cxx14
+{
+
+ namespace test_polymorphic_lambdas
+ {
+
+ int
+ test()
+ {
+ const auto lambda = [](auto&&... args){
+ const auto istiny = [](auto x){
+ return (sizeof(x) == 1UL) ? 1 : 0;
+ };
+ const int aretiny[] = { istiny(args)... };
+ return aretiny[0];
+ };
+ return lambda(1, 1L, 1.0f, '1');
+ }
+
+ }
+
+ namespace test_binary_literals
+ {
+
+ constexpr auto ivii = 0b0000000000101010;
+ static_assert(ivii == 42, "wrong value");
+
+ }
+
+ namespace test_generalized_constexpr
+ {
+
+ template < typename CharT >
+ constexpr unsigned long
+ strlen_c(const CharT *const s) noexcept
+ {
+ auto length = 0UL;
+ for (auto p = s; *p; ++p)
+ ++length;
+ return length;
+ }
+
+ static_assert(strlen_c("") == 0UL, "");
+ static_assert(strlen_c("x") == 1UL, "");
+ static_assert(strlen_c("test") == 4UL, "");
+ static_assert(strlen_c("another\0test") == 7UL, "");
+
+ }
+
+ namespace test_lambda_init_capture
+ {
+
+ int
+ test()
+ {
+ auto x = 0;
+ const auto lambda1 = [a = x](int b){ return a + b; };
+ const auto lambda2 = [a = lambda1(x)](){ return a; };
+ return lambda2();
+ }
+
+ }
+
+ namespace test_digit_separators
+ {
+
+ constexpr auto ten_million = 100'000'000;
+ static_assert(ten_million == 100000000, "");
+
+ }
+
+ namespace test_return_type_deduction
+ {
+
+ auto f(int& x) { return x; }
+ decltype(auto) g(int& x) { return x; }
+
+ template < typename T1, typename T2 >
+ struct is_same
+ {
+ static constexpr auto value = false;
+ };
+
+ template < typename T >
+ struct is_same<T, T>
+ {
+ static constexpr auto value = true;
+ };
+
+ int
+ test()
+ {
+ auto x = 0;
+ static_assert(is_same<int, decltype(f(x))>::value, "");
+ static_assert(is_same<int&, decltype(g(x))>::value, "");
+ return x;
+ }
+
+ }
+
+} // namespace cxx14
+
+#endif // __cplusplus >= 201402L
+
+]])
+
+
+dnl Tests for new features in C++17
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[
+
+// If the compiler admits that it is not ready for C++17, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 201703L && !defined _MSC_VER
+
+#error "This is not a C++17 compiler"
+
+#else
+
+#include <initializer_list>
+#include <utility>
+#include <type_traits>
+
+namespace cxx17
+{
+
+ namespace test_constexpr_lambdas
+ {
+
+ constexpr int foo = [](){return 42;}();
+
+ }
+
+ namespace test::nested_namespace::definitions
+ {
+
+ }
+
+ namespace test_fold_expression
+ {
+
+ template<typename... Args>
+ int multiply(Args... args)
+ {
+ return (args * ... * 1);
+ }
+
+ template<typename... Args>
+ bool all(Args... args)
+ {
+ return (args && ...);
+ }
+
+ }
+
+ namespace test_extended_static_assert
+ {
+
+ static_assert (true);
+
+ }
+
+ namespace test_auto_brace_init_list
+ {
+
+ auto foo = {5};
+ auto bar {5};
+
+ static_assert(std::is_same<std::initializer_list<int>, decltype(foo)>::value);
+ static_assert(std::is_same<int, decltype(bar)>::value);
+ }
+
+ namespace test_typename_in_template_template_parameter
+ {
+
+ template<template<typename> typename X> struct D;
+
+ }
+
+ namespace test_fallthrough_nodiscard_maybe_unused_attributes
+ {
+
+ int f1()
+ {
+ return 42;
+ }
+
+ [[nodiscard]] int f2()
+ {
+ [[maybe_unused]] auto unused = f1();
+
+ switch (f1())
+ {
+ case 17:
+ f1();
+ [[fallthrough]];
+ case 42:
+ f1();
+ }
+ return f1();
+ }
+
+ }
+
+ namespace test_extended_aggregate_initialization
+ {
+
+ struct base1
+ {
+ int b1, b2 = 42;
+ };
+
+ struct base2
+ {
+ base2() {
+ b3 = 42;
+ }
+ int b3;
+ };
+
+ struct derived : base1, base2
+ {
+ int d;
+ };
+
+ derived d1 {{1, 2}, {}, 4}; // full initialization
+ derived d2 {{}, {}, 4}; // value-initialized bases
+
+ }
+
+ namespace test_general_range_based_for_loop
+ {
+
+ struct iter
+ {
+ int i;
+
+ int& operator* ()
+ {
+ return i;
+ }
+
+ const int& operator* () const
+ {
+ return i;
+ }
+
+ iter& operator++()
+ {
+ ++i;
+ return *this;
+ }
+ };
+
+ struct sentinel
+ {
+ int i;
+ };
+
+ bool operator== (const iter& i, const sentinel& s)
+ {
+ return i.i == s.i;
+ }
+
+ bool operator!= (const iter& i, const sentinel& s)
+ {
+ return !(i == s);
+ }
+
+ struct range
+ {
+ iter begin() const
+ {
+ return {0};
+ }
+
+ sentinel end() const
+ {
+ return {5};
+ }
+ };
+
+ void f()
+ {
+ range r {};
+
+ for (auto i : r)
+ {
+ [[maybe_unused]] auto v = i;
+ }
+ }
+
+ }
+
+ namespace test_lambda_capture_asterisk_this_by_value
+ {
+
+ struct t
+ {
+ int i;
+ int foo()
+ {
+ return [*this]()
+ {
+ return i;
+ }();
+ }
+ };
+
+ }
+
+ namespace test_enum_class_construction
+ {
+
+ enum class byte : unsigned char
+ {};
+
+ byte foo {42};
+
+ }
+
+ namespace test_constexpr_if
+ {
+
+ template <bool cond>
+ int f ()
+ {
+ if constexpr(cond)
+ {
+ return 13;
+ }
+ else
+ {
+ return 42;
+ }
+ }
+
+ }
+
+ namespace test_selection_statement_with_initializer
+ {
+
+ int f()
+ {
+ return 13;
+ }
+
+ int f2()
+ {
+ if (auto i = f(); i > 0)
+ {
+ return 3;
+ }
+
+ switch (auto i = f(); i + 4)
+ {
+ case 17:
+ return 2;
+
+ default:
+ return 1;
+ }
+ }
+
+ }
+
+ namespace test_template_argument_deduction_for_class_templates
+ {
+
+ template <typename T1, typename T2>
+ struct pair
+ {
+ pair (T1 p1, T2 p2)
+ : m1 {p1},
+ m2 {p2}
+ {}
+
+ T1 m1;
+ T2 m2;
+ };
+
+ void f()
+ {
+ [[maybe_unused]] auto p = pair{13, 42u};
+ }
+
+ }
+
+ namespace test_non_type_auto_template_parameters
+ {
+
+ template <auto n>
+ struct B
+ {};
+
+ B<5> b1;
+ B<'a'> b2;
+
+ }
+
+ namespace test_structured_bindings
+ {
+
+ int arr[2] = { 1, 2 };
+ std::pair<int, int> pr = { 1, 2 };
+
+ auto f1() -> int(&)[2]
+ {
+ return arr;
+ }
+
+ auto f2() -> std::pair<int, int>&
+ {
+ return pr;
+ }
+
+ struct S
+ {
+ int x1 : 2;
+ volatile double y1;
+ };
+
+ S f3()
+ {
+ return {};
+ }
+
+ auto [ x1, y1 ] = f1();
+ auto& [ xr1, yr1 ] = f1();
+ auto [ x2, y2 ] = f2();
+ auto& [ xr2, yr2 ] = f2();
+ const auto [ x3, y3 ] = f3();
+
+ }
+
+ namespace test_exception_spec_type_system
+ {
+
+ struct Good {};
+ struct Bad {};
+
+ void g1() noexcept;
+ void g2();
+
+ template<typename T>
+ Bad
+ f(T*, T*);
+
+ template<typename T1, typename T2>
+ Good
+ f(T1*, T2*);
+
+ static_assert (std::is_same_v<Good, decltype(f(g1, g2))>);
+
+ }
+
+ namespace test_inline_variables
+ {
+
+ template<class T> void f(T)
+ {}
+
+ template<class T> inline T g(T)
+ {
+ return T{};
+ }
+
+ template<> inline void f<>(int)
+ {}
+
+ template<> int g<>(int)
+ {
+ return 5;
+ }
+
+ }
+
+} // namespace cxx17
+
+#endif // __cplusplus < 201703L && !defined _MSC_VER
+
+]])
+
+
+dnl Tests for new features in C++20
+
+m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_20], [[
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+#elif __cplusplus < 202002L && !defined _MSC_VER
+
+#error "This is not a C++20 compiler"
+
+#else
+
+#include <version>
+
+namespace cxx20
+{
+
+// As C++20 supports feature test macros in the standard, there is no
+// immediate need to actually test for feature availability on the
+// Autoconf side.
+
+} // namespace cxx20
+
+#endif // __cplusplus < 202002L && !defined _MSC_VER
+
+]])
diff --git a/m4/ax_cxx_compile_stdcxx_11.m4 b/m4/ax_cxx_compile_stdcxx_11.m4
index 229de30..1733fd8 100644
--- a/m4/ax_cxx_compile_stdcxx_11.m4
+++ b/m4/ax_cxx_compile_stdcxx_11.m4
@@ -1,26 +1,23 @@
-# ============================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html
-# ============================================================================
+# =============================================================================
+# https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html
+# =============================================================================
#
# SYNOPSIS
#
-# AX_CXX_COMPILE_STDCXX_11([ext|noext],[mandatory|optional])
+# AX_CXX_COMPILE_STDCXX_11([ext|noext], [mandatory|optional])
#
# DESCRIPTION
#
# Check for baseline language coverage in the compiler for the C++11
-# standard; if necessary, add switches to CXXFLAGS to enable support.
+# standard; if necessary, add switches to CXX and CXXCPP to enable
+# support.
#
-# The first argument, if specified, indicates whether you insist on an
-# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
-# -std=c++11). If neither is specified, you get whatever works, with
-# preference for an extended mode.
-#
-# The second argument, if specified 'mandatory' or if left unspecified,
-# indicates that baseline C++11 support is required and that the macro
-# should error out if no mode with that support is found. If specified
-# 'optional', then configuration proceeds regardless, after defining
-# HAVE_CXX11 if and only if a supporting mode is found.
+# This macro is a convenience alias for calling the AX_CXX_COMPILE_STDCXX
+# macro with the version set to C++11. The two optional arguments are
+# forwarded literally as the second and third argument respectively.
+# Please see the documentation for the AX_CXX_COMPILE_STDCXX macro for
+# more information. If you want to use this macro, you also need to
+# download the ax_cxx_compile_stdcxx.m4 file.
#
# LICENSE
#
@@ -28,136 +25,15 @@
# Copyright (c) 2012 Zack Weinberg <zackw@panix.com>
# Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu>
# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com>
+# Copyright (c) 2015 Paul Norman <penorman@mac.com>
+# Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu>
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved. This file is offered as-is, without any
# warranty.
-#serial 9
-
-m4_define([_AX_CXX_COMPILE_STDCXX_11_testbody], [[
- template <typename T>
- struct check
- {
- static_assert(sizeof(int) <= sizeof(T), "not big enough");
- };
-
- struct Base {
- virtual void f() {}
- };
- struct Child : public Base {
- virtual void f() override {}
- };
-
- typedef check<check<bool>> right_angle_brackets;
-
- int a;
- decltype(a) b;
-
- typedef check<int> check_type;
- check_type c;
- check_type&& cr = static_cast<check_type&&>(c);
-
- auto d = a;
- auto l = [](){};
-
- // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
- // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function because of this
- namespace test_template_alias_sfinae {
- struct foo {};
-
- template<typename T>
- using member = typename T::member_type;
-
- template<typename T>
- void func(...) {}
-
- template<typename T>
- void func(member<T>*) {}
-
- void test();
-
- void test() {
- func<foo>(0);
- }
- }
-]])
-
-AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [dnl
- m4_if([$1], [], [],
- [$1], [ext], [],
- [$1], [noext], [],
- [m4_fatal([invalid argument `$1' to AX_CXX_COMPILE_STDCXX_11])])dnl
- m4_if([$2], [], [ax_cxx_compile_cxx11_required=true],
- [$2], [mandatory], [ax_cxx_compile_cxx11_required=true],
- [$2], [optional], [ax_cxx_compile_cxx11_required=false],
- [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX_11])])
- AC_LANG_PUSH([C++])dnl
- ac_success=no
- AC_CACHE_CHECK(whether $CXX supports C++11 features by default,
- ax_cv_cxx_compile_cxx11,
- [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
- [ax_cv_cxx_compile_cxx11=yes],
- [ax_cv_cxx_compile_cxx11=no])])
- if test x$ax_cv_cxx_compile_cxx11 = xyes; then
- ac_success=yes
- fi
-
- m4_if([$1], [noext], [], [dnl
- if test x$ac_success = xno; then
- for switch in -std=gnu++11 -std=gnu++0x; do
- cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
- AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
- $cachevar,
- [ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS $switch"
- AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
- [eval $cachevar=yes],
- [eval $cachevar=no])
- CXXFLAGS="$ac_save_CXXFLAGS"])
- if eval test x\$$cachevar = xyes; then
- CXXFLAGS="$CXXFLAGS $switch"
- ac_success=yes
- break
- fi
- done
- fi])
-
- m4_if([$1], [ext], [], [dnl
- if test x$ac_success = xno; then
- for switch in -std=c++11 -std=c++0x; do
- cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx11_$switch])
- AC_CACHE_CHECK(whether $CXX supports C++11 features with $switch,
- $cachevar,
- [ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS $switch"
- AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_11_testbody])],
- [eval $cachevar=yes],
- [eval $cachevar=no])
- CXXFLAGS="$ac_save_CXXFLAGS"])
- if eval test x\$$cachevar = xyes; then
- CXXFLAGS="$CXXFLAGS $switch"
- ac_success=yes
- break
- fi
- done
- fi])
- AC_LANG_POP([C++])
- if test x$ax_cxx_compile_cxx11_required = xtrue; then
- if test x$ac_success = xno; then
- AC_MSG_ERROR([*** A compiler with support for C++11 language features is required.])
- fi
- else
- if test x$ac_success = xno; then
- HAVE_CXX11=0
- AC_MSG_NOTICE([No compiler with C++11 support was found])
- else
- HAVE_CXX11=1
- AC_DEFINE(HAVE_CXX11,1,
- [define if the compiler supports basic C++11 syntax])
- fi
+#serial 18
- AC_SUBST(HAVE_CXX11)
- fi
-])
+AX_REQUIRE_DEFINED([AX_CXX_COMPILE_STDCXX])
+AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [AX_CXX_COMPILE_STDCXX([11], [$1], [$2])])
diff --git a/m4/ax_pthread.m4 b/m4/ax_pthread.m4
index d383ad5..9f35d13 100644
--- a/m4/ax_pthread.m4
+++ b/m4/ax_pthread.m4
@@ -1,5 +1,5 @@
# ===========================================================================
-# http://www.gnu.org/software/autoconf-archive/ax_pthread.html
+# https://www.gnu.org/software/autoconf-archive/ax_pthread.html
# ===========================================================================
#
# SYNOPSIS
@@ -14,24 +14,28 @@
# flags that are needed. (The user can also force certain compiler
# flags/libs to be tested by setting these environment variables.)
#
-# Also sets PTHREAD_CC to any special C compiler that is needed for
-# multi-threaded programs (defaults to the value of CC otherwise). (This
-# is necessary on AIX to use the special cc_r compiler alias.)
+# Also sets PTHREAD_CC and PTHREAD_CXX to any special C compiler that is
+# needed for multi-threaded programs (defaults to the value of CC
+# respectively CXX otherwise). (This is necessary on e.g. AIX to use the
+# special cc_r/CC_r compiler alias.)
#
# NOTE: You are assumed to not only compile your program with these flags,
-# but also link it with them as well. e.g. you should link with
+# but also to link with them as well. For example, you might link with
# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
+# $PTHREAD_CXX $CXXFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
#
-# If you are only building threads programs, you may wish to use these
+# If you are only building threaded programs, you may wish to use these
# variables in your default LIBS, CFLAGS, and CC:
#
# LIBS="$PTHREAD_LIBS $LIBS"
# CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+# CXXFLAGS="$CXXFLAGS $PTHREAD_CFLAGS"
# CC="$PTHREAD_CC"
+# CXX="$PTHREAD_CXX"
#
# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
-# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
-# (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
+# has a nonstandard name, this macro defines PTHREAD_CREATE_JOINABLE to
+# that name (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
#
# Also HAVE_PTHREAD_PRIO_INHERIT is defined if pthread is found and the
# PTHREAD_PRIO_INHERIT symbol is defined when compiling with
@@ -55,6 +59,7 @@
#
# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
# Copyright (c) 2011 Daniel Richard G. <skunk@iSKUNK.ORG>
+# Copyright (c) 2019 Marc Stevens <marc.stevens@cwi.nl>
#
# This program is free software: you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
@@ -67,7 +72,7 @@
# Public License for more details.
#
# You should have received a copy of the GNU General Public License along
-# with this program. If not, see <http://www.gnu.org/licenses/>.
+# with this program. If not, see <https://www.gnu.org/licenses/>.
#
# As a special exception, the respective Autoconf Macro's copyright owner
# gives unlimited permission to copy, distribute and modify the configure
@@ -82,35 +87,41 @@
# modified version of the Autoconf Macro, you may extend this special
# exception to the GPL to apply to your modified version as well.
-#serial 21
+#serial 31
AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
AC_DEFUN([AX_PTHREAD], [
AC_REQUIRE([AC_CANONICAL_HOST])
+AC_REQUIRE([AC_PROG_CC])
+AC_REQUIRE([AC_PROG_SED])
AC_LANG_PUSH([C])
ax_pthread_ok=no
# We used to check for pthread.h first, but this fails if pthread.h
-# requires special compiler flags (e.g. on True64 or Sequent).
+# requires special compiler flags (e.g. on Tru64 or Sequent).
# It gets checked for in the link test anyway.
# First of all, check if the user has set any of the PTHREAD_LIBS,
# etcetera environment variables, and if threads linking works using
# them:
-if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
- save_CFLAGS="$CFLAGS"
+if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
+ ax_pthread_save_CC="$CC"
+ ax_pthread_save_CFLAGS="$CFLAGS"
+ ax_pthread_save_LIBS="$LIBS"
+ AS_IF([test "x$PTHREAD_CC" != "x"], [CC="$PTHREAD_CC"])
+ AS_IF([test "x$PTHREAD_CXX" != "x"], [CXX="$PTHREAD_CXX"])
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
- save_LIBS="$LIBS"
LIBS="$PTHREAD_LIBS $LIBS"
- AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
- AC_TRY_LINK_FUNC([pthread_join], [ax_pthread_ok=yes])
+ AC_MSG_CHECKING([for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS])
+ AC_LINK_IFELSE([AC_LANG_CALL([], [pthread_join])], [ax_pthread_ok=yes])
AC_MSG_RESULT([$ax_pthread_ok])
- if test x"$ax_pthread_ok" = xno; then
+ if test "x$ax_pthread_ok" = "xno"; then
PTHREAD_LIBS=""
PTHREAD_CFLAGS=""
fi
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
+ CC="$ax_pthread_save_CC"
+ CFLAGS="$ax_pthread_save_CFLAGS"
+ LIBS="$ax_pthread_save_LIBS"
fi
# We must check for the threads library under a number of different
@@ -118,12 +129,14 @@ fi
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
# libraries is broken (non-POSIX).
-# Create a list of thread flags to try. Items starting with a "-" are
-# C compiler flags, and other items are library names, except for "none"
-# which indicates that we try without any flags at all, and "pthread-config"
-# which is a program returning the flags for the Pth emulation library.
+# Create a list of thread flags to try. Items with a "," contain both
+# C compiler flags (before ",") and linker flags (after ","). Other items
+# starting with a "-" are C compiler flags, and remaining items are
+# library names, except for "none" which indicates that we try without
+# any flags at all, and "pthread-config" which is a program returning
+# the flags for the Pth emulation library.
-ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
# The ordering *is* (sometimes) important. Some notes on the
# individual items follow:
@@ -132,82 +145,163 @@ ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mt
# none: in case threads are in libc; should be tried before -Kthread and
# other compiler flags to prevent continual compiler warnings
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
-# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
-# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
-# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
-# -pthreads: Solaris/gcc
-# -mthreads: Mingw32/gcc, Lynx/gcc
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64
+# (Note: HP C rejects this with "bad form for `-t' option")
+# -pthreads: Solaris/gcc (Note: HP C also rejects)
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
-# doesn't hurt to check since this sometimes defines pthreads too;
-# also defines -D_REENTRANT)
-# ... -mt is also the pthreads flag for HP/aCC
+# doesn't hurt to check since this sometimes defines pthreads and
+# -D_REENTRANT too), HP C (must be checked before -lpthread, which
+# is present but should not be used directly; and before -mthreads,
+# because the compiler interprets this as "-mt" + "-hreads")
+# -mthreads: Mingw32/gcc, Lynx/gcc
# pthread: Linux, etcetera
# --thread-safe: KAI C++
# pthread-config: use pthread-config program (for GNU Pth library)
-case ${host_os} in
+case $host_os in
+
+ freebsd*)
+
+ # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+ # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+
+ ax_pthread_flags="-kthread lthread $ax_pthread_flags"
+ ;;
+
+ hpux*)
+
+ # From the cc(1) man page: "[-mt] Sets various -D flags to enable
+ # multi-threading and also sets -lpthread."
+
+ ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
+ ;;
+
+ openedition*)
+
+ # IBM z/OS requires a feature-test macro to be defined in order to
+ # enable POSIX threads at all, so give the user a hint if this is
+ # not set. (We don't define these ourselves, as they can affect
+ # other portions of the system API in unpredictable ways.)
+
+ AC_EGREP_CPP([AX_PTHREAD_ZOS_MISSING],
+ [
+# if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
+ AX_PTHREAD_ZOS_MISSING
+# endif
+ ],
+ [AC_MSG_WARN([IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support.])])
+ ;;
+
solaris*)
# On Solaris (at least, for some versions), libc contains stubbed
# (non-functional) versions of the pthreads routines, so link-based
- # tests will erroneously succeed. (We need to link with -pthreads/-mt/
- # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
- # a function called by this macro, so we could check for that, but
- # who knows whether they'll stub that too in a future libc.) So,
- # we'll just look for -pthreads and -lpthread first:
+ # tests will erroneously succeed. (N.B.: The stubs are missing
+ # pthread_cleanup_push, or rather a function called by this macro,
+ # so we could check for that, but who knows whether they'll stub
+ # that too in a future libc.) So we'll check first for the
+ # standard Solaris way of linking pthreads (-mt -lpthread).
+
+ ax_pthread_flags="-mt,-lpthread pthread $ax_pthread_flags"
+ ;;
+esac
+
+# Are we compiling with Clang?
+
+AC_CACHE_CHECK([whether $CC is Clang],
+ [ax_cv_PTHREAD_CLANG],
+ [ax_cv_PTHREAD_CLANG=no
+ # Note that Autoconf sets GCC=yes for Clang as well as GCC
+ if test "x$GCC" = "xyes"; then
+ AC_EGREP_CPP([AX_PTHREAD_CC_IS_CLANG],
+ [/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
+# if defined(__clang__) && defined(__llvm__)
+ AX_PTHREAD_CC_IS_CLANG
+# endif
+ ],
+ [ax_cv_PTHREAD_CLANG=yes])
+ fi
+ ])
+ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
+
+
+# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
+
+# Note that for GCC and Clang -pthread generally implies -lpthread,
+# except when -nostdlib is passed.
+# This is problematic using libtool to build C++ shared libraries with pthread:
+# [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25460
+# [2] https://bugzilla.redhat.com/show_bug.cgi?id=661333
+# [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468555
+# To solve this, first try -pthread together with -lpthread for GCC
+
+AS_IF([test "x$GCC" = "xyes"],
+ [ax_pthread_flags="-pthread,-lpthread -pthread -pthreads $ax_pthread_flags"])
+
+# Clang takes -pthread (never supported any other flag), but we'll try with -lpthread first
+
+AS_IF([test "x$ax_pthread_clang" = "xyes"],
+ [ax_pthread_flags="-pthread,-lpthread -pthread"])
- ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
+
+# The presence of a feature test macro requesting re-entrant function
+# definitions is, on some systems, a strong hint that pthreads support is
+# correctly enabled
+
+case $host_os in
+ darwin* | hpux* | linux* | osf* | solaris*)
+ ax_pthread_check_macro="_REENTRANT"
;;
- darwin*)
- ax_pthread_flags="-pthread $ax_pthread_flags"
+ aix*)
+ ax_pthread_check_macro="_THREAD_SAFE"
;;
-esac
-# Clang doesn't consider unrecognized options an error unless we specify
-# -Werror. We throw in some extra Clang-specific options to ensure that
-# this doesn't happen for GCC, which also accepts -Werror.
+ *)
+ ax_pthread_check_macro="--"
+ ;;
+esac
+AS_IF([test "x$ax_pthread_check_macro" = "x--"],
+ [ax_pthread_check_cond=0],
+ [ax_pthread_check_cond="!defined($ax_pthread_check_macro)"])
-AC_MSG_CHECKING([if compiler needs -Werror to reject unknown flags])
-save_CFLAGS="$CFLAGS"
-ax_pthread_extra_flags="-Werror"
-CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument"
-AC_COMPILE_IFELSE([AC_LANG_PROGRAM([int foo(void);],[foo()])],
- [AC_MSG_RESULT([yes])],
- [ax_pthread_extra_flags=
- AC_MSG_RESULT([no])])
-CFLAGS="$save_CFLAGS"
-if test x"$ax_pthread_ok" = xno; then
-for flag in $ax_pthread_flags; do
+if test "x$ax_pthread_ok" = "xno"; then
+for ax_pthread_try_flag in $ax_pthread_flags; do
- case $flag in
+ case $ax_pthread_try_flag in
none)
AC_MSG_CHECKING([whether pthreads work without any flags])
;;
+ *,*)
+ PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\1/"`
+ PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\2/"`
+ AC_MSG_CHECKING([whether pthreads work with "$PTHREAD_CFLAGS" and "$PTHREAD_LIBS"])
+ ;;
+
-*)
- AC_MSG_CHECKING([whether pthreads work with $flag])
- PTHREAD_CFLAGS="$flag"
+ AC_MSG_CHECKING([whether pthreads work with $ax_pthread_try_flag])
+ PTHREAD_CFLAGS="$ax_pthread_try_flag"
;;
pthread-config)
AC_CHECK_PROG([ax_pthread_config], [pthread-config], [yes], [no])
- if test x"$ax_pthread_config" = xno; then continue; fi
+ AS_IF([test "x$ax_pthread_config" = "xno"], [continue])
PTHREAD_CFLAGS="`pthread-config --cflags`"
PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
;;
*)
- AC_MSG_CHECKING([for the pthreads library -l$flag])
- PTHREAD_LIBS="-l$flag"
+ AC_MSG_CHECKING([for the pthreads library -l$ax_pthread_try_flag])
+ PTHREAD_LIBS="-l$ax_pthread_try_flag"
;;
esac
- save_LIBS="$LIBS"
- save_CFLAGS="$CFLAGS"
+ ax_pthread_save_CFLAGS="$CFLAGS"
+ ax_pthread_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
LIBS="$PTHREAD_LIBS $LIBS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags"
# Check for various functions. We must include pthread.h,
# since some functions may be macros. (On the Sequent, we
@@ -218,8 +312,18 @@ for flag in $ax_pthread_flags; do
# pthread_cleanup_push because it is one of the few pthread
# functions on Solaris that doesn't have a non-functional libc stub.
# We try pthread_create on general principles.
+
AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>
- static void routine(void *a) { a = 0; }
+# if $ax_pthread_check_cond
+# error "$ax_pthread_check_macro must be defined"
+# endif
+ static void *some_global = NULL;
+ static void routine(void *a)
+ {
+ /* To avoid any unused-parameter or
+ unused-but-set-parameter warning. */
+ some_global = a;
+ }
static void *start_routine(void *a) { return a; }],
[pthread_t th; pthread_attr_t attr;
pthread_create(&th, 0, start_routine, 0);
@@ -227,101 +331,187 @@ for flag in $ax_pthread_flags; do
pthread_attr_init(&attr);
pthread_cleanup_push(routine, 0);
pthread_cleanup_pop(0) /* ; */])],
- [ax_pthread_ok=yes],
- [])
+ [ax_pthread_ok=yes],
+ [])
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
+ CFLAGS="$ax_pthread_save_CFLAGS"
+ LIBS="$ax_pthread_save_LIBS"
AC_MSG_RESULT([$ax_pthread_ok])
- if test "x$ax_pthread_ok" = xyes; then
- break;
- fi
+ AS_IF([test "x$ax_pthread_ok" = "xyes"], [break])
PTHREAD_LIBS=""
PTHREAD_CFLAGS=""
done
fi
+
+# Clang needs special handling, because older versions handle the -pthread
+# option in a rather... idiosyncratic way
+
+if test "x$ax_pthread_clang" = "xyes"; then
+
+ # Clang takes -pthread; it has never supported any other flag
+
+ # (Note 1: This will need to be revisited if a system that Clang
+ # supports has POSIX threads in a separate library. This tends not
+ # to be the way of modern systems, but it's conceivable.)
+
+ # (Note 2: On some systems, notably Darwin, -pthread is not needed
+ # to get POSIX threads support; the API is always present and
+ # active. We could reasonably leave PTHREAD_CFLAGS empty. But
+ # -pthread does define _REENTRANT, and while the Darwin headers
+ # ignore this macro, third-party headers might not.)
+
+ # However, older versions of Clang make a point of warning the user
+ # that, in an invocation where only linking and no compilation is
+ # taking place, the -pthread option has no effect ("argument unused
+ # during compilation"). They expect -pthread to be passed in only
+ # when source code is being compiled.
+ #
+ # Problem is, this is at odds with the way Automake and most other
+ # C build frameworks function, which is that the same flags used in
+ # compilation (CFLAGS) are also used in linking. Many systems
+ # supported by AX_PTHREAD require exactly this for POSIX threads
+ # support, and in fact it is often not straightforward to specify a
+ # flag that is used only in the compilation phase and not in
+ # linking. Such a scenario is extremely rare in practice.
+ #
+ # Even though use of the -pthread flag in linking would only print
+ # a warning, this can be a nuisance for well-run software projects
+ # that build with -Werror. So if the active version of Clang has
+ # this misfeature, we search for an option to squash it.
+
+ AC_CACHE_CHECK([whether Clang needs flag to prevent "argument unused" warning when linking with -pthread],
+ [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG],
+ [ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
+ # Create an alternate version of $ac_link that compiles and
+ # links in two steps (.c -> .o, .o -> exe) instead of one
+ # (.c -> exe), because the warning occurs only in the second
+ # step
+ ax_pthread_save_ac_link="$ac_link"
+ ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
+ ax_pthread_link_step=`AS_ECHO(["$ac_link"]) | sed "$ax_pthread_sed"`
+ ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
+ ax_pthread_save_CFLAGS="$CFLAGS"
+ for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
+ AS_IF([test "x$ax_pthread_try" = "xunknown"], [break])
+ CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
+ ac_link="$ax_pthread_save_ac_link"
+ AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
+ [ac_link="$ax_pthread_2step_ac_link"
+ AC_LINK_IFELSE([AC_LANG_SOURCE([[int main(void){return 0;}]])],
+ [break])
+ ])
+ done
+ ac_link="$ax_pthread_save_ac_link"
+ CFLAGS="$ax_pthread_save_CFLAGS"
+ AS_IF([test "x$ax_pthread_try" = "x"], [ax_pthread_try=no])
+ ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
+ ])
+
+ case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
+ no | unknown) ;;
+ *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
+ esac
+
+fi # $ax_pthread_clang = yes
+
+
+
# Various other checks:
-if test "x$ax_pthread_ok" = xyes; then
- save_LIBS="$LIBS"
- LIBS="$PTHREAD_LIBS $LIBS"
- save_CFLAGS="$CFLAGS"
+if test "x$ax_pthread_ok" = "xyes"; then
+ ax_pthread_save_CFLAGS="$CFLAGS"
+ ax_pthread_save_LIBS="$LIBS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+ LIBS="$PTHREAD_LIBS $LIBS"
# Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
- AC_MSG_CHECKING([for joinable pthread attribute])
- attr_name=unknown
- for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
- AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
- [int attr = $attr; return attr /* ; */])],
- [attr_name=$attr; break],
- [])
- done
- AC_MSG_RESULT([$attr_name])
- if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
- AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE], [$attr_name],
- [Define to necessary symbol if this constant
- uses a non-standard name on your system.])
- fi
-
- AC_MSG_CHECKING([if more special flags are required for pthreads])
- flag=no
- case ${host_os} in
- aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
- osf* | hpux*) flag="-D_REENTRANT";;
- solaris*)
- if test "$GCC" = "yes"; then
- flag="-D_REENTRANT"
- else
- # TODO: What about Clang on Solaris?
- flag="-mt -D_REENTRANT"
- fi
- ;;
- esac
- AC_MSG_RESULT([$flag])
- if test "x$flag" != xno; then
- PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
- fi
+ AC_CACHE_CHECK([for joinable pthread attribute],
+ [ax_cv_PTHREAD_JOINABLE_ATTR],
+ [ax_cv_PTHREAD_JOINABLE_ATTR=unknown
+ for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+ AC_LINK_IFELSE([AC_LANG_PROGRAM([#include <pthread.h>],
+ [int attr = $ax_pthread_attr; return attr /* ; */])],
+ [ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break],
+ [])
+ done
+ ])
+ AS_IF([test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
+ test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
+ test "x$ax_pthread_joinable_attr_defined" != "xyes"],
+ [AC_DEFINE_UNQUOTED([PTHREAD_CREATE_JOINABLE],
+ [$ax_cv_PTHREAD_JOINABLE_ATTR],
+ [Define to necessary symbol if this constant
+ uses a non-standard name on your system.])
+ ax_pthread_joinable_attr_defined=yes
+ ])
+
+ AC_CACHE_CHECK([whether more special flags are required for pthreads],
+ [ax_cv_PTHREAD_SPECIAL_FLAGS],
+ [ax_cv_PTHREAD_SPECIAL_FLAGS=no
+ case $host_os in
+ solaris*)
+ ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
+ ;;
+ esac
+ ])
+ AS_IF([test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
+ test "x$ax_pthread_special_flags_added" != "xyes"],
+ [PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
+ ax_pthread_special_flags_added=yes])
AC_CACHE_CHECK([for PTHREAD_PRIO_INHERIT],
- [ax_cv_PTHREAD_PRIO_INHERIT], [
- AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]],
- [[int i = PTHREAD_PRIO_INHERIT;]])],
- [ax_cv_PTHREAD_PRIO_INHERIT=yes],
- [ax_cv_PTHREAD_PRIO_INHERIT=no])
+ [ax_cv_PTHREAD_PRIO_INHERIT],
+ [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <pthread.h>]],
+ [[int i = PTHREAD_PRIO_INHERIT;
+ return i;]])],
+ [ax_cv_PTHREAD_PRIO_INHERIT=yes],
+ [ax_cv_PTHREAD_PRIO_INHERIT=no])
])
- AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"],
- [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])])
+ AS_IF([test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
+ test "x$ax_pthread_prio_inherit_defined" != "xyes"],
+ [AC_DEFINE([HAVE_PTHREAD_PRIO_INHERIT], [1], [Have PTHREAD_PRIO_INHERIT.])
+ ax_pthread_prio_inherit_defined=yes
+ ])
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
+ CFLAGS="$ax_pthread_save_CFLAGS"
+ LIBS="$ax_pthread_save_LIBS"
# More AIX lossage: compile with *_r variant
- if test "x$GCC" != xyes; then
+ if test "x$GCC" != "xyes"; then
case $host_os in
aix*)
AS_CASE(["x/$CC"],
- [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6],
- [#handle absolute path differently from PATH based program lookup
- AS_CASE(["x$CC"],
- [x/*],
- [AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])],
- [AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])])])
+ [x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6],
+ [#handle absolute path differently from PATH based program lookup
+ AS_CASE(["x$CC"],
+ [x/*],
+ [
+ AS_IF([AS_EXECUTABLE_P([${CC}_r])],[PTHREAD_CC="${CC}_r"])
+ AS_IF([test "x${CXX}" != "x"], [AS_IF([AS_EXECUTABLE_P([${CXX}_r])],[PTHREAD_CXX="${CXX}_r"])])
+ ],
+ [
+ AC_CHECK_PROGS([PTHREAD_CC],[${CC}_r],[$CC])
+ AS_IF([test "x${CXX}" != "x"], [AC_CHECK_PROGS([PTHREAD_CXX],[${CXX}_r],[$CXX])])
+ ]
+ )
+ ])
;;
esac
fi
fi
test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX"
AC_SUBST([PTHREAD_LIBS])
AC_SUBST([PTHREAD_CFLAGS])
AC_SUBST([PTHREAD_CC])
+AC_SUBST([PTHREAD_CXX])
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test x"$ax_pthread_ok" = xyes; then
+if test "x$ax_pthread_ok" = "xyes"; then
ifelse([$1],,[AC_DEFINE([HAVE_PTHREAD],[1],[Define if you have POSIX threads libraries and header files.])],[$1])
:
else
diff --git a/m4/cares-compilers.m4 b/m4/cares-compilers.m4
index 5ae6b90..ffce981 100644
--- a/m4/cares-compilers.m4
+++ b/m4/cares-compilers.m4
@@ -1,6 +1,6 @@
#***************************************************************************
#
-# Copyright (C) 2009 - 2021 by Daniel Stenberg et al
+# Copyright (C) Daniel Stenberg et al
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose and without fee is hereby granted, provided
@@ -12,6 +12,7 @@
# suitability of this software for any purpose. It is provided "as is"
# without express or implied warranty.
#
+# SPDX-License-Identifier: MIT
#***************************************************************************
# File version for 'aclocal' use. Keep it a single number.
@@ -609,12 +610,12 @@ AC_DEFUN([CARES_SET_COMPILER_BASIC_OPTS], [
dnl #147: declaration is incompatible with 'previous one'
dnl #165: too few arguments in function call
dnl #266: function declared implicitly
- tmp_CPPFLAGS="$tmp_CPPFLAGS -we 140,147,165,266"
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -diag-error 140,147,165,266"
dnl Disable some remarks
dnl #279: controlling expression is constant
dnl #981: operands are evaluated in unspecified order
dnl #1469: "cc" clobber ignored
- tmp_CPPFLAGS="$tmp_CPPFLAGS -wd 279,981,1469"
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -diag-disable 279,981,1469"
;;
#
INTEL_WINDOWS_C)
@@ -851,27 +852,13 @@ AC_DEFUN([CARES_SET_COMPILER_WARNING_OPTS], [
#
if test "$want_warnings" = "yes"; then
tmp_CFLAGS="$tmp_CFLAGS -pedantic"
- tmp_CFLAGS="$tmp_CFLAGS -Wall -Wextra"
- tmp_CFLAGS="$tmp_CFLAGS -Wpointer-arith -Wwrite-strings"
- tmp_CFLAGS="$tmp_CFLAGS -Wshadow"
- tmp_CFLAGS="$tmp_CFLAGS -Winline -Wnested-externs"
- tmp_CFLAGS="$tmp_CFLAGS -Wmissing-declarations"
- tmp_CFLAGS="$tmp_CFLAGS -Wmissing-prototypes"
+ tmp_CFLAGS="$tmp_CFLAGS -Winline"
tmp_CFLAGS="$tmp_CFLAGS -Wno-long-long"
- tmp_CFLAGS="$tmp_CFLAGS -Wfloat-equal"
tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar -Wsign-compare"
- tmp_CFLAGS="$tmp_CFLAGS -Wundef"
tmp_CFLAGS="$tmp_CFLAGS -Wno-format-nonliteral"
- tmp_CFLAGS="$tmp_CFLAGS -Wendif-labels -Wstrict-prototypes"
- tmp_CFLAGS="$tmp_CFLAGS -Wdeclaration-after-statement"
- tmp_CFLAGS="$tmp_CFLAGS -Wcast-align"
+ tmp_CFLAGS="$tmp_CFLAGS -Wendif-labels"
tmp_CFLAGS="$tmp_CFLAGS -Wno-system-headers"
tmp_CFLAGS="$tmp_CFLAGS -Wshorten-64-to-32"
- #
- dnl Only clang 1.1 or later
- if test "$compiler_num" -ge "101"; then
- tmp_CFLAGS="$tmp_CFLAGS -Wunused"
- fi
fi
;;
#
@@ -895,25 +882,14 @@ AC_DEFUN([CARES_SET_COMPILER_WARNING_OPTS], [
fi
#
dnl Set of options we believe *ALL* gcc versions support:
- tmp_CFLAGS="$tmp_CFLAGS -Wall -W"
- #
- dnl Only gcc 1.4 or later
- if test "$compiler_num" -ge "104"; then
- tmp_CFLAGS="$tmp_CFLAGS -Wpointer-arith -Wwrite-strings"
- dnl If not cross-compiling with a gcc older than 3.0
- if test "x$cross_compiling" != "xyes" ||
- test "$compiler_num" -ge "300"; then
- tmp_CFLAGS="$tmp_CFLAGS -Wunused -Wshadow"
- fi
- fi
+ tmp_CFLAGS="$tmp_CFLAGS -W"
#
dnl Only gcc 2.7 or later
if test "$compiler_num" -ge "207"; then
- tmp_CFLAGS="$tmp_CFLAGS -Winline -Wnested-externs"
+ tmp_CFLAGS="$tmp_CFLAGS -Winline"
dnl If not cross-compiling with a gcc older than 3.0
if test "x$cross_compiling" != "xyes" ||
test "$compiler_num" -ge "300"; then
- tmp_CFLAGS="$tmp_CFLAGS -Wmissing-declarations"
tmp_CFLAGS="$tmp_CFLAGS -Wmissing-prototypes"
fi
fi
@@ -925,12 +901,7 @@ AC_DEFUN([CARES_SET_COMPILER_WARNING_OPTS], [
#
dnl Only gcc 2.96 or later
if test "$compiler_num" -ge "296"; then
- tmp_CFLAGS="$tmp_CFLAGS -Wfloat-equal"
tmp_CFLAGS="$tmp_CFLAGS -Wno-multichar -Wsign-compare"
- dnl -Wundef used only if gcc is 2.96 or later since we get
- dnl lots of "`_POSIX_C_SOURCE' is not defined" in system
- dnl headers with gcc 2.95.4 on FreeBSD 4.9
- tmp_CFLAGS="$tmp_CFLAGS -Wundef"
fi
#
dnl Only gcc 2.97 or later
@@ -949,12 +920,7 @@ AC_DEFUN([CARES_SET_COMPILER_WARNING_OPTS], [
#
dnl Only gcc 3.3 or later
if test "$compiler_num" -ge "303"; then
- tmp_CFLAGS="$tmp_CFLAGS -Wendif-labels -Wstrict-prototypes"
- fi
- #
- dnl Only gcc 3.4 or later
- if test "$compiler_num" -ge "304"; then
- tmp_CFLAGS="$tmp_CFLAGS -Wdeclaration-after-statement"
+ tmp_CFLAGS="$tmp_CFLAGS -Wendif-labels"
fi
#
dnl Only gcc 4.0 or later
@@ -962,17 +928,12 @@ AC_DEFUN([CARES_SET_COMPILER_WARNING_OPTS], [
tmp_CFLAGS="$tmp_CFLAGS -Wstrict-aliasing=3"
fi
#
- dnl Only gcc 4.2 or later
- if test "$compiler_num" -ge "402"; then
- tmp_CFLAGS="$tmp_CFLAGS -Wcast-align"
- fi
- #
dnl Only gcc 4.3 or later
if test "$compiler_num" -ge "403"; then
tmp_CFLAGS="$tmp_CFLAGS -Wtype-limits -Wold-style-declaration"
tmp_CFLAGS="$tmp_CFLAGS -Wmissing-parameter-type -Wempty-body"
tmp_CFLAGS="$tmp_CFLAGS -Wclobbered -Wignored-qualifiers"
- tmp_CFLAGS="$tmp_CFLAGS -Wconversion -Wno-sign-conversion -Wvla"
+ tmp_CFLAGS="$tmp_CFLAGS -Wno-sign-conversion"
fi
#
dnl Only gcc 4.5 or later
@@ -1024,7 +985,7 @@ AC_DEFUN([CARES_SET_COMPILER_WARNING_OPTS], [
if test "$want_warnings" = "yes"; then
if test "$compiler_num" -gt "600"; then
dnl Show errors, warnings, and remarks
- tmp_CPPFLAGS="$tmp_CPPFLAGS -Wall -w2"
+ tmp_CPPFLAGS="$tmp_CPPFLAGS -w2"
dnl Perform extra compile-time code checking
tmp_CPPFLAGS="$tmp_CPPFLAGS -Wcheck"
dnl Warn on nested comments
@@ -1035,12 +996,8 @@ AC_DEFUN([CARES_SET_COMPILER_WARNING_OPTS], [
tmp_CPPFLAGS="$tmp_CPPFLAGS -Wmissing-prototypes"
dnl Enable warnings for 64-bit portability issues
tmp_CPPFLAGS="$tmp_CPPFLAGS -Wp64"
- dnl Enable warnings for questionable pointer arithmetic
- tmp_CPPFLAGS="$tmp_CPPFLAGS -Wpointer-arith"
dnl Check for function return typw issues
tmp_CPPFLAGS="$tmp_CPPFLAGS -Wreturn-type"
- dnl Warn on variable declarations hiding a previous one
- tmp_CPPFLAGS="$tmp_CPPFLAGS -Wshadow"
dnl Warn when a variable is used before initialized
tmp_CPPFLAGS="$tmp_CPPFLAGS -Wuninitialized"
dnl Warn if a declared function is not used
@@ -1108,9 +1065,7 @@ AC_DEFUN([CARES_SET_COMPILER_WARNING_OPTS], [
#
if test "$want_warnings" = "yes"; then
dnl Activate all warnings
- tmp_CFLAGS="$tmp_CFLAGS -Wall"
- dnl Make string constants be of type const char *
- tmp_CFLAGS="$tmp_CFLAGS -Wwrite-strings"
+ tmp_CFLAGS="$tmp_CFLAGS"
dnl Warn use of unsupported GCC features ignored by TCC
tmp_CFLAGS="$tmp_CFLAGS -Wunsupported"
fi
@@ -1120,7 +1075,7 @@ AC_DEFUN([CARES_SET_COMPILER_WARNING_OPTS], [
#
if test "$want_warnings" = "yes"; then
dnl Issue all warnings
- tmp_CFLAGS="$tmp_CFLAGS -Wall -Wextra"
+ tmp_CFLAGS="$tmp_CFLAGS"
fi
;;
#
diff --git a/m4/cares-confopts.m4 b/m4/cares-confopts.m4
index 78af64b..1a42eb3 100644
--- a/m4/cares-confopts.m4
+++ b/m4/cares-confopts.m4
@@ -1,6 +1,6 @@
#***************************************************************************
#
-# Copyright (C) 2008 - 2013 by Daniel Stenberg et al
+# Copyright (C) Daniel Stenberg et al
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose and without fee is hereby granted, provided
@@ -12,6 +12,7 @@
# suitability of this software for any purpose. It is provided "as is"
# without express or implied warranty.
#
+# SPDX-License-Identifier: MIT
#***************************************************************************
# File version for 'aclocal' use. Keep it a single number.
@@ -228,21 +229,16 @@ AC_DEFUN([CARES_CHECK_OPTION_WARNINGS], [
AC_BEFORE([$0],[CARES_CHECK_OPTION_WERROR])dnl
AC_BEFORE([$0],[XC_CHECK_PROG_CC])dnl
AC_MSG_CHECKING([whether to enable strict compiler warnings])
- OPT_COMPILER_WARNINGS="default"
+ OPT_COMPILER_WARNINGS="yes"
AC_ARG_ENABLE(warnings,
AS_HELP_STRING([--enable-warnings],[Enable strict compiler warnings])
AS_HELP_STRING([--disable-warnings],[Disable strict compiler warnings]),
- OPT_COMPILER_WARNINGS=$enableval)
+ OPT_COMPILER_WARNINGS=yes)
case "$OPT_COMPILER_WARNINGS" in
no)
dnl --disable-warnings option used
want_warnings="no"
;;
- default)
- dnl configure option not specified, so
- dnl use same setting as --enable-debug
- want_warnings="$want_debug"
- ;;
*)
dnl --enable-warnings option used
want_warnings="yes"
diff --git a/m4/cares-functions.m4 b/m4/cares-functions.m4
index 0f3992c..b12ab24 100644
--- a/m4/cares-functions.m4
+++ b/m4/cares-functions.m4
@@ -1,6 +1,6 @@
#***************************************************************************
#
-# Copyright (C) 2008 - 2012 by Daniel Stenberg et al
+# Copyright (C) Daniel Stenberg et al
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose and without fee is hereby granted, provided
@@ -12,6 +12,7 @@
# suitability of this software for any purpose. It is provided "as is"
# without express or implied warranty.
#
+# SPDX-License-Identifier: MIT
#***************************************************************************
# File version for 'aclocal' use. Keep it a single number.
@@ -186,6 +187,24 @@ cares_includes_stropts="\
])
+dnl CARES_INCLUDES_SYS_RANDOM
+dnl -------------------------------------------------
+dnl Set up variable with list of headers that must be
+dnl included when sys/random.h is to be included.
+
+AC_DEFUN([CARES_INCLUDES_SYS_RANDOM], [
+cares_includes_sys_random="\
+/* includes start */
+#ifdef HAVE_SYS_RANDOM_H
+# include <sys/random.h>
+#endif
+/* includes end */"
+ AC_CHECK_HEADERS(
+ sys/random.h,
+ [], [], [$cares_includes_sys_random])
+])
+
+
dnl CARES_INCLUDES_SYS_SOCKET
dnl -------------------------------------------------
dnl Set up variable with list of headers that must be
@@ -1520,6 +1539,90 @@ AC_DEFUN([CARES_CHECK_FUNC_GETHOSTNAME], [
fi
])
+dnl CARES_CHECK_FUNC_GETRANDOM
+dnl -------------------------------------------------
+dnl Verify if getrandom is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable cares_disallow_getrandom, then
+dnl HAVE_GETRANDOM will be defined.
+
+AC_DEFUN([CARES_CHECK_FUNC_GETRANDOM], [
+ AC_REQUIRE([CARES_INCLUDES_SYS_RANDOM])dnl
+ #
+ tst_links_getrandom="unknown"
+ tst_proto_getrandom="unknown"
+ tst_compi_getrandom="unknown"
+ tst_allow_getrandom="unknown"
+ #
+ AC_MSG_CHECKING([if getrandom can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([getrandom])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_getrandom="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_getrandom="no"
+ ])
+ #
+ if test "$tst_links_getrandom" = "yes"; then
+ AC_MSG_CHECKING([if getrandom is prototyped])
+ AC_EGREP_CPP([getrandom],[
+ $cares_includes_sys_random
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_getrandom="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_getrandom="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_getrandom" = "yes"; then
+ AC_MSG_CHECKING([if getrandom is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $cares_includes_sys_random
+ ]],[[
+ if(0 != getrandom(0, 0, 0))
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_getrandom="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_getrandom="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_getrandom" = "yes"; then
+ AC_MSG_CHECKING([if getrandom usage allowed])
+ if test "x$cares_disallow_getrandom" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_getrandom="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_getrandom="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if getrandom might be used])
+ if test "$tst_links_getrandom" = "yes" &&
+ test "$tst_proto_getrandom" = "yes" &&
+ test "$tst_compi_getrandom" = "yes" &&
+ test "$tst_allow_getrandom" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_GETRANDOM, 1,
+ [Define to 1 if you have the getrandom function.])
+ ac_cv_func_getrandom="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_getrandom="no"
+ fi
+])
+
dnl CARES_CHECK_FUNC_GETSERVBYPORT_R
dnl -------------------------------------------------
@@ -3753,3 +3856,88 @@ AC_DEFUN([CARES_CHECK_FUNC_WRITEV], [
ac_cv_func_writev="no"
fi
])
+
+dnl CARES_CHECK_FUNC_ARC4RANDOM_BUF
+dnl -------------------------------------------------
+dnl Verify if arc4random_buf is available, prototyped, and
+dnl can be compiled. If all of these are true, and
+dnl usage has not been previously disallowed with
+dnl shell variable cares_disallow_arc4random_buf, then
+dnl HAVE_ARC4RANDOM_BUF will be defined.
+
+AC_DEFUN([CARES_CHECK_FUNC_ARC4RANDOM_BUF], [
+ AC_REQUIRE([CARES_INCLUDES_STDLIB])dnl
+ #
+ tst_links_arc4random_buf="unknown"
+ tst_proto_arc4random_buf="unknown"
+ tst_compi_arc4random_buf="unknown"
+ tst_allow_arc4random_buf="unknown"
+ #
+ AC_MSG_CHECKING([if arc4random_buf can be linked])
+ AC_LINK_IFELSE([
+ AC_LANG_FUNC_LINK_TRY([arc4random_buf])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_links_arc4random_buf="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_links_arc4random_buf="no"
+ ])
+ #
+ if test "$tst_links_arc4random_buf" = "yes"; then
+ AC_MSG_CHECKING([if arc4random_buf is prototyped])
+ AC_EGREP_CPP([arc4random_buf],[
+ $cares_includes_stdlib
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_proto_arc4random_buf="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_proto_arc4random_buf="no"
+ ])
+ fi
+ #
+ if test "$tst_proto_arc4random_buf" = "yes"; then
+ AC_MSG_CHECKING([if arc4random_buf is compilable])
+ AC_COMPILE_IFELSE([
+ AC_LANG_PROGRAM([[
+ $cares_includes_stdlib
+ ]],[[
+ arc4random_buf(NULL, 0);
+ return 1;
+ ]])
+ ],[
+ AC_MSG_RESULT([yes])
+ tst_compi_arc4random_buf="yes"
+ ],[
+ AC_MSG_RESULT([no])
+ tst_compi_arc4random_buf="no"
+ ])
+ fi
+ #
+ if test "$tst_compi_arc4random_buf" = "yes"; then
+ AC_MSG_CHECKING([if arc4random_buf usage allowed])
+ if test "x$cares_disallow_arc4random_buf" != "xyes"; then
+ AC_MSG_RESULT([yes])
+ tst_allow_arc4random_buf="yes"
+ else
+ AC_MSG_RESULT([no])
+ tst_allow_arc4random_buf="no"
+ fi
+ fi
+ #
+ AC_MSG_CHECKING([if arc4random_buf might be used])
+ if test "$tst_links_arc4random_buf" = "yes" &&
+ test "$tst_proto_arc4random_buf" = "yes" &&
+ test "$tst_compi_arc4random_buf" = "yes" &&
+ test "$tst_allow_arc4random_buf" = "yes"; then
+ AC_MSG_RESULT([yes])
+ AC_DEFINE_UNQUOTED(HAVE_ARC4RANDOM_BUF, 1,
+ [Define to 1 if you have the arc4random_buf function.])
+ ac_cv_func_arc4random_buf="yes"
+ else
+ AC_MSG_RESULT([no])
+ ac_cv_func_arc4random_buf="no"
+ fi
+])
+
diff --git a/m4/cares-reentrant.m4 b/m4/cares-reentrant.m4
index 052326b..2a16fb2 100644
--- a/m4/cares-reentrant.m4
+++ b/m4/cares-reentrant.m4
@@ -1,7 +1,5 @@
#***************************************************************************
-# $Id$
-#
-# Copyright (C) 2008 - 2009 by Daniel Stenberg et al
+# Copyright (C) Daniel Stenberg et al
#
# Permission to use, copy, modify, and distribute this software and its
# documentation for any purpose and without fee is hereby granted, provided
@@ -13,6 +11,7 @@
# suitability of this software for any purpose. It is provided "as is"
# without express or implied warranty.
#
+# SPDX-License-Identifier: MIT
#***************************************************************************
# File version for 'aclocal' use. Keep it a single number.
diff --git a/m4/libtool.m4 b/m4/libtool.m4
index c4c0294..e7b6833 100644
--- a/m4/libtool.m4
+++ b/m4/libtool.m4
@@ -1,6 +1,7 @@
# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
#
-# Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc.
+# Copyright (C) 1996-2001, 2003-2019, 2021-2022 Free Software
+# Foundation, Inc.
# Written by Gordon Matzigkeit, 1996
#
# This file is free software; the Free Software Foundation gives
@@ -31,7 +32,7 @@ m4_define([_LT_COPYING], [dnl
# along with this program. If not, see <http://www.gnu.org/licenses/>.
])
-# serial 58 LT_INIT
+# serial 59 LT_INIT
# LT_PREREQ(VERSION)
@@ -181,6 +182,7 @@ m4_require([_LT_FILEUTILS_DEFAULTS])dnl
m4_require([_LT_CHECK_SHELL_FEATURES])dnl
m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl
m4_require([_LT_CMD_RELOAD])dnl
+m4_require([_LT_DECL_FILECMD])dnl
m4_require([_LT_CHECK_MAGIC_METHOD])dnl
m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl
m4_require([_LT_CMD_OLD_ARCHIVE])dnl
@@ -219,8 +221,8 @@ esac
ofile=libtool
can_build_shared=yes
-# All known linkers require a '.a' archive for static linking (except MSVC,
-# which needs '.lib').
+# All known linkers require a '.a' archive for static linking (except MSVC and
+# ICC, which need '.lib').
libext=a
with_gnu_ld=$lt_cv_prog_gnu_ld
@@ -777,7 +779,7 @@ _LT_EOF
# if finds mixed CR/LF and LF-only lines. Since sed operates in
# text mode, it properly converts lines to CR/LF. This bash problem
# is reportedly fixed, but why not run on old versions too?
- sed '$q' "$ltmain" >> "$cfgfile" \
+ $SED '$q' "$ltmain" >> "$cfgfile" \
|| (rm -f "$cfgfile"; exit 1)
mv -f "$cfgfile" "$ofile" ||
@@ -1041,8 +1043,8 @@ int forced_loaded() { return 2;}
_LT_EOF
echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD
$LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD
- echo "$AR cr libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
- $AR cr libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
+ echo "$AR $AR_FLAGS libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD
+ $AR $AR_FLAGS libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD
echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD
$RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD
cat > conftest.c << _LT_EOF
@@ -1066,17 +1068,12 @@ _LT_EOF
_lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
darwin1.*)
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
- darwin*) # darwin 5.x on
- # if running on 10.5 or later, the deployment target defaults
- # to the OS version, if on x86, and 10.4, the deployment
- # target defaults to 10.4. Don't you love it?
- case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
- 10.0,*86*-darwin8*|10.0,*-darwin[[912]]*)
- _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
- 10.[[012]][[,.]]*)
- _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
- 10.*|11.*)
- _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+ darwin*)
+ case $MACOSX_DEPLOYMENT_TARGET,$host in
+ 10.[[012]],*|,*powerpc*-darwin[[5-8]]*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ *)
+ _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
esac
;;
esac
@@ -1125,12 +1122,12 @@ m4_defun([_LT_DARWIN_LINKER_FEATURES],
output_verbose_link_cmd=func_echo_all
_LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
_LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
- _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
- _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+ _LT_TAGVAR(module_expsym_cmds, $1)="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
m4_if([$1], [CXX],
[ if test yes != "$lt_cv_apple_cc_single_mod"; then
_LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
- _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
+ _LT_TAGVAR(archive_expsym_cmds, $1)="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
fi
],[])
else
@@ -1244,7 +1241,8 @@ _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes])
# _LT_WITH_SYSROOT
# ----------------
AC_DEFUN([_LT_WITH_SYSROOT],
-[AC_MSG_CHECKING([for sysroot])
+[m4_require([_LT_DECL_SED])dnl
+AC_MSG_CHECKING([for sysroot])
AC_ARG_WITH([sysroot],
[AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@],
[Search for dependent libraries within DIR (or the compiler's sysroot
@@ -1261,7 +1259,7 @@ case $with_sysroot in #(
fi
;; #(
/*)
- lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+ lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
;; #(
no|'')
;; #(
@@ -1291,7 +1289,7 @@ ia64-*-hpux*)
# options accordingly.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*ELF-32*)
HPUX_IA64_MODE=32
;;
@@ -1308,7 +1306,7 @@ ia64-*-hpux*)
echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
if test yes = "$lt_cv_prog_gnu_ld"; then
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -melf32bsmip"
;;
@@ -1320,7 +1318,7 @@ ia64-*-hpux*)
;;
esac
else
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -32"
;;
@@ -1342,7 +1340,7 @@ mips64*-*linux*)
echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
emul=elf
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*32-bit*)
emul="${emul}32"
;;
@@ -1350,7 +1348,7 @@ mips64*-*linux*)
emul="${emul}64"
;;
esac
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*MSB*)
emul="${emul}btsmip"
;;
@@ -1358,7 +1356,7 @@ mips64*-*linux*)
emul="${emul}ltsmip"
;;
esac
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*N32*)
emul="${emul}n32"
;;
@@ -1378,14 +1376,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# not appear in the list.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.o` in
+ case `$FILECMD conftest.o` in
*32-bit*)
case $host in
x86_64-*kfreebsd*-gnu)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
- case `/usr/bin/file conftest.o` in
+ case `$FILECMD conftest.o` in
*x86-64*)
LD="${LD-ld} -m elf32_x86_64"
;;
@@ -1453,7 +1451,7 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
# options accordingly.
echo 'int i;' > conftest.$ac_ext
if AC_TRY_EVAL(ac_compile); then
- case `/usr/bin/file conftest.o` in
+ case `$FILECMD conftest.o` in
*64-bit*)
case $lt_cv_prog_gnu_ld in
yes*)
@@ -1492,9 +1490,22 @@ need_locks=$enable_libtool_lock
m4_defun([_LT_PROG_AR],
[AC_CHECK_TOOLS(AR, [ar], false)
: ${AR=ar}
-: ${AR_FLAGS=cr}
_LT_DECL([], [AR], [1], [The archiver])
-_LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive])
+
+# Use ARFLAGS variable as AR's operation code to sync the variable naming with
+# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have
+# higher priority because thats what people were doing historically (setting
+# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS
+# variable obsoleted/removed.
+
+test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr}
+lt_ar_flags=$AR_FLAGS
+_LT_DECL([], [lt_ar_flags], [0], [Flags to create an archive (by configure)])
+
+# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override
+# by AR_FLAGS because that was never working and AR_FLAGS is about to die.
+_LT_DECL([], [AR_FLAGS], [\@S|@{ARFLAGS-"\@S|@lt_ar_flags"}],
+ [Flags to create an archive])
AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file],
[lt_cv_ar_at_file=no
@@ -1713,7 +1724,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
lt_cv_sys_max_cmd_len=8192;
;;
- bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
+ bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*)
# This has been around since 386BSD, at least. Likely further.
if test -x /sbin/sysctl; then
lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
@@ -1756,7 +1767,7 @@ AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
sysv5* | sco5v6* | sysv4.2uw2*)
kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
if test -n "$kargmax"; then
- lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
+ lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[[ ]]//'`
else
lt_cv_sys_max_cmd_len=32768
fi
@@ -2206,26 +2217,35 @@ m4_defun([_LT_CMD_STRIPLIB],
striplib=
old_striplib=
AC_MSG_CHECKING([whether stripping libraries is possible])
-if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
- test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
- test -z "$striplib" && striplib="$STRIP --strip-unneeded"
- AC_MSG_RESULT([yes])
+if test -z "$STRIP"; then
+ AC_MSG_RESULT([no])
else
-# FIXME - insert some real tests, host_os isn't really good enough
- case $host_os in
- darwin*)
- if test -n "$STRIP"; then
+ if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ old_striplib="$STRIP --strip-debug"
+ striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+ else
+ case $host_os in
+ darwin*)
+ # FIXME - insert some real tests, host_os isn't really good enough
striplib="$STRIP -x"
old_striplib="$STRIP -S"
AC_MSG_RESULT([yes])
- else
+ ;;
+ freebsd*)
+ if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then
+ old_striplib="$STRIP --strip-debug"
+ striplib="$STRIP --strip-unneeded"
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ fi
+ ;;
+ *)
AC_MSG_RESULT([no])
- fi
- ;;
- *)
- AC_MSG_RESULT([no])
- ;;
- esac
+ ;;
+ esac
+ fi
fi
_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
_LT_DECL([], [striplib], [1])
@@ -2548,7 +2568,7 @@ cygwin* | mingw* | pw32* | cegcc*)
case $host_os in
cygwin*)
# Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+ soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
m4_if([$1], [],[
sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"])
;;
@@ -2558,14 +2578,14 @@ m4_if([$1], [],[
;;
pw32*)
# pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
+ library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
;;
esac
dynamic_linker='Win32 ld.exe'
;;
- *,cl*)
- # Native MSVC
+ *,cl* | *,icl*)
+ # Native MSVC or ICC
libname_spec='$name'
soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext'
library_names_spec='$libname.dll.lib'
@@ -2584,7 +2604,7 @@ m4_if([$1], [],[
done
IFS=$lt_save_ifs
# Convert to MSYS style.
- sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'`
;;
cygwin*)
# Convert to unix form, then to dos form, then back to unix form
@@ -2621,7 +2641,7 @@ m4_if([$1], [],[
;;
*)
- # Assume MSVC wrapper
+ # Assume MSVC and ICC wrapper
library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib'
dynamic_linker='Win32 ld.exe'
;;
@@ -2654,7 +2674,7 @@ dgux*)
shlibpath_var=LD_LIBRARY_PATH
;;
-freebsd* | dragonfly*)
+freebsd* | dragonfly* | midnightbsd*)
# DragonFly does not have aout. When/if they implement a new
# versioning mechanism, adjust this.
if test -x /usr/bin/objformat; then
@@ -3465,7 +3485,7 @@ beos*)
bsdi[[45]]*)
lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
- lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_cmd='$FILECMD -L'
lt_cv_file_magic_test_file=/shlib/libc.so
;;
@@ -3499,14 +3519,14 @@ darwin* | rhapsody*)
lt_cv_deplibs_check_method=pass_all
;;
-freebsd* | dragonfly*)
+freebsd* | dragonfly* | midnightbsd*)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
case $host_cpu in
i*86 )
# Not sure whether the presence of OpenBSD here was a mistake.
# Let's accept both of them until this is cleared up.
lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
- lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_cmd=$FILECMD
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
;;
esac
@@ -3520,7 +3540,7 @@ haiku*)
;;
hpux10.20* | hpux11*)
- lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_cmd=$FILECMD
case $host_cpu in
ia64*)
lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
@@ -3567,7 +3587,7 @@ netbsd* | netbsdelf*-gnu)
newos6*)
lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
- lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_cmd=$FILECMD
lt_cv_file_magic_test_file=/usr/lib/libnls.so
;;
@@ -3694,13 +3714,13 @@ else
mingw*) lt_bad_file=conftest.nm/nofile ;;
*) lt_bad_file=/dev/null ;;
esac
- case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+ case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in
*$lt_bad_file* | *'Invalid file or object type'*)
lt_cv_path_NM="$tmp_nm -B"
break 2
;;
*)
- case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in
*/dev/null*)
lt_cv_path_NM="$tmp_nm -p"
break 2
@@ -3726,7 +3746,7 @@ else
# Let the user override the test.
else
AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :)
- case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
+ case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in
*COFF*)
DUMPBIN="$DUMPBIN -symbols -headers"
;;
@@ -3966,7 +3986,7 @@ esac
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
# Gets list of data symbols to import.
- lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+ lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'"
# Adjust the below global symbol transforms to fixup imported variables.
lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
@@ -3984,20 +4004,20 @@ fi
# Transform an extracted symbol line into a proper C declaration.
# Some systems (esp. on ia64) link data and code symbols differently,
# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+lt_cv_sys_global_symbol_to_cdecl="$SED -n"\
$lt_cdecl_hook\
" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\
$lt_c_name_hook\
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
# Transform an extracted symbol line into symbol name with lib prefix and
# symbol address.
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\
$lt_c_name_lib_hook\
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
@@ -4021,7 +4041,7 @@ for ac_symprfx in "" "_"; do
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
# Fake it for dumpbin and say T for any non-static function,
# D for any global variable and I for any imported variable.
- # Also find C++ and __fastcall symbols from MSVC++,
+ # Also find C++ and __fastcall symbols from MSVC++ or ICC,
# which start with @ or ?.
lt_cv_sys_global_symbol_pipe="$AWK ['"\
" {last_section=section; section=\$ 3};"\
@@ -4039,9 +4059,9 @@ for ac_symprfx in "" "_"; do
" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
" ' prfx=^$ac_symprfx]"
else
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
fi
- lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'"
# Check to see that the pipe works correctly.
pipe_works=no
@@ -4329,7 +4349,7 @@ m4_if([$1], [CXX], [
;;
esac
;;
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
# FreeBSD uses GNU C++
;;
hpux9* | hpux10* | hpux11*)
@@ -4412,7 +4432,7 @@ m4_if([$1], [CXX], [
_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
;;
*)
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*)
# Sun C++ 5.9
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
@@ -4754,7 +4774,7 @@ m4_if([$1], [CXX], [
_LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
;;
*)
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*)
# Sun Fortran 8.3 passes all unrecognized flags to the linker
_LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
@@ -4937,7 +4957,7 @@ m4_if([$1], [CXX], [
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
_LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
else
- _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+ _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
fi
;;
pw32*)
@@ -4945,7 +4965,7 @@ m4_if([$1], [CXX], [
;;
cygwin* | mingw* | cegcc*)
case $cc_basename in
- cl*)
+ cl* | icl*)
_LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
;;
*)
@@ -5005,15 +5025,15 @@ dnl Note also adjust exclude_expsyms for C++ above.
case $host_os in
cygwin* | mingw* | pw32* | cegcc*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
# When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
+ # Microsoft Visual C++ or Intel C++ Compiler.
if test yes != "$GCC"; then
with_gnu_ld=no
fi
;;
interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++)
+ # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC)
with_gnu_ld=yes
;;
openbsd* | bitrig*)
@@ -5068,7 +5088,7 @@ dnl Note also adjust exclude_expsyms for C++ above.
_LT_TAGVAR(whole_archive_flag_spec, $1)=
fi
supports_anon_versioning=no
- case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
+ case `$LD -v | $SED -e 's/([[^)]]\+)\s\+//' 2>&1` in
*GNU\ gold*) supports_anon_versioning=yes ;;
*\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
*\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
@@ -5180,6 +5200,7 @@ _LT_EOF
emximp -o $lib $output_objdir/$libname.def'
_LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
;;
interix[[3-9]]*)
@@ -5194,7 +5215,7 @@ _LT_EOF
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
;;
gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
@@ -5237,7 +5258,7 @@ _LT_EOF
_LT_TAGVAR(compiler_needs_object, $1)=yes
;;
esac
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*) # Sun C 5.9
_LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
_LT_TAGVAR(compiler_needs_object, $1)=yes
@@ -5249,13 +5270,14 @@ _LT_EOF
if test yes = "$supports_anon_versioning"; then
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
fi
case $cc_basename in
tcc*)
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
_LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic'
;;
xlf* | bgf* | bgxlf* | mpixlf*)
@@ -5265,7 +5287,7 @@ _LT_EOF
_LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
if test yes = "$supports_anon_versioning"; then
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
fi
@@ -5397,7 +5419,7 @@ _LT_EOF
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
_LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
else
- _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+ _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
fi
aix_use_runtimelinking=no
@@ -5580,12 +5602,12 @@ _LT_EOF
cygwin* | mingw* | pw32* | cegcc*)
# When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
+ # Microsoft Visual C++ or Intel C++ Compiler.
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
case $cc_basename in
- cl*)
- # Native MSVC
+ cl* | icl*)
+ # Native MSVC or ICC
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
_LT_TAGVAR(always_export_symbols, $1)=yes
@@ -5626,7 +5648,7 @@ _LT_EOF
fi'
;;
*)
- # Assume MSVC wrapper
+ # Assume MSVC and ICC wrapper
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
_LT_TAGVAR(allow_undefined_flag, $1)=unsupported
# Tell ltmain to make .lib files, not .a files.
@@ -5674,7 +5696,7 @@ _LT_EOF
;;
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
_LT_TAGVAR(hardcode_direct, $1)=yes
@@ -5815,6 +5837,7 @@ _LT_EOF
# Fabrice Bellard et al's Tiny C Compiler
_LT_TAGVAR(ld_shlibs, $1)=yes
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir'
;;
esac
;;
@@ -5886,6 +5909,7 @@ _LT_EOF
emximp -o $lib $output_objdir/$libname.def'
_LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
;;
osf3*)
@@ -6656,8 +6680,8 @@ if test yes != "$_lt_caught_CXX_error"; then
cygwin* | mingw* | pw32* | cegcc*)
case $GXX,$cc_basename in
- ,cl* | no,cl*)
- # Native MSVC
+ ,cl* | no,cl* | ,icl* | no,icl*)
+ # Native MSVC or ICC
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
@@ -6755,6 +6779,7 @@ if test yes != "$_lt_caught_CXX_error"; then
emximp -o $lib $output_objdir/$libname.def'
_LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
+ _LT_TAGVAR(file_list_spec, $1)='@'
;;
dgux*)
@@ -6785,7 +6810,7 @@ if test yes != "$_lt_caught_CXX_error"; then
_LT_TAGVAR(archive_cmds_need_lc, $1)=no
;;
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
# FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
# conventions
_LT_TAGVAR(ld_shlibs, $1)=yes
@@ -6922,7 +6947,7 @@ if test yes != "$_lt_caught_CXX_error"; then
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
_LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ _LT_TAGVAR(archive_expsym_cmds, $1)='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
;;
irix5* | irix6*)
case $cc_basename in
@@ -7062,13 +7087,13 @@ if test yes != "$_lt_caught_CXX_error"; then
_LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
if test yes = "$supports_anon_versioning"; then
_LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
fi
;;
*)
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*)
# Sun C++ 5.9
_LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
@@ -8214,6 +8239,14 @@ _LT_DECL([], [DLLTOOL], [1], [DLL creation program])
AC_SUBST([DLLTOOL])
])
+# _LT_DECL_FILECMD
+# ----------------
+# Check for a file(cmd) program that can be used to detect file type and magic
+m4_defun([_LT_DECL_FILECMD],
+[AC_CHECK_TOOL([FILECMD], [file], [:])
+_LT_DECL([], [FILECMD], [1], [A file(cmd) program that detects file types])
+])# _LD_DECL_FILECMD
+
# _LT_DECL_SED
# ------------
# Check for a fully-functional sed program, that truncates
diff --git a/m4/ltoptions.m4 b/m4/ltoptions.m4
index 94b0829..b0b5e9c 100644
--- a/m4/ltoptions.m4
+++ b/m4/ltoptions.m4
@@ -1,7 +1,7 @@
# Helper functions for option handling. -*- Autoconf -*-
#
-# Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software
-# Foundation, Inc.
+# Copyright (C) 2004-2005, 2007-2009, 2011-2019, 2021-2022 Free
+# Software Foundation, Inc.
# Written by Gary V. Vaughan, 2004
#
# This file is free software; the Free Software Foundation gives
diff --git a/m4/ltsugar.m4 b/m4/ltsugar.m4
index 48bc934..902508b 100644
--- a/m4/ltsugar.m4
+++ b/m4/ltsugar.m4
@@ -1,6 +1,6 @@
# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
#
-# Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software
+# Copyright (C) 2004-2005, 2007-2008, 2011-2019, 2021-2022 Free Software
# Foundation, Inc.
# Written by Gary V. Vaughan, 2004
#
diff --git a/m4/ltversion.m4 b/m4/ltversion.m4
index fa04b52..b155d0a 100644
--- a/m4/ltversion.m4
+++ b/m4/ltversion.m4
@@ -1,6 +1,7 @@
# ltversion.m4 -- version numbers -*- Autoconf -*-
#
-# Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc.
+# Copyright (C) 2004, 2011-2019, 2021-2022 Free Software Foundation,
+# Inc.
# Written by Scott James Remnant, 2004
#
# This file is free software; the Free Software Foundation gives
@@ -9,15 +10,15 @@
# @configure_input@
-# serial 4179 ltversion.m4
+# serial 4245 ltversion.m4
# This file is part of GNU Libtool
-m4_define([LT_PACKAGE_VERSION], [2.4.6])
-m4_define([LT_PACKAGE_REVISION], [2.4.6])
+m4_define([LT_PACKAGE_VERSION], [2.4.7])
+m4_define([LT_PACKAGE_REVISION], [2.4.7])
AC_DEFUN([LTVERSION_VERSION],
-[macro_version='2.4.6'
-macro_revision='2.4.6'
+[macro_version='2.4.7'
+macro_revision='2.4.7'
_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
_LT_DECL(, macro_revision, 0)
])
diff --git a/m4/lt~obsolete.m4 b/m4/lt~obsolete.m4
index c6b26f8..0f7a875 100644
--- a/m4/lt~obsolete.m4
+++ b/m4/lt~obsolete.m4
@@ -1,7 +1,7 @@
# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
#
-# Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software
-# Foundation, Inc.
+# Copyright (C) 2004-2005, 2007, 2009, 2011-2019, 2021-2022 Free
+# Software Foundation, Inc.
# Written by Scott James Remnant, 2004.
#
# This file is free software; the Free Software Foundation gives
diff --git a/m4/xc-am-iface.m4 b/m4/xc-am-iface.m4
index 1571c21..80c53b6 100644
--- a/m4/xc-am-iface.m4
+++ b/m4/xc-am-iface.m4
@@ -2,7 +2,7 @@
#
# xc-am-iface.m4
#
-# Copyright (c) 2013 Daniel Stenberg <daniel@haxx.se>
+# Copyright (c) Daniel Stenberg <daniel@haxx.se>
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -16,6 +16,7 @@
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
+# SPDX-License-Identifier: MIT
#---------------------------------------------------------------------------
# serial 1
diff --git a/m4/xc-cc-check.m4 b/m4/xc-cc-check.m4
index 777decf..cfa201a 100644
--- a/m4/xc-cc-check.m4
+++ b/m4/xc-cc-check.m4
@@ -2,7 +2,7 @@
#
# xc-cc-check.m4
#
-# Copyright (c) 2013 Daniel Stenberg <daniel@haxx.se>
+# Copyright (c) Daniel Stenberg <daniel@haxx.se>
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -16,6 +16,7 @@
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
+# SPDX-License-Identifier: MIT
#---------------------------------------------------------------------------
# serial 1
diff --git a/m4/xc-lt-iface.m4 b/m4/xc-lt-iface.m4
index 0b90d5f..f8a6c12 100644
--- a/m4/xc-lt-iface.m4
+++ b/m4/xc-lt-iface.m4
@@ -2,7 +2,7 @@
#
# xc-lt-iface.m4
#
-# Copyright (c) 2013 Daniel Stenberg <daniel@haxx.se>
+# Copyright (c) Daniel Stenberg <daniel@haxx.se>
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -16,6 +16,8 @@
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
+#
+# SPDX-License-Identifier: MIT
#---------------------------------------------------------------------------
# serial 1
diff --git a/m4/xc-translit.m4 b/m4/xc-translit.m4
index 1918f16..db8ca82 100644
--- a/m4/xc-translit.m4
+++ b/m4/xc-translit.m4
@@ -2,7 +2,7 @@
#
# xc-translit.m4
#
-# Copyright (c) 2011 Daniel Stenberg <daniel@haxx.se>
+# Copyright (c) Daniel Stenberg <daniel@haxx.se>
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -16,6 +16,8 @@
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
+#
+# SPDX-License-Identifier: MIT
#---------------------------------------------------------------------------
# File version for 'aclocal' use. Keep it a single number.
diff --git a/m4/xc-val-flgs.m4 b/m4/xc-val-flgs.m4
index 81d1eac..c9e472e 100644
--- a/m4/xc-val-flgs.m4
+++ b/m4/xc-val-flgs.m4
@@ -2,7 +2,7 @@
#
# xc-val-flgs.m4
#
-# Copyright (c) 2013 Daniel Stenberg <daniel@haxx.se>
+# Copyright (c) Daniel Stenberg <daniel@haxx.se>
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -16,6 +16,8 @@
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
+#
+# SPDX-License-Identifier: MIT
#---------------------------------------------------------------------------
# serial 1
diff --git a/m4/zz40-xc-ovr.m4 b/m4/zz40-xc-ovr.m4
index 0e3b1cb..4183347 100644
--- a/m4/zz40-xc-ovr.m4
+++ b/m4/zz40-xc-ovr.m4
@@ -2,7 +2,7 @@
#
# zz40-xc-ovr.m4
#
-# Copyright (c) 2013 Daniel Stenberg <daniel@haxx.se>
+# Copyright (c) Daniel Stenberg <daniel@haxx.se>
#
# Permission to use, copy, modify, and distribute this software for any
# purpose with or without fee is hereby granted, provided that the above
@@ -16,6 +16,7 @@
# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
+# SPDX-License-Identifier: MIT
#---------------------------------------------------------------------------
# serial 1
diff --git a/maketgz b/maketgz
index ec1ecea..aa1241f 100755
--- a/maketgz
+++ b/maketgz
@@ -1,4 +1,6 @@
#!/usr/bin/env perl
+# Copyright (C) Daniel Stenberg
+# SPDX-License-Identifier: MIT
$version = $ARGV[0];
diff --git a/msvc_ver.inc b/msvc_ver.inc
index 595cbdf..61bdb59 100644
--- a/msvc_ver.inc
+++ b/msvc_ver.inc
@@ -1,3 +1,5 @@
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
# -----------------------------------------------
# Detect NMAKE version deducing old MSVC versions
# -----------------------------------------------
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 6750c17..b8ea0a1 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -1,2 +1,4 @@
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
ADD_SUBDIRECTORY (lib)
ADD_SUBDIRECTORY (tools)
diff --git a/src/Makefile.am b/src/Makefile.am
index 2e97e42..896dd62 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -1,2 +1,4 @@
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
EXTRA_DIST=CMakeLists.txt
SUBDIRS=lib tools
diff --git a/src/Makefile.in b/src/Makefile.in
index 999e965..7ac8b7c 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -93,8 +93,12 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \
$(top_srcdir)/m4/ax_ac_print_to_file.m4 \
$(top_srcdir)/m4/ax_add_am_macro_static.m4 \
$(top_srcdir)/m4/ax_am_macros_static.m4 \
+ $(top_srcdir)/m4/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4/ax_append_flag.m4 \
+ $(top_srcdir)/m4/ax_check_compile_flag.m4 \
$(top_srcdir)/m4/ax_check_gnu_make.m4 \
$(top_srcdir)/m4/ax_code_coverage.m4 \
+ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
$(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \
$(top_srcdir)/m4/ax_file_escapes.m4 \
$(top_srcdir)/m4/ax_require_defined.m4 \
@@ -245,6 +249,7 @@ EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
+FILECMD = @FILECMD@
GCOV = @GCOV@
GENHTML = @GENHTML@
GREP = @GREP@
@@ -345,6 +350,9 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
EXTRA_DIST = CMakeLists.txt
SUBDIRS = lib tools
all: all-recursive
diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt
index 7d37be2..7cb37f1 100644
--- a/src/lib/CMakeLists.txt
+++ b/src/lib/CMakeLists.txt
@@ -1,3 +1,5 @@
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
# Transform Makefile.inc
transform_makefile_inc("Makefile.inc" "${PROJECT_BINARY_DIR}/src/lib/Makefile.inc.cmake")
@@ -10,6 +12,11 @@ CONFIGURE_FILE (ares_config.h.cmake ${PROJECT_BINARY_DIR}/ares_config.h)
IF (CARES_SHARED)
ADD_LIBRARY (${PROJECT_NAME} SHARED ${CSOURCES})
+ # Include resource file in windows builds for versioned DLLs
+ IF (WIN32)
+ TARGET_SOURCES (${PROJECT_NAME} PRIVATE cares.rc)
+ ENDIF()
+
# Convert CARES_LIB_VERSIONINFO libtool version format into VERSION and SOVERSION
# Convert from ":" separated into CMake list format using ";"
STRING (REPLACE ":" ";" CARES_LIB_VERSIONINFO ${CARES_LIB_VERSIONINFO})
@@ -27,8 +34,16 @@ IF (CARES_SHARED)
COMPILE_PDB_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
SOVERSION ${CARES_LIB_VERSION_MAJOR}
VERSION "${CARES_LIB_VERSION_MAJOR}.${CARES_LIB_VERSION_MINOR}.${CARES_LIB_VERSION_RELEASE}"
+ C_STANDARD 90
)
+ IF (CARES_SYMBOL_HIDING)
+ SET_TARGET_PROPERTIES (${PROJECT_NAME} PROPERTIES
+ C_VISIBILITY_PRESET hidden
+ VISIBILITY_INLINES_HIDDEN YES
+ )
+ ENDIF ()
+
TARGET_INCLUDE_DIRECTORIES (${PROJECT_NAME}
PUBLIC "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>"
"$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>"
@@ -71,6 +86,7 @@ IF (CARES_STATIC)
OUTPUT_NAME cares${STATIC_SUFFIX}
COMPILE_PDB_NAME cares${STATIC_SUFFIX}
COMPILE_PDB_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}
+ C_STANDARD 90
)
IF (CARES_STATIC_PIC)
diff --git a/src/lib/Makefile.am b/src/lib/Makefile.am
index 4813621..998996b 100644
--- a/src/lib/Makefile.am
+++ b/src/lib/Makefile.am
@@ -1,3 +1,5 @@
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
AUTOMAKE_OPTIONS = foreign subdir-objects nostdinc 1.9.6
ACLOCAL_AMFLAGS = -I m4 --install
diff --git a/src/lib/Makefile.in b/src/lib/Makefile.in
index 6b42bb8..1498727 100644
--- a/src/lib/Makefile.in
+++ b/src/lib/Makefile.in
@@ -15,7 +15,10 @@
@SET_MAKE@
# aminclude_static.am generated automatically by Autoconf
-# from AX_AM_MACROS_STATIC on Wed Oct 27 08:01:08 CEST 2021
+# from AX_AM_MACROS_STATIC on Thu Oct 26 10:36:46 CEST 2023
+
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
VPATH = @srcdir@
am__is_gnu_make = { \
@@ -104,8 +107,12 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \
$(top_srcdir)/m4/ax_ac_print_to_file.m4 \
$(top_srcdir)/m4/ax_add_am_macro_static.m4 \
$(top_srcdir)/m4/ax_am_macros_static.m4 \
+ $(top_srcdir)/m4/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4/ax_append_flag.m4 \
+ $(top_srcdir)/m4/ax_check_compile_flag.m4 \
$(top_srcdir)/m4/ax_check_gnu_make.m4 \
$(top_srcdir)/m4/ax_code_coverage.m4 \
+ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
$(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \
$(top_srcdir)/m4/ax_file_escapes.m4 \
$(top_srcdir)/m4/ax_require_defined.m4 \
@@ -162,15 +169,18 @@ LTLIBRARIES = $(lib_LTLIBRARIES)
libcares_la_LIBADD =
am__objects_1 = libcares_la-ares__addrinfo2hostent.lo \
libcares_la-ares__addrinfo_localhost.lo \
- libcares_la-ares__close_sockets.lo \
- libcares_la-ares__get_hostent.lo \
+ libcares_la-ares__buf.lo libcares_la-ares__close_sockets.lo \
+ libcares_la-ares__get_hostent.lo libcares_la-ares__htable.lo \
+ libcares_la-ares__htable_asvp.lo \
+ libcares_la-ares__htable_stvp.lo libcares_la-ares__llist.lo \
libcares_la-ares__parse_into_addrinfo.lo \
- libcares_la-ares__readaddrinfo.lo \
- libcares_la-ares__sortaddrinfo.lo \
- libcares_la-ares__read_line.lo libcares_la-ares__timeval.lo \
+ libcares_la-ares__read_line.lo \
+ libcares_la-ares__readaddrinfo.lo libcares_la-ares__slist.lo \
+ libcares_la-ares__sortaddrinfo.lo libcares_la-ares__timeval.lo \
libcares_la-ares_android.lo libcares_la-ares_cancel.lo \
libcares_la-ares_data.lo libcares_la-ares_destroy.lo \
- libcares_la-ares_expand_name.lo \
+ libcares_la-ares_dns_mapping.lo libcares_la-ares_dns_parse.lo \
+ libcares_la-ares_dns_record.lo libcares_la-ares_expand_name.lo \
libcares_la-ares_expand_string.lo libcares_la-ares_fds.lo \
libcares_la-ares_free_hostent.lo \
libcares_la-ares_free_string.lo \
@@ -180,9 +190,9 @@ am__objects_1 = libcares_la-ares__addrinfo2hostent.lo \
libcares_la-ares_gethostbyname.lo \
libcares_la-ares_getnameinfo.lo libcares_la-ares_getsock.lo \
libcares_la-ares_init.lo libcares_la-ares_library_init.lo \
- libcares_la-ares_llist.lo libcares_la-ares_mkquery.lo \
- libcares_la-ares_create_query.lo libcares_la-ares_nowarn.lo \
- libcares_la-ares_options.lo libcares_la-ares_parse_a_reply.lo \
+ libcares_la-ares_math.lo libcares_la-ares_mkquery.lo \
+ libcares_la-ares_create_query.lo libcares_la-ares_options.lo \
+ libcares_la-ares_parse_a_reply.lo \
libcares_la-ares_parse_aaaa_reply.lo \
libcares_la-ares_parse_caa_reply.lo \
libcares_la-ares_parse_mx_reply.lo \
@@ -194,11 +204,11 @@ am__objects_1 = libcares_la-ares__addrinfo2hostent.lo \
libcares_la-ares_parse_txt_reply.lo \
libcares_la-ares_parse_uri_reply.lo \
libcares_la-ares_platform.lo libcares_la-ares_process.lo \
- libcares_la-ares_query.lo libcares_la-ares_search.lo \
- libcares_la-ares_send.lo libcares_la-ares_strcasecmp.lo \
- libcares_la-ares_strdup.lo libcares_la-ares_strerror.lo \
- libcares_la-ares_strsplit.lo libcares_la-ares_timeout.lo \
- libcares_la-ares_version.lo libcares_la-ares_writev.lo \
+ libcares_la-ares_query.lo libcares_la-ares_rand.lo \
+ libcares_la-ares_search.lo libcares_la-ares_send.lo \
+ libcares_la-ares_strcasecmp.lo libcares_la-ares_str.lo \
+ libcares_la-ares_strerror.lo libcares_la-ares_strsplit.lo \
+ libcares_la-ares_timeout.lo libcares_la-ares_version.lo \
libcares_la-bitncmp.lo libcares_la-inet_net_pton.lo \
libcares_la-inet_ntop.lo libcares_la-windows_port.lo
am__objects_2 =
@@ -229,11 +239,17 @@ am__maybe_remake_depfiles = depfiles
am__depfiles_remade = \
./$(DEPDIR)/libcares_la-ares__addrinfo2hostent.Plo \
./$(DEPDIR)/libcares_la-ares__addrinfo_localhost.Plo \
+ ./$(DEPDIR)/libcares_la-ares__buf.Plo \
./$(DEPDIR)/libcares_la-ares__close_sockets.Plo \
./$(DEPDIR)/libcares_la-ares__get_hostent.Plo \
+ ./$(DEPDIR)/libcares_la-ares__htable.Plo \
+ ./$(DEPDIR)/libcares_la-ares__htable_asvp.Plo \
+ ./$(DEPDIR)/libcares_la-ares__htable_stvp.Plo \
+ ./$(DEPDIR)/libcares_la-ares__llist.Plo \
./$(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Plo \
./$(DEPDIR)/libcares_la-ares__read_line.Plo \
./$(DEPDIR)/libcares_la-ares__readaddrinfo.Plo \
+ ./$(DEPDIR)/libcares_la-ares__slist.Plo \
./$(DEPDIR)/libcares_la-ares__sortaddrinfo.Plo \
./$(DEPDIR)/libcares_la-ares__timeval.Plo \
./$(DEPDIR)/libcares_la-ares_android.Plo \
@@ -241,6 +257,9 @@ am__depfiles_remade = \
./$(DEPDIR)/libcares_la-ares_create_query.Plo \
./$(DEPDIR)/libcares_la-ares_data.Plo \
./$(DEPDIR)/libcares_la-ares_destroy.Plo \
+ ./$(DEPDIR)/libcares_la-ares_dns_mapping.Plo \
+ ./$(DEPDIR)/libcares_la-ares_dns_parse.Plo \
+ ./$(DEPDIR)/libcares_la-ares_dns_record.Plo \
./$(DEPDIR)/libcares_la-ares_expand_name.Plo \
./$(DEPDIR)/libcares_la-ares_expand_string.Plo \
./$(DEPDIR)/libcares_la-ares_fds.Plo \
@@ -255,9 +274,8 @@ am__depfiles_remade = \
./$(DEPDIR)/libcares_la-ares_getsock.Plo \
./$(DEPDIR)/libcares_la-ares_init.Plo \
./$(DEPDIR)/libcares_la-ares_library_init.Plo \
- ./$(DEPDIR)/libcares_la-ares_llist.Plo \
+ ./$(DEPDIR)/libcares_la-ares_math.Plo \
./$(DEPDIR)/libcares_la-ares_mkquery.Plo \
- ./$(DEPDIR)/libcares_la-ares_nowarn.Plo \
./$(DEPDIR)/libcares_la-ares_options.Plo \
./$(DEPDIR)/libcares_la-ares_parse_a_reply.Plo \
./$(DEPDIR)/libcares_la-ares_parse_aaaa_reply.Plo \
@@ -273,15 +291,15 @@ am__depfiles_remade = \
./$(DEPDIR)/libcares_la-ares_platform.Plo \
./$(DEPDIR)/libcares_la-ares_process.Plo \
./$(DEPDIR)/libcares_la-ares_query.Plo \
+ ./$(DEPDIR)/libcares_la-ares_rand.Plo \
./$(DEPDIR)/libcares_la-ares_search.Plo \
./$(DEPDIR)/libcares_la-ares_send.Plo \
+ ./$(DEPDIR)/libcares_la-ares_str.Plo \
./$(DEPDIR)/libcares_la-ares_strcasecmp.Plo \
- ./$(DEPDIR)/libcares_la-ares_strdup.Plo \
./$(DEPDIR)/libcares_la-ares_strerror.Plo \
./$(DEPDIR)/libcares_la-ares_strsplit.Plo \
./$(DEPDIR)/libcares_la-ares_timeout.Plo \
./$(DEPDIR)/libcares_la-ares_version.Plo \
- ./$(DEPDIR)/libcares_la-ares_writev.Plo \
./$(DEPDIR)/libcares_la-bitncmp.Plo \
./$(DEPDIR)/libcares_la-inet_net_pton.Plo \
./$(DEPDIR)/libcares_la-inet_ntop.Plo \
@@ -422,6 +440,7 @@ EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
+FILECMD = @FILECMD@
GCOV = @GCOV@
GENHTML = @GENHTML@
GREP = @GREP@
@@ -522,6 +541,9 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
AUTOMAKE_OPTIONS = foreign subdir-objects nostdinc 1.9.6
ACLOCAL_AMFLAGS = -I m4 --install
@@ -571,18 +593,27 @@ libcares_la_LIBS = $(CODE_COVERAGE_LIBS)
libcares_la_CFLAGS = $(AM_CFLAGS) $(libcares_la_CFLAGS_EXTRA)
libcares_la_CPPFLAGS = $(AM_CPPFLAGS) $(libcares_la_CPPFLAGS_EXTRA)
CSOURCES = ares__addrinfo2hostent.c \
- ares__addrinfo_localhost.c \
- ares__close_sockets.c \
+ ares__addrinfo_localhost.c \
+ ares__buf.c \
+ ares__close_sockets.c \
ares__get_hostent.c \
+ ares__htable.c \
+ ares__htable_asvp.c \
+ ares__htable_stvp.c \
+ ares__llist.c \
ares__parse_into_addrinfo.c \
+ ares__read_line.c \
ares__readaddrinfo.c \
+ ares__slist.c \
ares__sortaddrinfo.c \
- ares__read_line.c \
ares__timeval.c \
ares_android.c \
ares_cancel.c \
ares_data.c \
ares_destroy.c \
+ ares_dns_mapping.c \
+ ares_dns_parse.c \
+ ares_dns_record.c \
ares_expand_name.c \
ares_expand_string.c \
ares_fds.c \
@@ -597,10 +628,9 @@ CSOURCES = ares__addrinfo2hostent.c \
ares_getsock.c \
ares_init.c \
ares_library_init.c \
- ares_llist.c \
+ ares_math.c \
ares_mkquery.c \
ares_create_query.c \
- ares_nowarn.c \
ares_options.c \
ares_parse_a_reply.c \
ares_parse_aaaa_reply.c \
@@ -616,35 +646,38 @@ CSOURCES = ares__addrinfo2hostent.c \
ares_platform.c \
ares_process.c \
ares_query.c \
+ ares_rand.c \
ares_search.c \
ares_send.c \
ares_strcasecmp.c \
- ares_strdup.c \
+ ares_str.c \
ares_strerror.c \
ares_strsplit.c \
ares_timeout.c \
ares_version.c \
- ares_writev.c \
bitncmp.c \
inet_net_pton.c \
inet_ntop.c \
windows_port.c
-HHEADERS = ares_android.h \
+HHEADERS = ares__buf.h \
+ ares__htable.h \
+ ares__htable_asvp.h \
+ ares__htable_stvp.h \
+ ares__llist.h \
+ ares__slist.h \
+ ares_android.h \
ares_data.h \
+ ares_dns_record.h \
ares_getenv.h \
ares_inet_net_pton.h \
ares_iphlpapi.h \
ares_ipv6.h \
- ares_library_init.h \
- ares_llist.h \
- ares_nowarn.h \
ares_platform.h \
ares_private.h \
ares_strcasecmp.h \
- ares_strdup.h \
+ ares_str.h \
ares_strsplit.h \
- ares_writev.h \
bitncmp.h \
ares_setup.h \
setup_once.h
@@ -749,11 +782,17 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__addrinfo2hostent.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__addrinfo_localhost.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__buf.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__close_sockets.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__get_hostent.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__htable.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__htable_asvp.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__htable_stvp.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__llist.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__read_line.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__readaddrinfo.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__slist.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__sortaddrinfo.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares__timeval.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_android.Plo@am__quote@ # am--include-marker
@@ -761,6 +800,9 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_create_query.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_data.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_destroy.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_dns_mapping.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_dns_parse.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_dns_record.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_expand_name.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_expand_string.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_fds.Plo@am__quote@ # am--include-marker
@@ -775,9 +817,8 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_getsock.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_init.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_library_init.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_llist.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_math.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_mkquery.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_nowarn.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_options.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_parse_a_reply.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_parse_aaaa_reply.Plo@am__quote@ # am--include-marker
@@ -793,15 +834,15 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_platform.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_process.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_query.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_rand.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_search.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_send.Plo@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_str.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_strcasecmp.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_strdup.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_strerror.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_strsplit.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_timeout.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_version.Plo@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-ares_writev.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-bitncmp.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-inet_net_pton.Plo@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcares_la-inet_ntop.Plo@am__quote@ # am--include-marker
@@ -851,6 +892,13 @@ libcares_la-ares__addrinfo_localhost.lo: ares__addrinfo_localhost.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__addrinfo_localhost.lo `test -f 'ares__addrinfo_localhost.c' || echo '$(srcdir)/'`ares__addrinfo_localhost.c
+libcares_la-ares__buf.lo: ares__buf.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__buf.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__buf.Tpo -c -o libcares_la-ares__buf.lo `test -f 'ares__buf.c' || echo '$(srcdir)/'`ares__buf.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__buf.Tpo $(DEPDIR)/libcares_la-ares__buf.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__buf.c' object='libcares_la-ares__buf.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__buf.lo `test -f 'ares__buf.c' || echo '$(srcdir)/'`ares__buf.c
+
libcares_la-ares__close_sockets.lo: ares__close_sockets.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__close_sockets.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__close_sockets.Tpo -c -o libcares_la-ares__close_sockets.lo `test -f 'ares__close_sockets.c' || echo '$(srcdir)/'`ares__close_sockets.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__close_sockets.Tpo $(DEPDIR)/libcares_la-ares__close_sockets.Plo
@@ -865,6 +913,34 @@ libcares_la-ares__get_hostent.lo: ares__get_hostent.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__get_hostent.lo `test -f 'ares__get_hostent.c' || echo '$(srcdir)/'`ares__get_hostent.c
+libcares_la-ares__htable.lo: ares__htable.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__htable.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__htable.Tpo -c -o libcares_la-ares__htable.lo `test -f 'ares__htable.c' || echo '$(srcdir)/'`ares__htable.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__htable.Tpo $(DEPDIR)/libcares_la-ares__htable.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__htable.c' object='libcares_la-ares__htable.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__htable.lo `test -f 'ares__htable.c' || echo '$(srcdir)/'`ares__htable.c
+
+libcares_la-ares__htable_asvp.lo: ares__htable_asvp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__htable_asvp.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__htable_asvp.Tpo -c -o libcares_la-ares__htable_asvp.lo `test -f 'ares__htable_asvp.c' || echo '$(srcdir)/'`ares__htable_asvp.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__htable_asvp.Tpo $(DEPDIR)/libcares_la-ares__htable_asvp.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__htable_asvp.c' object='libcares_la-ares__htable_asvp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__htable_asvp.lo `test -f 'ares__htable_asvp.c' || echo '$(srcdir)/'`ares__htable_asvp.c
+
+libcares_la-ares__htable_stvp.lo: ares__htable_stvp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__htable_stvp.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__htable_stvp.Tpo -c -o libcares_la-ares__htable_stvp.lo `test -f 'ares__htable_stvp.c' || echo '$(srcdir)/'`ares__htable_stvp.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__htable_stvp.Tpo $(DEPDIR)/libcares_la-ares__htable_stvp.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__htable_stvp.c' object='libcares_la-ares__htable_stvp.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__htable_stvp.lo `test -f 'ares__htable_stvp.c' || echo '$(srcdir)/'`ares__htable_stvp.c
+
+libcares_la-ares__llist.lo: ares__llist.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__llist.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__llist.Tpo -c -o libcares_la-ares__llist.lo `test -f 'ares__llist.c' || echo '$(srcdir)/'`ares__llist.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__llist.Tpo $(DEPDIR)/libcares_la-ares__llist.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__llist.c' object='libcares_la-ares__llist.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__llist.lo `test -f 'ares__llist.c' || echo '$(srcdir)/'`ares__llist.c
+
libcares_la-ares__parse_into_addrinfo.lo: ares__parse_into_addrinfo.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__parse_into_addrinfo.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Tpo -c -o libcares_la-ares__parse_into_addrinfo.lo `test -f 'ares__parse_into_addrinfo.c' || echo '$(srcdir)/'`ares__parse_into_addrinfo.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Tpo $(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Plo
@@ -872,6 +948,13 @@ libcares_la-ares__parse_into_addrinfo.lo: ares__parse_into_addrinfo.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__parse_into_addrinfo.lo `test -f 'ares__parse_into_addrinfo.c' || echo '$(srcdir)/'`ares__parse_into_addrinfo.c
+libcares_la-ares__read_line.lo: ares__read_line.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__read_line.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__read_line.Tpo -c -o libcares_la-ares__read_line.lo `test -f 'ares__read_line.c' || echo '$(srcdir)/'`ares__read_line.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__read_line.Tpo $(DEPDIR)/libcares_la-ares__read_line.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__read_line.c' object='libcares_la-ares__read_line.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__read_line.lo `test -f 'ares__read_line.c' || echo '$(srcdir)/'`ares__read_line.c
+
libcares_la-ares__readaddrinfo.lo: ares__readaddrinfo.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__readaddrinfo.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__readaddrinfo.Tpo -c -o libcares_la-ares__readaddrinfo.lo `test -f 'ares__readaddrinfo.c' || echo '$(srcdir)/'`ares__readaddrinfo.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__readaddrinfo.Tpo $(DEPDIR)/libcares_la-ares__readaddrinfo.Plo
@@ -879,6 +962,13 @@ libcares_la-ares__readaddrinfo.lo: ares__readaddrinfo.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__readaddrinfo.lo `test -f 'ares__readaddrinfo.c' || echo '$(srcdir)/'`ares__readaddrinfo.c
+libcares_la-ares__slist.lo: ares__slist.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__slist.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__slist.Tpo -c -o libcares_la-ares__slist.lo `test -f 'ares__slist.c' || echo '$(srcdir)/'`ares__slist.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__slist.Tpo $(DEPDIR)/libcares_la-ares__slist.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__slist.c' object='libcares_la-ares__slist.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__slist.lo `test -f 'ares__slist.c' || echo '$(srcdir)/'`ares__slist.c
+
libcares_la-ares__sortaddrinfo.lo: ares__sortaddrinfo.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__sortaddrinfo.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__sortaddrinfo.Tpo -c -o libcares_la-ares__sortaddrinfo.lo `test -f 'ares__sortaddrinfo.c' || echo '$(srcdir)/'`ares__sortaddrinfo.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__sortaddrinfo.Tpo $(DEPDIR)/libcares_la-ares__sortaddrinfo.Plo
@@ -886,13 +976,6 @@ libcares_la-ares__sortaddrinfo.lo: ares__sortaddrinfo.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__sortaddrinfo.lo `test -f 'ares__sortaddrinfo.c' || echo '$(srcdir)/'`ares__sortaddrinfo.c
-libcares_la-ares__read_line.lo: ares__read_line.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__read_line.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__read_line.Tpo -c -o libcares_la-ares__read_line.lo `test -f 'ares__read_line.c' || echo '$(srcdir)/'`ares__read_line.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__read_line.Tpo $(DEPDIR)/libcares_la-ares__read_line.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares__read_line.c' object='libcares_la-ares__read_line.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares__read_line.lo `test -f 'ares__read_line.c' || echo '$(srcdir)/'`ares__read_line.c
-
libcares_la-ares__timeval.lo: ares__timeval.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares__timeval.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares__timeval.Tpo -c -o libcares_la-ares__timeval.lo `test -f 'ares__timeval.c' || echo '$(srcdir)/'`ares__timeval.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares__timeval.Tpo $(DEPDIR)/libcares_la-ares__timeval.Plo
@@ -928,6 +1011,27 @@ libcares_la-ares_destroy.lo: ares_destroy.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_destroy.lo `test -f 'ares_destroy.c' || echo '$(srcdir)/'`ares_destroy.c
+libcares_la-ares_dns_mapping.lo: ares_dns_mapping.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_dns_mapping.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_dns_mapping.Tpo -c -o libcares_la-ares_dns_mapping.lo `test -f 'ares_dns_mapping.c' || echo '$(srcdir)/'`ares_dns_mapping.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_dns_mapping.Tpo $(DEPDIR)/libcares_la-ares_dns_mapping.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_dns_mapping.c' object='libcares_la-ares_dns_mapping.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_dns_mapping.lo `test -f 'ares_dns_mapping.c' || echo '$(srcdir)/'`ares_dns_mapping.c
+
+libcares_la-ares_dns_parse.lo: ares_dns_parse.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_dns_parse.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_dns_parse.Tpo -c -o libcares_la-ares_dns_parse.lo `test -f 'ares_dns_parse.c' || echo '$(srcdir)/'`ares_dns_parse.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_dns_parse.Tpo $(DEPDIR)/libcares_la-ares_dns_parse.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_dns_parse.c' object='libcares_la-ares_dns_parse.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_dns_parse.lo `test -f 'ares_dns_parse.c' || echo '$(srcdir)/'`ares_dns_parse.c
+
+libcares_la-ares_dns_record.lo: ares_dns_record.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_dns_record.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_dns_record.Tpo -c -o libcares_la-ares_dns_record.lo `test -f 'ares_dns_record.c' || echo '$(srcdir)/'`ares_dns_record.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_dns_record.Tpo $(DEPDIR)/libcares_la-ares_dns_record.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_dns_record.c' object='libcares_la-ares_dns_record.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_dns_record.lo `test -f 'ares_dns_record.c' || echo '$(srcdir)/'`ares_dns_record.c
+
libcares_la-ares_expand_name.lo: ares_expand_name.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_expand_name.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_expand_name.Tpo -c -o libcares_la-ares_expand_name.lo `test -f 'ares_expand_name.c' || echo '$(srcdir)/'`ares_expand_name.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_expand_name.Tpo $(DEPDIR)/libcares_la-ares_expand_name.Plo
@@ -1026,12 +1130,12 @@ libcares_la-ares_library_init.lo: ares_library_init.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_library_init.lo `test -f 'ares_library_init.c' || echo '$(srcdir)/'`ares_library_init.c
-libcares_la-ares_llist.lo: ares_llist.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_llist.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_llist.Tpo -c -o libcares_la-ares_llist.lo `test -f 'ares_llist.c' || echo '$(srcdir)/'`ares_llist.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_llist.Tpo $(DEPDIR)/libcares_la-ares_llist.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_llist.c' object='libcares_la-ares_llist.lo' libtool=yes @AMDEPBACKSLASH@
+libcares_la-ares_math.lo: ares_math.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_math.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_math.Tpo -c -o libcares_la-ares_math.lo `test -f 'ares_math.c' || echo '$(srcdir)/'`ares_math.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_math.Tpo $(DEPDIR)/libcares_la-ares_math.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_math.c' object='libcares_la-ares_math.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_llist.lo `test -f 'ares_llist.c' || echo '$(srcdir)/'`ares_llist.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_math.lo `test -f 'ares_math.c' || echo '$(srcdir)/'`ares_math.c
libcares_la-ares_mkquery.lo: ares_mkquery.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_mkquery.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_mkquery.Tpo -c -o libcares_la-ares_mkquery.lo `test -f 'ares_mkquery.c' || echo '$(srcdir)/'`ares_mkquery.c
@@ -1047,13 +1151,6 @@ libcares_la-ares_create_query.lo: ares_create_query.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_create_query.lo `test -f 'ares_create_query.c' || echo '$(srcdir)/'`ares_create_query.c
-libcares_la-ares_nowarn.lo: ares_nowarn.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_nowarn.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_nowarn.Tpo -c -o libcares_la-ares_nowarn.lo `test -f 'ares_nowarn.c' || echo '$(srcdir)/'`ares_nowarn.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_nowarn.Tpo $(DEPDIR)/libcares_la-ares_nowarn.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_nowarn.c' object='libcares_la-ares_nowarn.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_nowarn.lo `test -f 'ares_nowarn.c' || echo '$(srcdir)/'`ares_nowarn.c
-
libcares_la-ares_options.lo: ares_options.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_options.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_options.Tpo -c -o libcares_la-ares_options.lo `test -f 'ares_options.c' || echo '$(srcdir)/'`ares_options.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_options.Tpo $(DEPDIR)/libcares_la-ares_options.Plo
@@ -1159,6 +1256,13 @@ libcares_la-ares_query.lo: ares_query.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_query.lo `test -f 'ares_query.c' || echo '$(srcdir)/'`ares_query.c
+libcares_la-ares_rand.lo: ares_rand.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_rand.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_rand.Tpo -c -o libcares_la-ares_rand.lo `test -f 'ares_rand.c' || echo '$(srcdir)/'`ares_rand.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_rand.Tpo $(DEPDIR)/libcares_la-ares_rand.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_rand.c' object='libcares_la-ares_rand.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_rand.lo `test -f 'ares_rand.c' || echo '$(srcdir)/'`ares_rand.c
+
libcares_la-ares_search.lo: ares_search.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_search.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_search.Tpo -c -o libcares_la-ares_search.lo `test -f 'ares_search.c' || echo '$(srcdir)/'`ares_search.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_search.Tpo $(DEPDIR)/libcares_la-ares_search.Plo
@@ -1180,12 +1284,12 @@ libcares_la-ares_strcasecmp.lo: ares_strcasecmp.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_strcasecmp.lo `test -f 'ares_strcasecmp.c' || echo '$(srcdir)/'`ares_strcasecmp.c
-libcares_la-ares_strdup.lo: ares_strdup.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_strdup.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_strdup.Tpo -c -o libcares_la-ares_strdup.lo `test -f 'ares_strdup.c' || echo '$(srcdir)/'`ares_strdup.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_strdup.Tpo $(DEPDIR)/libcares_la-ares_strdup.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_strdup.c' object='libcares_la-ares_strdup.lo' libtool=yes @AMDEPBACKSLASH@
+libcares_la-ares_str.lo: ares_str.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_str.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_str.Tpo -c -o libcares_la-ares_str.lo `test -f 'ares_str.c' || echo '$(srcdir)/'`ares_str.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_str.Tpo $(DEPDIR)/libcares_la-ares_str.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_str.c' object='libcares_la-ares_str.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_strdup.lo `test -f 'ares_strdup.c' || echo '$(srcdir)/'`ares_strdup.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_str.lo `test -f 'ares_str.c' || echo '$(srcdir)/'`ares_str.c
libcares_la-ares_strerror.lo: ares_strerror.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_strerror.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_strerror.Tpo -c -o libcares_la-ares_strerror.lo `test -f 'ares_strerror.c' || echo '$(srcdir)/'`ares_strerror.c
@@ -1215,13 +1319,6 @@ libcares_la-ares_version.lo: ares_version.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_version.lo `test -f 'ares_version.c' || echo '$(srcdir)/'`ares_version.c
-libcares_la-ares_writev.lo: ares_writev.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-ares_writev.lo -MD -MP -MF $(DEPDIR)/libcares_la-ares_writev.Tpo -c -o libcares_la-ares_writev.lo `test -f 'ares_writev.c' || echo '$(srcdir)/'`ares_writev.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-ares_writev.Tpo $(DEPDIR)/libcares_la-ares_writev.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_writev.c' object='libcares_la-ares_writev.lo' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -c -o libcares_la-ares_writev.lo `test -f 'ares_writev.c' || echo '$(srcdir)/'`ares_writev.c
-
libcares_la-bitncmp.lo: bitncmp.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libcares_la_CPPFLAGS) $(CPPFLAGS) $(libcares_la_CFLAGS) $(CFLAGS) -MT libcares_la-bitncmp.lo -MD -MP -MF $(DEPDIR)/libcares_la-bitncmp.Tpo -c -o libcares_la-bitncmp.lo `test -f 'bitncmp.c' || echo '$(srcdir)/'`bitncmp.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcares_la-bitncmp.Tpo $(DEPDIR)/libcares_la-bitncmp.Plo
@@ -1459,11 +1556,17 @@ clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
distclean: distclean-recursive
-rm -f ./$(DEPDIR)/libcares_la-ares__addrinfo2hostent.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares__addrinfo_localhost.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares__buf.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares__close_sockets.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares__get_hostent.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares__htable.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares__htable_asvp.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares__htable_stvp.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares__llist.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares__read_line.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares__readaddrinfo.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares__slist.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares__sortaddrinfo.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares__timeval.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_android.Plo
@@ -1471,6 +1574,9 @@ distclean: distclean-recursive
-rm -f ./$(DEPDIR)/libcares_la-ares_create_query.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_data.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_destroy.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares_dns_mapping.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares_dns_parse.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares_dns_record.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_expand_name.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_expand_string.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_fds.Plo
@@ -1485,9 +1591,8 @@ distclean: distclean-recursive
-rm -f ./$(DEPDIR)/libcares_la-ares_getsock.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_init.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_library_init.Plo
- -rm -f ./$(DEPDIR)/libcares_la-ares_llist.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares_math.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_mkquery.Plo
- -rm -f ./$(DEPDIR)/libcares_la-ares_nowarn.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_options.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_parse_a_reply.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_parse_aaaa_reply.Plo
@@ -1503,15 +1608,15 @@ distclean: distclean-recursive
-rm -f ./$(DEPDIR)/libcares_la-ares_platform.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_process.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_query.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares_rand.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_search.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_send.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares_str.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_strcasecmp.Plo
- -rm -f ./$(DEPDIR)/libcares_la-ares_strdup.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_strerror.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_strsplit.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_timeout.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_version.Plo
- -rm -f ./$(DEPDIR)/libcares_la-ares_writev.Plo
-rm -f ./$(DEPDIR)/libcares_la-bitncmp.Plo
-rm -f ./$(DEPDIR)/libcares_la-inet_net_pton.Plo
-rm -f ./$(DEPDIR)/libcares_la-inet_ntop.Plo
@@ -1563,11 +1668,17 @@ installcheck-am:
maintainer-clean: maintainer-clean-recursive
-rm -f ./$(DEPDIR)/libcares_la-ares__addrinfo2hostent.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares__addrinfo_localhost.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares__buf.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares__close_sockets.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares__get_hostent.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares__htable.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares__htable_asvp.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares__htable_stvp.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares__llist.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares__parse_into_addrinfo.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares__read_line.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares__readaddrinfo.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares__slist.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares__sortaddrinfo.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares__timeval.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_android.Plo
@@ -1575,6 +1686,9 @@ maintainer-clean: maintainer-clean-recursive
-rm -f ./$(DEPDIR)/libcares_la-ares_create_query.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_data.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_destroy.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares_dns_mapping.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares_dns_parse.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares_dns_record.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_expand_name.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_expand_string.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_fds.Plo
@@ -1589,9 +1703,8 @@ maintainer-clean: maintainer-clean-recursive
-rm -f ./$(DEPDIR)/libcares_la-ares_getsock.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_init.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_library_init.Plo
- -rm -f ./$(DEPDIR)/libcares_la-ares_llist.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares_math.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_mkquery.Plo
- -rm -f ./$(DEPDIR)/libcares_la-ares_nowarn.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_options.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_parse_a_reply.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_parse_aaaa_reply.Plo
@@ -1607,15 +1720,15 @@ maintainer-clean: maintainer-clean-recursive
-rm -f ./$(DEPDIR)/libcares_la-ares_platform.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_process.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_query.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares_rand.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_search.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_send.Plo
+ -rm -f ./$(DEPDIR)/libcares_la-ares_str.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_strcasecmp.Plo
- -rm -f ./$(DEPDIR)/libcares_la-ares_strdup.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_strerror.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_strsplit.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_timeout.Plo
-rm -f ./$(DEPDIR)/libcares_la-ares_version.Plo
- -rm -f ./$(DEPDIR)/libcares_la-ares_writev.Plo
-rm -f ./$(DEPDIR)/libcares_la-bitncmp.Plo
-rm -f ./$(DEPDIR)/libcares_la-inet_net_pton.Plo
-rm -f ./$(DEPDIR)/libcares_la-inet_ntop.Plo
diff --git a/src/lib/Makefile.inc b/src/lib/Makefile.inc
index a3b060c..36de54a 100644
--- a/src/lib/Makefile.inc
+++ b/src/lib/Makefile.inc
@@ -1,17 +1,28 @@
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
CSOURCES = ares__addrinfo2hostent.c \
- ares__addrinfo_localhost.c \
- ares__close_sockets.c \
+ ares__addrinfo_localhost.c \
+ ares__buf.c \
+ ares__close_sockets.c \
ares__get_hostent.c \
+ ares__htable.c \
+ ares__htable_asvp.c \
+ ares__htable_stvp.c \
+ ares__llist.c \
ares__parse_into_addrinfo.c \
+ ares__read_line.c \
ares__readaddrinfo.c \
+ ares__slist.c \
ares__sortaddrinfo.c \
- ares__read_line.c \
ares__timeval.c \
ares_android.c \
ares_cancel.c \
ares_data.c \
ares_destroy.c \
+ ares_dns_mapping.c \
+ ares_dns_parse.c \
+ ares_dns_record.c \
ares_expand_name.c \
ares_expand_string.c \
ares_fds.c \
@@ -26,10 +37,9 @@ CSOURCES = ares__addrinfo2hostent.c \
ares_getsock.c \
ares_init.c \
ares_library_init.c \
- ares_llist.c \
+ ares_math.c \
ares_mkquery.c \
ares_create_query.c \
- ares_nowarn.c \
ares_options.c \
ares_parse_a_reply.c \
ares_parse_aaaa_reply.c \
@@ -45,37 +55,39 @@ CSOURCES = ares__addrinfo2hostent.c \
ares_platform.c \
ares_process.c \
ares_query.c \
+ ares_rand.c \
ares_search.c \
ares_send.c \
ares_strcasecmp.c \
- ares_strdup.c \
+ ares_str.c \
ares_strerror.c \
ares_strsplit.c \
ares_timeout.c \
ares_version.c \
- ares_writev.c \
bitncmp.c \
inet_net_pton.c \
inet_ntop.c \
windows_port.c
-HHEADERS = ares_android.h \
+HHEADERS = ares__buf.h \
+ ares__htable.h \
+ ares__htable_asvp.h \
+ ares__htable_stvp.h \
+ ares__llist.h \
+ ares__slist.h \
+ ares_android.h \
ares_data.h \
+ ares_dns_record.h \
ares_getenv.h \
ares_inet_net_pton.h \
ares_iphlpapi.h \
ares_ipv6.h \
- ares_library_init.h \
- ares_llist.h \
- ares_nowarn.h \
ares_platform.h \
ares_private.h \
ares_strcasecmp.h \
- ares_strdup.h \
+ ares_str.h \
ares_strsplit.h \
- ares_writev.h \
bitncmp.h \
ares_setup.h \
setup_once.h
-
diff --git a/src/lib/ares__addrinfo2hostent.c b/src/lib/ares__addrinfo2hostent.c
index efb145c..ec11217 100644
--- a/src/lib/ares__addrinfo2hostent.c
+++ b/src/lib/ares__addrinfo2hostent.c
@@ -1,19 +1,30 @@
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright 2005 Dominick Meglio
- * Copyright (C) 2019 by Andrew Selivanov
- * Copyright (C) 2021 by Brad House
+/* MIT License
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) 2005 Dominick Meglio
+ * Copyright (c) 2019 Andrew Selivanov
+ * Copyright (c) 2021 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -43,147 +54,143 @@
#include "ares_inet_net_pton.h"
#include "ares_private.h"
-int ares__addrinfo2hostent(const struct ares_addrinfo *ai, int family,
- struct hostent **host)
+ares_status_t ares__addrinfo2hostent(const struct ares_addrinfo *ai, int family,
+ struct hostent **host)
{
- struct ares_addrinfo_node *next;
+ struct ares_addrinfo_node *next;
struct ares_addrinfo_cname *next_cname;
- char **aliases = NULL;
- char *addrs = NULL;
- int naliases = 0, naddrs = 0, alias = 0, i;
-
- if (ai == NULL || host == NULL)
+ char **aliases = NULL;
+ char *addrs = NULL;
+ size_t naliases = 0;
+ size_t naddrs = 0;
+ size_t alias = 0;
+ size_t i;
+
+ if (ai == NULL || host == NULL) {
return ARES_EBADQUERY;
-
- *host = ares_malloc(sizeof(**host));
- if (!(*host))
- {
- goto enomem;
- }
- memset(*host, 0, sizeof(**host));
+ }
/* Use the first node of the response as the family, since hostent can only
* represent one family. We assume getaddrinfo() returned a sorted list if
* the user requested AF_UNSPEC. */
- if (family == AF_UNSPEC && ai->nodes)
+ if (family == AF_UNSPEC && ai->nodes) {
family = ai->nodes->ai_family;
+ }
+
+ if (family != AF_INET && family != AF_INET6) {
+ return ARES_EBADQUERY;
+ }
+
+ *host = ares_malloc(sizeof(**host));
+ if (!(*host)) {
+ goto enomem;
+ }
+ memset(*host, 0, sizeof(**host));
next = ai->nodes;
- while (next)
- {
- if(next->ai_family == family)
- {
- ++naddrs;
- }
- next = next->ai_next;
+ while (next) {
+ if (next->ai_family == family) {
+ ++naddrs;
}
+ next = next->ai_next;
+ }
next_cname = ai->cnames;
- while (next_cname)
- {
- if(next_cname->alias)
- ++naliases;
- next_cname = next_cname->next;
+ while (next_cname) {
+ if (next_cname->alias) {
+ ++naliases;
}
+ next_cname = next_cname->next;
+ }
aliases = ares_malloc((naliases + 1) * sizeof(char *));
- if (!aliases)
- {
- goto enomem;
- }
+ if (!aliases) {
+ goto enomem;
+ }
(*host)->h_aliases = aliases;
memset(aliases, 0, (naliases + 1) * sizeof(char *));
- if (naliases)
- {
- next_cname = ai->cnames;
- while (next_cname)
- {
- if(next_cname->alias) {
- aliases[alias] = ares_strdup(next_cname->alias);
- if (!aliases[alias]) {
- goto enomem;
- }
- alias++;
- }
- next_cname = next_cname->next;
- }
+ if (naliases) {
+ for (next_cname = ai->cnames; next_cname != NULL;
+ next_cname = next_cname->next) {
+ if (next_cname->alias == NULL) {
+ continue;
+ }
+ aliases[alias] = ares_strdup(next_cname->alias);
+ if (!aliases[alias]) {
+ goto enomem;
+ }
+ alias++;
}
+ }
(*host)->h_addr_list = ares_malloc((naddrs + 1) * sizeof(char *));
- if (!(*host)->h_addr_list)
- {
- goto enomem;
- }
+ if (!(*host)->h_addr_list) {
+ goto enomem;
+ }
memset((*host)->h_addr_list, 0, (naddrs + 1) * sizeof(char *));
- if (ai->cnames)
- {
- (*host)->h_name = ares_strdup(ai->cnames->name);
- if ((*host)->h_name == NULL && ai->cnames->name)
- {
- goto enomem;
- }
+ if (ai->cnames) {
+ (*host)->h_name = ares_strdup(ai->cnames->name);
+ if ((*host)->h_name == NULL && ai->cnames->name) {
+ goto enomem;
}
- else
- {
- (*host)->h_name = ares_strdup(ai->name);
- if ((*host)->h_name == NULL && ai->name)
- {
- goto enomem;
- }
+ } else {
+ (*host)->h_name = ares_strdup(ai->name);
+ if ((*host)->h_name == NULL && ai->name) {
+ goto enomem;
}
+ }
(*host)->h_addrtype = family;
- (*host)->h_length = (family == AF_INET)?
- sizeof(struct in_addr):sizeof(struct ares_in6_addr);
-
- if (naddrs)
- {
- addrs = ares_malloc(naddrs * (*host)->h_length);
- if (!addrs)
- {
- goto enomem;
- }
-
- i = 0;
- next = ai->nodes;
- while (next)
- {
- if(next->ai_family == family)
- {
- (*host)->h_addr_list[i] = addrs + (i * (*host)->h_length);
- if (family == AF_INET6)
- {
- memcpy((*host)->h_addr_list[i],
- &(CARES_INADDR_CAST(struct sockaddr_in6 *, next->ai_addr)->sin6_addr),
- (*host)->h_length);
- }
- else
- {
- memcpy((*host)->h_addr_list[i],
- &(CARES_INADDR_CAST(struct sockaddr_in *, next->ai_addr)->sin_addr),
- (*host)->h_length);
- }
- ++i;
- }
- next = next->ai_next;
- }
-
- if (i == 0)
- {
- ares_free(addrs);
- }
+
+ if (family == AF_INET) {
+ (*host)->h_length = sizeof(struct in_addr);
+ }
+
+ if (family == AF_INET6) {
+ (*host)->h_length = sizeof(struct ares_in6_addr);
+ }
+
+ if (naddrs) {
+ addrs = ares_malloc(naddrs * (size_t)(*host)->h_length);
+ if (!addrs) {
+ goto enomem;
+ }
+
+ i = 0;
+ for (next = ai->nodes; next != NULL; next = next->ai_next) {
+ if (next->ai_family != family) {
+ continue;
+ }
+ (*host)->h_addr_list[i] = addrs + (i * (size_t)(*host)->h_length);
+ if (family == AF_INET6) {
+ memcpy(
+ (*host)->h_addr_list[i],
+ &(CARES_INADDR_CAST(struct sockaddr_in6 *, next->ai_addr)->sin6_addr),
+ (size_t)(*host)->h_length);
+ }
+ if (family == AF_INET) {
+ memcpy(
+ (*host)->h_addr_list[i],
+ &(CARES_INADDR_CAST(struct sockaddr_in *, next->ai_addr)->sin_addr),
+ (size_t)(*host)->h_length);
+ }
+ ++i;
}
- if (naddrs == 0 && naliases == 0)
- {
- ares_free_hostent(*host);
- *host = NULL;
- return ARES_ENODATA;
+ if (i == 0) {
+ ares_free(addrs);
}
+ }
+
+ if (naddrs == 0 && naliases == 0) {
+ ares_free_hostent(*host);
+ *host = NULL;
+ return ARES_ENODATA;
+ }
return ARES_SUCCESS;
@@ -193,74 +200,79 @@ enomem:
return ARES_ENOMEM;
}
-
-int ares__addrinfo2addrttl(const struct ares_addrinfo *ai, int family,
- int req_naddrttls, struct ares_addrttl *addrttls,
- struct ares_addr6ttl *addr6ttls, int *naddrttls)
+ares_status_t ares__addrinfo2addrttl(const struct ares_addrinfo *ai, int family,
+ size_t req_naddrttls,
+ struct ares_addrttl *addrttls,
+ struct ares_addr6ttl *addr6ttls,
+ size_t *naddrttls)
{
- struct ares_addrinfo_node *next;
+ struct ares_addrinfo_node *next;
struct ares_addrinfo_cname *next_cname;
- int cname_ttl = INT_MAX;
+ int cname_ttl = INT_MAX;
- if (family != AF_INET && family != AF_INET6)
+ if (family != AF_INET && family != AF_INET6) {
return ARES_EBADQUERY;
+ }
- if (ai == NULL || naddrttls == NULL)
+ if (ai == NULL || naddrttls == NULL) {
return ARES_EBADQUERY;
+ }
- if (family == AF_INET && addrttls == NULL)
+ if (family == AF_INET && addrttls == NULL) {
return ARES_EBADQUERY;
+ }
- if (family == AF_INET6 && addr6ttls == NULL)
+ if (family == AF_INET6 && addr6ttls == NULL) {
return ARES_EBADQUERY;
+ }
- if (req_naddrttls == 0)
+ if (req_naddrttls == 0) {
return ARES_EBADQUERY;
+ }
*naddrttls = 0;
next_cname = ai->cnames;
- while (next_cname)
- {
- if(next_cname->ttl < cname_ttl)
- cname_ttl = next_cname->ttl;
- next_cname = next_cname->next;
+ while (next_cname) {
+ if (next_cname->ttl < cname_ttl) {
+ cname_ttl = next_cname->ttl;
}
+ next_cname = next_cname->next;
+ }
- next = ai->nodes;
- while (next)
- {
- if(next->ai_family == family)
- {
- if (*naddrttls < req_naddrttls)
- {
- if (family == AF_INET6)
- {
- if(next->ai_ttl > cname_ttl)
- addr6ttls[*naddrttls].ttl = cname_ttl;
- else
- addr6ttls[*naddrttls].ttl = next->ai_ttl;
-
- memcpy(&addr6ttls[*naddrttls].ip6addr,
- &(CARES_INADDR_CAST(struct sockaddr_in6 *, next->ai_addr)->sin6_addr),
- sizeof(struct ares_in6_addr));
- }
- else
- {
- if(next->ai_ttl > cname_ttl)
- addrttls[*naddrttls].ttl = cname_ttl;
- else
- addrttls[*naddrttls].ttl = next->ai_ttl;
- memcpy(&addrttls[*naddrttls].ipaddr,
- &(CARES_INADDR_CAST(struct sockaddr_in *, next->ai_addr)->sin_addr),
- sizeof(struct in_addr));
- }
- (*naddrttls)++;
- }
- }
- next = next->ai_next;
+ for (next = ai->nodes; next != NULL; next = next->ai_next) {
+ if (next->ai_family != family) {
+ continue;
+ }
+
+ if (*naddrttls >= req_naddrttls) {
+ break;
+ }
+
+ if (family == AF_INET6) {
+ if (next->ai_ttl > cname_ttl) {
+ addr6ttls[*naddrttls].ttl = cname_ttl;
+ } else {
+ addr6ttls[*naddrttls].ttl = next->ai_ttl;
+ }
+
+ memcpy(
+ &addr6ttls[*naddrttls].ip6addr,
+ &(CARES_INADDR_CAST(struct sockaddr_in6 *, next->ai_addr)->sin6_addr),
+ sizeof(struct ares_in6_addr));
+ } else {
+ if (next->ai_ttl > cname_ttl) {
+ addrttls[*naddrttls].ttl = cname_ttl;
+ } else {
+ addrttls[*naddrttls].ttl = next->ai_ttl;
+ }
+ memcpy(
+ &addrttls[*naddrttls].ipaddr,
+ &(CARES_INADDR_CAST(struct sockaddr_in *, next->ai_addr)->sin_addr),
+ sizeof(struct in_addr));
}
+ (*naddrttls)++;
+ }
return ARES_SUCCESS;
}
-
diff --git a/src/lib/ares__addrinfo_localhost.c b/src/lib/ares__addrinfo_localhost.c
index 7940ecd..7cdc2f6 100644
--- a/src/lib/ares__addrinfo_localhost.c
+++ b/src/lib/ares__addrinfo_localhost.c
@@ -1,16 +1,28 @@
-/* Copyright (C) 2021
+/* MIT License
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * Copyright (c) Massachusetts Institute of Technology
+ * Copyright (c) Daniel Stenberg
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -26,164 +38,144 @@
#endif
#if defined(_WIN32) && defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0600
-#include <ws2ipdef.h>
-#include <iphlpapi.h>
+# include <ws2ipdef.h>
+# include <iphlpapi.h>
#endif
#include "ares.h"
#include "ares_inet_net_pton.h"
-#include "ares_nowarn.h"
#include "ares_private.h"
-int ares_append_ai_node(int aftype,
- unsigned short port,
- int ttl,
- const void *adata,
- struct ares_addrinfo_node **nodes)
+ares_status_t ares_append_ai_node(int aftype, unsigned short port,
+ unsigned int ttl, const void *adata,
+ struct ares_addrinfo_node **nodes)
{
struct ares_addrinfo_node *node;
node = ares__append_addrinfo_node(nodes);
- if (!node)
- {
- return ARES_ENOMEM;
- }
+ if (!node) {
+ return ARES_ENOMEM;
+ }
memset(node, 0, sizeof(*node));
- if (aftype == AF_INET)
- {
- struct sockaddr_in *sin = ares_malloc(sizeof(*sin));
- if (!sin)
- {
- return ARES_ENOMEM;
- }
-
- memset(sin, 0, sizeof(*sin));
- memcpy(&sin->sin_addr.s_addr, adata, sizeof(sin->sin_addr.s_addr));
- sin->sin_family = AF_INET;
- sin->sin_port = htons(port);
-
- node->ai_addr = (struct sockaddr *)sin;
- node->ai_family = AF_INET;
- node->ai_addrlen = sizeof(*sin);
- node->ai_addr = (struct sockaddr *)sin;
- node->ai_ttl = ttl;
+ if (aftype == AF_INET) {
+ struct sockaddr_in *sin = ares_malloc(sizeof(*sin));
+ if (!sin) {
+ return ARES_ENOMEM;
}
- if (aftype == AF_INET6)
- {
- struct sockaddr_in6 *sin6 = ares_malloc(sizeof(*sin6));
- if (!sin6)
- {
- return ARES_ENOMEM;
- }
-
- memset(sin6, 0, sizeof(*sin6));
- memcpy(&sin6->sin6_addr.s6_addr, adata, sizeof(sin6->sin6_addr.s6_addr));
- sin6->sin6_family = AF_INET6;
- sin6->sin6_port = htons(port);
-
- node->ai_addr = (struct sockaddr *)sin6;
- node->ai_family = AF_INET6;
- node->ai_addrlen = sizeof(*sin6);
- node->ai_addr = (struct sockaddr *)sin6;
- node->ai_ttl = ttl;
+ memset(sin, 0, sizeof(*sin));
+ memcpy(&sin->sin_addr.s_addr, adata, sizeof(sin->sin_addr.s_addr));
+ sin->sin_family = AF_INET;
+ sin->sin_port = htons(port);
+
+ node->ai_addr = (struct sockaddr *)sin;
+ node->ai_family = AF_INET;
+ node->ai_addrlen = sizeof(*sin);
+ node->ai_addr = (struct sockaddr *)sin;
+ node->ai_ttl = (int)ttl;
+ }
+
+ if (aftype == AF_INET6) {
+ struct sockaddr_in6 *sin6 = ares_malloc(sizeof(*sin6));
+ if (!sin6) {
+ return ARES_ENOMEM;
}
+ memset(sin6, 0, sizeof(*sin6));
+ memcpy(&sin6->sin6_addr.s6_addr, adata, sizeof(sin6->sin6_addr.s6_addr));
+ sin6->sin6_family = AF_INET6;
+ sin6->sin6_port = htons(port);
+
+ node->ai_addr = (struct sockaddr *)sin6;
+ node->ai_family = AF_INET6;
+ node->ai_addrlen = sizeof(*sin6);
+ node->ai_addr = (struct sockaddr *)sin6;
+ node->ai_ttl = (int)ttl;
+ }
+
return ARES_SUCCESS;
}
-
-static int ares__default_loopback_addrs(int aftype,
- unsigned short port,
- struct ares_addrinfo_node **nodes)
+static ares_status_t
+ ares__default_loopback_addrs(int aftype, unsigned short port,
+ struct ares_addrinfo_node **nodes)
{
- int status = ARES_SUCCESS;
-
- if (aftype == AF_UNSPEC || aftype == AF_INET6)
- {
- struct ares_in6_addr addr6;
- ares_inet_pton(AF_INET6, "::1", &addr6);
- status = ares_append_ai_node(AF_INET6, port, 0, &addr6, nodes);
- if (status != ARES_SUCCESS)
- {
- return status;
- }
+ ares_status_t status = ARES_SUCCESS;
+
+ if (aftype == AF_UNSPEC || aftype == AF_INET6) {
+ struct ares_in6_addr addr6;
+ ares_inet_pton(AF_INET6, "::1", &addr6);
+ status = ares_append_ai_node(AF_INET6, port, 0, &addr6, nodes);
+ if (status != ARES_SUCCESS) {
+ return status;
}
+ }
- if (aftype == AF_UNSPEC || aftype == AF_INET)
- {
- struct in_addr addr4;
- ares_inet_pton(AF_INET, "127.0.0.1", &addr4);
- status = ares_append_ai_node(AF_INET, port, 0, &addr4, nodes);
- if (status != ARES_SUCCESS)
- {
- return status;
- }
+ if (aftype == AF_UNSPEC || aftype == AF_INET) {
+ struct in_addr addr4;
+ ares_inet_pton(AF_INET, "127.0.0.1", &addr4);
+ status = ares_append_ai_node(AF_INET, port, 0, &addr4, nodes);
+ if (status != ARES_SUCCESS) {
+ return status;
}
+ }
return status;
}
-
-static int ares__system_loopback_addrs(int aftype,
- unsigned short port,
- struct ares_addrinfo_node **nodes)
+static ares_status_t
+ ares__system_loopback_addrs(int aftype, unsigned short port,
+ struct ares_addrinfo_node **nodes)
{
-#if defined(_WIN32) && defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0600
+#if defined(_WIN32) && defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0600 && \
+ !defined(__WATCOMC__)
PMIB_UNICASTIPADDRESS_TABLE table;
- unsigned int i;
- int status;
+ unsigned int i;
+ ares_status_t status;
*nodes = NULL;
- if (GetUnicastIpAddressTable(aftype, &table) != NO_ERROR)
+ if (GetUnicastIpAddressTable(aftype, &table) != NO_ERROR) {
return ARES_ENOTFOUND;
+ }
+
+ for (i = 0; i < table->NumEntries; i++) {
+ if (table->Table[i].InterfaceLuid.Info.IfType !=
+ IF_TYPE_SOFTWARE_LOOPBACK) {
+ continue;
+ }
- for (i=0; i<table->NumEntries; i++)
- {
- if (table->Table[i].InterfaceLuid.Info.IfType !=
- IF_TYPE_SOFTWARE_LOOPBACK)
- {
- continue;
- }
-
- if (table->Table[i].Address.si_family == AF_INET)
- {
- status = ares_append_ai_node(table->Table[i].Address.si_family, port, 0,
- &table->Table[i].Address.Ipv4.sin_addr,
- nodes);
- }
- else if (table->Table[i].Address.si_family == AF_INET6)
- {
- status = ares_append_ai_node(table->Table[i].Address.si_family, port, 0,
- &table->Table[i].Address.Ipv6.sin6_addr,
- nodes);
- }
- else
- {
- /* Ignore any others */
- continue;
- }
-
- if (status != ARES_SUCCESS)
- {
- goto fail;
- }
+ if (table->Table[i].Address.si_family == AF_INET) {
+ status =
+ ares_append_ai_node(table->Table[i].Address.si_family, port, 0,
+ &table->Table[i].Address.Ipv4.sin_addr, nodes);
+ } else if (table->Table[i].Address.si_family == AF_INET6) {
+ status =
+ ares_append_ai_node(table->Table[i].Address.si_family, port, 0,
+ &table->Table[i].Address.Ipv6.sin6_addr, nodes);
+ } else {
+ /* Ignore any others */
+ continue;
}
- if (*nodes == NULL)
- status = ARES_ENOTFOUND;
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+ }
+
+ if (*nodes == NULL) {
+ status = ARES_ENOTFOUND;
+ }
fail:
FreeMibTable(table);
- if (status != ARES_SUCCESS)
- {
- ares__freeaddrinfo_nodes(*nodes);
- *nodes = NULL;
- }
+ if (status != ARES_SUCCESS) {
+ ares__freeaddrinfo_nodes(*nodes);
+ *nodes = NULL;
+ }
return status;
@@ -196,14 +188,12 @@ fail:
#endif
}
-
-int ares__addrinfo_localhost(const char *name,
- unsigned short port,
- const struct ares_addrinfo_hints *hints,
- struct ares_addrinfo *ai)
+ares_status_t ares__addrinfo_localhost(const char *name, unsigned short port,
+ const struct ares_addrinfo_hints *hints,
+ struct ares_addrinfo *ai)
{
struct ares_addrinfo_node *nodes = NULL;
- int result;
+ ares_status_t status;
/* Validate family */
switch (hints->ai_family) {
@@ -216,21 +206,19 @@ int ares__addrinfo_localhost(const char *name,
}
ai->name = ares_strdup(name);
- if(!ai->name)
- {
- goto enomem;
- }
+ if (!ai->name) {
+ goto enomem;
+ }
- result = ares__system_loopback_addrs(hints->ai_family, port, &nodes);
+ status = ares__system_loopback_addrs(hints->ai_family, port, &nodes);
- if (result == ARES_ENOTFOUND)
- {
- result = ares__default_loopback_addrs(hints->ai_family, port, &nodes);
- }
+ if (status == ARES_ENOTFOUND) {
+ status = ares__default_loopback_addrs(hints->ai_family, port, &nodes);
+ }
ares__addrinfo_cat_nodes(&ai->nodes, nodes);
- return result;
+ return status;
enomem:
ares__freeaddrinfo_nodes(nodes);
diff --git a/src/lib/ares__buf.c b/src/lib/ares__buf.c
new file mode 100644
index 0000000..3e064ef
--- /dev/null
+++ b/src/lib/ares__buf.c
@@ -0,0 +1,954 @@
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#include "ares_setup.h"
+#include "ares.h"
+#include "ares_private.h"
+#include "ares__buf.h"
+#include <limits.h>
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+
+struct ares__buf {
+ const unsigned char *data; /*!< pointer to start of data buffer */
+ size_t data_len; /*!< total size of data in buffer */
+
+ unsigned char *alloc_buf; /*!< Pointer to allocated data buffer,
+ * not used for const buffers */
+ size_t alloc_buf_len; /*!< Size of allocated data buffer */
+
+ size_t offset; /*!< Current working offset in buffer */
+ size_t tag_offset; /*!< Tagged offset in buffer. Uses
+ * SIZE_MAX if not set. */
+};
+
+ares__buf_t *ares__buf_create(void)
+{
+ ares__buf_t *buf = ares_malloc_zero(sizeof(*buf));
+ if (buf == NULL) {
+ return NULL;
+ }
+
+ buf->tag_offset = SIZE_MAX;
+ return buf;
+}
+
+ares__buf_t *ares__buf_create_const(const unsigned char *data, size_t data_len)
+{
+ ares__buf_t *buf;
+
+ if (data == NULL || data_len == 0) {
+ return NULL;
+ }
+
+ buf = ares__buf_create();
+ if (buf == NULL) {
+ return NULL;
+ }
+
+ buf->data = data;
+ buf->data_len = data_len;
+
+ return buf;
+}
+
+void ares__buf_destroy(ares__buf_t *buf)
+{
+ if (buf == NULL) {
+ return;
+ }
+ ares_free(buf->alloc_buf);
+ ares_free(buf);
+}
+
+static ares_bool_t ares__buf_is_const(const ares__buf_t *buf)
+{
+ if (buf == NULL) {
+ return ARES_FALSE;
+ }
+
+ if (buf->data != NULL && buf->alloc_buf == NULL) {
+ return ARES_TRUE;
+ }
+
+ return ARES_FALSE;
+}
+
+void ares__buf_reclaim(ares__buf_t *buf)
+{
+ size_t prefix_size;
+ size_t data_size;
+
+ if (buf == NULL) {
+ return;
+ }
+
+ if (ares__buf_is_const(buf)) {
+ return;
+ }
+
+ if (buf->tag_offset != SIZE_MAX && buf->tag_offset < buf->offset) {
+ prefix_size = buf->tag_offset;
+ } else {
+ prefix_size = buf->offset;
+ }
+
+ if (prefix_size == 0) {
+ return;
+ }
+
+ data_size = buf->data_len - prefix_size;
+
+ memmove(buf->alloc_buf, buf->alloc_buf + prefix_size, data_size);
+ buf->data = buf->alloc_buf;
+ buf->data_len = data_size;
+ buf->offset -= prefix_size;
+ if (buf->tag_offset != SIZE_MAX) {
+ buf->tag_offset -= prefix_size;
+ }
+
+ return;
+}
+
+static ares_status_t ares__buf_ensure_space(ares__buf_t *buf,
+ size_t needed_size)
+{
+ size_t remaining_size;
+ size_t alloc_size;
+ unsigned char *ptr;
+
+ if (buf == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ if (ares__buf_is_const(buf)) {
+ return ARES_EFORMERR;
+ }
+
+ /* When calling ares__buf_finish_str() we end up adding a null terminator,
+ * so we want to ensure the size is always sufficient for this as we don't
+ * want an ARES_ENOMEM at that point */
+ needed_size++;
+
+ /* No need to do an expensive move operation, we have enough to just append */
+ remaining_size = buf->alloc_buf_len - buf->data_len;
+ if (remaining_size >= needed_size) {
+ return ARES_SUCCESS;
+ }
+
+ /* See if just moving consumed data frees up enough space */
+ ares__buf_reclaim(buf);
+
+ remaining_size = buf->alloc_buf_len - buf->data_len;
+ if (remaining_size >= needed_size) {
+ return ARES_SUCCESS;
+ }
+
+ alloc_size = buf->alloc_buf_len;
+
+ /* Not yet started */
+ if (alloc_size == 0) {
+ alloc_size = 16; /* Always shifts 1, so ends up being 32 minimum */
+ }
+
+ /* Increase allocation by powers of 2 */
+ do {
+ alloc_size <<= 1;
+ remaining_size = alloc_size - buf->data_len;
+ } while (remaining_size < needed_size);
+
+ ptr = ares_realloc(buf->alloc_buf, alloc_size);
+ if (ptr == NULL) {
+ return ARES_ENOMEM;
+ }
+
+ buf->alloc_buf = ptr;
+ buf->alloc_buf_len = alloc_size;
+ buf->data = ptr;
+
+ return ARES_SUCCESS;
+}
+
+ares_status_t ares__buf_append(ares__buf_t *buf, const unsigned char *data,
+ size_t data_len)
+{
+ ares_status_t status;
+
+ if (data == NULL || data_len == 0) {
+ return ARES_EFORMERR;
+ }
+
+ status = ares__buf_ensure_space(buf, data_len);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ memcpy(buf->alloc_buf + buf->data_len, data, data_len);
+ buf->data_len += data_len;
+ return ARES_SUCCESS;
+}
+
+ares_status_t ares__buf_append_byte(ares__buf_t *buf, unsigned char byte)
+{
+ return ares__buf_append(buf, &byte, 1);
+}
+
+unsigned char *ares__buf_append_start(ares__buf_t *buf, size_t *len)
+{
+ ares_status_t status;
+
+ if (len == NULL || *len == 0) {
+ return NULL;
+ }
+
+ status = ares__buf_ensure_space(buf, *len);
+ if (status != ARES_SUCCESS) {
+ return NULL;
+ }
+
+ /* -1 for possible null terminator for ares__buf_finish_str() */
+ *len = buf->alloc_buf_len - buf->data_len - 1;
+ return buf->alloc_buf + buf->data_len;
+}
+
+void ares__buf_append_finish(ares__buf_t *buf, size_t len)
+{
+ if (buf == NULL) {
+ return;
+ }
+
+ buf->data_len += len;
+}
+
+unsigned char *ares__buf_finish_bin(ares__buf_t *buf, size_t *len)
+{
+ unsigned char *ptr = NULL;
+ if (buf == NULL || len == NULL || ares__buf_is_const(buf)) {
+ return NULL;
+ }
+
+ ares__buf_reclaim(buf);
+
+ /* We don't want to return NULL except on failure, may be zero-length */
+ if (buf->alloc_buf == NULL &&
+ ares__buf_ensure_space(buf, 1) != ARES_SUCCESS) {
+ return NULL;
+ }
+ ptr = buf->alloc_buf;
+ *len = buf->data_len;
+ ares_free(buf);
+ return ptr;
+}
+
+char *ares__buf_finish_str(ares__buf_t *buf, size_t *len)
+{
+ char *ptr;
+ size_t mylen;
+
+ ptr = (char *)ares__buf_finish_bin(buf, &mylen);
+ if (ptr == NULL) {
+ return NULL;
+ }
+
+ if (len != NULL) {
+ *len = mylen;
+ }
+
+ /* NOTE: ensured via ares__buf_ensure_space() that there is always at least
+ * 1 extra byte available for this specific use-case */
+ ptr[mylen] = 0;
+
+ return ptr;
+}
+
+void ares__buf_tag(ares__buf_t *buf)
+{
+ if (buf == NULL) {
+ return;
+ }
+
+ buf->tag_offset = buf->offset;
+}
+
+ares_status_t ares__buf_tag_rollback(ares__buf_t *buf)
+{
+ if (buf == NULL || buf->tag_offset == SIZE_MAX) {
+ return ARES_EFORMERR;
+ }
+
+ buf->offset = buf->tag_offset;
+ buf->tag_offset = SIZE_MAX;
+ return ARES_SUCCESS;
+}
+
+ares_status_t ares__buf_tag_clear(ares__buf_t *buf)
+{
+ if (buf == NULL || buf->tag_offset == SIZE_MAX) {
+ return ARES_EFORMERR;
+ }
+
+ buf->tag_offset = SIZE_MAX;
+ return ARES_SUCCESS;
+}
+
+const unsigned char *ares__buf_tag_fetch(const ares__buf_t *buf, size_t *len)
+{
+ if (buf == NULL || buf->tag_offset == SIZE_MAX || len == NULL) {
+ return NULL;
+ }
+
+ *len = buf->offset - buf->tag_offset;
+ return buf->data + buf->tag_offset;
+}
+
+static const unsigned char *ares__buf_fetch(const ares__buf_t *buf, size_t *len)
+{
+ if (len != NULL) {
+ *len = 0;
+ }
+
+ if (buf == NULL || len == NULL || buf->data == NULL) {
+ return NULL;
+ }
+
+ *len = buf->data_len - buf->offset;
+ return buf->data + buf->offset;
+}
+
+ares_status_t ares__buf_consume(ares__buf_t *buf, size_t len)
+{
+ size_t remaining_len;
+
+ ares__buf_fetch(buf, &remaining_len);
+
+ if (remaining_len < len) {
+ return ARES_EBADRESP;
+ }
+
+ buf->offset += len;
+ return ARES_SUCCESS;
+}
+
+ares_status_t ares__buf_fetch_be16(ares__buf_t *buf, unsigned short *u16)
+{
+ size_t remaining_len;
+ const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
+
+ if (buf == NULL || u16 == NULL || remaining_len < sizeof(*u16)) {
+ return ARES_EBADRESP;
+ }
+
+ *u16 =
+ (unsigned short)((unsigned short)(ptr[0]) << 8 | (unsigned short)ptr[1]);
+
+ return ares__buf_consume(buf, sizeof(*u16));
+}
+
+ares_status_t ares__buf_fetch_be32(ares__buf_t *buf, unsigned int *u32)
+{
+ size_t remaining_len;
+ const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
+
+ if (buf == NULL || u32 == NULL || remaining_len < sizeof(*u32)) {
+ return ARES_EBADRESP;
+ }
+
+ *u32 = ((unsigned int)(ptr[0]) << 24 | (unsigned int)(ptr[1]) << 16 |
+ (unsigned int)(ptr[2]) << 8 | (unsigned int)(ptr[3]));
+
+ return ares__buf_consume(buf, sizeof(*u32));
+}
+
+ares_status_t ares__buf_fetch_bytes(ares__buf_t *buf, unsigned char *bytes,
+ size_t len)
+{
+ size_t remaining_len;
+ const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
+
+ if (buf == NULL || bytes == NULL || len == 0 || remaining_len < len) {
+ return ARES_EBADRESP;
+ }
+
+ memcpy(bytes, ptr, len);
+ return ares__buf_consume(buf, len);
+}
+
+ares_status_t ares__buf_fetch_bytes_dup(ares__buf_t *buf, size_t len,
+ unsigned char **bytes)
+{
+ size_t remaining_len;
+ const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
+
+ if (buf == NULL || bytes == NULL || len == 0 || remaining_len < len) {
+ return ARES_EBADRESP;
+ }
+
+ *bytes = ares_malloc(len);
+ if (*bytes == NULL) {
+ return ARES_ENOMEM;
+ }
+
+ memcpy(*bytes, ptr, len);
+ return ares__buf_consume(buf, len);
+}
+
+ares_status_t ares__buf_fetch_str_dup(ares__buf_t *buf, size_t len, char **str)
+{
+ size_t remaining_len;
+ const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
+
+ if (buf == NULL || str == NULL || len == 0 || remaining_len < len) {
+ return ARES_EBADRESP;
+ }
+
+ *str = ares_malloc(len + 1);
+ if (*str == NULL) {
+ return ARES_ENOMEM;
+ }
+
+ memcpy(*str, ptr, len);
+ (*str)[len] = 0;
+
+ return ares__buf_consume(buf, len);
+}
+
+ares_status_t ares__buf_fetch_bytes_into_buf(ares__buf_t *buf,
+ ares__buf_t *dest, size_t len)
+{
+ size_t remaining_len;
+ const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
+ ares_status_t status;
+
+ if (buf == NULL || dest == NULL || len == 0 || remaining_len < len) {
+ return ARES_EBADRESP;
+ }
+
+ status = ares__buf_append(dest, ptr, len);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ return ares__buf_consume(buf, len);
+}
+
+/* Reserved characters for names that need to be escaped */
+static ares_bool_t is_reservedch(int ch)
+{
+ switch (ch) {
+ case '"':
+ case '.':
+ case ';':
+ case '\\':
+ case '(':
+ case ')':
+ case '@':
+ case '$':
+ return ARES_TRUE;
+ default:
+ break;
+ }
+
+ return ARES_FALSE;
+}
+
+static ares_bool_t ares__isprint(int ch)
+{
+ if (ch >= 0x20 && ch <= 0x7E) {
+ return ARES_TRUE;
+ }
+ return ARES_FALSE;
+}
+
+/* Character set allowed by hostnames. This is to include the normal
+ * domain name character set plus:
+ * - underscores which are used in SRV records.
+ * - Forward slashes such as are used for classless in-addr.arpa
+ * delegation (CNAMEs)
+ * - Asterisks may be used for wildcard domains in CNAMEs as seen in the
+ * real world.
+ * While RFC 2181 section 11 does state not to do validation,
+ * that applies to servers, not clients. Vulnerabilities have been
+ * reported when this validation is not performed. Security is more
+ * important than edge-case compatibility (which is probably invalid
+ * anyhow). */
+static ares_bool_t is_hostnamech(int ch)
+{
+ /* [A-Za-z0-9-*._/]
+ * Don't use isalnum() as it is locale-specific
+ */
+ if (ch >= 'A' && ch <= 'Z') {
+ return ARES_TRUE;
+ }
+ if (ch >= 'a' && ch <= 'z') {
+ return ARES_TRUE;
+ }
+ if (ch >= '0' && ch <= '9') {
+ return ARES_TRUE;
+ }
+ if (ch == '-' || ch == '.' || ch == '_' || ch == '/' || ch == '*') {
+ return ARES_TRUE;
+ }
+
+ return ARES_FALSE;
+}
+
+static ares_status_t ares__buf_fetch_dnsname_into_buf(ares__buf_t *buf,
+ ares__buf_t *dest,
+ size_t len,
+ ares_bool_t is_hostname)
+{
+ size_t remaining_len;
+ const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
+ ares_status_t status;
+ size_t i;
+
+ if (buf == NULL || len == 0 || remaining_len < len) {
+ return ARES_EBADRESP;
+ }
+
+ for (i = 0; i < len; i++) {
+ unsigned char c = ptr[i];
+
+ /* Hostnames have a very specific allowed character set. Anything outside
+ * of that (non-printable and reserved included) are disallowed */
+ if (is_hostname && !is_hostnamech(c)) {
+ status = ARES_EBADRESP;
+ goto fail;
+ }
+
+ /* NOTE: dest may be NULL if the user is trying to skip the name. validation
+ * still occurs above. */
+ if (dest == NULL) {
+ continue;
+ }
+
+ /* Non-printable characters need to be output as \DDD */
+ if (!ares__isprint(c)) {
+ unsigned char escape[4];
+
+ escape[0] = '\\';
+ escape[1] = '0' + (c / 100);
+ escape[2] = '0' + ((c % 100) / 10);
+ escape[3] = '0' + (c % 10);
+
+ status = ares__buf_append(dest, escape, sizeof(escape));
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+
+ continue;
+ }
+
+ /* Reserved characters need to be escaped, otherwise normal */
+ if (is_reservedch(c)) {
+ status = ares__buf_append_byte(dest, '\\');
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+ }
+
+ status = ares__buf_append_byte(dest, c);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+ }
+
+ return ares__buf_consume(buf, len);
+
+fail:
+ return status;
+}
+
+size_t ares__buf_consume_whitespace(ares__buf_t *buf, int include_linefeed)
+{
+ size_t remaining_len = 0;
+ const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
+ size_t i;
+
+ if (ptr == NULL) {
+ return 0;
+ }
+
+ for (i = 0; i < remaining_len; i++) {
+ switch (ptr[i]) {
+ case '\r':
+ case '\t':
+ case ' ':
+ case '\v':
+ case '\f':
+ break;
+ case '\n':
+ if (!include_linefeed) {
+ goto done;
+ }
+ break;
+ default:
+ goto done;
+ }
+ }
+
+done:
+ if (i > 0) {
+ ares__buf_consume(buf, i);
+ }
+ return i;
+}
+
+size_t ares__buf_consume_nonwhitespace(ares__buf_t *buf)
+{
+ size_t remaining_len = 0;
+ const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
+ size_t i;
+
+ if (ptr == NULL) {
+ return 0;
+ }
+
+ for (i = 0; i < remaining_len; i++) {
+ switch (ptr[i]) {
+ case '\r':
+ case '\t':
+ case ' ':
+ case '\v':
+ case '\f':
+ case '\n':
+ goto done;
+ default:
+ break;
+ }
+ }
+
+done:
+ if (i > 0) {
+ ares__buf_consume(buf, i);
+ }
+ return i;
+}
+
+size_t ares__buf_consume_line(ares__buf_t *buf, int include_linefeed)
+{
+ size_t remaining_len = 0;
+ const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
+ size_t i;
+
+ if (ptr == NULL) {
+ return 0;
+ }
+
+ for (i = 0; i < remaining_len; i++) {
+ if (ptr[i] == '\n') {
+ goto done;
+ }
+ }
+
+done:
+ if (include_linefeed && i > 0 && i < remaining_len && ptr[i] == '\n') {
+ i++;
+ }
+ if (i > 0) {
+ ares__buf_consume(buf, i);
+ }
+ return i;
+}
+
+ares_status_t ares__buf_begins_with(const ares__buf_t *buf,
+ const unsigned char *data, size_t data_len)
+{
+ size_t remaining_len = 0;
+ const unsigned char *ptr = ares__buf_fetch(buf, &remaining_len);
+
+ if (ptr == NULL || data == NULL || data_len == 0) {
+ return ARES_EFORMERR;
+ }
+
+ if (data_len > remaining_len) {
+ return ARES_EBADRESP;
+ }
+
+ if (memcmp(ptr, data, data_len) == 0) {
+ return ARES_EBADRESP;
+ }
+
+ return ARES_SUCCESS;
+}
+
+size_t ares__buf_len(const ares__buf_t *buf)
+{
+ size_t len = 0;
+ ares__buf_fetch(buf, &len);
+ return len;
+}
+
+const unsigned char *ares__buf_peek(const ares__buf_t *buf, size_t *len)
+{
+ return ares__buf_fetch(buf, len);
+}
+
+size_t ares__buf_get_position(const ares__buf_t *buf)
+{
+ if (buf == NULL) {
+ return 0;
+ }
+ return buf->offset;
+}
+
+ares_status_t ares__buf_set_position(ares__buf_t *buf, size_t idx)
+{
+ if (buf == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ if (idx > buf->data_len) {
+ return ARES_EFORMERR;
+ }
+
+ buf->offset = idx;
+ return ARES_SUCCESS;
+}
+
+#define ARES_DNS_HEADER_SIZE 12
+
+ares_status_t ares__buf_parse_dns_name(ares__buf_t *buf, char **name,
+ ares_bool_t is_hostname)
+{
+ size_t save_offset = 0;
+ unsigned char c;
+ ares_status_t status;
+ ares__buf_t *namebuf = NULL;
+ size_t label_start = ares__buf_get_position(buf);
+
+ if (buf == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ if (name != NULL) {
+ namebuf = ares__buf_create();
+ if (namebuf == NULL) {
+ status = ARES_ENOMEM;
+ goto fail;
+ }
+ }
+
+ /* XXX: LibraryTest.ExpandName and LibraryTest.ExpandNameFailure are not
+ * complete DNS messages but rather non-valid minimized snippets to try
+ * to test the old parser, so we have to turn off this sanity check
+ * it appears until these test cases are rewritten
+ */
+#if 0
+ if (ares__buf_get_position(buf) < ARES_DNS_HEADER_SIZE) {
+ status = ARES_EFORMERR;
+ goto fail;
+ }
+#endif
+ /* The compression scheme allows a domain name in a message to be
+ * represented as either:
+ *
+ * - a sequence of labels ending in a zero octet
+ * - a pointer
+ * - a sequence of labels ending with a pointer
+ */
+ while (1) {
+ /* Keep track of the minimum label starting position to prevent forward
+ * jumping */
+ if (label_start > ares__buf_get_position(buf)) {
+ label_start = ares__buf_get_position(buf);
+ }
+
+ status = ares__buf_fetch_bytes(buf, &c, 1);
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+
+ /* Pointer/Redirect */
+ if ((c & 0xc0) == 0xc0) {
+ /* The pointer takes the form of a two octet sequence:
+ *
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ * | 1 1| OFFSET |
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ *
+ * The first two bits are ones. This allows a pointer to be distinguished
+ * from a label, since the label must begin with two zero bits because
+ * labels are restricted to 63 octets or less. (The 10 and 01
+ * combinations are reserved for future use.) The OFFSET field specifies
+ * an offset from the start of the message (i.e., the first octet of the
+ * ID field in the domain header). A zero offset specifies the first byte
+ * of the ID field, etc.
+ */
+ size_t offset = (size_t)((c & 0x3F) << 8);
+
+ /* Fetch second byte of the redirect length */
+ status = ares__buf_fetch_bytes(buf, &c, 1);
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+
+ offset |= ((size_t)c);
+
+ /* According to RFC 1035 4.1.4:
+ * In this scheme, an entire domain name or a list of labels at
+ * the end of a domain name is replaced with a pointer to a prior
+ * occurance of the same name.
+ * Note the word "prior", meaning it must go backwards. This was
+ * confirmed via the ISC BIND code that it also prevents forward
+ * pointers.
+ */
+ if (offset >= label_start) {
+ status = ARES_EBADNAME;
+ goto fail;
+ }
+
+ /* First time we make a jump, save the current position */
+ if (save_offset == 0) {
+ save_offset = ares__buf_get_position(buf);
+ }
+
+ status = ares__buf_set_position(buf, offset);
+ if (status != ARES_SUCCESS) {
+ status = ARES_EBADNAME;
+ goto fail;
+ }
+
+ continue;
+ } else if ((c & 0xc0) != 0) {
+ /* 10 and 01 are reserved */
+ status = ARES_EBADNAME;
+ goto fail;
+ } else if (c == 0) {
+ /* termination via zero octet*/
+ break;
+ }
+
+ /* New label */
+
+ /* Labels are separated by periods */
+ if (ares__buf_len(namebuf) != 0 && name != NULL) {
+ status = ares__buf_append_byte(namebuf, '.');
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+ }
+
+ status = ares__buf_fetch_dnsname_into_buf(buf, namebuf, c, is_hostname);
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+ }
+
+ /* Restore offset read after first redirect/pointer as this is where the DNS
+ * message continues */
+ if (save_offset) {
+ ares__buf_set_position(buf, save_offset);
+ }
+
+ if (name != NULL) {
+ *name = ares__buf_finish_str(namebuf, NULL);
+ if (*name == NULL) {
+ status = ARES_ENOMEM;
+ goto fail;
+ }
+ }
+
+ return ARES_SUCCESS;
+
+fail:
+ /* We want badname response if we couldn't parse */
+ if (status == ARES_EBADRESP) {
+ status = ARES_EBADNAME;
+ }
+
+ ares__buf_destroy(namebuf);
+ return status;
+}
+
+ares_status_t ares__buf_parse_dns_binstr(ares__buf_t *buf, size_t remaining_len,
+ unsigned char **bin, size_t *bin_len,
+ ares_bool_t allow_multiple)
+{
+ unsigned char len;
+ ares_status_t status;
+ ares__buf_t *binbuf = NULL;
+ size_t orig_len = ares__buf_len(buf);
+
+ if (buf == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ if (remaining_len == 0) {
+ return ARES_EBADRESP;
+ }
+
+ binbuf = ares__buf_create();
+ if (binbuf == NULL) {
+ return ARES_ENOMEM;
+ }
+
+ while (orig_len - ares__buf_len(buf) < remaining_len) {
+ status = ares__buf_fetch_bytes(buf, &len, 1);
+ if (status != ARES_SUCCESS) {
+ break;
+ }
+
+ /* XXX: Maybe we should scan to make sure it is printable? */
+ if (bin != NULL) {
+ status = ares__buf_fetch_bytes_into_buf(buf, binbuf, len);
+ } else {
+ status = ares__buf_consume(buf, len);
+ }
+
+ if (status != ARES_SUCCESS) {
+ break;
+ }
+
+ if (!allow_multiple) {
+ break;
+ }
+ }
+
+
+ if (status != ARES_SUCCESS) {
+ ares__buf_destroy(binbuf);
+ } else {
+ if (bin != NULL) {
+ size_t mylen = 0;
+ /* NOTE: we use ares__buf_finish_str() here as we guarantee NULL
+ * Termination even though we are technically returning binary data.
+ */
+ *bin = (unsigned char *)ares__buf_finish_str(binbuf, &mylen);
+ *bin_len = mylen;
+ }
+ }
+
+ return status;
+}
+
+ares_status_t ares__buf_parse_dns_str(ares__buf_t *buf, size_t remaining_len,
+ char **str, ares_bool_t allow_multiple)
+{
+ size_t len;
+ return ares__buf_parse_dns_binstr(buf, remaining_len, (unsigned char **)str,
+ &len, allow_multiple);
+}
diff --git a/src/lib/ares__buf.h b/src/lib/ares__buf.h
new file mode 100644
index 0000000..6fc9c90
--- /dev/null
+++ b/src/lib/ares__buf.h
@@ -0,0 +1,416 @@
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#ifndef __ARES__BUF_H
+#define __ARES__BUF_H
+
+/*! \addtogroup ares__buf Safe Data Builder and buffer
+ *
+ * This is a buffer building and parsing framework with a focus on security over
+ * performance. All data to be read from the buffer will perform explicit length
+ * validation and return a success/fail result. There are also various helpers
+ * for writing data to the buffer which dynamically grows.
+ *
+ * All operations that fetch or consume data from the buffer will move forward
+ * the internal pointer, thus marking the data as processed which may no longer
+ * be accessible after certain operations (such as append).
+ *
+ * The helpers for this object are meant to be added as needed. If you can't
+ * find it, write it!
+ *
+ * @{
+ */
+struct ares__buf;
+
+/*! Opaque data type for generic hash table implementation */
+typedef struct ares__buf ares__buf_t;
+
+/*! Create a new buffer object that dynamically allocates buffers for data.
+ *
+ * \return initialized buffer object or NULL if out of memory.
+ */
+ares__buf_t *ares__buf_create(void);
+
+/*! Create a new buffer object that uses a user-provided data pointer. The
+ * data provided will not be manipulated, and cannot be appended to. This
+ * is strictly used for parsing.
+ *
+ * \param[in] data Data to provide to buffer, must not be NULL.
+ * \param[in] data_len Size of buffer provided, must be > 0
+ *
+ * \return initialized buffer object or NULL if out of memory or misuse.
+ */
+ares__buf_t *ares__buf_create_const(const unsigned char *data, size_t data_len);
+
+
+/*! Destroy an initialized buffer object.
+ *
+ * \param[in] buf Initialized buf object
+ */
+void ares__buf_destroy(ares__buf_t *buf);
+
+
+/*! Append multiple bytes to a dynamic buffer object
+ *
+ * \param[in] buf Initialized buffer object
+ * \param[in] data Data to copy to buffer object
+ * \param[in] data_len Length of data to copy to buffer object.
+ * \return ARES_SUCCESS or one of the c-ares error codes
+ */
+ares_status_t ares__buf_append(ares__buf_t *buf, const unsigned char *data,
+ size_t data_len);
+
+/*! Append a single byte to the dynamic buffer object
+ *
+ * \param[in] buf Initialized buffer object
+ * \param[in] byte Single byte to append to buffer object.
+ * \return ARES_SUCCESS or one of the c-ares error codes
+ */
+ares_status_t ares__buf_append_byte(ares__buf_t *buf, unsigned char byte);
+
+
+/*! Start a dynamic append operation that returns a buffer suitable for
+ * writing. A desired minimum length is passed in, and the actual allocated
+ * buffer size is returned which may be greater than the requested size.
+ * No operation other than ares__buf_append_finish() is allowed on the
+ * buffer after this request.
+ *
+ * \param[in] buf Initialized buffer object
+ * \param[in,out] len Desired non-zero length passed in, actual buffer size
+ * returned.
+ * \return Pointer to writable buffer or NULL on failure (usage, out of mem)
+ */
+unsigned char *ares__buf_append_start(ares__buf_t *buf, size_t *len);
+
+/*! Finish a dynamic append operation. Called after
+ * ares__buf_append_start() once desired data is written.
+ *
+ * \param[in] buf Initialized buffer object.
+ * \param[in] len Length of data written. May be zero to terminate
+ * operation. Must not be greater than returned from
+ * ares__buf_append_start().
+ */
+void ares__buf_append_finish(ares__buf_t *buf, size_t len);
+
+/*! Clean up ares__buf_t and return allocated pointer to unprocessed data. It
+ * is the responsibility of the caller to ares_free() the returned buffer.
+ * The passed in buf parameter is invalidated by this call.
+ *
+ * \param[in] buf Initialized buffer object. Can not be a "const" buffer.
+ * \param[out] len Length of data returned
+ * \return pointer to unprocessed data (may be zero length) or NULL on error.
+ */
+unsigned char *ares__buf_finish_bin(ares__buf_t *buf, size_t *len);
+
+/*! Clean up ares__buf_t and return allocated pointer to unprocessed data and
+ * return it as a string (null terminated). It is the responsibility of the
+ * caller to ares_free() the returned buffer. The passed in buf parameter is
+ * invalidated by this call.
+ *
+ * This function in no way validates the data in this buffer is actually
+ * a string, that characters are printable, or that there aren't multiple
+ * NULL terminators. It is assumed that the caller will either validate that
+ * themselves or has built this buffer with only a valid character set.
+ *
+ * \param[in] buf Initialized buffer object. Can not be a "const" buffer.
+ * \param[out] len Optional. Length of data returned, or NULL if not needed.
+ * \return pointer to unprocessed data or NULL on error.
+ */
+char *ares__buf_finish_str(ares__buf_t *buf, size_t *len);
+
+/*! Tag a position to save in the buffer in case parsing needs to rollback,
+ * such as if insufficient data is available, but more data may be added in
+ * the future. Only a single tag can be set per buffer object. Setting a
+ * tag will override any pre-existing tag.
+ *
+ * \param[in] buf Initialized buffer object
+ */
+void ares__buf_tag(ares__buf_t *buf);
+
+/*! Rollback to a tagged position. Will automatically clear the tag.
+ *
+ * \param[in] buf Initialized buffer object
+ * \return ARES_SUCCESS or one of the c-ares error codes
+ */
+ares_status_t ares__buf_tag_rollback(ares__buf_t *buf);
+
+/*! Clear the tagged position without rolling back. You should do this any
+ * time a tag is no longer needed as future append operations can reclaim
+ * buffer space.
+ *
+ * \param[in] buf Initialized buffer object
+ * \return ARES_SUCCESS or one of the c-ares error codes
+ */
+ares_status_t ares__buf_tag_clear(ares__buf_t *buf);
+
+/*! Fetch the buffer and length of data starting from the tagged position up
+ * to the _current_ position. It will not unset the tagged position. The
+ * data may be invalidated by any future ares__buf_*() calls.
+ *
+ * \param[in] buf Initialized buffer object
+ * \param[out] len Length between tag and current offset in buffer
+ * \return NULL on failure (such as no tag), otherwise pointer to start of
+ * buffer
+ */
+const unsigned char *ares__buf_tag_fetch(const ares__buf_t *buf, size_t *len);
+
+/*! Consume the given number of bytes without reading them.
+ *
+ * \param[in] buf Initialized buffer object
+ * \param[in] len Length to consume
+ * \return ARES_SUCCESS or one of the c-ares error codes
+ */
+ares_status_t ares__buf_consume(ares__buf_t *buf, size_t len);
+
+/*! Fetch a 16bit Big Endian number from the buffer.
+ *
+ * \param[in] buf Initialized buffer object
+ * \param[out] u16 Buffer to hold 16bit integer
+ * \return ARES_SUCCESS or one of the c-ares error codes
+ */
+ares_status_t ares__buf_fetch_be16(ares__buf_t *buf, unsigned short *u16);
+
+/*! Fetch a 32bit Big Endian number from the buffer.
+ *
+ * \param[in] buf Initialized buffer object
+ * \param[out] u32 Buffer to hold 32bit integer
+ * \return ARES_SUCCESS or one of the c-ares error codes
+ */
+ares_status_t ares__buf_fetch_be32(ares__buf_t *buf, unsigned int *u32);
+
+
+/*! Fetch the requested number of bytes into the provided buffer
+ *
+ * \param[in] buf Initialized buffer object
+ * \param[out] bytes Buffer to hold data
+ * \param[in] len Requested number of bytes (must be > 0)
+ * \return ARES_SUCCESS or one of the c-ares error codes
+ */
+ares_status_t ares__buf_fetch_bytes(ares__buf_t *buf, unsigned char *bytes,
+ size_t len);
+
+
+/*! Fetch the requested number of bytes and return a new buffer that must be
+ * ares_free()'d by the caller.
+ *
+ * \param[in] buf Initialized buffer object
+ * \param[in] len Requested number of bytes (must be > 0)
+ * \param[out] bytes Pointer passed by reference. Will be allocated.
+ * \return ARES_SUCCESS or one of the c-ares error codes
+ */
+ares_status_t ares__buf_fetch_bytes_dup(ares__buf_t *buf, size_t len,
+ unsigned char **bytes);
+
+/*! Fetch the requested number of bytes and place them into the provided
+ * dest buffer object.
+ *
+ * \param[in] buf Initialized buffer object
+ * \param[out] dest Buffer object to append bytes.
+ * \param[in] len Requested number of bytes (must be > 0)
+ * \return ARES_SUCCESS or one of the c-ares error codes
+ */
+ares_status_t ares__buf_fetch_bytes_into_buf(ares__buf_t *buf,
+ ares__buf_t *dest, size_t len);
+
+/*! Fetch the requested number of bytes and return a new buffer that must be
+ * ares_free()'d by the caller. The returned buffer is a null terminated
+ * string.
+ *
+ * \param[in] buf Initialized buffer object
+ * \param[in] len Requested number of bytes (must be > 0)
+ * \param[out] str Pointer passed by reference. Will be allocated.
+ * \return ARES_SUCCESS or one of the c-ares error codes
+ */
+ares_status_t ares__buf_fetch_str_dup(ares__buf_t *buf, size_t len, char **str);
+
+/*! Consume whitespace characters (0x09, 0x0B, 0x0C, 0x0D, 0x20, and optionally
+ * 0x0A).
+ *
+ * \param[in] buf Initialized buffer object
+ * \param[in] include_linefeed 1 to include consuming 0x0A, 0 otherwise.
+ * \return number of whitespace characters consumed
+ */
+size_t ares__buf_consume_whitespace(ares__buf_t *buf, int include_linefeed);
+
+
+/*! Consume any non-whitespace character (anything other than 0x09, 0x0B, 0x0C,
+ * 0x0D, 0x20, and 0x0A).
+ *
+ * \param[in] buf Initialized buffer object
+ * \return number of characters consumed
+ */
+size_t ares__buf_consume_nonwhitespace(ares__buf_t *buf);
+
+/*! Consume from the current position until the end of the line, and optionally
+ * the end of line character (0x0A) itself.
+ *
+ * \param[in] buf Initialized buffer object
+ * \param[in] include_linefeed 1 to include consuming 0x0A, 0 otherwise.
+ * \return number of characters consumed
+ */
+size_t ares__buf_consume_line(ares__buf_t *buf, int include_linefeed);
+
+
+/*! Check the unprocessed buffer to see if it begins with the sequence of
+ * characters provided.
+ *
+ * \param[in] buf Initialized buffer object
+ * \param[in] data Bytes of data to compare.
+ * \param[in] data_len Length of data to compare.
+ * \return ARES_SUCCESS or one of the c-ares error codes
+ */
+ares_status_t ares__buf_begins_with(const ares__buf_t *buf,
+ const unsigned char *data, size_t data_len);
+
+
+/*! Size of unprocessed remaining data length
+ *
+ * \param[in] buf Initialized buffer object
+ * \return length remaining
+ */
+size_t ares__buf_len(const ares__buf_t *buf);
+
+/*! Retrieve a pointer to the currently unprocessed data. Generally this isn't
+ * recommended to be used in practice. The returned pointer may be invalidated
+ * by any future ares__buf_*() calls.
+ *
+ * \param[in] buf Initialized buffer object
+ * \param[out] len Length of available data
+ * \return Pointer to buffer of unprocessed data
+ */
+const unsigned char *ares__buf_peek(const ares__buf_t *buf, size_t *len);
+
+
+/*! Wipe any processed data from the beginning of the buffer. This will
+ * move any remaining data to the front of the internally allocated buffer.
+ *
+ * Can not be used on const buffer objects.
+ *
+ * Typically not needed to call, as any new append operation will automatically
+ * call this function if there is insufficient space to append the data in
+ * order to try to avoid another memory allocation.
+ *
+ * It may be useful to call in order to ensure the current message being
+ * processed is in the beginning of the buffer if there is an intent to use
+ * ares__buf_set_position() and ares__buf_get_position() as may be necessary
+ * when processing DNS compressed names.
+ *
+ * If there is an active tag, it will NOT clear the tag, it will use the tag
+ * as the start of the unprocessed data rather than the current offset. If
+ * a prior tag is no longer needed, may be wise to call ares__buf_tag_clear().
+ *
+ * \param[in] buf Initialized buffer object
+ */
+void ares__buf_reclaim(ares__buf_t *buf);
+
+/*! Set the current offset within the internal buffer.
+ *
+ * Typically this should not be used, if possible, use the ares__buf_tag*()
+ * operations instead.
+ *
+ * One exception is DNS name compression which may backwards reference to
+ * an index in the message. It may be necessary in such a case to call
+ * ares__buf_reclaim() if using a dynamic (non-const) buffer before processing
+ * such a message.
+ *
+ * \param[in] buf Initialized buffer object
+ * \param[in] idx Index to set position
+ * \return ARES_SUCCESS if valid index
+ */
+ares_status_t ares__buf_set_position(ares__buf_t *buf, size_t idx);
+
+/*! Get the current offset within the internal buffer.
+ *
+ * Typically this should not be used, if possible, use the ares__buf_tag*()
+ * operations instead.
+ *
+ * This can be used to get the current position, useful for saving if a
+ * jump via ares__buf_set_position() is performed and need to restore the
+ * current position for future operations.
+ *
+ * \param[in] buf Initialized buffer object
+ * \return index of current position
+ */
+size_t ares__buf_get_position(const ares__buf_t *buf);
+
+
+/*! Parse a compressed DNS name as defined in RFC1035 starting at the current
+ * offset within the buffer.
+ *
+ * It is assumed that either a const buffer is being used, or before
+ * the message processing was started that ares__buf_reclaim() was called.
+ *
+ * \param[in] buf Initialized buffer object
+ * \param[out] name Pointer passed by reference to be filled in with
+ * allocated string of the parsed name that must be
+ * ares_free()'d by the caller.
+ * \param[in] is_hostname if ARES_TRUE, will validate the character set for
+ * a valid hostname or will return error.
+ * \return ARES_SUCCESS on success
+ */
+ares_status_t ares__buf_parse_dns_name(ares__buf_t *buf, char **name,
+ ares_bool_t is_hostname);
+
+/*! Parse a character-string as defined in RFC1035, as a null-terminated
+ * string.
+ *
+ * \param[in] buf initialized buffer object
+ * \param[in] remaining_len maximum length that should be used for parsing
+ * the string, this is often less than the remaining
+ * buffer and is based on the RR record length.
+ * \param[out] str Pointer passed by reference to be filled in with
+ * allocated string of the parsed that must be
+ * ares_free()'d by the caller.
+ * \param[in] allow_multiple ARES_TRUE if it should attempt to parse multiple
+ * strings back to back, and will concatenate in
+ * the returned str.
+ * \return ARES_SUCCESS on success
+ */
+ares_status_t ares__buf_parse_dns_str(ares__buf_t *buf, size_t remaining_len,
+ char **name, ares_bool_t allow_multiple);
+
+/*! Parse a character-string as defined in RFC1035, as binary, however for
+ * convenience this does guarantee a NULL terminator (that is not included)
+ * in the returned length.
+ *
+ * \param[in] buf initialized buffer object
+ * \param[in] remaining_len maximum length that should be used for parsing
+ * the string, this is often less than the remaining
+ * buffer and is based on the RR record length.
+ * \param[out] bin Pointer passed by reference to be filled in with
+ * allocated string of the parsed that must be
+ * ares_free()'d by the caller.
+ * \param[out] bin_len Length of returned string.
+ * \param[in] allow_multiple ARES_TRUE if it should attempt to parse multiple
+ * strings back to back, and will concatenate in
+ * the returned str.
+ * \return ARES_SUCCESS on success
+ */
+ares_status_t ares__buf_parse_dns_binstr(ares__buf_t *buf, size_t remaining_len,
+ unsigned char **bin, size_t *bin_len,
+ ares_bool_t allow_multiple);
+/*! @} */
+
+#endif /* __ARES__BUF_H */
diff --git a/src/lib/ares__close_sockets.c b/src/lib/ares__close_sockets.c
index 0477174..0cc28d4 100644
--- a/src/lib/ares__close_sockets.c
+++ b/src/lib/ares__close_sockets.c
@@ -1,61 +1,102 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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:
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
#include "ares.h"
#include "ares_private.h"
+#include <assert.h>
+
+void ares__close_connection(struct server_connection *conn)
+{
+ struct server_state *server = conn->server;
+ ares_channel channel = server->channel;
+
+ if (conn->is_tcp) {
+ /* Reset any existing input and output buffer. */
+ ares__buf_consume(server->tcp_parser, ares__buf_len(server->tcp_parser));
+ ares__buf_consume(server->tcp_send, ares__buf_len(server->tcp_send));
+ server->tcp_connection_generation = ++channel->tcp_connection_generation;
+ server->tcp_conn = NULL;
+ }
+
+
+ SOCK_STATE_CALLBACK(channel, conn->fd, 0, 0);
+ ares__close_socket(channel, conn->fd);
+ ares__llist_node_claim(
+ ares__htable_asvp_get_direct(channel->connnode_by_socket, conn->fd));
+ ares__htable_asvp_remove(channel->connnode_by_socket, conn->fd);
+
+#ifndef NDEBUG
+ assert(ares__llist_len(conn->queries_to_conn) == 0);
+#endif
+ ares__llist_destroy(conn->queries_to_conn);
+ ares_free(conn);
+}
+
+void ares__close_sockets(struct server_state *server)
+{
+ ares__llist_node_t *node;
-void ares__close_sockets(ares_channel channel, struct server_state *server)
+ while ((node = ares__llist_node_first(server->connections)) != NULL) {
+ struct server_connection *conn = ares__llist_node_val(node);
+ ares__close_connection(conn);
+ }
+}
+
+void ares__check_cleanup_conn(ares_channel channel, ares_socket_t fd)
{
- struct send_request *sendreq;
-
- /* Free all pending output buffers. */
- while (server->qhead)
- {
- /* Advance server->qhead; pull out query as we go. */
- sendreq = server->qhead;
- server->qhead = sendreq->next;
- if (sendreq->data_storage != NULL)
- ares_free(sendreq->data_storage);
- ares_free(sendreq);
- }
- server->qtail = NULL;
-
- /* Reset any existing input buffer. */
- if (server->tcp_buffer)
- ares_free(server->tcp_buffer);
- server->tcp_buffer = NULL;
- server->tcp_lenbuf_pos = 0;
-
- /* Reset brokenness */
- server->is_broken = 0;
-
- /* Close the TCP and UDP sockets. */
- if (server->tcp_socket != ARES_SOCKET_BAD)
- {
- SOCK_STATE_CALLBACK(channel, server->tcp_socket, 0, 0);
- ares__close_socket(channel, server->tcp_socket);
- server->tcp_socket = ARES_SOCKET_BAD;
- server->tcp_connection_generation = ++channel->tcp_connection_generation;
- }
- if (server->udp_socket != ARES_SOCKET_BAD)
- {
- SOCK_STATE_CALLBACK(channel, server->udp_socket, 0, 0);
- ares__close_socket(channel, server->udp_socket);
- server->udp_socket = ARES_SOCKET_BAD;
- }
+ ares__llist_node_t *node;
+ struct server_connection *conn;
+ ares_bool_t do_cleanup = ARES_FALSE;
+
+ node = ares__htable_asvp_get_direct(channel->connnode_by_socket, fd);
+ if (node == NULL) {
+ return;
+ }
+
+ conn = ares__llist_node_val(node);
+
+ if (ares__llist_len(conn->queries_to_conn)) {
+ return;
+ }
+
+ /* If we are configured not to stay open, close it out */
+ if (!(channel->flags & ARES_FLAG_STAYOPEN)) {
+ do_cleanup = ARES_TRUE;
+ }
+
+ /* If the udp connection hit its max queries, always close it */
+ if (!conn->is_tcp && channel->udp_max_queries > 0 &&
+ conn->total_queries >= channel->udp_max_queries) {
+ do_cleanup = ARES_TRUE;
+ }
+
+ if (do_cleanup) {
+ ares__close_connection(conn);
+ }
}
diff --git a/src/lib/ares__get_hostent.c b/src/lib/ares__get_hostent.c
index 367f390..9568b3b 100644
--- a/src/lib/ares__get_hostent.c
+++ b/src/lib/ares__get_hostent.c
@@ -1,17 +1,28 @@
-
-/* Copyright 1998, 2011 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 1998, 2011 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -28,17 +39,23 @@
#include "ares.h"
#include "ares_inet_net_pton.h"
-#include "ares_nowarn.h"
#include "ares_private.h"
-int ares__get_hostent(FILE *fp, int family, struct hostent **host)
+ares_status_t ares__get_hostent(FILE *fp, int family, struct hostent **host)
{
- char *line = NULL, *p, *q, **alias;
- char *txtaddr, *txthost, *txtalias;
- int status;
- size_t addrlen, linesize, naliases;
+ char *line = NULL;
+ char *p;
+ char *q;
+ char **alias;
+ const char *txtaddr;
+ const char *txthost;
+ char *txtalias;
+ ares_status_t status;
+ size_t addrlen;
+ size_t linesize;
+ size_t naliases;
struct ares_addr addr;
- struct hostent *hostent = NULL;
+ struct hostent *hostent = NULL;
*host = NULL; /* Assume failure */
@@ -52,209 +69,221 @@ int ares__get_hostent(FILE *fp, int family, struct hostent **host)
return ARES_EBADFAMILY;
}
- while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
- {
-
- /* Trim line comment. */
- p = line;
- while (*p && (*p != '#'))
- p++;
- *p = '\0';
+ while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) {
+ /* Trim line comment. */
+ p = line;
+ while (*p && (*p != '#')) {
+ p++;
+ }
+ *p = '\0';
- /* Trim trailing whitespace. */
- q = p - 1;
- while ((q >= line) && ISSPACE(*q))
- q--;
- *++q = '\0';
+ /* Trim trailing whitespace. */
+ q = p - 1;
+ while ((q >= line) && ISSPACE(*q)) {
+ q--;
+ }
+ *++q = '\0';
- /* Skip leading whitespace. */
- p = line;
- while (*p && ISSPACE(*p))
- p++;
- if (!*p)
- /* Ignore line if empty. */
- continue;
+ /* Skip leading whitespace. */
+ p = line;
+ while (*p && ISSPACE(*p)) {
+ p++;
+ }
+ if (!*p) {
+ /* Ignore line if empty. */
+ continue;
+ }
- /* Pointer to start of IPv4 or IPv6 address part. */
- txtaddr = p;
+ /* Pointer to start of IPv4 or IPv6 address part. */
+ txtaddr = p;
- /* Advance past address part. */
- while (*p && !ISSPACE(*p))
- p++;
- if (!*p)
- /* Ignore line if reached end of line. */
- continue;
+ /* Advance past address part. */
+ while (*p && !ISSPACE(*p)) {
+ p++;
+ }
+ if (!*p) {
+ /* Ignore line if reached end of line. */
+ continue;
+ }
- /* Null terminate address part. */
- *p = '\0';
+ /* Null terminate address part. */
+ *p = '\0';
- /* Advance to host name */
+ /* Advance to host name */
+ p++;
+ while (*p && ISSPACE(*p)) {
p++;
- while (*p && ISSPACE(*p))
- p++;
- if (!*p)
- /* Ignore line if reached end of line. */
- continue; /* LCOV_EXCL_LINE: trailing whitespace already stripped */
-
- /* Pointer to start of host name. */
- txthost = p;
+ }
+ if (!*p) {
+ /* Ignore line if reached end of line. */
+ continue; /* LCOV_EXCL_LINE: trailing whitespace already stripped */
+ }
- /* Advance past host name. */
- while (*p && !ISSPACE(*p))
- p++;
+ /* Pointer to start of host name. */
+ txthost = p;
- /* Pointer to start of first alias. */
- txtalias = NULL;
- if (*p)
- {
- q = p + 1;
- while (*q && ISSPACE(*q))
- q++;
- if (*q)
- txtalias = q;
- }
+ /* Advance past host name. */
+ while (*p && !ISSPACE(*p)) {
+ p++;
+ }
- /* Null terminate host name. */
- *p = '\0';
+ /* Pointer to start of first alias. */
+ txtalias = NULL;
+ if (*p) {
+ q = p + 1;
+ while (*q && ISSPACE(*q)) {
+ q++;
+ }
+ if (*q) {
+ txtalias = q;
+ }
+ }
- /* find out number of aliases. */
- naliases = 0;
- if (txtalias)
- {
- p = txtalias;
- while (*p)
- {
- while (*p && !ISSPACE(*p))
- p++;
- while (*p && ISSPACE(*p))
- p++;
- naliases++;
- }
- }
+ /* Null terminate host name. */
+ *p = '\0';
- /* Convert address string to network address for the requested family. */
- addrlen = 0;
- addr.family = AF_UNSPEC;
- addr.addrV4.s_addr = INADDR_NONE;
- if ((family == AF_INET) || (family == AF_UNSPEC))
- {
- if (ares_inet_pton(AF_INET, txtaddr, &addr.addrV4) > 0)
- {
- /* Actual network address family and length. */
- addr.family = AF_INET;
- addrlen = sizeof(addr.addrV4);
- }
+ /* find out number of aliases. */
+ naliases = 0;
+ if (txtalias) {
+ p = txtalias;
+ while (*p) {
+ while (*p && !ISSPACE(*p)) {
+ p++;
}
- if ((family == AF_INET6) || ((family == AF_UNSPEC) && (!addrlen)))
- {
- if (ares_inet_pton(AF_INET6, txtaddr, &addr.addrV6) > 0)
- {
- /* Actual network address family and length. */
- addr.family = AF_INET6;
- addrlen = sizeof(addr.addrV6);
- }
+ while (*p && ISSPACE(*p)) {
+ p++;
}
- if (!addrlen)
- /* Ignore line if invalid address string for the requested family. */
- continue;
+ naliases++;
+ }
+ }
+
+ /* Convert address string to network address for the requested family. */
+ addrlen = 0;
+ addr.family = AF_UNSPEC;
+ addr.addrV4.s_addr = INADDR_NONE;
+ if ((family == AF_INET || family == AF_UNSPEC) &&
+ ares_inet_pton(AF_INET, txtaddr, &addr.addrV4) > 0) {
+ /* Actual network address family and length. */
+ addr.family = AF_INET;
+ addrlen = sizeof(addr.addrV4);
+ }
+ if ((family == AF_INET6 || (family == AF_UNSPEC && !addrlen)) &&
+ ares_inet_pton(AF_INET6, txtaddr, &addr.addrV6) > 0) {
+ /* Actual network address family and length. */
+ addr.family = AF_INET6;
+ addrlen = sizeof(addr.addrV6);
+ }
+ if (!addrlen) {
+ /* Ignore line if invalid address string for the requested family. */
+ continue;
+ }
- /*
- ** Actual address family possible values are AF_INET and AF_INET6 only.
- */
+ /*
+ ** Actual address family possible values are AF_INET and AF_INET6 only.
+ */
- /* Allocate memory for the hostent structure. */
- hostent = ares_malloc(sizeof(struct hostent));
- if (!hostent)
- break;
+ /* Allocate memory for the hostent structure. */
+ hostent = ares_malloc(sizeof(struct hostent));
+ if (!hostent) {
+ break;
+ }
- /* Initialize fields for out of memory condition. */
- hostent->h_aliases = NULL;
- hostent->h_addr_list = NULL;
+ /* Initialize fields for out of memory condition. */
+ hostent->h_aliases = NULL;
+ hostent->h_addr_list = NULL;
- /* Copy official host name. */
- hostent->h_name = ares_strdup(txthost);
- if (!hostent->h_name)
- break;
+ /* Copy official host name. */
+ hostent->h_name = ares_strdup(txthost);
+ if (!hostent->h_name) {
+ break;
+ }
- /* Copy network address. */
- hostent->h_addr_list = ares_malloc(2 * sizeof(char *));
- if (!hostent->h_addr_list)
- break;
- hostent->h_addr_list[1] = NULL;
- hostent->h_addr_list[0] = ares_malloc(addrlen);
- if (!hostent->h_addr_list[0])
- break;
- if (addr.family == AF_INET)
- memcpy(hostent->h_addr_list[0], &addr.addrV4, sizeof(addr.addrV4));
- else
- memcpy(hostent->h_addr_list[0], &addr.addrV6, sizeof(addr.addrV6));
+ /* Copy network address. */
+ hostent->h_addr_list = ares_malloc(2 * sizeof(char *));
+ if (!hostent->h_addr_list) {
+ break;
+ }
+ hostent->h_addr_list[1] = NULL;
+ hostent->h_addr_list[0] = ares_malloc(addrlen);
+ if (!hostent->h_addr_list[0]) {
+ break;
+ }
+ if (addr.family == AF_INET) {
+ memcpy(hostent->h_addr_list[0], &addr.addrV4, sizeof(addr.addrV4));
+ } else {
+ memcpy(hostent->h_addr_list[0], &addr.addrV6, sizeof(addr.addrV6));
+ }
- /* Copy aliases. */
- hostent->h_aliases = ares_malloc((naliases + 1) * sizeof(char *));
- if (!hostent->h_aliases)
- break;
- alias = hostent->h_aliases;
- while (naliases)
- *(alias + naliases--) = NULL;
- *alias = NULL;
- while (txtalias)
- {
- p = txtalias;
- while (*p && !ISSPACE(*p))
- p++;
- q = p;
- while (*q && ISSPACE(*q))
- q++;
- *p = '\0';
- if ((*alias = ares_strdup(txtalias)) == NULL)
- break;
- alias++;
- txtalias = *q ? q : NULL;
- }
- if (txtalias)
- /* Alias memory allocation failure. */
+ /* Copy aliases. */
+ hostent->h_aliases = ares_malloc((naliases + 1) * sizeof(char *));
+ if (!hostent->h_aliases) {
+ break;
+ }
+ alias = hostent->h_aliases;
+ while (naliases) {
+ *(alias + naliases--) = NULL;
+ }
+ *alias = NULL;
+ while (txtalias) {
+ p = txtalias;
+ while (*p && !ISSPACE(*p)) {
+ p++;
+ }
+ q = p;
+ while (*q && ISSPACE(*q)) {
+ q++;
+ }
+ *p = '\0';
+ if ((*alias = ares_strdup(txtalias)) == NULL) {
break;
+ }
+ alias++;
+ txtalias = *q ? q : NULL;
+ }
+ if (txtalias) {
+ /* Alias memory allocation failure. */
+ break;
+ }
- /* Copy actual network address family and length. */
- hostent->h_addrtype = aresx_sitoss(addr.family);
- hostent->h_length = aresx_uztoss(addrlen);
-
- /* Free line buffer. */
- ares_free(line);
+ /* Copy actual network address family and length. */
+ hostent->h_addrtype = addr.family;
+ hostent->h_length = (int)addrlen;
- /* Return hostent successfully */
- *host = hostent;
- return ARES_SUCCESS;
+ /* Free line buffer. */
+ ares_free(line);
- }
+ /* Return hostent successfully */
+ *host = hostent;
+ return ARES_SUCCESS;
+ }
/* If allocated, free line buffer. */
- if (line)
+ if (line) {
ares_free(line);
+ }
- if (status == ARES_SUCCESS)
- {
- /* Memory allocation failure; clean up. */
- if (hostent)
- {
- if (hostent->h_name)
- ares_free((char *) hostent->h_name);
- if (hostent->h_aliases)
- {
- for (alias = hostent->h_aliases; *alias; alias++)
- ares_free(*alias);
- ares_free(hostent->h_aliases);
- }
- if (hostent->h_addr_list)
- {
- if (hostent->h_addr_list[0])
- ares_free(hostent->h_addr_list[0]);
- ares_free(hostent->h_addr_list);
- }
- ares_free(hostent);
+ if (status == ARES_SUCCESS) {
+ /* Memory allocation failure; clean up. */
+ if (hostent) {
+ if (hostent->h_name) {
+ ares_free(hostent->h_name);
+ }
+ if (hostent->h_aliases) {
+ for (alias = hostent->h_aliases; *alias; alias++) {
+ ares_free(*alias);
}
- return ARES_ENOMEM;
+ ares_free(hostent->h_aliases);
+ }
+ if (hostent->h_addr_list) {
+ if (hostent->h_addr_list[0]) {
+ ares_free(hostent->h_addr_list[0]);
+ }
+ ares_free(hostent->h_addr_list);
+ }
+ ares_free(hostent);
}
+ return ARES_ENOMEM;
+ }
return status;
}
diff --git a/src/lib/ares__htable.c b/src/lib/ares__htable.c
new file mode 100644
index 0000000..c2a56ab
--- /dev/null
+++ b/src/lib/ares__htable.c
@@ -0,0 +1,359 @@
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#include "ares_setup.h"
+#include "ares.h"
+#include "ares_private.h"
+#include "ares__llist.h"
+#include "ares__htable.h"
+
+#define ARES__HTABLE_MAX_BUCKETS (1U << 24)
+#define ARES__HTABLE_MIN_BUCKETS (1U << 4)
+#define ARES__HTABLE_EXPAND_PERCENT 75
+
+struct ares__htable {
+ ares__htable_hashfunc_t hash;
+ ares__htable_bucket_key_t bucket_key;
+ ares__htable_bucket_free_t bucket_free;
+ ares__htable_key_eq_t key_eq;
+ unsigned int seed;
+ unsigned int size;
+ size_t num_keys;
+ /* NOTE: if we converted buckets into ares__slist_t we could guarantee on
+ * hash collisions we would have O(log n) worst case insert and search
+ * performance. (We'd also need to make key_eq into a key_cmp to
+ * support sort). That said, risk with a random hash seed is near zero,
+ * and ares__slist_t is heavier weight so I think using ares__llist_t is
+ * is an overall win. */
+ ares__llist_t **buckets;
+};
+
+static unsigned int ares__htable_generate_seed(ares__htable_t *htable)
+{
+ unsigned int seed = 0;
+
+ /* Mix stack address, heap address, and time to generate a random seed, it
+ * doesn't have to be super secure, just quick. Likelihood of a hash
+ * collision attack is very low with a small amount of effort */
+ seed |= (unsigned int)((size_t)htable & 0xFFFFFFFF);
+ seed |= (unsigned int)((size_t)&seed & 0xFFFFFFFF);
+ seed |= (unsigned int)time(NULL) & 0xFFFFFFFF;
+ return seed;
+}
+
+static void ares__htable_buckets_destroy(ares__llist_t **buckets,
+ unsigned int size,
+ unsigned char destroy_vals)
+{
+ unsigned int i;
+
+ if (buckets == NULL) {
+ return;
+ }
+
+ for (i = 0; i < size; i++) {
+ if (buckets[i] == NULL) {
+ continue;
+ }
+
+ if (!destroy_vals) {
+ ares__llist_replace_destructor(buckets[i], NULL);
+ }
+
+ ares__llist_destroy(buckets[i]);
+ }
+
+ ares_free(buckets);
+}
+
+void ares__htable_destroy(ares__htable_t *htable)
+{
+ if (htable == NULL) {
+ return;
+ }
+ ares__htable_buckets_destroy(htable->buckets, htable->size, 1);
+ ares_free(htable);
+}
+
+ares__htable_t *ares__htable_create(ares__htable_hashfunc_t hash_func,
+ ares__htable_bucket_key_t bucket_key,
+ ares__htable_bucket_free_t bucket_free,
+ ares__htable_key_eq_t key_eq)
+{
+ ares__htable_t *htable = NULL;
+
+ if (hash_func == NULL || bucket_key == NULL || bucket_free == NULL ||
+ key_eq == NULL) {
+ goto fail;
+ }
+
+ htable = ares_malloc_zero(sizeof(*htable));
+ if (htable == NULL) {
+ goto fail;
+ }
+
+ htable->hash = hash_func;
+ htable->bucket_key = bucket_key;
+ htable->bucket_free = bucket_free;
+ htable->key_eq = key_eq;
+ htable->seed = ares__htable_generate_seed(htable);
+ htable->size = ARES__HTABLE_MIN_BUCKETS;
+ htable->buckets = ares_malloc_zero(sizeof(*htable->buckets) * htable->size);
+
+ if (htable->buckets == NULL) {
+ goto fail;
+ }
+
+ return htable;
+
+fail:
+ ares__htable_destroy(htable);
+ return NULL;
+}
+
+/*! Grabs the Hashtable index from the key and length. The h index is
+ * the hash of the function reduced to the size of the bucket list.
+ * We are doing "hash & (size - 1)" since we are guaranteeing a power of
+ * 2 for size. This is equivalent to "hash % size", but should be more
+ * efficient */
+#define HASH_IDX(h, key) h->hash(key, h->seed) & (h->size - 1)
+
+static ares__llist_node_t *ares__htable_find(const ares__htable_t *htable,
+ unsigned int idx, const void *key)
+{
+ ares__llist_node_t *node = NULL;
+
+ for (node = ares__llist_node_first(htable->buckets[idx]); node != NULL;
+ node = ares__llist_node_next(node)) {
+ if (htable->key_eq(key, htable->bucket_key(ares__llist_node_val(node)))) {
+ break;
+ }
+ }
+
+ return node;
+}
+
+static ares_bool_t ares__htable_expand(ares__htable_t *htable)
+{
+ ares__llist_t **buckets = NULL;
+ unsigned int old_size = htable->size;
+ size_t i;
+
+ /* Not a failure, just won't expand */
+ if (old_size == ARES__HTABLE_MAX_BUCKETS) {
+ return ARES_TRUE;
+ }
+
+ htable->size <<= 1;
+
+ /* We must do this in 2 passes as we want it to be non-destructive in case
+ * there is a memory allocation failure. So we will actually use more
+ * memory doing it this way, but at least we might be able to gracefully
+ * recover */
+ buckets = ares_malloc_zero(sizeof(*buckets) * htable->size);
+ if (buckets == NULL) {
+ goto fail;
+ }
+
+ for (i = 0; i < old_size; i++) {
+ ares__llist_node_t *node;
+ for (node = ares__llist_node_first(htable->buckets[i]); node != NULL;
+ node = ares__llist_node_next(node)) {
+ void *val = ares__llist_node_val(node);
+ size_t idx = HASH_IDX(htable, htable->bucket_key(val));
+
+ if (buckets[idx] == NULL) {
+ buckets[idx] = ares__llist_create(htable->bucket_free);
+ }
+ if (buckets[idx] == NULL) {
+ goto fail;
+ }
+
+ if (ares__llist_insert_first(buckets[idx], val) == NULL) {
+ goto fail;
+ }
+ }
+ }
+
+ /* Swap out buckets */
+ ares__htable_buckets_destroy(htable->buckets, old_size, 0);
+ htable->buckets = buckets;
+ return ARES_TRUE;
+
+fail:
+ ares__htable_buckets_destroy(buckets, htable->size, 0);
+ htable->size = old_size;
+
+ return ARES_FALSE;
+}
+
+ares_bool_t ares__htable_insert(ares__htable_t *htable, void *bucket)
+{
+ unsigned int idx = 0;
+ ares__llist_node_t *node = NULL;
+ const void *key = NULL;
+
+ if (htable == NULL || bucket == NULL) {
+ return ARES_FALSE;
+ }
+
+
+ key = htable->bucket_key(bucket);
+ idx = HASH_IDX(htable, key);
+
+ /* See if we have a matching bucket already, if so, replace it */
+ node = ares__htable_find(htable, idx, key);
+ if (node != NULL) {
+ ares__llist_node_replace(node, bucket);
+ return ARES_TRUE;
+ }
+
+ /* Check to see if we should rehash because likelihood of collisions has
+ * increased beyond our threshold */
+ if (htable->num_keys + 1 >
+ (htable->size * ARES__HTABLE_EXPAND_PERCENT) / 100) {
+ if (!ares__htable_expand(htable)) {
+ return ARES_FALSE;
+ }
+ /* If we expanded, need to calculate a new index */
+ idx = HASH_IDX(htable, key);
+ }
+
+ /* We lazily allocate the linked list */
+ if (htable->buckets[idx] == NULL) {
+ htable->buckets[idx] = ares__llist_create(htable->bucket_free);
+ if (htable->buckets[idx] == NULL) {
+ return ARES_FALSE;
+ }
+ }
+
+ node = ares__llist_insert_first(htable->buckets[idx], bucket);
+ if (node == NULL) {
+ return ARES_FALSE;
+ }
+
+ htable->num_keys++;
+
+ return ARES_TRUE;
+}
+
+void *ares__htable_get(const ares__htable_t *htable, const void *key)
+{
+ unsigned int idx;
+
+ if (htable == NULL || key == NULL) {
+ return NULL;
+ }
+
+ idx = HASH_IDX(htable, key);
+
+ return ares__llist_node_val(ares__htable_find(htable, idx, key));
+}
+
+ares_bool_t ares__htable_remove(ares__htable_t *htable, const void *key)
+{
+ ares__llist_node_t *node;
+ unsigned int idx;
+
+ if (htable == NULL || key == NULL) {
+ return ARES_FALSE;
+ }
+
+ idx = HASH_IDX(htable, key);
+ node = ares__htable_find(htable, idx, key);
+ if (node == NULL) {
+ return ARES_FALSE;
+ }
+
+ htable->num_keys--;
+ ares__llist_node_destroy(node);
+ return ARES_TRUE;
+}
+
+size_t ares__htable_num_keys(const ares__htable_t *htable)
+{
+ if (htable == NULL) {
+ return 0;
+ }
+ return htable->num_keys;
+}
+
+unsigned int ares__htable_hash_FNV1a(const unsigned char *key, size_t key_len,
+ unsigned int seed)
+{
+ /* recommended seed is 2166136261U, but we don't want collisions */
+ unsigned int hv = seed;
+ size_t i;
+
+ for (i = 0; i < key_len; i++) {
+ hv ^= (unsigned int)key[i];
+ /* hv *= 0x01000193 */
+ hv += (hv << 1) + (hv << 4) + (hv << 7) + (hv << 8) + (hv << 24);
+ }
+
+ return hv;
+}
+
+/* tolower() is locale-specific. Use a lookup table fast conversion that only
+ * operates on ASCII */
+static const unsigned char ares__tolower_lookup[] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C,
+ 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
+ 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26,
+ 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x30, 0x31, 0x32, 0x33,
+ 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x40,
+ 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D,
+ 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A,
+ 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74,
+ 0x75, 0x76, 0x77, 0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F, 0x80, 0x81,
+ 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E,
+ 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B,
+ 0x9C, 0x9D, 0x9E, 0x9F, 0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7, 0xA8,
+ 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF, 0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5,
+ 0xB6, 0xB7, 0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF, 0xC0, 0xC1, 0xC2,
+ 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
+ 0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7, 0xD8, 0xD9, 0xDA, 0xDB, 0xDC,
+ 0xDD, 0xDE, 0xDF, 0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7, 0xE8, 0xE9,
+ 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6,
+ 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
+};
+
+/* Case insensitive version, meant for ASCII strings */
+unsigned int ares__htable_hash_FNV1a_casecmp(const unsigned char *key,
+ size_t key_len, unsigned int seed)
+{
+ /* recommended seed is 2166136261U, but we don't want collisions */
+ unsigned int hv = seed;
+ size_t i;
+
+ for (i = 0; i < key_len; i++) {
+ hv ^= (unsigned int)ares__tolower_lookup[key[i]];
+ /* hv *= 0x01000193 */
+ hv += (hv << 1) + (hv << 4) + (hv << 7) + (hv << 8) + (hv << 24);
+ }
+
+ return hv;
+}
diff --git a/src/lib/ares__htable.h b/src/lib/ares__htable.h
new file mode 100644
index 0000000..c131079
--- /dev/null
+++ b/src/lib/ares__htable.h
@@ -0,0 +1,163 @@
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#ifndef __ARES__HTABLE_H
+#define __ARES__HTABLE_H
+
+
+/*! \addtogroup ares__htable Base HashTable Data Structure
+ *
+ * This is a basic hashtable data structure that is meant to be wrapped
+ * by a higher level implementation. This data structure is designed to
+ * be callback-based in order to facilitate wrapping without needing to
+ * worry about any underlying complexities of the hashtable implementation.
+ *
+ * This implementation supports automatic growing by powers of 2 when reaching
+ * 75% capacity. A rehash will be performed on the expanded bucket list.
+ *
+ * Average time complexity:
+ * - Insert: O(1)
+ * - Search: O(1)
+ * - Delete: O(1)
+ *
+ * @{
+ */
+
+struct ares__htable_t;
+
+/*! Opaque data type for generic hash table implementation */
+typedef struct ares__htable ares__htable_t;
+
+/*! Callback for generating a hash of the key.
+ *
+ * \param[in] key pointer to key to be hashed
+ * \param[in] seed randomly generated seed used by hash function.
+ * value is specific to the hashtable instance
+ * but otherwise will not change between calls.
+ * \return hash
+ */
+typedef unsigned int (*ares__htable_hashfunc_t)(const void *key,
+ unsigned int seed);
+
+/*! Callback to free the bucket
+ *
+ * \param[in] bucket user provided bucket
+ */
+typedef void (*ares__htable_bucket_free_t)(void *bucket);
+
+/*! Callback to extract the key from the user-provided bucket
+ *
+ * \param[in] bucket user provided bucket
+ * \return pointer to key held in bucket
+ */
+typedef const void *(*ares__htable_bucket_key_t)(const void *bucket);
+
+/*! Callback to compare two keys for equality
+ *
+ * \param[in] key1 first key
+ * \param[in] key2 second key
+ * \return ARES_TRUE if equal, ARES_FALSE if not
+ */
+typedef ares_bool_t (*ares__htable_key_eq_t)(const void *key1,
+ const void *key2);
+
+
+/*! Destroy the initialized hashtable
+ *
+ * \param[in] initialized hashtable
+ */
+void ares__htable_destroy(ares__htable_t *htable);
+
+/*! Create a new hashtable
+ *
+ * \param[in] hash_func Required. Callback for Hash function.
+ * \param[in] bucket_key Required. Callback to extract key from bucket.
+ * \param[in] bucket_free Required. Callback to free bucket.
+ * \param[in] key_eq Required. Callback to check for key equality.
+ * \return initialized hashtable. NULL if out of memory or misuse.
+ */
+ares__htable_t *ares__htable_create(ares__htable_hashfunc_t hash_func,
+ ares__htable_bucket_key_t bucket_key,
+ ares__htable_bucket_free_t bucket_free,
+ ares__htable_key_eq_t key_eq);
+
+/*! Count of keys from initialized hashtable
+ *
+ * \param[in] htable Initialized hashtable.
+ * \return count of keys
+ */
+size_t ares__htable_num_keys(const ares__htable_t *htable);
+
+/*! Insert bucket into hashtable
+ *
+ * \param[in] htable Initialized hashtable.
+ * \param[in] bucket User-provided bucket to insert. Takes "ownership". Not
+ * allowed to be NULL.
+ * \return ARES_TRUE on success, ARES_FALSE if out of memory
+ */
+ares_bool_t ares__htable_insert(ares__htable_t *htable, void *bucket);
+
+/*! Retrieve bucket from hashtable based on key.
+ *
+ * \param[in] htable Initialized hashtable
+ * \param[in] key Pointer to key to use for comparison.
+ * \return matching bucket, or NULL if not found.
+ */
+void *ares__htable_get(const ares__htable_t *htable, const void *key);
+
+/*! Remove bucket from hashtable by key
+ *
+ * \param[in] htable Initialized hashtable
+ * \param[in] key Pointer to key to use for comparison
+ * \return ARES_TRUE if found, ARES_FALSE if not found
+ */
+ares_bool_t ares__htable_remove(ares__htable_t *htable, const void *key);
+
+/*! FNV1a hash algorithm. Can be used as underlying primitive for building
+ * a wrapper hashtable.
+ *
+ * \param[in] key pointer to key
+ * \param[in] key_len Length of key
+ * \param[in] seed Seed for generating hash
+ * \return hash value
+ */
+unsigned int ares__htable_hash_FNV1a(const unsigned char *key, size_t key_len,
+ unsigned int seed);
+
+/*! FNV1a hash algorithm, but converts all characters to lowercase before
+ * hashing to make the hash case-insensitive. Can be used as underlying
+ * primitive for building a wrapper hashtable. Used on string-based keys.
+ *
+ * \param[in] key pointer to key
+ * \param[in] key_len Length of key
+ * \param[in] seed Seed for generating hash
+ * \return hash value
+ */
+unsigned int ares__htable_hash_FNV1a_casecmp(const unsigned char *key,
+ size_t key_len, unsigned int seed);
+
+/*! @} */
+
+#endif /* __ARES__HTABLE_H */
diff --git a/src/lib/ares__htable_asvp.c b/src/lib/ares__htable_asvp.c
new file mode 100644
index 0000000..f6991c3
--- /dev/null
+++ b/src/lib/ares__htable_asvp.c
@@ -0,0 +1,194 @@
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#include "ares_setup.h"
+#include "ares.h"
+#include "ares_private.h"
+#include "ares__htable.h"
+#include "ares__htable_asvp.h"
+
+struct ares__htable_asvp {
+ ares__htable_asvp_val_free_t free_val;
+ ares__htable_t *hash;
+};
+
+typedef struct {
+ ares_socket_t key;
+ void *val;
+ ares__htable_asvp_t *parent;
+} ares__htable_asvp_bucket_t;
+
+void ares__htable_asvp_destroy(ares__htable_asvp_t *htable)
+{
+ if (htable == NULL) {
+ return;
+ }
+
+ ares__htable_destroy(htable->hash);
+ ares_free(htable);
+}
+
+static unsigned int hash_func(const void *key, unsigned int seed)
+{
+ const ares_socket_t *arg = key;
+ return ares__htable_hash_FNV1a((const unsigned char *)arg, sizeof(*arg),
+ seed);
+}
+
+static const void *bucket_key(const void *bucket)
+{
+ const ares__htable_asvp_bucket_t *arg = bucket;
+ return &arg->key;
+}
+
+static void bucket_free(void *bucket)
+{
+ ares__htable_asvp_bucket_t *arg = bucket;
+
+ if (arg->parent->free_val) {
+ arg->parent->free_val(arg->val);
+ }
+
+ ares_free(arg);
+}
+
+static ares_bool_t key_eq(const void *key1, const void *key2)
+{
+ const ares_socket_t *k1 = key1;
+ const ares_socket_t *k2 = key2;
+
+ if (*k1 == *k2) {
+ return ARES_TRUE;
+ }
+
+ return ARES_FALSE;
+}
+
+ares__htable_asvp_t *
+ ares__htable_asvp_create(ares__htable_asvp_val_free_t val_free)
+{
+ ares__htable_asvp_t *htable = ares_malloc(sizeof(*htable));
+ if (htable == NULL) {
+ goto fail;
+ }
+
+ htable->hash =
+ ares__htable_create(hash_func, bucket_key, bucket_free, key_eq);
+ if (htable->hash == NULL) {
+ goto fail;
+ }
+
+ htable->free_val = val_free;
+
+ return htable;
+
+fail:
+ if (htable) {
+ ares__htable_destroy(htable->hash);
+ ares_free(htable);
+ }
+ return NULL;
+}
+
+ares_bool_t ares__htable_asvp_insert(ares__htable_asvp_t *htable,
+ ares_socket_t key, void *val)
+{
+ ares__htable_asvp_bucket_t *bucket = NULL;
+
+ if (htable == NULL) {
+ goto fail;
+ }
+
+ bucket = ares_malloc(sizeof(*bucket));
+ if (bucket == NULL) {
+ goto fail;
+ }
+
+ bucket->parent = htable;
+ bucket->key = key;
+ bucket->val = val;
+
+ if (!ares__htable_insert(htable->hash, bucket)) {
+ goto fail;
+ }
+
+ return ARES_TRUE;
+
+fail:
+ if (bucket) {
+ ares_free(bucket);
+ }
+ return ARES_FALSE;
+}
+
+ares_bool_t ares__htable_asvp_get(const ares__htable_asvp_t *htable,
+ ares_socket_t key, void **val)
+{
+ ares__htable_asvp_bucket_t *bucket = NULL;
+
+ if (val) {
+ *val = NULL;
+ }
+
+ if (htable == NULL) {
+ return ARES_FALSE;
+ }
+
+ bucket = ares__htable_get(htable->hash, &key);
+ if (bucket == NULL) {
+ return ARES_FALSE;
+ }
+
+ if (val) {
+ *val = bucket->val;
+ }
+ return ARES_TRUE;
+}
+
+void *ares__htable_asvp_get_direct(const ares__htable_asvp_t *htable,
+ ares_socket_t key)
+{
+ void *val = NULL;
+ ares__htable_asvp_get(htable, key, &val);
+ return val;
+}
+
+ares_bool_t ares__htable_asvp_remove(ares__htable_asvp_t *htable,
+ ares_socket_t key)
+{
+ if (htable == NULL) {
+ return ARES_FALSE;
+ }
+
+ return ares__htable_remove(htable->hash, &key);
+}
+
+size_t ares__htable_asvp_num_keys(const ares__htable_asvp_t *htable)
+{
+ if (htable == NULL) {
+ return 0;
+ }
+ return ares__htable_num_keys(htable->hash);
+}
diff --git a/src/lib/ares__htable_asvp.h b/src/lib/ares__htable_asvp.h
new file mode 100644
index 0000000..1ee505a
--- /dev/null
+++ b/src/lib/ares__htable_asvp.h
@@ -0,0 +1,120 @@
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#ifndef __ARES__HTABLE_ASVP_H
+#define __ARES__HTABLE_ASVP_H
+
+/*! \addtogroup ares__htable_asvp HashTable with ares_socket_t Key and
+ * void pointer Value
+ *
+ * This data structure wraps the base ares__htable data structure in order to
+ * split the key and value data types as ares_socket_t and void pointer,
+ * respectively.
+ *
+ * Average time complexity:
+ * - Insert: O(1)
+ * - Search: O(1)
+ * - Delete: O(1)
+ *
+ * @{
+ */
+
+struct ares__htable_asvp;
+
+/*! Opaque data type for ares_socket_t key, void pointer hash table
+ * implementation */
+typedef struct ares__htable_asvp ares__htable_asvp_t;
+
+/*! Callback to free value stored in hashtable
+ *
+ * \param[in] val user-supplied value
+ */
+typedef void (*ares__htable_asvp_val_free_t)(void *val);
+
+/*! Destroy hashtable
+ *
+ * \param[in] htable Initialized hashtable
+ */
+void ares__htable_asvp_destroy(ares__htable_asvp_t *htable);
+
+/*! Create size_t key, void pointer value hash table
+ *
+ * \param[in] val_free Optional. Call back to free user-supplied value. If
+ * NULL it is expected the caller will clean up any user
+ * supplied values.
+ */
+ares__htable_asvp_t *
+ ares__htable_asvp_create(ares__htable_asvp_val_free_t val_free);
+
+/*! Insert key/value into hash table
+ *
+ * \param[in] htable Initialized hash table
+ * \param[in] key key to associate with value
+ * \param[in] val value to store (takes ownership). May be NULL.
+ * \return ARES_TRUE on success, ARES_FALSE on out of memory or misuse
+ */
+ares_bool_t ares__htable_asvp_insert(ares__htable_asvp_t *htable,
+ ares_socket_t key, void *val);
+
+/*! Retrieve value from hashtable based on key
+ *
+ * \param[in] htable Initialized hash table
+ * \param[in] key key to use to search
+ * \param[out] val Optional. Pointer to store value.
+ * \return ARES_TRUE on success, ARES_FALSE on failure
+ */
+ares_bool_t ares__htable_asvp_get(const ares__htable_asvp_t *htable,
+ ares_socket_t key, void **val);
+
+/*! Retrieve value from hashtable directly as return value. Caveat to this
+ * function over ares__htable_asvp_get() is that if a NULL value is stored
+ * you cannot determine if the key is not found or the value is NULL.
+ *
+ * \param[in] htable Initialized hash table
+ * \param[in] key key to use to search
+ * \return value associated with key in hashtable or NULL
+ */
+void *ares__htable_asvp_get_direct(const ares__htable_asvp_t *htable,
+ ares_socket_t key);
+
+/*! Remove a value from the hashtable by key
+ *
+ * \param[in] htable Initialized hash table
+ * \param[in] key key to use to search
+ * \return ARES_TRUE if found, ARES_FALSE if not found
+ */
+ares_bool_t ares__htable_asvp_remove(ares__htable_asvp_t *htable,
+ ares_socket_t key);
+
+/*! Retrieve the number of keys stored in the hash table
+ *
+ * \param[in] htable Initialized hash table
+ * \return count
+ */
+size_t ares__htable_asvp_num_keys(const ares__htable_asvp_t *htable);
+
+/*! @} */
+
+#endif /* __ARES__HTABLE_ASVP_H */
diff --git a/src/lib/ares__htable_stvp.c b/src/lib/ares__htable_stvp.c
new file mode 100644
index 0000000..a79bdc6
--- /dev/null
+++ b/src/lib/ares__htable_stvp.c
@@ -0,0 +1,193 @@
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#include "ares_setup.h"
+#include "ares.h"
+#include "ares_private.h"
+#include "ares__htable.h"
+#include "ares__htable_stvp.h"
+
+struct ares__htable_stvp {
+ ares__htable_stvp_val_free_t free_val;
+ ares__htable_t *hash;
+};
+
+typedef struct {
+ size_t key;
+ void *val;
+ ares__htable_stvp_t *parent;
+} ares__htable_stvp_bucket_t;
+
+void ares__htable_stvp_destroy(ares__htable_stvp_t *htable)
+{
+ if (htable == NULL) {
+ return;
+ }
+
+ ares__htable_destroy(htable->hash);
+ ares_free(htable);
+}
+
+static unsigned int hash_func(const void *key, unsigned int seed)
+{
+ const size_t *arg = key;
+ return ares__htable_hash_FNV1a((const unsigned char *)arg, sizeof(*arg),
+ seed);
+}
+
+static const void *bucket_key(const void *bucket)
+{
+ const ares__htable_stvp_bucket_t *arg = bucket;
+ return &arg->key;
+}
+
+static void bucket_free(void *bucket)
+{
+ ares__htable_stvp_bucket_t *arg = bucket;
+
+ if (arg->parent->free_val) {
+ arg->parent->free_val(arg->val);
+ }
+
+ ares_free(arg);
+}
+
+static ares_bool_t key_eq(const void *key1, const void *key2)
+{
+ const size_t *k1 = key1;
+ const size_t *k2 = key2;
+
+ if (*k1 == *k2) {
+ return ARES_TRUE;
+ }
+
+ return ARES_FALSE;
+}
+
+ares__htable_stvp_t *
+ ares__htable_stvp_create(ares__htable_stvp_val_free_t val_free)
+{
+ ares__htable_stvp_t *htable = ares_malloc(sizeof(*htable));
+ if (htable == NULL) {
+ goto fail;
+ }
+
+ htable->hash =
+ ares__htable_create(hash_func, bucket_key, bucket_free, key_eq);
+ if (htable->hash == NULL) {
+ goto fail;
+ }
+
+ htable->free_val = val_free;
+
+ return htable;
+
+fail:
+ if (htable) {
+ ares__htable_destroy(htable->hash);
+ ares_free(htable);
+ }
+ return NULL;
+}
+
+ares_bool_t ares__htable_stvp_insert(ares__htable_stvp_t *htable, size_t key,
+ void *val)
+{
+ ares__htable_stvp_bucket_t *bucket = NULL;
+
+ if (htable == NULL) {
+ goto fail;
+ }
+
+ bucket = ares_malloc(sizeof(*bucket));
+ if (bucket == NULL) {
+ goto fail;
+ }
+
+ bucket->parent = htable;
+ bucket->key = key;
+ bucket->val = val;
+
+ if (!ares__htable_insert(htable->hash, bucket)) {
+ goto fail;
+ }
+
+ return ARES_TRUE;
+
+fail:
+ if (bucket) {
+ ares_free(bucket);
+ }
+ return ARES_FALSE;
+}
+
+ares_bool_t ares__htable_stvp_get(const ares__htable_stvp_t *htable, size_t key,
+ void **val)
+{
+ ares__htable_stvp_bucket_t *bucket = NULL;
+
+ if (val) {
+ *val = NULL;
+ }
+
+ if (htable == NULL) {
+ return ARES_FALSE;
+ }
+
+ bucket = ares__htable_get(htable->hash, &key);
+ if (bucket == NULL) {
+ return ARES_FALSE;
+ }
+
+ if (val) {
+ *val = bucket->val;
+ }
+ return ARES_TRUE;
+}
+
+void *ares__htable_stvp_get_direct(const ares__htable_stvp_t *htable,
+ size_t key)
+{
+ void *val = NULL;
+ ares__htable_stvp_get(htable, key, &val);
+ return val;
+}
+
+ares_bool_t ares__htable_stvp_remove(ares__htable_stvp_t *htable, size_t key)
+{
+ if (htable == NULL) {
+ return ARES_FALSE;
+ }
+
+ return ares__htable_remove(htable->hash, &key);
+}
+
+size_t ares__htable_stvp_num_keys(const ares__htable_stvp_t *htable)
+{
+ if (htable == NULL) {
+ return 0;
+ }
+ return ares__htable_num_keys(htable->hash);
+}
diff --git a/src/lib/ares__htable_stvp.h b/src/lib/ares__htable_stvp.h
new file mode 100644
index 0000000..003b184
--- /dev/null
+++ b/src/lib/ares__htable_stvp.h
@@ -0,0 +1,117 @@
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#ifndef __ARES__HTABLE_STVP_H
+#define __ARES__HTABLE_STVP_H
+
+/*! \addtogroup ares__htable_stvp HashTable with size_t Key and void pointer
+ * Value
+ *
+ * This data structure wraps the base ares__htable data structure in order to
+ * split the key and value data types as size_t and void pointer, respectively.
+ *
+ * Average time complexity:
+ * - Insert: O(1)
+ * - Search: O(1)
+ * - Delete: O(1)
+ *
+ * @{
+ */
+
+struct ares__htable_stvp;
+
+/*! Opaque data type for size_t key, void pointer hash table implementation */
+typedef struct ares__htable_stvp ares__htable_stvp_t;
+
+/*! Callback to free value stored in hashtable
+ *
+ * \param[in] val user-supplied value
+ */
+typedef void (*ares__htable_stvp_val_free_t)(void *val);
+
+/*! Destroy hashtable
+ *
+ * \param[in] htable Initialized hashtable
+ */
+void ares__htable_stvp_destroy(ares__htable_stvp_t *htable);
+
+/*! Create size_t key, void pointer value hash table
+ *
+ * \param[in] val_free Optional. Call back to free user-supplied value. If
+ * NULL it is expected the caller will clean up any user
+ * supplied values.
+ */
+ares__htable_stvp_t *
+ ares__htable_stvp_create(ares__htable_stvp_val_free_t val_free);
+
+/*! Insert key/value into hash table
+ *
+ * \param[in] htable Initialized hash table
+ * \param[in] key key to associate with value
+ * \param[in] val value to store (takes ownership). May be NULL.
+ * \return ARES_TRUE on success, ARES_FALSE on failure or out of memory
+ */
+ares_bool_t ares__htable_stvp_insert(ares__htable_stvp_t *htable, size_t key,
+ void *val);
+
+/*! Retrieve value from hashtable based on key
+ *
+ * \param[in] htable Initialized hash table
+ * \param[in] key key to use to search
+ * \param[out] val Optional. Pointer to store value.
+ * \return ARES_TRUE on success, ARES_FALSE on failure
+ */
+ares_bool_t ares__htable_stvp_get(const ares__htable_stvp_t *htable, size_t key,
+ void **val);
+
+/*! Retrieve value from hashtable directly as return value. Caveat to this
+ * function over ares__htable_stvp_get() is that if a NULL value is stored
+ * you cannot determine if the key is not found or the value is NULL.
+ *
+ * \param[in] htable Initialized hash table
+ * \param[in] key key to use to search
+ * \return value associated with key in hashtable or NULL
+ */
+void *ares__htable_stvp_get_direct(const ares__htable_stvp_t *htable,
+ size_t key);
+
+/*! Remove a value from the hashtable by key
+ *
+ * \param[in] htable Initialized hash table
+ * \param[in] key key to use to search
+ * \return ARES_TRUE if found, ARES_FALSE if not
+ */
+ares_bool_t ares__htable_stvp_remove(ares__htable_stvp_t *htable, size_t key);
+
+/*! Retrieve the number of keys stored in the hash table
+ *
+ * \param[in] htable Initialized hash table
+ * \return count
+ */
+size_t ares__htable_stvp_num_keys(const ares__htable_stvp_t *htable);
+
+/*! @} */
+
+#endif /* __ARES__HTABLE_STVP_H */
diff --git a/src/lib/ares__llist.c b/src/lib/ares__llist.c
new file mode 100644
index 0000000..be62387
--- /dev/null
+++ b/src/lib/ares__llist.c
@@ -0,0 +1,315 @@
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#include "ares_setup.h"
+#include "ares.h"
+#include "ares_private.h"
+#include "ares__llist.h"
+
+struct ares__llist {
+ ares__llist_node_t *head;
+ ares__llist_node_t *tail;
+ ares__llist_destructor_t destruct;
+ size_t cnt;
+};
+
+struct ares__llist_node {
+ void *data;
+ ares__llist_node_t *prev;
+ ares__llist_node_t *next;
+ ares__llist_t *parent;
+};
+
+ares__llist_t *ares__llist_create(ares__llist_destructor_t destruct)
+{
+ ares__llist_t *list = ares_malloc_zero(sizeof(*list));
+
+ if (list == NULL) {
+ return NULL;
+ }
+
+ list->destruct = destruct;
+
+ return list;
+}
+
+void ares__llist_replace_destructor(ares__llist_t *list,
+ ares__llist_destructor_t destruct)
+{
+ if (list == NULL) {
+ return;
+ }
+
+ list->destruct = destruct;
+}
+
+typedef enum {
+ ARES__LLIST_INSERT_HEAD,
+ ARES__LLIST_INSERT_TAIL,
+ ARES__LLIST_INSERT_BEFORE
+} ares__llist_insert_type_t;
+
+static ares__llist_node_t *ares__llist_insert_at(ares__llist_t *list,
+ ares__llist_insert_type_t type,
+ ares__llist_node_t *at,
+ void *val)
+{
+ ares__llist_node_t *node = NULL;
+
+ if (list == NULL || val == NULL) {
+ return NULL;
+ }
+
+ node = ares_malloc_zero(sizeof(*node));
+
+ if (node == NULL) {
+ return NULL;
+ }
+
+ node->data = val;
+ node->parent = list;
+
+ if (type == ARES__LLIST_INSERT_BEFORE && (at == list->head || at == NULL)) {
+ type = ARES__LLIST_INSERT_HEAD;
+ }
+
+ switch (type) {
+ case ARES__LLIST_INSERT_HEAD:
+ node->next = list->head;
+ node->prev = NULL;
+ if (list->head) {
+ list->head->prev = node;
+ }
+ list->head = node;
+ break;
+ case ARES__LLIST_INSERT_TAIL:
+ node->next = NULL;
+ node->prev = list->tail;
+ if (list->tail) {
+ list->tail->next = node;
+ }
+ list->tail = node;
+ break;
+ case ARES__LLIST_INSERT_BEFORE:
+ node->next = at;
+ node->prev = at->prev;
+ at->prev = node;
+ break;
+ }
+ if (list->tail == NULL) {
+ list->tail = node;
+ }
+ if (list->head == NULL) {
+ list->head = node;
+ }
+
+ list->cnt++;
+
+ return node;
+}
+
+ares__llist_node_t *ares__llist_insert_first(ares__llist_t *list, void *val)
+{
+ return ares__llist_insert_at(list, ARES__LLIST_INSERT_HEAD, NULL, val);
+}
+
+ares__llist_node_t *ares__llist_insert_last(ares__llist_t *list, void *val)
+{
+ return ares__llist_insert_at(list, ARES__LLIST_INSERT_TAIL, NULL, val);
+}
+
+ares__llist_node_t *ares__llist_insert_before(ares__llist_node_t *node,
+ void *val)
+{
+ if (node == NULL) {
+ return NULL;
+ }
+
+ return ares__llist_insert_at(node->parent, ARES__LLIST_INSERT_BEFORE, node,
+ val);
+}
+
+ares__llist_node_t *ares__llist_insert_after(ares__llist_node_t *node,
+ void *val)
+{
+ if (node == NULL) {
+ return NULL;
+ }
+
+ if (node->next == NULL) {
+ return ares__llist_insert_last(node->parent, val);
+ }
+
+ return ares__llist_insert_at(node->parent, ARES__LLIST_INSERT_BEFORE,
+ node->next, val);
+}
+
+ares__llist_node_t *ares__llist_node_first(ares__llist_t *list)
+{
+ if (list == NULL) {
+ return NULL;
+ }
+ return list->head;
+}
+
+ares__llist_node_t *ares__llist_node_last(ares__llist_t *list)
+{
+ if (list == NULL) {
+ return NULL;
+ }
+ return list->tail;
+}
+
+ares__llist_node_t *ares__llist_node_next(ares__llist_node_t *node)
+{
+ if (node == NULL) {
+ return NULL;
+ }
+ return node->next;
+}
+
+ares__llist_node_t *ares__llist_node_prev(ares__llist_node_t *node)
+{
+ if (node == NULL) {
+ return NULL;
+ }
+ return node->prev;
+}
+
+void *ares__llist_node_val(ares__llist_node_t *node)
+{
+ if (node == NULL) {
+ return NULL;
+ }
+
+ return node->data;
+}
+
+size_t ares__llist_len(const ares__llist_t *list)
+{
+ if (list == NULL) {
+ return 0;
+ }
+ return list->cnt;
+}
+
+ares__llist_t *ares__llist_node_parent(ares__llist_node_t *node)
+{
+ if (node == NULL) {
+ return NULL;
+ }
+ return node->parent;
+}
+
+void *ares__llist_first_val(ares__llist_t *list)
+{
+ return ares__llist_node_val(ares__llist_node_first(list));
+}
+
+void *ares__llist_last_val(ares__llist_t *list)
+{
+ return ares__llist_node_val(ares__llist_node_last(list));
+}
+
+void *ares__llist_node_claim(ares__llist_node_t *node)
+{
+ void *val;
+ ares__llist_t *list;
+
+ if (node == NULL) {
+ return NULL;
+ }
+
+ list = node->parent;
+ val = node->data;
+
+ if (node->prev) {
+ node->prev->next = node->next;
+ }
+
+ if (node->next) {
+ node->next->prev = node->prev;
+ }
+
+ if (node == list->head) {
+ list->head = node->next;
+ }
+
+ if (node == list->tail) {
+ list->tail = node->prev;
+ }
+ ares_free(node);
+
+ list->cnt--;
+
+ return val;
+}
+
+void ares__llist_node_destroy(ares__llist_node_t *node)
+{
+ ares__llist_destructor_t destruct;
+ void *val;
+
+ if (node == NULL) {
+ return;
+ }
+
+ destruct = node->parent->destruct;
+
+ val = ares__llist_node_claim(node);
+ if (val != NULL && destruct != NULL) {
+ destruct(val);
+ }
+}
+
+void ares__llist_node_replace(ares__llist_node_t *node, void *val)
+{
+ ares__llist_destructor_t destruct;
+
+ if (node == NULL) {
+ return;
+ }
+
+ destruct = node->parent->destruct;
+ if (destruct != NULL) {
+ destruct(node->data);
+ }
+
+ node->data = val;
+}
+
+void ares__llist_destroy(ares__llist_t *list)
+{
+ ares__llist_node_t *node;
+
+ if (list == NULL) {
+ return;
+ }
+
+ while ((node = ares__llist_node_first(list)) != NULL) {
+ ares__llist_node_destroy(node);
+ }
+ ares_free(list);
+}
diff --git a/src/lib/ares__llist.h b/src/lib/ares__llist.h
new file mode 100644
index 0000000..50c0f73
--- /dev/null
+++ b/src/lib/ares__llist.h
@@ -0,0 +1,203 @@
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#ifndef __ARES__LLIST_H
+#define __ARES__LLIST_H
+
+/*! \addtogroup ares__llist LinkedList Data Structure
+ *
+ * This is a doubly-linked list data structure.
+ *
+ * Average time complexity:
+ * - Insert: O(1) -- head or tail
+ * - Search: O(n)
+ * - Delete: O(1) -- delete assumes you hold a node pointer
+ *
+ * @{
+ */
+
+struct ares__llist;
+
+/*! Opaque data structure for linked list */
+typedef struct ares__llist ares__llist_t;
+
+struct ares__llist_node;
+
+/*! Opaque data structure for a node in a linked list */
+typedef struct ares__llist_node ares__llist_node_t;
+
+/*! Callback to free user-defined node data
+ *
+ * \param[in] data user supplied data
+ */
+typedef void (*ares__llist_destructor_t)(void *data);
+
+/*! Create a linked list object
+ *
+ * \param[in] destruct Optional. Destructor to call on all removed nodes
+ * \return linked list object or NULL on out of memory
+ */
+ares__llist_t *ares__llist_create(ares__llist_destructor_t destruct);
+
+/*! Replace destructor for linked list nodes. Typically this is used
+ * when wanting to disable the destructor by using NULL.
+ *
+ * \param[in] list Initialized linked list object
+ * \param[in] destruct replacement destructor, NULL is allowed
+ */
+void ares__llist_replace_destructor(ares__llist_t *list,
+ ares__llist_destructor_t destruct);
+
+/*! Insert value as the first node in the linked list
+ *
+ * \param[in] list Initialized linked list object
+ * \param[in] val user-supplied value.
+ * \return node object referencing place in list, or null if out of memory or
+ * misuse
+ */
+ares__llist_node_t *ares__llist_insert_first(ares__llist_t *list, void *val);
+
+/*! Insert value as the last node in the linked list
+ *
+ * \param[in] list Initialized linked list object
+ * \param[in] val user-supplied value.
+ * \return node object referencing place in list, or null if out of memory or
+ * misuse
+ */
+ares__llist_node_t *ares__llist_insert_last(ares__llist_t *list, void *val);
+
+/*! Insert value before specified node in the linked list
+ *
+ * \param[in] node node referenced to insert before
+ * \param[in] val user-supplied value.
+ * \return node object referencing place in list, or null if out of memory or
+ * misuse
+ */
+ares__llist_node_t *ares__llist_insert_before(ares__llist_node_t *node,
+ void *val);
+
+/*! Insert value after specified node in the linked list
+ *
+ * \param[in] node node referenced to insert after
+ * \param[in] val user-supplied value.
+ * \return node object referencing place in list, or null if out of memory or
+ * misuse
+ */
+ares__llist_node_t *ares__llist_insert_after(ares__llist_node_t *node,
+ void *val);
+
+/*! Obtain first node in list
+ *
+ * \param[in] list Initialized list object
+ * \return first node in list or NULL if none
+ */
+ares__llist_node_t *ares__llist_node_first(ares__llist_t *list);
+
+/*! Obtain last node in list
+ *
+ * \param[in] list Initialized list object
+ * \return last node in list or NULL if none
+ */
+ares__llist_node_t *ares__llist_node_last(ares__llist_t *list);
+
+/*! Obtain next node in respect to specified node
+ *
+ * \param[in] node Node referenced
+ * \return node or NULL if none
+ */
+ares__llist_node_t *ares__llist_node_next(ares__llist_node_t *node);
+
+/*! Obtain previous node in respect to specified node
+ *
+ * \param[in] node Node referenced
+ * \return node or NULL if none
+ */
+ares__llist_node_t *ares__llist_node_prev(ares__llist_node_t *node);
+
+/*! Obtain value from node
+ *
+ * \param[in] node Node referenced
+ * \return user provided value from node
+ */
+void *ares__llist_node_val(ares__llist_node_t *node);
+
+/*! Obtain the number of entries in the list
+ *
+ * \param[in] list Initialized list object
+ * \return count
+ */
+size_t ares__llist_len(const ares__llist_t *list);
+
+/*! Obtain list object from referenced node
+ *
+ * \param[in] node Node referenced
+ * \return list object node belongs to
+ */
+ares__llist_t *ares__llist_node_parent(ares__llist_node_t *node);
+
+/*! Obtain the first user-supplied value in the list
+ *
+ * \param[in] list Initialized list object
+ * \return first user supplied value or NULL if none
+ */
+void *ares__llist_first_val(ares__llist_t *list);
+
+/*! Obtain the last user-supplied value in the list
+ *
+ * \param[in] list Initialized list object
+ * \return last user supplied value or NULL if none
+ */
+void *ares__llist_last_val(ares__llist_t *list);
+
+/*! Take ownership of user-supplied value in list without calling destructor.
+ * Will unchain entry from list.
+ *
+ * \param[in] node Node referenced
+ * \return user supplied value
+ */
+void *ares__llist_node_claim(ares__llist_node_t *node);
+
+/*! Replace user-supplied value for node
+ *
+ * \param[in] node Node referenced
+ * \param[in] val new user-supplied value
+ */
+void ares__llist_node_replace(ares__llist_node_t *node, void *val);
+
+/*! Destroy the node, removing it from the list and calling destructor.
+ *
+ * \param[in] node Node referenced
+ */
+void ares__llist_node_destroy(ares__llist_node_t *node);
+
+/*! Destroy the list object and all nodes in the list.
+ *
+ * \param[in] list Initialized list object
+ */
+void ares__llist_destroy(ares__llist_t *list);
+
+/*! @} */
+
+#endif /* __ARES__LLIST_H */
diff --git a/src/lib/ares__parse_into_addrinfo.c b/src/lib/ares__parse_into_addrinfo.c
index 4393f04..aa14022 100644
--- a/src/lib/ares__parse_into_addrinfo.c
+++ b/src/lib/ares__parse_into_addrinfo.c
@@ -1,18 +1,29 @@
-/* Copyright (C) 2019 by Andrew Selivanov
+/* MIT License
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * Copyright (c) 2019 Andrew Selivanov
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
-
#include "ares_setup.h"
#ifdef HAVE_NETINET_IN_H
@@ -25,8 +36,6 @@
# include <arpa/inet.h>
#endif
-#include "ares_nameser.h"
-
#ifdef HAVE_STRINGS_H
# include <strings.h>
#endif
@@ -36,194 +45,140 @@
#endif
#include "ares.h"
-#include "ares_dns.h"
#include "ares_private.h"
-int ares__parse_into_addrinfo(const unsigned char *abuf,
- int alen, int cname_only_is_enodata,
- unsigned short port,
- struct ares_addrinfo *ai)
+ares_status_t ares__parse_into_addrinfo(const unsigned char *abuf, size_t alen,
+ ares_bool_t cname_only_is_enodata,
+ unsigned short port,
+ struct ares_addrinfo *ai)
{
- unsigned int qdcount, ancount;
- int status, i, rr_type, rr_class, rr_len, rr_ttl;
- int got_a = 0, got_aaaa = 0, got_cname = 0;
- long len;
- const unsigned char *aptr;
- char *question_hostname = NULL;
- char *hostname, *rr_name = NULL, *rr_data;
- struct ares_addrinfo_cname *cname, *cnames = NULL;
- struct ares_addrinfo_node *nodes = NULL;
-
- /* Give up if abuf doesn't have room for a header. */
- if (alen < HFIXEDSZ)
- return ARES_EBADRESP;
-
- /* Fetch the question and answer count from the header. */
- qdcount = DNS_HEADER_QDCOUNT(abuf);
- ancount = DNS_HEADER_ANCOUNT(abuf);
- if (qdcount != 1)
- return ARES_EBADRESP;
-
-
- /* Expand the name from the question, and skip past the question. */
- aptr = abuf + HFIXEDSZ;
- status = ares__expand_name_for_response(aptr, abuf, alen, &question_hostname, &len, 0);
- if (status != ARES_SUCCESS)
- return status;
- if (aptr + len + QFIXEDSZ > abuf + alen)
- {
- status = ARES_EBADRESP;
- goto failed_stat;
+ ares_status_t status;
+ ares_dns_record_t *dnsrec = NULL;
+ size_t i;
+ size_t ancount;
+ const char *hostname = NULL;
+ ares_bool_t got_a = ARES_FALSE;
+ ares_bool_t got_aaaa = ARES_FALSE;
+ ares_bool_t got_cname = ARES_FALSE;
+ struct ares_addrinfo_cname *cnames = NULL;
+ struct ares_addrinfo_node *nodes = NULL;
+
+ status = ares_dns_parse(abuf, alen, 0, &dnsrec);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+
+ /* Save question hostname */
+ status = ares_dns_record_query_get(dnsrec, 0, &hostname, NULL, NULL);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+
+ ancount = ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER);
+ if (ancount == 0) {
+ status = ARES_ENODATA;
+ goto done;
+ }
+
+ for (i = 0; i < ancount; i++) {
+ const char *rname = NULL;
+ ares_dns_rec_type_t rtype;
+ const ares_dns_rr_t *rr =
+ ares_dns_record_rr_get(dnsrec, ARES_SECTION_ANSWER, i);
+
+ if (ares_dns_rr_get_class(rr) != ARES_CLASS_IN) {
+ continue;
}
- hostname = question_hostname;
-
- aptr += len + QFIXEDSZ;
-
- /* Examine each answer resource record (RR) in turn. */
- for (i = 0; i < (int)ancount; i++)
- {
- /* Decode the RR up to the data field. */
- status = ares__expand_name_for_response(aptr, abuf, alen, &rr_name, &len, 0);
- if (status != ARES_SUCCESS)
- {
- rr_name = NULL;
- goto failed_stat;
- }
-
- aptr += len;
- if (aptr + RRFIXEDSZ > abuf + alen)
- {
- status = ARES_EBADRESP;
- goto failed_stat;
- }
- rr_type = DNS_RR_TYPE(aptr);
- rr_class = DNS_RR_CLASS(aptr);
- rr_len = DNS_RR_LEN(aptr);
- rr_ttl = DNS_RR_TTL(aptr);
- aptr += RRFIXEDSZ;
- if (aptr + rr_len > abuf + alen)
- {
- status = ARES_EBADRESP;
- goto failed_stat;
- }
-
- if (rr_class == C_IN && rr_type == T_A
- && rr_len == sizeof(struct in_addr)
- && strcasecmp(rr_name, hostname) == 0)
- {
- got_a = 1;
- if (aptr + sizeof(struct in_addr) > abuf + alen)
- { /* LCOV_EXCL_START: already checked above */
- status = ARES_EBADRESP;
- goto failed_stat;
- } /* LCOV_EXCL_STOP */
-
- status = ares_append_ai_node(AF_INET, port, rr_ttl, aptr, &nodes);
- if (status != ARES_SUCCESS)
- goto failed_stat;
- }
- else if (rr_class == C_IN && rr_type == T_AAAA
- && rr_len == sizeof(struct ares_in6_addr)
- && strcasecmp(rr_name, hostname) == 0)
- {
- got_aaaa = 1;
- if (aptr + sizeof(struct ares_in6_addr) > abuf + alen)
- { /* LCOV_EXCL_START: already checked above */
- status = ARES_EBADRESP;
- goto failed_stat;
- } /* LCOV_EXCL_STOP */
-
- status = ares_append_ai_node(AF_INET6, port, rr_ttl, aptr, &nodes);
- if (status != ARES_SUCCESS)
- goto failed_stat;
- }
-
- if (rr_class == C_IN && rr_type == T_CNAME)
- {
- got_cname = 1;
- status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data,
- &len, 1);
- if (status != ARES_SUCCESS)
- {
- goto failed_stat;
- }
-
- /* Decode the RR data and replace the hostname with it. */
- /* SA: Seems wrong as it introduses order dependency. */
- hostname = rr_data;
-
- cname = ares__append_addrinfo_cname(&cnames);
- if (!cname)
- {
- status = ARES_ENOMEM;
- ares_free(rr_data);
- goto failed_stat;
- }
- cname->ttl = rr_ttl;
- cname->alias = rr_name;
- cname->name = rr_data;
- rr_name = NULL;
- }
- else
- {
- /* rr_name is only saved for cname */
- ares_free(rr_name);
- rr_name = NULL;
- }
-
-
- aptr += rr_len;
- if (aptr > abuf + alen)
- { /* LCOV_EXCL_START: already checked above */
- status = ARES_EBADRESP;
- goto failed_stat;
- } /* LCOV_EXCL_STOP */
+ rtype = ares_dns_rr_get_type(rr);
+ rname = ares_dns_rr_get_name(rr);
+
+ /* Old code did this hostname sanity check */
+ if ((rtype == ARES_REC_TYPE_A || rtype == ARES_REC_TYPE_AAAA) &&
+ strcasecmp(rname, hostname) != 0) {
+ continue;
}
- if (status == ARES_SUCCESS)
- {
- if (!got_a && !got_aaaa)
- {
- if (!got_cname || (got_cname && cname_only_is_enodata))
- {
- status = ARES_ENODATA;
- goto failed_stat;
- }
- }
-
- /* save the question hostname as ai->name */
- if (ai->name == NULL || strcasecmp(ai->name, question_hostname) != 0)
- {
- ares_free(ai->name);
- ai->name = ares_strdup(question_hostname);
- if (!ai->name)
- {
- status = ARES_ENOMEM;
- goto failed_stat;
- }
- }
-
- if (got_a || got_aaaa)
- {
- ares__addrinfo_cat_nodes(&ai->nodes, nodes);
- nodes = NULL;
- }
-
- if (got_cname)
- {
- ares__addrinfo_cat_cnames(&ai->cnames, cnames);
- cnames = NULL;
- }
+ if (rtype == ARES_REC_TYPE_CNAME) {
+ struct ares_addrinfo_cname *cname;
+
+ got_cname = ARES_TRUE;
+ /* replace hostname with data from cname
+ * SA: Seems wrong as it introduces order dependency. */
+ hostname = ares_dns_rr_get_str(rr, ARES_RR_CNAME_CNAME);
+
+ cname = ares__append_addrinfo_cname(&cnames);
+ if (cname == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+ cname->ttl = (int)ares_dns_rr_get_ttl(rr);
+ cname->alias = ares_strdup(ares_dns_rr_get_name(rr));
+ if (cname->alias == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+ cname->name = ares_strdup(hostname);
+ if (cname->name == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+ } else if (rtype == ARES_REC_TYPE_A) {
+ got_a = ARES_TRUE;
+ status =
+ ares_append_ai_node(AF_INET, port, ares_dns_rr_get_ttl(rr),
+ ares_dns_rr_get_addr(rr, ARES_RR_A_ADDR), &nodes);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+ } else if (rtype == ARES_REC_TYPE_AAAA) {
+ got_aaaa = ARES_TRUE;
+ status = ares_append_ai_node(AF_INET6, port, ares_dns_rr_get_ttl(rr),
+ ares_dns_rr_get_addr6(rr, ARES_RR_AAAA_ADDR),
+ &nodes);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+ } else {
+ continue;
+ }
+ }
+
+ if (!got_a && !got_aaaa &&
+ (!got_cname || (got_cname && cname_only_is_enodata))) {
+ status = ARES_ENODATA;
+ goto done;
+ }
+
+ /* save the hostname as ai->name */
+ if (ai->name == NULL || strcasecmp(ai->name, hostname) != 0) {
+ ares_free(ai->name);
+ ai->name = ares_strdup(hostname);
+ if (ai->name == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
}
+ }
- ares_free(question_hostname);
- return status;
+ if (got_a || got_aaaa) {
+ ares__addrinfo_cat_nodes(&ai->nodes, nodes);
+ nodes = NULL;
+ }
-failed_stat:
- ares_free(question_hostname);
- ares_free(rr_name);
+ if (got_cname) {
+ ares__addrinfo_cat_cnames(&ai->cnames, cnames);
+ cnames = NULL;
+ }
+
+done:
ares__freeaddrinfo_cnames(cnames);
ares__freeaddrinfo_nodes(nodes);
+ ares_dns_record_destroy(dnsrec);
+
+ /* compatibiltiy */
+ if (status == ARES_EBADNAME) {
+ status = ARES_EBADRESP;
+ }
+
return status;
}
diff --git a/src/lib/ares__read_line.c b/src/lib/ares__read_line.c
index c62ad2a..d65ac1f 100644
--- a/src/lib/ares__read_line.c
+++ b/src/lib/ares__read_line.c
@@ -1,23 +1,33 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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 (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
#include "ares.h"
-#include "ares_nowarn.h"
#include "ares_private.h"
/* This is an internal function. Its contract is to read a line from
@@ -28,46 +38,45 @@
* appropriate. The initial value of *buf should be NULL. After the
* calling routine is done reading lines, it should free *buf.
*/
-int ares__read_line(FILE *fp, char **buf, size_t *bufsize)
+ares_status_t ares__read_line(FILE *fp, char **buf, size_t *bufsize)
{
- char *newbuf;
+ char *newbuf;
size_t offset = 0;
size_t len;
- if (*buf == NULL)
- {
- *buf = ares_malloc(128);
- if (!*buf)
- return ARES_ENOMEM;
- *bufsize = 128;
+ if (*buf == NULL) {
+ *buf = ares_malloc(128);
+ if (!*buf) {
+ return ARES_ENOMEM;
}
+ *bufsize = 128;
+ }
- for (;;)
- {
- int bytestoread = aresx_uztosi(*bufsize - offset);
+ for (;;) {
+ int bytestoread = (int)(*bufsize - offset);
- if (!fgets(*buf + offset, bytestoread, fp))
- return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF;
- len = offset + strlen(*buf + offset);
- if ((*buf)[len - 1] == '\n')
- {
- (*buf)[len - 1] = 0;
- break;
- }
- offset = len;
- if(len < *bufsize - 1)
- continue;
+ if (!fgets(*buf + offset, bytestoread, fp)) {
+ return (offset != 0) ? 0 : (ferror(fp)) ? ARES_EFILE : ARES_EOF;
+ }
+ len = offset + ares_strlen(*buf + offset);
+ if ((*buf)[len - 1] == '\n') {
+ (*buf)[len - 1] = 0;
+ break;
+ }
+ offset = len;
+ if (len < *bufsize - 1) {
+ continue;
+ }
- /* Allocate more space. */
- newbuf = ares_realloc(*buf, *bufsize * 2);
- if (!newbuf)
- {
- ares_free(*buf);
- *buf = NULL;
- return ARES_ENOMEM;
- }
- *buf = newbuf;
- *bufsize *= 2;
+ /* Allocate more space. */
+ newbuf = ares_realloc(*buf, *bufsize * 2);
+ if (!newbuf) {
+ ares_free(*buf);
+ *buf = NULL;
+ return ARES_ENOMEM;
}
+ *buf = newbuf;
+ *bufsize *= 2;
+ }
return ARES_SUCCESS;
}
diff --git a/src/lib/ares__readaddrinfo.c b/src/lib/ares__readaddrinfo.c
index 673de87..950d130 100644
--- a/src/lib/ares__readaddrinfo.c
+++ b/src/lib/ares__readaddrinfo.c
@@ -1,16 +1,27 @@
-/* Copyright (C) 2019 by Andrew Selivanov
+/* MIT License
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * Copyright (c) 2019 Andrew Selivanov
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -27,27 +38,33 @@
#include "ares.h"
#include "ares_inet_net_pton.h"
-#include "ares_nowarn.h"
#include "ares_private.h"
#define MAX_ALIASES 40
-int ares__readaddrinfo(FILE *fp,
- const char *name,
- unsigned short port,
- const struct ares_addrinfo_hints *hints,
- struct ares_addrinfo *ai)
+ares_status_t ares__readaddrinfo(FILE *fp, const char *name,
+ unsigned short port,
+ const struct ares_addrinfo_hints *hints,
+ struct ares_addrinfo *ai)
{
- char *line = NULL, *p, *q;
- char *txtaddr, *txthost, *txtalias;
- char *aliases[MAX_ALIASES];
- unsigned int i, alias_count;
- int status = ARES_SUCCESS;
- size_t linesize;
- struct ares_addrinfo_cname *cname = NULL, *cnames = NULL;
- struct ares_addrinfo_node *nodes = NULL;
- int match_with_alias, match_with_canonical;
- int want_cname = hints->ai_flags & ARES_AI_CANONNAME;
+ char *line = NULL;
+ char *p;
+ char *q;
+ const char *txtaddr;
+ const char *txthost;
+ char *txtalias;
+ char *aliases[MAX_ALIASES];
+ size_t i;
+ size_t alias_count;
+ ares_status_t status = ARES_SUCCESS;
+ size_t linesize;
+ struct ares_addrinfo_cname *cname = NULL;
+ struct ares_addrinfo_cname *cnames = NULL;
+ struct ares_addrinfo_node *nodes = NULL;
+ ares_bool_t match_with_alias;
+ ares_bool_t match_with_canonical;
+ ares_bool_t want_cname =
+ (hints->ai_flags & ARES_AI_CANONNAME) ? ARES_TRUE : ARES_FALSE;
/* Validate family */
switch (hints->ai_family) {
@@ -60,186 +77,182 @@ int ares__readaddrinfo(FILE *fp,
}
ai->name = ares_strdup(name);
- if(!ai->name)
- {
- status = ARES_ENOMEM;
- goto fail;
- }
-
- while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
- {
- match_with_alias = 0;
- match_with_canonical = 0;
- alias_count = 0;
- /* Trim line comment. */
- p = line;
- while (*p && (*p != '#'))
- p++;
- *p = '\0';
+ if (!ai->name) {
+ status = ARES_ENOMEM;
+ goto fail;
+ }
- /* Trim trailing whitespace. */
- q = p - 1;
- while ((q >= line) && ISSPACE(*q))
- q--;
- *++q = '\0';
+ while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) {
+ match_with_alias = ARES_FALSE;
+ match_with_canonical = ARES_FALSE;
+ alias_count = 0;
+ /* Trim line comment. */
+ p = line;
+ while (*p && (*p != '#')) {
+ p++;
+ }
+ *p = '\0';
- /* Skip leading whitespace. */
- p = line;
- while (*p && ISSPACE(*p))
- p++;
- if (!*p)
- /* Ignore line if empty. */
- continue;
+ /* Trim trailing whitespace. */
+ q = p - 1;
+ while ((q >= line) && ISSPACE(*q)) {
+ q--;
+ }
+ *++q = '\0';
- /* Pointer to start of IPv4 or IPv6 address part. */
- txtaddr = p;
+ /* Skip leading whitespace. */
+ p = line;
+ while (*p && ISSPACE(*p)) {
+ p++;
+ }
+ if (!*p) {
+ /* Ignore line if empty. */
+ continue;
+ }
- /* Advance past address part. */
- while (*p && !ISSPACE(*p))
- p++;
- if (!*p)
- /* Ignore line if reached end of line. */
- continue;
+ /* Pointer to start of IPv4 or IPv6 address part. */
+ txtaddr = p;
- /* Null terminate address part. */
- *p = '\0';
+ /* Advance past address part. */
+ while (*p && !ISSPACE(*p)) {
+ p++;
+ }
+ if (!*p) {
+ /* Ignore line if reached end of line. */
+ continue;
+ }
+
+ /* Null terminate address part. */
+ *p = '\0';
- /* Advance to host name */
+ /* Advance to host name */
+ p++;
+ while (*p && ISSPACE(*p)) {
p++;
- while (*p && ISSPACE(*p))
- p++;
- if (!*p)
- /* Ignore line if reached end of line. */
- continue; /* LCOV_EXCL_LINE: trailing whitespace already stripped */
+ }
+ if (!*p) {
+ /* Ignore line if reached end of line. */
+ continue; /* LCOV_EXCL_LINE: trailing whitespace already stripped */
+ }
- /* Pointer to start of host name. */
- txthost = p;
+ /* Pointer to start of host name. */
+ txthost = p;
- /* Advance past host name. */
- while (*p && !ISSPACE(*p))
- p++;
+ /* Advance past host name. */
+ while (*p && !ISSPACE(*p)) {
+ p++;
+ }
- /* Pointer to start of first alias. */
- txtalias = NULL;
- if (*p)
- {
- q = p + 1;
- while (*q && ISSPACE(*q))
- q++;
- if (*q)
- txtalias = q;
- }
+ /* Pointer to start of first alias. */
+ txtalias = NULL;
+ if (*p) {
+ q = p + 1;
+ while (*q && ISSPACE(*q)) {
+ q++;
+ }
+ if (*q) {
+ txtalias = q;
+ }
+ }
- /* Null terminate host name. */
- *p = '\0';
+ /* Null terminate host name. */
+ *p = '\0';
- /* Find out if host name matches with canonical host name. */
- if (strcasecmp(txthost, name) == 0)
- {
- match_with_canonical = 1;
- }
+ /* Find out if host name matches with canonical host name. */
+ if (strcasecmp(txthost, name) == 0) {
+ match_with_canonical = ARES_TRUE;
+ }
- /* Find out if host name matches with one of the aliases. */
- while (txtalias)
- {
- p = txtalias;
- while (*p && !ISSPACE(*p))
- p++;
- q = p;
- while (*q && ISSPACE(*q))
- q++;
- *p = '\0';
- if (strcasecmp(txtalias, name) == 0)
- {
- match_with_alias = 1;
- if (!want_cname)
- break;
- }
- if (alias_count < MAX_ALIASES)
- {
- aliases[alias_count++] = txtalias;
- }
- txtalias = *q ? q : NULL;
+ /* Find out if host name matches with one of the aliases. */
+ while (txtalias) {
+ p = txtalias;
+ while (*p && !ISSPACE(*p)) {
+ p++;
+ }
+ q = p;
+ while (*q && ISSPACE(*q)) {
+ q++;
+ }
+ *p = '\0';
+ if (strcasecmp(txtalias, name) == 0) {
+ match_with_alias = ARES_TRUE;
+ if (!want_cname) {
+ break;
}
+ }
+ if (alias_count < MAX_ALIASES) {
+ aliases[alias_count++] = txtalias;
+ }
+ txtalias = *q ? q : NULL;
+ }
- /* Try next line if host does not match. */
- if (!match_with_alias && !match_with_canonical)
- {
- continue;
- }
+ /* Try next line if host does not match. */
+ if (!match_with_alias && !match_with_canonical) {
+ continue;
+ }
- /*
- * Convert address string to network address for the requested families.
- * Actual address family possible values are AF_INET and AF_INET6 only.
- */
- if ((hints->ai_family == AF_INET) || (hints->ai_family == AF_UNSPEC))
- {
- struct in_addr addr4;
- if (ares_inet_pton(AF_INET, txtaddr, &addr4) == 1)
- {
- status = ares_append_ai_node(AF_INET, port, 0, &addr4, &nodes);
- if (status != ARES_SUCCESS)
- {
- goto fail;
- }
- }
+ /*
+ * Convert address string to network address for the requested families.
+ * Actual address family possible values are AF_INET and AF_INET6 only.
+ */
+ if ((hints->ai_family == AF_INET) || (hints->ai_family == AF_UNSPEC)) {
+ struct in_addr addr4;
+ if (ares_inet_pton(AF_INET, txtaddr, &addr4) == 1) {
+ status = ares_append_ai_node(AF_INET, port, 0, &addr4, &nodes);
+ if (status != ARES_SUCCESS) {
+ goto fail;
}
- if ((hints->ai_family == AF_INET6) || (hints->ai_family == AF_UNSPEC))
- {
- struct ares_in6_addr addr6;
- if (ares_inet_pton(AF_INET6, txtaddr, &addr6) == 1)
- {
- status = ares_append_ai_node(AF_INET6, port, 0, &addr6, &nodes);
- if (status != ARES_SUCCESS)
- {
- goto fail;
- }
- }
+ }
+ }
+ if ((hints->ai_family == AF_INET6) || (hints->ai_family == AF_UNSPEC)) {
+ struct ares_in6_addr addr6;
+ if (ares_inet_pton(AF_INET6, txtaddr, &addr6) == 1) {
+ status = ares_append_ai_node(AF_INET6, port, 0, &addr6, &nodes);
+ if (status != ARES_SUCCESS) {
+ goto fail;
}
+ }
+ }
- if (status != ARES_SUCCESS)
- /* Ignore line if invalid address string for the requested family. */
- continue;
-
- if (want_cname)
- {
- for (i = 0; i < alias_count; ++i)
- {
- cname = ares__append_addrinfo_cname(&cnames);
- if (!cname)
- {
- status = ARES_ENOMEM;
- goto fail;
- }
- cname->alias = ares_strdup(aliases[i]);
- cname->name = ares_strdup(txthost);
- }
- /* No aliases, cname only. */
- if(!alias_count)
- {
- cname = ares__append_addrinfo_cname(&cnames);
- if (!cname)
- {
- status = ARES_ENOMEM;
- goto fail;
- }
- cname->name = ares_strdup(txthost);
- }
+ if (want_cname) {
+ for (i = 0; i < alias_count; ++i) {
+ cname = ares__append_addrinfo_cname(&cnames);
+ if (!cname) {
+ status = ARES_ENOMEM;
+ goto fail;
+ }
+ cname->alias = ares_strdup(aliases[i]);
+ cname->name = ares_strdup(txthost);
+ }
+ /* No aliases, cname only. */
+ if (!alias_count) {
+ cname = ares__append_addrinfo_cname(&cnames);
+ if (!cname) {
+ status = ARES_ENOMEM;
+ goto fail;
}
+ cname->name = ares_strdup(txthost);
+ }
}
+ }
/* Last read failed. */
- if (status == ARES_ENOMEM)
- {
- goto fail;
- }
+ if (status == ARES_ENOMEM) {
+ goto fail;
+ }
+
+ /* If no results, its a failure */
+ if (!nodes) {
+ status = ARES_ENOTFOUND;
+ goto fail;
+ }
/* Free line buffer. */
ares_free(line);
ares__addrinfo_cat_cnames(&ai->cnames, cnames);
ares__addrinfo_cat_nodes(&ai->nodes, nodes);
- return nodes ? ARES_SUCCESS : ARES_ENOTFOUND;
+ return ARES_SUCCESS;
fail:
ares_free(line);
diff --git a/src/lib/ares__slist.c b/src/lib/ares__slist.c
new file mode 100644
index 0000000..4ecac54
--- /dev/null
+++ b/src/lib/ares__slist.c
@@ -0,0 +1,451 @@
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#include "ares_setup.h"
+#include "ares.h"
+#include "ares_private.h"
+#include "ares__slist.h"
+
+/* SkipList implementation */
+
+#define ARES__SLIST_START_LEVELS 4
+
+struct ares__slist {
+ ares_rand_state *rand_state;
+ unsigned char rand_data[8];
+ size_t rand_bits;
+
+ ares__slist_node_t **head;
+ size_t levels;
+ ares__slist_node_t *tail;
+
+ ares__slist_cmp_t cmp;
+ ares__slist_destructor_t destruct;
+ size_t cnt;
+};
+
+struct ares__slist_node {
+ void *data;
+ ares__slist_node_t **prev;
+ ares__slist_node_t **next;
+ size_t levels;
+ ares__slist_t *parent;
+};
+
+ares__slist_t *ares__slist_create(ares_rand_state *rand_state,
+ ares__slist_cmp_t cmp,
+ ares__slist_destructor_t destruct)
+{
+ ares__slist_t *list;
+
+ if (rand_state == NULL || cmp == NULL) {
+ return NULL;
+ }
+
+ list = ares_malloc_zero(sizeof(*list));
+
+ if (list == NULL) {
+ return NULL;
+ }
+
+ list->rand_state = rand_state;
+ list->cmp = cmp;
+ list->destruct = destruct;
+
+ list->levels = ARES__SLIST_START_LEVELS;
+ list->head = ares_malloc_zero(sizeof(*list->head) * list->levels);
+ if (list->head == NULL) {
+ ares_free(list);
+ return NULL;
+ }
+
+ return list;
+}
+
+static ares_bool_t ares__slist_coin_flip(ares__slist_t *list)
+{
+ size_t total_bits = sizeof(list->rand_data) * 8;
+ size_t bit;
+
+ /* Refill random data used for coin flips. We pull this in 8 byte chunks.
+ * ares__rand_bytes() has some built-in caching of its own so we don't need
+ * to be excessive in caching ourselves. Prefer to require less memory per
+ * skiplist */
+ if (list->rand_bits == 0) {
+ ares__rand_bytes(list->rand_state, list->rand_data,
+ sizeof(list->rand_data));
+ list->rand_bits = total_bits;
+ }
+
+ bit = total_bits - list->rand_bits;
+ list->rand_bits--;
+
+ return (list->rand_data[bit / 8] & (1 << (bit % 8))) ? ARES_TRUE : ARES_FALSE;
+}
+
+void ares__slist_replace_destructor(ares__slist_t *list,
+ ares__slist_destructor_t destruct)
+{
+ if (list == NULL) {
+ return;
+ }
+
+ list->destruct = destruct;
+}
+
+static size_t ares__slist_max_level(const ares__slist_t *list)
+{
+ size_t max_level = 0;
+
+ if (list->cnt + 1 <= (1 << ARES__SLIST_START_LEVELS)) {
+ max_level = ARES__SLIST_START_LEVELS;
+ } else {
+ max_level = ares__log2(ares__round_up_pow2(list->cnt + 1));
+ }
+
+ if (list->levels > max_level) {
+ max_level = list->levels;
+ }
+
+ return max_level;
+}
+
+static size_t ares__slist_calc_level(ares__slist_t *list)
+{
+ size_t max_level = ares__slist_max_level(list);
+ size_t level;
+
+ for (level = 1; ares__slist_coin_flip(list) && level < max_level; level++)
+ ;
+
+ return level;
+}
+
+ares__slist_node_t *ares__slist_insert(ares__slist_t *list, void *val)
+{
+ ares__slist_node_t *node = NULL;
+ ares__slist_node_t *left = NULL;
+ size_t i;
+
+ if (list == NULL || val == NULL) {
+ return NULL;
+ }
+
+ node = ares_malloc_zero(sizeof(*node));
+
+ if (node == NULL) {
+ goto fail;
+ }
+
+ node->data = val;
+ node->parent = list;
+
+ /* Randomly determine the number of levels we want to use */
+ node->levels = ares__slist_calc_level(list);
+
+ /* Allocate array of next and prev nodes for linking each level */
+ node->next = ares_malloc_zero(sizeof(*node->next) * node->levels);
+ if (node->next == NULL) {
+ goto fail;
+ }
+
+ node->prev = ares_malloc_zero(sizeof(*node->prev) * node->levels);
+ if (node->prev == NULL) {
+ goto fail;
+ }
+
+ /* If the number of levels is greater than we currently support in the slist,
+ * increase the count */
+ if (list->levels < node->levels) {
+ void *ptr =
+ ares_realloc_zero(list->head, sizeof(*list->head) * list->levels,
+ sizeof(*list->head) * node->levels);
+ if (ptr == NULL) {
+ goto fail;
+ }
+
+ list->head = ptr;
+ list->levels = node->levels;
+ }
+
+
+ /* Scan from highest level in the slist, even if we're not using that number
+ * of levels for this entry as this is what makes it O(log n) */
+ for (i = list->levels; i-- > 0;) {
+ /* set left if left is NULL and the current node value is greater than the
+ * head at this level */
+ if (left == NULL && list->head[i] != NULL &&
+ list->cmp(node->data, list->head[i]->data) > 0) {
+ left = list->head[i];
+ }
+
+ if (left != NULL) {
+ /* scan forward to find our insertion point */
+ while (left->next[i] != NULL &&
+ list->cmp(node->data, left->next[i]->data) > 0) {
+ left = left->next[i];
+ }
+ }
+
+ /* search only as we didn't randomly select this number of levels */
+ if (i >= node->levels) {
+ continue;
+ }
+
+ if (left == NULL) {
+ /* head insertion */
+ node->next[i] = list->head[i];
+ node->prev[i] = NULL;
+ list->head[i] = node;
+ } else {
+ /* Chain */
+ node->next[i] = left->next[i];
+ node->prev[i] = left;
+ left->next[i] = node;
+ }
+
+ if (node->next[i] != NULL) {
+ /* chain prev */
+ node->next[i]->prev[i] = node;
+ } else {
+ if (i == 0) {
+ /* update tail */
+ list->tail = node;
+ }
+ }
+ }
+
+ list->cnt++;
+
+ return node;
+
+fail:
+ if (node) {
+ ares_free(node->prev);
+ ares_free(node->next);
+ ares_free(node);
+ }
+ return NULL;
+}
+
+ares__slist_node_t *ares__slist_node_find(const ares__slist_t *list,
+ const void *val)
+{
+ size_t i;
+ ares__slist_node_t *node = NULL;
+ int rv = -1;
+
+ if (list == NULL || val == NULL) {
+ return NULL;
+ }
+
+ /* Scan nodes starting at the highest level. For each level scan forward
+ * until the value is between the prior and next node, or if equal quit
+ * as we found a match */
+ for (i = list->levels; i-- > 0;) {
+ if (node == NULL) {
+ node = list->head[i];
+ }
+
+ if (node == NULL) {
+ continue;
+ }
+
+ do {
+ rv = list->cmp(val, node->data);
+
+ if (rv < 0) {
+ /* back off, our value is greater than current node reference */
+ node = node->prev[i];
+ } else if (rv > 0) {
+ /* move forward and try again. if it goes past, it will loop again and
+ * go to previous entry */
+ node = node->next[i];
+ }
+
+ /* rv == 0 will terminate loop */
+
+ } while (node != NULL && rv > 0);
+
+ /* Found a match, no need to continue */
+ if (rv == 0) {
+ break;
+ }
+ }
+
+ /* no match */
+ if (rv != 0) {
+ return NULL;
+ }
+
+ /* The list may have multiple entries that match. They're guaranteed to be
+ * in order, but we're not guaranteed to have selected the _first_ matching
+ * node. Lets scan backwards to find the first match */
+ while (node->prev[0] != NULL && list->cmp(node->prev[0]->data, val) == 0) {
+ node = node->prev[0];
+ }
+
+ return node;
+}
+
+ares__slist_node_t *ares__slist_node_first(const ares__slist_t *list)
+{
+ if (list == NULL) {
+ return NULL;
+ }
+
+ return list->head[0];
+}
+
+ares__slist_node_t *ares__slist_node_last(const ares__slist_t *list)
+{
+ if (list == NULL) {
+ return NULL;
+ }
+ return list->tail;
+}
+
+ares__slist_node_t *ares__slist_node_next(const ares__slist_node_t *node)
+{
+ if (node == NULL) {
+ return NULL;
+ }
+ return node->next[0];
+}
+
+ares__slist_node_t *ares__slist_node_prev(const ares__slist_node_t *node)
+{
+ if (node == NULL) {
+ return NULL;
+ }
+ return node->prev[0];
+}
+
+void *ares__slist_node_val(ares__slist_node_t *node)
+{
+ if (node == NULL) {
+ return NULL;
+ }
+
+ return node->data;
+}
+
+size_t ares__slist_len(const ares__slist_t *list)
+{
+ if (list == NULL) {
+ return 0;
+ }
+ return list->cnt;
+}
+
+ares__slist_t *ares__slist_node_parent(ares__slist_node_t *node)
+{
+ if (node == NULL) {
+ return NULL;
+ }
+ return node->parent;
+}
+
+void *ares__slist_first_val(const ares__slist_t *list)
+{
+ return ares__slist_node_val(ares__slist_node_first(list));
+}
+
+void *ares__slist_last_val(const ares__slist_t *list)
+{
+ return ares__slist_node_val(ares__slist_node_last(list));
+}
+
+void *ares__slist_node_claim(ares__slist_node_t *node)
+{
+ void *val;
+ ares__slist_t *list;
+ size_t i;
+
+ if (node == NULL) {
+ return NULL;
+ }
+
+ list = node->parent;
+ val = node->data;
+
+ /* relink each node at each level */
+ for (i = node->levels; i-- > 0;) {
+ if (node->next[i] == NULL) {
+ if (i == 0) {
+ list->tail = node->prev[0];
+ }
+ } else {
+ node->next[i]->prev[i] = node->prev[i];
+ }
+
+ if (node->prev[i] == NULL) {
+ list->head[i] = node->next[i];
+ } else {
+ node->prev[i]->next[i] = node->next[i];
+ }
+ }
+
+ ares_free(node->next);
+ ares_free(node->prev);
+ ares_free(node);
+
+ list->cnt--;
+
+ return val;
+}
+
+void ares__slist_node_destroy(ares__slist_node_t *node)
+{
+ ares__slist_destructor_t destruct;
+ void *val;
+
+ if (node == NULL) {
+ return;
+ }
+
+ destruct = node->parent->destruct;
+ val = ares__slist_node_claim(node);
+
+ if (val != NULL && destruct != NULL) {
+ destruct(val);
+ }
+}
+
+void ares__slist_destroy(ares__slist_t *list)
+{
+ ares__slist_node_t *node;
+
+ if (list == NULL) {
+ return;
+ }
+
+ while ((node = ares__slist_node_first(list)) != NULL) {
+ ares__slist_node_destroy(node);
+ }
+
+ ares_free(list->head);
+ ares_free(list);
+}
diff --git a/src/lib/ares__slist.h b/src/lib/ares__slist.h
new file mode 100644
index 0000000..23488ff
--- /dev/null
+++ b/src/lib/ares__slist.h
@@ -0,0 +1,198 @@
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#ifndef __ARES__SLIST_H
+#define __ARES__SLIST_H
+
+
+/*! \addtogroup ares__slist SkipList Data Structure
+ *
+ * This data structure is known as a Skip List, which in essence is a sorted
+ * linked list with multiple levels of linkage to gain some algorithmic
+ * advantages. The usage symantecs are almost identical to what you'd expect
+ * with a linked list.
+ *
+ * Average time complexity:
+ * - Insert: O(log n)
+ * - Search: O(log n)
+ * - Delete: O(1) -- delete assumes you hold a node pointer
+ *
+ * It should be noted, however, that "effort" involved with an insert or
+ * remove operation is higher than a normal linked list. For very small
+ * lists this may be less efficient, but for any list with a moderate number
+ * of entries this will prove much more efficient.
+ *
+ * This data structure is often compared with a Binary Search Tree in
+ * functionality and usage.
+ *
+ * @{
+ */
+struct ares__slist;
+
+/*! SkipList Object, opaque */
+typedef struct ares__slist ares__slist_t;
+
+struct ares__slist_node;
+
+/*! SkipList Node Object, opaque */
+typedef struct ares__slist_node ares__slist_node_t;
+
+/*! SkipList Node Value destructor callback
+ *
+ * \param[in] data User-defined data to destroy
+ */
+typedef void (*ares__slist_destructor_t)(void *data);
+
+/*! SkipList comparison function
+ *
+ * \param[in] data1 First user-defined data object
+ * \param[in] data2 Second user-defined data object
+ * \return < 0 if data1 < data1, > 0 if data1 > data2, 0 if data1 == data2
+ */
+typedef int (*ares__slist_cmp_t)(const void *data1, const void *data2);
+
+/*! Create SkipList
+ *
+ * \param[in] rand_state Initialized ares random state.
+ * \param[in] cmp SkipList comparison function
+ * \param[in] destruct SkipList Node Value Destructor. Optional, use NULL.
+ * \return Initialized SkipList Object or NULL on misuse or ENOMEM
+ */
+ares__slist_t *ares__slist_create(ares_rand_state *rand_state,
+ ares__slist_cmp_t cmp,
+ ares__slist_destructor_t destruct);
+
+/*! Replace SkipList Node Value Destructor
+ *
+ * \param[in] list Initialized SkipList Object
+ * \param[in] destruct Replacement destructor. May be NULL.
+ */
+void ares__slist_replace_destructor(ares__slist_t *list,
+ ares__slist_destructor_t destruct);
+
+/*! Insert Value into SkipList
+ *
+ * \param[in] list Initialized SkipList Object
+ * \param[in] val Node Value. Must not be NULL. Function takes ownership
+ * and will have destructor called.
+ * \return SkipList Node Object or NULL on misuse or ENOMEM
+ */
+ares__slist_node_t *ares__slist_insert(ares__slist_t *list, void *val);
+
+/*! Fetch first node in SkipList
+ *
+ * \param[in] list Initialized SkipList Object
+ * \return SkipList Node Object or NULL if none
+ */
+ares__slist_node_t *ares__slist_node_first(const ares__slist_t *list);
+
+/*! Fetch last node in SkipList
+ *
+ * \param[in] list Initialized SkipList Object
+ * \return SkipList Node Object or NULL if none
+ */
+ares__slist_node_t *ares__slist_node_last(const ares__slist_t *list);
+
+/*! Fetch next node in SkipList
+ *
+ * \param[in] node SkipList Node Object
+ * \return SkipList Node Object or NULL if none
+ */
+ares__slist_node_t *ares__slist_node_next(const ares__slist_node_t *node);
+
+/*! Fetch previous node in SkipList
+ *
+ * \param[in] node SkipList Node Object
+ * \return SkipList Node Object or NULL if none
+ */
+ares__slist_node_t *ares__slist_node_prev(const ares__slist_node_t *node);
+
+/*! Fetch SkipList Node Object by Value
+ *
+ * \param[in] list Initialized SkipList Object
+ * \param[in] val Object to use for comparison
+ * \return SkipList Node Object or NULL if not found
+ */
+ares__slist_node_t *ares__slist_node_find(const ares__slist_t *list,
+ const void *val);
+
+
+/*! Fetch Node Value
+ *
+ * \param[in] node SkipList Node Object
+ * \return user defined node value
+ */
+void *ares__slist_node_val(ares__slist_node_t *node);
+
+/*! Fetch number of entries in SkipList Object
+ *
+ * \param[in] list Initialized SkipList Object
+ * \return number of entries
+ */
+size_t ares__slist_len(const ares__slist_t *list);
+
+/*! Fetch SkipList Object from SkipList Node
+ *
+ * \param[in] node SkipList Node Object
+ * \return SkipList Object
+ */
+ares__slist_t *ares__slist_node_parent(ares__slist_node_t *node);
+
+/*! Fetch first Node Value in SkipList
+ *
+ * \param[in] list Initialized SkipList Object
+ * \return user defined node value or NULL if none
+ */
+void *ares__slist_first_val(const ares__slist_t *list);
+
+/*! Fetch last Node Value in SkipList
+ *
+ * \param[in] list Initialized SkipList Object
+ * \return user defined node value or NULL if none
+ */
+void *ares__slist_last_val(const ares__slist_t *list);
+
+/*! Take back ownership of Node Value in SkipList, remove from SkipList.
+ *
+ * \param[in] node SkipList Node Object
+ * \return user defined node value
+ */
+void *ares__slist_node_claim(ares__slist_node_t *node);
+
+/*! Remove Node from SkipList, calling destructor for Node Value.
+ *
+ * \param[in] node SkipList Node Object
+ */
+void ares__slist_node_destroy(ares__slist_node_t *node);
+
+/*! Destroy SkipList Object. If there are any nodes, they will be destroyed.
+ *
+ * \param[in] list Initialized SkipList Object
+ */
+void ares__slist_destroy(ares__slist_t *list);
+
+/*! @} */
+
+#endif /* __ARES__SLIST_H */
diff --git a/src/lib/ares__sortaddrinfo.c b/src/lib/ares__sortaddrinfo.c
index 3f050ca..9093ada 100644
--- a/src/lib/ares__sortaddrinfo.c
+++ b/src/lib/ares__sortaddrinfo.c
@@ -6,7 +6,7 @@
/*
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
* Copyright (C) 2018 The Android Open Source Project
- * Copyright (C) 2019 by Andrew Selivanov
+ * Copyright (C) 2019 Andrew Selivanov
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -32,6 +32,8 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
*/
#include "ares_setup.h"
@@ -52,22 +54,21 @@
#include "ares.h"
#include "ares_private.h"
-struct addrinfo_sort_elem
-{
+struct addrinfo_sort_elem {
struct ares_addrinfo_node *ai;
- int has_src_addr;
- ares_sockaddr src_addr;
- int original_order;
+ ares_bool_t has_src_addr;
+ ares_sockaddr src_addr;
+ size_t original_order;
};
#define ARES_IPV6_ADDR_MC_SCOPE(a) ((a)->s6_addr[1] & 0x0f)
-#define ARES_IPV6_ADDR_SCOPE_NODELOCAL 0x01
-#define ARES_IPV6_ADDR_SCOPE_INTFACELOCAL 0x01
-#define ARES_IPV6_ADDR_SCOPE_LINKLOCAL 0x02
-#define ARES_IPV6_ADDR_SCOPE_SITELOCAL 0x05
-#define ARES_IPV6_ADDR_SCOPE_ORGLOCAL 0x08
-#define ARES_IPV6_ADDR_SCOPE_GLOBAL 0x0e
+#define ARES_IPV6_ADDR_SCOPE_NODELOCAL 0x01
+#define ARES_IPV6_ADDR_SCOPE_INTFACELOCAL 0x01
+#define ARES_IPV6_ADDR_SCOPE_LINKLOCAL 0x02
+#define ARES_IPV6_ADDR_SCOPE_SITELOCAL 0x05
+#define ARES_IPV6_ADDR_SCOPE_ORGLOCAL 0x08
+#define ARES_IPV6_ADDR_SCOPE_GLOBAL 0x0e
#define ARES_IN_LOOPBACK(a) ((((long int)(a)) & 0xff000000) == 0x7f000000)
@@ -76,127 +77,94 @@ struct addrinfo_sort_elem
/* These macros are modelled after the ones in <netinet/in6.h>. */
/* RFC 4380, section 2.6 */
-#define ARES_IN6_IS_ADDR_TEREDO(a) \
- ((*(const unsigned int *)(const void *)(&(a)->s6_addr[0]) == ntohl(0x20010000)))
+#define ARES_IN6_IS_ADDR_TEREDO(a) \
+ ((*(const unsigned int *)(const void *)(&(a)->s6_addr[0]) == \
+ ntohl(0x20010000)))
/* RFC 3056, section 2. */
-#define ARES_IN6_IS_ADDR_6TO4(a) \
- (((a)->s6_addr[0] == 0x20) && ((a)->s6_addr[1] == 0x02))
+#define ARES_IN6_IS_ADDR_6TO4(a) \
+ (((a)->s6_addr[0] == 0x20) && ((a)->s6_addr[1] == 0x02))
/* 6bone testing address area (3ffe::/16), deprecated in RFC 3701. */
-#define ARES_IN6_IS_ADDR_6BONE(a) \
- (((a)->s6_addr[0] == 0x3f) && ((a)->s6_addr[1] == 0xfe))
-
+#define ARES_IN6_IS_ADDR_6BONE(a) \
+ (((a)->s6_addr[0] == 0x3f) && ((a)->s6_addr[1] == 0xfe))
static int get_scope(const struct sockaddr *addr)
{
- if (addr->sa_family == AF_INET6)
- {
- const struct sockaddr_in6 *addr6 = CARES_INADDR_CAST(const struct sockaddr_in6 *, addr);
- if (IN6_IS_ADDR_MULTICAST(&addr6->sin6_addr))
- {
- return ARES_IPV6_ADDR_MC_SCOPE(&addr6->sin6_addr);
- }
- else if (IN6_IS_ADDR_LOOPBACK(&addr6->sin6_addr) ||
- IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr))
- {
- /*
- * RFC 4291 section 2.5.3 says loopback is to be treated as having
- * link-local scope.
- */
- return ARES_IPV6_ADDR_SCOPE_LINKLOCAL;
- }
- else if (IN6_IS_ADDR_SITELOCAL(&addr6->sin6_addr))
- {
- return ARES_IPV6_ADDR_SCOPE_SITELOCAL;
- }
- else
- {
- return ARES_IPV6_ADDR_SCOPE_GLOBAL;
- }
- }
- else if (addr->sa_family == AF_INET)
- {
- const struct sockaddr_in *addr4 = CARES_INADDR_CAST(const struct sockaddr_in *, addr);
- unsigned long int na = ntohl(addr4->sin_addr.s_addr);
- if (ARES_IN_LOOPBACK(na) || /* 127.0.0.0/8 */
- (na & 0xffff0000) == 0xa9fe0000) /* 169.254.0.0/16 */
- {
- return ARES_IPV6_ADDR_SCOPE_LINKLOCAL;
- }
- else
- {
- /*
- * RFC 6724 section 3.2. Other IPv4 addresses, including private
- * addresses and shared addresses (100.64.0.0/10), are assigned global
- * scope.
- */
- return ARES_IPV6_ADDR_SCOPE_GLOBAL;
- }
+ if (addr->sa_family == AF_INET6) {
+ const struct sockaddr_in6 *addr6 =
+ CARES_INADDR_CAST(const struct sockaddr_in6 *, addr);
+ if (IN6_IS_ADDR_MULTICAST(&addr6->sin6_addr)) {
+ return ARES_IPV6_ADDR_MC_SCOPE(&addr6->sin6_addr);
+ } else if (IN6_IS_ADDR_LOOPBACK(&addr6->sin6_addr) ||
+ IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr)) {
+ /*
+ * RFC 4291 section 2.5.3 says loopback is to be treated as having
+ * link-local scope.
+ */
+ return ARES_IPV6_ADDR_SCOPE_LINKLOCAL;
+ } else if (IN6_IS_ADDR_SITELOCAL(&addr6->sin6_addr)) {
+ return ARES_IPV6_ADDR_SCOPE_SITELOCAL;
+ } else {
+ return ARES_IPV6_ADDR_SCOPE_GLOBAL;
}
- else
+ } else if (addr->sa_family == AF_INET) {
+ const struct sockaddr_in *addr4 =
+ CARES_INADDR_CAST(const struct sockaddr_in *, addr);
+ unsigned long int na = ntohl(addr4->sin_addr.s_addr);
+ if (ARES_IN_LOOPBACK(na) || /* 127.0.0.0/8 */
+ (na & 0xffff0000) == 0xa9fe0000) /* 169.254.0.0/16 */
{
+ return ARES_IPV6_ADDR_SCOPE_LINKLOCAL;
+ } else {
/*
- * This should never happen.
- * Return a scope with low priority as a last resort.
+ * RFC 6724 section 3.2. Other IPv4 addresses, including private
+ * addresses and shared addresses (100.64.0.0/10), are assigned global
+ * scope.
*/
- return ARES_IPV6_ADDR_SCOPE_NODELOCAL;
+ return ARES_IPV6_ADDR_SCOPE_GLOBAL;
}
+ } else {
+ /*
+ * This should never happen.
+ * Return a scope with low priority as a last resort.
+ */
+ return ARES_IPV6_ADDR_SCOPE_NODELOCAL;
+ }
}
static int get_label(const struct sockaddr *addr)
{
- if (addr->sa_family == AF_INET)
- {
+ if (addr->sa_family == AF_INET) {
+ return 4;
+ } else if (addr->sa_family == AF_INET6) {
+ const struct sockaddr_in6 *addr6 =
+ CARES_INADDR_CAST(const struct sockaddr_in6 *, addr);
+ if (IN6_IS_ADDR_LOOPBACK(&addr6->sin6_addr)) {
+ return 0;
+ } else if (IN6_IS_ADDR_V4MAPPED(&addr6->sin6_addr)) {
return 4;
- }
- else if (addr->sa_family == AF_INET6)
- {
- const struct sockaddr_in6 *addr6 = CARES_INADDR_CAST(const struct sockaddr_in6 *, addr);
- if (IN6_IS_ADDR_LOOPBACK(&addr6->sin6_addr))
- {
- return 0;
- }
- else if (IN6_IS_ADDR_V4MAPPED(&addr6->sin6_addr))
- {
- return 4;
- }
- else if (ARES_IN6_IS_ADDR_6TO4(&addr6->sin6_addr))
- {
- return 2;
- }
- else if (ARES_IN6_IS_ADDR_TEREDO(&addr6->sin6_addr))
- {
- return 5;
- }
- else if (ARES_IN6_IS_ADDR_ULA(&addr6->sin6_addr))
- {
- return 13;
- }
- else if (IN6_IS_ADDR_V4COMPAT(&addr6->sin6_addr))
- {
- return 3;
- }
- else if (IN6_IS_ADDR_SITELOCAL(&addr6->sin6_addr))
- {
- return 11;
- }
- else if (ARES_IN6_IS_ADDR_6BONE(&addr6->sin6_addr))
- {
- return 12;
- }
- else
- {
- /* All other IPv6 addresses, including global unicast addresses. */
- return 1;
- }
- }
- else
- {
- /*
- * This should never happen.
- * Return a semi-random label as a last resort.
- */
+ } else if (ARES_IN6_IS_ADDR_6TO4(&addr6->sin6_addr)) {
+ return 2;
+ } else if (ARES_IN6_IS_ADDR_TEREDO(&addr6->sin6_addr)) {
+ return 5;
+ } else if (ARES_IN6_IS_ADDR_ULA(&addr6->sin6_addr)) {
+ return 13;
+ } else if (IN6_IS_ADDR_V4COMPAT(&addr6->sin6_addr)) {
+ return 3;
+ } else if (IN6_IS_ADDR_SITELOCAL(&addr6->sin6_addr)) {
+ return 11;
+ } else if (ARES_IN6_IS_ADDR_6BONE(&addr6->sin6_addr)) {
+ return 12;
+ } else {
+ /* All other IPv6 addresses, including global unicast addresses. */
return 1;
}
+ } else {
+ /*
+ * This should never happen.
+ * Return a semi-random label as a last resort.
+ */
+ return 1;
+ }
}
/*
@@ -205,77 +173,57 @@ static int get_label(const struct sockaddr *addr)
*/
static int get_precedence(const struct sockaddr *addr)
{
- if (addr->sa_family == AF_INET)
- {
+ if (addr->sa_family == AF_INET) {
+ return 35;
+ } else if (addr->sa_family == AF_INET6) {
+ const struct sockaddr_in6 *addr6 =
+ CARES_INADDR_CAST(const struct sockaddr_in6 *, addr);
+ if (IN6_IS_ADDR_LOOPBACK(&addr6->sin6_addr)) {
+ return 50;
+ } else if (IN6_IS_ADDR_V4MAPPED(&addr6->sin6_addr)) {
return 35;
- }
- else if (addr->sa_family == AF_INET6)
- {
- const struct sockaddr_in6 *addr6 = CARES_INADDR_CAST(const struct sockaddr_in6 *, addr);
- if (IN6_IS_ADDR_LOOPBACK(&addr6->sin6_addr))
- {
- return 50;
- }
- else if (IN6_IS_ADDR_V4MAPPED(&addr6->sin6_addr))
- {
- return 35;
- }
- else if (ARES_IN6_IS_ADDR_6TO4(&addr6->sin6_addr))
- {
- return 30;
- }
- else if (ARES_IN6_IS_ADDR_TEREDO(&addr6->sin6_addr))
- {
- return 5;
- }
- else if (ARES_IN6_IS_ADDR_ULA(&addr6->sin6_addr))
- {
- return 3;
- }
- else if (IN6_IS_ADDR_V4COMPAT(&addr6->sin6_addr) ||
+ } else if (ARES_IN6_IS_ADDR_6TO4(&addr6->sin6_addr)) {
+ return 30;
+ } else if (ARES_IN6_IS_ADDR_TEREDO(&addr6->sin6_addr)) {
+ return 5;
+ } else if (ARES_IN6_IS_ADDR_ULA(&addr6->sin6_addr)) {
+ return 3;
+ } else if (IN6_IS_ADDR_V4COMPAT(&addr6->sin6_addr) ||
IN6_IS_ADDR_SITELOCAL(&addr6->sin6_addr) ||
- ARES_IN6_IS_ADDR_6BONE(&addr6->sin6_addr))
- {
- return 1;
- }
- else
- {
- /* All other IPv6 addresses, including global unicast addresses. */
- return 40;
- }
- }
- else
- {
+ ARES_IN6_IS_ADDR_6BONE(&addr6->sin6_addr)) {
return 1;
+ } else {
+ /* All other IPv6 addresses, including global unicast addresses. */
+ return 40;
}
+ } else {
+ return 1;
+ }
}
/*
* Find number of matching initial bits between the two addresses a1 and a2.
*/
-static int common_prefix_len(const struct in6_addr *a1,
- const struct in6_addr *a2)
+static size_t common_prefix_len(const struct in6_addr *a1,
+ const struct in6_addr *a2)
{
- const char *p1 = (const char *)a1;
- const char *p2 = (const char *)a2;
- unsigned i;
- for (i = 0; i < sizeof(*a1); ++i)
- {
- int x, j;
- if (p1[i] == p2[i])
- {
- continue;
- }
- x = p1[i] ^ p2[i];
- for (j = 0; j < CHAR_BIT; ++j)
- {
- if (x & (1 << (CHAR_BIT - 1)))
- {
- return i * CHAR_BIT + j;
- }
- x <<= 1;
- }
+ const unsigned char *p1 = (const unsigned char *)a1;
+ const unsigned char *p2 = (const unsigned char *)a2;
+ size_t i;
+ for (i = 0; i < sizeof(*a1); ++i) {
+ unsigned char x;
+ size_t j;
+ if (p1[i] == p2[i]) {
+ continue;
+ }
+ x = p1[i] ^ p2[i];
+ for (j = 0; j < CHAR_BIT; ++j) {
+ if (x & (1 << (CHAR_BIT - 1))) {
+ return i * CHAR_BIT + j;
+ }
+ x <<= 1;
}
+ }
return sizeof(*a1) * CHAR_BIT;
}
@@ -287,36 +235,46 @@ static int rfc6724_compare(const void *ptr1, const void *ptr2)
{
const struct addrinfo_sort_elem *a1 = (const struct addrinfo_sort_elem *)ptr1;
const struct addrinfo_sort_elem *a2 = (const struct addrinfo_sort_elem *)ptr2;
- int scope_src1, scope_dst1, scope_match1;
- int scope_src2, scope_dst2, scope_match2;
- int label_src1, label_dst1, label_match1;
- int label_src2, label_dst2, label_match2;
- int precedence1, precedence2;
- int prefixlen1, prefixlen2;
+ int scope_src1;
+ int scope_dst1;
+ int scope_match1;
+ int scope_src2;
+ int scope_dst2;
+ int scope_match2;
+ int label_src1;
+ int label_dst1;
+ int label_match1;
+ int label_src2;
+ int label_dst2;
+ int label_match2;
+ int precedence1;
+ int precedence2;
+ size_t prefixlen1;
+ size_t prefixlen2;
/* Rule 1: Avoid unusable destinations. */
- if (a1->has_src_addr != a2->has_src_addr)
- {
- return a2->has_src_addr - a1->has_src_addr;
- }
+ if (a1->has_src_addr != a2->has_src_addr) {
+ return ((int)a2->has_src_addr) - ((int)a1->has_src_addr);
+ }
/* Rule 2: Prefer matching scope. */
scope_src1 = ARES_IPV6_ADDR_SCOPE_NODELOCAL;
- if (a1->has_src_addr)
+ if (a1->has_src_addr) {
scope_src1 = get_scope(&a1->src_addr.sa);
- scope_dst1 = get_scope(a1->ai->ai_addr);
+ }
+ scope_dst1 = get_scope(a1->ai->ai_addr);
scope_match1 = (scope_src1 == scope_dst1);
scope_src2 = ARES_IPV6_ADDR_SCOPE_NODELOCAL;
- if (a2->has_src_addr)
+ if (a2->has_src_addr) {
scope_src2 = get_scope(&a2->src_addr.sa);
- scope_dst2 = get_scope(a2->ai->ai_addr);
+ }
+ scope_dst2 = get_scope(a2->ai->ai_addr);
scope_match2 = (scope_src2 == scope_dst2);
- if (scope_match1 != scope_match2)
- {
- return scope_match2 - scope_match1;
- }
+ if (scope_match1 != scope_match2) {
+ return scope_match2 - scope_match1;
+ }
/* Rule 3: Avoid deprecated addresses. */
@@ -324,81 +282,76 @@ static int rfc6724_compare(const void *ptr1, const void *ptr2)
/* Rule 5: Prefer matching label. */
label_src1 = 1;
- if (a1->has_src_addr)
+ if (a1->has_src_addr) {
label_src1 = get_label(&a1->src_addr.sa);
- label_dst1 = get_label(a1->ai->ai_addr);
+ }
+ label_dst1 = get_label(a1->ai->ai_addr);
label_match1 = (label_src1 == label_dst1);
label_src2 = 1;
- if (a2->has_src_addr)
+ if (a2->has_src_addr) {
label_src2 = get_label(&a2->src_addr.sa);
- label_dst2 = get_label(a2->ai->ai_addr);
+ }
+ label_dst2 = get_label(a2->ai->ai_addr);
label_match2 = (label_src2 == label_dst2);
- if (label_match1 != label_match2)
- {
- return label_match2 - label_match1;
- }
+ if (label_match1 != label_match2) {
+ return label_match2 - label_match1;
+ }
/* Rule 6: Prefer higher precedence. */
precedence1 = get_precedence(a1->ai->ai_addr);
precedence2 = get_precedence(a2->ai->ai_addr);
- if (precedence1 != precedence2)
- {
- return precedence2 - precedence1;
- }
+ if (precedence1 != precedence2) {
+ return precedence2 - precedence1;
+ }
/* Rule 7: Prefer native transport. */
/* Rule 8: Prefer smaller scope. */
- if (scope_dst1 != scope_dst2)
- {
- return scope_dst1 - scope_dst2;
- }
+ if (scope_dst1 != scope_dst2) {
+ return scope_dst1 - scope_dst2;
+ }
/* Rule 9: Use longest matching prefix. */
if (a1->has_src_addr && a1->ai->ai_addr->sa_family == AF_INET6 &&
- a2->has_src_addr && a2->ai->ai_addr->sa_family == AF_INET6)
- {
- const struct sockaddr_in6 *a1_src = &a1->src_addr.sa6;
- const struct sockaddr_in6 *a1_dst =
- CARES_INADDR_CAST(const struct sockaddr_in6 *, a1->ai->ai_addr);
- const struct sockaddr_in6 *a2_src = &a2->src_addr.sa6;
- const struct sockaddr_in6 *a2_dst =
- CARES_INADDR_CAST(const struct sockaddr_in6 *, a2->ai->ai_addr);
- prefixlen1 = common_prefix_len(&a1_src->sin6_addr, &a1_dst->sin6_addr);
- prefixlen2 = common_prefix_len(&a2_src->sin6_addr, &a2_dst->sin6_addr);
- if (prefixlen1 != prefixlen2)
- {
- return prefixlen2 - prefixlen1;
- }
+ a2->has_src_addr && a2->ai->ai_addr->sa_family == AF_INET6) {
+ const struct sockaddr_in6 *a1_src = &a1->src_addr.sa6;
+ const struct sockaddr_in6 *a1_dst =
+ CARES_INADDR_CAST(const struct sockaddr_in6 *, a1->ai->ai_addr);
+ const struct sockaddr_in6 *a2_src = &a2->src_addr.sa6;
+ const struct sockaddr_in6 *a2_dst =
+ CARES_INADDR_CAST(const struct sockaddr_in6 *, a2->ai->ai_addr);
+ prefixlen1 = common_prefix_len(&a1_src->sin6_addr, &a1_dst->sin6_addr);
+ prefixlen2 = common_prefix_len(&a2_src->sin6_addr, &a2_dst->sin6_addr);
+ if (prefixlen1 != prefixlen2) {
+ return (int)prefixlen2 - (int)prefixlen1;
}
+ }
/*
* Rule 10: Leave the order unchanged.
* We need this since qsort() is not necessarily stable.
*/
- return a1->original_order - a2->original_order;
+ return ((int)a1->original_order) - ((int)a2->original_order);
}
/*
* Find the source address that will be used if trying to connect to the given
* address.
*
- * Returns 1 if a source address was found, 0 if the address is unreachable,
+ * Returns 1 if a source address was found, 0 if the address is unreachable
* and -1 if a fatal error occurred. If 0 or 1, the contents of src_addr are
* undefined.
*/
-static int find_src_addr(ares_channel channel,
- const struct sockaddr *addr,
+static int find_src_addr(ares_channel channel, const struct sockaddr *addr,
struct sockaddr *src_addr)
{
- ares_socket_t sock;
- int ret;
+ ares_socket_t sock;
+ int ret;
ares_socklen_t len;
- switch (addr->sa_family)
- {
+ switch (addr->sa_family) {
case AF_INET:
len = sizeof(struct sockaddr_in);
break;
@@ -408,38 +361,30 @@ static int find_src_addr(ares_channel channel,
default:
/* No known usable source address for non-INET families. */
return 0;
- }
+ }
sock = ares__open_socket(channel, addr->sa_family, SOCK_DGRAM, IPPROTO_UDP);
- if (sock == ARES_SOCKET_BAD)
- {
- if (errno == EAFNOSUPPORT)
- {
- return 0;
- }
- else
- {
- return -1;
- }
+ if (sock == ARES_SOCKET_BAD) {
+ if (errno == EAFNOSUPPORT) {
+ return 0;
+ } else {
+ return -1;
}
+ }
- do
- {
- ret = ares__connect_socket(channel, sock, addr, len);
- }
- while (ret == -1 && errno == EINTR);
+ do {
+ ret = ares__connect_socket(channel, sock, addr, len);
+ } while (ret == -1 && errno == EINTR);
- if (ret == -1)
- {
- ares__close_socket(channel, sock);
- return 0;
- }
+ if (ret == -1) {
+ ares__close_socket(channel, sock);
+ return 0;
+ }
- if (getsockname(sock, src_addr, &len) != 0)
- {
- ares__close_socket(channel, sock);
- return -1;
- }
+ if (getsockname(sock, src_addr, &len) != 0) {
+ ares__close_socket(channel, sock);
+ return -1;
+ }
ares__close_socket(channel, sock);
return 1;
}
@@ -448,47 +393,47 @@ static int find_src_addr(ares_channel channel,
* Sort the linked list starting at sentinel->ai_next in RFC6724 order.
* Will leave the list unchanged if an error occurs.
*/
-int ares__sortaddrinfo(ares_channel channel, struct ares_addrinfo_node *list_sentinel)
+ares_status_t ares__sortaddrinfo(ares_channel channel,
+ struct ares_addrinfo_node *list_sentinel)
{
struct ares_addrinfo_node *cur;
- int nelem = 0, i;
- int has_src_addr;
+ size_t nelem = 0;
+ size_t i;
+ int has_src_addr;
struct addrinfo_sort_elem *elems;
cur = list_sentinel->ai_next;
- while (cur)
- {
- ++nelem;
- cur = cur->ai_next;
- }
+ while (cur) {
+ ++nelem;
+ cur = cur->ai_next;
+ }
- if (!nelem)
- return ARES_ENODATA;
+ if (!nelem) {
+ return ARES_ENODATA;
+ }
elems = (struct addrinfo_sort_elem *)ares_malloc(
- nelem * sizeof(struct addrinfo_sort_elem));
- if (!elems)
- {
- return ARES_ENOMEM;
- }
+ nelem * sizeof(struct addrinfo_sort_elem));
+ if (!elems) {
+ return ARES_ENOMEM;
+ }
/*
* Convert the linked list to an array that also contains the candidate
* source address for each destination address.
*/
- for (i = 0, cur = list_sentinel->ai_next; i < nelem; ++i, cur = cur->ai_next)
- {
- assert(cur != NULL);
- elems[i].ai = cur;
- elems[i].original_order = i;
- has_src_addr = find_src_addr(channel, cur->ai_addr, &elems[i].src_addr.sa);
- if (has_src_addr == -1)
- {
- ares_free(elems);
- return ARES_ENOTFOUND;
- }
- elems[i].has_src_addr = has_src_addr;
+ for (i = 0, cur = list_sentinel->ai_next; i < nelem;
+ ++i, cur = cur->ai_next) {
+ assert(cur != NULL);
+ elems[i].ai = cur;
+ elems[i].original_order = i;
+ has_src_addr = find_src_addr(channel, cur->ai_addr, &elems[i].src_addr.sa);
+ if (has_src_addr == -1) {
+ ares_free(elems);
+ return ARES_ENOTFOUND;
}
+ elems[i].has_src_addr = (has_src_addr == 1) ? ARES_TRUE : ARES_FALSE;
+ }
/* Sort the addresses, and rearrange the linked list so it matches the sorted
* order. */
@@ -496,10 +441,9 @@ int ares__sortaddrinfo(ares_channel channel, struct ares_addrinfo_node *list_sen
rfc6724_compare);
list_sentinel->ai_next = elems[0].ai;
- for (i = 0; i < nelem - 1; ++i)
- {
- elems[i].ai->ai_next = elems[i + 1].ai;
- }
+ for (i = 0; i < nelem - 1; ++i) {
+ elems[i].ai->ai_next = elems[i + 1].ai;
+ }
elems[nelem - 1].ai->ai_next = NULL;
ares_free(elems);
diff --git a/src/lib/ares__timeval.c b/src/lib/ares__timeval.c
index 94efb7d..68f6721 100644
--- a/src/lib/ares__timeval.c
+++ b/src/lib/ares__timeval.c
@@ -1,15 +1,27 @@
-
-/* Copyright (C) 2008 by Daniel Stenberg et al
+/* MIT License
+ *
+ * Copyright (c) 2008 Daniel Stenberg
+ *
+ * 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 (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
*
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, 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.
+ * 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -26,9 +38,9 @@ struct timeval ares__tvnow(void)
** increases monotonically and wraps once 49.7 days have elapsed.
*/
struct timeval now;
- DWORD milliseconds = GetTickCount();
- now.tv_sec = milliseconds / 1000;
- now.tv_usec = (milliseconds % 1000) * 1000;
+ DWORD milliseconds = GetTickCount();
+ now.tv_sec = milliseconds / 1000;
+ now.tv_usec = (milliseconds % 1000) * 1000;
return now;
}
@@ -43,26 +55,26 @@ struct timeval ares__tvnow(void)
** in any case the time starting point does not change once that the
** system has started up.
*/
- struct timeval now;
+ struct timeval now;
struct timespec tsnow;
- if(0 == clock_gettime(CLOCK_MONOTONIC, &tsnow)) {
- now.tv_sec = tsnow.tv_sec;
- now.tv_usec = tsnow.tv_nsec / 1000;
+ if (0 == clock_gettime(CLOCK_MONOTONIC, &tsnow)) {
+ now.tv_sec = tsnow.tv_sec;
+ now.tv_usec = (int)(tsnow.tv_nsec / 1000);
}
/*
** Even when the configure process has truly detected monotonic clock
** availability, it might happen that it is not actually available at
** run-time. When this occurs simply fallback to other time source.
*/
-#ifdef HAVE_GETTIMEOFDAY
+# ifdef HAVE_GETTIMEOFDAY
else
- (void)gettimeofday(&now, NULL); /* LCOV_EXCL_LINE */
-#else
+ (void)gettimeofday(&now, NULL); /* LCOV_EXCL_LINE */
+# else
else {
- now.tv_sec = (long)time(NULL);
+ now.tv_sec = (long)time(NULL);
now.tv_usec = 0;
}
-#endif
+# endif
return now;
}
@@ -88,24 +100,9 @@ struct timeval ares__tvnow(void)
** time() returns the value of time in seconds since the Epoch.
*/
struct timeval now;
- now.tv_sec = (long)time(NULL);
+ now.tv_sec = (long)time(NULL);
now.tv_usec = 0;
return now;
}
#endif
-
-#if 0 /* Not used */
-/*
- * Make sure that the first argument is the more recent time, as otherwise
- * we'll get a weird negative time-diff back...
- *
- * Returns: the time difference in number of milliseconds.
- */
-long ares__tvdiff(struct timeval newer, struct timeval older)
-{
- return (newer.tv_sec-older.tv_sec)*1000+
- (newer.tv_usec-older.tv_usec)/1000;
-}
-#endif
-
diff --git a/src/lib/ares_android.c b/src/lib/ares_android.c
index 5b00b80..778d4d1 100644
--- a/src/lib/ares_android.c
+++ b/src/lib/ares_android.c
@@ -1,28 +1,39 @@
-/* Copyright (C) 2017 by John Schember <john@nachtimwald.com>
+/* MIT License
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * Copyright (c) John Schember
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#if defined(ANDROID) || defined(__ANDROID__)
-#include <jni.h>
+# include <jni.h>
-#include "ares_setup.h"
-#include "ares.h"
-#include "ares_android.h"
-#include "ares_private.h"
+# include "ares_setup.h"
+# include "ares.h"
+# include "ares_android.h"
+# include "ares_private.h"
-static JavaVM *android_jvm = NULL;
-static jobject android_connectivity_manager = NULL;
+static JavaVM *android_jvm = NULL;
+static jobject android_connectivity_manager = NULL;
/* ConnectivityManager.getActiveNetwork */
static jmethodID android_cm_active_net_mid = NULL;
@@ -39,12 +50,13 @@ static jmethodID android_list_get_mid = NULL;
/* InetAddress.getHostAddress */
static jmethodID android_ia_host_addr_mid = NULL;
-static jclass jni_get_class(JNIEnv *env, const char *path)
+static jclass jni_get_class(JNIEnv *env, const char *path)
{
jclass cls = NULL;
- if (env == NULL || path == NULL || *path == '\0')
+ if (env == NULL || path == NULL || *path == '\0') {
return NULL;
+ }
cls = (*env)->FindClass(env, path);
if ((*env)->ExceptionOccurred(env)) {
@@ -60,14 +72,12 @@ static jmethodID jni_get_method_id(JNIEnv *env, jclass cls,
jmethodID mid = NULL;
if (env == NULL || cls == NULL || func_name == NULL || *func_name == '\0' ||
- signature == NULL || *signature == '\0')
- {
+ signature == NULL || *signature == '\0') {
return NULL;
}
mid = (*env)->GetMethodID(env, cls, func_name, signature);
- if ((*env)->ExceptionOccurred(env))
- {
+ if ((*env)->ExceptionOccurred(env)) {
(*env)->ExceptionClear(env);
return NULL;
}
@@ -82,29 +92,31 @@ void ares_library_init_jvm(JavaVM *jvm)
int ares_library_init_android(jobject connectivity_manager)
{
- JNIEnv *env = NULL;
- int need_detatch = 0;
- int res;
- int ret = ARES_ENOTINITIALIZED;
- jclass obj_cls = NULL;
+ JNIEnv *env = NULL;
+ int need_detatch = 0;
+ int res;
+ ares_status_t ret = ARES_ENOTINITIALIZED;
+ jclass obj_cls = NULL;
- if (android_jvm == NULL)
+ if (android_jvm == NULL) {
goto cleanup;
+ }
res = (*android_jvm)->GetEnv(android_jvm, (void **)&env, JNI_VERSION_1_6);
- if (res == JNI_EDETACHED)
- {
- env = NULL;
- res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL);
+ if (res == JNI_EDETACHED) {
+ env = NULL;
+ res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL);
need_detatch = 1;
}
- if (res != JNI_OK || env == NULL)
+ if (res != JNI_OK || env == NULL) {
goto cleanup;
+ }
android_connectivity_manager =
- (*env)->NewGlobalRef(env, connectivity_manager);
- if (android_connectivity_manager == NULL)
+ (*env)->NewGlobalRef(env, connectivity_manager);
+ if (android_connectivity_manager == NULL) {
goto cleanup;
+ }
/* Initialization has succeeded. Now attempt to cache the methods that will be
* called by ares_get_android_server_list. */
@@ -112,166 +124,178 @@ int ares_library_init_android(jobject connectivity_manager)
/* ConnectivityManager in API 1. */
obj_cls = jni_get_class(env, "android/net/ConnectivityManager");
- if (obj_cls == NULL)
+ if (obj_cls == NULL) {
goto cleanup;
+ }
/* ConnectivityManager.getActiveNetwork in API 23. */
- android_cm_active_net_mid =
- jni_get_method_id(env, obj_cls, "getActiveNetwork",
- "()Landroid/net/Network;");
- if (android_cm_active_net_mid == NULL)
+ android_cm_active_net_mid = jni_get_method_id(
+ env, obj_cls, "getActiveNetwork", "()Landroid/net/Network;");
+ if (android_cm_active_net_mid == NULL) {
goto cleanup;
+ }
/* ConnectivityManager.getLinkProperties in API 21. */
android_cm_link_props_mid =
- jni_get_method_id(env, obj_cls, "getLinkProperties",
- "(Landroid/net/Network;)Landroid/net/LinkProperties;");
- if (android_cm_link_props_mid == NULL)
+ jni_get_method_id(env, obj_cls, "getLinkProperties",
+ "(Landroid/net/Network;)Landroid/net/LinkProperties;");
+ if (android_cm_link_props_mid == NULL) {
goto cleanup;
+ }
/* LinkProperties in API 21. */
(*env)->DeleteLocalRef(env, obj_cls);
obj_cls = jni_get_class(env, "android/net/LinkProperties");
- if (obj_cls == NULL)
+ if (obj_cls == NULL) {
goto cleanup;
+ }
/* getDnsServers in API 21. */
- android_lp_dns_servers_mid = jni_get_method_id(env, obj_cls, "getDnsServers",
- "()Ljava/util/List;");
- if (android_lp_dns_servers_mid == NULL)
+ android_lp_dns_servers_mid =
+ jni_get_method_id(env, obj_cls, "getDnsServers", "()Ljava/util/List;");
+ if (android_lp_dns_servers_mid == NULL) {
goto cleanup;
+ }
/* getDomains in API 21. */
- android_lp_domains_mid = jni_get_method_id(env, obj_cls, "getDomains",
- "()Ljava/lang/String;");
- if (android_lp_domains_mid == NULL)
+ android_lp_domains_mid =
+ jni_get_method_id(env, obj_cls, "getDomains", "()Ljava/lang/String;");
+ if (android_lp_domains_mid == NULL) {
goto cleanup;
+ }
(*env)->DeleteLocalRef(env, obj_cls);
obj_cls = jni_get_class(env, "java/util/List");
- if (obj_cls == NULL)
+ if (obj_cls == NULL) {
goto cleanup;
+ }
android_list_size_mid = jni_get_method_id(env, obj_cls, "size", "()I");
- if (android_list_size_mid == NULL)
+ if (android_list_size_mid == NULL) {
goto cleanup;
+ }
- android_list_get_mid = jni_get_method_id(env, obj_cls, "get",
- "(I)Ljava/lang/Object;");
- if (android_list_get_mid == NULL)
+ android_list_get_mid =
+ jni_get_method_id(env, obj_cls, "get", "(I)Ljava/lang/Object;");
+ if (android_list_get_mid == NULL) {
goto cleanup;
+ }
(*env)->DeleteLocalRef(env, obj_cls);
obj_cls = jni_get_class(env, "java/net/InetAddress");
- if (obj_cls == NULL)
+ if (obj_cls == NULL) {
goto cleanup;
+ }
- android_ia_host_addr_mid = jni_get_method_id(env, obj_cls, "getHostAddress",
- "()Ljava/lang/String;");
- if (android_ia_host_addr_mid == NULL)
+ android_ia_host_addr_mid =
+ jni_get_method_id(env, obj_cls, "getHostAddress", "()Ljava/lang/String;");
+ if (android_ia_host_addr_mid == NULL) {
goto cleanup;
+ }
(*env)->DeleteLocalRef(env, obj_cls);
goto done;
cleanup:
- if (obj_cls != NULL)
+ if (obj_cls != NULL) {
(*env)->DeleteLocalRef(env, obj_cls);
+ }
- android_cm_active_net_mid = NULL;
- android_cm_link_props_mid = NULL;
+ android_cm_active_net_mid = NULL;
+ android_cm_link_props_mid = NULL;
android_lp_dns_servers_mid = NULL;
- android_lp_domains_mid = NULL;
- android_list_size_mid = NULL;
- android_list_get_mid = NULL;
- android_ia_host_addr_mid = NULL;
+ android_lp_domains_mid = NULL;
+ android_list_size_mid = NULL;
+ android_list_get_mid = NULL;
+ android_ia_host_addr_mid = NULL;
done:
- if (need_detatch)
+ if (need_detatch) {
(*android_jvm)->DetachCurrentThread(android_jvm);
+ }
return ret;
}
int ares_library_android_initialized(void)
{
- if (android_jvm == NULL || android_connectivity_manager == NULL)
+ if (android_jvm == NULL || android_connectivity_manager == NULL) {
return ARES_ENOTINITIALIZED;
+ }
return ARES_SUCCESS;
}
void ares_library_cleanup_android(void)
{
- JNIEnv *env = NULL;
- int need_detatch = 0;
- int res;
+ JNIEnv *env = NULL;
+ int need_detatch = 0;
+ int res;
- if (android_jvm == NULL || android_connectivity_manager == NULL)
+ if (android_jvm == NULL || android_connectivity_manager == NULL) {
return;
+ }
res = (*android_jvm)->GetEnv(android_jvm, (void **)&env, JNI_VERSION_1_6);
- if (res == JNI_EDETACHED)
- {
- env = NULL;
- res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL);
+ if (res == JNI_EDETACHED) {
+ env = NULL;
+ res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL);
need_detatch = 1;
}
- if (res != JNI_OK || env == NULL)
+ if (res != JNI_OK || env == NULL) {
return;
+ }
- android_cm_active_net_mid = NULL;
- android_cm_link_props_mid = NULL;
+ android_cm_active_net_mid = NULL;
+ android_cm_link_props_mid = NULL;
android_lp_dns_servers_mid = NULL;
- android_lp_domains_mid = NULL;
- android_list_size_mid = NULL;
- android_list_get_mid = NULL;
- android_ia_host_addr_mid = NULL;
+ android_lp_domains_mid = NULL;
+ android_list_size_mid = NULL;
+ android_list_get_mid = NULL;
+ android_ia_host_addr_mid = NULL;
(*env)->DeleteGlobalRef(env, android_connectivity_manager);
android_connectivity_manager = NULL;
- if (need_detatch)
+ if (need_detatch) {
(*android_jvm)->DetachCurrentThread(android_jvm);
+ }
}
-char **ares_get_android_server_list(size_t max_servers,
- size_t *num_servers)
+char **ares_get_android_server_list(size_t max_servers, size_t *num_servers)
{
- JNIEnv *env = NULL;
- jobject active_network = NULL;
- jobject link_properties = NULL;
- jobject server_list = NULL;
- jobject server = NULL;
- jstring str = NULL;
- jint nserv;
+ JNIEnv *env = NULL;
+ jobject active_network = NULL;
+ jobject link_properties = NULL;
+ jobject server_list = NULL;
+ jobject server = NULL;
+ jstring str = NULL;
+ jint nserv;
const char *ch_server_address;
- int res;
- size_t i;
- char **dns_list = NULL;
- int need_detatch = 0;
+ int res;
+ size_t i;
+ char **dns_list = NULL;
+ int need_detatch = 0;
if (android_jvm == NULL || android_connectivity_manager == NULL ||
- max_servers == 0 || num_servers == NULL)
- {
+ max_servers == 0 || num_servers == NULL) {
return NULL;
}
if (android_cm_active_net_mid == NULL || android_cm_link_props_mid == NULL ||
android_lp_dns_servers_mid == NULL || android_list_size_mid == NULL ||
- android_list_get_mid == NULL || android_ia_host_addr_mid == NULL)
- {
+ android_list_get_mid == NULL || android_ia_host_addr_mid == NULL) {
return NULL;
}
res = (*android_jvm)->GetEnv(android_jvm, (void **)&env, JNI_VERSION_1_6);
- if (res == JNI_EDETACHED)
- {
- env = NULL;
- res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL);
+ if (res == JNI_EDETACHED) {
+ env = NULL;
+ res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL);
need_detatch = 1;
}
- if (res != JNI_OK || env == NULL)
+ if (res != JNI_OK || env == NULL) {
goto done;
+ }
/* JNI below is equivalent to this Java code.
import android.content.Context;
@@ -296,93 +320,100 @@ char **ares_get_android_server_list(size_t max_servers,
active_network = (*env)->CallObjectMethod(env, android_connectivity_manager,
android_cm_active_net_mid);
- if (active_network == NULL)
+ if (active_network == NULL) {
goto done;
+ }
link_properties =
- (*env)->CallObjectMethod(env, android_connectivity_manager,
- android_cm_link_props_mid, active_network);
- if (link_properties == NULL)
+ (*env)->CallObjectMethod(env, android_connectivity_manager,
+ android_cm_link_props_mid, active_network);
+ if (link_properties == NULL) {
goto done;
+ }
- server_list = (*env)->CallObjectMethod(env, link_properties,
- android_lp_dns_servers_mid);
- if (server_list == NULL)
+ server_list =
+ (*env)->CallObjectMethod(env, link_properties, android_lp_dns_servers_mid);
+ if (server_list == NULL) {
goto done;
+ }
nserv = (*env)->CallIntMethod(env, server_list, android_list_size_mid);
- if (nserv > (jint)max_servers)
+ if (nserv > (jint)max_servers) {
nserv = (jint)max_servers;
- if (nserv <= 0)
+ }
+ if (nserv <= 0) {
goto done;
+ }
*num_servers = (size_t)nserv;
- dns_list = ares_malloc(sizeof(*dns_list)*(*num_servers));
- for (i=0; i<*num_servers; i++)
- {
- server = (*env)->CallObjectMethod(env, server_list, android_list_get_mid,
- (jint)i);
- dns_list[i] = ares_malloc(64);
+ dns_list = ares_malloc(sizeof(*dns_list) * (*num_servers));
+ for (i = 0; i < *num_servers; i++) {
+ size_t len = 64;
+ server =
+ (*env)->CallObjectMethod(env, server_list, android_list_get_mid, (jint)i);
+ dns_list[i] = ares_malloc(len);
dns_list[i][0] = 0;
- if (server == NULL)
- {
+ if (server == NULL) {
continue;
}
str = (*env)->CallObjectMethod(env, server, android_ia_host_addr_mid);
ch_server_address = (*env)->GetStringUTFChars(env, str, 0);
- strncpy(dns_list[i], ch_server_address, 64);
+ ares_strcpy(dns_list[i], ch_server_address, len);
(*env)->ReleaseStringUTFChars(env, str, ch_server_address);
(*env)->DeleteLocalRef(env, str);
(*env)->DeleteLocalRef(env, server);
}
done:
- if ((*env)->ExceptionOccurred(env))
+ if ((*env)->ExceptionOccurred(env)) {
(*env)->ExceptionClear(env);
+ }
- if (server_list != NULL)
+ if (server_list != NULL) {
(*env)->DeleteLocalRef(env, server_list);
- if (link_properties != NULL)
+ }
+ if (link_properties != NULL) {
(*env)->DeleteLocalRef(env, link_properties);
- if (active_network != NULL)
+ }
+ if (active_network != NULL) {
(*env)->DeleteLocalRef(env, active_network);
+ }
- if (need_detatch)
+ if (need_detatch) {
(*android_jvm)->DetachCurrentThread(android_jvm);
+ }
return dns_list;
}
char *ares_get_android_search_domains_list(void)
{
- JNIEnv *env = NULL;
- jobject active_network = NULL;
- jobject link_properties = NULL;
- jstring domains = NULL;
+ JNIEnv *env = NULL;
+ jobject active_network = NULL;
+ jobject link_properties = NULL;
+ jstring domains = NULL;
const char *domain;
- int res;
- char *domain_list = NULL;
- int need_detatch = 0;
+ int res;
+ char *domain_list = NULL;
+ int need_detatch = 0;
- if (android_jvm == NULL || android_connectivity_manager == NULL)
- {
+ if (android_jvm == NULL || android_connectivity_manager == NULL) {
return NULL;
}
if (android_cm_active_net_mid == NULL || android_cm_link_props_mid == NULL ||
- android_lp_domains_mid == NULL)
- {
+ android_lp_domains_mid == NULL) {
return NULL;
}
res = (*android_jvm)->GetEnv(android_jvm, (void **)&env, JNI_VERSION_1_6);
- if (res == JNI_EDETACHED)
- {
- env = NULL;
- res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL);
+ if (res == JNI_EDETACHED) {
+ env = NULL;
+ res = (*android_jvm)->AttachCurrentThread(android_jvm, &env, NULL);
need_detatch = 1;
}
- if (res != JNI_OK || env == NULL)
+ if (res != JNI_OK || env == NULL) {
goto done;
+ }
/* JNI below is equivalent to this Java code.
import android.content.Context;
@@ -393,7 +424,7 @@ char *ares_get_android_search_domains_list(void)
.getSystemService(Context.CONNECTIVITY_SERVICE);
Network an = cm.getActiveNetwork();
LinkProperties lp = cm.getLinkProperties(an);
- String domains = lp.getDomains();
+ String domains = lp.getDomains();
for (String domain: domains.split(",")) {
String d = domain;
}
@@ -404,38 +435,45 @@ char *ares_get_android_search_domains_list(void)
active_network = (*env)->CallObjectMethod(env, android_connectivity_manager,
android_cm_active_net_mid);
- if (active_network == NULL)
+ if (active_network == NULL) {
goto done;
+ }
link_properties =
- (*env)->CallObjectMethod(env, android_connectivity_manager,
- android_cm_link_props_mid, active_network);
- if (link_properties == NULL)
+ (*env)->CallObjectMethod(env, android_connectivity_manager,
+ android_cm_link_props_mid, active_network);
+ if (link_properties == NULL) {
goto done;
+ }
/* Get the domains. It is a common separated list of domains to search. */
- domains = (*env)->CallObjectMethod(env, link_properties,
- android_lp_domains_mid);
- if (domains == NULL)
+ domains =
+ (*env)->CallObjectMethod(env, link_properties, android_lp_domains_mid);
+ if (domains == NULL) {
goto done;
+ }
/* Split on , */
- domain = (*env)->GetStringUTFChars(env, domains, 0);
+ domain = (*env)->GetStringUTFChars(env, domains, 0);
domain_list = ares_strdup(domain);
(*env)->ReleaseStringUTFChars(env, domains, domain);
(*env)->DeleteLocalRef(env, domains);
done:
- if ((*env)->ExceptionOccurred(env))
+ if ((*env)->ExceptionOccurred(env)) {
(*env)->ExceptionClear(env);
+ }
- if (link_properties != NULL)
+ if (link_properties != NULL) {
(*env)->DeleteLocalRef(env, link_properties);
- if (active_network != NULL)
+ }
+ if (active_network != NULL) {
(*env)->DeleteLocalRef(env, active_network);
+ }
- if (need_detatch)
+ if (need_detatch) {
(*android_jvm)->DetachCurrentThread(android_jvm);
+ }
return domain_list;
}
#else
diff --git a/src/lib/ares_android.h b/src/lib/ares_android.h
index 93fb75f..5caadb4 100644
--- a/src/lib/ares_android.h
+++ b/src/lib/ares_android.h
@@ -1,16 +1,27 @@
-/* Copyright (C) 2017 by John Schember <john@nachtimwald.com>
+/* MIT License
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * Copyright (c) John Schember
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#ifndef __ARES_ANDROID_H__
@@ -19,8 +30,8 @@
#if defined(ANDROID) || defined(__ANDROID__)
char **ares_get_android_server_list(size_t max_servers, size_t *num_servers);
-char *ares_get_android_search_domains_list(void);
-void ares_library_cleanup_android(void);
+char *ares_get_android_search_domains_list(void);
+void ares_library_cleanup_android(void);
#endif
diff --git a/src/lib/ares_cancel.c b/src/lib/ares_cancel.c
index 465cc9e..ed29b8b 100644
--- a/src/lib/ares_cancel.c
+++ b/src/lib/ares_cancel.c
@@ -1,15 +1,27 @@
-
-/* Copyright (C) 2004 by Daniel Stenberg et al
+/* MIT License
+ *
+ * Copyright (c) 2004 Daniel Stenberg
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -25,39 +37,52 @@
*/
void ares_cancel(ares_channel channel)
{
- struct query *query;
- struct list_node list_head_copy;
- struct list_node* list_head;
- struct list_node* list_node;
- int i;
-
- if (!ares__is_list_empty(&(channel->all_queries)))
- {
+ if (ares__llist_len(channel->all_queries) > 0) {
+ ares__llist_node_t *node = NULL;
+ ares__llist_node_t *next = NULL;
+
/* Swap list heads, so that only those queries which were present on entry
* into this function are cancelled. New queries added by callbacks of
* queries being cancelled will not be cancelled themselves.
*/
- list_head = &(channel->all_queries);
- list_head_copy.prev = list_head->prev;
- list_head_copy.next = list_head->next;
- list_head_copy.prev->next = &list_head_copy;
- list_head_copy.next->prev = &list_head_copy;
- list_head->prev = list_head;
- list_head->next = list_head;
- for (list_node = list_head_copy.next; list_node != &list_head_copy; )
- {
- query = list_node->data;
- list_node = list_node->next; /* since we're deleting the query */
+ ares__llist_t *list_copy = channel->all_queries;
+ channel->all_queries = ares__llist_create(NULL);
+
+ /* Out of memory, this function doesn't return a result code though so we
+ * can't report to caller */
+ if (channel->all_queries == NULL) {
+ channel->all_queries = list_copy;
+ return;
+ }
+
+ node = ares__llist_node_first(list_copy);
+ while (node != NULL) {
+ struct query *query;
+ ares_socket_t fd = ARES_SOCKET_BAD;
+
+ /* Cache next since this node is being deleted */
+ next = ares__llist_node_next(node);
+
+ query = ares__llist_node_claim(node);
+ query->node_all_queries = NULL;
+
+ /* Cache file descriptor for connection so we can clean it up possibly */
+ if (query->conn) {
+ fd = query->conn->fd;
+ }
+
+ /* NOTE: its possible this may enqueue new queries */
query->callback(query->arg, ARES_ECANCELLED, 0, NULL, 0);
ares__free_query(query);
+
+ /* See if the connection should be cleaned up */
+ if (fd != ARES_SOCKET_BAD) {
+ ares__check_cleanup_conn(channel, fd);
+ }
+
+ node = next;
}
- }
- if (!(channel->flags & ARES_FLAG_STAYOPEN) && ares__is_list_empty(&(channel->all_queries)))
- {
- if (channel->servers)
- {
- for (i = 0; i < channel->nservers; i++)
- ares__close_sockets(channel, &channel->servers[i]);
- }
+
+ ares__llist_destroy(list_copy);
}
}
diff --git a/src/lib/ares_config.h.cmake b/src/lib/ares_config.h.cmake
index fddb785..caca5f7 100644
--- a/src/lib/ares_config.h.cmake
+++ b/src/lib/ares_config.h.cmake
@@ -1,3 +1,7 @@
+/* Copyright (C) The c-ares project and its contributors
+ * SPDX-License-Identifier: MIT
+ */
+
/* Generated from ares_config.h.cmake */
/* Define if building universal (internal helper macro) */
@@ -13,10 +17,10 @@
#undef CARES_EXPOSE_STATICS
/* Defined for build with symbol hiding. */
-#undef CARES_SYMBOL_HIDING
+#cmakedefine CARES_SYMBOL_HIDING
/* Definition to make a library symbol externally visible. */
-#undef CARES_SYMBOL_SCOPE_EXTERN
+#define CARES_SYMBOL_SCOPE_EXTERN @CARES_SYMBOL_SCOPE_EXTERN@
/* Use resolver library to configure cares */
#cmakedefine CARES_USE_LIBRESOLV
@@ -123,6 +127,9 @@
/* Define to 1 if you have the getnameinfo function. */
#cmakedefine HAVE_GETNAMEINFO
+/* Define to 1 if you have the getrandom function. */
+#cmakedefine HAVE_GETRANDOM
+
/* Define to 1 if you have the getservbyport_r function. */
#cmakedefine HAVE_GETSERVBYPORT_R
@@ -346,6 +353,9 @@
/* Define to 1 if you need the memory.h header file even with stdlib.h */
#cmakedefine NEED_MEMORY_H
+/* Define if have arc4random_buf() */
+#cmakedefine HAVE_ARC4RANDOM_BUF
+
/* a suitable file/device to read random data from */
#cmakedefine CARES_RANDOM_FILE "@CARES_RANDOM_FILE@"
diff --git a/src/lib/ares_config.h.in b/src/lib/ares_config.h.in
index b260c08..2e4a60e 100644
--- a/src/lib/ares_config.h.in
+++ b/src/lib/ares_config.h.in
@@ -54,6 +54,9 @@
/* Define to 1 if you have AF_INET6. */
#undef HAVE_AF_INET6
+/* Define to 1 if you have the arc4random_buf function. */
+#undef HAVE_ARC4RANDOM_BUF
+
/* Define to 1 if you have the <arpa/inet.h> header file. */
#undef HAVE_ARPA_INET_H
@@ -126,6 +129,9 @@
/* Define to 1 if you have the getnameinfo function. */
#undef HAVE_GETNAMEINFO
+/* Define to 1 if you have the getrandom function. */
+#undef HAVE_GETRANDOM
+
/* Define to 1 if you have the getservbyport_r function. */
#undef HAVE_GETSERVBYPORT_R
@@ -301,6 +307,9 @@
/* Define to 1 if you have the <sys/param.h> header file. */
#undef HAVE_SYS_PARAM_H
+/* Define to 1 if you have the <sys/random.h> header file. */
+#undef HAVE_SYS_RANDOM_H
+
/* Define to 1 if you have the <sys/select.h> header file. */
#undef HAVE_SYS_SELECT_H
diff --git a/src/lib/ares_create_query.c b/src/lib/ares_create_query.c
index e3d874b..b13abde 100644
--- a/src/lib/ares_create_query.c
+++ b/src/lib/ares_create_query.c
@@ -1,17 +1,28 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -26,7 +37,6 @@
#include "ares_dns.h"
#include "ares_private.h"
-
/* Header format, from RFC 1035:
* 1 1 1 1 1 1
* 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
@@ -79,29 +89,31 @@ int ares_create_query(const char *name, int dnsclass, int type,
unsigned short id, int rd, unsigned char **bufp,
int *buflenp, int max_udp_size)
{
- size_t len;
+ size_t len;
unsigned char *q;
- const char *p;
- size_t buflen;
+ const char *p;
+ size_t buflen;
unsigned char *buf;
/* Set our results early, in case we bail out early with an error. */
*buflenp = 0;
- *bufp = NULL;
+ *bufp = NULL;
/* Per RFC 7686, reject queries for ".onion" domain names with NXDOMAIN. */
- if (ares__is_onion_domain(name))
+ if (ares__is_onion_domain(name)) {
return ARES_ENOTFOUND;
+ }
/* Allocate a memory area for the maximum size this packet might need. +2
* is for the length byte and zero termination if no dots or ecscaping is
* used.
*/
- len = strlen(name) + 2 + HFIXEDSZ + QFIXEDSZ +
- (max_udp_size ? EDNSFIXEDSZ : 0);
+ len = ares_strlen(name) + 2 + HFIXEDSZ + QFIXEDSZ +
+ (max_udp_size ? EDNSFIXEDSZ : 0);
buf = ares_malloc(len);
- if (!buf)
+ if (!buf) {
return ARES_ENOMEM;
+ }
/* Set up the header. */
q = buf;
@@ -110,56 +122,56 @@ int ares_create_query(const char *name, int dnsclass, int type,
DNS_HEADER_SET_OPCODE(q, O_QUERY);
if (rd) {
DNS_HEADER_SET_RD(q, 1);
- }
- else {
+ } else {
DNS_HEADER_SET_RD(q, 0);
}
DNS_HEADER_SET_QDCOUNT(q, 1);
if (max_udp_size) {
- DNS_HEADER_SET_ARCOUNT(q, 1);
+ DNS_HEADER_SET_ARCOUNT(q, 1);
}
/* A name of "." is a screw case for the loop below, so adjust it. */
- if (strcmp(name, ".") == 0)
+ if (strcmp(name, ".") == 0) {
name++;
+ }
/* Start writing out the name after the header. */
q += HFIXEDSZ;
- while (*name)
- {
- if (*name == '.') {
- ares_free (buf);
- return ARES_EBADNAME;
+ while (*name) {
+ if (*name == '.') {
+ ares_free(buf);
+ return ARES_EBADNAME;
+ }
+
+ /* Count the number of bytes in this label. */
+ len = 0;
+ for (p = name; *p && *p != '.'; p++) {
+ if (*p == '\\' && *(p + 1) != 0) {
+ p++;
}
+ len++;
+ }
+ if (len > MAXLABEL) {
+ ares_free(buf);
+ return ARES_EBADNAME;
+ }
- /* Count the number of bytes in this label. */
- len = 0;
- for (p = name; *p && *p != '.'; p++)
- {
- if (*p == '\\' && *(p + 1) != 0)
- p++;
- len++;
- }
- if (len > MAXLABEL) {
- ares_free (buf);
- return ARES_EBADNAME;
+ /* Encode the length and copy the data. */
+ *q++ = (unsigned char)len;
+ for (p = name; *p && *p != '.'; p++) {
+ if (*p == '\\' && *(p + 1) != 0) {
+ p++;
}
+ *q++ = (unsigned char)*p;
+ }
- /* Encode the length and copy the data. */
- *q++ = (unsigned char)len;
- for (p = name; *p && *p != '.'; p++)
- {
- if (*p == '\\' && *(p + 1) != 0)
- p++;
- *q++ = *p;
- }
-
- /* Go to the next label and repeat, unless we hit the end. */
- if (!*p)
- break;
- name = p + 1;
+ /* Go to the next label and repeat, unless we hit the end. */
+ if (!*p) {
+ break;
}
+ name = p + 1;
+ }
/* Add the zero-length label at the end. */
*q++ = 0;
@@ -169,29 +181,28 @@ int ares_create_query(const char *name, int dnsclass, int type,
DNS_QUESTION_SET_CLASS(q, dnsclass);
q += QFIXEDSZ;
- if (max_udp_size)
- {
- memset(q, 0, EDNSFIXEDSZ);
- q++;
- DNS_RR_SET_TYPE(q, T_OPT);
- DNS_RR_SET_CLASS(q, max_udp_size);
- q += (EDNSFIXEDSZ-1);
+ if (max_udp_size) {
+ memset(q, 0, EDNSFIXEDSZ);
+ q++;
+ DNS_RR_SET_TYPE(q, T_OPT);
+ DNS_RR_SET_CLASS(q, max_udp_size);
+ q += (EDNSFIXEDSZ - 1);
}
- buflen = (q - buf);
+ buflen = (size_t)(q - buf);
/* Reject names that are longer than the maximum of 255 bytes that's
* specified in RFC 1035 ("To simplify implementations, the total length of
* a domain name (i.e., label octets and label length octets) is restricted
* to 255 octets or less."). */
if (buflen > (size_t)(MAXCDNAME + HFIXEDSZ + QFIXEDSZ +
- (max_udp_size ? EDNSFIXEDSZ : 0))) {
- ares_free (buf);
+ (max_udp_size ? EDNSFIXEDSZ : 0))) {
+ ares_free(buf);
return ARES_EBADNAME;
}
/* we know this fits in an int at this point */
- *buflenp = (int) buflen;
- *bufp = buf;
+ *buflenp = (int)buflen;
+ *bufp = buf;
return ARES_SUCCESS;
}
diff --git a/src/lib/ares_data.c b/src/lib/ares_data.c
index 69dff06..e370882 100644
--- a/src/lib/ares_data.c
+++ b/src/lib/ares_data.c
@@ -1,17 +1,27 @@
-
-/* Copyright (C) 2009-2013 by Daniel Stenberg
+/* MIT License
+ *
+ * Copyright (c) 2009 Daniel Stenberg
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
@@ -23,7 +33,6 @@
#include "ares_data.h"
#include "ares_private.h"
-
/*
** ares_free_data() - c-ares external API function.
**
@@ -42,12 +51,12 @@ void ares_free_data(void *dataptr)
{
while (dataptr != NULL) {
struct ares_data *ptr;
- void *next_data = NULL;
+ void *next_data = NULL;
#ifdef __INTEL_COMPILER
# pragma warning(push)
-# pragma warning(disable:1684)
- /* 1684: conversion from pointer to same-sized integral type */
+# pragma warning(disable : 1684)
+ /* 1684: conversion from pointer to same-sized integral type */
#endif
ptr = (void *)((char *)dataptr - offsetof(struct ares_data, data));
@@ -56,97 +65,68 @@ void ares_free_data(void *dataptr)
# pragma warning(pop)
#endif
- if (ptr->mark != ARES_DATATYPE_MARK)
+ if (ptr->mark != ARES_DATATYPE_MARK) {
return;
+ }
- switch (ptr->type)
- {
- case ARES_DATATYPE_MX_REPLY:
-
- if (ptr->data.mx_reply.next)
- next_data = ptr->data.mx_reply.next;
- if (ptr->data.mx_reply.host)
- ares_free(ptr->data.mx_reply.host);
- break;
-
- case ARES_DATATYPE_SRV_REPLY:
-
- if (ptr->data.srv_reply.next)
- next_data = ptr->data.srv_reply.next;
- if (ptr->data.srv_reply.host)
- ares_free(ptr->data.srv_reply.host);
- break;
-
- case ARES_DATATYPE_URI_REPLY:
-
- if (ptr->data.uri_reply.next)
- next_data = ptr->data.uri_reply.next;
- if (ptr->data.uri_reply.uri)
- ares_free(ptr->data.uri_reply.uri);
- break;
-
- case ARES_DATATYPE_TXT_REPLY:
- case ARES_DATATYPE_TXT_EXT:
-
- if (ptr->data.txt_reply.next)
- next_data = ptr->data.txt_reply.next;
- if (ptr->data.txt_reply.txt)
- ares_free(ptr->data.txt_reply.txt);
- break;
+ switch (ptr->type) {
+ case ARES_DATATYPE_MX_REPLY:
+ next_data = ptr->data.mx_reply.next;
+ ares_free(ptr->data.mx_reply.host);
+ break;
- case ARES_DATATYPE_ADDR_NODE:
+ case ARES_DATATYPE_SRV_REPLY:
+ next_data = ptr->data.srv_reply.next;
+ ares_free(ptr->data.srv_reply.host);
+ break;
- if (ptr->data.addr_node.next)
- next_data = ptr->data.addr_node.next;
- break;
+ case ARES_DATATYPE_URI_REPLY:
+ next_data = ptr->data.uri_reply.next;
+ ares_free(ptr->data.uri_reply.uri);
+ break;
- case ARES_DATATYPE_ADDR_PORT_NODE:
+ case ARES_DATATYPE_TXT_REPLY:
+ case ARES_DATATYPE_TXT_EXT:
+ next_data = ptr->data.txt_reply.next;
+ ares_free(ptr->data.txt_reply.txt);
+ break;
- if (ptr->data.addr_port_node.next)
- next_data = ptr->data.addr_port_node.next;
- break;
+ case ARES_DATATYPE_ADDR_NODE:
+ next_data = ptr->data.addr_node.next;
+ break;
- case ARES_DATATYPE_NAPTR_REPLY:
+ case ARES_DATATYPE_ADDR_PORT_NODE:
+ next_data = ptr->data.addr_port_node.next;
+ break;
- if (ptr->data.naptr_reply.next)
- next_data = ptr->data.naptr_reply.next;
- if (ptr->data.naptr_reply.flags)
- ares_free(ptr->data.naptr_reply.flags);
- if (ptr->data.naptr_reply.service)
- ares_free(ptr->data.naptr_reply.service);
- if (ptr->data.naptr_reply.regexp)
- ares_free(ptr->data.naptr_reply.regexp);
- if (ptr->data.naptr_reply.replacement)
- ares_free(ptr->data.naptr_reply.replacement);
- break;
+ case ARES_DATATYPE_NAPTR_REPLY:
+ next_data = ptr->data.naptr_reply.next;
+ ares_free(ptr->data.naptr_reply.flags);
+ ares_free(ptr->data.naptr_reply.service);
+ ares_free(ptr->data.naptr_reply.regexp);
+ ares_free(ptr->data.naptr_reply.replacement);
+ break;
- case ARES_DATATYPE_SOA_REPLY:
- if (ptr->data.soa_reply.nsname)
- ares_free(ptr->data.soa_reply.nsname);
- if (ptr->data.soa_reply.hostmaster)
- ares_free(ptr->data.soa_reply.hostmaster);
- break;
+ case ARES_DATATYPE_SOA_REPLY:
+ ares_free(ptr->data.soa_reply.nsname);
+ ares_free(ptr->data.soa_reply.hostmaster);
+ break;
- case ARES_DATATYPE_CAA_REPLY:
-
- if (ptr->data.caa_reply.next)
- next_data = ptr->data.caa_reply.next;
- if (ptr->data.caa_reply.property)
- ares_free(ptr->data.caa_reply.property);
- if (ptr->data.caa_reply.value)
- ares_free(ptr->data.caa_reply.value);
- break;
+ case ARES_DATATYPE_CAA_REPLY:
+ next_data = ptr->data.caa_reply.next;
+ ares_free(ptr->data.caa_reply.property);
+ ares_free(ptr->data.caa_reply.value);
+ break;
- default:
- return;
- }
+ default:
+ return;
+ }
ares_free(ptr);
dataptr = next_data;
}
}
-
/*
** ares_malloc_data() - c-ares internal helper function.
**
@@ -162,92 +142,28 @@ void *ares_malloc_data(ares_datatype type)
{
struct ares_data *ptr;
- ptr = ares_malloc(sizeof(struct ares_data));
- if (!ptr)
+ ptr = ares_malloc_zero(sizeof(*ptr));
+ if (!ptr) {
return NULL;
+ }
- switch (type)
- {
- case ARES_DATATYPE_MX_REPLY:
- ptr->data.mx_reply.next = NULL;
- ptr->data.mx_reply.host = NULL;
- ptr->data.mx_reply.priority = 0;
- break;
-
- case ARES_DATATYPE_SRV_REPLY:
- ptr->data.srv_reply.next = NULL;
- ptr->data.srv_reply.host = NULL;
- ptr->data.srv_reply.priority = 0;
- ptr->data.srv_reply.weight = 0;
- ptr->data.srv_reply.port = 0;
- break;
-
- case ARES_DATATYPE_URI_REPLY:
- ptr->data.uri_reply.next = NULL;
- ptr->data.uri_reply.priority = 0;
- ptr->data.uri_reply.weight = 0;
- ptr->data.uri_reply.uri = NULL;
- ptr->data.uri_reply.ttl = 0;
- break;
-
- case ARES_DATATYPE_TXT_EXT:
- ptr->data.txt_ext.record_start = 0;
- /* FALLTHROUGH */
-
- case ARES_DATATYPE_TXT_REPLY:
- ptr->data.txt_reply.next = NULL;
- ptr->data.txt_reply.txt = NULL;
- ptr->data.txt_reply.length = 0;
- break;
-
- case ARES_DATATYPE_CAA_REPLY:
- ptr->data.caa_reply.next = NULL;
- ptr->data.caa_reply.plength = 0;
- ptr->data.caa_reply.property = NULL;
- ptr->data.caa_reply.length = 0;
- ptr->data.caa_reply.value = NULL;
- break;
-
- case ARES_DATATYPE_ADDR_NODE:
- ptr->data.addr_node.next = NULL;
- ptr->data.addr_node.family = 0;
- memset(&ptr->data.addr_node.addrV6, 0,
- sizeof(ptr->data.addr_node.addrV6));
- break;
-
- case ARES_DATATYPE_ADDR_PORT_NODE:
- ptr->data.addr_port_node.next = NULL;
- ptr->data.addr_port_node.family = 0;
- ptr->data.addr_port_node.udp_port = 0;
- ptr->data.addr_port_node.tcp_port = 0;
- memset(&ptr->data.addr_port_node.addrV6, 0,
- sizeof(ptr->data.addr_port_node.addrV6));
- break;
-
- case ARES_DATATYPE_NAPTR_REPLY:
- ptr->data.naptr_reply.next = NULL;
- ptr->data.naptr_reply.flags = NULL;
- ptr->data.naptr_reply.service = NULL;
- ptr->data.naptr_reply.regexp = NULL;
- ptr->data.naptr_reply.replacement = NULL;
- ptr->data.naptr_reply.order = 0;
- ptr->data.naptr_reply.preference = 0;
- break;
-
- case ARES_DATATYPE_SOA_REPLY:
- ptr->data.soa_reply.nsname = NULL;
- ptr->data.soa_reply.hostmaster = NULL;
- ptr->data.soa_reply.serial = 0;
- ptr->data.soa_reply.refresh = 0;
- ptr->data.soa_reply.retry = 0;
- ptr->data.soa_reply.expire = 0;
- ptr->data.soa_reply.minttl = 0;
- break;
-
- default:
- ares_free(ptr);
- return NULL;
- }
+ switch (type) {
+ case ARES_DATATYPE_MX_REPLY:
+ case ARES_DATATYPE_SRV_REPLY:
+ case ARES_DATATYPE_URI_REPLY:
+ case ARES_DATATYPE_TXT_EXT:
+ case ARES_DATATYPE_TXT_REPLY:
+ case ARES_DATATYPE_CAA_REPLY:
+ case ARES_DATATYPE_ADDR_NODE:
+ case ARES_DATATYPE_ADDR_PORT_NODE:
+ case ARES_DATATYPE_NAPTR_REPLY:
+ case ARES_DATATYPE_SOA_REPLY:
+ break;
+
+ default:
+ ares_free(ptr);
+ return NULL;
+ }
ptr->mark = ARES_DATATYPE_MARK;
ptr->type = type;
diff --git a/src/lib/ares_data.h b/src/lib/ares_data.h
index 6b9dd9f..b2c4d22 100644
--- a/src/lib/ares_data.h
+++ b/src/lib/ares_data.h
@@ -1,38 +1,51 @@
-
-/* Copyright (C) 2009-2013 by Daniel Stenberg
+/* MIT License
+ *
+ * Copyright (c) 2009 Daniel Stenberg
+ *
+ * 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 (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
+#ifndef __ARES_DATA_H
+#define __ARES_DATA_H
typedef enum {
- ARES_DATATYPE_UNKNOWN = 1, /* unknown data type - introduced in 1.7.0 */
- ARES_DATATYPE_SRV_REPLY, /* struct ares_srv_reply - introduced in 1.7.0 */
- ARES_DATATYPE_TXT_REPLY, /* struct ares_txt_reply - introduced in 1.7.0 */
- ARES_DATATYPE_TXT_EXT, /* struct ares_txt_ext - introduced in 1.11.0 */
- ARES_DATATYPE_ADDR_NODE, /* struct ares_addr_node - introduced in 1.7.1 */
+ ARES_DATATYPE_UNKNOWN = 1, /* unknown data type - introduced in 1.7.0 */
+ ARES_DATATYPE_SRV_REPLY, /* struct ares_srv_reply - introduced in 1.7.0 */
+ ARES_DATATYPE_TXT_REPLY, /* struct ares_txt_reply - introduced in 1.7.0 */
+ ARES_DATATYPE_TXT_EXT, /* struct ares_txt_ext - introduced in 1.11.0 */
+ ARES_DATATYPE_ADDR_NODE, /* struct ares_addr_node - introduced in 1.7.1 */
ARES_DATATYPE_MX_REPLY, /* struct ares_mx_reply - introduced in 1.7.2 */
- ARES_DATATYPE_NAPTR_REPLY,/* struct ares_naptr_reply - introduced in 1.7.6 */
- ARES_DATATYPE_SOA_REPLY, /* struct ares_soa_reply - introduced in 1.9.0 */
- ARES_DATATYPE_URI_REPLY, /* struct ares_uri_reply */
+ ARES_DATATYPE_NAPTR_REPLY, /* struct ares_naptr_reply - introduced in 1.7.6 */
+ ARES_DATATYPE_SOA_REPLY, /* struct ares_soa_reply - introduced in 1.9.0 */
+ ARES_DATATYPE_URI_REPLY, /* struct ares_uri_reply */
#if 0
ARES_DATATYPE_ADDR6TTL, /* struct ares_addrttl */
ARES_DATATYPE_ADDRTTL, /* struct ares_addr6ttl */
ARES_DATATYPE_HOSTENT, /* struct hostent */
ARES_DATATYPE_OPTIONS, /* struct ares_options */
#endif
- ARES_DATATYPE_ADDR_PORT_NODE, /* struct ares_addr_port_node - introduced in 1.11.0 */
- ARES_DATATYPE_CAA_REPLY, /* struct ares_caa_reply - introduced in 1.17 */
- ARES_DATATYPE_LAST /* not used - introduced in 1.7.0 */
+ ARES_DATATYPE_ADDR_PORT_NODE, /* struct ares_addr_port_node - introduced
+ in 1.11.0 */
+ ARES_DATATYPE_CAA_REPLY, /* struct ares_caa_reply - introduced in 1.17 */
+ ARES_DATATYPE_LAST /* not used - introduced in 1.7.0 */
} ares_datatype;
#define ARES_DATATYPE_MARK 0xbead
@@ -56,21 +69,24 @@ typedef enum {
*/
struct ares_data {
- ares_datatype type; /* Actual data type identifier. */
- unsigned int mark; /* Private ares_data signature. */
+ ares_datatype type; /* Actual data type identifier. */
+ unsigned int mark; /* Private ares_data signature. */
+
union {
- struct ares_txt_reply txt_reply;
- struct ares_txt_ext txt_ext;
- struct ares_srv_reply srv_reply;
- struct ares_addr_node addr_node;
- struct ares_addr_port_node addr_port_node;
- struct ares_mx_reply mx_reply;
- struct ares_naptr_reply naptr_reply;
- struct ares_soa_reply soa_reply;
- struct ares_caa_reply caa_reply;
- struct ares_uri_reply uri_reply;
+ struct ares_txt_reply txt_reply;
+ struct ares_txt_ext txt_ext;
+ struct ares_srv_reply srv_reply;
+ struct ares_addr_node addr_node;
+ struct ares_addr_port_node addr_port_node;
+ struct ares_mx_reply mx_reply;
+ struct ares_naptr_reply naptr_reply;
+ struct ares_soa_reply soa_reply;
+ struct ares_caa_reply caa_reply;
+ struct ares_uri_reply uri_reply;
} data;
};
void *ares_malloc_data(ares_datatype type);
+
+#endif /* __ARES_DATA_H */
diff --git a/src/lib/ares_destroy.c b/src/lib/ares_destroy.c
index fed2009..e05ea05 100644
--- a/src/lib/ares_destroy.c
+++ b/src/lib/ares_destroy.c
@@ -1,18 +1,28 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2004-2011 by Daniel Stenberg
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) 2004 Daniel Stenberg
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -26,69 +36,98 @@ void ares_destroy_options(struct ares_options *options)
{
int i;
- if(options->servers)
+ if (options->servers) {
ares_free(options->servers);
- for (i = 0; i < options->ndomains; i++)
+ }
+ for (i = 0; i < options->ndomains; i++) {
ares_free(options->domains[i]);
- if(options->domains)
+ }
+ if (options->domains) {
ares_free(options->domains);
- if(options->sortlist)
+ }
+ if (options->sortlist) {
ares_free(options->sortlist);
- if(options->lookups)
+ }
+ if (options->lookups) {
ares_free(options->lookups);
- if(options->resolvconf_path)
+ }
+ if (options->resolvconf_path) {
ares_free(options->resolvconf_path);
+ }
+ if (options->hosts_path) {
+ ares_free(options->hosts_path);
+ }
}
void ares_destroy(ares_channel channel)
{
- int i;
- struct query *query;
- struct list_node* list_head;
- struct list_node* list_node;
+ size_t i;
+ ares__llist_node_t *node = NULL;
- if (!channel)
+ if (!channel) {
return;
+ }
+
+ /* Destroy all queries */
+ node = ares__llist_node_first(channel->all_queries);
+ while (node != NULL) {
+ ares__llist_node_t *next = ares__llist_node_next(node);
+ struct query *query = ares__llist_node_claim(node);
+
+ query->node_all_queries = NULL;
+ query->callback(query->arg, ARES_EDESTRUCTION, 0, NULL, 0);
+ ares__free_query(query);
+
+ node = next;
+ }
+
- list_head = &(channel->all_queries);
- for (list_node = list_head->next; list_node != list_head; )
- {
- query = list_node->data;
- list_node = list_node->next; /* since we're deleting the query */
- query->callback(query->arg, ARES_EDESTRUCTION, 0, NULL, 0);
- ares__free_query(query);
- }
#ifndef NDEBUG
/* Freeing the query should remove it from all the lists in which it sits,
* so all query lists should be empty now.
*/
- assert(ares__is_list_empty(&(channel->all_queries)));
- for (i = 0; i < ARES_QID_TABLE_SIZE; i++)
- {
- assert(ares__is_list_empty(&(channel->queries_by_qid[i])));
- }
- for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++)
- {
- assert(ares__is_list_empty(&(channel->queries_by_timeout[i])));
- }
+ assert(ares__llist_len(channel->all_queries) == 0);
+ assert(ares__htable_stvp_num_keys(channel->queries_by_qid) == 0);
+ assert(ares__slist_len(channel->queries_by_timeout) == 0);
#endif
ares__destroy_servers_state(channel);
+#ifndef NDEBUG
+ assert(ares__htable_asvp_num_keys(channel->connnode_by_socket) == 0);
+#endif
+
if (channel->domains) {
- for (i = 0; i < channel->ndomains; i++)
+ for (i = 0; i < channel->ndomains; i++) {
ares_free(channel->domains[i]);
+ }
ares_free(channel->domains);
}
- if(channel->sortlist)
+ ares__llist_destroy(channel->all_queries);
+ ares__slist_destroy(channel->queries_by_timeout);
+ ares__htable_stvp_destroy(channel->queries_by_qid);
+ ares__htable_asvp_destroy(channel->connnode_by_socket);
+
+ if (channel->sortlist) {
ares_free(channel->sortlist);
+ }
- if (channel->lookups)
+ if (channel->lookups) {
ares_free(channel->lookups);
+ }
- if (channel->resolvconf_path)
+ if (channel->resolvconf_path) {
ares_free(channel->resolvconf_path);
+ }
+
+ if (channel->hosts_path) {
+ ares_free(channel->hosts_path);
+ }
+
+ if (channel->rand_state) {
+ ares__destroy_rand_state(channel->rand_state);
+ }
ares_free(channel);
}
@@ -96,18 +135,18 @@ void ares_destroy(ares_channel channel)
void ares__destroy_servers_state(ares_channel channel)
{
struct server_state *server;
- int i;
-
- if (channel->servers)
- {
- for (i = 0; i < channel->nservers; i++)
- {
- server = &channel->servers[i];
- ares__close_sockets(channel, server);
- assert(ares__is_list_empty(&server->queries_to_server));
- }
- ares_free(channel->servers);
- channel->servers = NULL;
+ size_t i;
+
+ if (channel->servers) {
+ for (i = 0; i < channel->nservers; i++) {
+ server = &channel->servers[i];
+ ares__close_sockets(server);
+ ares__llist_destroy(server->connections);
+ ares__buf_destroy(server->tcp_parser);
+ ares__buf_destroy(server->tcp_send);
}
- channel->nservers = -1;
+ ares_free(channel->servers);
+ channel->servers = NULL;
+ }
+ channel->nservers = 0;
}
diff --git a/src/lib/ares_dns_mapping.c b/src/lib/ares_dns_mapping.c
new file mode 100644
index 0000000..057d617
--- /dev/null
+++ b/src/lib/ares_dns_mapping.c
@@ -0,0 +1,520 @@
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#include "ares_setup.h"
+#include "ares.h"
+#include "ares_private.h"
+#include "ares_dns_record.h"
+
+ares_bool_t ares_dns_opcode_isvalid(ares_dns_opcode_t opcode)
+{
+ switch (opcode) {
+ case ARES_OPCODE_QUERY:
+ case ARES_OPCODE_IQUERY:
+ case ARES_OPCODE_STATUS:
+ case ARES_OPCODE_NOTIFY:
+ case ARES_OPCODE_UPDATE:
+ return ARES_TRUE;
+ }
+ return ARES_FALSE;
+}
+
+ares_bool_t ares_dns_rcode_isvalid(ares_dns_rcode_t rcode)
+{
+ switch (rcode) {
+ case ARES_RCODE_NOERROR:
+ case ARES_RCODE_FORMAT_ERROR:
+ case ARES_RCODE_SERVER_FAILURE:
+ case ARES_RCODE_NAME_ERROR:
+ case ARES_RCODE_NOT_IMPLEMENTED:
+ case ARES_RCODE_REFUSED:
+ case ARES_RCODE_YXDOMAIN:
+ case ARES_RCODE_YXRRSET:
+ case ARES_RCODE_NXRRSET:
+ case ARES_RCODE_NOTAUTH:
+ case ARES_RCODE_NOTZONE:
+ return ARES_TRUE;
+ }
+ return ARES_FALSE;
+}
+
+ares_bool_t ares_dns_flags_arevalid(unsigned short flags)
+{
+ unsigned short allflags = ARES_FLAG_QR | ARES_FLAG_AA | ARES_FLAG_TC |
+ ARES_FLAG_RD | ARES_FLAG_RA | ARES_FLAG_AD |
+ ARES_FLAG_CD;
+
+ if (flags & ~allflags) {
+ return ARES_FALSE;
+ }
+
+ return ARES_TRUE;
+}
+
+ares_bool_t ares_dns_rec_type_isvalid(ares_dns_rec_type_t type,
+ ares_bool_t is_query)
+{
+ switch (type) {
+ case ARES_REC_TYPE_A:
+ case ARES_REC_TYPE_NS:
+ case ARES_REC_TYPE_CNAME:
+ case ARES_REC_TYPE_SOA:
+ case ARES_REC_TYPE_PTR:
+ case ARES_REC_TYPE_HINFO:
+ case ARES_REC_TYPE_MX:
+ case ARES_REC_TYPE_TXT:
+ case ARES_REC_TYPE_AAAA:
+ case ARES_REC_TYPE_SRV:
+ case ARES_REC_TYPE_NAPTR:
+ case ARES_REC_TYPE_OPT:
+#if 0
+ case ARES_REC_TYPE_TLSA:
+ case ARES_REC_TYPE_SVBC:
+ case ARES_REC_TYPE_HTTPS:
+#endif
+ case ARES_REC_TYPE_ANY:
+ case ARES_REC_TYPE_URI:
+ case ARES_REC_TYPE_CAA:
+ return ARES_TRUE;
+ case ARES_REC_TYPE_RAW_RR:
+ return is_query ? ARES_FALSE : ARES_TRUE;
+ default:
+ break;
+ }
+ return is_query ? ARES_TRUE : ARES_FALSE;
+}
+
+ares_bool_t ares_dns_class_isvalid(ares_dns_class_t qclass,
+ ares_bool_t is_query)
+{
+ switch (qclass) {
+ case ARES_CLASS_IN:
+ case ARES_CLASS_CHAOS:
+ case ARES_CLASS_HESOID:
+ case ARES_CLASS_NONE:
+ return ARES_TRUE;
+ case ARES_CLASS_ANY:
+ return is_query ? ARES_TRUE : ARES_FALSE;
+ }
+ return ARES_FALSE;
+}
+
+ares_bool_t ares_dns_section_isvalid(ares_dns_section_t sect)
+{
+ switch (sect) {
+ case ARES_SECTION_ANSWER:
+ case ARES_SECTION_AUTHORITY:
+ case ARES_SECTION_ADDITIONAL:
+ return ARES_TRUE;
+ }
+ return ARES_FALSE;
+}
+
+ares_dns_rec_type_t ares_dns_rr_key_to_rec_type(ares_dns_rr_key_t key)
+{
+ /* NOTE: due to the way we've numerated the keys, we can simply divide by
+ * 100 to get the type rather than having to do a huge switch
+ * statement. That said, we do then validate the type returned is
+ * valid in case something completely bogus is passed in */
+ ares_dns_rec_type_t type = key / 100;
+ if (!ares_dns_rec_type_isvalid(type, ARES_FALSE)) {
+ return 0;
+ }
+ return type;
+}
+
+const char *ares_dns_rec_type_tostr(ares_dns_rec_type_t type)
+{
+ switch (type) {
+ case ARES_REC_TYPE_A:
+ return "A";
+ case ARES_REC_TYPE_NS:
+ return "NS";
+ case ARES_REC_TYPE_CNAME:
+ return "CNAME";
+ case ARES_REC_TYPE_SOA:
+ return "SOA";
+ case ARES_REC_TYPE_PTR:
+ return "PTR";
+ case ARES_REC_TYPE_HINFO:
+ return "HINFO";
+ case ARES_REC_TYPE_MX:
+ return "MX";
+ case ARES_REC_TYPE_TXT:
+ return "TXT";
+ case ARES_REC_TYPE_AAAA:
+ return "AAAA";
+ case ARES_REC_TYPE_SRV:
+ return "SRV";
+ case ARES_REC_TYPE_NAPTR:
+ return "NAPTR";
+ case ARES_REC_TYPE_OPT:
+ return "OPT";
+#if 0
+ case ARES_REC_TYPE_TLSA:
+ return "TLSA";
+ case ARES_REC_TYPE_SVBC:
+ return "SVBC";
+ case ARES_REC_TYPE_HTTPS:
+ return "HTTPS";
+#endif
+ case ARES_REC_TYPE_ANY:
+ return "ANY";
+ case ARES_REC_TYPE_URI:
+ return "URI";
+ case ARES_REC_TYPE_CAA:
+ return "CAA";
+ case ARES_REC_TYPE_RAW_RR:
+ return "RAWRR";
+ }
+ return "UNKNOWN";
+}
+
+const char *ares_dns_class_tostr(ares_dns_class_t qclass)
+{
+ switch (qclass) {
+ case ARES_CLASS_IN:
+ return "IN";
+ case ARES_CLASS_CHAOS:
+ return "CH";
+ case ARES_CLASS_HESOID:
+ return "HS";
+ case ARES_CLASS_ANY:
+ return "ANY";
+ case ARES_CLASS_NONE:
+ return "NONE";
+ }
+ return "UNKNOWN";
+}
+
+const char *ares_dns_opcode_tostr(ares_dns_opcode_t opcode)
+{
+ switch (opcode) {
+ case ARES_OPCODE_QUERY:
+ return "QUERY";
+ case ARES_OPCODE_IQUERY:
+ return "IQUERY";
+ case ARES_OPCODE_STATUS:
+ return "STATUS";
+ case ARES_OPCODE_NOTIFY:
+ return "NOTIFY";
+ case ARES_OPCODE_UPDATE:
+ return "UPDATE";
+ }
+ return "UNKNOWN";
+}
+
+const char *ares_dns_rr_key_tostr(ares_dns_rr_key_t key)
+{
+ switch (key) {
+ case ARES_RR_A_ADDR:
+ return "ADDR";
+
+ case ARES_RR_NS_NSDNAME:
+ return "NSDNAME";
+
+ case ARES_RR_CNAME_CNAME:
+ return "CNAME";
+
+ case ARES_RR_SOA_MNAME:
+ return "MNAME";
+
+ case ARES_RR_SOA_RNAME:
+ return "RNAME";
+
+ case ARES_RR_SOA_SERIAL:
+ return "SERIAL";
+
+ case ARES_RR_SOA_REFRESH:
+ return "REFRESH";
+
+ case ARES_RR_SOA_RETRY:
+ return "RETRY";
+
+ case ARES_RR_SOA_EXPIRE:
+ return "EXPIRE";
+
+ case ARES_RR_SOA_MINIMUM:
+ return "MINIMUM";
+
+ case ARES_RR_PTR_DNAME:
+ return "DNAME";
+
+ case ARES_RR_AAAA_ADDR:
+ return "ADDR";
+
+ case ARES_RR_HINFO_CPU:
+ return "CPU";
+
+ case ARES_RR_HINFO_OS:
+ return "OS";
+
+ case ARES_RR_MX_PREFERENCE:
+ return "PREFERENCE";
+
+ case ARES_RR_MX_EXCHANGE:
+ return "EXCHANGE";
+
+ case ARES_RR_TXT_DATA:
+ return "DATA";
+
+ case ARES_RR_SRV_PRIORITY:
+ return "PRIORITY";
+
+ case ARES_RR_SRV_WEIGHT:
+ return "WEIGHT";
+
+ case ARES_RR_SRV_PORT:
+ return "PORT";
+
+ case ARES_RR_SRV_TARGET:
+ return "TARGET";
+
+ case ARES_RR_NAPTR_ORDER:
+ return "ORDER";
+
+ case ARES_RR_NAPTR_PREFERENCE:
+ return "PREFERENCE";
+
+ case ARES_RR_NAPTR_FLAGS:
+ return "FLAGS";
+
+ case ARES_RR_NAPTR_SERVICES:
+ return "SERVICES";
+
+ case ARES_RR_NAPTR_REGEXP:
+ return "REGEXP";
+
+ case ARES_RR_NAPTR_REPLACEMENT:
+ return "REPLACEMENT";
+
+ case ARES_RR_OPT_UDP_SIZE:
+ return "UDP_SIZE";
+
+ case ARES_RR_OPT_EXT_RCODE:
+ return "EXT_RCODE";
+
+ case ARES_RR_OPT_VERSION:
+ return "VERSION";
+
+ case ARES_RR_OPT_FLAGS:
+ return "FLAGS";
+
+ case ARES_RR_URI_PRIORITY:
+ return "PRIORITY";
+
+ case ARES_RR_URI_WEIGHT:
+ return "WEIGHT";
+
+ case ARES_RR_URI_TARGET:
+ return "TARGET";
+
+ case ARES_RR_CAA_CRITICAL:
+ return "CRITICAL";
+
+ case ARES_RR_CAA_TAG:
+ return "TAG";
+
+ case ARES_RR_CAA_VALUE:
+ return "VALUE";
+
+ case ARES_RR_RAW_RR_TYPE:
+ return "TYPE";
+
+ case ARES_RR_RAW_RR_DATA:
+ return "DATA";
+ }
+
+ return "UNKNOWN";
+}
+
+ares_dns_datatype_t ares_dns_rr_key_datatype(ares_dns_rr_key_t key)
+{
+ switch (key) {
+ case ARES_RR_A_ADDR:
+ return ARES_DATATYPE_INADDR;
+
+ case ARES_RR_AAAA_ADDR:
+ return ARES_DATATYPE_INADDR6;
+
+ case ARES_RR_NS_NSDNAME:
+ case ARES_RR_CNAME_CNAME:
+ case ARES_RR_SOA_MNAME:
+ case ARES_RR_SOA_RNAME:
+ case ARES_RR_PTR_DNAME:
+ case ARES_RR_HINFO_CPU:
+ case ARES_RR_HINFO_OS:
+ case ARES_RR_MX_EXCHANGE:
+ case ARES_RR_SRV_TARGET:
+ case ARES_RR_NAPTR_FLAGS:
+ case ARES_RR_NAPTR_SERVICES:
+ case ARES_RR_NAPTR_REGEXP:
+ case ARES_RR_NAPTR_REPLACEMENT:
+ case ARES_RR_URI_TARGET:
+ case ARES_RR_CAA_TAG:
+ return ARES_DATATYPE_STR;
+
+ case ARES_RR_SOA_SERIAL:
+ case ARES_RR_SOA_REFRESH:
+ case ARES_RR_SOA_RETRY:
+ case ARES_RR_SOA_EXPIRE:
+ case ARES_RR_SOA_MINIMUM:
+ return ARES_DATATYPE_U32;
+
+ case ARES_RR_MX_PREFERENCE:
+ case ARES_RR_SRV_PRIORITY:
+ case ARES_RR_SRV_WEIGHT:
+ case ARES_RR_SRV_PORT:
+ case ARES_RR_NAPTR_ORDER:
+ case ARES_RR_NAPTR_PREFERENCE:
+ case ARES_RR_OPT_UDP_SIZE:
+ case ARES_RR_OPT_FLAGS:
+ case ARES_RR_URI_PRIORITY:
+ case ARES_RR_URI_WEIGHT:
+ case ARES_RR_RAW_RR_TYPE:
+ return ARES_DATATYPE_U16;
+
+ case ARES_RR_OPT_EXT_RCODE:
+ case ARES_RR_OPT_VERSION:
+ case ARES_RR_CAA_CRITICAL:
+ return ARES_DATATYPE_U8;
+
+ case ARES_RR_CAA_VALUE:
+ case ARES_RR_TXT_DATA:
+ case ARES_RR_RAW_RR_DATA:
+ return ARES_DATATYPE_BIN;
+ }
+
+ return 0;
+}
+
+static const ares_dns_rr_key_t rr_a_keys[] = { ARES_RR_A_ADDR };
+static const ares_dns_rr_key_t rr_ns_keys[] = { ARES_RR_NS_NSDNAME };
+static const ares_dns_rr_key_t rr_cname_keys[] = { ARES_RR_CNAME_CNAME };
+static const ares_dns_rr_key_t rr_soa_keys[] = {
+ ARES_RR_SOA_MNAME, ARES_RR_SOA_RNAME, ARES_RR_SOA_SERIAL,
+ ARES_RR_SOA_REFRESH, ARES_RR_SOA_RETRY, ARES_RR_SOA_EXPIRE,
+ ARES_RR_SOA_MINIMUM
+};
+static const ares_dns_rr_key_t rr_ptr_keys[] = { ARES_RR_PTR_DNAME };
+static const ares_dns_rr_key_t rr_hinfo_keys[] = { ARES_RR_HINFO_CPU,
+ ARES_RR_HINFO_OS };
+static const ares_dns_rr_key_t rr_mx_keys[] = { ARES_RR_MX_PREFERENCE,
+ ARES_RR_MX_EXCHANGE };
+static const ares_dns_rr_key_t rr_txt_keys[] = { ARES_RR_TXT_DATA };
+static const ares_dns_rr_key_t rr_aaaa_keys[] = { ARES_RR_AAAA_ADDR };
+static const ares_dns_rr_key_t rr_srv_keys[] = {
+ ARES_RR_SRV_PRIORITY, ARES_RR_SRV_WEIGHT, ARES_RR_SRV_PORT, ARES_RR_SRV_TARGET
+};
+static const ares_dns_rr_key_t rr_naptr_keys[] = {
+ ARES_RR_NAPTR_ORDER, ARES_RR_NAPTR_PREFERENCE, ARES_RR_NAPTR_FLAGS,
+ ARES_RR_NAPTR_SERVICES, ARES_RR_NAPTR_REGEXP, ARES_RR_NAPTR_REPLACEMENT
+};
+static const ares_dns_rr_key_t rr_opt_keys[] = { ARES_RR_OPT_UDP_SIZE,
+ ARES_RR_OPT_EXT_RCODE,
+ ARES_RR_OPT_VERSION,
+ ARES_RR_OPT_FLAGS };
+static const ares_dns_rr_key_t rr_uri_keys[] = { ARES_RR_URI_PRIORITY,
+ ARES_RR_URI_WEIGHT,
+ ARES_RR_URI_TARGET };
+static const ares_dns_rr_key_t rr_caa_keys[] = { ARES_RR_CAA_CRITICAL,
+ ARES_RR_CAA_TAG,
+ ARES_RR_CAA_VALUE };
+static const ares_dns_rr_key_t rr_raw_rr_keys[] = { ARES_RR_RAW_RR_TYPE,
+ ARES_RR_RAW_RR_DATA };
+
+const ares_dns_rr_key_t *ares_dns_rr_get_keys(ares_dns_rec_type_t type,
+ size_t *cnt)
+{
+ if (cnt == NULL) {
+ return NULL;
+ }
+
+ *cnt = 0;
+
+ switch (type) {
+ case ARES_REC_TYPE_A:
+ *cnt = sizeof(rr_a_keys) / sizeof(*rr_a_keys);
+ return rr_a_keys;
+ case ARES_REC_TYPE_NS:
+ *cnt = sizeof(rr_ns_keys) / sizeof(*rr_ns_keys);
+ return rr_ns_keys;
+ case ARES_REC_TYPE_CNAME:
+ *cnt = sizeof(rr_cname_keys) / sizeof(*rr_cname_keys);
+ return rr_cname_keys;
+ case ARES_REC_TYPE_SOA:
+ *cnt = sizeof(rr_soa_keys) / sizeof(*rr_soa_keys);
+ return rr_soa_keys;
+ case ARES_REC_TYPE_PTR:
+ *cnt = sizeof(rr_ptr_keys) / sizeof(*rr_ptr_keys);
+ return rr_ptr_keys;
+ case ARES_REC_TYPE_HINFO:
+ *cnt = sizeof(rr_hinfo_keys) / sizeof(*rr_hinfo_keys);
+ return rr_hinfo_keys;
+ case ARES_REC_TYPE_MX:
+ *cnt = sizeof(rr_mx_keys) / sizeof(*rr_mx_keys);
+ return rr_mx_keys;
+ case ARES_REC_TYPE_TXT:
+ *cnt = sizeof(rr_txt_keys) / sizeof(*rr_txt_keys);
+ return rr_txt_keys;
+ case ARES_REC_TYPE_AAAA:
+ *cnt = sizeof(rr_aaaa_keys) / sizeof(*rr_aaaa_keys);
+ return rr_aaaa_keys;
+ case ARES_REC_TYPE_SRV:
+ *cnt = sizeof(rr_srv_keys) / sizeof(*rr_srv_keys);
+ return rr_srv_keys;
+ case ARES_REC_TYPE_NAPTR:
+ *cnt = sizeof(rr_naptr_keys) / sizeof(*rr_naptr_keys);
+ return rr_naptr_keys;
+ case ARES_REC_TYPE_OPT:
+ *cnt = sizeof(rr_opt_keys) / sizeof(*rr_opt_keys);
+ return rr_opt_keys;
+#if 0
+ case ARES_REC_TYPE_TLSA:
+ *cnt = sizeof(rr_tlsa_keys) / sizeof(*rr_tlsa_keys);
+ return rr_tlsa_keys;
+ case ARES_REC_TYPE_SVBC:
+ *cnt = sizeof(rr_svbc_keys) / sizeof(*rr_svbc_keys);
+ return rr_svbc_keys;
+ case ARES_REC_TYPE_HTTPS:
+ *cnt = sizeof(rr_https_keys) / sizeof(*rr_https_keys);
+ return rr_https_keys;
+#endif
+ case ARES_REC_TYPE_ANY:
+ /* Not real */
+ break;
+ case ARES_REC_TYPE_URI:
+ *cnt = sizeof(rr_uri_keys) / sizeof(*rr_uri_keys);
+ return rr_uri_keys;
+ case ARES_REC_TYPE_CAA:
+ *cnt = sizeof(rr_caa_keys) / sizeof(*rr_caa_keys);
+ return rr_caa_keys;
+ case ARES_REC_TYPE_RAW_RR:
+ *cnt = sizeof(rr_raw_rr_keys) / sizeof(*rr_raw_rr_keys);
+ return rr_raw_rr_keys;
+ }
+
+ return NULL;
+}
diff --git a/src/lib/ares_dns_parse.c b/src/lib/ares_dns_parse.c
new file mode 100644
index 0000000..095ab3b
--- /dev/null
+++ b/src/lib/ares_dns_parse.c
@@ -0,0 +1,1043 @@
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#include "ares_setup.h"
+#include "ares.h"
+#include "ares_private.h"
+#include "ares_dns_record.h"
+#include <limits.h>
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+
+static size_t ares_dns_rr_remaining_len(const ares__buf_t *buf, size_t orig_len,
+ size_t rdlength)
+{
+ size_t used_len = orig_len - ares__buf_len(buf);
+ if (used_len >= rdlength) {
+ return 0;
+ }
+ return rdlength - used_len;
+}
+
+static ares_status_t ares_dns_parse_and_set_dns_name(ares__buf_t *buf,
+ ares_bool_t is_hostname,
+ ares_dns_rr_t *rr,
+ ares_dns_rr_key_t key)
+{
+ ares_status_t status;
+ char *name = NULL;
+
+ status = ares__buf_parse_dns_name(buf, &name, is_hostname);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ status = ares_dns_rr_set_str_own(rr, key, name);
+ if (status != ARES_SUCCESS) {
+ ares_free(name);
+ return status;
+ }
+ return ARES_SUCCESS;
+}
+
+static ares_status_t ares_dns_parse_and_set_dns_str(ares__buf_t *buf,
+ size_t max_len,
+ ares_bool_t allow_multiple,
+ ares_dns_rr_t *rr,
+ ares_dns_rr_key_t key)
+{
+ ares_status_t status;
+ char *str = NULL;
+
+ status = ares__buf_parse_dns_str(buf, max_len, &str, allow_multiple);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ status = ares_dns_rr_set_str_own(rr, key, str);
+ if (status != ARES_SUCCESS) {
+ ares_free(str);
+ return status;
+ }
+ return ARES_SUCCESS;
+}
+
+static ares_status_t
+ ares_dns_parse_and_set_dns_binstr(ares__buf_t *buf, size_t max_len,
+ ares_bool_t allow_multiple,
+ ares_dns_rr_t *rr, ares_dns_rr_key_t key)
+{
+ ares_status_t status;
+ unsigned char *bin = NULL;
+ size_t bin_len = 0;
+
+ status =
+ ares__buf_parse_dns_binstr(buf, max_len, &bin, &bin_len, allow_multiple);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ status = ares_dns_rr_set_bin_own(rr, key, bin, bin_len);
+ if (status != ARES_SUCCESS) {
+ ares_free(bin);
+ return status;
+ }
+ return ARES_SUCCESS;
+}
+
+static ares_status_t ares_dns_parse_and_set_be32(ares__buf_t *buf,
+ ares_dns_rr_t *rr,
+ ares_dns_rr_key_t key)
+{
+ ares_status_t status;
+ unsigned int u32;
+
+ status = ares__buf_fetch_be32(buf, &u32);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ return ares_dns_rr_set_u32(rr, key, u32);
+}
+
+static ares_status_t ares_dns_parse_and_set_be16(ares__buf_t *buf,
+ ares_dns_rr_t *rr,
+ ares_dns_rr_key_t key)
+{
+ ares_status_t status;
+ unsigned short u16;
+
+ status = ares__buf_fetch_be16(buf, &u16);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ return ares_dns_rr_set_u16(rr, key, u16);
+}
+
+static ares_status_t ares_dns_parse_and_set_u8(ares__buf_t *buf,
+ ares_dns_rr_t *rr,
+ ares_dns_rr_key_t key)
+{
+ ares_status_t status;
+ unsigned char u8;
+
+ status = ares__buf_fetch_bytes(buf, &u8, 1);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ return ares_dns_rr_set_u8(rr, key, u8);
+}
+
+static ares_status_t ares_dns_parse_rr_a(ares__buf_t *buf, ares_dns_rr_t *rr,
+ size_t rdlength)
+{
+ struct in_addr addr;
+ ares_status_t status;
+
+ (void)rdlength; /* Not needed */
+
+ status = ares__buf_fetch_bytes(buf, (unsigned char *)&addr, sizeof(addr));
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ return ares_dns_rr_set_addr(rr, ARES_RR_A_ADDR, &addr);
+}
+
+static ares_status_t ares_dns_parse_rr_ns(ares__buf_t *buf, ares_dns_rr_t *rr,
+ size_t rdlength)
+{
+ (void)rdlength; /* Not needed */
+
+ return ares_dns_parse_and_set_dns_name(buf, ARES_FALSE, rr,
+ ARES_RR_NS_NSDNAME);
+}
+
+static ares_status_t ares_dns_parse_rr_cname(ares__buf_t *buf,
+ ares_dns_rr_t *rr, size_t rdlength)
+{
+ (void)rdlength; /* Not needed */
+
+ return ares_dns_parse_and_set_dns_name(buf, ARES_FALSE, rr,
+ ARES_RR_CNAME_CNAME);
+}
+
+static ares_status_t ares_dns_parse_rr_soa(ares__buf_t *buf, ares_dns_rr_t *rr,
+ size_t rdlength)
+{
+ ares_status_t status;
+
+ (void)rdlength; /* Not needed */
+
+ /* MNAME */
+ status =
+ ares_dns_parse_and_set_dns_name(buf, ARES_FALSE, rr, ARES_RR_SOA_MNAME);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* RNAME */
+ status =
+ ares_dns_parse_and_set_dns_name(buf, ARES_FALSE, rr, ARES_RR_SOA_RNAME);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* SERIAL */
+ status = ares_dns_parse_and_set_be32(buf, rr, ARES_RR_SOA_SERIAL);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* REFRESH */
+ status = ares_dns_parse_and_set_be32(buf, rr, ARES_RR_SOA_REFRESH);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* RETRY */
+ status = ares_dns_parse_and_set_be32(buf, rr, ARES_RR_SOA_RETRY);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* EXPIRE */
+ status = ares_dns_parse_and_set_be32(buf, rr, ARES_RR_SOA_EXPIRE);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* MINIMUM */
+ return ares_dns_parse_and_set_be32(buf, rr, ARES_RR_SOA_MINIMUM);
+}
+
+static ares_status_t ares_dns_parse_rr_ptr(ares__buf_t *buf, ares_dns_rr_t *rr,
+ size_t rdlength)
+{
+ (void)rdlength; /* Not needed */
+
+ return ares_dns_parse_and_set_dns_name(buf, ARES_FALSE, rr,
+ ARES_RR_PTR_DNAME);
+}
+
+static ares_status_t ares_dns_parse_rr_hinfo(ares__buf_t *buf,
+ ares_dns_rr_t *rr, size_t rdlength)
+{
+ ares_status_t status;
+ size_t orig_len = ares__buf_len(buf);
+
+ (void)rdlength; /* Not needed */
+
+ /* CPU */
+ status = ares_dns_parse_and_set_dns_str(
+ buf, ares_dns_rr_remaining_len(buf, orig_len, rdlength), ARES_FALSE, rr,
+ ARES_RR_HINFO_CPU);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* OS */
+ return ares_dns_parse_and_set_dns_str(
+ buf, ares_dns_rr_remaining_len(buf, orig_len, rdlength), ARES_FALSE, rr,
+ ARES_RR_HINFO_OS);
+}
+
+static ares_status_t ares_dns_parse_rr_mx(ares__buf_t *buf, ares_dns_rr_t *rr,
+ size_t rdlength)
+{
+ ares_status_t status;
+
+ (void)rdlength; /* Not needed */
+
+ /* PREFERENCE */
+ status = ares_dns_parse_and_set_be16(buf, rr, ARES_RR_MX_PREFERENCE);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* EXCHANGE */
+ return ares_dns_parse_and_set_dns_name(buf, ARES_FALSE, rr,
+ ARES_RR_MX_EXCHANGE);
+}
+
+static ares_status_t ares_dns_parse_rr_txt(ares__buf_t *buf, ares_dns_rr_t *rr,
+ size_t rdlength)
+{
+ return ares_dns_parse_and_set_dns_binstr(buf, rdlength, ARES_TRUE, rr,
+ ARES_RR_TXT_DATA);
+}
+
+static ares_status_t ares_dns_parse_rr_aaaa(ares__buf_t *buf, ares_dns_rr_t *rr,
+ size_t rdlength)
+{
+ struct ares_in6_addr addr;
+ ares_status_t status;
+
+ (void)rdlength; /* Not needed */
+
+ status = ares__buf_fetch_bytes(buf, (unsigned char *)&addr, sizeof(addr));
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ return ares_dns_rr_set_addr6(rr, ARES_RR_AAAA_ADDR, &addr);
+}
+
+static ares_status_t ares_dns_parse_rr_srv(ares__buf_t *buf, ares_dns_rr_t *rr,
+ size_t rdlength)
+{
+ ares_status_t status;
+
+ (void)rdlength; /* Not needed */
+
+ /* PRIORITY */
+ status = ares_dns_parse_and_set_be16(buf, rr, ARES_RR_SRV_PRIORITY);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* WEIGHT */
+ status = ares_dns_parse_and_set_be16(buf, rr, ARES_RR_SRV_WEIGHT);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* PORT */
+ status = ares_dns_parse_and_set_be16(buf, rr, ARES_RR_SRV_PORT);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* TARGET */
+ return ares_dns_parse_and_set_dns_name(buf, ARES_FALSE, rr,
+ ARES_RR_SRV_TARGET);
+}
+
+static ares_status_t ares_dns_parse_rr_naptr(ares__buf_t *buf,
+ ares_dns_rr_t *rr, size_t rdlength)
+{
+ ares_status_t status;
+ size_t orig_len = ares__buf_len(buf);
+
+ /* ORDER */
+ status = ares_dns_parse_and_set_be16(buf, rr, ARES_RR_NAPTR_ORDER);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* PREFERENCE */
+ status = ares_dns_parse_and_set_be16(buf, rr, ARES_RR_NAPTR_PREFERENCE);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* FLAGS */
+ status = ares_dns_parse_and_set_dns_str(
+ buf, ares_dns_rr_remaining_len(buf, orig_len, rdlength), ARES_FALSE, rr,
+ ARES_RR_NAPTR_FLAGS);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* SERVICES */
+ status = ares_dns_parse_and_set_dns_str(
+ buf, ares_dns_rr_remaining_len(buf, orig_len, rdlength), ARES_FALSE, rr,
+ ARES_RR_NAPTR_SERVICES);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* REGEXP */
+ status = ares_dns_parse_and_set_dns_str(
+ buf, ares_dns_rr_remaining_len(buf, orig_len, rdlength), ARES_FALSE, rr,
+ ARES_RR_NAPTR_REGEXP);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* REPLACEMENT */
+ return ares_dns_parse_and_set_dns_name(buf, ARES_FALSE, rr,
+ ARES_RR_NAPTR_REPLACEMENT);
+}
+
+static ares_status_t ares_dns_parse_rr_opt(ares__buf_t *buf, ares_dns_rr_t *rr,
+ size_t rdlength,
+ unsigned short raw_class,
+ unsigned int raw_ttl)
+{
+ ares_status_t status;
+
+ (void)rdlength; /* Not needed */
+
+ status = ares_dns_rr_set_u16(rr, ARES_RR_OPT_UDP_SIZE, raw_class);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ status = ares_dns_rr_set_u8(rr, ARES_RR_OPT_EXT_RCODE,
+ (unsigned char)(raw_ttl >> 24) & 0xFF);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ status = ares_dns_rr_set_u8(rr, ARES_RR_OPT_VERSION,
+ (unsigned char)(raw_ttl >> 16) & 0xFF);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ status = ares_dns_rr_set_u16(rr, ARES_RR_OPT_FLAGS,
+ (unsigned short)(raw_ttl & 0xFFFF));
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* XXX: Support additional message here */
+ (void)buf;
+ return ARES_SUCCESS;
+}
+
+static ares_status_t ares_dns_parse_rr_uri(ares__buf_t *buf, ares_dns_rr_t *rr,
+ size_t rdlength)
+{
+ char *name = NULL;
+ ares_status_t status;
+ size_t orig_len = ares__buf_len(buf);
+ size_t remaining_len;
+
+ /* PRIORITY */
+ status = ares_dns_parse_and_set_be16(buf, rr, ARES_RR_URI_PRIORITY);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* WEIGHT */
+ status = ares_dns_parse_and_set_be16(buf, rr, ARES_RR_URI_WEIGHT);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* TARGET -- not in string format, rest of buffer, required to be
+ * non-zero length */
+ remaining_len = ares_dns_rr_remaining_len(buf, orig_len, rdlength);
+ if (remaining_len == 0) {
+ status = ARES_EBADRESP;
+ return status;
+ }
+
+ /* NOTE: Not in DNS string format */
+ status = ares__buf_fetch_str_dup(buf, remaining_len, &name);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ status = ares_dns_rr_set_str_own(rr, ARES_RR_URI_TARGET, name);
+ if (status != ARES_SUCCESS) {
+ ares_free(name);
+ return status;
+ }
+ name = NULL;
+
+ return ARES_SUCCESS;
+}
+
+static ares_status_t ares_dns_parse_rr_caa(ares__buf_t *buf, ares_dns_rr_t *rr,
+ size_t rdlength)
+{
+ unsigned char *data = NULL;
+ size_t data_len = 0;
+ ares_status_t status;
+ size_t orig_len = ares__buf_len(buf);
+
+ /* CRITICAL */
+ status = ares_dns_parse_and_set_u8(buf, rr, ARES_RR_CAA_CRITICAL);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* Tag */
+ status = ares_dns_parse_and_set_dns_str(
+ buf, ares_dns_rr_remaining_len(buf, orig_len, rdlength), ARES_FALSE, rr,
+ ARES_RR_CAA_TAG);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* Value - binary! (remaining buffer */
+ data_len = ares_dns_rr_remaining_len(buf, orig_len, rdlength);
+ if (data_len == 0) {
+ status = ARES_EBADRESP;
+ return status;
+ }
+ status = ares__buf_fetch_bytes_dup(buf, data_len, &data);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ status = ares_dns_rr_set_bin_own(rr, ARES_RR_CAA_VALUE, data, data_len);
+ if (status != ARES_SUCCESS) {
+ ares_free(data);
+ return status;
+ }
+ data = NULL;
+
+ return ARES_SUCCESS;
+}
+
+static ares_status_t ares_dns_parse_rr_raw_rr(ares__buf_t *buf,
+ ares_dns_rr_t *rr,
+ size_t rdlength,
+ unsigned short raw_type)
+{
+ ares_status_t status;
+ unsigned char *bytes = NULL;
+
+ if (rdlength == 0) {
+ return ARES_SUCCESS;
+ }
+
+ status = ares__buf_fetch_bytes_dup(buf, rdlength, &bytes);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ /* Can't fail */
+ status = ares_dns_rr_set_u16(rr, ARES_RR_RAW_RR_TYPE, raw_type);
+ if (status != ARES_SUCCESS) {
+ ares_free(bytes);
+ return status;
+ }
+
+ status = ares_dns_rr_set_bin_own(rr, ARES_RR_RAW_RR_DATA, bytes, rdlength);
+ if (status != ARES_SUCCESS) {
+ ares_free(bytes);
+ return status;
+ }
+
+ return ARES_SUCCESS;
+}
+
+static ares_status_t ares_dns_parse_header(ares__buf_t *buf, unsigned int flags,
+ ares_dns_record_t **dnsrec,
+ unsigned short *qdcount,
+ unsigned short *ancount,
+ unsigned short *nscount,
+ unsigned short *arcount)
+{
+ ares_status_t status = ARES_EBADRESP;
+ unsigned short u16;
+ unsigned short id;
+ unsigned short dns_flags = 0;
+ ares_dns_opcode_t opcode;
+ ares_dns_rcode_t rcode;
+
+ (void)flags; /* currently unsed */
+
+ if (buf == NULL || dnsrec == NULL || qdcount == NULL || ancount == NULL ||
+ nscount == NULL || arcount == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ *dnsrec = NULL;
+
+ /*
+ * RFC 1035 4.1.1. Header section format.
+ * and Updated by RFC 2065 to add AD and CD bits.
+ * 1 1 1 1 1 1
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ * | ID |
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ * |QR| Opcode |AA|TC|RD|RA| Z|AD|CD| RCODE |
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ * | QDCOUNT |
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ * | ANCOUNT |
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ * | NSCOUNT |
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ * | ARCOUNT |
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ */
+
+ /* ID */
+ status = ares__buf_fetch_be16(buf, &id);
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+
+ /* Flags */
+ status = ares__buf_fetch_be16(buf, &u16);
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+
+ /* QR */
+ if (u16 & 0x8000) {
+ dns_flags |= ARES_FLAG_QR;
+ }
+
+ /* OPCODE */
+ opcode = (u16 >> 11) & 0xf;
+
+ /* AA */
+ if (u16 & 0x400) {
+ dns_flags |= ARES_FLAG_AA;
+ }
+
+ /* TC */
+ if (u16 & 0x200) {
+ dns_flags |= ARES_FLAG_TC;
+ }
+
+ /* RD */
+ if (u16 & 0x100) {
+ dns_flags |= ARES_FLAG_RD;
+ }
+
+ /* RA */
+ if (u16 & 0x80) {
+ dns_flags |= ARES_FLAG_RA;
+ }
+
+ /* Z -- unused */
+
+ /* AD */
+ if (u16 & 0x20) {
+ dns_flags |= ARES_FLAG_AD;
+ }
+
+ /* CD */
+ if (u16 & 0x10) {
+ dns_flags |= ARES_FLAG_CD;
+ }
+
+ /* RCODE */
+ rcode = u16 & 0xf;
+
+ /* QDCOUNT */
+ status = ares__buf_fetch_be16(buf, qdcount);
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+
+ /* ANCOUNT */
+ status = ares__buf_fetch_be16(buf, ancount);
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+
+ /* NSCOUNT */
+ status = ares__buf_fetch_be16(buf, nscount);
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+
+ /* ARCOUNT */
+ status = ares__buf_fetch_be16(buf, arcount);
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+
+ status = ares_dns_record_create(dnsrec, id, dns_flags, opcode, rcode);
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+
+ if (*ancount > 0) {
+ status =
+ ares_dns_record_rr_prealloc(*dnsrec, ARES_SECTION_ANSWER, *ancount);
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+ }
+
+ if (*nscount > 0) {
+ status =
+ ares_dns_record_rr_prealloc(*dnsrec, ARES_SECTION_AUTHORITY, *nscount);
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+ }
+
+ if (*arcount > 0) {
+ status =
+ ares_dns_record_rr_prealloc(*dnsrec, ARES_SECTION_ADDITIONAL, *arcount);
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+ }
+
+ return ARES_SUCCESS;
+
+fail:
+ ares_dns_record_destroy(*dnsrec);
+ *dnsrec = NULL;
+ *qdcount = 0;
+ *ancount = 0;
+ *nscount = 0;
+ *arcount = 0;
+
+ return status;
+}
+
+static ares_status_t
+ ares_dns_parse_rr_data(ares__buf_t *buf, size_t rdlength, ares_dns_rr_t *rr,
+ ares_dns_rec_type_t type, unsigned short raw_type,
+ unsigned short raw_class, unsigned int raw_ttl)
+{
+ switch (type) {
+ case ARES_REC_TYPE_A:
+ return ares_dns_parse_rr_a(buf, rr, rdlength);
+ case ARES_REC_TYPE_NS:
+ return ares_dns_parse_rr_ns(buf, rr, rdlength);
+ case ARES_REC_TYPE_CNAME:
+ return ares_dns_parse_rr_cname(buf, rr, rdlength);
+ case ARES_REC_TYPE_SOA:
+ return ares_dns_parse_rr_soa(buf, rr, rdlength);
+ case ARES_REC_TYPE_PTR:
+ return ares_dns_parse_rr_ptr(buf, rr, rdlength);
+ case ARES_REC_TYPE_HINFO:
+ return ares_dns_parse_rr_hinfo(buf, rr, rdlength);
+ case ARES_REC_TYPE_MX:
+ return ares_dns_parse_rr_mx(buf, rr, rdlength);
+ case ARES_REC_TYPE_TXT:
+ return ares_dns_parse_rr_txt(buf, rr, rdlength);
+ case ARES_REC_TYPE_AAAA:
+ return ares_dns_parse_rr_aaaa(buf, rr, rdlength);
+ case ARES_REC_TYPE_SRV:
+ return ares_dns_parse_rr_srv(buf, rr, rdlength);
+ case ARES_REC_TYPE_NAPTR:
+ return ares_dns_parse_rr_naptr(buf, rr, rdlength);
+ case ARES_REC_TYPE_ANY:
+ return ARES_EBADRESP;
+ case ARES_REC_TYPE_OPT:
+ return ares_dns_parse_rr_opt(buf, rr, rdlength, raw_class, raw_ttl);
+ case ARES_REC_TYPE_URI:
+ return ares_dns_parse_rr_uri(buf, rr, rdlength);
+ case ARES_REC_TYPE_CAA:
+ return ares_dns_parse_rr_caa(buf, rr, rdlength);
+ case ARES_REC_TYPE_RAW_RR:
+ return ares_dns_parse_rr_raw_rr(buf, rr, rdlength, raw_type);
+ }
+ return ARES_EFORMERR;
+}
+
+static ares_status_t ares_dns_parse_qd(ares__buf_t *buf,
+ ares_dns_record_t *dnsrec)
+{
+ char *name = NULL;
+ unsigned short u16;
+ ares_status_t status;
+ ares_dns_rec_type_t type;
+ ares_dns_class_t qclass;
+ /* The question section is used to carry the "question" in most queries,
+ * i.e., the parameters that define what is being asked. The section
+ * contains QDCOUNT (usually 1) entries, each of the following format:
+ * 1 1 1 1 1 1
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ * | |
+ * / QNAME /
+ * / /
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ * | QTYPE |
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ * | QCLASS |
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ */
+
+ /* Name */
+ status = ares__buf_parse_dns_name(buf, &name, ARES_FALSE);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+
+ /* Type */
+ status = ares__buf_fetch_be16(buf, &u16);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+ type = u16;
+
+ /* Class */
+ status = ares__buf_fetch_be16(buf, &u16);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+ qclass = u16;
+
+ /* Add question */
+ status = ares_dns_record_query_add(dnsrec, name, type, qclass);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+
+done:
+ ares_free(name);
+ return status;
+}
+
+static ares_status_t ares_dns_parse_rr(ares__buf_t *buf, unsigned int flags,
+ ares_dns_section_t sect,
+ ares_dns_record_t *dnsrec)
+{
+ char *name = NULL;
+ unsigned short u16;
+ unsigned short raw_type;
+ ares_status_t status;
+ ares_dns_rec_type_t type;
+ ares_dns_class_t qclass;
+ unsigned int ttl;
+ size_t rdlength;
+ ares_dns_rr_t *rr = NULL;
+ size_t remaining_len = 0;
+ size_t processed_len = 0;
+
+ (void)flags; /* currently unused */
+
+ /* All RRs have the same top level format shown below:
+ * 1 1 1 1 1 1
+ * 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ * | |
+ * / /
+ * / NAME /
+ * | |
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ * | TYPE |
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ * | CLASS |
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ * | TTL |
+ * | |
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ * | RDLENGTH |
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--|
+ * / RDATA /
+ * / /
+ * +--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
+ */
+
+ /* Name */
+ status = ares__buf_parse_dns_name(buf, &name, ARES_FALSE);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+
+ /* Type */
+ status = ares__buf_fetch_be16(buf, &u16);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+ type = u16;
+ raw_type = u16; /* Only used for raw rr data */
+
+ /* Class */
+ status = ares__buf_fetch_be16(buf, &u16);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+ qclass = u16;
+
+ /* TTL */
+ status = ares__buf_fetch_be32(buf, &ttl);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+
+ /* Length */
+ status = ares__buf_fetch_be16(buf, &u16);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+ rdlength = u16;
+
+ if (!ares_dns_rec_type_isvalid(type, ARES_FALSE)) {
+ type = ARES_REC_TYPE_RAW_RR;
+ }
+
+ /* Pull into another buffer for safety */
+ if (rdlength > ares__buf_len(buf)) {
+ status = ARES_EBADRESP;
+ goto done;
+ }
+
+ /* Add the base rr */
+ status =
+ ares_dns_record_rr_add(&rr, dnsrec, sect, name, type,
+ type == ARES_REC_TYPE_OPT ? ARES_CLASS_IN : qclass,
+ type == ARES_REC_TYPE_OPT ? 0 : ttl);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+
+ /* Record the current remaining length in the buffer so we can tell how
+ * much was processed */
+ remaining_len = ares__buf_len(buf);
+
+ /* Fill in the data for the rr */
+ status = ares_dns_parse_rr_data(buf, rdlength, rr, type, raw_type,
+ (unsigned short)qclass, ttl);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+
+
+ /* Determine how many bytes were processed */
+ processed_len = remaining_len - ares__buf_len(buf);
+
+ /* If too many bytes were processed, error! */
+ if (processed_len > rdlength) {
+ status = ARES_EBADRESP;
+ goto done;
+ }
+
+ /* If too few bytes were processed, consume the unprocessed data for this
+ * record as the parser may not have wanted/needed to use it */
+ if (processed_len < rdlength) {
+ ares__buf_consume(buf, rdlength - processed_len);
+ }
+
+
+done:
+ ares_free(name);
+ return status;
+}
+
+static ares_status_t ares_dns_parse_buf(ares__buf_t *buf, unsigned int flags,
+ ares_dns_record_t **dnsrec)
+{
+ ares_status_t status;
+ unsigned short qdcount;
+ unsigned short ancount;
+ unsigned short nscount;
+ unsigned short arcount;
+ unsigned short i;
+
+ if (buf == NULL || dnsrec == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ /* All communications inside of the domain protocol are carried in a single
+ * format called a message. The top level format of message is divided
+ * into 5 sections (some of which are empty in certain cases) shown below:
+ *
+ * +---------------------+
+ * | Header |
+ * +---------------------+
+ * | Question | the question for the name server
+ * +---------------------+
+ * | Answer | RRs answering the question
+ * +---------------------+
+ * | Authority | RRs pointing toward an authority
+ * +---------------------+
+ * | Additional | RRs holding additional information
+ * +---------------------+
+ */
+
+ /* Parse header */
+ status = ares_dns_parse_header(buf, flags, dnsrec, &qdcount, &ancount,
+ &nscount, &arcount);
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+
+ /* Must have questions */
+ if (qdcount == 0) {
+ status = ARES_EBADRESP;
+ goto fail;
+ }
+
+ /* XXX: this should be controlled by a flag in case we want to allow
+ * multiple questions. I think mDNS allows this */
+ if (qdcount > 1) {
+ status = ARES_EBADRESP;
+ goto fail;
+ }
+
+ /* Parse questions */
+ for (i = 0; i < qdcount; i++) {
+ status = ares_dns_parse_qd(buf, *dnsrec);
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+ }
+
+ /* Parse Answers */
+ for (i = 0; i < ancount; i++) {
+ status = ares_dns_parse_rr(buf, flags, ARES_SECTION_ANSWER, *dnsrec);
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+ }
+
+ /* Parse Authority */
+ for (i = 0; i < nscount; i++) {
+ status = ares_dns_parse_rr(buf, flags, ARES_SECTION_AUTHORITY, *dnsrec);
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+ }
+
+ /* Parse Additional */
+ for (i = 0; i < arcount; i++) {
+ status = ares_dns_parse_rr(buf, flags, ARES_SECTION_ADDITIONAL, *dnsrec);
+ if (status != ARES_SUCCESS) {
+ goto fail;
+ }
+ }
+
+ return ARES_SUCCESS;
+
+fail:
+ ares_dns_record_destroy(*dnsrec);
+ *dnsrec = NULL;
+ return status;
+}
+
+ares_status_t ares_dns_parse(const unsigned char *buf, size_t buf_len,
+ unsigned int flags, ares_dns_record_t **dnsrec)
+{
+ ares__buf_t *parser = NULL;
+ ares_status_t status;
+
+ if (buf == NULL || buf_len == 0 || dnsrec == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ parser = ares__buf_create_const(buf, buf_len);
+ if (parser == NULL) {
+ return ARES_ENOMEM;
+ }
+
+ status = ares_dns_parse_buf(parser, flags, dnsrec);
+ ares__buf_destroy(parser);
+
+ return status;
+}
diff --git a/src/lib/ares_dns_record.c b/src/lib/ares_dns_record.c
new file mode 100644
index 0000000..8adc886
--- /dev/null
+++ b/src/lib/ares_dns_record.c
@@ -0,0 +1,935 @@
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#include "ares_setup.h"
+#include "ares.h"
+#include "ares_private.h"
+#include "ares_dns_record.h"
+#include <limits.h>
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+
+
+ares_status_t ares_dns_record_create(ares_dns_record_t **dnsrec,
+ unsigned short id, unsigned short flags,
+ ares_dns_opcode_t opcode,
+ ares_dns_rcode_t rcode)
+{
+ if (dnsrec == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ *dnsrec = NULL;
+
+ if (!ares_dns_opcode_isvalid(opcode) || !ares_dns_rcode_isvalid(rcode) ||
+ !ares_dns_flags_arevalid(flags)) {
+ return ARES_EFORMERR;
+ }
+
+ *dnsrec = ares_malloc_zero(sizeof(**dnsrec));
+ if (*dnsrec == NULL) {
+ return ARES_ENOMEM;
+ }
+
+ (*dnsrec)->id = id;
+ (*dnsrec)->flags = flags;
+ (*dnsrec)->opcode = opcode;
+ (*dnsrec)->rcode = rcode;
+ return ARES_SUCCESS;
+}
+
+unsigned short ares_dns_record_get_id(const ares_dns_record_t *dnsrec)
+{
+ if (dnsrec == NULL) {
+ return 0;
+ }
+ return dnsrec->id;
+}
+
+unsigned short ares_dns_record_get_flags(const ares_dns_record_t *dnsrec)
+{
+ if (dnsrec == NULL) {
+ return 0;
+ }
+ return dnsrec->flags;
+}
+
+ares_dns_opcode_t ares_dns_record_get_opcode(const ares_dns_record_t *dnsrec)
+{
+ if (dnsrec == NULL) {
+ return 0;
+ }
+ return dnsrec->opcode;
+}
+
+ares_dns_rcode_t ares_dns_record_get_rcode(const ares_dns_record_t *dnsrec)
+{
+ if (dnsrec == NULL) {
+ return 0;
+ }
+ return dnsrec->rcode;
+}
+
+static void ares__dns_rr_free(ares_dns_rr_t *rr)
+{
+ ares_free(rr->name);
+
+ switch (rr->type) {
+ case ARES_REC_TYPE_A:
+ case ARES_REC_TYPE_AAAA:
+ case ARES_REC_TYPE_ANY:
+ /* Nothing to free */
+ break;
+
+ case ARES_REC_TYPE_NS:
+ ares_free(rr->r.ns.nsdname);
+ break;
+
+ case ARES_REC_TYPE_CNAME:
+ ares_free(rr->r.cname.cname);
+ break;
+
+ case ARES_REC_TYPE_SOA:
+ ares_free(rr->r.soa.mname);
+ ares_free(rr->r.soa.rname);
+ break;
+
+ case ARES_REC_TYPE_PTR:
+ ares_free(rr->r.ptr.dname);
+ break;
+
+ case ARES_REC_TYPE_HINFO:
+ ares_free(rr->r.hinfo.cpu);
+ ares_free(rr->r.hinfo.os);
+ break;
+
+ case ARES_REC_TYPE_MX:
+ ares_free(rr->r.mx.exchange);
+ break;
+
+ case ARES_REC_TYPE_TXT:
+ ares_free(rr->r.txt.data);
+ break;
+
+ case ARES_REC_TYPE_SRV:
+ ares_free(rr->r.srv.target);
+ break;
+
+ case ARES_REC_TYPE_NAPTR:
+ ares_free(rr->r.naptr.flags);
+ ares_free(rr->r.naptr.services);
+ ares_free(rr->r.naptr.regexp);
+ ares_free(rr->r.naptr.replacement);
+ break;
+
+ case ARES_REC_TYPE_OPT:
+ /* Once we support the attribute/values, we need to free here */
+ break;
+#if 0
+ case ARES_REC_TYPE_TLSA:
+ /* Once this record type is supported, need to free here
+ * ares_free(rr->r.tlsa.);
+ */
+ break;
+
+ case ARES_REC_TYPE_SVBC:
+ /* Once this record type is supported, need to free here
+ * ares_free(rr->r.svbc.);
+ */
+ break;
+
+ case ARES_REC_TYPE_HTTPS:
+ /* Once this record type is supported, need to free here
+ * ares_free(rr->r.https.);
+ */
+ break;
+#endif
+ case ARES_REC_TYPE_URI:
+ ares_free(rr->r.uri.target);
+ break;
+
+ case ARES_REC_TYPE_CAA:
+ ares_free(rr->r.caa.tag);
+ ares_free(rr->r.caa.value);
+ break;
+
+ case ARES_REC_TYPE_RAW_RR:
+ ares_free(rr->r.raw_rr.data);
+ break;
+ }
+}
+
+void ares_dns_record_destroy(ares_dns_record_t *dnsrec)
+{
+ size_t i;
+
+ if (dnsrec == NULL) {
+ return;
+ }
+
+ /* Free questions */
+ for (i = 0; i < dnsrec->qdcount; i++) {
+ ares_free(dnsrec->qd[i].name);
+ }
+ ares_free(dnsrec->qd);
+
+ /* Free answers */
+ for (i = 0; i < dnsrec->ancount; i++) {
+ ares__dns_rr_free(&dnsrec->an[i]);
+ }
+ ares_free(dnsrec->an);
+
+ /* Free authority */
+ for (i = 0; i < dnsrec->nscount; i++) {
+ ares__dns_rr_free(&dnsrec->ns[i]);
+ }
+ ares_free(dnsrec->ns);
+
+ /* Free additional */
+ for (i = 0; i < dnsrec->arcount; i++) {
+ ares__dns_rr_free(&dnsrec->ar[i]);
+ }
+ ares_free(dnsrec->ar);
+
+ ares_free(dnsrec);
+}
+
+size_t ares_dns_record_query_cnt(const ares_dns_record_t *dnsrec)
+{
+ if (dnsrec == NULL) {
+ return 0;
+ }
+ return dnsrec->qdcount;
+}
+
+ares_status_t ares_dns_record_query_add(ares_dns_record_t *dnsrec,
+ const char *name,
+ ares_dns_rec_type_t qtype,
+ ares_dns_class_t qclass)
+{
+ ares_dns_qd_t *temp = NULL;
+ size_t idx;
+
+ if (dnsrec == NULL || name == NULL ||
+ !ares_dns_rec_type_isvalid(qtype, ARES_TRUE) ||
+ !ares_dns_class_isvalid(qclass, ARES_TRUE)) {
+ return ARES_EFORMERR;
+ }
+
+ if (dnsrec->qdcount >= dnsrec->qdalloc) {
+ size_t alloc_cnt = ares__round_up_pow2(dnsrec->qdcount + 1);
+
+ temp = ares_realloc_zero(dnsrec->qd, sizeof(*temp) * (dnsrec->qdalloc),
+ sizeof(*temp) * alloc_cnt);
+ if (temp == NULL) {
+ return ARES_ENOMEM;
+ }
+
+ dnsrec->qdalloc = alloc_cnt;
+ dnsrec->qd = temp;
+ }
+
+ idx = dnsrec->qdcount;
+
+ dnsrec->qd[idx].name = ares_strdup(name);
+ if (dnsrec->qd[idx].name == NULL) {
+ /* No need to clean up anything */
+ return ARES_ENOMEM;
+ }
+
+ dnsrec->qd[idx].qtype = qtype;
+ dnsrec->qd[idx].qclass = qclass;
+ dnsrec->qdcount++;
+ return ARES_SUCCESS;
+}
+
+ares_status_t ares_dns_record_query_get(const ares_dns_record_t *dnsrec,
+ size_t idx, const char **name,
+ ares_dns_rec_type_t *qtype,
+ ares_dns_class_t *qclass)
+{
+ if (dnsrec == NULL || idx >= dnsrec->qdcount) {
+ return ARES_EFORMERR;
+ }
+
+ if (name != NULL) {
+ *name = dnsrec->qd[idx].name;
+ }
+
+ if (qtype != NULL) {
+ *qtype = dnsrec->qd[idx].qtype;
+ }
+
+ if (qclass != NULL) {
+ *qclass = dnsrec->qd[idx].qclass;
+ }
+
+ return ARES_SUCCESS;
+}
+
+size_t ares_dns_record_rr_cnt(const ares_dns_record_t *dnsrec,
+ ares_dns_section_t sect)
+{
+ if (dnsrec == NULL || !ares_dns_section_isvalid(sect)) {
+ return 0;
+ }
+
+ switch (sect) {
+ case ARES_SECTION_ANSWER:
+ return dnsrec->ancount;
+ case ARES_SECTION_AUTHORITY:
+ return dnsrec->nscount;
+ case ARES_SECTION_ADDITIONAL:
+ return dnsrec->arcount;
+ }
+
+ return 0;
+}
+
+ares_status_t ares_dns_record_rr_prealloc(ares_dns_record_t *dnsrec,
+ ares_dns_section_t sect, size_t cnt)
+{
+ ares_dns_rr_t **rr_ptr = NULL;
+ size_t *rr_alloc = NULL;
+ ares_dns_rr_t *temp = NULL;
+
+ if (dnsrec == NULL || cnt == 0 || !ares_dns_section_isvalid(sect)) {
+ return ARES_EFORMERR;
+ }
+
+ switch (sect) {
+ case ARES_SECTION_ANSWER:
+ rr_ptr = &dnsrec->an;
+ rr_alloc = &dnsrec->analloc;
+ break;
+ case ARES_SECTION_AUTHORITY:
+ rr_ptr = &dnsrec->ns;
+ rr_alloc = &dnsrec->nsalloc;
+ break;
+ case ARES_SECTION_ADDITIONAL:
+ rr_ptr = &dnsrec->ar;
+ rr_alloc = &dnsrec->aralloc;
+ break;
+ }
+
+ /* Round up cnt to a power of 2 */
+ cnt = ares__round_up_pow2(cnt);
+
+ /* Already have that */
+ if (cnt <= *rr_alloc) {
+ return ARES_SUCCESS;
+ }
+
+ temp = ares_realloc_zero(*rr_ptr, sizeof(*temp) * (*rr_alloc),
+ sizeof(*temp) * cnt);
+ if (temp == NULL) {
+ return ARES_ENOMEM;
+ }
+
+ *rr_alloc = cnt;
+ *rr_ptr = temp;
+ return ARES_SUCCESS;
+}
+
+ares_status_t ares_dns_record_rr_add(ares_dns_rr_t **rr_out,
+ ares_dns_record_t *dnsrec,
+ ares_dns_section_t sect, const char *name,
+ ares_dns_rec_type_t type,
+ ares_dns_class_t rclass, unsigned int ttl)
+{
+ ares_dns_rr_t **rr_ptr = NULL;
+ ares_dns_rr_t *rr = NULL;
+ size_t *rr_len = NULL;
+ ares_status_t status;
+ size_t idx;
+
+ if (dnsrec == NULL || name == NULL || rr_out == NULL ||
+ !ares_dns_section_isvalid(sect) ||
+ !ares_dns_rec_type_isvalid(type, ARES_FALSE) ||
+ !ares_dns_class_isvalid(rclass, ARES_FALSE)) {
+ return ARES_EFORMERR;
+ }
+
+ *rr_out = NULL;
+
+ switch (sect) {
+ case ARES_SECTION_ANSWER:
+ rr_ptr = &dnsrec->an;
+ rr_len = &dnsrec->ancount;
+ break;
+ case ARES_SECTION_AUTHORITY:
+ rr_ptr = &dnsrec->ns;
+ rr_len = &dnsrec->nscount;
+ break;
+ case ARES_SECTION_ADDITIONAL:
+ rr_ptr = &dnsrec->ar;
+ rr_len = &dnsrec->arcount;
+ break;
+ }
+
+ status = ares_dns_record_rr_prealloc(dnsrec, sect, *rr_len + 1);
+ if (status != ARES_SUCCESS) {
+ return status;
+ }
+
+ idx = *rr_len;
+ rr = &(*rr_ptr)[idx];
+
+ rr->name = ares_strdup(name);
+ if (rr->name == NULL) {
+ /* No need to clean up anything */
+ return ARES_ENOMEM;
+ }
+
+ rr->type = type;
+ rr->rclass = rclass;
+ rr->ttl = ttl;
+ (*rr_len)++;
+
+ *rr_out = rr;
+
+ return ARES_SUCCESS;
+}
+
+ares_dns_rr_t *ares_dns_record_rr_get(ares_dns_record_t *dnsrec,
+ ares_dns_section_t sect, size_t idx)
+{
+ ares_dns_rr_t *rr_ptr = NULL;
+ size_t rr_len = 0;
+
+ if (dnsrec == NULL || !ares_dns_section_isvalid(sect)) {
+ return NULL;
+ }
+
+ switch (sect) {
+ case ARES_SECTION_ANSWER:
+ rr_ptr = dnsrec->an;
+ rr_len = dnsrec->ancount;
+ break;
+ case ARES_SECTION_AUTHORITY:
+ rr_ptr = dnsrec->ns;
+ rr_len = dnsrec->nscount;
+ break;
+ case ARES_SECTION_ADDITIONAL:
+ rr_ptr = dnsrec->ar;
+ rr_len = dnsrec->arcount;
+ break;
+ }
+
+ if (idx >= rr_len) {
+ return NULL;
+ }
+
+ return &rr_ptr[idx];
+}
+
+const char *ares_dns_rr_get_name(const ares_dns_rr_t *rr)
+{
+ if (rr == NULL) {
+ return NULL;
+ }
+ return rr->name;
+}
+
+ares_dns_rec_type_t ares_dns_rr_get_type(const ares_dns_rr_t *rr)
+{
+ if (rr == NULL) {
+ return 0;
+ }
+ return rr->type;
+}
+
+ares_dns_class_t ares_dns_rr_get_class(const ares_dns_rr_t *rr)
+{
+ if (rr == NULL) {
+ return 0;
+ }
+ return rr->rclass;
+}
+
+unsigned int ares_dns_rr_get_ttl(const ares_dns_rr_t *rr)
+{
+ if (rr == NULL) {
+ return 0;
+ }
+ return rr->ttl;
+}
+
+static void *ares_dns_rr_data_ptr(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key,
+ size_t **lenptr)
+{
+ if (dns_rr == NULL || dns_rr->type != ares_dns_rr_key_to_rec_type(key)) {
+ return NULL;
+ }
+
+ switch (key) {
+ case ARES_RR_A_ADDR:
+ return &dns_rr->r.a.addr;
+
+ case ARES_RR_NS_NSDNAME:
+ return &dns_rr->r.ns.nsdname;
+
+ case ARES_RR_CNAME_CNAME:
+ return &dns_rr->r.cname.cname;
+
+ case ARES_RR_SOA_MNAME:
+ return &dns_rr->r.soa.mname;
+
+ case ARES_RR_SOA_RNAME:
+ return &dns_rr->r.soa.rname;
+
+ case ARES_RR_SOA_SERIAL:
+ return &dns_rr->r.soa.serial;
+
+ case ARES_RR_SOA_REFRESH:
+ return &dns_rr->r.soa.refresh;
+
+ case ARES_RR_SOA_RETRY:
+ return &dns_rr->r.soa.retry;
+
+ case ARES_RR_SOA_EXPIRE:
+ return &dns_rr->r.soa.expire;
+
+ case ARES_RR_SOA_MINIMUM:
+ return &dns_rr->r.soa.minimum;
+
+ case ARES_RR_PTR_DNAME:
+ return &dns_rr->r.ptr.dname;
+
+ case ARES_RR_AAAA_ADDR:
+ return &dns_rr->r.aaaa.addr;
+
+ case ARES_RR_HINFO_CPU:
+ return &dns_rr->r.hinfo.cpu;
+
+ case ARES_RR_HINFO_OS:
+ return &dns_rr->r.hinfo.os;
+
+ case ARES_RR_MX_PREFERENCE:
+ return &dns_rr->r.mx.preference;
+
+ case ARES_RR_MX_EXCHANGE:
+ return &dns_rr->r.mx.exchange;
+
+ case ARES_RR_TXT_DATA:
+ if (lenptr == NULL) {
+ return NULL;
+ }
+ *lenptr = &dns_rr->r.txt.data_len;
+ return &dns_rr->r.txt.data;
+
+ case ARES_RR_SRV_PRIORITY:
+ return &dns_rr->r.srv.priority;
+
+ case ARES_RR_SRV_WEIGHT:
+ return &dns_rr->r.srv.weight;
+
+ case ARES_RR_SRV_PORT:
+ return &dns_rr->r.srv.port;
+
+ case ARES_RR_SRV_TARGET:
+ return &dns_rr->r.srv.target;
+
+ case ARES_RR_NAPTR_ORDER:
+ return &dns_rr->r.naptr.order;
+
+ case ARES_RR_NAPTR_PREFERENCE:
+ return &dns_rr->r.naptr.preference;
+
+ case ARES_RR_NAPTR_FLAGS:
+ return &dns_rr->r.naptr.flags;
+
+ case ARES_RR_NAPTR_SERVICES:
+ return &dns_rr->r.naptr.services;
+
+ case ARES_RR_NAPTR_REGEXP:
+ return &dns_rr->r.naptr.regexp;
+
+ case ARES_RR_NAPTR_REPLACEMENT:
+ return &dns_rr->r.naptr.replacement;
+
+ case ARES_RR_OPT_UDP_SIZE:
+ return &dns_rr->r.opt.udp_size;
+
+ case ARES_RR_OPT_EXT_RCODE:
+ return &dns_rr->r.opt.ext_rcode;
+
+ case ARES_RR_OPT_VERSION:
+ return &dns_rr->r.opt.version;
+
+ case ARES_RR_OPT_FLAGS:
+ return &dns_rr->r.opt.flags;
+
+ case ARES_RR_URI_PRIORITY:
+ return &dns_rr->r.uri.priority;
+
+ case ARES_RR_URI_WEIGHT:
+ return &dns_rr->r.uri.weight;
+
+ case ARES_RR_URI_TARGET:
+ return &dns_rr->r.uri.target;
+
+ case ARES_RR_CAA_CRITICAL:
+ return &dns_rr->r.caa.critical;
+
+ case ARES_RR_CAA_TAG:
+ return &dns_rr->r.caa.tag;
+
+ case ARES_RR_CAA_VALUE:
+ if (lenptr == NULL) {
+ return NULL;
+ }
+ *lenptr = &dns_rr->r.caa.value_len;
+ return &dns_rr->r.caa.value;
+
+ case ARES_RR_RAW_RR_TYPE:
+ return &dns_rr->r.raw_rr.type;
+
+ case ARES_RR_RAW_RR_DATA:
+ if (lenptr == NULL) {
+ return NULL;
+ }
+ *lenptr = &dns_rr->r.raw_rr.length;
+ return &dns_rr->r.raw_rr.data;
+ }
+
+ return NULL;
+}
+
+static const void *ares_dns_rr_data_ptr_const(const ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key,
+ const size_t **lenptr)
+{
+ /* We're going to cast off the const */
+ return ares_dns_rr_data_ptr((void *)((size_t)dns_rr), key,
+ (void *)((size_t)lenptr));
+}
+
+const struct in_addr *ares_dns_rr_get_addr(const ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key)
+{
+ const struct in_addr *addr;
+
+ if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_INADDR) {
+ return NULL;
+ }
+
+ addr = ares_dns_rr_data_ptr_const(dns_rr, key, NULL);
+ if (addr == NULL) {
+ return NULL;
+ }
+
+ return addr;
+}
+
+const struct ares_in6_addr *ares_dns_rr_get_addr6(const ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key)
+{
+ const struct ares_in6_addr *addr;
+
+ if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_INADDR6) {
+ return NULL;
+ }
+
+ addr = ares_dns_rr_data_ptr_const(dns_rr, key, NULL);
+ if (addr == NULL) {
+ return NULL;
+ }
+
+ return addr;
+}
+
+unsigned char ares_dns_rr_get_u8(const ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key)
+{
+ const unsigned char *u8;
+
+ if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_U8) {
+ return 0;
+ }
+
+ u8 = ares_dns_rr_data_ptr_const(dns_rr, key, NULL);
+ if (u8 == NULL) {
+ return 0;
+ }
+
+ return *u8;
+}
+
+unsigned short ares_dns_rr_get_u16(const ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key)
+{
+ const unsigned short *u16;
+
+ if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_U16) {
+ return 0;
+ }
+
+ u16 = ares_dns_rr_data_ptr_const(dns_rr, key, NULL);
+ if (u16 == NULL) {
+ return 0;
+ }
+
+ return *u16;
+}
+
+unsigned int ares_dns_rr_get_u32(const ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key)
+{
+ const unsigned int *u32;
+
+ if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_U32) {
+ return 0;
+ }
+
+ u32 = ares_dns_rr_data_ptr_const(dns_rr, key, NULL);
+ if (u32 == NULL) {
+ return 0;
+ }
+
+ return *u32;
+}
+
+const unsigned char *ares_dns_rr_get_bin(const ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key, size_t *len)
+{
+ unsigned char * const *bin = NULL;
+ size_t const *bin_len = NULL;
+
+ if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_BIN || len == NULL) {
+ return NULL;
+ }
+
+ bin = ares_dns_rr_data_ptr_const(dns_rr, key, &bin_len);
+ if (bin == NULL) {
+ return 0;
+ }
+
+ /* Shouldn't be possible */
+ if (bin_len == NULL) {
+ return NULL;
+ }
+
+ *len = *bin_len;
+
+ return *bin;
+}
+
+const char *ares_dns_rr_get_str(const ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key)
+{
+ char * const *str;
+
+ if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_STR) {
+ return NULL;
+ }
+
+ str = ares_dns_rr_data_ptr_const(dns_rr, key, NULL);
+ if (str == NULL) {
+ return NULL;
+ }
+
+ return *str;
+}
+
+ares_status_t ares_dns_rr_set_addr(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key,
+ const struct in_addr *addr)
+{
+ struct in_addr *a;
+
+ if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_INADDR || addr == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ a = ares_dns_rr_data_ptr(dns_rr, key, NULL);
+ if (a == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ memcpy(a, addr, sizeof(*a));
+ return ARES_SUCCESS;
+}
+
+ares_status_t ares_dns_rr_set_addr6(ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key,
+ const struct ares_in6_addr *addr)
+{
+ struct ares_in6_addr *a;
+
+ if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_INADDR6 || addr == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ a = ares_dns_rr_data_ptr(dns_rr, key, NULL);
+ if (a == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ memcpy(a, addr, sizeof(*a));
+ return ARES_SUCCESS;
+}
+
+ares_status_t ares_dns_rr_set_u8(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key,
+ unsigned char val)
+{
+ unsigned char *u8;
+
+ if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_U8) {
+ return ARES_EFORMERR;
+ }
+
+ u8 = ares_dns_rr_data_ptr(dns_rr, key, NULL);
+ if (u8 == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ *u8 = val;
+ return ARES_SUCCESS;
+}
+
+ares_status_t ares_dns_rr_set_u16(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key,
+ unsigned short val)
+{
+ unsigned short *u16;
+
+ if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_U16) {
+ return ARES_EFORMERR;
+ }
+
+ u16 = ares_dns_rr_data_ptr(dns_rr, key, NULL);
+ if (u16 == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ *u16 = val;
+ return ARES_SUCCESS;
+}
+
+ares_status_t ares_dns_rr_set_u32(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key,
+ unsigned int val)
+{
+ unsigned int *u32;
+
+ if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_U32) {
+ return ARES_EFORMERR;
+ }
+
+ u32 = ares_dns_rr_data_ptr(dns_rr, key, NULL);
+ if (u32 == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ *u32 = val;
+ return ARES_SUCCESS;
+}
+
+ares_status_t ares_dns_rr_set_bin_own(ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key, unsigned char *val,
+ size_t len)
+{
+ unsigned char **bin;
+ size_t *bin_len = NULL;
+
+ if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_BIN) {
+ return ARES_EFORMERR;
+ }
+
+ bin = ares_dns_rr_data_ptr(dns_rr, key, &bin_len);
+ if (bin == NULL || bin_len == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ if (*bin) {
+ ares_free(*bin);
+ }
+ *bin = val;
+ *bin_len = len;
+
+ return ARES_SUCCESS;
+}
+
+ares_status_t ares_dns_rr_set_bin(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key,
+ const unsigned char *val, size_t len)
+{
+ ares_status_t status;
+ unsigned char *temp = ares_malloc(len);
+
+ if (temp == NULL) {
+ return ARES_ENOMEM;
+ }
+
+ memcpy(temp, val, len);
+
+ status = ares_dns_rr_set_bin_own(dns_rr, key, temp, len);
+ if (status != ARES_SUCCESS) {
+ ares_free(temp);
+ }
+
+ return status;
+}
+
+ares_status_t ares_dns_rr_set_str_own(ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key, char *val)
+{
+ char **str;
+
+ if (ares_dns_rr_key_datatype(key) != ARES_DATATYPE_STR) {
+ return ARES_EFORMERR;
+ }
+
+ str = ares_dns_rr_data_ptr(dns_rr, key, NULL);
+ if (str == NULL) {
+ return ARES_EFORMERR;
+ }
+
+ if (*str) {
+ ares_free(*str);
+ }
+ *str = val;
+
+ return ARES_SUCCESS;
+}
+
+ares_status_t ares_dns_rr_set_str(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key,
+ const char *val)
+{
+ ares_status_t status;
+ char *temp = NULL;
+
+ if (val != NULL) {
+ temp = ares_strdup(val);
+ if (temp == NULL) {
+ return ARES_ENOMEM;
+ }
+ }
+
+ status = ares_dns_rr_set_str_own(dns_rr, key, temp);
+ if (status != ARES_SUCCESS) {
+ ares_free(temp);
+ }
+
+ return status;
+}
diff --git a/src/lib/ares_dns_record.h b/src/lib/ares_dns_record.h
new file mode 100644
index 0000000..608e490
--- /dev/null
+++ b/src/lib/ares_dns_record.h
@@ -0,0 +1,798 @@
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#ifndef __ARES_DNS_RECORD_H
+#define __ARES_DNS_RECORD_H
+
+/* ----- LIKELY MAKE THESE PUBLIC ----- */
+
+/*! \addtogroup ares_dns_record DNS Record Handling
+ *
+ * This is a set of functions to create and manipulate DNS records.
+ *
+ * @{
+ */
+
+/*! DNS Record types handled by c-ares. Some record types may only be valid
+ * on requests (e.g. ARES_REC_TYPE_ANY), and some may only be valid on
+ * responses */
+typedef enum {
+ ARES_REC_TYPE_A = 1, /*!< Host address. */
+ ARES_REC_TYPE_NS = 2, /*!< Authoritative server. */
+ ARES_REC_TYPE_CNAME = 5, /*!< Canonical name. */
+ ARES_REC_TYPE_SOA = 6, /*!< Start of authority zone. */
+ ARES_REC_TYPE_PTR = 12, /*!< Domain name pointer. */
+ ARES_REC_TYPE_HINFO = 13, /*!< Host information. */
+ ARES_REC_TYPE_MX = 15, /*!< Mail routing information. */
+ ARES_REC_TYPE_TXT = 16, /*!< Text strings. */
+ ARES_REC_TYPE_AAAA = 28, /*!< RFC 3596. Ip6 Address. */
+ ARES_REC_TYPE_SRV = 33, /*!< RFC 2782. Server Selection. */
+ ARES_REC_TYPE_NAPTR = 35, /*!< RFC 3403. Naming Authority Pointer */
+ ARES_REC_TYPE_OPT = 41, /*!< RFC 6891. EDNS0 option (meta-RR) */
+#if 0
+ ARES_REC_TYPE_TLSA = 52, /*!< DNS-Based Authentication of Named
+ * Entities (DANE) Transport Layer Security
+ * (TLS) Protocol: TLSA */
+ ARES_REC_TYPE_SVBC = 64, /*!< General Purpose Service Binding */
+ ARES_REC_TYPE_HTTPS = 65, /*!< Service Binding type for use with HTTP */
+#endif
+ ARES_REC_TYPE_ANY = 255, /*!< Wildcard match. Not response RR. */
+ ARES_REC_TYPE_URI = 256, /*!< RFC 7553. Uniform Resource Identifier */
+ ARES_REC_TYPE_CAA = 257, /*!< RFC 6844. Certification Authority
+ * Authorization. */
+ ARES_REC_TYPE_RAW_RR = 65536 /*!< Used as an indicator that the RR record
+ * is not parsed, but provided in wire
+ * format */
+} ares_dns_rec_type_t;
+
+/*! DNS Classes for requests and responses. */
+typedef enum {
+ ARES_CLASS_IN = 1, /*!< Internet */
+ ARES_CLASS_CHAOS = 3, /*!< CHAOS */
+ ARES_CLASS_HESOID = 4, /*!< Hesoid [Dyer 87] */
+ ARES_CLASS_NONE = 254, /*!< RFC 2136 */
+ ARES_CLASS_ANY = 255 /*!< Any class (requests only) */
+} ares_dns_class_t;
+
+/*! DNS RR Section type */
+typedef enum {
+ ARES_SECTION_ANSWER = 1, /*!< Answer section */
+ ARES_SECTION_AUTHORITY = 2, /*!< Authority section */
+ ARES_SECTION_ADDITIONAL = 3 /*!< Additional information section */
+} ares_dns_section_t;
+
+/*! DNS Header opcodes */
+typedef enum {
+ ARES_OPCODE_QUERY = 0, /*!< Standard query */
+ ARES_OPCODE_IQUERY = 1, /*!< Inverse query. Obsolete. */
+ ARES_OPCODE_STATUS = 2, /*!< Name server status query */
+ ARES_OPCODE_NOTIFY = 4, /*!< Zone change notification (RFC 1996) */
+ ARES_OPCODE_UPDATE = 5, /*!< Zone update message (RFC2136) */
+} ares_dns_opcode_t;
+
+/*! DNS Header flags */
+typedef enum {
+ ARES_FLAG_QR = 1 << 0, /*!< QR. If set, is a response */
+ ARES_FLAG_AA = 1 << 1, /*!< Authoritative Answer. If set, is authoritative */
+ ARES_FLAG_TC = 1 << 2, /*!< Truncation. If set, is truncated response */
+ ARES_FLAG_RD = 1 << 3, /*!< Recursion Desired. If set, recursion is desired */
+ ARES_FLAG_RA = 1 << 4, /*!< Recursion Available. If set, server supports
+ * recursion */
+ ARES_FLAG_AD = 1 << 5, /*!< RFC 2065. Authentic Data bit indicates in a
+ * response that the data included has been verified by
+ * the server providing it */
+ ARES_FLAG_CD = 1 << 6, /*!< RFC 2065. Checking Disabled bit indicates in a
+ * query that non-verified data is acceptable to the
+ * resolver sending the query. */
+} ares_dns_flags_t;
+
+/*! DNS Response Codes from server */
+typedef enum {
+ ARES_RCODE_NOERROR = 0, /*!< Success */
+ ARES_RCODE_FORMAT_ERROR = 1, /*!< Format error. The name server was unable
+ * to interpret the query. */
+ ARES_RCODE_SERVER_FAILURE = 2, /*!< Server Failure. The name server was
+ * unable to process this query due to a
+ * problem with the nameserver */
+ ARES_RCODE_NAME_ERROR = 3, /*!< Name Error. Meaningful only for
+ * responses from an authoritative name
+ * server, this code signifies that the
+ * domain name referenced in the query does
+ * not exist. */
+ ARES_RCODE_NOT_IMPLEMENTED = 4, /*!< Not implemented. The name server does
+ * not support the requested kind of
+ * query */
+ ARES_RCODE_REFUSED = 5, /*!< Refused. The name server refuses to
+ * perform the speciied operation for
+ * policy reasons. */
+ ARES_RCODE_YXDOMAIN = 6, /*!< RFC 2136. Some name that ought not to
+ * exist, does exist. */
+ ARES_RCODE_YXRRSET = 7, /*!< RFC 2136. Some RRset that ought to not
+ * exist, does exist. */
+ ARES_RCODE_NXRRSET = 8, /*!< RFC 2136. Some RRset that ought to exist,
+ * does not exist. */
+ ARES_RCODE_NOTAUTH = 9, /*!< RFC 2136. The server is not authoritative
+ * for the zone named in the Zone section.
+ */
+ ARES_RCODE_NOTZONE = 10, /*!< RFC 2136. A name used in the Prerequisite
+ * or Update Section is not within the zone
+ * denoted by the Zone Section. */
+} ares_dns_rcode_t;
+
+/*! Data types used */
+typedef enum {
+ ARES_DATATYPE_INADDR = 1, /*!< struct in_addr * type */
+ ARES_DATATYPE_INADDR6 = 2, /*!< struct ares_in6_addr * type */
+ ARES_DATATYPE_U8 = 3, /*!< 8bit unsigned integer */
+ ARES_DATATYPE_U16 = 4, /*!< 16bit unsigned integer */
+ ARES_DATATYPE_U32 = 5, /*!< 32bit unsigned integer */
+ ARES_DATATYPE_STR = 6, /*!< Null-terminated string */
+ ARES_DATATYPE_BIN = 7 /*!< Binary data */
+} ares_dns_datatype_t;
+
+/*! Keys used for all RR Types. We take the record type and multiply by 100
+ * to ensure we have a proper offset between keys so we can keep these sorted
+ */
+typedef enum {
+ /*! A Record. Address. Datatype: INADDR */
+ ARES_RR_A_ADDR = (ARES_REC_TYPE_A * 100) + 1,
+ /*! NS Record. Name. Datatype: String */
+ ARES_RR_NS_NSDNAME = (ARES_REC_TYPE_NS * 100) + 1,
+ /*! CNAME Record. CName. Datatype: String */
+ ARES_RR_CNAME_CNAME = (ARES_REC_TYPE_CNAME * 100) + 1,
+ /*! SOA Record. MNAME, Primary Source of Data. Datatype: String */
+ ARES_RR_SOA_MNAME = (ARES_REC_TYPE_SOA * 100) + 1,
+ /*! SOA Record. RNAME, Mailbox of person responsible. Datatype: String */
+ ARES_RR_SOA_RNAME = (ARES_REC_TYPE_SOA * 100) + 2,
+ /*! SOA Record. Serial, version. Datatype: u32 */
+ ARES_RR_SOA_SERIAL = (ARES_REC_TYPE_SOA * 100) + 3,
+ /*! SOA Record. Refresh, zone refersh interval. Datatype: u32 */
+ ARES_RR_SOA_REFRESH = (ARES_REC_TYPE_SOA * 100) + 4,
+ /*! SOA Record. Retry, failed refresh retry interval. Datatype: u32 */
+ ARES_RR_SOA_RETRY = (ARES_REC_TYPE_SOA * 100) + 5,
+ /*! SOA Record. Expire, upper limit on authority. Datatype: u32 */
+ ARES_RR_SOA_EXPIRE = (ARES_REC_TYPE_SOA * 100) + 6,
+ /*! SOA Record. Minimum, RR TTL. Datatype: u32 */
+ ARES_RR_SOA_MINIMUM = (ARES_REC_TYPE_SOA * 100) + 7,
+ /*! PTR Record. DNAME, pointer domain. Datatype: string */
+ ARES_RR_PTR_DNAME = (ARES_REC_TYPE_PTR * 100) + 1,
+ /*! HINFO Record. CPU. Datatype: string */
+ ARES_RR_HINFO_CPU = (ARES_REC_TYPE_HINFO * 100) + 1,
+ /*! HINFO Record. OS. Datatype: string */
+ ARES_RR_HINFO_OS = (ARES_REC_TYPE_HINFO * 100) + 2,
+ /*! MX Record. Preference. Datatype: u16 */
+ ARES_RR_MX_PREFERENCE = (ARES_REC_TYPE_MX * 100) + 1,
+ /*! MX Record. Exchange, domain. Datatype: string */
+ ARES_RR_MX_EXCHANGE = (ARES_REC_TYPE_MX * 100) + 2,
+ /*! TXT Record. Data. Datatype: binary */
+ ARES_RR_TXT_DATA = (ARES_REC_TYPE_TXT * 100) + 1,
+ /*! AAAA Record. Address. Datatype: INADDR6 */
+ ARES_RR_AAAA_ADDR = (ARES_REC_TYPE_AAAA * 100) + 1,
+ /*! SRV Record. Priority. Datatype: u16 */
+ ARES_RR_SRV_PRIORITY = (ARES_REC_TYPE_SRV * 100) + 2,
+ /*! SRV Record. Weight. Datatype: u16 */
+ ARES_RR_SRV_WEIGHT = (ARES_REC_TYPE_SRV * 100) + 3,
+ /*! SRV Record. Port. Datatype: u16 */
+ ARES_RR_SRV_PORT = (ARES_REC_TYPE_SRV * 100) + 4,
+ /*! SRV Record. Target domain. Datatype: string */
+ ARES_RR_SRV_TARGET = (ARES_REC_TYPE_SRV * 100) + 5,
+ /*! NAPTR Record. Order. Datatype: u16 */
+ ARES_RR_NAPTR_ORDER = (ARES_REC_TYPE_NAPTR * 100) + 1,
+ /*! NAPTR Record. Preference. Datatype: u16 */
+ ARES_RR_NAPTR_PREFERENCE = (ARES_REC_TYPE_NAPTR * 100) + 2,
+ /*! NAPTR Record. Flags. Datatype: string */
+ ARES_RR_NAPTR_FLAGS = (ARES_REC_TYPE_NAPTR * 100) + 3,
+ /*! NAPTR Record. Services. Datatype: string */
+ ARES_RR_NAPTR_SERVICES = (ARES_REC_TYPE_NAPTR * 100) + 4,
+ /*! NAPTR Record. Regexp. Datatype: string */
+ ARES_RR_NAPTR_REGEXP = (ARES_REC_TYPE_NAPTR * 100) + 5,
+ /*! NAPTR Record. Replacement. Datatype: string */
+ ARES_RR_NAPTR_REPLACEMENT = (ARES_REC_TYPE_NAPTR * 100) + 6,
+ /*! OPT Record. UDP Size. Datatype: u16 */
+ ARES_RR_OPT_UDP_SIZE = (ARES_REC_TYPE_OPT * 100) + 1,
+ /*! OPT Record. Extended RCode. Datatype: u8 */
+ ARES_RR_OPT_EXT_RCODE = (ARES_REC_TYPE_OPT * 100) + 2,
+ /*! OPT Record. Version. Datatype: u8 */
+ ARES_RR_OPT_VERSION = (ARES_REC_TYPE_OPT * 100) + 3,
+ /*! OPT Record. Flags. Datatype: u16 */
+ ARES_RR_OPT_FLAGS = (ARES_REC_TYPE_OPT * 100) + 4,
+ /*! URI Record. Priority. Datatype: u16 */
+ ARES_RR_URI_PRIORITY = (ARES_REC_TYPE_URI * 100) + 1,
+ /*! URI Record. Weight. Datatype: u16 */
+ ARES_RR_URI_WEIGHT = (ARES_REC_TYPE_URI * 100) + 2,
+ /*! URI Record. Target domain. Datatype: string */
+ ARES_RR_URI_TARGET = (ARES_REC_TYPE_URI * 100) + 3,
+ /*! CAA Record. Critical flag. Datatype: u8 */
+ ARES_RR_CAA_CRITICAL = (ARES_REC_TYPE_CAA * 100) + 1,
+ /*! CAA Record. Tag/Property. Datatype: string */
+ ARES_RR_CAA_TAG = (ARES_REC_TYPE_CAA * 100) + 2,
+ /*! CAA Record. Value. Datatype: binary */
+ ARES_RR_CAA_VALUE = (ARES_REC_TYPE_CAA * 100) + 3,
+ /*! RAW Record. RR Type. Datatype: u16 */
+ ARES_RR_RAW_RR_TYPE = (ARES_REC_TYPE_RAW_RR * 100) + 1,
+ /*! RAW Record. RR Data. Datatype: binary */
+ ARES_RR_RAW_RR_DATA = (ARES_REC_TYPE_RAW_RR * 100) + 2,
+} ares_dns_rr_key_t;
+
+/*! String representation of DNS Record Type
+ *
+ * \param[in] type DNS Record Type
+ * \return string
+ */
+const char *ares_dns_rec_type_tostr(ares_dns_rec_type_t type);
+
+/*! String representation of DNS Class
+ *
+ * \param[in] qclass DNS Class
+ * \return string
+ */
+const char *ares_dns_class_tostr(ares_dns_class_t qclass);
+
+/*! String representation of DNS OpCode
+ *
+ * \param[in] opcode DNS OpCode
+ * \return string
+ */
+const char *ares_dns_opcode_tostr(ares_dns_opcode_t opcode);
+
+/*! String representation of DNS Resource Record Parameter
+ *
+ * \param[in] key DNS Resource Record parameter
+ * \return string
+ */
+const char *ares_dns_rr_key_tostr(ares_dns_rr_key_t key);
+
+
+/*! Opaque data type representing a DNS RR (Resource Record) */
+struct ares_dns_rr;
+
+/*! Typedef for opaque data type representing a DNS RR (Resource Record) */
+typedef struct ares_dns_rr ares_dns_rr_t;
+
+/*! Opaque data type representing a DNS Query Data QD Packet */
+struct ares_dns_qd;
+
+/*! Typedef for opaque data type representing a DNS Query Data QD Packet */
+typedef struct ares_dns_qd ares_dns_qd_t;
+
+/*! Opaque data type representing a DNS Packet */
+struct ares_dns_record;
+
+/*! Typedef for opaque data type representing a DNS Packet */
+typedef struct ares_dns_record ares_dns_record_t;
+
+
+/*! Create a new DNS record object
+ *
+ * \param[out] dnsrec Pointer passed by reference for a newly allocated
+ * record object. Must be ares_dns_record_destroy()'d by
+ * caller.
+ * \param[in] id DNS Query ID
+ * \param[in] flags DNS Flags from \ares_dns_flags_t
+ * \param[in] opcode DNS OpCode (typically ARES_OPCODE_QUERY)
+ * \param[in] rcode DNS RCode
+ * \return ARES_SUCCESS on success
+ */
+ares_status_t ares_dns_record_create(ares_dns_record_t **dnsrec,
+ unsigned short id, unsigned short flags,
+ ares_dns_opcode_t opcode,
+ ares_dns_rcode_t rcode);
+
+/*! Destroy a DNS record object
+ *
+ * \param[in] dnsrec Initialized record object
+ */
+void ares_dns_record_destroy(ares_dns_record_t *dnsrec);
+
+/*! Get the DNS Query ID
+ *
+ * \param[in] dnsrec Initialized record object
+ * \return DNS query id
+ */
+unsigned short ares_dns_record_get_id(const ares_dns_record_t *dnsrec);
+
+/*! Get the DNS Record Flags
+ *
+ * \param[in] dnsrec Initialized record object
+ * \return One or more \ares_dns_flags_t
+ */
+unsigned short ares_dns_record_get_flags(const ares_dns_record_t *dnsrec);
+
+/*! Get the DNS Record OpCode
+ *
+ * \param[in] dnsrec Initialized record object
+ * \return opcode
+ */
+ares_dns_opcode_t ares_dns_record_get_opcode(const ares_dns_record_t *dnsrec);
+
+/*! Get the DNS Record RCode
+ *
+ * \param[in] dnsrec Initialized record object
+ * \return rcode
+ */
+ares_dns_rcode_t ares_dns_record_get_rcode(const ares_dns_record_t *dnsrec);
+
+/*! Add a query to the DNS Record. Typically a record will have only 1
+ * query. Most DNS servers will reject queries with more than 1 question.
+ *
+ * \param[in] dnsrec Initialized record object
+ * \param[in] name Name/Hostname of request
+ * \param[in] qtype Type of query
+ * \param[in] qclass Class of query (typically ARES_CLASS_IN)
+ * \return ARES_SUCCESS on success
+ */
+ares_status_t ares_dns_record_query_add(ares_dns_record_t *dnsrec,
+ const char *name,
+ ares_dns_rec_type_t qtype,
+ ares_dns_class_t qclass);
+
+/*! Get the count of queries in the DNS Record
+ *
+ * \param[in] dnsrec Initialized record object
+ * \return count of queries
+ */
+size_t ares_dns_record_query_cnt(const ares_dns_record_t *dnsrec);
+
+/*! Get the data about the query at the provided index.
+ *
+ * \param[in] dnsrec Initialized record object
+ * \param[in] idx Index of query
+ * \param[out] name Optional. Returns name, may pass NULL if not desired.
+ * \param[out] qtype Optional. Returns record type, may pass NULL.
+ * \param[out] qclass Optional. Returns class, may pass NULL.
+ * \return ARES_SUCCESS on success
+ */
+ares_status_t ares_dns_record_query_get(const ares_dns_record_t *dnsrec,
+ size_t idx, const char **name,
+ ares_dns_rec_type_t *qtype,
+ ares_dns_class_t *qclass);
+
+/*! Get the count of Resource Records in the provided section
+ *
+ * \param[in] dnsrec Initialized record object
+ * \param[in] sect Section. ARES_SECTION_ANSWER is most used.
+ * \return count of resource records.
+ */
+size_t ares_dns_record_rr_cnt(const ares_dns_record_t *dnsrec,
+ ares_dns_section_t sect);
+
+
+/*! Add a Resource Record to the DNS Record.
+ *
+ * \param[out] rr_out Pointer to created resource record. This pointer
+ * is owned by the DNS record itself, this is just made
+ * available to facilitate adding RR-specific fields.
+ * \param[in] dnsrec Initialized record object
+ * \param[in] sect Section to add resource record to
+ * \param[in] name Resource Record name/hostname
+ * \param[in] type Record Type
+ * \param[in] rclass Class
+ * \param[in] ttl TTL
+ * \return ARES_SUCCESS on success
+ */
+ares_status_t ares_dns_record_rr_add(ares_dns_rr_t **rr_out,
+ ares_dns_record_t *dnsrec,
+ ares_dns_section_t sect, const char *name,
+ ares_dns_rec_type_t type,
+ ares_dns_class_t rclass, unsigned int ttl);
+
+/*! Fetch a resource record based on the section and index.
+ *
+ * \param[in] dnsrec Initialized record object
+ * \param[in] sect Section for resource record
+ * \param[in] idx Index of resource record in section
+ * \param NULL on misuse, otherwise a pointer to the resource record
+ */
+ares_dns_rr_t *ares_dns_record_rr_get(ares_dns_record_t *dnsrec,
+ ares_dns_section_t sect, size_t idx);
+
+
+/*! Retrieve a list of Resource Record keys that can be set or retrieved for
+ * the Resource record type.
+ *
+ * \param[in] type Record Type
+ * \param[out] cnt Number of keys returned
+ * \return array of keys associated with Resource Record
+ */
+const ares_dns_rr_key_t *ares_dns_rr_get_keys(ares_dns_rec_type_t type,
+ size_t *cnt);
+
+/*! Retrieve the datatype associated with a Resource Record key.
+ *
+ * \param[in] key Resource Record Key
+ * \return datatype
+ */
+ares_dns_datatype_t ares_dns_rr_key_datatype(ares_dns_rr_key_t key);
+
+/*! Retrieve the DNS Resource Record type associated with a Resource Record key.
+ *
+ * \param[in] key Resource Record Key
+ * \return DNS Resource Record Type
+ */
+ares_dns_rec_type_t ares_dns_rr_key_to_rec_type(ares_dns_rr_key_t key);
+
+/*! Retrieve the resource record Name/Hostname
+ *
+ * \param[in] rr Pointer to resource record
+ * \return Name
+ */
+const char *ares_dns_rr_get_name(const ares_dns_rr_t *rr);
+
+/*! Retrieve the resource record type
+ *
+ * \param[in] rr Pointer to resource record
+ * \return type
+ */
+ares_dns_rec_type_t ares_dns_rr_get_type(const ares_dns_rr_t *rr);
+
+/*! Retrieve the resource record class
+ *
+ * \param[in] rr Pointer to resource record
+ * \return class
+ */
+ares_dns_class_t ares_dns_rr_get_class(const ares_dns_rr_t *rr);
+
+/*! Retrieve the resource record TTL
+ *
+ * \param[in] rr Pointer to resource record
+ * \return TTL
+ */
+unsigned int ares_dns_rr_get_ttl(const ares_dns_rr_t *rr);
+
+/*! Set ipv4 address data type for specified resource record and key. Can
+ * only be used on keys with datatype ARES_DATATYPE_INADDR
+ *
+ * \param[in] dns_rr Pointer to resource record
+ * \param[in] key DNS Resource Record Key
+ * \param[in] addr Pointer to ipv4 address to use.
+ * \return ARES_SUCCESS on success
+ */
+ares_status_t ares_dns_rr_set_addr(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key,
+ const struct in_addr *addr);
+
+/*! Set ipv6 address data type for specified resource record and key. Can
+ * only be used on keys with datatype ARES_DATATYPE_INADDR6
+ *
+ * \param[in] dns_rr Pointer to resource record
+ * \param[in] key DNS Resource Record Key
+ * \param[in] addr Pointer to ipv6 address to use.
+ * \return ARES_SUCCESS on success
+ */
+ares_status_t ares_dns_rr_set_addr6(ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key,
+ const struct ares_in6_addr *addr);
+
+/*! Set string data for specified resource record and key. Can
+ * only be used on keys with datatype ARES_DATATYPE_STR
+ *
+ * \param[in] dns_rr Pointer to resource record
+ * \param[in] key DNS Resource Record Key
+ * \param[in] val Pointer to string to set.
+ * \return ARES_SUCCESS on success
+ */
+ares_status_t ares_dns_rr_set_str(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key,
+ const char *val);
+
+/*! Set 8bit unsigned integer for specified resource record and key. Can
+ * only be used on keys with datatype ARES_DATATYPE_U8
+ *
+ * \param[in] dns_rr Pointer to resource record
+ * \param[in] key DNS Resource Record Key
+ * \param[in] val 8bit unsigned integer
+ * \return ARES_SUCCESS on success
+ */
+ares_status_t ares_dns_rr_set_u8(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key,
+ unsigned char val);
+
+/*! Set 16bit unsigned integer for specified resource record and key. Can
+ * only be used on keys with datatype ARES_DATATYPE_U16
+ *
+ * \param[in] dns_rr Pointer to resource record
+ * \param[in] key DNS Resource Record Key
+ * \param[in] val 16bit unsigned integer
+ * \return ARES_SUCCESS on success
+ */
+ares_status_t ares_dns_rr_set_u16(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key,
+ unsigned short val);
+
+/*! Set 32bit unsigned integer for specified resource record and key. Can
+ * only be used on keys with datatype ARES_DATATYPE_U32
+ *
+ * \param[in] dns_rr Pointer to resource record
+ * \param[in] key DNS Resource Record Key
+ * \param[in] val 32bit unsigned integer
+ * \return ARES_SUCCESS on success
+ */
+ares_status_t ares_dns_rr_set_u32(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key,
+ unsigned int val);
+
+/*! Set binary data for specified resource record and key. Can
+ * only be used on keys with datatype ARES_DATATYPE_BIN
+ *
+ * \param[in] dns_rr Pointer to resource record
+ * \param[in] key DNS Resource Record Key
+ * \param[in] val Pointer to binary data.
+ * \param[in] len Length of binary data
+ * \return ARES_SUCCESS on success
+ */
+ares_status_t ares_dns_rr_set_bin(ares_dns_rr_t *dns_rr, ares_dns_rr_key_t key,
+ const unsigned char *val, size_t len);
+
+
+/*! Retrieve a pointer to the ipv4 address. Can only be used on keys with
+ * datatype ARES_DATATYPE_INADDR.
+ *
+ * \param[in] dns_rr Pointer to resource record
+ * \param[in] key DNS Resource Record Key
+ * \return pointer to ipv4 address or NULL on error
+ */
+const struct in_addr *ares_dns_rr_get_addr(const ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key);
+
+/*! Retrieve a pointer to the ipv6 address. Can only be used on keys with
+ * datatype ARES_DATATYPE_INADDR6.
+ *
+ * \param[in] dns_rr Pointer to resource record
+ * \param[in] key DNS Resource Record Key
+ * \return pointer to ipv6 address or NULL on error
+ */
+const struct ares_in6_addr *ares_dns_rr_get_addr6(const ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key);
+
+/*! Retrieve a pointer to the string. Can only be used on keys with
+ * datatype ARES_DATATYPE_STR.
+ *
+ * \param[in] dns_rr Pointer to resource record
+ * \param[in] key DNS Resource Record Key
+ * \return pointer string or NULL on error
+ */
+const char *ares_dns_rr_get_str(const ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key);
+
+/*! Retrieve an 8bit unsigned integer. Can only be used on keys with
+ * datatype ARES_DATATYPE_U8.
+ *
+ * \param[in] dns_rr Pointer to resource record
+ * \param[in] key DNS Resource Record Key
+ * \return 8bit unsigned integer
+ */
+unsigned char ares_dns_rr_get_u8(const ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key);
+
+/*! Retrieve an 16bit unsigned integer. Can only be used on keys with
+ * datatype ARES_DATATYPE_U16.
+ *
+ * \param[in] dns_rr Pointer to resource record
+ * \param[in] key DNS Resource Record Key
+ * \return 16bit unsigned integer
+ */
+unsigned short ares_dns_rr_get_u16(const ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key);
+
+/*! Retrieve an 32bit unsigned integer. Can only be used on keys with
+ * datatype ARES_DATATYPE_U32.
+ *
+ * \param[in] dns_rr Pointer to resource record
+ * \param[in] key DNS Resource Record Key
+ * \return 32bit unsigned integer
+ */
+unsigned int ares_dns_rr_get_u32(const ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key);
+
+/*! Retrieve a pointer to the binary data. Can only be used on keys with
+ * datatype ARES_DATATYPE_BIN.
+ *
+ * \param[in] dns_rr Pointer to resource record
+ * \param[in] key DNS Resource Record Key
+ * \param[out] len Length of binary data returned
+ * \return pointer binary data or NULL on error
+ */
+const unsigned char *ares_dns_rr_get_bin(const ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key, size_t *len);
+
+
+/*! Parse a complete DNS message.
+ *
+ * \param[in] buf pointer to bytes to be parsed
+ * \param[in] buf_len Length of buf provided
+ * \param[in] flags Flags dictating how the message should be parsed. TBD.
+ * \param[out] dnsrec Pointer passed by reference for a new DNS record object
+ * that must be ares_dns_record_destroy()'d by caller.
+ * \return ARES_SUCCESS on success
+ */
+ares_status_t ares_dns_parse(const unsigned char *buf, size_t buf_len,
+ unsigned int flags, ares_dns_record_t **dnsrec);
+
+
+/*! @} */
+
+/* ---- PRIVATE BELOW ----- */
+ares_bool_t ares_dns_opcode_isvalid(ares_dns_opcode_t opcode);
+ares_bool_t ares_dns_rcode_isvalid(ares_dns_rcode_t rcode);
+ares_bool_t ares_dns_flags_arevalid(unsigned short flags);
+ares_bool_t ares_dns_rec_type_isvalid(ares_dns_rec_type_t type,
+ ares_bool_t is_query);
+ares_bool_t ares_dns_class_isvalid(ares_dns_class_t qclass,
+ ares_bool_t is_query);
+ares_bool_t ares_dns_section_isvalid(ares_dns_section_t sect);
+ares_status_t ares_dns_rr_set_str_own(ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key, char *val);
+ares_status_t ares_dns_rr_set_bin_own(ares_dns_rr_t *dns_rr,
+ ares_dns_rr_key_t key, unsigned char *val,
+ size_t len);
+ares_status_t ares_dns_record_rr_prealloc(ares_dns_record_t *dnsrec,
+ ares_dns_section_t sect, size_t cnt);
+
+struct ares_dns_qd {
+ char *name;
+ ares_dns_rec_type_t qtype;
+ ares_dns_class_t qclass;
+};
+
+typedef struct {
+ struct in_addr addr;
+} ares__dns_a_t;
+
+typedef struct {
+ char *nsdname;
+} ares__dns_ns_t;
+
+typedef struct {
+ char *cname;
+} ares__dns_cname_t;
+
+typedef struct {
+ char *mname;
+ char *rname;
+ unsigned int serial;
+ unsigned int refresh;
+ unsigned int retry;
+ unsigned int expire;
+ unsigned int minimum;
+} ares__dns_soa_t;
+
+typedef struct {
+ char *dname;
+} ares__dns_ptr_t;
+
+typedef struct {
+ char *cpu;
+ char *os;
+} ares__dns_hinfo_t;
+
+typedef struct {
+ unsigned short preference;
+ char *exchange;
+} ares__dns_mx_t;
+
+typedef struct {
+ char *data;
+ size_t data_len;
+} ares__dns_txt_t;
+
+typedef struct {
+ struct ares_in6_addr addr;
+} ares__dns_aaaa_t;
+
+typedef struct {
+ unsigned short priority;
+ unsigned short weight;
+ unsigned short port;
+ char *target;
+} ares__dns_srv_t;
+
+typedef struct {
+ unsigned short order;
+ unsigned short preference;
+ char *flags;
+ char *services;
+ char *regexp;
+ char *replacement;
+} ares__dns_naptr_t;
+
+typedef struct {
+ unsigned short udp_size; /*!< taken from class */
+ unsigned char ext_rcode; /*!< Taken from first 8 bits of ttl */
+ unsigned char version; /*!< taken from bits 8-16 of ttl */
+ unsigned short flags; /*!< Flags, remaining 16 bits, though only 1
+ * currently defined */
+ /* Remaining data can be multiple:
+ * 16bit attribute/code, 16bit length, data
+ * not currently supported */
+} ares__dns_opt_t;
+
+typedef struct {
+ unsigned short priority;
+ unsigned short weight;
+ char *target;
+} ares__dns_uri_t;
+
+typedef struct {
+ unsigned char critical;
+ char *tag;
+ unsigned char *value;
+ size_t value_len;
+} ares__dns_caa_t;
+
+/*! Raw, unparsed RR data */
+typedef struct {
+ unsigned short type; /*!< Not ares_rec_type_t because it likely isn't one
+ * of those values since it wasn't parsed */
+ unsigned char *data; /*!< Raw RR data */
+ size_t length; /*!< Length of raw RR data */
+} ares__dns_raw_rr_t;
+
+/*! DNS RR data structure */
+struct ares_dns_rr {
+ char *name;
+ ares_dns_rec_type_t type;
+ ares_dns_class_t rclass;
+ unsigned int ttl;
+
+ union {
+ ares__dns_a_t a;
+ ares__dns_ns_t ns;
+ ares__dns_cname_t cname;
+ ares__dns_soa_t soa;
+ ares__dns_ptr_t ptr;
+ ares__dns_hinfo_t hinfo;
+ ares__dns_mx_t mx;
+ ares__dns_txt_t txt;
+ ares__dns_aaaa_t aaaa;
+ ares__dns_srv_t srv;
+ ares__dns_naptr_t naptr;
+ ares__dns_opt_t opt;
+ ares__dns_uri_t uri;
+ ares__dns_caa_t caa;
+ ares__dns_raw_rr_t raw_rr;
+ } r;
+};
+
+/*! DNS data structure */
+struct ares_dns_record {
+ unsigned short id; /*!< DNS query id */
+ unsigned short flags; /*!< One or more ares_dns_flags_t */
+ ares_dns_opcode_t opcode; /*!< DNS Opcode */
+ ares_dns_rcode_t rcode; /*!< DNS RCODE */
+
+ ares_dns_qd_t *qd;
+ size_t qdcount;
+ size_t qdalloc;
+
+ ares_dns_rr_t *an;
+ size_t ancount;
+ size_t analloc;
+
+ ares_dns_rr_t *ns;
+ size_t nscount;
+ size_t nsalloc;
+
+ ares_dns_rr_t *ar;
+ size_t arcount;
+ size_t aralloc;
+};
+
+
+#endif /* __ARES_DNS_RECORD_H */
diff --git a/src/lib/ares_expand_name.c b/src/lib/ares_expand_name.c
index fcd88a2..d50aa6e 100644
--- a/src/lib/ares_expand_name.c
+++ b/src/lib/ares_expand_name.c
@@ -1,17 +1,28 @@
-
-/* Copyright 1998, 2011 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 1998, 2011 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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:
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -23,287 +34,85 @@
#include "ares_nameser.h"
#include "ares.h"
-#include "ares_nowarn.h"
#include "ares_private.h" /* for the memdebug */
-/* Maximum number of indirections allowed for a name */
-#define MAX_INDIRS 50
-
-static int name_length(const unsigned char *encoded, const unsigned char *abuf,
- int alen, int is_hostname);
-
-/* Reserved characters for names that need to be escaped */
-static int is_reservedch(int ch)
+ares_status_t ares__expand_name_validated(const unsigned char *encoded,
+ const unsigned char *abuf,
+ size_t alen, char **s, size_t *enclen,
+ ares_bool_t is_hostname)
{
- switch (ch) {
- case '"':
- case '.':
- case ';':
- case '\\':
- case '(':
- case ')':
- case '@':
- case '$':
- return 1;
- default:
- break;
- }
+ ares_status_t status;
+ ares__buf_t *buf = NULL;
+ size_t start_len;
- return 0;
-}
-
-static int ares__isprint(int ch)
-{
- if (ch >= 0x20 && ch <= 0x7E)
- return 1;
- return 0;
-}
-
-/* Character set allowed by hostnames. This is to include the normal
- * domain name character set plus:
- * - underscores which are used in SRV records.
- * - Forward slashes such as are used for classless in-addr.arpa
- * delegation (CNAMEs)
- * While RFC 2181 section 11 does state not to do validation,
- * that applies to servers, not clients. Vulnerabilities have been
- * reported when this validation is not performed. Security is more
- * important than edge-case compatibility (which is probably invalid
- * anyhow). */
-static int is_hostnamech(int ch)
-{
- /* [A-Za-z0-9-._/]
- * Don't use isalnum() as it is locale-specific
- */
- if (ch >= 'A' && ch <= 'Z')
- return 1;
- if (ch >= 'a' && ch <= 'z')
- return 1;
- if (ch >= '0' && ch <= '9')
- return 1;
- if (ch == '-' || ch == '.' || ch == '_' || ch == '/')
- return 1;
+ if (encoded == NULL || abuf == NULL || alen == 0 || enclen == NULL) {
+ return ARES_EBADNAME; /* EFORMERR would be better */
+ }
- return 0;
-}
+ if (encoded < abuf || encoded >= abuf + alen) {
+ return ARES_EBADNAME; /* EFORMERR would be better */
+ }
-/* Expand an RFC1035-encoded domain name given by encoded. The
- * containing message is given by abuf and alen. The result given by
- * *s, which is set to a NUL-terminated allocated buffer. *enclen is
- * set to the length of the encoded name (not the length of the
- * expanded name; the goal is to tell the caller how many bytes to
- * move forward to get past the encoded name).
- *
- * In the simple case, an encoded name is a series of labels, each
- * composed of a one-byte length (limited to values between 0 and 63
- * inclusive) followed by the label contents. The name is terminated
- * by a zero-length label.
- *
- * In the more complicated case, a label may be terminated by an
- * indirection pointer, specified by two bytes with the high bits of
- * the first byte (corresponding to INDIR_MASK) set to 11. With the
- * two high bits of the first byte stripped off, the indirection
- * pointer gives an offset from the beginning of the containing
- * message with more labels to decode. Indirection can happen an
- * arbitrary number of times, so we have to detect loops.
- *
- * Since the expanded name uses '.' as a label separator, we use
- * backslashes to escape periods or backslashes in the expanded name.
- *
- * If the result is expected to be a hostname, then no escaped data is allowed
- * and will return error.
- */
+ *enclen = 0;
-int ares__expand_name_validated(const unsigned char *encoded,
- const unsigned char *abuf,
- int alen, char **s, long *enclen,
- int is_hostname)
-{
- int len, indir = 0;
- char *q;
- const unsigned char *p;
- union {
- ares_ssize_t sig;
- size_t uns;
- } nlen;
+ /* NOTE: we allow 's' to be NULL to skip it */
+ if (s) {
+ *s = NULL;
+ }
- nlen.sig = name_length(encoded, abuf, alen, is_hostname);
- if (nlen.sig < 0)
- return ARES_EBADNAME;
+ buf = ares__buf_create_const(abuf, alen);
- *s = ares_malloc(nlen.uns + 1);
- if (!*s)
+ if (buf == NULL) {
return ARES_ENOMEM;
- q = *s;
-
- if (nlen.uns == 0) {
- /* RFC2181 says this should be ".": the root of the DNS tree.
- * Since this function strips trailing dots though, it becomes ""
- */
- q[0] = '\0';
-
- /* indirect root label (like 0xc0 0x0c) is 2 bytes long (stupid, but
- valid) */
- if ((*encoded & INDIR_MASK) == INDIR_MASK)
- *enclen = 2L;
- else
- *enclen = 1L; /* the caller should move one byte to get past this */
-
- return ARES_SUCCESS;
}
- /* No error-checking necessary; it was all done by name_length(). */
- p = encoded;
- while (*p)
- {
- if ((*p & INDIR_MASK) == INDIR_MASK)
- {
- if (!indir)
- {
- *enclen = aresx_uztosl(p + 2U - encoded);
- indir = 1;
- }
- p = abuf + ((*p & ~INDIR_MASK) << 8 | *(p + 1));
- }
- else
- {
- int name_len = *p;
- len = name_len;
- p++;
-
- while (len--)
- {
- /* Output as \DDD for consistency with RFC1035 5.1, except
- * for the special case of a root name response */
- if (!ares__isprint(*p) && !(name_len == 1 && *p == 0))
- {
- *q++ = '\\';
- *q++ = '0' + *p / 100;
- *q++ = '0' + (*p % 100) / 10;
- *q++ = '0' + (*p % 10);
- }
- else if (is_reservedch(*p))
- {
- *q++ = '\\';
- *q++ = *p;
- }
- else
- {
- *q++ = *p;
- }
- p++;
- }
- *q++ = '.';
- }
- }
+ status = ares__buf_set_position(buf, (size_t)(encoded - abuf));
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
- if (!indir)
- *enclen = aresx_uztosl(p + 1U - encoded);
+ start_len = ares__buf_len(buf);
+ status = ares__buf_parse_dns_name(buf, s, is_hostname);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
- /* Nuke the trailing period if we wrote one. */
- if (q > *s)
- *(q - 1) = 0;
- else
- *q = 0; /* zero terminate; LCOV_EXCL_LINE: empty names exit above */
+ *enclen = start_len - ares__buf_len(buf);
- return ARES_SUCCESS;
+done:
+ ares__buf_destroy(buf);
+ return status;
}
-
int ares_expand_name(const unsigned char *encoded, const unsigned char *abuf,
int alen, char **s, long *enclen)
{
- return ares__expand_name_validated(encoded, abuf, alen, s, enclen, 0);
-}
-
-/* Return the length of the expansion of an encoded domain name, or
- * -1 if the encoding is invalid.
- */
-static int name_length(const unsigned char *encoded, const unsigned char *abuf,
- int alen, int is_hostname)
-{
- int n = 0, offset, indir = 0, top;
-
- /* Allow the caller to pass us abuf + alen and have us check for it. */
- if (encoded >= abuf + alen)
- return -1;
+ /* Keep public API compatible */
+ size_t enclen_temp = 0;
+ ares_status_t status;
- while (*encoded)
- {
- top = (*encoded & INDIR_MASK);
- if (top == INDIR_MASK)
- {
- /* Check the offset and go there. */
- if (encoded + 1 >= abuf + alen)
- return -1;
- offset = (*encoded & ~INDIR_MASK) << 8 | *(encoded + 1);
- if (offset >= alen)
- return -1;
- encoded = abuf + offset;
-
- /* If we've seen more indirects than the message length,
- * then there's a loop.
- */
- ++indir;
- if (indir > alen || indir > MAX_INDIRS)
- return -1;
- }
- else if (top == 0x00)
- {
- int name_len = *encoded;
- offset = name_len;
- if (encoded + offset + 1 >= abuf + alen)
- return -1;
- encoded++;
-
- while (offset--)
- {
- if (!ares__isprint(*encoded) && !(name_len == 1 && *encoded == 0))
- {
- if (is_hostname)
- return -1;
- n += 4;
- }
- else if (is_reservedch(*encoded))
- {
- if (is_hostname)
- return -1;
- n += 2;
- }
- else
- {
- if (is_hostname && !is_hostnamech(*encoded))
- return -1;
- n += 1;
- }
- encoded++;
- }
-
- n++;
- }
- else
- {
- /* RFC 1035 4.1.4 says other options (01, 10) for top 2
- * bits are reserved.
- */
- return -1;
- }
- }
+ if (alen < 0) {
+ return ARES_EBADRESP;
+ }
- /* If there were any labels at all, then the number of dots is one
- * less than the number of labels, so subtract one.
- */
- return (n) ? n - 1 : n;
+ status = ares__expand_name_validated(encoded, abuf, (size_t)alen, s,
+ &enclen_temp, ARES_FALSE);
+ *enclen = (long)enclen_temp;
+ return (int)status;
}
/* Like ares_expand_name_validated but returns EBADRESP in case of invalid
* input. */
-int ares__expand_name_for_response(const unsigned char *encoded,
- const unsigned char *abuf, int alen,
- char **s, long *enclen, int is_hostname)
+ares_status_t ares__expand_name_for_response(const unsigned char *encoded,
+ const unsigned char *abuf,
+ size_t alen, char **s,
+ size_t *enclen,
+ ares_bool_t is_hostname)
{
- int status = ares__expand_name_validated(encoded, abuf, alen, s, enclen,
- is_hostname);
- if (status == ARES_EBADNAME)
+ ares_status_t status =
+ ares__expand_name_validated(encoded, abuf, alen, s, enclen, is_hostname);
+ if (status == ARES_EBADNAME) {
status = ARES_EBADRESP;
+ }
return status;
}
diff --git a/src/lib/ares_expand_string.c b/src/lib/ares_expand_string.c
index 03e3929..be7034e 100644
--- a/src/lib/ares_expand_string.c
+++ b/src/lib/ares_expand_string.c
@@ -1,17 +1,28 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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 (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -30,38 +41,71 @@
* are the characters of the string. The returned result will be NULL
* terminated.
*/
-int ares_expand_string(const unsigned char *encoded,
- const unsigned char *abuf,
- int alen,
- unsigned char **s,
- long *enclen)
+ares_status_t ares_expand_string_ex(const unsigned char *encoded,
+ const unsigned char *abuf, size_t alen,
+ unsigned char **s, size_t *enclen)
{
- unsigned char *q;
- union {
- ares_ssize_t sig;
- size_t uns;
- } elen;
+ ares_status_t status;
+ ares__buf_t *buf = NULL;
+ size_t start_len;
+ size_t len = 0;
+
+ if (encoded == NULL || abuf == NULL || alen == 0 || enclen == NULL) {
+ return ARES_EBADSTR; /* EFORMERR would be better */
+ }
+
+ if (encoded < abuf || encoded >= abuf + alen) {
+ return ARES_EBADSTR; /* EFORMERR would be better */
+ }
- if (encoded == abuf+alen)
- return ARES_EBADSTR;
+ *enclen = 0;
- elen.uns = *encoded;
- if (encoded+elen.sig+1 > abuf+alen)
- return ARES_EBADSTR;
+ /* NOTE: we allow 's' to be NULL to skip it */
+ if (s) {
+ *s = NULL;
+ }
- encoded++;
+ buf = ares__buf_create_const(abuf, alen);
- *s = ares_malloc(elen.uns+1);
- if (*s == NULL)
+ if (buf == NULL) {
return ARES_ENOMEM;
- q = *s;
- strncpy((char *)q, (char *)encoded, elen.uns);
- q[elen.uns] = '\0';
+ }
- *s = q;
+ status = ares__buf_set_position(buf, (size_t)(encoded - abuf));
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
- *enclen = (long)(elen.sig+1);
+ start_len = ares__buf_len(buf);
+ status =
+ ares__buf_parse_dns_binstr(buf, ares__buf_len(buf), s, &len, ARES_FALSE);
+ /* hrm, no way to pass back 'len' with the prototype */
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
- return ARES_SUCCESS;
+ *enclen = start_len - ares__buf_len(buf);
+
+done:
+ ares__buf_destroy(buf);
+ if (status == ARES_EBADNAME || status == ARES_EBADRESP) {
+ status = ARES_EBADSTR;
+ }
+ return status;
}
+int ares_expand_string(const unsigned char *encoded, const unsigned char *abuf,
+ int alen, unsigned char **s, long *enclen)
+{
+ ares_status_t status;
+ size_t temp_enclen = 0;
+
+ if (alen < 0) {
+ return ARES_EBADRESP;
+ }
+
+ status = ares_expand_string_ex(encoded, abuf, (size_t)alen, s, &temp_enclen);
+
+ *enclen = (long)temp_enclen;
+ return (int)status;
+}
diff --git a/src/lib/ares_fds.c b/src/lib/ares_fds.c
index f405fc0..c1fb794 100644
--- a/src/lib/ares_fds.c
+++ b/src/lib/ares_fds.c
@@ -1,59 +1,68 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
#include "ares.h"
-#include "ares_nowarn.h"
#include "ares_private.h"
int ares_fds(ares_channel channel, fd_set *read_fds, fd_set *write_fds)
{
struct server_state *server;
- ares_socket_t nfds;
- int i;
+ ares_socket_t nfds;
+ size_t i;
/* Are there any active queries? */
- int active_queries = !ares__is_list_empty(&(channel->all_queries));
+ size_t active_queries = ares__llist_len(channel->all_queries);
nfds = 0;
- for (i = 0; i < channel->nservers; i++)
- {
- server = &channel->servers[i];
+ for (i = 0; i < channel->nservers; i++) {
+ ares__llist_node_t *node;
+ server = &channel->servers[i];
+
+ for (node = ares__llist_node_first(server->connections); node != NULL;
+ node = ares__llist_node_next(node)) {
+ const struct server_connection *conn = ares__llist_node_val(node);
+
/* We only need to register interest in UDP sockets if we have
* outstanding queries.
*/
- if (active_queries && server->udp_socket != ARES_SOCKET_BAD)
- {
- FD_SET(server->udp_socket, read_fds);
- if (server->udp_socket >= nfds)
- nfds = server->udp_socket + 1;
+ if (active_queries || conn->is_tcp) {
+ FD_SET(conn->fd, read_fds);
+ if (conn->fd >= nfds) {
+ nfds = conn->fd + 1;
}
- /* We always register for TCP events, because we want to know
- * when the other side closes the connection, so we don't waste
- * time trying to use a broken connection.
- */
- if (server->tcp_socket != ARES_SOCKET_BAD)
- {
- FD_SET(server->tcp_socket, read_fds);
- if (server->qhead)
- FD_SET(server->tcp_socket, write_fds);
- if (server->tcp_socket >= nfds)
- nfds = server->tcp_socket + 1;
- }
+ }
+
+ if (conn->is_tcp && ares__buf_len(server->tcp_send)) {
+ FD_SET(conn->fd, write_fds);
+ }
}
- return (int)nfds;
+ }
+
+ return nfds;
}
diff --git a/src/lib/ares_free_hostent.c b/src/lib/ares_free_hostent.c
index ea28ff0..a088c1b 100644
--- a/src/lib/ares_free_hostent.c
+++ b/src/lib/ares_free_hostent.c
@@ -1,23 +1,34 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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 (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
#ifdef HAVE_NETDB_H
-#include <netdb.h>
+# include <netdb.h>
#endif
#include "ares.h"
@@ -27,16 +38,19 @@ void ares_free_hostent(struct hostent *host)
{
char **p;
- if (!host)
+ if (!host) {
return;
+ }
- ares_free((char *)(host->h_name));
- for (p = host->h_aliases; p && *p; p++)
+ ares_free(host->h_name);
+ for (p = host->h_aliases; p && *p; p++) {
ares_free(*p);
+ }
ares_free(host->h_aliases);
if (host->h_addr_list) {
- ares_free(host->h_addr_list[0]); /* no matter if there is one or many entries,
- there is only one malloc for all of them */
+ ares_free(
+ host->h_addr_list[0]); /* no matter if there is one or many entries,
+ there is only one malloc for all of them */
ares_free(host->h_addr_list);
}
ares_free(host);
diff --git a/src/lib/ares_free_string.c b/src/lib/ares_free_string.c
index 024992e..3977306 100644
--- a/src/lib/ares_free_string.c
+++ b/src/lib/ares_free_string.c
@@ -1,17 +1,28 @@
-
-/* Copyright 2000 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 2000 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
diff --git a/src/lib/ares_freeaddrinfo.c b/src/lib/ares_freeaddrinfo.c
index ab87136..7b61dae 100644
--- a/src/lib/ares_freeaddrinfo.c
+++ b/src/lib/ares_freeaddrinfo.c
@@ -1,18 +1,28 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2019 by Andrew Selivanov
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) 2019 Andrew Selivanov
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -27,32 +37,31 @@
void ares__freeaddrinfo_cnames(struct ares_addrinfo_cname *head)
{
struct ares_addrinfo_cname *current;
- while (head)
- {
- current = head;
- head = head->next;
- ares_free(current->alias);
- ares_free(current->name);
- ares_free(current);
- }
+ while (head) {
+ current = head;
+ head = head->next;
+ ares_free(current->alias);
+ ares_free(current->name);
+ ares_free(current);
+ }
}
void ares__freeaddrinfo_nodes(struct ares_addrinfo_node *head)
{
struct ares_addrinfo_node *current;
- while (head)
- {
- current = head;
- head = head->ai_next;
- ares_free(current->ai_addr);
- ares_free(current);
- }
+ while (head) {
+ current = head;
+ head = head->ai_next;
+ ares_free(current->ai_addr);
+ ares_free(current);
+ }
}
void ares_freeaddrinfo(struct ares_addrinfo *ai)
{
- if (ai == NULL)
+ if (ai == NULL) {
return;
+ }
ares__freeaddrinfo_cnames(ai->cnames);
ares__freeaddrinfo_nodes(ai->nodes);
ares_free(ai->name);
diff --git a/src/lib/ares_getaddrinfo.c b/src/lib/ares_getaddrinfo.c
index 0a0225a..631b738 100644
--- a/src/lib/ares_getaddrinfo.c
+++ b/src/lib/ares_getaddrinfo.c
@@ -1,26 +1,36 @@
-
-/* Copyright 1998, 2011, 2013 by the Massachusetts Institute of Technology.
- * Copyright (C) 2017 - 2018 by Christian Ammer
- * Copyright (C) 2019 by Andrew Selivanov
+/* MIT License
+ *
+ * Copyright (c) 1998, 2011, 2013 Massachusetts Institute of Technology
+ * Copyright (c) 2017 Christian Ammer
+ * Copyright (c) 2019 Andrew Selivanov
+ *
+ * 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:
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
#ifdef HAVE_GETSERVBYNAME_R
-# if !defined(GETSERVBYNAME_R_ARGS) || \
- (GETSERVBYNAME_R_ARGS < 4) || (GETSERVBYNAME_R_ARGS > 6)
+# if !defined(GETSERVBYNAME_R_ARGS) || (GETSERVBYNAME_R_ARGS < 4) || \
+ (GETSERVBYNAME_R_ARGS > 6)
# error "you MUST specifiy a valid number of arguments for getservbyname_r"
# endif
#endif
@@ -38,41 +48,44 @@
#include "ares_nameser.h"
#ifdef HAVE_STRINGS_H
-#include <strings.h>
+# include <strings.h>
#endif
#include <assert.h>
#ifdef HAVE_LIMITS_H
-#include <limits.h>
+# include <limits.h>
#endif
#include "ares.h"
#include "bitncmp.h"
#include "ares_private.h"
+#include "ares_dns.h"
#ifdef WATT32
-#undef WIN32
+# undef WIN32
#endif
#ifdef WIN32
# include "ares_platform.h"
#endif
-struct host_query
-{
- ares_channel channel;
- char *name;
- unsigned short port; /* in host order */
- ares_addrinfo_callback callback;
- void *arg;
+struct host_query {
+ ares_channel channel;
+ char *name;
+ unsigned short port; /* in host order */
+ ares_addrinfo_callback callback;
+ void *arg;
struct ares_addrinfo_hints hints;
- int sent_family; /* this family is what was is being used */
- int timeouts; /* number of timeouts we saw for this request */
- const char *remaining_lookups; /* types of lookup we need to perform ("fb" by
- default, file and dns respectively) */
- struct ares_addrinfo *ai; /* store results between lookups */
- int remaining; /* number of DNS answers waiting for */
- int next_domain; /* next search domain to try */
- int nodata_cnt; /* Track nodata responses to possibly override final result */
+ int sent_family; /* this family is what was is being used */
+ size_t timeouts; /* number of timeouts we saw for this request */
+ const char *remaining_lookups; /* types of lookup we need to perform ("fb" by
+ default, file and dns respectively) */
+ struct ares_addrinfo *ai; /* store results between lookups */
+ unsigned short qid_a; /* qid for A request */
+ unsigned short qid_aaaa; /* qid for AAAA request */
+ size_t remaining; /* number of DNS answers waiting for */
+ ares_ssize_t next_domain; /* next search domain to try */
+ size_t
+ nodata_cnt; /* Track nodata responses to possibly override final result */
};
static const struct ares_addrinfo_hints default_hints = {
@@ -107,114 +120,111 @@ static const struct ares_addrinfo empty_addrinfo = {
};
/* forward declarations */
-static void host_callback(void *arg, int status, int timeouts,
- unsigned char *abuf, int alen);
-static int as_is_first(const struct host_query *hquery);
-static int as_is_only(const struct host_query* hquery);
-static int next_dns_lookup(struct host_query *hquery);
+static void host_callback(void *arg, int status, int timeouts,
+ unsigned char *abuf, int alen);
+static ares_bool_t as_is_first(const struct host_query *hquery);
+static ares_bool_t as_is_only(const struct host_query *hquery);
+static ares_bool_t next_dns_lookup(struct host_query *hquery);
-struct ares_addrinfo_cname *ares__malloc_addrinfo_cname()
+static struct ares_addrinfo_cname *ares__malloc_addrinfo_cname(void)
{
- struct ares_addrinfo_cname *cname = ares_malloc(sizeof(struct ares_addrinfo_cname));
- if (!cname)
+ struct ares_addrinfo_cname *cname =
+ ares_malloc(sizeof(struct ares_addrinfo_cname));
+ if (!cname) {
return NULL;
+ }
*cname = empty_addrinfo_cname;
return cname;
}
-struct ares_addrinfo_cname *ares__append_addrinfo_cname(struct ares_addrinfo_cname **head)
+struct ares_addrinfo_cname *
+ ares__append_addrinfo_cname(struct ares_addrinfo_cname **head)
{
struct ares_addrinfo_cname *tail = ares__malloc_addrinfo_cname();
struct ares_addrinfo_cname *last = *head;
- if (!last)
- {
- *head = tail;
- return tail;
- }
+ if (!last) {
+ *head = tail;
+ return tail;
+ }
- while (last->next)
- {
- last = last->next;
- }
+ while (last->next) {
+ last = last->next;
+ }
last->next = tail;
return tail;
}
void ares__addrinfo_cat_cnames(struct ares_addrinfo_cname **head,
- struct ares_addrinfo_cname *tail)
+ struct ares_addrinfo_cname *tail)
{
struct ares_addrinfo_cname *last = *head;
- if (!last)
- {
- *head = tail;
- return;
- }
+ if (!last) {
+ *head = tail;
+ return;
+ }
- while (last->next)
- {
- last = last->next;
- }
+ while (last->next) {
+ last = last->next;
+ }
last->next = tail;
}
-struct ares_addrinfo *ares__malloc_addrinfo()
+static struct ares_addrinfo *ares__malloc_addrinfo(void)
{
struct ares_addrinfo *ai = ares_malloc(sizeof(struct ares_addrinfo));
- if (!ai)
+ if (!ai) {
return NULL;
+ }
*ai = empty_addrinfo;
return ai;
}
-struct ares_addrinfo_node *ares__malloc_addrinfo_node()
+static struct ares_addrinfo_node *ares__malloc_addrinfo_node(void)
{
- struct ares_addrinfo_node *node =
- ares_malloc(sizeof(struct ares_addrinfo_node));
- if (!node)
+ struct ares_addrinfo_node *node = ares_malloc(sizeof(*node));
+ if (!node) {
return NULL;
+ }
*node = empty_addrinfo_node;
return node;
}
/* Allocate new addrinfo and append to the tail. */
-struct ares_addrinfo_node *ares__append_addrinfo_node(struct ares_addrinfo_node **head)
+struct ares_addrinfo_node *
+ ares__append_addrinfo_node(struct ares_addrinfo_node **head)
{
struct ares_addrinfo_node *tail = ares__malloc_addrinfo_node();
struct ares_addrinfo_node *last = *head;
- if (!last)
- {
- *head = tail;
- return tail;
- }
+ if (!last) {
+ *head = tail;
+ return tail;
+ }
- while (last->ai_next)
- {
- last = last->ai_next;
- }
+ while (last->ai_next) {
+ last = last->ai_next;
+ }
last->ai_next = tail;
return tail;
}
void ares__addrinfo_cat_nodes(struct ares_addrinfo_node **head,
- struct ares_addrinfo_node *tail)
+ struct ares_addrinfo_node *tail)
{
struct ares_addrinfo_node *last = *head;
- if (!last)
- {
- *head = tail;
- return;
- }
+ if (!last) {
+ *head = tail;
+ return;
+ }
- while (last->ai_next)
- {
- last = last->ai_next;
- }
+ while (last->ai_next) {
+ last = last->ai_next;
+ }
last->ai_next = tail;
}
@@ -224,51 +234,52 @@ void ares__addrinfo_cat_nodes(struct ares_addrinfo_node **head,
*/
static unsigned short lookup_service(const char *service, int flags)
{
- const char *proto;
+ const char *proto;
struct servent *sep;
#ifdef HAVE_GETSERVBYNAME_R
struct servent se;
- char tmpbuf[4096];
+ char tmpbuf[4096];
#endif
- if (service)
- {
- if (flags & ARES_NI_UDP)
- proto = "udp";
- else if (flags & ARES_NI_SCTP)
- proto = "sctp";
- else if (flags & ARES_NI_DCCP)
- proto = "dccp";
- else
- proto = "tcp";
+ if (service) {
+ if (flags & ARES_NI_UDP) {
+ proto = "udp";
+ } else if (flags & ARES_NI_SCTP) {
+ proto = "sctp";
+ } else if (flags & ARES_NI_DCCP) {
+ proto = "dccp";
+ } else {
+ proto = "tcp";
+ }
#ifdef HAVE_GETSERVBYNAME_R
- memset(&se, 0, sizeof(se));
- sep = &se;
- memset(tmpbuf, 0, sizeof(tmpbuf));
-#if GETSERVBYNAME_R_ARGS == 6
- if (getservbyname_r(service, proto, &se, (void *)tmpbuf, sizeof(tmpbuf),
- &sep) != 0)
- sep = NULL; /* LCOV_EXCL_LINE: buffer large so this never fails */
-#elif GETSERVBYNAME_R_ARGS == 5
- sep =
- getservbyname_r(service, proto, &se, (void *)tmpbuf, sizeof(tmpbuf));
-#elif GETSERVBYNAME_R_ARGS == 4
- if (getservbyname_r(service, proto, &se, (void *)tmpbuf) != 0)
- sep = NULL;
-#else
- /* Lets just hope the OS uses TLS! */
- sep = getservbyname(service, proto);
-#endif
-#else
- /* Lets just hope the OS uses TLS! */
-#if (defined(NETWARE) && !defined(__NOVELL_LIBC__))
- sep = getservbyname(service, (char *)proto);
+ memset(&se, 0, sizeof(se));
+ sep = &se;
+ memset(tmpbuf, 0, sizeof(tmpbuf));
+# if GETSERVBYNAME_R_ARGS == 6
+ if (getservbyname_r(service, proto, &se, (void *)tmpbuf, sizeof(tmpbuf),
+ &sep) != 0) {
+ sep = NULL; /* LCOV_EXCL_LINE: buffer large so this never fails */
+ }
+# elif GETSERVBYNAME_R_ARGS == 5
+ sep = getservbyname_r(service, proto, &se, (void *)tmpbuf, sizeof(tmpbuf));
+# elif GETSERVBYNAME_R_ARGS == 4
+ if (getservbyname_r(service, proto, &se, (void *)tmpbuf) != 0) {
+ sep = NULL;
+ }
+# else
+ /* Lets just hope the OS uses TLS! */
+ sep = getservbyname(service, proto);
+# endif
#else
- sep = getservbyname(service, proto);
-#endif
+ /* Lets just hope the OS uses TLS! */
+# if (defined(NETWARE) && !defined(__NOVELL_LIBC__))
+ sep = getservbyname(service, (char *)proto);
+# else
+ sep = getservbyname(service, proto);
+# endif
#endif
- return (sep ? ntohs((unsigned short)sep->s_port) : 0);
- }
+ return (sep ? ntohs((unsigned short)sep->s_port) : 0);
+ }
return 0;
}
@@ -276,522 +287,550 @@ static unsigned short lookup_service(const char *service, int flags)
* fake up a host entry, end the query immediately, and return true.
* Otherwise return false.
*/
-static int fake_addrinfo(const char *name,
- unsigned short port,
- const struct ares_addrinfo_hints *hints,
- struct ares_addrinfo *ai,
- ares_addrinfo_callback callback,
- void *arg)
+static ares_bool_t fake_addrinfo(const char *name, unsigned short port,
+ const struct ares_addrinfo_hints *hints,
+ struct ares_addrinfo *ai,
+ ares_addrinfo_callback callback, void *arg)
{
struct ares_addrinfo_cname *cname;
- int status = ARES_SUCCESS;
- int result = 0;
- int family = hints->ai_family;
- if (family == AF_INET || family == AF_INET6 || family == AF_UNSPEC)
- {
- /* It only looks like an IP address if it's all numbers and dots. */
- int numdots = 0, valid = 1;
- const char *p;
- for (p = name; *p; p++)
- {
- if (!ISDIGIT(*p) && *p != '.')
- {
- valid = 0;
- break;
- }
- else if (*p == '.')
- {
- numdots++;
- }
- }
+ ares_status_t status = ARES_SUCCESS;
+ ares_bool_t result = ARES_FALSE;
+ int family = hints->ai_family;
+ if (family == AF_INET || family == AF_INET6 || family == AF_UNSPEC) {
+ /* It only looks like an IP address if it's all numbers and dots. */
+ size_t numdots = 0;
+ ares_bool_t valid = ARES_TRUE;
+ const char *p;
+ for (p = name; *p; p++) {
+ if (!ISDIGIT(*p) && *p != '.') {
+ valid = ARES_FALSE;
+ break;
+ } else if (*p == '.') {
+ numdots++;
+ }
+ }
- /* if we don't have 3 dots, it is illegal
- * (although inet_pton doesn't think so).
- */
- if (numdots != 3 || !valid)
- result = 0;
- else
- {
- struct in_addr addr4;
- result = ares_inet_pton(AF_INET, name, &addr4) < 1 ? 0 : 1;
- if (result)
- {
- status = ares_append_ai_node(AF_INET, port, 0, &addr4, &ai->nodes);
- if (status != ARES_SUCCESS)
- {
- callback(arg, status, 0, NULL);
- return 1;
- }
- }
+ /* if we don't have 3 dots, it is illegal
+ * (although inet_pton doesn't think so).
+ */
+ if (numdots != 3 || !valid) {
+ result = ARES_FALSE;
+ } else {
+ struct in_addr addr4;
+ result =
+ ares_inet_pton(AF_INET, name, &addr4) < 1 ? ARES_FALSE : ARES_TRUE;
+ if (result) {
+ status = ares_append_ai_node(AF_INET, port, 0, &addr4, &ai->nodes);
+ if (status != ARES_SUCCESS) {
+ callback(arg, (int)status, 0, NULL);
+ return ARES_TRUE;
}
+ }
}
+ }
- if (family == AF_INET6 || family == AF_UNSPEC)
- {
- struct ares_in6_addr addr6;
- result = ares_inet_pton(AF_INET6, name, &addr6) < 1 ? 0 : 1;
- if (result)
- {
- status = ares_append_ai_node(AF_INET6, port, 0, &addr6, &ai->nodes);
- if (status != ARES_SUCCESS)
- {
- callback(arg, status, 0, NULL);
- return 1;
- }
- }
+ if (!result && (family == AF_INET6 || family == AF_UNSPEC)) {
+ struct ares_in6_addr addr6;
+ result =
+ ares_inet_pton(AF_INET6, name, &addr6) < 1 ? ARES_FALSE : ARES_TRUE;
+ if (result) {
+ status = ares_append_ai_node(AF_INET6, port, 0, &addr6, &ai->nodes);
+ if (status != ARES_SUCCESS) {
+ callback(arg, (int)status, 0, NULL);
+ return ARES_TRUE;
+ }
}
+ }
- if (!result)
- return 0;
-
- if (hints->ai_flags & ARES_AI_CANONNAME)
- {
- cname = ares__append_addrinfo_cname(&ai->cnames);
- if (!cname)
- {
- ares_freeaddrinfo(ai);
- callback(arg, ARES_ENOMEM, 0, NULL);
- return 1;
- }
+ if (!result) {
+ return ARES_FALSE;
+ }
- /* Duplicate the name, to avoid a constness violation. */
- cname->name = ares_strdup(name);
- if (!cname->name)
- {
- ares_freeaddrinfo(ai);
- callback(arg, ARES_ENOMEM, 0, NULL);
- return 1;
- }
+ if (hints->ai_flags & ARES_AI_CANONNAME) {
+ cname = ares__append_addrinfo_cname(&ai->cnames);
+ if (!cname) {
+ ares_freeaddrinfo(ai);
+ callback(arg, ARES_ENOMEM, 0, NULL);
+ return ARES_TRUE;
}
+ /* Duplicate the name, to avoid a constness violation. */
+ cname->name = ares_strdup(name);
+ if (!cname->name) {
+ ares_freeaddrinfo(ai);
+ callback(arg, ARES_ENOMEM, 0, NULL);
+ return ARES_TRUE;
+ }
+ }
+
ai->nodes->ai_socktype = hints->ai_socktype;
ai->nodes->ai_protocol = hints->ai_protocol;
callback(arg, ARES_SUCCESS, 0, ai);
- return 1;
+ return ARES_TRUE;
}
-static void end_hquery(struct host_query *hquery, int status)
+static void end_hquery(struct host_query *hquery, ares_status_t status)
{
- struct ares_addrinfo_node sentinel;
+ struct ares_addrinfo_node sentinel;
struct ares_addrinfo_node *next;
- if (status == ARES_SUCCESS)
- {
- if (!(hquery->hints.ai_flags & ARES_AI_NOSORT) && hquery->ai->nodes)
- {
- sentinel.ai_next = hquery->ai->nodes;
- ares__sortaddrinfo(hquery->channel, &sentinel);
- hquery->ai->nodes = sentinel.ai_next;
- }
- next = hquery->ai->nodes;
- while (next)
- {
- next->ai_socktype = hquery->hints.ai_socktype;
- next->ai_protocol = hquery->hints.ai_protocol;
- next = next->ai_next;
- }
+ if (status == ARES_SUCCESS) {
+ if (!(hquery->hints.ai_flags & ARES_AI_NOSORT) && hquery->ai->nodes) {
+ sentinel.ai_next = hquery->ai->nodes;
+ ares__sortaddrinfo(hquery->channel, &sentinel);
+ hquery->ai->nodes = sentinel.ai_next;
}
- else
- {
- /* Clean up what we have collected by so far. */
- ares_freeaddrinfo(hquery->ai);
- hquery->ai = NULL;
+ next = hquery->ai->nodes;
+
+ while (next) {
+ next->ai_socktype = hquery->hints.ai_socktype;
+ next->ai_protocol = hquery->hints.ai_protocol;
+ next = next->ai_next;
}
+ } else {
+ /* Clean up what we have collected by so far. */
+ ares_freeaddrinfo(hquery->ai);
+ hquery->ai = NULL;
+ }
- hquery->callback(hquery->arg, status, hquery->timeouts, hquery->ai);
+ hquery->callback(hquery->arg, (int)status, (int)hquery->timeouts, hquery->ai);
ares_free(hquery->name);
ares_free(hquery);
}
-static int file_lookup(struct host_query *hquery)
+static ares_bool_t is_localhost(const char *name)
+{
+ /* RFC6761 6.3 says : The domain "localhost." and any names falling within
+ * ".localhost." */
+ size_t len;
+
+ if (name == NULL) {
+ return ARES_FALSE;
+ }
+
+ if (strcmp(name, "localhost") == 0) {
+ return ARES_TRUE;
+ }
+
+ len = ares_strlen(name);
+ if (len < 10 /* strlen(".localhost") */) {
+ return ARES_FALSE;
+ }
+
+ if (strcmp(name + (len - 10 /* strlen(".localhost") */), ".localhost") == 0) {
+ return ARES_TRUE;
+ }
+
+ return ARES_FALSE;
+}
+
+static ares_status_t file_lookup(struct host_query *hquery)
{
- FILE *fp;
- int error;
- int status;
- const char *path_hosts = NULL;
-
- if (hquery->hints.ai_flags & ARES_AI_ENVHOSTS)
- {
- path_hosts = getenv("CARES_HOSTS");
+ FILE *fp;
+ int error;
+ ares_status_t status;
+ char *path_hosts = NULL;
+
+ if (hquery->channel->hosts_path) {
+ path_hosts = ares_strdup(hquery->channel->hosts_path);
+ if (!path_hosts) {
+ return ARES_ENOMEM;
}
+ }
- if (!path_hosts)
- {
+ if (hquery->hints.ai_flags & ARES_AI_ENVHOSTS) {
+ if (path_hosts) {
+ ares_free(path_hosts);
+ }
+
+ path_hosts = ares_strdup(getenv("CARES_HOSTS"));
+ if (!path_hosts) {
+ return ARES_ENOMEM;
+ }
+ }
+
+ if (!path_hosts) {
#ifdef WIN32
- char PATH_HOSTS[MAX_PATH];
- win_platform platform;
-
- PATH_HOSTS[0] = '\0';
-
- platform = ares__getplatform();
-
- if (platform == WIN_NT)
- {
- char tmp[MAX_PATH];
- HKEY hkeyHosts;
-
- if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ,
- &hkeyHosts) == ERROR_SUCCESS)
- {
- DWORD dwLength = MAX_PATH;
- RegQueryValueExA(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp,
- &dwLength);
- ExpandEnvironmentStringsA(tmp, PATH_HOSTS, MAX_PATH);
- RegCloseKey(hkeyHosts);
- }
- }
- else if (platform == WIN_9X)
- GetWindowsDirectoryA(PATH_HOSTS, MAX_PATH);
- else
- return ARES_ENOTFOUND;
+ char PATH_HOSTS[MAX_PATH];
+ win_platform platform;
- strcat(PATH_HOSTS, WIN_PATH_HOSTS);
- path_hosts = PATH_HOSTS;
+ PATH_HOSTS[0] = '\0';
+
+ platform = ares__getplatform();
+
+ if (platform == WIN_NT) {
+ char tmp[MAX_PATH];
+ HKEY hkeyHosts;
+
+ if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ,
+ &hkeyHosts) == ERROR_SUCCESS) {
+ DWORD dwLength = MAX_PATH;
+ RegQueryValueExA(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp,
+ &dwLength);
+ ExpandEnvironmentStringsA(tmp, PATH_HOSTS, MAX_PATH);
+ RegCloseKey(hkeyHosts);
+ }
+ } else if (platform == WIN_9X) {
+ GetWindowsDirectoryA(PATH_HOSTS, MAX_PATH);
+ } else {
+ return ARES_ENOTFOUND;
+ }
+ strcat(PATH_HOSTS, WIN_PATH_HOSTS);
#elif defined(WATT32)
- const char *PATH_HOSTS = _w32_GetHostsFile();
+ const char *PATH_HOSTS = _w32_GetHostsFile();
- if (!PATH_HOSTS)
- return ARES_ENOTFOUND;
+ if (!PATH_HOSTS) {
+ return ARES_ENOTFOUND;
+ }
#endif
- path_hosts = PATH_HOSTS;
+ path_hosts = ares_strdup(PATH_HOSTS);
+ if (!path_hosts) {
+ return ARES_ENOMEM;
}
+ }
fp = fopen(path_hosts, "r");
- if (!fp)
- {
- error = ERRNO;
- switch (error)
- {
- case ENOENT:
- case ESRCH:
- return ARES_ENOTFOUND;
- default:
- DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", error,
- strerror(error)));
- DEBUGF(fprintf(stderr, "Error opening file: %s\n", path_hosts));
- return ARES_EFILE;
- }
- }
- status = ares__readaddrinfo(fp, hquery->name, hquery->port, &hquery->hints, hquery->ai);
- fclose(fp);
+ if (!fp) {
+ error = ERRNO;
+ switch (error) {
+ case ENOENT:
+ case ESRCH:
+ status = ARES_ENOTFOUND;
+ break;
+ default:
+ DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", error,
+ strerror(error)));
+ DEBUGF(fprintf(stderr, "Error opening file: %s\n", path_hosts));
+ status = ARES_EFILE;
+ break;
+ }
+ } else {
+ status = ares__readaddrinfo(fp, hquery->name, hquery->port, &hquery->hints,
+ hquery->ai);
+ fclose(fp);
+ }
+ ares_free(path_hosts);
/* RFC6761 section 6.3 #3 states that "Name resolution APIs and libraries
* SHOULD recognize localhost names as special and SHOULD always return the
- * IP loopback address for address queries" */
- if (status == ARES_ENOTFOUND && strcmp(hquery->name, "localhost") == 0)
- {
- return ares__addrinfo_localhost(hquery->name, hquery->port,
- &hquery->hints, hquery->ai);
- }
+ * IP loopback address for address queries".
+ * We will also ignore ALL errors when trying to resolve localhost, such
+ * as permissions errors reading /etc/hosts or a malformed /etc/hosts */
+ if (status != ARES_SUCCESS && is_localhost(hquery->name)) {
+ return ares__addrinfo_localhost(hquery->name, hquery->port, &hquery->hints,
+ hquery->ai);
+ }
return status;
}
-static void next_lookup(struct host_query *hquery, int status)
+static void next_lookup(struct host_query *hquery, ares_status_t status)
{
- switch (*hquery->remaining_lookups)
- {
- case 'b':
- /* RFC6761 section 6.3 #3 says "Name resolution APIs SHOULD NOT send
- * queries for localhost names to their configured caching DNS
- * server(s)." */
- if (strcmp(hquery->name, "localhost") != 0)
- {
- /* DNS lookup */
- if (next_dns_lookup(hquery))
- break;
- }
-
- hquery->remaining_lookups++;
- next_lookup(hquery, status);
- break;
-
- case 'f':
- /* Host file lookup */
- if (file_lookup(hquery) == ARES_SUCCESS)
- {
- end_hquery(hquery, ARES_SUCCESS);
- break;
- }
- hquery->remaining_lookups++;
- next_lookup(hquery, status);
- break;
- default:
- /* No lookup left */
- end_hquery(hquery, status);
- break;
- }
+ switch (*hquery->remaining_lookups) {
+ case 'b':
+ /* RFC6761 section 6.3 #3 says "Name resolution APIs SHOULD NOT send
+ * queries for localhost names to their configured caching DNS
+ * server(s)."
+ * Otherwise, DNS lookup. */
+ if (!is_localhost(hquery->name) && next_dns_lookup(hquery)) {
+ break;
+ }
+
+ hquery->remaining_lookups++;
+ next_lookup(hquery, status);
+ break;
+
+ case 'f':
+ /* Host file lookup */
+ if (file_lookup(hquery) == ARES_SUCCESS) {
+ end_hquery(hquery, ARES_SUCCESS);
+ break;
+ }
+ hquery->remaining_lookups++;
+ next_lookup(hquery, status);
+ break;
+ default:
+ /* No lookup left */
+ end_hquery(hquery, status);
+ break;
+ }
+}
+
+static void terminate_retries(struct host_query *hquery, unsigned short qid)
+{
+ unsigned short term_qid =
+ (qid == hquery->qid_a) ? hquery->qid_aaaa : hquery->qid_a;
+ ares_channel channel = hquery->channel;
+ struct query *query = NULL;
+
+ /* No other outstanding queries, nothing to do */
+ if (!hquery->remaining) {
+ return;
+ }
+
+ query = ares__htable_stvp_get_direct(channel->queries_by_qid, term_qid);
+ if (query == NULL) {
+ return;
+ }
+
+ query->no_retries = ARES_TRUE;
}
static void host_callback(void *arg, int status, int timeouts,
unsigned char *abuf, int alen)
{
- struct host_query *hquery = (struct host_query*)arg;
- int addinfostatus = ARES_SUCCESS;
- hquery->timeouts += timeouts;
+ struct host_query *hquery = (struct host_query *)arg;
+ ares_status_t addinfostatus = ARES_SUCCESS;
+ unsigned short qid = 0;
+ hquery->timeouts += (size_t)timeouts;
hquery->remaining--;
- if (status == ARES_SUCCESS)
- {
- addinfostatus = ares__parse_into_addrinfo(abuf, alen, 1, hquery->port, hquery->ai);
+ if (status == ARES_SUCCESS) {
+ if (alen < 0) {
+ addinfostatus = ARES_EBADRESP;
+ } else {
+ addinfostatus = ares__parse_into_addrinfo(abuf, (size_t)alen, ARES_TRUE,
+ hquery->port, hquery->ai);
+ }
+ if (addinfostatus == ARES_SUCCESS && alen >= HFIXEDSZ) {
+ qid = DNS_HEADER_QID(abuf); /* Converts to host byte order */
+ terminate_retries(hquery, qid);
}
+ }
- if (!hquery->remaining)
- {
- if (addinfostatus != ARES_SUCCESS && addinfostatus != ARES_ENODATA)
- {
- /* error in parsing result e.g. no memory */
- end_hquery(hquery, addinfostatus);
- }
- else if (hquery->ai->nodes)
- {
- /* at least one query ended with ARES_SUCCESS */
- end_hquery(hquery, ARES_SUCCESS);
- }
- else if (status == ARES_ENOTFOUND || status == ARES_ENODATA ||
- addinfostatus == ARES_ENODATA)
- {
- if (status == ARES_ENODATA || addinfostatus == ARES_ENODATA)
- hquery->nodata_cnt++;
- next_lookup(hquery, hquery->nodata_cnt?ARES_ENODATA:status);
- }
- else if (status == ARES_EDESTRUCTION)
- {
- /* NOTE: Could also be ARES_EDESTRUCTION. We need to only call this
- * once all queries (there can be multiple for getaddrinfo) are
- * terminated. */
- end_hquery(hquery, status);
- }
- else
- {
- end_hquery(hquery, status);
- }
+ if (!hquery->remaining) {
+ if (addinfostatus != ARES_SUCCESS && addinfostatus != ARES_ENODATA) {
+ /* error in parsing result e.g. no memory */
+ if (addinfostatus == ARES_EBADRESP && hquery->ai->nodes) {
+ /* We got a bad response from server, but at least one query
+ * ended with ARES_SUCCESS */
+ end_hquery(hquery, ARES_SUCCESS);
+ } else {
+ end_hquery(hquery, addinfostatus);
+ }
+ } else if (hquery->ai->nodes) {
+ /* at least one query ended with ARES_SUCCESS */
+ end_hquery(hquery, ARES_SUCCESS);
+ } else if (status == ARES_EDESTRUCTION || status == ARES_ECANCELLED) {
+ /* must make sure we don't do next_lookup() on destroy or cancel */
+ end_hquery(hquery, (ares_status_t)status);
+ } else if (status == ARES_ENOTFOUND || status == ARES_ENODATA ||
+ addinfostatus == ARES_ENODATA) {
+ if (status == ARES_ENODATA || addinfostatus == ARES_ENODATA) {
+ hquery->nodata_cnt++;
+ }
+ next_lookup(hquery,
+ hquery->nodata_cnt ? ARES_ENODATA : (ares_status_t)status);
+ } else {
+ end_hquery(hquery, (ares_status_t)status);
}
+ }
/* at this point we keep on waiting for the next query to finish */
}
-void ares_getaddrinfo(ares_channel channel,
- const char* name, const char* service,
- const struct ares_addrinfo_hints* hints,
- ares_addrinfo_callback callback, void* arg)
+void ares_getaddrinfo(ares_channel channel, const char *name,
+ const char *service,
+ const struct ares_addrinfo_hints *hints,
+ ares_addrinfo_callback callback, void *arg)
{
- struct host_query *hquery;
- unsigned short port = 0;
- int family;
+ struct host_query *hquery;
+ unsigned short port = 0;
+ int family;
struct ares_addrinfo *ai;
- char *alias_name = NULL;
- int status;
+ char *alias_name = NULL;
+ ares_status_t status;
- if (!hints)
- {
- hints = &default_hints;
- }
+ if (!hints) {
+ hints = &default_hints;
+ }
family = hints->ai_family;
/* Right now we only know how to look up Internet addresses
and unspec means try both basically. */
- if (family != AF_INET &&
- family != AF_INET6 &&
- family != AF_UNSPEC)
- {
- callback(arg, ARES_ENOTIMP, 0, NULL);
- return;
- }
+ if (family != AF_INET && family != AF_INET6 && family != AF_UNSPEC) {
+ callback(arg, ARES_ENOTIMP, 0, NULL);
+ return;
+ }
- if (ares__is_onion_domain(name))
- {
- callback(arg, ARES_ENOTFOUND, 0, NULL);
- return;
- }
+ if (ares__is_onion_domain(name)) {
+ callback(arg, ARES_ENOTFOUND, 0, NULL);
+ return;
+ }
/* perform HOSTALIAS resolution (technically this function does some other
* things we are going to ignore) */
status = ares__single_domain(channel, name, &alias_name);
if (status != ARES_SUCCESS) {
- callback(arg, status, 0, NULL);
+ callback(arg, (int)status, 0, NULL);
return;
}
- if (alias_name)
+ if (alias_name) {
name = alias_name;
+ }
- if (service)
- {
- if (hints->ai_flags & ARES_AI_NUMERICSERV)
- {
- port = (unsigned short)strtoul(service, NULL, 0);
- if (!port)
- {
- ares_free(alias_name);
- callback(arg, ARES_ESERVICE, 0, NULL);
- return;
- }
- }
- else
- {
- port = lookup_service(service, 0);
- if (!port)
- {
- port = (unsigned short)strtoul(service, NULL, 0);
- if (!port)
- {
- ares_free(alias_name);
- callback(arg, ARES_ESERVICE, 0, NULL);
- return;
- }
- }
+ if (service) {
+ if (hints->ai_flags & ARES_AI_NUMERICSERV) {
+ unsigned long val;
+ errno = 0;
+ val = strtoul(service, NULL, 0);
+ if ((val == 0 && errno != 0) || val > 65535) {
+ ares_free(alias_name);
+ callback(arg, ARES_ESERVICE, 0, NULL);
+ return;
+ }
+ port = (unsigned short)val;
+ } else {
+ port = lookup_service(service, 0);
+ if (!port) {
+ unsigned long val;
+ errno = 0;
+ val = strtoul(service, NULL, 0);
+ if ((val == 0 && errno != 0) || val > 65535) {
+ ares_free(alias_name);
+ callback(arg, ARES_ESERVICE, 0, NULL);
+ return;
}
+ port = (unsigned short)val;
+ }
}
+ }
ai = ares__malloc_addrinfo();
- if (!ai)
- {
- ares_free(alias_name);
- callback(arg, ARES_ENOMEM, 0, NULL);
- return;
- }
+ if (!ai) {
+ ares_free(alias_name);
+ callback(arg, ARES_ENOMEM, 0, NULL);
+ return;
+ }
- if (fake_addrinfo(name, port, hints, ai, callback, arg))
- {
- ares_free(alias_name);
- return;
- }
+ if (fake_addrinfo(name, port, hints, ai, callback, arg)) {
+ ares_free(alias_name);
+ return;
+ }
/* Allocate and fill in the host query structure. */
- hquery = ares_malloc(sizeof(struct host_query));
- if (!hquery)
- {
- ares_free(alias_name);
- ares_freeaddrinfo(ai);
- callback(arg, ARES_ENOMEM, 0, NULL);
- return;
- }
-
+ hquery = ares_malloc(sizeof(*hquery));
+ if (!hquery) {
+ ares_free(alias_name);
+ ares_freeaddrinfo(ai);
+ callback(arg, ARES_ENOMEM, 0, NULL);
+ return;
+ }
+ memset(hquery, 0, sizeof(*hquery));
hquery->name = ares_strdup(name);
ares_free(alias_name);
- if (!hquery->name)
- {
- ares_free(hquery);
- ares_freeaddrinfo(ai);
- callback(arg, ARES_ENOMEM, 0, NULL);
- return;
- }
+ if (!hquery->name) {
+ ares_free(hquery);
+ ares_freeaddrinfo(ai);
+ callback(arg, ARES_ENOMEM, 0, NULL);
+ return;
+ }
- hquery->port = port;
- hquery->channel = channel;
- hquery->hints = *hints;
- hquery->sent_family = -1; /* nothing is sent yet */
- hquery->callback = callback;
- hquery->arg = arg;
+ hquery->port = port;
+ hquery->channel = channel;
+ hquery->hints = *hints;
+ hquery->sent_family = -1; /* nothing is sent yet */
+ hquery->callback = callback;
+ hquery->arg = arg;
hquery->remaining_lookups = channel->lookups;
- hquery->timeouts = 0;
- hquery->ai = ai;
- hquery->next_domain = -1;
- hquery->remaining = 0;
- hquery->nodata_cnt = 0;
+ hquery->ai = ai;
+ hquery->next_domain = -1;
/* Start performing lookups according to channel->lookups. */
next_lookup(hquery, ARES_ECONNREFUSED /* initial error code */);
}
-static int next_dns_lookup(struct host_query *hquery)
+static ares_bool_t next_dns_lookup(struct host_query *hquery)
{
- char *s = NULL;
- int is_s_allocated = 0;
- int status;
+ char *s = NULL;
+ ares_bool_t is_s_allocated = ARES_FALSE;
+ ares_status_t status;
/* if next_domain == -1 and as_is_first is true, try hquery->name */
- if (hquery->next_domain == -1)
- {
- if (as_is_first(hquery))
- {
- s = hquery->name;
- }
- hquery->next_domain = 0;
+ if (hquery->next_domain == -1) {
+ if (as_is_first(hquery)) {
+ s = hquery->name;
}
+ hquery->next_domain = 0;
+ }
/* if as_is_first is false, try hquery->name at last */
- if (!s && hquery->next_domain == hquery->channel->ndomains) {
- if (!as_is_first(hquery))
- {
- s = hquery->name;
- }
+ if (!s && (size_t)hquery->next_domain == hquery->channel->ndomains) {
+ if (!as_is_first(hquery)) {
+ s = hquery->name;
+ }
hquery->next_domain++;
}
- if (!s && hquery->next_domain < hquery->channel->ndomains && !as_is_only(hquery))
- {
- status = ares__cat_domain(
- hquery->name,
- hquery->channel->domains[hquery->next_domain++],
- &s);
- if (status == ARES_SUCCESS)
- {
- is_s_allocated = 1;
- }
+ if (!s && (size_t)hquery->next_domain < hquery->channel->ndomains &&
+ !as_is_only(hquery)) {
+ status = ares__cat_domain(
+ hquery->name, hquery->channel->domains[hquery->next_domain++], &s);
+ if (status == ARES_SUCCESS) {
+ is_s_allocated = ARES_TRUE;
}
+ }
- if (s)
- {
- switch (hquery->hints.ai_family)
- {
- case AF_INET:
- hquery->remaining += 1;
- ares_query(hquery->channel, s, C_IN, T_A, host_callback, hquery);
- break;
- case AF_INET6:
- hquery->remaining += 1;
- ares_query(hquery->channel, s, C_IN, T_AAAA, host_callback, hquery);
- break;
- case AF_UNSPEC:
- hquery->remaining += 2;
- ares_query(hquery->channel, s, C_IN, T_A, host_callback, hquery);
- ares_query(hquery->channel, s, C_IN, T_AAAA, host_callback, hquery);
- break;
- default: break;
- }
- if (is_s_allocated)
- {
- ares_free(s);
- }
- return 1;
+ if (s) {
+ /* NOTE: hquery may be invalidated during the call to ares_query_qid(),
+ * so should not be referenced after this point */
+ switch (hquery->hints.ai_family) {
+ case AF_INET:
+ hquery->remaining += 1;
+ ares_query_qid(hquery->channel, s, C_IN, T_A, host_callback, hquery,
+ &hquery->qid_a);
+ break;
+ case AF_INET6:
+ hquery->remaining += 1;
+ ares_query_qid(hquery->channel, s, C_IN, T_AAAA, host_callback, hquery,
+ &hquery->qid_aaaa);
+ break;
+ case AF_UNSPEC:
+ hquery->remaining += 2;
+ ares_query_qid(hquery->channel, s, C_IN, T_A, host_callback, hquery,
+ &hquery->qid_a);
+ ares_query_qid(hquery->channel, s, C_IN, T_AAAA, host_callback, hquery,
+ &hquery->qid_aaaa);
+ break;
+ default:
+ break;
}
- else
- {
- assert(!hquery->ai->nodes);
- return 0;
+ if (is_s_allocated) {
+ ares_free(s);
}
+ return ARES_TRUE;
+ } else {
+ assert(!hquery->ai->nodes);
+ return ARES_FALSE;
+ }
}
-static int as_is_first(const struct host_query* hquery)
+static ares_bool_t as_is_first(const struct host_query *hquery)
{
- char* p;
- int ndots = 0;
- size_t nname = hquery->name?strlen(hquery->name):0;
- for (p = hquery->name; *p; p++)
- {
- if (*p == '.')
- {
- ndots++;
- }
- }
- if (nname && hquery->name[nname-1] == '.')
- {
- /* prevent ARES_EBADNAME for valid FQDN, where ndots < channel->ndots */
- return 1;
+ const char *p;
+ size_t ndots = 0;
+ size_t nname = ares_strlen(hquery->name);
+ for (p = hquery->name; p && *p; p++) {
+ if (*p == '.') {
+ ndots++;
}
- return ndots >= hquery->channel->ndots;
+ }
+ if (hquery->name != NULL && nname && hquery->name[nname - 1] == '.') {
+ /* prevent ARES_EBADNAME for valid FQDN, where ndots < channel->ndots */
+ return ARES_TRUE;
+ }
+ return ndots >= hquery->channel->ndots ? ARES_TRUE : ARES_FALSE;
}
-static int as_is_only(const struct host_query* hquery)
+static ares_bool_t as_is_only(const struct host_query *hquery)
{
- size_t nname = hquery->name?strlen(hquery->name):0;
- if (nname && hquery->name[nname-1] == '.')
- return 1;
- return 0;
+ size_t nname = ares_strlen(hquery->name);
+ if (hquery->name != NULL && nname && hquery->name[nname - 1] == '.') {
+ return ARES_TRUE;
+ }
+ return ARES_FALSE;
}
-
diff --git a/src/lib/ares_getenv.c b/src/lib/ares_getenv.c
index f6e4dc2..08601a6 100644
--- a/src/lib/ares_getenv.c
+++ b/src/lib/ares_getenv.c
@@ -1,18 +1,28 @@
-
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
diff --git a/src/lib/ares_getenv.h b/src/lib/ares_getenv.h
index 6da6cc5..d8bd3a2 100644
--- a/src/lib/ares_getenv.h
+++ b/src/lib/ares_getenv.h
@@ -1,21 +1,31 @@
-#ifndef HEADER_CARES_GETENV_H
-#define HEADER_CARES_GETENV_H
-
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
+#ifndef HEADER_CARES_GETENV_H
+#define HEADER_CARES_GETENV_H
#include "ares_setup.h"
diff --git a/src/lib/ares_gethostbyaddr.c b/src/lib/ares_gethostbyaddr.c
index c62d230..b7b5a29 100644
--- a/src/lib/ares_gethostbyaddr.c
+++ b/src/lib/ares_gethostbyaddr.c
@@ -1,18 +1,30 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
+
#include "ares_setup.h"
#ifdef HAVE_NETINET_IN_H
@@ -33,147 +45,143 @@
#include "ares_private.h"
#ifdef WATT32
-#undef WIN32
+# undef WIN32
#endif
struct addr_query {
/* Arguments passed to ares_gethostbyaddr() */
- ares_channel channel;
- struct ares_addr addr;
+ ares_channel channel;
+ struct ares_addr addr;
ares_host_callback callback;
- void *arg;
+ void *arg;
- const char *remaining_lookups;
- int timeouts;
+ const char *remaining_lookups;
+ size_t timeouts;
};
-static void next_lookup(struct addr_query *aquery);
-static void addr_callback(void *arg, int status, int timeouts,
- unsigned char *abuf, int alen);
-static void end_aquery(struct addr_query *aquery, int status,
- struct hostent *host);
-static int file_lookup(struct ares_addr *addr, struct hostent **host);
-static void ptr_rr_name(char *name, const struct ares_addr *addr);
+static void next_lookup(struct addr_query *aquery);
+static void addr_callback(void *arg, int status, int timeouts,
+ unsigned char *abuf, int alen);
+static void end_aquery(struct addr_query *aquery, ares_status_t status,
+ struct hostent *host);
+static ares_status_t file_lookup(const struct ares_addr *addr,
+ struct hostent **host);
+static void ptr_rr_name(char *name, size_t name_size,
+ const struct ares_addr *addr);
void ares_gethostbyaddr(ares_channel channel, const void *addr, int addrlen,
int family, ares_host_callback callback, void *arg)
{
struct addr_query *aquery;
- if (family != AF_INET && family != AF_INET6)
- {
- callback(arg, ARES_ENOTIMP, 0, NULL);
- return;
- }
+ if (family != AF_INET && family != AF_INET6) {
+ callback(arg, ARES_ENOTIMP, 0, NULL);
+ return;
+ }
if ((family == AF_INET && addrlen != sizeof(aquery->addr.addrV4)) ||
- (family == AF_INET6 && addrlen != sizeof(aquery->addr.addrV6)))
- {
- callback(arg, ARES_ENOTIMP, 0, NULL);
- return;
- }
+ (family == AF_INET6 && addrlen != sizeof(aquery->addr.addrV6))) {
+ callback(arg, ARES_ENOTIMP, 0, NULL);
+ return;
+ }
aquery = ares_malloc(sizeof(struct addr_query));
- if (!aquery)
- {
- callback(arg, ARES_ENOMEM, 0, NULL);
- return;
- }
+ if (!aquery) {
+ callback(arg, ARES_ENOMEM, 0, NULL);
+ return;
+ }
aquery->channel = channel;
- if (family == AF_INET)
+ if (family == AF_INET) {
memcpy(&aquery->addr.addrV4, addr, sizeof(aquery->addr.addrV4));
- else
+ } else {
memcpy(&aquery->addr.addrV6, addr, sizeof(aquery->addr.addrV6));
- aquery->addr.family = family;
- aquery->callback = callback;
- aquery->arg = arg;
+ }
+ aquery->addr.family = family;
+ aquery->callback = callback;
+ aquery->arg = arg;
aquery->remaining_lookups = channel->lookups;
- aquery->timeouts = 0;
+ aquery->timeouts = 0;
next_lookup(aquery);
}
static void next_lookup(struct addr_query *aquery)
{
- const char *p;
- char name[128];
- int status;
+ const char *p;
+ char name[128];
+ ares_status_t status;
struct hostent *host;
- for (p = aquery->remaining_lookups; *p; p++)
- {
- switch (*p)
- {
- case 'b':
- ptr_rr_name(name, &aquery->addr);
- aquery->remaining_lookups = p + 1;
- ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback,
- aquery);
- return;
- case 'f':
- status = file_lookup(&aquery->addr, &host);
+ for (p = aquery->remaining_lookups; *p; p++) {
+ switch (*p) {
+ case 'b':
+ ptr_rr_name(name, sizeof(name), &aquery->addr);
+ aquery->remaining_lookups = p + 1;
+ ares_query(aquery->channel, name, C_IN, T_PTR, addr_callback, aquery);
+ return;
+ case 'f':
+ status = file_lookup(&aquery->addr, &host);
- /* this status check below previously checked for !ARES_ENOTFOUND,
- but we should not assume that this single error code is the one
- that can occur, as that is in fact no longer the case */
- if (status == ARES_SUCCESS)
- {
- end_aquery(aquery, status, host);
- return;
- }
- break;
+ /* this status check below previously checked for !ARES_ENOTFOUND,
+ but we should not assume that this single error code is the one
+ that can occur, as that is in fact no longer the case */
+ if (status == ARES_SUCCESS) {
+ end_aquery(aquery, status, host);
+ return;
}
+ break;
+ default:
+ break;
}
+ }
end_aquery(aquery, ARES_ENOTFOUND, NULL);
}
static void addr_callback(void *arg, int status, int timeouts,
unsigned char *abuf, int alen)
{
- struct addr_query *aquery = (struct addr_query *) arg;
- struct hostent *host;
- size_t addrlen;
+ struct addr_query *aquery = (struct addr_query *)arg;
+ struct hostent *host;
+ size_t addrlen;
- aquery->timeouts += timeouts;
- if (status == ARES_SUCCESS)
- {
- if (aquery->addr.family == AF_INET)
- {
- addrlen = sizeof(aquery->addr.addrV4);
- status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV4,
- (int)addrlen, AF_INET, &host);
- }
- else
- {
- addrlen = sizeof(aquery->addr.addrV6);
- status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV6,
- (int)addrlen, AF_INET6, &host);
- }
- end_aquery(aquery, status, host);
+ aquery->timeouts += (size_t)timeouts;
+ if (status == ARES_SUCCESS) {
+ if (aquery->addr.family == AF_INET) {
+ addrlen = sizeof(aquery->addr.addrV4);
+ status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV4,
+ (int)addrlen, AF_INET, &host);
+ } else {
+ addrlen = sizeof(aquery->addr.addrV6);
+ status = ares_parse_ptr_reply(abuf, alen, &aquery->addr.addrV6,
+ (int)addrlen, AF_INET6, &host);
}
- else if (status == ARES_EDESTRUCTION || status == ARES_ECANCELLED)
- end_aquery(aquery, status, NULL);
- else
+ end_aquery(aquery, (ares_status_t)status, host);
+ } else if (status == ARES_EDESTRUCTION || status == ARES_ECANCELLED) {
+ end_aquery(aquery, (ares_status_t)status, NULL);
+ } else {
next_lookup(aquery);
+ }
}
-static void end_aquery(struct addr_query *aquery, int status,
+static void end_aquery(struct addr_query *aquery, ares_status_t status,
struct hostent *host)
{
- aquery->callback(aquery->arg, status, aquery->timeouts, host);
- if (host)
+ aquery->callback(aquery->arg, (int)status, (int)aquery->timeouts, host);
+ if (host) {
ares_free_hostent(host);
+ }
ares_free(aquery);
}
-static int file_lookup(struct ares_addr *addr, struct hostent **host)
+static ares_status_t file_lookup(const struct ares_addr *addr,
+ struct hostent **host)
{
- FILE *fp;
- int status;
- int error;
+ FILE *fp;
+ ares_status_t status;
+ int error;
#ifdef WIN32
- char PATH_HOSTS[MAX_PATH];
+ char PATH_HOSTS[MAX_PATH];
win_platform platform;
PATH_HOSTS[0] = '\0';
@@ -185,103 +193,94 @@ static int file_lookup(struct ares_addr *addr, struct hostent **host)
HKEY hkeyHosts;
if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ,
- &hkeyHosts) == ERROR_SUCCESS)
- {
+ &hkeyHosts) == ERROR_SUCCESS) {
DWORD dwLength = MAX_PATH;
RegQueryValueExA(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp,
- &dwLength);
+ &dwLength);
ExpandEnvironmentStringsA(tmp, PATH_HOSTS, MAX_PATH);
RegCloseKey(hkeyHosts);
}
- }
- else if (platform == WIN_9X)
+ } else if (platform == WIN_9X) {
GetWindowsDirectoryA(PATH_HOSTS, MAX_PATH);
- else
+ } else {
return ARES_ENOTFOUND;
+ }
strcat(PATH_HOSTS, WIN_PATH_HOSTS);
#elif defined(WATT32)
const char *PATH_HOSTS = _w32_GetHostsFile();
- if (!PATH_HOSTS)
+ if (!PATH_HOSTS) {
return ARES_ENOTFOUND;
+ }
#endif
fp = fopen(PATH_HOSTS, "r");
- if (!fp)
- {
- error = ERRNO;
- switch(error)
- {
- case ENOENT:
- case ESRCH:
- return ARES_ENOTFOUND;
- default:
- DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
- error, strerror(error)));
- DEBUGF(fprintf(stderr, "Error opening file: %s\n",
- PATH_HOSTS));
- *host = NULL;
- return ARES_EFILE;
- }
+ if (!fp) {
+ error = ERRNO;
+ switch (error) {
+ case ENOENT:
+ case ESRCH:
+ return ARES_ENOTFOUND;
+ default:
+ DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", error,
+ strerror(error)));
+ DEBUGF(fprintf(stderr, "Error opening file: %s\n", PATH_HOSTS));
+ *host = NULL;
+ return ARES_EFILE;
}
- while ((status = ares__get_hostent(fp, addr->family, host)) == ARES_SUCCESS)
- {
- if (addr->family != (*host)->h_addrtype)
- {
- ares_free_hostent(*host);
- continue;
- }
- if (addr->family == AF_INET)
- {
- if (memcmp((*host)->h_addr, &addr->addrV4,
- sizeof(addr->addrV4)) == 0)
- break;
- }
- else if (addr->family == AF_INET6)
- {
- if (memcmp((*host)->h_addr, &addr->addrV6,
- sizeof(addr->addrV6)) == 0)
- break;
- }
+ }
+ while ((status = ares__get_hostent(fp, addr->family, host)) == ARES_SUCCESS) {
+ if (addr->family != (*host)->h_addrtype) {
ares_free_hostent(*host);
+ continue;
+ }
+ if (addr->family == AF_INET &&
+ memcmp((*host)->h_addr, &addr->addrV4, sizeof(addr->addrV4)) == 0) {
+ break;
+ } else if (addr->family == AF_INET6 &&
+ memcmp((*host)->h_addr, addr->addrV6._S6_un._S6_u8,
+ sizeof(addr->addrV6)) == 0) {
+ break;
}
+ ares_free_hostent(*host);
+ }
fclose(fp);
- if (status == ARES_EOF)
+ if (status == ARES_EOF) {
status = ARES_ENOTFOUND;
- if (status != ARES_SUCCESS)
+ }
+ if (status != ARES_SUCCESS) {
*host = NULL;
+ }
return status;
}
-static void ptr_rr_name(char *name, const struct ares_addr *addr)
+static void ptr_rr_name(char *name, size_t name_size,
+ const struct ares_addr *addr)
{
- if (addr->family == AF_INET)
- {
- unsigned long laddr = ntohl(addr->addrV4.s_addr);
- unsigned long a1 = (laddr >> 24UL) & 0xFFUL;
- unsigned long a2 = (laddr >> 16UL) & 0xFFUL;
- unsigned long a3 = (laddr >> 8UL) & 0xFFUL;
- unsigned long a4 = laddr & 0xFFUL;
- sprintf(name, "%lu.%lu.%lu.%lu.in-addr.arpa", a4, a3, a2, a1);
- }
- else
- {
- unsigned char *bytes = (unsigned char *)&addr->addrV6;
- /* There are too many arguments to do this in one line using
- * minimally C89-compliant compilers */
- sprintf(name,
- "%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.",
- bytes[15]&0xf, bytes[15] >> 4, bytes[14]&0xf, bytes[14] >> 4,
- bytes[13]&0xf, bytes[13] >> 4, bytes[12]&0xf, bytes[12] >> 4,
- bytes[11]&0xf, bytes[11] >> 4, bytes[10]&0xf, bytes[10] >> 4,
- bytes[9]&0xf, bytes[9] >> 4, bytes[8]&0xf, bytes[8] >> 4);
- sprintf(name+strlen(name),
- "%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.ip6.arpa",
- bytes[7]&0xf, bytes[7] >> 4, bytes[6]&0xf, bytes[6] >> 4,
- bytes[5]&0xf, bytes[5] >> 4, bytes[4]&0xf, bytes[4] >> 4,
- bytes[3]&0xf, bytes[3] >> 4, bytes[2]&0xf, bytes[2] >> 4,
- bytes[1]&0xf, bytes[1] >> 4, bytes[0]&0xf, bytes[0] >> 4);
- }
+ if (addr->family == AF_INET) {
+ unsigned long laddr = ntohl(addr->addrV4.s_addr);
+ unsigned long a1 = (laddr >> 24UL) & 0xFFUL;
+ unsigned long a2 = (laddr >> 16UL) & 0xFFUL;
+ unsigned long a3 = (laddr >> 8UL) & 0xFFUL;
+ unsigned long a4 = laddr & 0xFFUL;
+ snprintf(name, name_size, "%lu.%lu.%lu.%lu.in-addr.arpa", a4, a3, a2, a1);
+ } else {
+ const unsigned char *bytes = (const unsigned char *)&addr->addrV6;
+ /* There are too many arguments to do this in one line using
+ * minimally C89-compliant compilers */
+ snprintf(name, name_size,
+ "%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.",
+ bytes[15] & 0xf, bytes[15] >> 4, bytes[14] & 0xf, bytes[14] >> 4,
+ bytes[13] & 0xf, bytes[13] >> 4, bytes[12] & 0xf, bytes[12] >> 4,
+ bytes[11] & 0xf, bytes[11] >> 4, bytes[10] & 0xf, bytes[10] >> 4,
+ bytes[9] & 0xf, bytes[9] >> 4, bytes[8] & 0xf, bytes[8] >> 4);
+ snprintf(name + ares_strlen(name), name_size - ares_strlen(name),
+ "%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.%x.ip6.arpa",
+ bytes[7] & 0xf, bytes[7] >> 4, bytes[6] & 0xf, bytes[6] >> 4,
+ bytes[5] & 0xf, bytes[5] >> 4, bytes[4] & 0xf, bytes[4] >> 4,
+ bytes[3] & 0xf, bytes[3] >> 4, bytes[2] & 0xf, bytes[2] >> 4,
+ bytes[1] & 0xf, bytes[1] >> 4, bytes[0] & 0xf, bytes[0] >> 4);
+ }
}
diff --git a/src/lib/ares_gethostbyname.c b/src/lib/ares_gethostbyname.c
index 8c71cc6..1c3ecf8 100644
--- a/src/lib/ares_gethostbyname.c
+++ b/src/lib/ares_gethostbyname.c
@@ -1,16 +1,28 @@
-/* Copyright 1998, 2011, 2013 by the Massachusetts Institute of Technology.
+/* MIT License
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * Copyright (c) 1998, 2011, 2013 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -28,60 +40,58 @@
#include "ares_nameser.h"
#ifdef HAVE_STRINGS_H
-#include <strings.h>
+# include <strings.h>
#endif
#include "ares.h"
#include "ares_inet_net_pton.h"
#include "bitncmp.h"
#include "ares_platform.h"
-#include "ares_nowarn.h"
#include "ares_private.h"
-static void sort_addresses(struct hostent *host,
- const struct apattern *sortlist, int nsort);
-static void sort6_addresses(struct hostent *host,
- const struct apattern *sortlist, int nsort);
-static int get_address_index(const struct in_addr *addr,
- const struct apattern *sortlist, int nsort);
-static int get6_address_index(const struct ares_in6_addr *addr,
- const struct apattern *sortlist, int nsort);
+static void sort_addresses(const struct hostent *host,
+ const struct apattern *sortlist, size_t nsort);
+static void sort6_addresses(const struct hostent *host,
+ const struct apattern *sortlist, size_t nsort);
+static size_t get_address_index(const struct in_addr *addr,
+ const struct apattern *sortlist, size_t nsort);
+static size_t get6_address_index(const struct ares_in6_addr *addr,
+ const struct apattern *sortlist, size_t nsort);
struct host_query {
ares_host_callback callback;
- void *arg;
- ares_channel channel;
+ void *arg;
+ ares_channel channel;
};
static void ares_gethostbyname_callback(void *arg, int status, int timeouts,
struct ares_addrinfo *result)
{
- struct hostent *hostent = NULL;
+ struct hostent *hostent = NULL;
struct host_query *ghbn_arg = arg;
- if (status == ARES_SUCCESS)
- {
- status = ares__addrinfo2hostent(result, AF_UNSPEC, &hostent);
- }
+ if (status == ARES_SUCCESS) {
+ status = (int)ares__addrinfo2hostent(result, AF_UNSPEC, &hostent);
+ }
/* addrinfo2hostent will only return ENODATA if there are no addresses _and_
* no cname/aliases. However, gethostbyname will return ENODATA even if there
* is cname/alias data */
if (status == ARES_SUCCESS && hostent &&
- (!hostent->h_addr_list || !hostent->h_addr_list[0]))
- {
- status = ARES_ENODATA;
- }
+ (!hostent->h_addr_list || !hostent->h_addr_list[0])) {
+ status = ARES_ENODATA;
+ }
- if (status == ARES_SUCCESS && ghbn_arg->channel->nsort && hostent)
- {
- if (hostent->h_addrtype == AF_INET6)
- sort6_addresses(hostent, ghbn_arg->channel->sortlist,
- ghbn_arg->channel->nsort);
- if (hostent->h_addrtype == AF_INET)
- sort_addresses(hostent, ghbn_arg->channel->sortlist,
- ghbn_arg->channel->nsort);
+ if (status == ARES_SUCCESS && ghbn_arg->channel->nsort && hostent) {
+ if (hostent->h_addrtype == AF_INET6) {
+ sort6_addresses(hostent, ghbn_arg->channel->sortlist,
+ ghbn_arg->channel->nsort);
+ }
+ if (hostent->h_addrtype == AF_INET) {
+ sort_addresses(hostent, ghbn_arg->channel->sortlist,
+ ghbn_arg->channel->nsort);
}
+ }
ghbn_arg->callback(ghbn_arg->arg, status, timeouts, hostent);
@@ -94,170 +104,171 @@ void ares_gethostbyname(ares_channel channel, const char *name, int family,
ares_host_callback callback, void *arg)
{
const struct ares_addrinfo_hints hints = { ARES_AI_CANONNAME, family, 0, 0 };
- struct host_query *ghbn_arg;
+ struct host_query *ghbn_arg;
- if (!callback)
+ if (!callback) {
return;
+ }
ghbn_arg = ares_malloc(sizeof(*ghbn_arg));
- if (!ghbn_arg)
- {
- callback(arg, ARES_ENOMEM, 0, NULL);
- return;
- }
+ if (!ghbn_arg) {
+ callback(arg, ARES_ENOMEM, 0, NULL);
+ return;
+ }
- ghbn_arg->callback=callback;
- ghbn_arg->arg=arg;
- ghbn_arg->channel=channel;
+ ghbn_arg->callback = callback;
+ ghbn_arg->arg = arg;
+ ghbn_arg->channel = channel;
ares_getaddrinfo(channel, name, NULL, &hints, ares_gethostbyname_callback,
ghbn_arg);
}
-
-static void sort_addresses(struct hostent *host,
- const struct apattern *sortlist, int nsort)
+static void sort_addresses(const struct hostent *host,
+ const struct apattern *sortlist, size_t nsort)
{
- struct in_addr a1, a2;
- int i1, i2, ind1, ind2;
+ struct in_addr a1;
+ struct in_addr a2;
+ int i1;
+ int i2;
+ size_t ind1;
+ size_t ind2;
/* This is a simple insertion sort, not optimized at all. i1 walks
* through the address list, with the loop invariant that everything
* to the left of i1 is sorted. In the loop body, the value at i1 is moved
* back through the list (via i2) until it is in sorted order.
*/
- for (i1 = 0; host->h_addr_list[i1]; i1++)
- {
- memcpy(&a1, host->h_addr_list[i1], sizeof(struct in_addr));
- ind1 = get_address_index(&a1, sortlist, nsort);
- for (i2 = i1 - 1; i2 >= 0; i2--)
- {
- memcpy(&a2, host->h_addr_list[i2], sizeof(struct in_addr));
- ind2 = get_address_index(&a2, sortlist, nsort);
- if (ind2 <= ind1)
- break;
- memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct in_addr));
- }
- memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct in_addr));
+ for (i1 = 0; host->h_addr_list[i1]; i1++) {
+ memcpy(&a1, host->h_addr_list[i1], sizeof(struct in_addr));
+ ind1 = get_address_index(&a1, sortlist, nsort);
+ for (i2 = i1 - 1; i2 >= 0; i2--) {
+ memcpy(&a2, host->h_addr_list[i2], sizeof(struct in_addr));
+ ind2 = get_address_index(&a2, sortlist, nsort);
+ if (ind2 <= ind1) {
+ break;
+ }
+ memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct in_addr));
}
+ memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct in_addr));
+ }
}
/* Find the first entry in sortlist which matches addr. Return nsort
* if none of them match.
*/
-static int get_address_index(const struct in_addr *addr,
- const struct apattern *sortlist,
- int nsort)
+static size_t get_address_index(const struct in_addr *addr,
+ const struct apattern *sortlist, size_t nsort)
{
- int i;
-
- for (i = 0; i < nsort; i++)
- {
- if (sortlist[i].family != AF_INET)
- continue;
- if (sortlist[i].type == PATTERN_MASK)
- {
- if ((addr->s_addr & sortlist[i].mask.addr4.s_addr)
- == sortlist[i].addrV4.s_addr)
- break;
- }
- else
- {
- if (!ares__bitncmp(&addr->s_addr, &sortlist[i].addrV4.s_addr,
- sortlist[i].mask.bits))
- break;
- }
+ size_t i;
+
+ for (i = 0; i < nsort; i++) {
+ if (sortlist[i].family != AF_INET) {
+ continue;
}
+ if (sortlist[i].type == PATTERN_MASK) {
+ if ((addr->s_addr & sortlist[i].mask.addr4.s_addr) ==
+ sortlist[i].addrV4.s_addr) {
+ break;
+ }
+ } else {
+ if (!ares__bitncmp(&addr->s_addr, &sortlist[i].addrV4.s_addr,
+ sortlist[i].mask.bits)) {
+ break;
+ }
+ }
+ }
return i;
}
-static void sort6_addresses(struct hostent *host,
- const struct apattern *sortlist, int nsort)
+static void sort6_addresses(const struct hostent *host,
+ const struct apattern *sortlist, size_t nsort)
{
- struct ares_in6_addr a1, a2;
- int i1, i2, ind1, ind2;
+ struct ares_in6_addr a1;
+ struct ares_in6_addr a2;
+ int i1;
+ int i2;
+ size_t ind1;
+ size_t ind2;
/* This is a simple insertion sort, not optimized at all. i1 walks
* through the address list, with the loop invariant that everything
* to the left of i1 is sorted. In the loop body, the value at i1 is moved
* back through the list (via i2) until it is in sorted order.
*/
- for (i1 = 0; host->h_addr_list[i1]; i1++)
- {
- memcpy(&a1, host->h_addr_list[i1], sizeof(struct ares_in6_addr));
- ind1 = get6_address_index(&a1, sortlist, nsort);
- for (i2 = i1 - 1; i2 >= 0; i2--)
- {
- memcpy(&a2, host->h_addr_list[i2], sizeof(struct ares_in6_addr));
- ind2 = get6_address_index(&a2, sortlist, nsort);
- if (ind2 <= ind1)
- break;
- memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct ares_in6_addr));
- }
- memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct ares_in6_addr));
+ for (i1 = 0; host->h_addr_list[i1]; i1++) {
+ memcpy(&a1, host->h_addr_list[i1], sizeof(struct ares_in6_addr));
+ ind1 = get6_address_index(&a1, sortlist, nsort);
+ for (i2 = i1 - 1; i2 >= 0; i2--) {
+ memcpy(&a2, host->h_addr_list[i2], sizeof(struct ares_in6_addr));
+ ind2 = get6_address_index(&a2, sortlist, nsort);
+ if (ind2 <= ind1) {
+ break;
+ }
+ memcpy(host->h_addr_list[i2 + 1], &a2, sizeof(struct ares_in6_addr));
}
+ memcpy(host->h_addr_list[i2 + 1], &a1, sizeof(struct ares_in6_addr));
+ }
}
/* Find the first entry in sortlist which matches addr. Return nsort
* if none of them match.
*/
-static int get6_address_index(const struct ares_in6_addr *addr,
- const struct apattern *sortlist,
- int nsort)
+static size_t get6_address_index(const struct ares_in6_addr *addr,
+ const struct apattern *sortlist, size_t nsort)
{
- int i;
+ size_t i;
- for (i = 0; i < nsort; i++)
- {
- if (sortlist[i].family != AF_INET6)
- continue;
- if (!ares__bitncmp(addr, &sortlist[i].addrV6, sortlist[i].mask.bits))
- break;
+ for (i = 0; i < nsort; i++) {
+ if (sortlist[i].family != AF_INET6) {
+ continue;
+ }
+ if (!ares__bitncmp(addr, &sortlist[i].addrV6, sortlist[i].mask.bits)) {
+ break;
}
+ }
return i;
}
-
-
-static int file_lookup(const char *name, int family, struct hostent **host);
+static ares_status_t file_lookup(const char *name, int family,
+ struct hostent **host);
/* I really have no idea why this is exposed as a public function, but since
* it is, we can't kill this legacy function. */
-int ares_gethostbyname_file(ares_channel channel, const char *name,
- int family, struct hostent **host)
+int ares_gethostbyname_file(ares_channel channel, const char *name, int family,
+ struct hostent **host)
{
- int result;
+ ares_status_t status;
/* We only take the channel to ensure that ares_init() been called. */
- if(channel == NULL)
- {
- /* Anything will do, really. This seems fine, and is consistent with
- other error cases. */
- *host = NULL;
- return ARES_ENOTFOUND;
- }
+ if (channel == NULL) {
+ /* Anything will do, really. This seems fine, and is consistent with
+ other error cases. */
+ *host = NULL;
+ return ARES_ENOTFOUND;
+ }
/* Just chain to the internal implementation we use here; it's exactly
* what we want.
*/
- result = file_lookup(name, family, host);
- if(result != ARES_SUCCESS)
- {
- /* We guarantee a NULL hostent on failure. */
- *host = NULL;
- }
- return result;
+ status = file_lookup(name, family, host);
+ if (status != ARES_SUCCESS) {
+ /* We guarantee a NULL hostent on failure. */
+ *host = NULL;
+ }
+ return (int)status;
}
-static int file_lookup(const char *name, int family, struct hostent **host)
+static ares_status_t file_lookup(const char *name, int family,
+ struct hostent **host)
{
- FILE *fp;
- char **alias;
- int status;
- int error;
+ FILE *fp;
+ char **alias;
+ ares_status_t status;
+ int error;
#ifdef WIN32
- char PATH_HOSTS[MAX_PATH];
+ char PATH_HOSTS[MAX_PATH];
win_platform platform;
PATH_HOSTS[0] = '\0';
@@ -269,70 +280,70 @@ static int file_lookup(const char *name, int family, struct hostent **host)
HKEY hkeyHosts;
if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ,
- &hkeyHosts) == ERROR_SUCCESS)
- {
+ &hkeyHosts) == ERROR_SUCCESS) {
DWORD dwLength = MAX_PATH;
RegQueryValueExA(hkeyHosts, DATABASEPATH, NULL, NULL, (LPBYTE)tmp,
- &dwLength);
+ &dwLength);
ExpandEnvironmentStringsA(tmp, PATH_HOSTS, MAX_PATH);
RegCloseKey(hkeyHosts);
}
- }
- else if (platform == WIN_9X)
+ } else if (platform == WIN_9X) {
GetWindowsDirectoryA(PATH_HOSTS, MAX_PATH);
- else
+ } else {
return ARES_ENOTFOUND;
+ }
strcat(PATH_HOSTS, WIN_PATH_HOSTS);
#elif defined(WATT32)
const char *PATH_HOSTS = _w32_GetHostsFile();
- if (!PATH_HOSTS)
+ if (!PATH_HOSTS) {
return ARES_ENOTFOUND;
+ }
#endif
/* Per RFC 7686, reject queries for ".onion" domain names with NXDOMAIN. */
- if (ares__is_onion_domain(name))
+ if (ares__is_onion_domain(name)) {
return ARES_ENOTFOUND;
+ }
fp = fopen(PATH_HOSTS, "r");
- if (!fp)
- {
- error = ERRNO;
- switch(error)
- {
- case ENOENT:
- case ESRCH:
- return ARES_ENOTFOUND;
- default:
- DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
- error, strerror(error)));
- DEBUGF(fprintf(stderr, "Error opening file: %s\n",
- PATH_HOSTS));
- *host = NULL;
- return ARES_EFILE;
- }
+ if (!fp) {
+ error = ERRNO;
+ switch (error) {
+ case ENOENT:
+ case ESRCH:
+ return ARES_ENOTFOUND;
+ default:
+ DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", error,
+ strerror(error)));
+ DEBUGF(fprintf(stderr, "Error opening file: %s\n", PATH_HOSTS));
+ *host = NULL;
+ return ARES_EFILE;
}
- while ((status = ares__get_hostent(fp, family, host)) == ARES_SUCCESS)
- {
- if (strcasecmp((*host)->h_name, name) == 0)
- break;
- for (alias = (*host)->h_aliases; *alias; alias++)
- {
- if (strcasecmp(*alias, name) == 0)
- break;
- }
- if (*alias)
+ }
+ while ((status = ares__get_hostent(fp, family, host)) == ARES_SUCCESS) {
+ if (strcasecmp((*host)->h_name, name) == 0) {
+ break;
+ }
+ for (alias = (*host)->h_aliases; *alias; alias++) {
+ if (strcasecmp(*alias, name) == 0) {
break;
- ares_free_hostent(*host);
+ }
+ }
+ if (*alias) {
+ break;
}
+ ares_free_hostent(*host);
+ }
fclose(fp);
- if (status == ARES_EOF)
+ if (status == ARES_EOF) {
status = ARES_ENOTFOUND;
- if (status != ARES_SUCCESS)
+ }
+ if (status != ARES_SUCCESS) {
*host = NULL;
+ }
return status;
}
-
diff --git a/src/lib/ares_getnameinfo.c b/src/lib/ares_getnameinfo.c
index 966919a..b9de85e 100644
--- a/src/lib/ares_getnameinfo.c
+++ b/src/lib/ares_getnameinfo.c
@@ -1,23 +1,33 @@
-
-/* Copyright 2005 by Dominick Meglio
+/* MIT License
+ *
+ * Copyright (c) 2005, 2013 Dominick Meglio
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
#ifdef HAVE_GETSERVBYPORT_R
-# if !defined(GETSERVBYPORT_R_ARGS) || \
- (GETSERVBYPORT_R_ARGS < 4) || (GETSERVBYPORT_R_ARGS > 6)
+# if !defined(GETSERVBYPORT_R_ARGS) || (GETSERVBYPORT_R_ARGS < 4) || \
+ (GETSERVBYPORT_R_ARGS > 6)
# error "you MUST specifiy a valid number of arguments for getservbyport_r"
# endif
#endif
@@ -35,413 +45,391 @@
#include "ares_nameser.h"
#ifdef HAVE_NET_IF_H
-#include <net/if.h>
+# include <net/if.h>
#endif
#include "ares.h"
#include "ares_ipv6.h"
-#include "ares_nowarn.h"
#include "ares_private.h"
struct nameinfo_query {
ares_nameinfo_callback callback;
- void *arg;
+ void *arg;
+
union {
- struct sockaddr_in addr4;
+ struct sockaddr_in addr4;
struct sockaddr_in6 addr6;
} addr;
- int family;
- int flags;
- int timeouts;
+
+ int family;
+ unsigned int flags;
+ size_t timeouts;
};
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
-#define IPBUFSIZ \
- (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255") + IF_NAMESIZE)
+# define IPBUFSIZ \
+ (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255") + IF_NAMESIZE)
#else
-#define IPBUFSIZ \
- (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"))
+# define IPBUFSIZ (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255"))
#endif
-static void nameinfo_callback(void *arg, int status, int timeouts,
- struct hostent *host);
-static char *lookup_service(unsigned short port, int flags,
- char *buf, size_t buflen);
+static void nameinfo_callback(void *arg, int status, int timeouts,
+ struct hostent *host);
+static char *lookup_service(unsigned short port, unsigned int flags, char *buf,
+ size_t buflen);
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
-static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int scopeid,
- char *buf, size_t buflen);
+static void append_scopeid(const struct sockaddr_in6 *addr6,
+ unsigned int scopeid, char *buf, size_t buflen);
#endif
STATIC_TESTABLE char *ares_striendstr(const char *s1, const char *s2);
void ares_getnameinfo(ares_channel channel, const struct sockaddr *sa,
- ares_socklen_t salen,
- int flags, ares_nameinfo_callback callback, void *arg)
+ ares_socklen_t salen, int flags_int,
+ ares_nameinfo_callback callback, void *arg)
{
- struct sockaddr_in *addr = NULL;
- struct sockaddr_in6 *addr6 = NULL;
- struct nameinfo_query *niquery;
- unsigned int port = 0;
+ const struct sockaddr_in *addr = NULL;
+ struct sockaddr_in6 *addr6 = NULL;
+ struct nameinfo_query *niquery;
+ unsigned short port = 0;
+ unsigned int flags = (unsigned int)flags_int;
/* Validate socket address family and length */
- if ((sa->sa_family == AF_INET) &&
- (salen == sizeof(struct sockaddr_in)))
- {
- addr = CARES_INADDR_CAST(struct sockaddr_in *, sa);
- port = addr->sin_port;
- }
- else if ((sa->sa_family == AF_INET6) &&
- (salen == sizeof(struct sockaddr_in6)))
- {
- addr6 = CARES_INADDR_CAST(struct sockaddr_in6 *, sa);
- port = addr6->sin6_port;
- }
- else
- {
- callback(arg, ARES_ENOTIMP, 0, NULL, NULL);
- return;
- }
+ if ((sa->sa_family == AF_INET) && (salen == sizeof(struct sockaddr_in))) {
+ addr = CARES_INADDR_CAST(struct sockaddr_in *, sa);
+ port = addr->sin_port;
+ } else if ((sa->sa_family == AF_INET6) &&
+ (salen == sizeof(struct sockaddr_in6))) {
+ addr6 = CARES_INADDR_CAST(struct sockaddr_in6 *, sa);
+ port = addr6->sin6_port;
+ } else {
+ callback(arg, ARES_ENOTIMP, 0, NULL, NULL);
+ return;
+ }
/* If neither, assume they want a host */
- if (!(flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST))
+ if (!(flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST)) {
flags |= ARES_NI_LOOKUPHOST;
+ }
/* All they want is a service, no need for DNS */
- if ((flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST))
- {
- char buf[33], *service;
+ if ((flags & ARES_NI_LOOKUPSERVICE) && !(flags & ARES_NI_LOOKUPHOST)) {
+ char buf[33];
+ char *service;
- service = lookup_service((unsigned short)(port & 0xffff),
- flags, buf, sizeof(buf));
- callback(arg, ARES_SUCCESS, 0, NULL, service);
- return;
- }
+ service =
+ lookup_service((unsigned short)(port & 0xffff), flags, buf, sizeof(buf));
+ callback(arg, ARES_SUCCESS, 0, NULL, service);
+ return;
+ }
/* They want a host lookup */
- if ((flags & ARES_NI_LOOKUPHOST))
- {
- /* A numeric host can be handled without DNS */
- if ((flags & ARES_NI_NUMERICHOST))
- {
- char ipbuf[IPBUFSIZ];
- char srvbuf[33];
- char *service = NULL;
- ipbuf[0] = 0;
-
- /* Specifying not to lookup a host, but then saying a host
- * is required has to be illegal.
- */
- if (flags & ARES_NI_NAMEREQD)
- {
- callback(arg, ARES_EBADFLAGS, 0, NULL, NULL);
- return;
- }
- if (salen == sizeof(struct sockaddr_in6))
- {
- ares_inet_ntop(AF_INET6, &addr6->sin6_addr, ipbuf, IPBUFSIZ);
- /* If the system supports scope IDs, use it */
+ if (flags & ARES_NI_LOOKUPHOST) {
+ /* A numeric host can be handled without DNS */
+ if (flags & ARES_NI_NUMERICHOST) {
+ char ipbuf[IPBUFSIZ];
+ char srvbuf[33];
+ char *service = NULL;
+ ipbuf[0] = 0;
+
+ /* Specifying not to lookup a host, but then saying a host
+ * is required has to be illegal.
+ */
+ if (flags & ARES_NI_NAMEREQD) {
+ callback(arg, ARES_EBADFLAGS, 0, NULL, NULL);
+ return;
+ }
+ if (salen == sizeof(struct sockaddr_in6)) {
+ ares_inet_ntop(AF_INET6, &addr6->sin6_addr, ipbuf, IPBUFSIZ);
+ /* If the system supports scope IDs, use it */
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
- append_scopeid(addr6, flags, ipbuf, sizeof(ipbuf));
+ append_scopeid(addr6, flags, ipbuf, sizeof(ipbuf));
#endif
- }
- else
- {
- ares_inet_ntop(AF_INET, &addr->sin_addr, ipbuf, IPBUFSIZ);
- }
- /* They also want a service */
- if (flags & ARES_NI_LOOKUPSERVICE)
- service = lookup_service((unsigned short)(port & 0xffff),
- flags, srvbuf, sizeof(srvbuf));
- callback(arg, ARES_SUCCESS, 0, ipbuf, service);
- return;
+ } else {
+ ares_inet_ntop(AF_INET, &addr->sin_addr, ipbuf, IPBUFSIZ);
+ }
+ /* They also want a service */
+ if (flags & ARES_NI_LOOKUPSERVICE) {
+ service = lookup_service((unsigned short)(port & 0xffff), flags, srvbuf,
+ sizeof(srvbuf));
}
+ callback(arg, ARES_SUCCESS, 0, ipbuf, service);
+ return;
+ }
/* This is where a DNS lookup becomes necessary */
- else
- {
- niquery = ares_malloc(sizeof(struct nameinfo_query));
- if (!niquery)
- {
- callback(arg, ARES_ENOMEM, 0, NULL, NULL);
- return;
- }
- niquery->callback = callback;
- niquery->arg = arg;
- niquery->flags = flags;
- niquery->timeouts = 0;
- if (sa->sa_family == AF_INET)
- {
- niquery->family = AF_INET;
- memcpy(&niquery->addr.addr4, addr, sizeof(niquery->addr.addr4));
- ares_gethostbyaddr(channel, &addr->sin_addr,
- sizeof(struct in_addr), AF_INET,
- nameinfo_callback, niquery);
- }
- else
- {
- niquery->family = AF_INET6;
- memcpy(&niquery->addr.addr6, addr6, sizeof(niquery->addr.addr6));
- ares_gethostbyaddr(channel, &addr6->sin6_addr,
- sizeof(struct ares_in6_addr), AF_INET6,
- nameinfo_callback, niquery);
- }
+ else {
+ niquery = ares_malloc(sizeof(struct nameinfo_query));
+ if (!niquery) {
+ callback(arg, ARES_ENOMEM, 0, NULL, NULL);
+ return;
+ }
+ niquery->callback = callback;
+ niquery->arg = arg;
+ niquery->flags = flags;
+ niquery->timeouts = 0;
+ if (sa->sa_family == AF_INET) {
+ niquery->family = AF_INET;
+ memcpy(&niquery->addr.addr4, addr, sizeof(niquery->addr.addr4));
+ ares_gethostbyaddr(channel, &addr->sin_addr, sizeof(struct in_addr),
+ AF_INET, nameinfo_callback, niquery);
+ } else {
+ niquery->family = AF_INET6;
+ memcpy(&niquery->addr.addr6, addr6, sizeof(niquery->addr.addr6));
+ ares_gethostbyaddr(channel, &addr6->sin6_addr,
+ sizeof(struct ares_in6_addr), AF_INET6,
+ nameinfo_callback, niquery);
}
}
+ }
}
static void nameinfo_callback(void *arg, int status, int timeouts,
struct hostent *host)
{
- struct nameinfo_query *niquery = (struct nameinfo_query *) arg;
- char srvbuf[33];
- char *service = NULL;
-
- niquery->timeouts += timeouts;
- if (status == ARES_SUCCESS)
- {
- /* They want a service too */
- if (niquery->flags & ARES_NI_LOOKUPSERVICE)
- {
- if (niquery->family == AF_INET)
- service = lookup_service(niquery->addr.addr4.sin_port,
- niquery->flags, srvbuf, sizeof(srvbuf));
- else
- service = lookup_service(niquery->addr.addr6.sin6_port,
- niquery->flags, srvbuf, sizeof(srvbuf));
- }
- /* NOFQDN means we have to strip off the domain name portion. We do
- this by determining our own domain name, then searching the string
- for this domain name and removing it.
- */
+ struct nameinfo_query *niquery = (struct nameinfo_query *)arg;
+ char srvbuf[33];
+ char *service = NULL;
+
+ niquery->timeouts += (size_t)timeouts;
+ if (status == ARES_SUCCESS) {
+ /* They want a service too */
+ if (niquery->flags & ARES_NI_LOOKUPSERVICE) {
+ if (niquery->family == AF_INET) {
+ service = lookup_service(niquery->addr.addr4.sin_port, niquery->flags,
+ srvbuf, sizeof(srvbuf));
+ } else {
+ service = lookup_service(niquery->addr.addr6.sin6_port, niquery->flags,
+ srvbuf, sizeof(srvbuf));
+ }
+ }
+ /* NOFQDN means we have to strip off the domain name portion. We do
+ this by determining our own domain name, then searching the string
+ for this domain name and removing it.
+ */
#ifdef HAVE_GETHOSTNAME
- if (niquery->flags & ARES_NI_NOFQDN)
- {
- char buf[255];
- char *domain;
- gethostname(buf, 255);
- if ((domain = strchr(buf, '.')) != NULL)
- {
- char *end = ares_striendstr(host->h_name, domain);
- if (end)
- *end = 0;
- }
+ if (niquery->flags & ARES_NI_NOFQDN) {
+ char buf[255];
+ const char *domain;
+ gethostname(buf, 255);
+ if ((domain = strchr(buf, '.')) != NULL) {
+ char *end = ares_striendstr(host->h_name, domain);
+ if (end) {
+ *end = 0;
}
-#endif
- niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts,
- (char *)(host->h_name),
- service);
- ares_free(niquery);
- return;
+ }
}
+#endif
+ niquery->callback(niquery->arg, ARES_SUCCESS, (int)niquery->timeouts,
+ host->h_name, service);
+ ares_free(niquery);
+ return;
+ }
/* We couldn't find the host, but it's OK, we can use the IP */
- else if (status == ARES_ENOTFOUND && !(niquery->flags & ARES_NI_NAMEREQD))
- {
- char ipbuf[IPBUFSIZ];
- if (niquery->family == AF_INET)
- ares_inet_ntop(AF_INET, &niquery->addr.addr4.sin_addr, ipbuf,
- IPBUFSIZ);
- else
- {
- ares_inet_ntop(AF_INET6, &niquery->addr.addr6.sin6_addr, ipbuf,
- IPBUFSIZ);
+ else if (status == ARES_ENOTFOUND && !(niquery->flags & ARES_NI_NAMEREQD)) {
+ char ipbuf[IPBUFSIZ];
+ if (niquery->family == AF_INET) {
+ ares_inet_ntop(AF_INET, &niquery->addr.addr4.sin_addr, ipbuf, IPBUFSIZ);
+ } else {
+ ares_inet_ntop(AF_INET6, &niquery->addr.addr6.sin6_addr, ipbuf, IPBUFSIZ);
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
- append_scopeid(&niquery->addr.addr6, niquery->flags, ipbuf,
- sizeof(ipbuf));
+ append_scopeid(&niquery->addr.addr6, niquery->flags, ipbuf,
+ sizeof(ipbuf));
#endif
- }
- /* They want a service too */
- if (niquery->flags & ARES_NI_LOOKUPSERVICE)
- {
- if (niquery->family == AF_INET)
- service = lookup_service(niquery->addr.addr4.sin_port,
- niquery->flags, srvbuf, sizeof(srvbuf));
- else
- service = lookup_service(niquery->addr.addr6.sin6_port,
- niquery->flags, srvbuf, sizeof(srvbuf));
- }
- niquery->callback(niquery->arg, ARES_SUCCESS, niquery->timeouts, ipbuf,
- service);
- ares_free(niquery);
- return;
}
- niquery->callback(niquery->arg, status, niquery->timeouts, NULL, NULL);
+ /* They want a service too */
+ if (niquery->flags & ARES_NI_LOOKUPSERVICE) {
+ if (niquery->family == AF_INET) {
+ service = lookup_service(niquery->addr.addr4.sin_port, niquery->flags,
+ srvbuf, sizeof(srvbuf));
+ } else {
+ service = lookup_service(niquery->addr.addr6.sin6_port, niquery->flags,
+ srvbuf, sizeof(srvbuf));
+ }
+ }
+ niquery->callback(niquery->arg, ARES_SUCCESS, (int)niquery->timeouts, ipbuf,
+ service);
+ ares_free(niquery);
+ return;
+ }
+ niquery->callback(niquery->arg, status, (int)niquery->timeouts, NULL, NULL);
ares_free(niquery);
}
-static char *lookup_service(unsigned short port, int flags,
- char *buf, size_t buflen)
+static char *lookup_service(unsigned short port, unsigned int flags, char *buf,
+ size_t buflen)
{
- const char *proto;
+ const char *proto;
struct servent *sep;
#ifdef HAVE_GETSERVBYPORT_R
struct servent se;
#endif
- char tmpbuf[4096];
- char *name;
- size_t name_len;
+ char tmpbuf[4096];
+ const char *name;
+ size_t name_len;
- if (port)
- {
- if (flags & ARES_NI_NUMERICSERV)
- sep = NULL;
- else
- {
- if (flags & ARES_NI_UDP)
- proto = "udp";
- else if (flags & ARES_NI_SCTP)
- proto = "sctp";
- else if (flags & ARES_NI_DCCP)
- proto = "dccp";
- else
- proto = "tcp";
+ if (port) {
+ if (flags & ARES_NI_NUMERICSERV) {
+ sep = NULL;
+ } else {
+ if (flags & ARES_NI_UDP) {
+ proto = "udp";
+ } else if (flags & ARES_NI_SCTP) {
+ proto = "sctp";
+ } else if (flags & ARES_NI_DCCP) {
+ proto = "dccp";
+ } else {
+ proto = "tcp";
+ }
#ifdef HAVE_GETSERVBYPORT_R
- memset(&se, 0, sizeof(se));
- sep = &se;
- memset(tmpbuf, 0, sizeof(tmpbuf));
-#if GETSERVBYPORT_R_ARGS == 6
- if (getservbyport_r(port, proto, &se, (void *)tmpbuf,
- sizeof(tmpbuf), &sep) != 0)
- sep = NULL; /* LCOV_EXCL_LINE: buffer large so this never fails */
-#elif GETSERVBYPORT_R_ARGS == 5
- sep = getservbyport_r(port, proto, &se, (void *)tmpbuf,
- sizeof(tmpbuf));
-#elif GETSERVBYPORT_R_ARGS == 4
- if (getservbyport_r(port, proto, &se, (void *)tmpbuf) != 0)
- sep = NULL;
-#else
- /* Lets just hope the OS uses TLS! */
- sep = getservbyport(port, proto);
-#endif
-#else
- /* Lets just hope the OS uses TLS! */
-#if (defined(NETWARE) && !defined(__NOVELL_LIBC__))
- sep = getservbyport(port, (char*)proto);
+ memset(&se, 0, sizeof(se));
+ sep = &se;
+ memset(tmpbuf, 0, sizeof(tmpbuf));
+# if GETSERVBYPORT_R_ARGS == 6
+ if (getservbyport_r(port, proto, &se, (void *)tmpbuf, sizeof(tmpbuf),
+ &sep) != 0) {
+ sep = NULL; /* LCOV_EXCL_LINE: buffer large so this never fails */
+ }
+# elif GETSERVBYPORT_R_ARGS == 5
+ sep = getservbyport_r(port, proto, &se, (void *)tmpbuf, sizeof(tmpbuf));
+# elif GETSERVBYPORT_R_ARGS == 4
+ if (getservbyport_r(port, proto, &se, (void *)tmpbuf) != 0) {
+ sep = NULL;
+ }
+# else
+ /* Lets just hope the OS uses TLS! */
+ sep = getservbyport(port, proto);
+# endif
#else
- sep = getservbyport(port, proto);
-#endif
+ /* Lets just hope the OS uses TLS! */
+# if (defined(NETWARE) && !defined(__NOVELL_LIBC__))
+ sep = getservbyport(port, (char *)proto);
+# else
+ sep = getservbyport(port, proto);
+# endif
#endif
- }
- if (sep && sep->s_name)
- {
- /* get service name */
- name = sep->s_name;
- }
- else
- {
- /* get port as a string */
- sprintf(tmpbuf, "%u", (unsigned int)ntohs(port));
- name = tmpbuf;
- }
- name_len = strlen(name);
- if (name_len < buflen)
- /* return it if buffer big enough */
- memcpy(buf, name, name_len + 1);
- else
- /* avoid reusing previous one */
- buf[0] = '\0'; /* LCOV_EXCL_LINE: no real service names are too big */
- return buf;
}
+ if (sep && sep->s_name) {
+ /* get service name */
+ name = sep->s_name;
+ } else {
+ /* get port as a string */
+ snprintf(tmpbuf, sizeof(tmpbuf), "%u", (unsigned int)ntohs(port));
+ name = tmpbuf;
+ }
+ name_len = ares_strlen(name);
+ if (name_len < buflen) {
+ /* return it if buffer big enough */
+ memcpy(buf, name, name_len + 1);
+ } else {
+ /* avoid reusing previous one */
+ buf[0] = '\0'; /* LCOV_EXCL_LINE: no real service names are too big */
+ }
+ return buf;
+ }
buf[0] = '\0';
return NULL;
}
#ifdef HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID
-static void append_scopeid(struct sockaddr_in6 *addr6, unsigned int flags,
+static void append_scopeid(const struct sockaddr_in6 *addr6, unsigned int flags,
char *buf, size_t buflen)
{
-#ifdef HAVE_IF_INDEXTONAME
- int is_ll, is_mcll;
-#endif
- char tmpbuf[IF_NAMESIZE + 2];
+# ifdef HAVE_IF_INDEXTONAME
+ int is_ll;
+ int is_mcll;
+# endif
+ char tmpbuf[IF_NAMESIZE + 2];
size_t bufl;
- int is_scope_long = sizeof(addr6->sin6_scope_id) > sizeof(unsigned int);
+ int is_scope_long = sizeof(addr6->sin6_scope_id) > sizeof(unsigned int);
tmpbuf[0] = '%';
-#ifdef HAVE_IF_INDEXTONAME
- is_ll = IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr);
+# ifdef HAVE_IF_INDEXTONAME
+ is_ll = IN6_IS_ADDR_LINKLOCAL(&addr6->sin6_addr);
is_mcll = IN6_IS_ADDR_MC_LINKLOCAL(&addr6->sin6_addr);
- if ((flags & ARES_NI_NUMERICSCOPE) ||
- (!is_ll && !is_mcll))
- {
- if (is_scope_long)
- {
- sprintf(&tmpbuf[1], "%lu", (unsigned long)addr6->sin6_scope_id);
- }
- else
- {
- sprintf(&tmpbuf[1], "%u", (unsigned int)addr6->sin6_scope_id);
- }
- }
- else
- {
- if (if_indextoname(addr6->sin6_scope_id, &tmpbuf[1]) == NULL)
- {
- if (is_scope_long)
- {
- sprintf(&tmpbuf[1], "%lu", (unsigned long)addr6->sin6_scope_id);
- }
- else
- {
- sprintf(&tmpbuf[1], "%u", (unsigned int)addr6->sin6_scope_id);
- }
- }
+ if ((flags & ARES_NI_NUMERICSCOPE) || (!is_ll && !is_mcll)) {
+ if (is_scope_long) {
+ snprintf(&tmpbuf[1], sizeof(tmpbuf) - 1, "%lu",
+ (unsigned long)addr6->sin6_scope_id);
+ } else {
+ snprintf(&tmpbuf[1], sizeof(tmpbuf) - 1, "%u", addr6->sin6_scope_id);
}
-#else
- if (is_scope_long)
- {
- sprintf(&tmpbuf[1], "%lu", (unsigned long)addr6->sin6_scope_id);
- }
- else
- {
- sprintf(&tmpbuf[1], "%u", (unsigned int)addr6->sin6_scope_id);
+ } else {
+ if (if_indextoname(addr6->sin6_scope_id, &tmpbuf[1]) == NULL) {
+ if (is_scope_long) {
+ snprintf(&tmpbuf[1], sizeof(tmpbuf) - 1, "%lu",
+ (unsigned long)addr6->sin6_scope_id);
+ } else {
+ snprintf(&tmpbuf[1], sizeof(tmpbuf) - 1, "%u", addr6->sin6_scope_id);
+ }
}
- (void) flags;
-#endif
+ }
+# else
+ if (is_scope_long) {
+ snprintf(&tmpbuf[1], sizeof(tmpbuf) - 1, "%lu",
+ (unsigned long)addr6->sin6_scope_id);
+ } else {
+ snprintf(&tmpbuf[1], sizeof(tmpbuf) - 1, "%u",
+ (unsigned int)addr6->sin6_scope_id);
+ }
+ (void)flags;
+# endif
tmpbuf[IF_NAMESIZE + 1] = '\0';
- bufl = strlen(buf);
+ bufl = ares_strlen(buf);
- if(bufl + strlen(tmpbuf) < buflen)
+ if (bufl + ares_strlen(tmpbuf) < buflen) {
/* only append the scopeid string if it fits in the target buffer */
- strcpy(&buf[bufl], tmpbuf);
+ ares_strcpy(&buf[bufl], tmpbuf, buflen - bufl);
+ }
}
#endif
/* Determines if s1 ends with the string in s2 (case-insensitive) */
STATIC_TESTABLE char *ares_striendstr(const char *s1, const char *s2)
{
- const char *c1, *c2, *c1_begin;
- int lo1, lo2;
- size_t s1_len = strlen(s1), s2_len = strlen(s2);
+ const char *c1;
+ const char *c2;
+ const char *c1_begin;
+ int lo1;
+ int lo2;
+ size_t s1_len = ares_strlen(s1);
+ size_t s2_len = ares_strlen(s2);
+
+ if (s1 == NULL || s2 == NULL) {
+ return NULL;
+ }
/* If the substr is longer than the full str, it can't match */
- if (s2_len > s1_len)
+ if (s2_len > s1_len) {
return NULL;
+ }
/* Jump to the end of s1 minus the length of s2 */
- c1_begin = s1+s1_len-s2_len;
- c1 = (const char *)c1_begin;
- c2 = s2;
- while (c2 < s2+s2_len)
- {
- lo1 = TOLOWER(*c1);
- lo2 = TOLOWER(*c2);
- if (lo1 != lo2)
- return NULL;
- else
- {
- c1++;
- c2++;
- }
+ c1_begin = s1 + s1_len - s2_len;
+ c1 = c1_begin;
+ c2 = s2;
+ while (c2 < s2 + s2_len) {
+ lo1 = TOLOWER(*c1);
+ lo2 = TOLOWER(*c2);
+ if (lo1 != lo2) {
+ return NULL;
+ } else {
+ c1++;
+ c2++;
}
- return (char *)c1_begin;
+ }
+ /* Cast off const */
+ return (char *)((size_t)c1_begin);
}
-int ares__is_onion_domain(const char *name)
+ares_bool_t ares__is_onion_domain(const char *name)
{
- if (ares_striendstr(name, ".onion"))
- return 1;
+ if (ares_striendstr(name, ".onion")) {
+ return ARES_TRUE;
+ }
- if (ares_striendstr(name, ".onion."))
- return 1;
+ if (ares_striendstr(name, ".onion.")) {
+ return ARES_TRUE;
+ }
- return 0;
+ return ARES_FALSE;
}
diff --git a/src/lib/ares_getsock.c b/src/lib/ares_getsock.c
index 22d3446..2cdfdb7 100644
--- a/src/lib/ares_getsock.c
+++ b/src/lib/ares_getsock.c
@@ -1,15 +1,27 @@
-
-/* Copyright (C) 2005 - 2010, Daniel Stenberg
+/* MIT License
+ *
+ * Copyright (c) 2005 Daniel Stenberg
+ *
+ * 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:
*
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, 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.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -17,50 +29,54 @@
#include "ares.h"
#include "ares_private.h"
-int ares_getsock(ares_channel channel,
- ares_socket_t *socks,
+int ares_getsock(ares_channel channel, ares_socket_t *socks,
int numsocks) /* size of the 'socks' array */
{
struct server_state *server;
- int i;
- int sockindex=0;
- int bitmap = 0;
- unsigned int setbits = 0xffffffff;
+ size_t i;
+ size_t sockindex = 0;
+ unsigned int bitmap = 0;
+ unsigned int setbits = 0xffffffff;
/* Are there any active queries? */
- int active_queries = !ares__is_list_empty(&(channel->all_queries));
+ size_t active_queries = ares__llist_len(channel->all_queries);
+
+ if (numsocks <= 0) {
+ return 0;
+ }
+
+ for (i = 0; i < channel->nservers; i++) {
+ ares__llist_node_t *node;
+ server = &channel->servers[i];
+
+ for (node = ares__llist_node_first(server->connections); node != NULL;
+ node = ares__llist_node_next(node)) {
+ const struct server_connection *conn = ares__llist_node_val(node);
+
+ if (sockindex >= (size_t)numsocks || sockindex >= ARES_GETSOCK_MAXNUM) {
+ break;
+ }
- for (i = 0; i < channel->nservers; i++)
- {
- server = &channel->servers[i];
/* We only need to register interest in UDP sockets if we have
* outstanding queries.
*/
- if (active_queries && server->udp_socket != ARES_SOCKET_BAD)
- {
- if(sockindex >= numsocks || sockindex >= ARES_GETSOCK_MAXNUM)
- break;
- socks[sockindex] = server->udp_socket;
- bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex);
- sockindex++;
- }
- /* We always register for TCP events, because we want to know
- * when the other side closes the connection, so we don't waste
- * time trying to use a broken connection.
- */
- if (server->tcp_socket != ARES_SOCKET_BAD)
- {
- if(sockindex >= numsocks || sockindex >= ARES_GETSOCK_MAXNUM)
- break;
- socks[sockindex] = server->tcp_socket;
- bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex);
+ if (!active_queries && !conn->is_tcp) {
+ continue;
+ }
+
+ socks[sockindex] = conn->fd;
+
+ if (active_queries || conn->is_tcp) {
+ bitmap |= ARES_GETSOCK_READABLE(setbits, sockindex);
+ }
- if (server->qhead && active_queries)
- /* then the tcp socket is also writable! */
- bitmap |= ARES_GETSOCK_WRITABLE(setbits, sockindex);
+ if (conn->is_tcp && ares__buf_len(server->tcp_send)) {
+ /* then the tcp socket is also writable! */
+ bitmap |= ARES_GETSOCK_WRITABLE(setbits, sockindex);
+ }
- sockindex++;
- }
+ sockindex++;
}
- return bitmap;
+ }
+ return (int)bitmap;
}
diff --git a/src/lib/ares_inet_net_pton.h b/src/lib/ares_inet_net_pton.h
index 90da2cc..0a52855 100644
--- a/src/lib/ares_inet_net_pton.h
+++ b/src/lib/ares_inet_net_pton.h
@@ -1,23 +1,33 @@
-#ifndef HEADER_CARES_INET_NET_PTON_H
-#define HEADER_CARES_INET_NET_PTON_H
-
-/* Copyright (C) 2005-2013 by Daniel Stenberg et al
+/* MIT License
+ *
+ * Copyright (c) 2005 Daniel Stenberg
+ *
+ * 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:
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
+#ifndef HEADER_CARES_INET_NET_PTON_H
+#define HEADER_CARES_INET_NET_PTON_H
#ifdef HAVE_INET_NET_PTON
-#define ares_inet_net_pton(w,x,y,z) inet_net_pton(w,x,y,z)
+# define ares_inet_net_pton(w, x, y, z) inet_net_pton(w, x, y, z)
#else
int ares_inet_net_pton(int af, const char *src, void *dst, size_t size);
#endif
diff --git a/src/lib/ares_init.c b/src/lib/ares_init.c
index de5d86c..17656ce 100644
--- a/src/lib/ares_init.c
+++ b/src/lib/ares_init.c
@@ -1,172 +1,190 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2007-2013 by Daniel Stenberg
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) 2007 Daniel Stenberg
+ *
+ * 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:
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
+# include <sys/param.h>
#endif
#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
+# include <netinet/in.h>
#endif
#ifdef HAVE_NETDB_H
-#include <netdb.h>
+# include <netdb.h>
#endif
#ifdef HAVE_ARPA_INET_H
-#include <arpa/inet.h>
+# include <arpa/inet.h>
#endif
#include "ares_nameser.h"
#if defined(ANDROID) || defined(__ANDROID__)
-#include <sys/system_properties.h>
-#include "ares_android.h"
+# include <sys/system_properties.h>
+# include "ares_android.h"
/* From the Bionic sources */
-#define DNS_PROP_NAME_PREFIX "net.dns"
-#define MAX_DNS_PROPERTIES 8
+# define DNS_PROP_NAME_PREFIX "net.dns"
+# define MAX_DNS_PROPERTIES 8
#endif
#if defined(CARES_USE_LIBRESOLV)
-#include <resolv.h>
+# include <resolv.h>
+#endif
+
+#if defined(USE_WINSOCK)
+# include <iphlpapi.h>
#endif
#include "ares.h"
#include "ares_inet_net_pton.h"
-#include "ares_library_init.h"
-#include "ares_nowarn.h"
#include "ares_platform.h"
#include "ares_private.h"
#ifdef WATT32
-#undef WIN32 /* Redefined in MingW/MSVC headers */
+# undef WIN32 /* Redefined in MingW/MSVC headers */
#endif
-static int init_by_options(ares_channel channel,
- const struct ares_options *options,
- int optmask);
-static int init_by_environment(ares_channel channel);
-static int init_by_resolv_conf(ares_channel channel);
-static int init_by_defaults(ares_channel channel);
+
+static ares_status_t init_by_options(ares_channel channel,
+ const struct ares_options *options,
+ int optmask);
+static ares_status_t init_by_environment(ares_channel channel);
+static ares_status_t init_by_resolv_conf(ares_channel channel);
+static ares_status_t init_by_defaults(ares_channel channel);
#ifndef WATT32
-static int config_nameserver(struct server_state **servers, int *nservers,
- char *str);
+static ares_status_t config_nameserver(struct server_state **servers,
+ size_t *nservers, const char *str);
#endif
-static int set_search(ares_channel channel, const char *str);
-static int set_options(ares_channel channel, const char *str);
-static const char *try_option(const char *p, const char *q, const char *opt);
-static int init_id_key(rc4_key* key,int key_data_len);
-
-static int config_sortlist(struct apattern **sortlist, int *nsort,
- const char *str);
-static int sortlist_alloc(struct apattern **sortlist, int *nsort,
- struct apattern *pat);
-static int ip_addr(const char *s, ares_ssize_t len, struct in_addr *addr);
+static ares_status_t set_search(ares_channel channel, const char *str);
+static ares_status_t set_options(ares_channel channel, const char *str);
+static const char *try_option(const char *p, const char *q, const char *opt);
+
+static ares_status_t config_sortlist(struct apattern **sortlist, size_t *nsort,
+ const char *str);
+static ares_bool_t sortlist_alloc(struct apattern **sortlist, size_t *nsort,
+ struct apattern *pat);
+static int ip_addr(const char *s, ares_ssize_t len, struct in_addr *addr);
static void natural_mask(struct apattern *pat);
-#if !defined(WIN32) && !defined(WATT32) && \
- !defined(ANDROID) && !defined(__ANDROID__) && !defined(CARES_USE_LIBRESOLV)
-static int config_domain(ares_channel channel, char *str);
-static int config_lookup(ares_channel channel, const char *str,
- const char *bindch, const char *altbindch,
- const char *filech);
-static char *try_config(char *s, const char *opt, char scc);
+#if !defined(WIN32) && !defined(WATT32) && !defined(ANDROID) && \
+ !defined(__ANDROID__) && !defined(CARES_USE_LIBRESOLV)
+static ares_status_t config_domain(ares_channel channel, char *str);
+static ares_status_t config_lookup(ares_channel channel, const char *str,
+ const char *bindch, const char *altbindch,
+ const char *filech);
+static char *try_config(char *s, const char *opt, char scc);
#endif
-#define ARES_CONFIG_CHECK(x) (x->lookups && x->nsort > -1 && \
- x->nservers > -1 && \
- x->ndomains > -1 && \
- x->ndots > -1 && x->timeout > -1 && \
- x->tries > -1)
+#define ARES_CONFIG_CHECK(x) \
+ (x->lookups && x->nservers > 0 && x->ndots > 0 && x->timeout > 0 && \
+ x->tries > 0)
int ares_init(ares_channel *channelptr)
{
return ares_init_options(channelptr, NULL, 0);
}
+static int ares_query_timeout_cmp_cb(const void *arg1, const void *arg2)
+{
+ const struct query *q1 = arg1;
+ const struct query *q2 = arg2;
+
+ if (q1->timeout.tv_sec > q2->timeout.tv_sec) {
+ return 1;
+ }
+ if (q1->timeout.tv_sec < q2->timeout.tv_sec) {
+ return -1;
+ }
+
+ if (q1->timeout.tv_usec > q2->timeout.tv_usec) {
+ return 1;
+ }
+ if (q1->timeout.tv_usec < q2->timeout.tv_usec) {
+ return -1;
+ }
+
+ return 0;
+}
+
int ares_init_options(ares_channel *channelptr, struct ares_options *options,
int optmask)
{
- ares_channel channel;
- int i;
- int status = ARES_SUCCESS;
- struct timeval now;
+ ares_channel channel;
+ ares_status_t status = ARES_SUCCESS;
- if (ares_library_initialized() != ARES_SUCCESS)
- return ARES_ENOTINITIALIZED; /* LCOV_EXCL_LINE: n/a on non-WinSock */
+ if (ares_library_initialized() != ARES_SUCCESS) {
+ return ARES_ENOTINITIALIZED; /* LCOV_EXCL_LINE: n/a on non-WinSock */
+ }
- channel = ares_malloc(sizeof(struct ares_channeldata));
+ channel = ares_malloc(sizeof(*channel));
if (!channel) {
*channelptr = NULL;
return ARES_ENOMEM;
}
- now = ares__tvnow();
+ memset(channel, 0, sizeof(*channel));
- /* Set everything to distinguished values so we know they haven't
- * been set yet.
- */
- channel->flags = -1;
- channel->timeout = -1;
- channel->tries = -1;
- channel->ndots = -1;
- channel->rotate = -1;
- channel->udp_port = -1;
- channel->tcp_port = -1;
- channel->ednspsz = -1;
- channel->socket_send_buffer_size = -1;
- channel->socket_receive_buffer_size = -1;
- channel->nservers = -1;
- channel->ndomains = -1;
- channel->nsort = -1;
- channel->tcp_connection_generation = 0;
- channel->lookups = NULL;
- channel->domains = NULL;
- channel->sortlist = NULL;
- channel->servers = NULL;
- channel->sock_state_cb = NULL;
- channel->sock_state_cb_data = NULL;
- channel->sock_create_cb = NULL;
- channel->sock_create_cb_data = NULL;
- channel->sock_config_cb = NULL;
- channel->sock_config_cb_data = NULL;
- channel->sock_funcs = NULL;
- channel->sock_func_cb_data = NULL;
- channel->resolvconf_path = NULL;
-
- channel->last_server = 0;
- channel->last_timeout_processed = (time_t)now.tv_sec;
-
- memset(&channel->local_dev_name, 0, sizeof(channel->local_dev_name));
- channel->local_ip4 = 0;
- memset(&channel->local_ip6, 0, sizeof(channel->local_ip6));
+ /* Generate random key */
+
+ channel->rand_state = ares__init_rand_state();
+ if (channel->rand_state == NULL) {
+ status = ARES_ENOMEM;
+ DEBUGF(fprintf(stderr, "Error: init_id_key failed: %s\n",
+ ares_strerror(status)));
+ goto done;
+ }
/* Initialize our lists of queries */
- ares__init_list_head(&(channel->all_queries));
- for (i = 0; i < ARES_QID_TABLE_SIZE; i++)
- {
- ares__init_list_head(&(channel->queries_by_qid[i]));
- }
- for (i = 0; i < ARES_TIMEOUT_TABLE_SIZE; i++)
- {
- ares__init_list_head(&(channel->queries_by_timeout[i]));
- }
+ channel->all_queries = ares__llist_create(NULL);
+ if (channel->all_queries == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+
+ channel->queries_by_qid = ares__htable_stvp_create(NULL);
+ if (channel->queries_by_qid == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+
+ channel->queries_by_timeout =
+ ares__slist_create(channel->rand_state, ares_query_timeout_cmp_cb, NULL);
+ if (channel->queries_by_timeout == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+
+ channel->connnode_by_socket = ares__htable_asvp_create(NULL);
+ if (channel->connnode_by_socket == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
/* Initialize configuration by each of the four sources, from highest
* precedence to lowest.
@@ -176,18 +194,21 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
if (status != ARES_SUCCESS) {
DEBUGF(fprintf(stderr, "Error: init_by_options failed: %s\n",
ares_strerror(status)));
- /* If we fail to apply user-specified options, fail the whole init process */
+ /* If we fail to apply user-specified options, fail the whole init process
+ */
goto done;
}
status = init_by_environment(channel);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
DEBUGF(fprintf(stderr, "Error: init_by_environment failed: %s\n",
ares_strerror(status)));
+ }
if (status == ARES_SUCCESS) {
status = init_by_resolv_conf(channel);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
DEBUGF(fprintf(stderr, "Error: init_by_resolv_conf failed: %s\n",
ares_strerror(status)));
+ }
}
/*
@@ -195,44 +216,53 @@ int ares_init_options(ares_channel *channelptr, struct ares_options *options,
* useful behavior for things that we missed.
*/
status = init_by_defaults(channel);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
DEBUGF(fprintf(stderr, "Error: init_by_defaults failed: %s\n",
ares_strerror(status)));
+ }
- /* Generate random key */
+ /* Trim to one server if ARES_FLAG_PRIMARY is set. */
+ if ((channel->flags & ARES_FLAG_PRIMARY) && channel->nservers > 1) {
+ channel->nservers = 1;
+ }
- if (status == ARES_SUCCESS) {
- status = init_id_key(&channel->id_key, ARES_ID_KEY_LEN);
- if (status == ARES_SUCCESS)
- channel->next_id = ares__generate_new_id(&channel->id_key);
- else
- DEBUGF(fprintf(stderr, "Error: init_id_key failed: %s\n",
- ares_strerror(status)));
+ status = ares__init_servers_state(channel);
+ if (status != ARES_SUCCESS) {
+ goto done;
}
done:
- if (status != ARES_SUCCESS)
- {
- /* Something failed; clean up memory we may have allocated. */
- if (channel->servers)
- ares_free(channel->servers);
- if (channel->ndomains != -1)
- ares_strsplit_free(channel->domains, channel->ndomains);
- if (channel->sortlist)
- ares_free(channel->sortlist);
- if(channel->lookups)
- ares_free(channel->lookups);
- if(channel->resolvconf_path)
- ares_free(channel->resolvconf_path);
- ares_free(channel);
- return status;
+ if (status != ARES_SUCCESS) {
+ /* Something failed; clean up memory we may have allocated. */
+ if (channel->servers) {
+ ares_free(channel->servers);
+ }
+ if (channel->ndomains > 0) {
+ ares__strsplit_free(channel->domains, channel->ndomains);
+ }
+ if (channel->sortlist) {
+ ares_free(channel->sortlist);
+ }
+ if (channel->lookups) {
+ ares_free(channel->lookups);
+ }
+ if (channel->resolvconf_path) {
+ ares_free(channel->resolvconf_path);
+ }
+ if (channel->hosts_path) {
+ ares_free(channel->hosts_path);
+ }
+ if (channel->rand_state) {
+ ares__destroy_rand_state(channel->rand_state);
}
- /* Trim to one server if ARES_FLAG_PRIMARY is set. */
- if ((channel->flags & ARES_FLAG_PRIMARY) && channel->nservers > 1)
- channel->nservers = 1;
-
- ares__init_servers_state(channel);
+ ares__htable_stvp_destroy(channel->queries_by_qid);
+ ares__llist_destroy(channel->all_queries);
+ ares__slist_destroy(channel->queries_by_timeout);
+ ares__htable_asvp_destroy(channel->connnode_by_socket);
+ ares_free(channel);
+ return (int)status;
+ }
*channelptr = channel;
return ARES_SUCCESS;
@@ -242,31 +272,32 @@ done:
new channel handle */
int ares_dup(ares_channel *dest, ares_channel src)
{
- struct ares_options opts;
+ struct ares_options opts;
struct ares_addr_port_node *servers;
- int non_v4_default_port = 0;
- int i, rc;
- int optmask;
+ int non_v4_default_port = 0;
+ size_t i;
+ ares_status_t rc;
+ int optmask;
*dest = NULL; /* in case of failure return NULL explicitly */
/* First get the options supported by the old ares_save_options() function,
which is most of them */
- rc = ares_save_options(src, &opts, &optmask);
- if(rc)
- {
+ rc = (ares_status_t)ares_save_options(src, &opts, &optmask);
+ if (rc) {
ares_destroy_options(&opts);
- return rc;
+ return (int)rc;
}
/* Then create the new channel with those options */
- rc = ares_init_options(dest, &opts, optmask);
+ rc = (ares_status_t)ares_init_options(dest, &opts, optmask);
/* destroy the options copy to not leak any memory */
ares_destroy_options(&opts);
- if(rc)
- return rc;
+ if (rc) {
+ return (int)rc;
+ }
/* Now clone the options that ares_save_options() doesn't support. */
(*dest)->sock_create_cb = src->sock_create_cb;
@@ -276,34 +307,34 @@ int ares_dup(ares_channel *dest, ares_channel src)
(*dest)->sock_funcs = src->sock_funcs;
(*dest)->sock_func_cb_data = src->sock_func_cb_data;
- strncpy((*dest)->local_dev_name, src->local_dev_name,
- sizeof((*dest)->local_dev_name));
+ ares_strcpy((*dest)->local_dev_name, src->local_dev_name,
+ sizeof((*dest)->local_dev_name));
(*dest)->local_ip4 = src->local_ip4;
memcpy((*dest)->local_ip6, src->local_ip6, sizeof(src->local_ip6));
- /* Full name server cloning required if there is a non-IPv4, or non-default port, nameserver */
- for (i = 0; i < src->nservers; i++)
- {
- if ((src->servers[i].addr.family != AF_INET) ||
- (src->servers[i].addr.udp_port != 0) ||
- (src->servers[i].addr.tcp_port != 0)) {
- non_v4_default_port++;
- break;
- }
+ /* Full name server cloning required if there is a non-IPv4, or non-default
+ * port, nameserver */
+ for (i = 0; i < src->nservers; i++) {
+ if ((src->servers[i].addr.family != AF_INET) ||
+ (src->servers[i].addr.udp_port != 0) ||
+ (src->servers[i].addr.tcp_port != 0)) {
+ non_v4_default_port++;
+ break;
}
+ }
if (non_v4_default_port) {
- rc = ares_get_servers_ports(src, &servers);
+ rc = (ares_status_t)ares_get_servers_ports(src, &servers);
if (rc != ARES_SUCCESS) {
ares_destroy(*dest);
*dest = NULL;
- return rc;
+ return (int)rc;
}
- rc = ares_set_servers_ports(*dest, servers);
+ rc = (ares_status_t)ares_set_servers_ports(*dest, servers);
ares_free_data(servers);
if (rc != ARES_SUCCESS) {
ares_destroy(*dest);
*dest = NULL;
- return rc;
+ return (int)rc;
}
}
@@ -314,247 +345,304 @@ int ares_dup(ares_channel *dest, ares_channel src)
int ares_save_options(ares_channel channel, struct ares_options *options,
int *optmask)
{
- int i, j;
- int ipv4_nservers = 0;
+ size_t i;
+ size_t j;
+ size_t ipv4_nservers = 0;
/* Zero everything out */
memset(options, 0, sizeof(struct ares_options));
- if (!ARES_CONFIG_CHECK(channel))
+ if (!ARES_CONFIG_CHECK(channel)) {
return ARES_ENODATA;
+ }
/* Traditionally the optmask wasn't saved in the channel struct so it was
recreated here. ROTATE is the first option that has no struct field of
its own in the public config struct */
- (*optmask) = (ARES_OPT_FLAGS|ARES_OPT_TRIES|ARES_OPT_NDOTS|
- ARES_OPT_UDP_PORT|ARES_OPT_TCP_PORT|ARES_OPT_SOCK_STATE_CB|
- ARES_OPT_SERVERS|ARES_OPT_DOMAINS|ARES_OPT_LOOKUPS|
- ARES_OPT_SORTLIST|ARES_OPT_TIMEOUTMS);
+ (*optmask) = (ARES_OPT_FLAGS | ARES_OPT_TRIES | ARES_OPT_NDOTS |
+ ARES_OPT_UDP_PORT | ARES_OPT_TCP_PORT | ARES_OPT_SOCK_STATE_CB |
+ ARES_OPT_SERVERS | ARES_OPT_DOMAINS | ARES_OPT_LOOKUPS |
+ ARES_OPT_SORTLIST | ARES_OPT_TIMEOUTMS);
(*optmask) |= (channel->rotate ? ARES_OPT_ROTATE : ARES_OPT_NOROTATE);
- if (channel->resolvconf_path)
+ if (channel->resolvconf_path) {
(*optmask) |= ARES_OPT_RESOLVCONF;
+ }
+
+ if (channel->hosts_path) {
+ (*optmask) |= ARES_OPT_HOSTS_FILE;
+ }
/* Copy easy stuff */
- options->flags = channel->flags;
+ options->flags = (int)channel->flags;
/* We return full millisecond resolution but that's only because we don't
set the ARES_OPT_TIMEOUT anymore, only the new ARES_OPT_TIMEOUTMS */
- options->timeout = channel->timeout;
- options->tries = channel->tries;
- options->ndots = channel->ndots;
- options->udp_port = ntohs(aresx_sitous(channel->udp_port));
- options->tcp_port = ntohs(aresx_sitous(channel->tcp_port));
- options->sock_state_cb = channel->sock_state_cb;
+ options->timeout = (int)channel->timeout;
+ options->tries = (int)channel->tries;
+ options->ndots = (int)channel->ndots;
+ options->udp_port = ntohs(channel->udp_port);
+ options->tcp_port = ntohs(channel->tcp_port);
+ options->sock_state_cb = channel->sock_state_cb;
options->sock_state_cb_data = channel->sock_state_cb_data;
/* Copy IPv4 servers that use the default port */
if (channel->nservers) {
- for (i = 0; i < channel->nservers; i++)
- {
+ for (i = 0; i < channel->nservers; i++) {
if ((channel->servers[i].addr.family == AF_INET) &&
(channel->servers[i].addr.udp_port == 0) &&
- (channel->servers[i].addr.tcp_port == 0))
+ (channel->servers[i].addr.tcp_port == 0)) {
ipv4_nservers++;
+ }
}
if (ipv4_nservers) {
options->servers = ares_malloc(ipv4_nservers * sizeof(struct in_addr));
- if (!options->servers)
+ if (!options->servers) {
return ARES_ENOMEM;
- for (i = j = 0; i < channel->nservers; i++)
- {
+ }
+
+ for (i = j = 0; i < channel->nservers; i++) {
if ((channel->servers[i].addr.family == AF_INET) &&
(channel->servers[i].addr.udp_port == 0) &&
- (channel->servers[i].addr.tcp_port == 0))
- memcpy(&options->servers[j++],
- &channel->servers[i].addr.addrV4,
+ (channel->servers[i].addr.tcp_port == 0)) {
+ memcpy(&options->servers[j++], &channel->servers[i].addr.addrV4,
sizeof(channel->servers[i].addr.addrV4));
+ }
}
}
}
- options->nservers = ipv4_nservers;
+ options->nservers = (int)ipv4_nservers;
/* copy domains */
if (channel->ndomains) {
options->domains = ares_malloc(channel->ndomains * sizeof(char *));
- if (!options->domains)
+ if (!options->domains) {
return ARES_ENOMEM;
+ }
- for (i = 0; i < channel->ndomains; i++)
- {
- options->ndomains = i;
+ for (i = 0; i < channel->ndomains; i++) {
options->domains[i] = ares_strdup(channel->domains[i]);
- if (!options->domains[i])
+ if (!options->domains[i]) {
+ options->ndomains = (int)i;
return ARES_ENOMEM;
+ }
}
}
- options->ndomains = channel->ndomains;
+ options->ndomains = (int)channel->ndomains;
/* copy lookups */
if (channel->lookups) {
options->lookups = ares_strdup(channel->lookups);
- if (!options->lookups && channel->lookups)
+ if (!options->lookups && channel->lookups) {
return ARES_ENOMEM;
+ }
}
/* copy sortlist */
if (channel->nsort) {
options->sortlist = ares_malloc(channel->nsort * sizeof(struct apattern));
- if (!options->sortlist)
+ if (!options->sortlist) {
return ARES_ENOMEM;
- for (i = 0; i < channel->nsort; i++)
+ }
+ for (i = 0; i < channel->nsort; i++) {
options->sortlist[i] = channel->sortlist[i];
+ }
}
- options->nsort = channel->nsort;
+ options->nsort = (int)channel->nsort;
/* copy path for resolv.conf file */
if (channel->resolvconf_path) {
options->resolvconf_path = ares_strdup(channel->resolvconf_path);
- if (!options->resolvconf_path)
+ if (!options->resolvconf_path) {
+ return ARES_ENOMEM;
+ }
+ }
+
+ /* copy path for hosts file */
+ if (channel->hosts_path) {
+ options->hosts_path = ares_strdup(channel->hosts_path);
+ if (!options->hosts_path) {
return ARES_ENOMEM;
+ }
+ }
+
+ if (channel->udp_max_queries > 0) {
+ (*optmask) |= ARES_OPT_UDP_MAX_QUERIES;
+ options->udp_max_queries = (int)channel->udp_max_queries;
}
return ARES_SUCCESS;
}
-static int init_by_options(ares_channel channel,
- const struct ares_options *options,
- int optmask)
+static ares_status_t init_by_options(ares_channel channel,
+ const struct ares_options *options,
+ int optmask)
{
- int i;
+ size_t i;
/* Easy stuff. */
- if ((optmask & ARES_OPT_FLAGS) && channel->flags == -1)
- channel->flags = options->flags;
- if ((optmask & ARES_OPT_TIMEOUTMS) && channel->timeout == -1)
- channel->timeout = options->timeout;
- else if ((optmask & ARES_OPT_TIMEOUT) && channel->timeout == -1)
- channel->timeout = options->timeout * 1000;
- if ((optmask & ARES_OPT_TRIES) && channel->tries == -1)
- channel->tries = options->tries;
- if ((optmask & ARES_OPT_NDOTS) && channel->ndots == -1)
- channel->ndots = options->ndots;
- if ((optmask & ARES_OPT_ROTATE) && channel->rotate == -1)
- channel->rotate = 1;
- if ((optmask & ARES_OPT_NOROTATE) && channel->rotate == -1)
- channel->rotate = 0;
- if ((optmask & ARES_OPT_UDP_PORT) && channel->udp_port == -1)
+ if (optmask & ARES_OPT_FLAGS) {
+ channel->flags = (unsigned int)options->flags;
+ }
+
+ if (optmask & ARES_OPT_TIMEOUTMS) {
+ channel->timeout = (unsigned int)options->timeout;
+ } else if (optmask & ARES_OPT_TIMEOUT) {
+ channel->timeout = (unsigned int)options->timeout * 1000;
+ }
+
+ if (optmask & ARES_OPT_TRIES) {
+ channel->tries = (size_t)options->tries;
+ }
+
+ if (optmask & ARES_OPT_NDOTS) {
+ channel->ndots = (size_t)options->ndots;
+ }
+
+ if (optmask & ARES_OPT_ROTATE) {
+ channel->rotate = ARES_TRUE;
+ }
+
+ if (optmask & ARES_OPT_NOROTATE) {
+ channel->rotate = ARES_FALSE;
+ }
+
+ if ((optmask & ARES_OPT_UDP_PORT) && channel->udp_port == 0) {
channel->udp_port = htons(options->udp_port);
- if ((optmask & ARES_OPT_TCP_PORT) && channel->tcp_port == -1)
+ }
+
+ if ((optmask & ARES_OPT_TCP_PORT) && channel->tcp_port == 0) {
channel->tcp_port = htons(options->tcp_port);
- if ((optmask & ARES_OPT_SOCK_STATE_CB) && channel->sock_state_cb == NULL)
- {
- channel->sock_state_cb = options->sock_state_cb;
- channel->sock_state_cb_data = options->sock_state_cb_data;
- }
- if ((optmask & ARES_OPT_SOCK_SNDBUF)
- && channel->socket_send_buffer_size == -1)
+ }
+
+ if ((optmask & ARES_OPT_SOCK_STATE_CB) && channel->sock_state_cb == NULL) {
+ channel->sock_state_cb = options->sock_state_cb;
+ channel->sock_state_cb_data = options->sock_state_cb_data;
+ }
+
+ if (optmask & ARES_OPT_SOCK_SNDBUF && options->socket_send_buffer_size > 0) {
channel->socket_send_buffer_size = options->socket_send_buffer_size;
- if ((optmask & ARES_OPT_SOCK_RCVBUF)
- && channel->socket_receive_buffer_size == -1)
+ }
+
+ if (optmask & ARES_OPT_SOCK_RCVBUF &&
+ channel->socket_receive_buffer_size > 0) {
channel->socket_receive_buffer_size = options->socket_receive_buffer_size;
+ }
- if ((optmask & ARES_OPT_EDNSPSZ) && channel->ednspsz == -1)
- channel->ednspsz = options->ednspsz;
+ if (optmask & ARES_OPT_EDNSPSZ) {
+ channel->ednspsz = (size_t)options->ednspsz;
+ }
/* Copy the IPv4 servers, if given. */
- if ((optmask & ARES_OPT_SERVERS) && channel->nservers == -1)
- {
- /* Avoid zero size allocations at any cost */
- if (options->nservers > 0)
- {
- channel->servers =
- ares_malloc(options->nservers * sizeof(struct server_state));
- if (!channel->servers)
- return ARES_ENOMEM;
- for (i = 0; i < options->nservers; i++)
- {
- channel->servers[i].addr.family = AF_INET;
- channel->servers[i].addr.udp_port = 0;
- channel->servers[i].addr.tcp_port = 0;
- memcpy(&channel->servers[i].addr.addrV4,
- &options->servers[i],
- sizeof(channel->servers[i].addr.addrV4));
- }
- }
- channel->nservers = options->nservers;
+ if (optmask & ARES_OPT_SERVERS) {
+ /* Avoid zero size allocations at any cost */
+ if (options->nservers > 0) {
+ channel->servers =
+ ares_malloc((size_t)options->nservers * sizeof(*channel->servers));
+ if (!channel->servers) {
+ return ARES_ENOMEM;
+ }
+ memset(channel->servers, 0,
+ (size_t)options->nservers * sizeof(*channel->servers));
+ for (i = 0; i < (size_t)options->nservers; i++) {
+ channel->servers[i].addr.family = AF_INET;
+ channel->servers[i].addr.udp_port = 0;
+ channel->servers[i].addr.tcp_port = 0;
+ memcpy(&channel->servers[i].addr.addrV4, &options->servers[i],
+ sizeof(channel->servers[i].addr.addrV4));
+ }
}
+ channel->nservers = (size_t)options->nservers;
+ }
/* Copy the domains, if given. Keep channel->ndomains consistent so
* we can clean up in case of error.
*/
- if ((optmask & ARES_OPT_DOMAINS) && channel->ndomains == -1)
- {
- /* Avoid zero size allocations at any cost */
- if (options->ndomains > 0)
- {
- channel->domains = ares_malloc(options->ndomains * sizeof(char *));
- if (!channel->domains)
+ if (optmask & ARES_OPT_DOMAINS) {
+ /* Avoid zero size allocations at any cost */
+ if (options->ndomains > 0) {
+ channel->domains =
+ ares_malloc((size_t)options->ndomains * sizeof(char *));
+ if (!channel->domains) {
+ return ARES_ENOMEM;
+ }
+ for (i = 0; i < (size_t)options->ndomains; i++) {
+ channel->domains[i] = ares_strdup(options->domains[i]);
+ if (!channel->domains[i]) {
return ARES_ENOMEM;
- for (i = 0; i < options->ndomains; i++)
- {
- channel->ndomains = i;
- channel->domains[i] = ares_strdup(options->domains[i]);
- if (!channel->domains[i])
- return ARES_ENOMEM;
- }
+ }
}
- channel->ndomains = options->ndomains;
}
+ channel->ndomains = (size_t)options->ndomains;
+ }
/* Set lookups, if given. */
- if ((optmask & ARES_OPT_LOOKUPS) && !channel->lookups)
- {
- channel->lookups = ares_strdup(options->lookups);
- if (!channel->lookups)
- return ARES_ENOMEM;
+ if ((optmask & ARES_OPT_LOOKUPS) && !channel->lookups) {
+ channel->lookups = ares_strdup(options->lookups);
+ if (!channel->lookups) {
+ return ARES_ENOMEM;
}
+ }
/* copy sortlist */
- if ((optmask & ARES_OPT_SORTLIST) && (channel->nsort == -1)) {
- if (options->nsort > 0) {
- channel->sortlist = ares_malloc(options->nsort * sizeof(struct apattern));
- if (!channel->sortlist)
- return ARES_ENOMEM;
- for (i = 0; i < options->nsort; i++)
- channel->sortlist[i] = options->sortlist[i];
+ if (optmask & ARES_OPT_SORTLIST && options->nsort > 0) {
+ channel->nsort = (size_t)options->nsort;
+ channel->sortlist =
+ ares_malloc((size_t)options->nsort * sizeof(struct apattern));
+ if (!channel->sortlist) {
+ return ARES_ENOMEM;
+ }
+ for (i = 0; i < (size_t)options->nsort; i++) {
+ channel->sortlist[i] = options->sortlist[i];
}
- channel->nsort = options->nsort;
}
/* Set path for resolv.conf file, if given. */
- if ((optmask & ARES_OPT_RESOLVCONF) && !channel->resolvconf_path)
- {
- channel->resolvconf_path = ares_strdup(options->resolvconf_path);
- if (!channel->resolvconf_path && options->resolvconf_path)
- return ARES_ENOMEM;
+ if ((optmask & ARES_OPT_RESOLVCONF) && !channel->resolvconf_path) {
+ channel->resolvconf_path = ares_strdup(options->resolvconf_path);
+ if (!channel->resolvconf_path && options->resolvconf_path) {
+ return ARES_ENOMEM;
}
+ }
+
+ /* Set path for hosts file, if given. */
+ if ((optmask & ARES_OPT_HOSTS_FILE) && !channel->hosts_path) {
+ channel->hosts_path = ares_strdup(options->hosts_path);
+ if (!channel->hosts_path && options->hosts_path) {
+ return ARES_ENOMEM;
+ }
+ }
- channel->optmask = optmask;
+ if (optmask & ARES_OPT_UDP_MAX_QUERIES) {
+ channel->udp_max_queries = (size_t)options->udp_max_queries;
+ }
+
+ channel->optmask = (unsigned int)optmask;
return ARES_SUCCESS;
}
-static int init_by_environment(ares_channel channel)
+static ares_status_t init_by_environment(ares_channel channel)
{
- const char *localdomain, *res_options;
- int status;
+ const char *localdomain;
+ const char *res_options;
+ ares_status_t status;
localdomain = getenv("LOCALDOMAIN");
- if (localdomain && channel->ndomains == -1)
- {
- status = set_search(channel, localdomain);
- if (status != ARES_SUCCESS)
- return status;
+ if (localdomain && channel->ndomains == 0) {
+ status = set_search(channel, localdomain);
+ if (status != ARES_SUCCESS) {
+ return status;
}
+ }
res_options = getenv("RES_OPTIONS");
- if (res_options)
- {
- status = set_options(channel, res_options);
- if (status != ARES_SUCCESS)
- return status; /* LCOV_EXCL_LINE: set_options() never fails */
+ if (res_options) {
+ status = set_options(channel, res_options);
+ if (status != ARES_SUCCESS) {
+ return status; /* LCOV_EXCL_LINE: set_options() never fails */
}
+ }
return ARES_SUCCESS;
}
@@ -574,7 +662,7 @@ static int init_by_environment(ares_channel channel)
*
* Supported on Windows NT 3.5 and newer.
*/
-static int get_REG_SZ(HKEY hKey, const char *leafKeyName, char **outptr)
+static ares_bool_t get_REG_SZ(HKEY hKey, const char *leafKeyName, char **outptr)
{
DWORD size = 0;
int res;
@@ -583,267 +671,50 @@ static int get_REG_SZ(HKEY hKey, const char *leafKeyName, char **outptr)
/* Find out size of string stored in registry */
res = RegQueryValueExA(hKey, leafKeyName, 0, NULL, NULL, &size);
- if ((res != ERROR_SUCCESS && res != ERROR_MORE_DATA) || !size)
- return 0;
-
- /* Allocate buffer of indicated size plus one given that string
- might have been stored without null termination */
- *outptr = ares_malloc(size+1);
- if (!*outptr)
- return 0;
-
- /* Get the value for real */
- res = RegQueryValueExA(hKey, leafKeyName, 0, NULL,
- (unsigned char *)*outptr, &size);
- if ((res != ERROR_SUCCESS) || (size == 1))
- {
- ares_free(*outptr);
- *outptr = NULL;
- return 0;
+ if ((res != ERROR_SUCCESS && res != ERROR_MORE_DATA) || !size) {
+ return ARES_FALSE;
}
- /* Null terminate buffer allways */
- *(*outptr + size) = '\0';
-
- return 1;
-}
-
-/*
- * get_REG_SZ_9X()
- *
- * Functionally identical to get_REG_SZ()
- *
- * Supported on Windows 95, 98 and ME.
- */
-static int get_REG_SZ_9X(HKEY hKey, const char *leafKeyName, char **outptr)
-{
- DWORD dataType = 0;
- DWORD size = 0;
- int res;
-
- *outptr = NULL;
-
- /* Find out size of string stored in registry */
- res = RegQueryValueExA(hKey, leafKeyName, 0, &dataType, NULL, &size);
- if ((res != ERROR_SUCCESS && res != ERROR_MORE_DATA) || !size)
- return 0;
-
/* Allocate buffer of indicated size plus one given that string
might have been stored without null termination */
- *outptr = ares_malloc(size+1);
- if (!*outptr)
- return 0;
+ *outptr = ares_malloc(size + 1);
+ if (!*outptr) {
+ return ARES_FALSE;
+ }
/* Get the value for real */
- res = RegQueryValueExA(hKey, leafKeyName, 0, &dataType,
- (unsigned char *)*outptr, &size);
- if ((res != ERROR_SUCCESS) || (size == 1))
- {
+ res = RegQueryValueExA(hKey, leafKeyName, 0, NULL, (unsigned char *)*outptr,
+ &size);
+ if ((res != ERROR_SUCCESS) || (size == 1)) {
ares_free(*outptr);
*outptr = NULL;
- return 0;
+ return ARES_FALSE;
}
/* Null terminate buffer allways */
*(*outptr + size) = '\0';
- return 1;
-}
-
-/*
- * get_enum_REG_SZ()
- *
- * Given a 'hKeyParent' handle to an open registry key and a 'leafKeyName'
- * pointer to the name of the registry leaf key to be queried, parent key
- * is enumerated searching in child keys for given leaf key name and its
- * associated string value. When located, this returns a pointer in *outptr
- * to a newly allocated memory area holding it as a null-terminated string.
- *
- * Returns 0 and nullifies *outptr upon inability to return a string value.
- *
- * Returns 1 and sets *outptr when returning a dynamically allocated string.
- *
- * Supported on Windows NT 3.5 and newer.
- */
-static int get_enum_REG_SZ(HKEY hKeyParent, const char *leafKeyName,
- char **outptr)
-{
- char enumKeyName[256];
- DWORD enumKeyNameBuffSize;
- DWORD enumKeyIdx = 0;
- HKEY hKeyEnum;
- int gotString;
- int res;
-
- *outptr = NULL;
-
- for(;;)
- {
- enumKeyNameBuffSize = sizeof(enumKeyName);
- res = RegEnumKeyExA(hKeyParent, enumKeyIdx++, enumKeyName,
- &enumKeyNameBuffSize, 0, NULL, NULL, NULL);
- if (res != ERROR_SUCCESS)
- break;
- res = RegOpenKeyExA(hKeyParent, enumKeyName, 0, KEY_QUERY_VALUE,
- &hKeyEnum);
- if (res != ERROR_SUCCESS)
- continue;
- gotString = get_REG_SZ(hKeyEnum, leafKeyName, outptr);
- RegCloseKey(hKeyEnum);
- if (gotString)
- break;
- }
-
- if (!*outptr)
- return 0;
-
- return 1;
-}
-
-/*
- * get_DNS_Registry_9X()
- *
- * Functionally identical to get_DNS_Registry()
- *
- * Implementation supports Windows 95, 98 and ME.
- */
-static int get_DNS_Registry_9X(char **outptr)
-{
- HKEY hKey_VxD_MStcp;
- int gotString;
- int res;
-
- *outptr = NULL;
-
- res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_9X, 0, KEY_READ,
- &hKey_VxD_MStcp);
- if (res != ERROR_SUCCESS)
- return 0;
-
- gotString = get_REG_SZ_9X(hKey_VxD_MStcp, NAMESERVER, outptr);
- RegCloseKey(hKey_VxD_MStcp);
-
- if (!gotString || !*outptr)
- return 0;
-
- return 1;
-}
-
-/*
- * get_DNS_Registry_NT()
- *
- * Functionally identical to get_DNS_Registry()
- *
- * Refs: Microsoft Knowledge Base articles KB120642 and KB314053.
- *
- * Implementation supports Windows NT 3.5 and newer.
- */
-static int get_DNS_Registry_NT(char **outptr)
-{
- HKEY hKey_Interfaces = NULL;
- HKEY hKey_Tcpip_Parameters;
- int gotString;
- int res;
-
- *outptr = NULL;
-
- res = RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ,
- &hKey_Tcpip_Parameters);
- if (res != ERROR_SUCCESS)
- return 0;
-
- /*
- ** Global DNS settings override adapter specific parameters when both
- ** are set. Additionally static DNS settings override DHCP-configured
- ** parameters when both are set.
- */
-
- /* Global DNS static parameters */
- gotString = get_REG_SZ(hKey_Tcpip_Parameters, NAMESERVER, outptr);
- if (gotString)
- goto done;
-
- /* Global DNS DHCP-configured parameters */
- gotString = get_REG_SZ(hKey_Tcpip_Parameters, DHCPNAMESERVER, outptr);
- if (gotString)
- goto done;
-
- /* Try adapter specific parameters */
- res = RegOpenKeyExA(hKey_Tcpip_Parameters, "Interfaces", 0,
- KEY_QUERY_VALUE | KEY_ENUMERATE_SUB_KEYS,
- &hKey_Interfaces);
- if (res != ERROR_SUCCESS)
- {
- hKey_Interfaces = NULL;
- goto done;
- }
-
- /* Adapter specific DNS static parameters */
- gotString = get_enum_REG_SZ(hKey_Interfaces, NAMESERVER, outptr);
- if (gotString)
- goto done;
-
- /* Adapter specific DNS DHCP-configured parameters */
- gotString = get_enum_REG_SZ(hKey_Interfaces, DHCPNAMESERVER, outptr);
-
-done:
- if (hKey_Interfaces)
- RegCloseKey(hKey_Interfaces);
-
- RegCloseKey(hKey_Tcpip_Parameters);
-
- if (!gotString || !*outptr)
- return 0;
-
- return 1;
-}
-
-/*
- * get_DNS_Registry()
- *
- * Locates DNS info in the registry. When located, this returns a pointer
- * in *outptr to a newly allocated memory area holding a null-terminated
- * string with a space or comma seperated list of DNS IP addresses.
- *
- * Returns 0 and nullifies *outptr upon inability to return DNSes string.
- *
- * Returns 1 and sets *outptr when returning a dynamically allocated string.
- */
-static int get_DNS_Registry(char **outptr)
-{
- win_platform platform;
- int gotString = 0;
-
- *outptr = NULL;
-
- platform = ares__getplatform();
-
- if (platform == WIN_NT)
- gotString = get_DNS_Registry_NT(outptr);
- else if (platform == WIN_9X)
- gotString = get_DNS_Registry_9X(outptr);
-
- if (!gotString)
- return 0;
-
- return 1;
+ return ARES_TRUE;
}
-static void commanjoin(char** dst, const char* const src, const size_t len)
+static void commanjoin(char **dst, const char * const src, const size_t len)
{
- char *newbuf;
+ char *newbuf;
size_t newsize;
/* 1 for terminating 0 and 2 for , and terminating 0 */
- newsize = len + (*dst ? (strlen(*dst) + 2) : 1);
- newbuf = ares_realloc(*dst, newsize);
- if (!newbuf)
+ newsize = len + (*dst ? (ares_strlen(*dst) + 2) : 1);
+ newbuf = ares_realloc(*dst, newsize);
+ if (!newbuf) {
return;
- if (*dst == NULL)
+ }
+ if (*dst == NULL) {
*newbuf = '\0';
+ }
*dst = newbuf;
- if (strlen(*dst) != 0)
+ if (ares_strlen(*dst) != 0) {
strcat(*dst, ",");
+ }
strncat(*dst, src, len);
}
@@ -854,117 +725,15 @@ static void commanjoin(char** dst, const char* const src, const size_t len)
*/
static void commajoin(char **dst, const char *src)
{
- commanjoin(dst, src, strlen(src));
-}
-
-/*
- * get_DNS_NetworkParams()
- *
- * Locates DNS info using GetNetworkParams() function from the Internet
- * Protocol Helper (IP Helper) API. When located, this returns a pointer
- * in *outptr to a newly allocated memory area holding a null-terminated
- * string with a space or comma seperated list of DNS IP addresses.
- *
- * Returns 0 and nullifies *outptr upon inability to return DNSes string.
- *
- * Returns 1 and sets *outptr when returning a dynamically allocated string.
- *
- * Implementation supports Windows 98 and newer.
- *
- * Note: Ancient PSDK required in order to build a W98 target.
- */
-static int get_DNS_NetworkParams(char **outptr)
-{
- FIXED_INFO *fi, *newfi;
- struct ares_addr namesrvr;
- char *txtaddr;
- IP_ADDR_STRING *ipAddr;
- int res;
- DWORD size = sizeof (*fi);
-
- *outptr = NULL;
-
- /* Verify run-time availability of GetNetworkParams() */
- if (ares_fpGetNetworkParams == ZERO_NULL)
- return 0;
-
- fi = ares_malloc(size);
- if (!fi)
- return 0;
-
- res = (*ares_fpGetNetworkParams) (fi, &size);
- if ((res != ERROR_BUFFER_OVERFLOW) && (res != ERROR_SUCCESS))
- goto done;
-
- newfi = ares_realloc(fi, size);
- if (!newfi)
- goto done;
-
- fi = newfi;
- res = (*ares_fpGetNetworkParams) (fi, &size);
- if (res != ERROR_SUCCESS)
- goto done;
-
- for (ipAddr = &fi->DnsServerList; ipAddr; ipAddr = ipAddr->Next)
- {
- txtaddr = &ipAddr->IpAddress.String[0];
-
- /* Validate converting textual address to binary format. */
- if (ares_inet_pton(AF_INET, txtaddr, &namesrvr.addrV4) == 1)
- {
- if ((namesrvr.addrV4.S_un.S_addr == INADDR_ANY) ||
- (namesrvr.addrV4.S_un.S_addr == INADDR_NONE))
- continue;
- }
- else if (ares_inet_pton(AF_INET6, txtaddr, &namesrvr.addrV6) == 1)
- {
- if (memcmp(&namesrvr.addrV6, &ares_in6addr_any,
- sizeof(namesrvr.addrV6)) == 0)
- continue;
- }
- else
- continue;
-
- commajoin(outptr, txtaddr);
-
- if (!*outptr)
- break;
- }
-
-done:
- if (fi)
- ares_free(fi);
-
- if (!*outptr)
- return 0;
-
- return 1;
-}
-
-static BOOL ares_IsWindowsVistaOrGreater(void)
-{
- OSVERSIONINFO vinfo;
- memset(&vinfo, 0, sizeof(vinfo));
- vinfo.dwOSVersionInfoSize = sizeof(vinfo);
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable:4996) /* warning C4996: 'GetVersionExW': was declared deprecated */
-#endif
- if (!GetVersionEx(&vinfo) || vinfo.dwMajorVersion < 6)
- return FALSE;
- return TRUE;
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
+ commanjoin(dst, src, ares_strlen(src));
}
/* A structure to hold the string form of IPv4 and IPv6 addresses so we can
* sort them by a metric.
*/
-typedef struct
-{
+typedef struct {
/* The metric we sort them by. */
- ULONG metric;
+ ULONG metric;
/* Original index of the item, used as a secondary sort parameter to make
* qsort() stable if the metrics are equal */
@@ -973,23 +742,30 @@ typedef struct
/* Room enough for the string form of any IPv4 or IPv6 address that
* ares_inet_ntop() will create. Based on the existing c-ares practice.
*/
- char text[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
+ char text[INET6_ADDRSTRLEN + 8]; /* [%s]:NNNNN */
} Address;
/* Sort Address values \a left and \a right by metric, returning the usual
* indicators for qsort().
*/
-static int compareAddresses(const void *arg1,
- const void *arg2)
+static int compareAddresses(const void *arg1, const void *arg2)
{
- const Address * const left = arg1;
+ const Address * const left = arg1;
const Address * const right = arg2;
/* Lower metric the more preferred */
- if(left->metric < right->metric) return -1;
- if(left->metric > right->metric) return 1;
+ if (left->metric < right->metric) {
+ return -1;
+ }
+ if (left->metric > right->metric) {
+ return 1;
+ }
/* If metrics are equal, lower original index more preferred */
- if(left->orig_idx < right->orig_idx) return -1;
- if(left->orig_idx > right->orig_idx) return 1;
+ if (left->orig_idx < right->orig_idx) {
+ return -1;
+ }
+ if (left->orig_idx > right->orig_idx) {
+ return 1;
+ }
return 0;
}
@@ -1028,31 +804,41 @@ static int compareAddresses(const void *arg1,
*/
static ULONG getBestRouteMetric(IF_LUID * const luid, /* Can't be const :( */
const SOCKADDR_INET * const dest,
- const ULONG interfaceMetric)
+ const ULONG interfaceMetric)
{
/* On this interface, get the best route to that destination. */
+# if defined(__WATCOMC__)
+ /* OpenWatcom's builtin Windows SDK does not have a definition for
+ * MIB_IPFORWARD_ROW2, and also does not allow the usage of SOCKADDR_INET
+ * as a variable. Let's work around this by returning the worst possible
+ * metric, but only when using the OpenWatcom compiler.
+ * It may be worth investigating using a different version of the Windows
+ * SDK with OpenWatcom in the future, though this may be fixed in OpenWatcom
+ * 2.0.
+ */
+ return (ULONG)-1;
+# else
MIB_IPFORWARD_ROW2 row;
- SOCKADDR_INET ignored;
- if(!ares_fpGetBestRoute2 ||
- ares_fpGetBestRoute2(/* The interface to use. The index is ignored since we are
- * passing a LUID.
- */
- luid, 0,
- /* No specific source address. */
- NULL,
- /* Our destination address. */
- dest,
- /* No options. */
- 0,
- /* The route row. */
- &row,
- /* The best source address, which we don't need. */
- &ignored) != NO_ERROR
- /* If the metric is "unused" (-1) or too large for us to add the two
- * metrics, use the worst possible, thus sorting this last.
- */
- || row.Metric == (ULONG)-1
- || row.Metric > ((ULONG)-1) - interfaceMetric) {
+ SOCKADDR_INET ignored;
+ if (GetBestRoute2(/* The interface to use. The index is ignored since we are
+ * passing a LUID.
+ */
+ luid, 0,
+ /* No specific source address. */
+ NULL,
+ /* Our destination address. */
+ dest,
+ /* No options. */
+ 0,
+ /* The route row. */
+ &row,
+ /* The best source address, which we don't need. */
+ &ignored) != NO_ERROR
+ /* If the metric is "unused" (-1) or too large for us to add the two
+ * metrics, use the worst possible, thus sorting this last.
+ */
+ || row.Metric == (ULONG)-1 ||
+ row.Metric > ((ULONG)-1) - interfaceMetric) {
/* Return the worst possible metric. */
return (ULONG)-1;
}
@@ -1064,10 +850,11 @@ static ULONG getBestRouteMetric(IF_LUID * const luid, /* Can't be const :( */
* which describes the combination as a "sum".
*/
return row.Metric + interfaceMetric;
+# endif /* __WATCOMC__ */
}
/*
- * get_DNS_AdaptersAddresses()
+ * get_DNS_Windows()
*
* Locates DNS info using GetAdaptersAddresses() function from the Internet
* Protocol Helper (IP Helper) API. When located, this returns a pointer
@@ -1080,24 +867,27 @@ static ULONG getBestRouteMetric(IF_LUID * const luid, /* Can't be const :( */
*
* Implementation supports Windows XP and newer.
*/
-#define IPAA_INITIAL_BUF_SZ 15 * 1024
-#define IPAA_MAX_TRIES 3
-static int get_DNS_AdaptersAddresses(char **outptr)
+# define IPAA_INITIAL_BUF_SZ 15 * 1024
+# define IPAA_MAX_TRIES 3
+
+static ares_bool_t get_DNS_Windows(char **outptr)
{
IP_ADAPTER_DNS_SERVER_ADDRESS *ipaDNSAddr;
- IP_ADAPTER_ADDRESSES *ipaa, *newipaa, *ipaaEntry;
- ULONG ReqBufsz = IPAA_INITIAL_BUF_SZ;
- ULONG Bufsz = IPAA_INITIAL_BUF_SZ;
- ULONG AddrFlags = 0;
- int trying = IPAA_MAX_TRIES;
- int res;
+ IP_ADAPTER_ADDRESSES *ipaa;
+ IP_ADAPTER_ADDRESSES *newipaa;
+ IP_ADAPTER_ADDRESSES *ipaaEntry;
+ ULONG ReqBufsz = IPAA_INITIAL_BUF_SZ;
+ ULONG Bufsz = IPAA_INITIAL_BUF_SZ;
+ ULONG AddrFlags = 0;
+ int trying = IPAA_MAX_TRIES;
+ int res;
/* The capacity of addresses, in elements. */
- size_t addressesSize;
+ size_t addressesSize;
/* The number of elements in addresses. */
- size_t addressesIndex = 0;
+ size_t addressesIndex = 0;
/* The addresses we will sort. */
- Address *addresses;
+ Address *addresses;
union {
struct sockaddr *sa;
@@ -1107,53 +897,50 @@ static int get_DNS_AdaptersAddresses(char **outptr)
*outptr = NULL;
- /* Verify run-time availability of GetAdaptersAddresses() */
- if (ares_fpGetAdaptersAddresses == ZERO_NULL)
- return 0;
-
ipaa = ares_malloc(Bufsz);
- if (!ipaa)
- return 0;
+ if (!ipaa) {
+ return ARES_FALSE;
+ }
/* Start with enough room for a few DNS server addresses and we'll grow it
* as we encounter more.
*/
addressesSize = 4;
- addresses = (Address*)ares_malloc(sizeof(Address) * addressesSize);
- if(addresses == NULL) {
+ addresses = (Address *)ares_malloc(sizeof(Address) * addressesSize);
+ if (addresses == NULL) {
/* We need room for at least some addresses to function. */
ares_free(ipaa);
- return 0;
+ return ARES_FALSE;
}
/* Usually this call suceeds with initial buffer size */
- res = (*ares_fpGetAdaptersAddresses) (AF_UNSPEC, AddrFlags, NULL,
- ipaa, &ReqBufsz);
- if ((res != ERROR_BUFFER_OVERFLOW) && (res != ERROR_SUCCESS))
+ res = GetAdaptersAddresses(AF_UNSPEC, AddrFlags, NULL, ipaa, &ReqBufsz);
+ if ((res != ERROR_BUFFER_OVERFLOW) && (res != ERROR_SUCCESS)) {
goto done;
+ }
- while ((res == ERROR_BUFFER_OVERFLOW) && (--trying))
- {
- if (Bufsz < ReqBufsz)
- {
+ while ((res == ERROR_BUFFER_OVERFLOW) && (--trying)) {
+ if (Bufsz < ReqBufsz) {
newipaa = ares_realloc(ipaa, ReqBufsz);
- if (!newipaa)
+ if (!newipaa) {
goto done;
+ }
Bufsz = ReqBufsz;
- ipaa = newipaa;
+ ipaa = newipaa;
}
- res = (*ares_fpGetAdaptersAddresses) (AF_UNSPEC, AddrFlags, NULL,
- ipaa, &ReqBufsz);
- if (res == ERROR_SUCCESS)
+ res = GetAdaptersAddresses(AF_UNSPEC, AddrFlags, NULL, ipaa, &ReqBufsz);
+ if (res == ERROR_SUCCESS) {
break;
+ }
}
- if (res != ERROR_SUCCESS)
+ if (res != ERROR_SUCCESS) {
goto done;
+ }
- for (ipaaEntry = ipaa; ipaaEntry; ipaaEntry = ipaaEntry->Next)
- {
- if(ipaaEntry->OperStatus != IfOperStatusUp)
- continue;
+ for (ipaaEntry = ipaa; ipaaEntry; ipaaEntry = ipaaEntry->Next) {
+ if (ipaaEntry->OperStatus != IfOperStatusUp) {
+ continue;
+ }
/* For each interface, find any associated DNS servers as IPv4 or IPv6
* addresses. For each found address, find the best route to that DNS
@@ -1161,97 +948,78 @@ static int get_DNS_AdaptersAddresses(char **outptr)
* compute the resulting total metric, just as Windows routing will do.
* Then, sort all the addresses found by the metric.
*/
- for (ipaDNSAddr = ipaaEntry->FirstDnsServerAddress;
- ipaDNSAddr;
- ipaDNSAddr = ipaDNSAddr->Next)
- {
- namesrvr.sa = ipaDNSAddr->Address.lpSockaddr;
-
- if (namesrvr.sa->sa_family == AF_INET)
- {
+ for (ipaDNSAddr = ipaaEntry->FirstDnsServerAddress; ipaDNSAddr;
+ ipaDNSAddr = ipaDNSAddr->Next) {
+ char ipaddr[INET6_ADDRSTRLEN] = "";
+ namesrvr.sa = ipaDNSAddr->Address.lpSockaddr;
+
+ if (namesrvr.sa->sa_family == AF_INET) {
if ((namesrvr.sa4->sin_addr.S_un.S_addr == INADDR_ANY) ||
- (namesrvr.sa4->sin_addr.S_un.S_addr == INADDR_NONE))
+ (namesrvr.sa4->sin_addr.S_un.S_addr == INADDR_NONE)) {
continue;
+ }
/* Allocate room for another address, if necessary, else skip. */
- if(addressesIndex == addressesSize) {
- const size_t newSize = addressesSize + 4;
+ if (addressesIndex == addressesSize) {
+ const size_t newSize = addressesSize + 4;
Address * const newMem =
- (Address*)ares_realloc(addresses, sizeof(Address) * newSize);
- if(newMem == NULL) {
+ (Address *)ares_realloc(addresses, sizeof(Address) * newSize);
+ if (newMem == NULL) {
continue;
}
- addresses = newMem;
+ addresses = newMem;
addressesSize = newSize;
}
- /* Vista required for Luid or Ipv4Metric */
- if (ares_IsWindowsVistaOrGreater())
- {
- /* Save the address as the next element in addresses. */
- addresses[addressesIndex].metric =
- getBestRouteMetric(&ipaaEntry->Luid,
- (SOCKADDR_INET*)(namesrvr.sa),
- ipaaEntry->Ipv4Metric);
- }
- else
- {
- addresses[addressesIndex].metric = (ULONG)-1;
- }
+ addresses[addressesIndex].metric =
+ getBestRouteMetric(&ipaaEntry->Luid, (SOCKADDR_INET *)(namesrvr.sa),
+ ipaaEntry->Ipv4Metric);
/* Record insertion index to make qsort stable */
addresses[addressesIndex].orig_idx = addressesIndex;
- if (! ares_inet_ntop(AF_INET, &namesrvr.sa4->sin_addr,
- addresses[addressesIndex].text,
- sizeof(addresses[0].text))) {
+ if (!ares_inet_ntop(AF_INET, &namesrvr.sa4->sin_addr, ipaddr,
+ sizeof(ipaddr))) {
continue;
}
+ snprintf(addresses[addressesIndex].text,
+ sizeof(addresses[addressesIndex].text), "[%s]:%u", ipaddr,
+ ntohs(namesrvr.sa4->sin_port));
++addressesIndex;
- }
- else if (namesrvr.sa->sa_family == AF_INET6)
- {
+ } else if (namesrvr.sa->sa_family == AF_INET6) {
if (memcmp(&namesrvr.sa6->sin6_addr, &ares_in6addr_any,
- sizeof(namesrvr.sa6->sin6_addr)) == 0)
+ sizeof(namesrvr.sa6->sin6_addr)) == 0) {
continue;
+ }
/* Allocate room for another address, if necessary, else skip. */
- if(addressesIndex == addressesSize) {
- const size_t newSize = addressesSize + 4;
+ if (addressesIndex == addressesSize) {
+ const size_t newSize = addressesSize + 4;
Address * const newMem =
- (Address*)ares_realloc(addresses, sizeof(Address) * newSize);
- if(newMem == NULL) {
+ (Address *)ares_realloc(addresses, sizeof(Address) * newSize);
+ if (newMem == NULL) {
continue;
}
- addresses = newMem;
+ addresses = newMem;
addressesSize = newSize;
}
- /* Vista required for Luid or Ipv4Metric */
- if (ares_IsWindowsVistaOrGreater())
- {
- /* Save the address as the next element in addresses. */
- addresses[addressesIndex].metric =
- getBestRouteMetric(&ipaaEntry->Luid,
- (SOCKADDR_INET*)(namesrvr.sa),
- ipaaEntry->Ipv6Metric);
- }
- else
- {
- addresses[addressesIndex].metric = (ULONG)-1;
- }
+ addresses[addressesIndex].metric =
+ getBestRouteMetric(&ipaaEntry->Luid, (SOCKADDR_INET *)(namesrvr.sa),
+ ipaaEntry->Ipv6Metric);
/* Record insertion index to make qsort stable */
addresses[addressesIndex].orig_idx = addressesIndex;
- if (! ares_inet_ntop(AF_INET6, &namesrvr.sa6->sin6_addr,
- addresses[addressesIndex].text,
- sizeof(addresses[0].text))) {
+ if (!ares_inet_ntop(AF_INET6, &namesrvr.sa6->sin6_addr, ipaddr,
+ sizeof(ipaddr))) {
continue;
}
+ snprintf(addresses[addressesIndex].text,
+ sizeof(addresses[addressesIndex].text), "[%s]:%u", ipaddr,
+ ntohs(namesrvr.sa6->sin6_port));
++addressesIndex;
- }
- else {
+ } else {
/* Skip non-IPv4/IPv6 addresses completely. */
continue;
}
@@ -1265,16 +1033,16 @@ static int get_DNS_AdaptersAddresses(char **outptr)
/* Join them all into a single string, removing duplicates. */
{
size_t i;
- for(i = 0; i < addressesIndex; ++i) {
+ for (i = 0; i < addressesIndex; ++i) {
size_t j;
/* Look for this address text appearing previously in the results. */
- for(j = 0; j < i; ++j) {
- if(strcmp(addresses[j].text, addresses[i].text) == 0) {
+ for (j = 0; j < i; ++j) {
+ if (strcmp(addresses[j].text, addresses[i].text) == 0) {
break;
}
}
/* Iff we didn't emit this address already, emit it now. */
- if(j == i) {
+ if (j == i) {
/* Add that to outptr (if we can). */
commajoin(outptr, addresses[i].text);
}
@@ -1284,43 +1052,15 @@ static int get_DNS_AdaptersAddresses(char **outptr)
done:
ares_free(addresses);
- if (ipaa)
+ if (ipaa) {
ares_free(ipaa);
+ }
if (!*outptr) {
- return 0;
+ return ARES_FALSE;
}
- return 1;
-}
-
-/*
- * get_DNS_Windows()
- *
- * Locates DNS info from Windows employing most suitable methods available at
- * run-time no matter which Windows version it is. When located, this returns
- * a pointer in *outptr to a newly allocated memory area holding a string with
- * a space or comma seperated list of DNS IP addresses, null-terminated.
- *
- * Returns 0 and nullifies *outptr upon inability to return DNSes string.
- *
- * Returns 1 and sets *outptr when returning a dynamically allocated string.
- *
- * Implementation supports Windows 95 and newer.
- */
-static int get_DNS_Windows(char **outptr)
-{
- /* Try using IP helper API GetAdaptersAddresses(). IPv4 + IPv6, also sorts
- * DNS servers by interface route metrics to try to use the best DNS server. */
- if (get_DNS_AdaptersAddresses(outptr))
- return 1;
-
- /* Try using IP helper API GetNetworkParams(). IPv4 only. */
- if (get_DNS_NetworkParams(outptr))
- return 1;
-
- /* Fall-back to registry information */
- return get_DNS_Registry(outptr);
+ return ARES_TRUE;
}
/*
@@ -1336,26 +1076,26 @@ static int get_DNS_Windows(char **outptr)
*
* Implementation supports Windows Server 2003 and newer
*/
-static int get_SuffixList_Windows(char **outptr)
+static ares_bool_t get_SuffixList_Windows(char **outptr)
{
- HKEY hKey, hKeyEnum;
+ HKEY hKey;
+ HKEY hKeyEnum;
char keyName[256];
DWORD keyNameBuffSize;
DWORD keyIdx = 0;
- char *p = NULL;
+ char *p = NULL;
*outptr = NULL;
- if (ares__getplatform() != WIN_NT)
- return 0;
+ if (ares__getplatform() != WIN_NT) {
+ return ARES_FALSE;
+ }
/* 1. Global DNS Suffix Search List */
- if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0,
- KEY_READ, &hKey) == ERROR_SUCCESS)
- {
+ if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY, 0, KEY_READ, &hKey) ==
+ ERROR_SUCCESS) {
get_REG_SZ(hKey, SEARCHLIST_KEY, outptr);
- if (get_REG_SZ(hKey, DOMAIN_KEY, &p))
- {
+ if (get_REG_SZ(hKey, DOMAIN_KEY, &p)) {
commajoin(outptr, p);
ares_free(p);
p = NULL;
@@ -1363,11 +1103,9 @@ static int get_SuffixList_Windows(char **outptr)
RegCloseKey(hKey);
}
- if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NT_DNSCLIENT, 0,
- KEY_READ, &hKey) == ERROR_SUCCESS)
- {
- if (get_REG_SZ(hKey, SEARCHLIST_KEY, &p))
- {
+ if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NT_DNSCLIENT, 0, KEY_READ, &hKey) ==
+ ERROR_SUCCESS) {
+ if (get_REG_SZ(hKey, SEARCHLIST_KEY, &p)) {
commajoin(outptr, p);
ares_free(p);
p = NULL;
@@ -1377,11 +1115,9 @@ static int get_SuffixList_Windows(char **outptr)
/* 2. Connection Specific Search List composed of:
* a. Primary DNS Suffix */
- if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_DNSCLIENT, 0,
- KEY_READ, &hKey) == ERROR_SUCCESS)
- {
- if (get_REG_SZ(hKey, PRIMARYDNSSUFFIX_KEY, &p))
- {
+ if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_DNSCLIENT, 0, KEY_READ, &hKey) ==
+ ERROR_SUCCESS) {
+ if (get_REG_SZ(hKey, PRIMARYDNSSUFFIX_KEY, &p)) {
commajoin(outptr, p);
ares_free(p);
p = NULL;
@@ -1391,33 +1127,29 @@ static int get_SuffixList_Windows(char **outptr)
/* b. Interface SearchList, Domain, DhcpDomain */
if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, WIN_NS_NT_KEY "\\" INTERFACES_KEY, 0,
- KEY_READ, &hKey) == ERROR_SUCCESS)
- {
- for(;;)
- {
+ KEY_READ, &hKey) == ERROR_SUCCESS) {
+ for (;;) {
keyNameBuffSize = sizeof(keyName);
- if (RegEnumKeyExA(hKey, keyIdx++, keyName, &keyNameBuffSize,
- 0, NULL, NULL, NULL)
- != ERROR_SUCCESS)
+ if (RegEnumKeyExA(hKey, keyIdx++, keyName, &keyNameBuffSize, 0, NULL,
+ NULL, NULL) != ERROR_SUCCESS) {
break;
- if (RegOpenKeyExA(hKey, keyName, 0, KEY_QUERY_VALUE, &hKeyEnum)
- != ERROR_SUCCESS)
+ }
+ if (RegOpenKeyExA(hKey, keyName, 0, KEY_QUERY_VALUE, &hKeyEnum) !=
+ ERROR_SUCCESS) {
continue;
+ }
/* p can be comma separated (SearchList) */
- if (get_REG_SZ(hKeyEnum, SEARCHLIST_KEY, &p))
- {
+ if (get_REG_SZ(hKeyEnum, SEARCHLIST_KEY, &p)) {
commajoin(outptr, p);
ares_free(p);
p = NULL;
}
- if (get_REG_SZ(hKeyEnum, DOMAIN_KEY, &p))
- {
+ if (get_REG_SZ(hKeyEnum, DOMAIN_KEY, &p)) {
commajoin(outptr, p);
ares_free(p);
p = NULL;
}
- if (get_REG_SZ(hKeyEnum, DHCPDOMAIN_KEY, &p))
- {
+ if (get_REG_SZ(hKeyEnum, DHCPDOMAIN_KEY, &p)) {
commajoin(outptr, p);
ares_free(p);
p = NULL;
@@ -1427,49 +1159,52 @@ static int get_SuffixList_Windows(char **outptr)
RegCloseKey(hKey);
}
- return *outptr != NULL;
+ return *outptr != NULL ? ARES_TRUE : ARES_FALSE;
}
#endif
-static int init_by_resolv_conf(ares_channel channel)
+static ares_status_t init_by_resolv_conf(ares_channel channel)
{
#if !defined(ANDROID) && !defined(__ANDROID__) && !defined(WATT32) && \
- !defined(CARES_USE_LIBRESOLV)
+ !defined(CARES_USE_LIBRESOLV)
char *line = NULL;
#endif
- int status = -1, nservers = 0, nsort = 0;
- struct server_state *servers = NULL;
- struct apattern *sortlist = NULL;
+ ares_status_t status = ARES_EOF;
+ size_t nservers = 0;
+ size_t nsort = 0;
+ struct server_state *servers = NULL;
+ struct apattern *sortlist = NULL;
#ifdef WIN32
- if (channel->nservers > -1) /* don't override ARES_OPT_SERVER */
- return ARES_SUCCESS;
+ if (channel->nservers > 0) { /* don't override ARES_OPT_SERVER */
+ return ARES_SUCCESS;
+ }
- if (get_DNS_Windows(&line))
- {
+ if (get_DNS_Windows(&line)) {
status = config_nameserver(&servers, &nservers, line);
ares_free(line);
}
- if (channel->ndomains == -1 && get_SuffixList_Windows(&line))
- {
- status = set_search(channel, line);
- ares_free(line);
+ if (channel->ndomains == 0 && get_SuffixList_Windows(&line)) {
+ status = set_search(channel, line);
+ ares_free(line);
}
- if (status == ARES_SUCCESS)
+ if (status == ARES_SUCCESS) {
status = ARES_EOF;
- else
+ } else {
/* Catch the case when all the above checks fail (which happens when there
is no network card or the cable is unplugged) */
status = ARES_EFILE;
+ }
#elif defined(__MVS__)
- struct __res_state *res = 0;
- int count4, count6;
- __STATEEXTIPV6 *v6;
+ struct __res_state *res = 0;
+ size_t count4;
+ size_t count6;
+ __STATEEXTIPV6 *v6;
struct server_state *pserver;
if (0 == res) {
int rc = res_init();
@@ -1483,34 +1218,38 @@ static int init_by_resolv_conf(ares_channel channel)
}
v6 = res->__res_extIPv6;
- count4 = res->nscount;
- if (v6) {
- count6 = v6->__stat_nscount;
+ if (res->nscount > 0) {
+ count4 = (size_t)res->nscount;
+ }
+
+ if (v6 && v6->__stat_nscount > 0) {
+ count6 = (size_t)v6->__stat_nscount;
} else {
count6 = 0;
}
- nservers = count4 + count6;
- servers = ares_malloc(nservers * sizeof(struct server_state));
- if (!servers)
+ nservers = (size_t)(count4 + count6);
+ servers = ares_malloc(nservers * sizeof(*servers));
+ if (!servers) {
return ARES_ENOMEM;
+ }
- memset(servers, 0, nservers * sizeof(struct server_state));
+ memset(servers, 0, nservers * sizeof(*servers));
pserver = servers;
for (int i = 0; i < count4; ++i, ++pserver) {
struct sockaddr_in *addr_in = &(res->nsaddr_list[i]);
pserver->addr.addrV4.s_addr = addr_in->sin_addr.s_addr;
- pserver->addr.family = AF_INET;
- pserver->addr.udp_port = addr_in->sin_port;
- pserver->addr.tcp_port = addr_in->sin_port;
+ pserver->addr.family = AF_INET;
+ pserver->addr.udp_port = addr_in->sin_port;
+ pserver->addr.tcp_port = addr_in->sin_port;
}
for (int j = 0; j < count6; ++j, ++pserver) {
struct sockaddr_in6 *addr_in = &(v6->__stat_nsaddr_list[j]);
memcpy(&(pserver->addr.addr.addr6), &(addr_in->sin6_addr),
sizeof(addr_in->sin6_addr));
- pserver->addr.family = AF_INET6;
+ pserver->addr.family = AF_INET6;
pserver->addr.udp_port = addr_in->sin6_port;
pserver->addr.tcp_port = addr_in->sin6_port;
}
@@ -1522,59 +1261,64 @@ static int init_by_resolv_conf(ares_channel channel)
/* Under RISC OS, name servers are listed in the
system variable Inet$Resolvers, space separated. */
- line = getenv("Inet$Resolvers");
+ line = getenv("Inet$Resolvers");
status = ARES_EOF;
if (line) {
char *resolvers = ares_strdup(line), *pos, *space;
- if (!resolvers)
+ if (!resolvers) {
return ARES_ENOMEM;
+ }
pos = resolvers;
do {
space = strchr(pos, ' ');
- if (space)
+ if (space) {
*space = '\0';
+ }
status = config_nameserver(&servers, &nservers, pos);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
break;
+ }
pos = space + 1;
} while (space);
- if (status == ARES_SUCCESS)
+ if (status == ARES_SUCCESS) {
status = ARES_EOF;
+ }
ares_free(resolvers);
}
#elif defined(WATT32)
- int i;
+ size_t i;
sock_init();
for (i = 0; def_nameservers[i]; i++)
- ;
- if (i == 0)
+ ;
+ if (i == 0) {
return ARES_SUCCESS; /* use localhost DNS server */
+ }
nservers = i;
- servers = ares_malloc(sizeof(struct server_state));
- if (!servers)
- return ARES_ENOMEM;
- memset(servers, 0, sizeof(struct server_state));
+ servers = ares_malloc(nservers * sizeof(*servers));
+ if (!servers) {
+ return ARES_ENOMEM;
+ }
+ memset(servers, 0, nservers * sizeof(*servers));
- for (i = 0; def_nameservers[i]; i++)
- {
+ for (i = 0; def_nameservers[i]; i++) {
servers[i].addr.addrV4.s_addr = htonl(def_nameservers[i]);
- servers[i].addr.family = AF_INET;
- servers[i].addr.udp_port = 0;
- servers[i].addr.tcp_port = 0;
+ servers[i].addr.family = AF_INET;
+ servers[i].addr.udp_port = 0;
+ servers[i].addr.tcp_port = 0;
}
status = ARES_EOF;
#elif defined(ANDROID) || defined(__ANDROID__)
- unsigned int i;
+ size_t i;
char **dns_servers;
- char *domains;
+ char *domains;
size_t num_servers;
/* Use the Android connectivity manager to get a list
@@ -1584,23 +1328,20 @@ static int init_by_resolv_conf(ares_channel channel)
* permission and must use the ConnectivityManager which
* is Java only. */
dns_servers = ares_get_android_server_list(MAX_DNS_PROPERTIES, &num_servers);
- if (dns_servers != NULL)
- {
- for (i = 0; i < num_servers; i++)
- {
+ if (dns_servers != NULL) {
+ for (i = 0; i < num_servers; i++) {
status = config_nameserver(&servers, &nservers, dns_servers[i]);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
break;
+ }
status = ARES_EOF;
}
- for (i = 0; i < num_servers; i++)
- {
+ for (i = 0; i < num_servers; i++) {
ares_free(dns_servers[i]);
}
ares_free(dns_servers);
}
- if (channel->ndomains == -1)
- {
+ if (channel->ndomains == 0) {
domains = ares_get_android_search_domains_list();
set_search(channel, domains);
ares_free(domains);
@@ -1616,7 +1357,7 @@ static int init_by_resolv_conf(ares_channel channel)
* because this will get the same ones (if it works). */
if (status != ARES_EOF) {
char propname[PROP_NAME_MAX];
- char propvalue[PROP_VALUE_MAX]="";
+ char propvalue[PROP_VALUE_MAX] = "";
for (i = 1; i <= MAX_DNS_PROPERTIES; i++) {
snprintf(propname, sizeof(propname), "%s%u", DNS_PROP_NAME_PREFIX, i);
if (__system_property_get(propname, propvalue) < 1) {
@@ -1625,90 +1366,121 @@ static int init_by_resolv_conf(ares_channel channel)
}
status = config_nameserver(&servers, &nservers, propvalue);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
break;
+ }
status = ARES_EOF;
}
}
# endif /* HAVE___SYSTEM_PROPERTY_GET */
#elif defined(CARES_USE_LIBRESOLV)
struct __res_state res;
+ int result;
memset(&res, 0, sizeof(res));
- int result = res_ninit(&res);
+ result = res_ninit(&res);
if (result == 0 && (res.options & RES_INIT)) {
status = ARES_EOF;
- if (channel->nservers == -1) {
+ if (channel->nservers == 0) {
union res_sockaddr_union addr[MAXNS];
- int nscount = res_getservers(&res, addr, MAXNS);
- int i;
+ int nscount = res_getservers(&res, addr, MAXNS);
+ int i;
for (i = 0; i < nscount; ++i) {
- char str[INET6_ADDRSTRLEN];
- int config_status;
- sa_family_t family = addr[i].sin.sin_family;
+ char ipaddr[INET6_ADDRSTRLEN] = "";
+ char ipaddr_port[INET6_ADDRSTRLEN + 8]; /* [%s]:NNNNN */
+ unsigned short port = 0;
+ ares_status_t config_status;
+ sa_family_t family = addr[i].sin.sin_family;
if (family == AF_INET) {
- ares_inet_ntop(family, &addr[i].sin.sin_addr, str, sizeof(str));
+ ares_inet_ntop(family, &addr[i].sin.sin_addr, ipaddr, sizeof(ipaddr));
+ port = ntohs(addr[i].sin.sin_port);
} else if (family == AF_INET6) {
- ares_inet_ntop(family, &addr[i].sin6.sin6_addr, str, sizeof(str));
+ ares_inet_ntop(family, &addr[i].sin6.sin6_addr, ipaddr,
+ sizeof(ipaddr));
+ port = ntohs(addr[i].sin6.sin6_port);
} else {
continue;
}
- config_status = config_nameserver(&servers, &nservers, str);
+ if (port) {
+ snprintf(ipaddr_port, sizeof(ipaddr_port), "[%s]:%u", ipaddr, port);
+ } else {
+ snprintf(ipaddr_port, sizeof(ipaddr_port), "%s", ipaddr);
+ }
+
+ config_status = config_nameserver(&servers, &nservers, ipaddr_port);
if (config_status != ARES_SUCCESS) {
status = config_status;
break;
}
}
}
- if (channel->ndomains == -1) {
- int entries = 0;
- while ((entries < MAXDNSRCH) && res.dnsrch[entries])
+ if (channel->ndomains == 0) {
+ size_t entries = 0;
+ while ((entries < MAXDNSRCH) && res.dnsrch[entries]) {
entries++;
- if(entries) {
+ }
+ if (entries) {
channel->domains = ares_malloc(entries * sizeof(char *));
if (!channel->domains) {
status = ARES_ENOMEM;
} else {
- int i;
+ size_t i;
channel->ndomains = entries;
for (i = 0; i < channel->ndomains; ++i) {
channel->domains[i] = ares_strdup(res.dnsrch[i]);
- if (!channel->domains[i])
+ if (!channel->domains[i]) {
status = ARES_ENOMEM;
+ }
}
}
}
}
- if (channel->ndots == -1)
- channel->ndots = res.ndots;
- if (channel->tries == -1)
- channel->tries = res.retry;
- if (channel->rotate == -1)
- channel->rotate = res.options & RES_ROTATE;
- if (channel->timeout == -1)
- channel->timeout = res.retrans * 1000;
+ if (channel->ndots == 0 && res.ndots > 0) {
+ channel->ndots = (size_t)res.ndots;
+ }
+
+ if (channel->tries == 0 && res.retry > 0) {
+ channel->tries = (size_t)res.retry;
+ }
+
+ if (!(channel->optmask & (ARES_OPT_ROTATE | ARES_OPT_NOROTATE))) {
+ channel->rotate = (res.options & RES_ROTATE) ? ARES_TRUE : ARES_FALSE;
+ }
+
+ if (channel->timeout == 0) {
+ if (res.retrans > 0) {
+ channel->timeout = (unsigned int)res.retrans * 1000;
+ }
+# ifdef __APPLE__
+ if (res.retry >= 0) {
+ channel->timeout /= ((unsigned int)res.retry + 1) *
+ (unsigned int)(res.nscount > 0 ? res.nscount : 1);
+ }
+# endif
+ }
res_ndestroy(&res);
}
#else
{
- char *p;
- FILE *fp;
- size_t linesize;
- int error;
- int update_domains;
+ char *p;
+ FILE *fp;
+ size_t linesize;
+ int error;
+ int update_domains;
const char *resolvconf_path;
/* Don't read resolv.conf and friends if we don't have to */
- if (ARES_CONFIG_CHECK(channel))
- return ARES_SUCCESS;
+ if (ARES_CONFIG_CHECK(channel)) {
+ return ARES_SUCCESS;
+ }
/* Only update search domains if they're not already specified */
- update_domains = (channel->ndomains == -1);
+ update_domains = (channel->ndomains == 0);
/* Support path for resolvconf filename set by ares_init_options */
- if(channel->resolvconf_path) {
+ if (channel->resolvconf_path) {
resolvconf_path = channel->resolvconf_path;
} else {
resolvconf_path = PATH_RESOLV_CONF;
@@ -1716,41 +1488,41 @@ static int init_by_resolv_conf(ares_channel channel)
fp = fopen(resolvconf_path, "r");
if (fp) {
- while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
- {
- if ((p = try_config(line, "domain", ';')) && update_domains)
+ while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS) {
+ if ((p = try_config(line, "domain", ';')) && update_domains) {
status = config_domain(channel, p);
- else if ((p = try_config(line, "lookup", ';')) && !channel->lookups)
+ } else if ((p = try_config(line, "lookup", ';')) && !channel->lookups) {
status = config_lookup(channel, p, "bind", NULL, "file");
- else if ((p = try_config(line, "search", ';')) && update_domains)
+ } else if ((p = try_config(line, "search", ';')) && update_domains) {
status = set_search(channel, p);
- else if ((p = try_config(line, "nameserver", ';')) &&
- channel->nservers == -1)
+ } else if ((p = try_config(line, "nameserver", ';')) &&
+ channel->nservers == 0) {
status = config_nameserver(&servers, &nservers, p);
- else if ((p = try_config(line, "sortlist", ';')) &&
- channel->nsort == -1)
+ } else if ((p = try_config(line, "sortlist", ';')) &&
+ !(channel->optmask & ARES_OPT_SORTLIST)) {
status = config_sortlist(&sortlist, &nsort, p);
- else if ((p = try_config(line, "options", ';')))
+ } else if ((p = try_config(line, "options", ';'))) {
status = set_options(channel, p);
- else
+ } else {
status = ARES_SUCCESS;
- if (status != ARES_SUCCESS)
+ }
+ if (status != ARES_SUCCESS) {
break;
+ }
}
fclose(fp);
- }
- else {
+ } else {
error = ERRNO;
- switch(error) {
- case ENOENT:
- case ESRCH:
- status = ARES_EOF;
- break;
- default:
- DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
- error, strerror(error)));
- DEBUGF(fprintf(stderr, "Error opening file: %s\n", PATH_RESOLV_CONF));
- status = ARES_EFILE;
+ switch (error) {
+ case ENOENT:
+ case ESRCH:
+ status = ARES_EOF;
+ break;
+ default:
+ DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", error,
+ strerror(error)));
+ DEBUGF(fprintf(stderr, "Error opening file: %s\n", PATH_RESOLV_CONF));
+ status = ARES_EFILE;
}
}
@@ -1759,24 +1531,23 @@ static int init_by_resolv_conf(ares_channel channel)
fp = fopen("/etc/nsswitch.conf", "r");
if (fp) {
while ((status = ares__read_line(fp, &line, &linesize)) ==
- ARES_SUCCESS)
- {
- if ((p = try_config(line, "hosts:", '\0')) && !channel->lookups)
+ ARES_SUCCESS) {
+ if ((p = try_config(line, "hosts:", '\0')) && !channel->lookups) {
(void)config_lookup(channel, p, "dns", "resolve", "files");
+ }
}
fclose(fp);
- }
- else {
+ } else {
error = ERRNO;
- switch(error) {
- case ENOENT:
- case ESRCH:
- break;
- default:
- DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
- error, strerror(error)));
- DEBUGF(fprintf(stderr, "Error opening file: %s\n",
- "/etc/nsswitch.conf"));
+ switch (error) {
+ case ENOENT:
+ case ESRCH:
+ break;
+ default:
+ DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", error,
+ strerror(error)));
+ DEBUGF(fprintf(stderr, "Error opening file: %s\n",
+ "/etc/nsswitch.conf"));
}
/* ignore error, maybe we will get luck in next if clause */
@@ -1789,25 +1560,24 @@ static int init_by_resolv_conf(ares_channel channel)
fp = fopen("/etc/host.conf", "r");
if (fp) {
while ((status = ares__read_line(fp, &line, &linesize)) ==
- ARES_SUCCESS)
- {
- if ((p = try_config(line, "order", '\0')) && !channel->lookups)
+ ARES_SUCCESS) {
+ if ((p = try_config(line, "order", '\0')) && !channel->lookups) {
/* ignore errors */
(void)config_lookup(channel, p, "bind", NULL, "hosts");
+ }
}
fclose(fp);
- }
- else {
+ } else {
error = ERRNO;
- switch(error) {
- case ENOENT:
- case ESRCH:
- break;
- default:
- DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
- error, strerror(error)));
- DEBUGF(fprintf(stderr, "Error opening file: %s\n",
- "/etc/host.conf"));
+ switch (error) {
+ case ENOENT:
+ case ESRCH:
+ break;
+ default:
+ DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", error,
+ strerror(error)));
+ DEBUGF(
+ fprintf(stderr, "Error opening file: %s\n", "/etc/host.conf"));
}
/* ignore error, maybe we will get luck in next if clause */
@@ -1820,24 +1590,24 @@ static int init_by_resolv_conf(ares_channel channel)
fp = fopen("/etc/svc.conf", "r");
if (fp) {
while ((status = ares__read_line(fp, &line, &linesize)) ==
- ARES_SUCCESS)
- {
- if ((p = try_config(line, "hosts=", '\0')) && !channel->lookups)
+ ARES_SUCCESS) {
+ if ((p = try_config(line, "hosts=", '\0')) && !channel->lookups) {
/* ignore errors */
(void)config_lookup(channel, p, "bind", NULL, "local");
+ }
}
fclose(fp);
- }
- else {
+ } else {
error = ERRNO;
- switch(error) {
- case ENOENT:
- case ESRCH:
- break;
- default:
- DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
- error, strerror(error)));
- DEBUGF(fprintf(stderr, "Error opening file: %s\n", "/etc/svc.conf"));
+ switch (error) {
+ case ENOENT:
+ case ESRCH:
+ break;
+ default:
+ DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", error,
+ strerror(error)));
+ DEBUGF(
+ fprintf(stderr, "Error opening file: %s\n", "/etc/svc.conf"));
}
/* ignore error, default value will be chosen for `channel->lookups` */
@@ -1845,89 +1615,95 @@ static int init_by_resolv_conf(ares_channel channel)
}
}
- if(line)
+ if (line) {
ares_free(line);
+ }
}
#endif
/* Handle errors. */
- if (status != ARES_EOF)
- {
- if (servers != NULL)
- ares_free(servers);
- if (sortlist != NULL)
- ares_free(sortlist);
- return status;
+ if (status != ARES_EOF) {
+ if (servers != NULL) {
+ ares_free(servers);
}
+ if (sortlist != NULL) {
+ ares_free(sortlist);
+ }
+ return status;
+ }
/* If we got any name server entries, fill them in. */
- if (servers)
- {
- channel->servers = servers;
- channel->nservers = nservers;
- }
+ if (servers) {
+ channel->servers = servers;
+ channel->nservers = nservers;
+ }
/* If we got any sortlist entries, fill them in. */
- if (sortlist)
- {
- channel->sortlist = sortlist;
- channel->nsort = nsort;
- }
+ if (sortlist) {
+ channel->sortlist = sortlist;
+ channel->nsort = nsort;
+ }
return ARES_SUCCESS;
}
-static int init_by_defaults(ares_channel channel)
+static ares_status_t init_by_defaults(ares_channel channel)
{
- char *hostname = NULL;
- int rc = ARES_SUCCESS;
+ char *hostname = NULL;
+ ares_status_t rc = ARES_SUCCESS;
#ifdef HAVE_GETHOSTNAME
char *dot;
#endif
- if (channel->flags == -1)
- channel->flags = 0;
- if (channel->timeout == -1)
+ if (channel->timeout == 0) {
channel->timeout = DEFAULT_TIMEOUT;
- if (channel->tries == -1)
+ }
+
+ if (channel->tries == 0) {
channel->tries = DEFAULT_TRIES;
- if (channel->ndots == -1)
+ }
+
+ if (channel->ndots == 0) {
channel->ndots = 1;
- if (channel->rotate == -1)
- channel->rotate = 0;
- if (channel->udp_port == -1)
+ }
+
+ if (channel->udp_port == 0) {
channel->udp_port = htons(NAMESERVER_PORT);
- if (channel->tcp_port == -1)
+ }
+ if (channel->tcp_port == 0) {
channel->tcp_port = htons(NAMESERVER_PORT);
+ }
- if (channel->ednspsz == -1)
+ if (channel->ednspsz == 0) {
channel->ednspsz = EDNSPACKETSZ;
+ }
- if (channel->nservers == -1) {
+ if (channel->nservers == 0) {
/* If nobody specified servers, try a local named. */
- channel->servers = ares_malloc(sizeof(struct server_state));
+ channel->servers = ares_malloc(sizeof(*channel->servers));
if (!channel->servers) {
rc = ARES_ENOMEM;
goto error;
}
- channel->servers[0].addr.family = AF_INET;
+ memset(channel->servers, 0, sizeof(*channel->servers));
+ channel->servers[0].addr.family = AF_INET;
channel->servers[0].addr.addrV4.s_addr = htonl(INADDR_LOOPBACK);
- channel->servers[0].addr.udp_port = 0;
- channel->servers[0].addr.tcp_port = 0;
- channel->nservers = 1;
+ channel->servers[0].addr.udp_port = 0;
+ channel->servers[0].addr.tcp_port = 0;
+ channel->nservers = 1;
}
#if defined(USE_WINSOCK)
-#define toolong(x) (x == -1) && (SOCKERRNO == WSAEFAULT)
+# define toolong(x) (x == -1) && (SOCKERRNO == WSAEFAULT)
#elif defined(ENAMETOOLONG)
-#define toolong(x) (x == -1) && ((SOCKERRNO == ENAMETOOLONG) || \
- (SOCKERRNO == EINVAL))
+# define toolong(x) \
+ (x == -1) && ((SOCKERRNO == ENAMETOOLONG) || (SOCKERRNO == EINVAL))
#else
-#define toolong(x) (x == -1) && (SOCKERRNO == EINVAL)
+# define toolong(x) (x == -1) && (SOCKERRNO == EINVAL)
#endif
- if (channel->ndomains == -1) {
+ if (channel->ndomains == 0) {
/* Derive a default domain search list from the kernel hostname,
* or set it to empty if the hostname isn't helpful.
*/
@@ -1935,12 +1711,12 @@ static int init_by_defaults(ares_channel channel)
channel->ndomains = 0; /* default to none */
#else
GETHOSTNAME_TYPE_ARG2 lenv = 64;
- size_t len = 64;
- int res;
+ size_t len = 64;
+ int res;
channel->ndomains = 0; /* default to none */
hostname = ares_malloc(len);
- if(!hostname) {
+ if (!hostname) {
rc = ARES_ENOMEM;
goto error;
}
@@ -1948,19 +1724,18 @@ static int init_by_defaults(ares_channel channel)
do {
res = gethostname(hostname, lenv);
- if(toolong(res)) {
+ if (toolong(res)) {
char *p;
- len *= 2;
+ len *= 2;
lenv *= 2;
- p = ares_realloc(hostname, len);
- if(!p) {
+ p = ares_realloc(hostname, len);
+ if (!p) {
rc = ARES_ENOMEM;
goto error;
}
hostname = p;
continue;
- }
- else if(res) {
+ } else if (res) {
/* Lets not treat a gethostname failure as critical, since we
* are ok if gethostname doesn't even exist */
*hostname = '\0';
@@ -1987,477 +1762,642 @@ static int init_by_defaults(ares_channel channel)
#endif
}
- if (channel->nsort == -1) {
+ if (channel->nsort == 0) {
channel->sortlist = NULL;
- channel->nsort = 0;
}
if (!channel->lookups) {
channel->lookups = ares_strdup("fb");
- if (!channel->lookups)
+ if (!channel->lookups) {
rc = ARES_ENOMEM;
+ }
}
- error:
- if(rc) {
- if(channel->servers) {
+error:
+ if (rc) {
+ if (channel->servers) {
ares_free(channel->servers);
channel->servers = NULL;
}
+ channel->nservers = 0;
- if(channel->domains && channel->domains[0])
+ if (channel->domains && channel->domains[0]) {
ares_free(channel->domains[0]);
- if(channel->domains) {
+ }
+ if (channel->domains) {
ares_free(channel->domains);
channel->domains = NULL;
}
- if(channel->lookups) {
+ if (channel->lookups) {
ares_free(channel->lookups);
channel->lookups = NULL;
}
- if(channel->resolvconf_path) {
+ if (channel->resolvconf_path) {
ares_free(channel->resolvconf_path);
channel->resolvconf_path = NULL;
}
+
+ if (channel->hosts_path) {
+ ares_free(channel->hosts_path);
+ channel->hosts_path = NULL;
+ }
}
- if(hostname)
+ if (hostname) {
ares_free(hostname);
+ }
return rc;
}
-#if !defined(WIN32) && !defined(WATT32) && \
- !defined(ANDROID) && !defined(__ANDROID__) && !defined(CARES_USE_LIBRESOLV)
-static int config_domain(ares_channel channel, char *str)
+#if !defined(WIN32) && !defined(WATT32) && !defined(ANDROID) && \
+ !defined(__ANDROID__) && !defined(CARES_USE_LIBRESOLV)
+static ares_status_t config_domain(ares_channel channel, char *str)
{
char *q;
/* Set a single search domain. */
q = str;
- while (*q && !ISSPACE(*q))
+ while (*q && !ISSPACE(*q)) {
q++;
+ }
*q = '\0';
return set_search(channel, str);
}
-#if defined(__INTEL_COMPILER) && (__INTEL_COMPILER == 910) && \
- defined(__OPTIMIZE__) && defined(__unix__) && defined(__i386__)
- /* workaround icc 9.1 optimizer issue */
-# define vqualifier volatile
-#else
-# define vqualifier
-#endif
-
-static int config_lookup(ares_channel channel, const char *str,
- const char *bindch, const char *altbindch,
- const char *filech)
+# if defined(__INTEL_COMPILER) && (__INTEL_COMPILER == 910) && \
+ defined(__OPTIMIZE__) && defined(__unix__) && defined(__i386__)
+/* workaround icc 9.1 optimizer issue */
+# define vqualifier volatile
+# else
+# define vqualifier
+# endif
+
+static ares_status_t config_lookup(ares_channel channel, const char *str,
+ const char *bindch, const char *altbindch,
+ const char *filech)
{
- char lookups[3], *l;
+ char lookups[3];
+ char *l;
const char *vqualifier p;
- int found;
+ ares_bool_t found;
- if (altbindch == NULL)
+ if (altbindch == NULL) {
altbindch = bindch;
+ }
/* Set the lookup order. Only the first letter of each work
* is relevant, and it has to be "b" for DNS or "f" for the
* host file. Ignore everything else.
*/
- l = lookups;
- p = str;
- found = 0;
- while (*p)
- {
- if ((*p == *bindch || *p == *altbindch || *p == *filech) && l < lookups + 2) {
- if (*p == *bindch || *p == *altbindch) *l++ = 'b';
- else *l++ = 'f';
- found = 1;
+ l = lookups;
+ p = str;
+ found = ARES_FALSE;
+ while (*p) {
+ if ((*p == *bindch || *p == *altbindch || *p == *filech) &&
+ l < lookups + 2) {
+ if (*p == *bindch || *p == *altbindch) {
+ *l++ = 'b';
+ } else {
+ *l++ = 'f';
}
- while (*p && !ISSPACE(*p) && (*p != ','))
- p++;
- while (*p && (ISSPACE(*p) || (*p == ',')))
- p++;
+ found = ARES_TRUE;
+ }
+ while (*p && !ISSPACE(*p) && (*p != ',')) {
+ p++;
+ }
+ while (*p && (ISSPACE(*p) || (*p == ','))) {
+ p++;
}
- if (!found)
+ }
+ if (!found) {
return ARES_ENOTINITIALIZED;
- *l = '\0';
+ }
+ *l = '\0';
channel->lookups = ares_strdup(lookups);
return (channel->lookups) ? ARES_SUCCESS : ARES_ENOMEM;
}
-#endif /* !WIN32 & !WATT32 & !ANDROID & !__ANDROID__ & !CARES_USE_LIBRESOLV */
+#endif /* !WIN32 & !WATT32 & !ANDROID & !__ANDROID__ & !CARES_USE_LIBRESOLV */
#ifndef WATT32
/* Validate that the ip address matches the subnet (network base and network
* mask) specified. Addresses are specified in standard Network Byte Order as
* 16 bytes, and the netmask is 0 to 128 (bits).
*/
-static int ares_ipv6_subnet_matches(const unsigned char netbase[16],
- unsigned char netmask,
- const unsigned char ipaddr[16])
+static ares_bool_t ares_ipv6_subnet_matches(const unsigned char netbase[16],
+ unsigned char netmask,
+ const unsigned char ipaddr[16])
{
unsigned char mask[16] = { 0 };
unsigned char i;
/* Misuse */
- if (netmask > 128)
- return 0;
+ if (netmask > 128) {
+ return ARES_FALSE;
+ }
/* Quickly set whole bytes */
memset(mask, 0xFF, netmask / 8);
/* Set remaining bits */
- if(netmask % 8) {
+ if (netmask % 8) {
mask[netmask / 8] = (unsigned char)(0xff << (8 - (netmask % 8)));
}
- for (i=0; i<16; i++) {
- if ((netbase[i] & mask[i]) != (ipaddr[i] & mask[i]))
- return 0;
+ for (i = 0; i < 16; i++) {
+ if ((netbase[i] & mask[i]) != (ipaddr[i] & mask[i])) {
+ return ARES_FALSE;
+ }
}
- return 1;
+ return ARES_TRUE;
}
/* Return true iff the IPv6 ipaddr is blacklisted. */
-static int ares_ipv6_server_blacklisted(const unsigned char ipaddr[16])
+static ares_bool_t ares_ipv6_server_blacklisted(const unsigned char ipaddr[16])
{
/* A list of blacklisted IPv6 subnets. */
const struct {
const unsigned char netbase[16];
- unsigned char netmask;
+ unsigned char netmask;
} blacklist[] = {
- /* fec0::/10 was deprecated by [RFC3879] in September 2004. Formerly a
- * Site-Local scoped address prefix. These are never valid DNS servers,
- * but are known to be returned at least sometimes on Windows and Android.
- */
- {
- {
- 0xfe, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
- },
- 10
- }
+ /* fec0::/10 was deprecated by [RFC3879] in September 2004. Formerly a
+ * Site-Local scoped address prefix. These are never valid DNS servers,
+ * but are known to be returned at least sometimes on Windows and Android.
+ */
+ {{ 0xfe, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00 },
+ 10}
};
+
size_t i;
/* See if ipaddr matches any of the entries in the blacklist. */
for (i = 0; i < sizeof(blacklist) / sizeof(blacklist[0]); ++i) {
- if (ares_ipv6_subnet_matches(
- blacklist[i].netbase, blacklist[i].netmask, ipaddr))
- return 1;
+ if (ares_ipv6_subnet_matches(blacklist[i].netbase, blacklist[i].netmask,
+ ipaddr)) {
+ return ARES_TRUE;
+ }
}
- return 0;
+ return ARES_FALSE;
+}
+
+/* Parse address and port in these formats, either ipv4 or ipv6 addresses
+ * are allowed:
+ * ipaddr
+ * [ipaddr]
+ * [ipaddr]:port
+ *
+ * If a port is not specified, will set port to 0.
+ *
+ * Will fail if an IPv6 nameserver as detected by
+ * ares_ipv6_server_blacklisted()
+ *
+ * Returns an error code on failure, else ARES_SUCCESS
+ */
+static ares_status_t parse_dnsaddrport(const char *str, size_t len,
+ struct ares_addr *host,
+ unsigned short *port)
+{
+ char ipaddr[INET6_ADDRSTRLEN] = "";
+ char ipport[6] = "";
+ size_t mylen;
+ const char *addr_start = NULL;
+ const char *addr_end = NULL;
+ const char *port_start = NULL;
+ const char *port_end = NULL;
+
+ /* Must start with [, hex digit or : */
+ if (len == 0 || (*str != '[' && !isxdigit(*str) && *str != ':')) {
+ return ARES_EBADSTR;
+ }
+
+ /* If it starts with a bracket, must end with a bracket */
+ if (*str == '[') {
+ const char *ptr;
+ addr_start = str + 1;
+ ptr = memchr(addr_start, ']', len - 1);
+ if (ptr == NULL) {
+ return ARES_EBADSTR;
+ }
+ addr_end = ptr - 1;
+
+ /* Try to pull off port */
+ if ((size_t)(ptr - str) < len) {
+ ptr++;
+ if (*ptr != ':') {
+ return ARES_EBADSTR;
+ }
+
+ /* Missing port number */
+ if ((size_t)(ptr - str) == len) {
+ return ARES_EBADSTR;
+ }
+
+ port_start = ptr + 1;
+ port_end = str + (len - 1);
+ }
+ } else {
+ addr_start = str;
+ addr_end = str + (len - 1);
+ }
+
+ mylen = (size_t)(addr_end - addr_start) + 1;
+ /* Larger than buffer with null term */
+ if (mylen + 1 > sizeof(ipaddr)) {
+ return ARES_EBADSTR;
+ }
+
+ memset(ipaddr, 0, sizeof(ipaddr));
+ memcpy(ipaddr, addr_start, mylen);
+
+ if (port_start) {
+ mylen = (size_t)(port_end - port_start) + 1;
+ /* Larger than buffer with null term */
+ if (mylen + 1 > sizeof(ipport)) {
+ return ARES_EBADSTR;
+ }
+ memset(ipport, 0, sizeof(ipport));
+ memcpy(ipport, port_start, mylen);
+ } else {
+ snprintf(ipport, sizeof(ipport), "0");
+ }
+
+ /* Convert textual address to binary format. */
+ if (ares_inet_pton(AF_INET, ipaddr, &host->addrV4) == 1) {
+ host->family = AF_INET;
+ } else if (ares_inet_pton(AF_INET6, ipaddr, &host->addrV6) == 1
+ /* Silently skip blacklisted IPv6 servers. */
+ && !ares_ipv6_server_blacklisted(
+ (const unsigned char *)&host->addrV6)) {
+ host->family = AF_INET6;
+ } else {
+ return ARES_EBADSTR;
+ }
+
+ *port = (unsigned short)atoi(ipport);
+ return ARES_SUCCESS;
}
-/* Add the IPv4 or IPv6 nameservers in str (separated by commas) to the
- * servers list, updating servers and nservers as required.
+/* Add the IPv4 or IPv6 nameservers in str (separated by commas or spaces) to
+ * the servers list, updating servers and nservers as required.
+ *
+ * If a nameserver is encapsulated in [ ] it may optionally include a port
+ * suffix, e.g.:
+ * [127.0.0.1]:59591
+ *
+ * The extended format is required to support OpenBSD's resolv.conf format:
+ * https://man.openbsd.org/OpenBSD-5.1/resolv.conf.5
+ * As well as MacOS libresolv that may include a non-default port number.
*
* This will silently ignore blacklisted IPv6 nameservers as detected by
* ares_ipv6_server_blacklisted().
*
* Returns an error code on failure, else ARES_SUCCESS.
*/
-static int config_nameserver(struct server_state **servers, int *nservers,
- char *str)
+static ares_status_t config_nameserver(struct server_state **servers,
+ size_t *nservers, const char *str)
{
- struct ares_addr host;
+ struct ares_addr host;
struct server_state *newserv;
- char *p, *txtaddr;
+ const char *p;
+ const char *txtaddr;
/* On Windows, there may be more than one nameserver specified in the same
* registry key, so we parse input as a space or comma seperated list.
*/
- for (p = str; p;)
- {
- /* Skip whitespace and commas. */
- while (*p && (ISSPACE(*p) || (*p == ',')))
- p++;
- if (!*p)
- /* No more input, done. */
- break;
+ for (p = str; p;) {
+ unsigned short port;
- /* Pointer to start of IPv4 or IPv6 address part. */
- txtaddr = p;
-
- /* Advance past this address. */
- while (*p && !ISSPACE(*p) && (*p != ','))
- p++;
- if (*p)
- /* Null terminate this address. */
- *p++ = '\0';
- else
- /* Reached end of input, done when this address is processed. */
- p = NULL;
+ /* Skip whitespace and commas. */
+ while (*p && (ISSPACE(*p) || (*p == ','))) {
+ p++;
+ }
+ if (!*p) {
+ /* No more input, done. */
+ break;
+ }
- /* Convert textual address to binary format. */
- if (ares_inet_pton(AF_INET, txtaddr, &host.addrV4) == 1)
- host.family = AF_INET;
- else if (ares_inet_pton(AF_INET6, txtaddr, &host.addrV6) == 1
- /* Silently skip blacklisted IPv6 servers. */
- && !ares_ipv6_server_blacklisted(
- (const unsigned char *)&host.addrV6))
- host.family = AF_INET6;
- else
- continue;
+ /* Pointer to start of IPv4 or IPv6 address part. */
+ txtaddr = p;
- /* Resize servers state array. */
- newserv = ares_realloc(*servers, (*nservers + 1) *
- sizeof(struct server_state));
- if (!newserv)
- return ARES_ENOMEM;
+ /* Advance past this address. */
+ while (*p && !ISSPACE(*p) && (*p != ',')) {
+ p++;
+ }
+
+ if (parse_dnsaddrport(txtaddr, (size_t)(p - txtaddr), &host, &port) !=
+ ARES_SUCCESS) {
+ continue;
+ }
- /* Store address data. */
- newserv[*nservers].addr.family = host.family;
- newserv[*nservers].addr.udp_port = 0;
- newserv[*nservers].addr.tcp_port = 0;
- if (host.family == AF_INET)
- memcpy(&newserv[*nservers].addr.addrV4, &host.addrV4,
- sizeof(host.addrV4));
- else
- memcpy(&newserv[*nservers].addr.addrV6, &host.addrV6,
- sizeof(host.addrV6));
+ /* Resize servers state array. */
+ newserv = ares_realloc(*servers, (*nservers + 1) * sizeof(*newserv));
+ if (!newserv) {
+ return ARES_ENOMEM;
+ }
- /* Update arguments. */
- *servers = newserv;
- *nservers += 1;
+ memset(((unsigned char *)newserv) + ((*nservers) * sizeof(*newserv)), 0,
+ sizeof(*newserv));
+
+ /* Store address data. */
+ newserv[*nservers].addr.family = host.family;
+ newserv[*nservers].addr.udp_port = htons(port);
+ newserv[*nservers].addr.tcp_port = htons(port);
+ if (host.family == AF_INET) {
+ memcpy(&newserv[*nservers].addr.addrV4, &host.addrV4,
+ sizeof(host.addrV4));
+ } else {
+ memcpy(&newserv[*nservers].addr.addrV6, &host.addrV6,
+ sizeof(host.addrV6));
}
+ /* Update arguments. */
+ *servers = newserv;
+ *nservers += 1;
+ }
+
return ARES_SUCCESS;
}
-#endif /* !WATT32 */
+#endif /* !WATT32 */
-static int config_sortlist(struct apattern **sortlist, int *nsort,
- const char *str)
+static ares_status_t config_sortlist(struct apattern **sortlist, size_t *nsort,
+ const char *str)
{
struct apattern pat;
- const char *q;
+ const char *q;
+
+ *sortlist = NULL;
+ *nsort = 0;
/* Add sortlist entries. */
- while (*str && *str != ';')
- {
- int bits;
- char ipbuf[16], ipbufpfx[32];
- /* Find just the IP */
- q = str;
- while (*q && *q != '/' && *q != ';' && !ISSPACE(*q))
+ while (*str && *str != ';') {
+ int bits;
+ char ipbuf[17];
+ char ipbufpfx[32];
+ size_t len;
+
+ /* Find just the IP */
+ q = str;
+ while (*q && *q != '/' && *q != ';' && !ISSPACE(*q)) {
+ q++;
+ }
+
+ len = (size_t)(q - str);
+ if (len >= sizeof(ipbuf) - 1) {
+ ares_free(*sortlist);
+ *sortlist = NULL;
+ return ARES_EBADSTR;
+ }
+ memcpy(ipbuf, str, len);
+ ipbuf[len] = '\0';
+
+ /* Find the prefix */
+ if (*q == '/') {
+ const char *str2 = q + 1;
+ while (*q && *q != ';' && !ISSPACE(*q)) {
q++;
- memcpy(ipbuf, str, q-str);
- ipbuf[q-str] = '\0';
- /* Find the prefix */
- if (*q == '/')
- {
- const char *str2 = q+1;
- while (*q && *q != ';' && !ISSPACE(*q))
- q++;
- memcpy(ipbufpfx, str, q-str);
- ipbufpfx[q-str] = '\0';
- str = str2;
- }
- else
- ipbufpfx[0] = '\0';
- /* Lets see if it is CIDR */
- /* First we'll try IPv6 */
- if ((bits = ares_inet_net_pton(AF_INET6, ipbufpfx[0] ? ipbufpfx : ipbuf,
- &pat.addrV6,
- sizeof(pat.addrV6))) > 0)
- {
- pat.type = PATTERN_CIDR;
- pat.mask.bits = (unsigned short)bits;
- pat.family = AF_INET6;
- if (!sortlist_alloc(sortlist, nsort, &pat)) {
- ares_free(*sortlist);
- *sortlist = NULL;
- return ARES_ENOMEM;
- }
- }
- else if (ipbufpfx[0] &&
+ }
+ if (q - str >= 32) {
+ ares_free(*sortlist);
+ *sortlist = NULL;
+ return ARES_EBADSTR;
+ }
+ memcpy(ipbufpfx, str, (size_t)(q - str));
+ ipbufpfx[q - str] = '\0';
+ str = str2;
+ } else {
+ ipbufpfx[0] = '\0';
+ }
+ /* Lets see if it is CIDR */
+ /* First we'll try IPv6 */
+ if ((bits = ares_inet_net_pton(AF_INET6, ipbufpfx[0] ? ipbufpfx : ipbuf,
+ &pat.addrV6, sizeof(pat.addrV6))) > 0) {
+ pat.type = PATTERN_CIDR;
+ pat.mask.bits = (unsigned short)bits;
+ pat.family = AF_INET6;
+ if (!sortlist_alloc(sortlist, nsort, &pat)) {
+ ares_free(*sortlist);
+ *sortlist = NULL;
+ return ARES_ENOMEM;
+ }
+ } else if (ipbufpfx[0] &&
(bits = ares_inet_net_pton(AF_INET, ipbufpfx, &pat.addrV4,
- sizeof(pat.addrV4))) > 0)
- {
- pat.type = PATTERN_CIDR;
- pat.mask.bits = (unsigned short)bits;
- pat.family = AF_INET;
- if (!sortlist_alloc(sortlist, nsort, &pat)) {
- ares_free(*sortlist);
- *sortlist = NULL;
- return ARES_ENOMEM;
- }
- }
- /* See if it is just a regular IP */
- else if (ip_addr(ipbuf, q-str, &pat.addrV4) == 0)
- {
- if (ipbufpfx[0])
- {
- memcpy(ipbuf, str, q-str);
- ipbuf[q-str] = '\0';
- if (ip_addr(ipbuf, q-str, &pat.mask.addr4) != 0)
- natural_mask(&pat);
- }
- else
- natural_mask(&pat);
- pat.family = AF_INET;
- pat.type = PATTERN_MASK;
- if (!sortlist_alloc(sortlist, nsort, &pat)) {
- ares_free(*sortlist);
- *sortlist = NULL;
- return ARES_ENOMEM;
- }
+ sizeof(pat.addrV4))) > 0) {
+ pat.type = PATTERN_CIDR;
+ pat.mask.bits = (unsigned short)bits;
+ pat.family = AF_INET;
+ if (!sortlist_alloc(sortlist, nsort, &pat)) {
+ ares_free(*sortlist);
+ *sortlist = NULL;
+ return ARES_ENOMEM;
+ }
+ }
+ /* See if it is just a regular IP */
+ else if (ip_addr(ipbuf, q - str, &pat.addrV4) == 0) {
+ if (ipbufpfx[0]) {
+ len = (size_t)(q - str);
+ if (len >= sizeof(ipbuf) - 1) {
+ ares_free(*sortlist);
+ *sortlist = NULL;
+ return ARES_EBADSTR;
}
- else
- {
- while (*q && *q != ';' && !ISSPACE(*q))
- q++;
+ memcpy(ipbuf, str, len);
+ ipbuf[len] = '\0';
+
+ if (ip_addr(ipbuf, q - str, &pat.mask.addr4) != 0) {
+ natural_mask(&pat);
}
- str = q;
- while (ISSPACE(*str))
- str++;
+ } else {
+ natural_mask(&pat);
+ }
+ pat.family = AF_INET;
+ pat.type = PATTERN_MASK;
+ if (!sortlist_alloc(sortlist, nsort, &pat)) {
+ ares_free(*sortlist);
+ *sortlist = NULL;
+ return ARES_ENOMEM;
+ }
+ } else {
+ while (*q && *q != ';' && !ISSPACE(*q)) {
+ q++;
+ }
+ }
+ str = q;
+ while (ISSPACE(*str)) {
+ str++;
}
+ }
return ARES_SUCCESS;
}
-static int set_search(ares_channel channel, const char *str)
+static ares_status_t set_search(ares_channel channel, const char *str)
{
size_t cnt;
- if(channel->ndomains != -1) {
+ if (channel->ndomains > 0) {
/* LCOV_EXCL_START: all callers check ndomains == -1 */
/* if we already have some domains present, free them first */
- ares_strsplit_free(channel->domains, channel->ndomains);
- channel->domains = NULL;
- channel->ndomains = -1;
+ ares__strsplit_free(channel->domains, (size_t)channel->ndomains);
+ channel->domains = NULL;
+ channel->ndomains = 0;
} /* LCOV_EXCL_STOP */
- channel->domains = ares_strsplit(str, ", ", 1, &cnt);
- channel->ndomains = (int)cnt;
+ channel->domains = ares__strsplit(str, ", ", &cnt);
+ channel->ndomains = cnt;
if (channel->domains == NULL || channel->ndomains == 0) {
channel->domains = NULL;
- channel->ndomains = -1;
+ channel->ndomains = 0;
}
return ARES_SUCCESS;
}
-static int set_options(ares_channel channel, const char *str)
+static ares_status_t set_options(ares_channel channel, const char *str)
{
- const char *p, *q, *val;
+ const char *p;
+ const char *q;
+ const char *val;
p = str;
- while (*p)
- {
- q = p;
- while (*q && !ISSPACE(*q))
- q++;
- val = try_option(p, q, "ndots:");
- if (val && channel->ndots == -1)
- channel->ndots = aresx_sltosi(strtol(val, NULL, 10));
- val = try_option(p, q, "retrans:");
- if (val && channel->timeout == -1)
- channel->timeout = aresx_sltosi(strtol(val, NULL, 10));
- val = try_option(p, q, "retry:");
- if (val && channel->tries == -1)
- channel->tries = aresx_sltosi(strtol(val, NULL, 10));
- val = try_option(p, q, "rotate");
- if (val && channel->rotate == -1)
- channel->rotate = 1;
- p = q;
- while (ISSPACE(*p))
- p++;
+ while (*p) {
+ q = p;
+ while (*q && !ISSPACE(*q)) {
+ q++;
+ }
+ val = try_option(p, q, "ndots:");
+ if (val && channel->ndots == 0) {
+ channel->ndots = strtoul(val, NULL, 10);
+ }
+
+ val = try_option(p, q, "retrans:");
+ if (val && channel->timeout == 0) {
+ channel->timeout = strtoul(val, NULL, 10);
+ }
+
+ val = try_option(p, q, "retry:");
+ if (val && channel->tries == 0) {
+ channel->tries = strtoul(val, NULL, 10);
+ }
+
+ val = try_option(p, q, "rotate");
+ if (val && !(channel->optmask & (ARES_OPT_ROTATE | ARES_OPT_NOROTATE))) {
+ channel->rotate = ARES_TRUE;
+ }
+
+ p = q;
+ while (ISSPACE(*p)) {
+ p++;
}
+ }
return ARES_SUCCESS;
}
static const char *try_option(const char *p, const char *q, const char *opt)
{
- size_t len = strlen(opt);
+ size_t len = ares_strlen(opt);
return ((size_t)(q - p) >= len && !strncmp(p, opt, len)) ? &p[len] : NULL;
}
-#if !defined(WIN32) && !defined(WATT32) && \
- !defined(ANDROID) && !defined(__ANDROID__) && !defined(CARES_USE_LIBRESOLV)
+#if !defined(WIN32) && !defined(WATT32) && !defined(ANDROID) && \
+ !defined(__ANDROID__) && !defined(CARES_USE_LIBRESOLV)
static char *try_config(char *s, const char *opt, char scc)
{
size_t len;
- char *p;
- char *q;
+ char *p;
+ char *q;
- if (!s || !opt)
+ if (!s || !opt) {
/* no line or no option */
- return NULL; /* LCOV_EXCL_LINE */
+ return NULL; /* LCOV_EXCL_LINE */
+ }
/* Hash '#' character is always used as primary comment char, additionally
a not-NUL secondary comment char will be considered when specified. */
/* trim line comment */
p = s;
- if(scc)
- while (*p && (*p != '#') && (*p != scc))
+ if (scc) {
+ while (*p && (*p != '#') && (*p != scc)) {
p++;
- else
- while (*p && (*p != '#'))
+ }
+ } else {
+ while (*p && (*p != '#')) {
p++;
+ }
+ }
*p = '\0';
/* trim trailing whitespace */
q = p - 1;
- while ((q >= s) && ISSPACE(*q))
+ while ((q >= s) && ISSPACE(*q)) {
q--;
+ }
*++q = '\0';
/* skip leading whitespace */
p = s;
- while (*p && ISSPACE(*p))
+ while (*p && ISSPACE(*p)) {
p++;
+ }
- if (!*p)
+ if (!*p) {
/* empty line */
return NULL;
+ }
- if ((len = strlen(opt)) == 0)
+ if ((len = ares_strlen(opt)) == 0) {
/* empty option */
- return NULL; /* LCOV_EXCL_LINE */
+ return NULL; /* LCOV_EXCL_LINE */
+ }
- if (strncmp(p, opt, len) != 0)
+ if (strncmp(p, opt, len) != 0) {
/* line and option do not match */
return NULL;
+ }
/* skip over given option name */
p += len;
- if (!*p)
+ if (!*p) {
/* no option value */
- return NULL; /* LCOV_EXCL_LINE */
+ return NULL; /* LCOV_EXCL_LINE */
+ }
- if ((opt[len-1] != ':') && (opt[len-1] != '=') && !ISSPACE(*p))
+ if ((opt[len - 1] != ':') && (opt[len - 1] != '=') && !ISSPACE(*p)) {
/* whitespace between option name and value is mandatory
for given option names which do not end with ':' or '=' */
return NULL;
+ }
/* skip over whitespace */
- while (*p && ISSPACE(*p))
+ while (*p && ISSPACE(*p)) {
p++;
+ }
- if (!*p)
+ if (!*p) {
/* no option value */
return NULL;
+ }
/* return pointer to option value */
return p;
}
-#endif /* !WIN32 & !WATT32 & !ANDROID & !__ANDROID__ */
+#endif /* !WIN32 & !WATT32 & !ANDROID & !__ANDROID__ */
static int ip_addr(const char *ipbuf, ares_ssize_t len, struct in_addr *addr)
{
-
/* Four octets and three periods yields at most 15 characters. */
- if (len > 15)
+ if (len > 15) {
return -1;
+ }
- if (ares_inet_pton(AF_INET, ipbuf, addr) < 1)
+ if (ares_inet_pton(AF_INET, ipbuf, addr) < 1) {
return -1;
+ }
return 0;
}
@@ -2474,95 +2414,27 @@ static void natural_mask(struct apattern *pat)
/* This is out of date in the CIDR world, but some people might
* still rely on it.
*/
- if (IN_CLASSA(addr.s_addr))
+ if (IN_CLASSA(addr.s_addr)) {
pat->mask.addr4.s_addr = htonl(IN_CLASSA_NET);
- else if (IN_CLASSB(addr.s_addr))
+ } else if (IN_CLASSB(addr.s_addr)) {
pat->mask.addr4.s_addr = htonl(IN_CLASSB_NET);
- else
+ } else {
pat->mask.addr4.s_addr = htonl(IN_CLASSC_NET);
+ }
}
-static int sortlist_alloc(struct apattern **sortlist, int *nsort,
- struct apattern *pat)
+static ares_bool_t sortlist_alloc(struct apattern **sortlist, size_t *nsort,
+ struct apattern *pat)
{
struct apattern *newsort;
newsort = ares_realloc(*sortlist, (*nsort + 1) * sizeof(struct apattern));
- if (!newsort)
- return 0;
+ if (!newsort) {
+ return ARES_FALSE;
+ }
newsort[*nsort] = *pat;
- *sortlist = newsort;
+ *sortlist = newsort;
(*nsort)++;
- return 1;
-}
-
-/* initialize an rc4 key. If possible a cryptographically secure random key
- is generated using a suitable function (for example win32's RtlGenRandom as
- described in
- http://blogs.msdn.com/michael_howard/archive/2005/01/14/353379.aspx
- otherwise the code defaults to cross-platform albeit less secure mechanism
- using rand
-*/
-static void randomize_key(unsigned char* key,int key_data_len)
-{
- int randomized = 0;
- int counter=0;
-#ifdef WIN32
- BOOLEAN res;
- if (ares_fpSystemFunction036)
- {
- res = (*ares_fpSystemFunction036) (key, key_data_len);
- if (res)
- randomized = 1;
- }
-#else /* !WIN32 */
-#ifdef CARES_RANDOM_FILE
- FILE *f = fopen(CARES_RANDOM_FILE, "rb");
- if(f) {
- setvbuf(f, NULL, _IONBF, 0);
- counter = aresx_uztosi(fread(key, 1, key_data_len, f));
- fclose(f);
- }
-#endif
-#endif /* WIN32 */
-
- if (!randomized) {
- for (;counter<key_data_len;counter++)
- key[counter]=(unsigned char)(rand() % 256); /* LCOV_EXCL_LINE */
- }
-}
-
-static int init_id_key(rc4_key* key,int key_data_len)
-{
- unsigned char index1;
- unsigned char index2;
- unsigned char* state;
- short counter;
- unsigned char *key_data_ptr = 0;
-
- key_data_ptr = ares_malloc(key_data_len);
- if (!key_data_ptr)
- return ARES_ENOMEM;
- memset(key_data_ptr, 0, key_data_len);
-
- state = &key->state[0];
- for(counter = 0; counter < 256; counter++)
- /* unnecessary AND but it keeps some compilers happier */
- state[counter] = (unsigned char)(counter & 0xff);
- randomize_key(key->state,key_data_len);
- key->x = 0;
- key->y = 0;
- index1 = 0;
- index2 = 0;
- for(counter = 0; counter < 256; counter++)
- {
- index2 = (unsigned char)((key_data_ptr[index1] + state[counter] +
- index2) % 256);
- ARES_SWAP_BYTE(&state[counter], &state[index2]);
-
- index1 = (unsigned char)((index1 + 1) % key_data_len);
- }
- ares_free(key_data_ptr);
- return ARES_SUCCESS;
+ return ARES_TRUE;
}
void ares_set_local_ip4(ares_channel channel, unsigned int local_ip)
@@ -2571,84 +2443,94 @@ void ares_set_local_ip4(ares_channel channel, unsigned int local_ip)
}
/* local_ip6 should be 16 bytes in length */
-void ares_set_local_ip6(ares_channel channel,
- const unsigned char* local_ip6)
+void ares_set_local_ip6(ares_channel channel, const unsigned char *local_ip6)
{
memcpy(&channel->local_ip6, local_ip6, sizeof(channel->local_ip6));
}
/* local_dev_name should be null terminated. */
-void ares_set_local_dev(ares_channel channel,
- const char* local_dev_name)
+void ares_set_local_dev(ares_channel channel, const char *local_dev_name)
{
- strncpy(channel->local_dev_name, local_dev_name,
- sizeof(channel->local_dev_name));
+ ares_strcpy(channel->local_dev_name, local_dev_name,
+ sizeof(channel->local_dev_name));
channel->local_dev_name[sizeof(channel->local_dev_name) - 1] = 0;
}
-
-void ares_set_socket_callback(ares_channel channel,
- ares_sock_create_callback cb,
- void *data)
+void ares_set_socket_callback(ares_channel channel,
+ ares_sock_create_callback cb, void *data)
{
- channel->sock_create_cb = cb;
+ channel->sock_create_cb = cb;
channel->sock_create_cb_data = data;
}
-void ares_set_socket_configure_callback(ares_channel channel,
+void ares_set_socket_configure_callback(ares_channel channel,
ares_sock_config_callback cb,
- void *data)
+ void *data)
{
- channel->sock_config_cb = cb;
+ channel->sock_config_cb = cb;
channel->sock_config_cb_data = data;
}
-void ares_set_socket_functions(ares_channel channel,
- const struct ares_socket_functions * funcs,
- void *data)
+void ares_set_socket_functions(ares_channel channel,
+ const struct ares_socket_functions *funcs,
+ void *data)
{
- channel->sock_funcs = funcs;
+ channel->sock_funcs = funcs;
channel->sock_func_cb_data = data;
}
int ares_set_sortlist(ares_channel channel, const char *sortstr)
{
- int nsort = 0;
+ size_t nsort = 0;
struct apattern *sortlist = NULL;
- int status;
+ ares_status_t status;
- if (!channel)
+ if (!channel) {
return ARES_ENODATA;
+ }
status = config_sortlist(&sortlist, &nsort, sortstr);
if (status == ARES_SUCCESS && sortlist) {
- if (channel->sortlist)
+ if (channel->sortlist) {
ares_free(channel->sortlist);
+ }
channel->sortlist = sortlist;
- channel->nsort = nsort;
+ channel->nsort = nsort;
}
- return status;
+ return (int)status;
}
-void ares__init_servers_state(ares_channel channel)
+ares_status_t ares__init_servers_state(ares_channel channel)
{
struct server_state *server;
- int i;
-
- for (i = 0; i < channel->nservers; i++)
- {
- server = &channel->servers[i];
- server->udp_socket = ARES_SOCKET_BAD;
- server->tcp_socket = ARES_SOCKET_BAD;
- server->tcp_connection_generation = ++channel->tcp_connection_generation;
- server->tcp_lenbuf_pos = 0;
- server->tcp_buffer_pos = 0;
- server->tcp_buffer = NULL;
- server->tcp_length = 0;
- server->qhead = NULL;
- server->qtail = NULL;
- ares__init_list_head(&server->queries_to_server);
- server->channel = channel;
- server->is_broken = 0;
+ size_t i;
+
+ for (i = 0; i < channel->nservers; i++) {
+ server = &channel->servers[i];
+
+ /* NOTE: Can't use memset() here because the server addresses have been
+ * filled in already */
+ server->tcp_parser = ares__buf_create();
+ if (server->tcp_parser == NULL) {
+ return ARES_ENOMEM;
+ }
+
+ server->tcp_send = ares__buf_create();
+ if (server->tcp_send == NULL) {
+ ares__buf_destroy(server->tcp_parser);
+ return ARES_ENOMEM;
+ }
+
+ server->idx = (size_t)i;
+ server->connections = ares__llist_create(NULL);
+ if (server->connections == NULL) {
+ ares__buf_destroy(server->tcp_parser);
+ ares__buf_destroy(server->tcp_send);
+ return ARES_ENOMEM;
}
+
+ server->tcp_connection_generation = ++channel->tcp_connection_generation;
+ server->channel = channel;
+ }
+ return ARES_SUCCESS;
}
diff --git a/src/lib/ares_iphlpapi.h b/src/lib/ares_iphlpapi.h
index 343aee3..0eaacd1 100644
--- a/src/lib/ares_iphlpapi.h
+++ b/src/lib/ares_iphlpapi.h
@@ -1,76 +1,85 @@
-#ifndef HEADER_CARES_IPHLPAPI_H
-#define HEADER_CARES_IPHLPAPI_H
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2004 - 2011 by Daniel Stenberg et al
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) 2004 Daniel Stenberg
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
+#ifndef HEADER_CARES_IPHLPAPI_H
+#define HEADER_CARES_IPHLPAPI_H
#if defined(USE_WINSOCK)
-#ifndef INET_ADDRSTRLEN
-#define INET_ADDRSTRLEN 22
-#endif
+# ifndef INET_ADDRSTRLEN
+# define INET_ADDRSTRLEN 22
+# endif
-#ifndef INET6_ADDRSTRLEN
-#define INET6_ADDRSTRLEN 65
-#endif
+# ifndef INET6_ADDRSTRLEN
+# define INET6_ADDRSTRLEN 65
+# endif
/* ---------------------------------- */
-#if !defined(_WS2DEF_) && \
- !defined(__CSADDR_DEFINED__) && \
+# if !defined(_WS2DEF_) && !defined(__CSADDR_DEFINED__) && \
!defined(__CSADDR_T_DEFINED)
/* ---------------------------------- */
typedef struct _SOCKET_ADDRESS {
LPSOCKADDR lpSockaddr;
- INT iSockaddrLength;
+ INT iSockaddrLength;
} SOCKET_ADDRESS, *PSOCKET_ADDRESS;
typedef struct _CSADDR_INFO {
SOCKET_ADDRESS LocalAddr;
SOCKET_ADDRESS RemoteAddr;
- INT iSocketType;
- INT iProtocol;
+ INT iSocketType;
+ INT iProtocol;
} CSADDR_INFO, *PCSADDR_INFO;
/* --------------------------------- */
-#endif /* ! _WS2DEF_ && \ */
+# endif /* ! _WS2DEF_ && \ */
/* ! __CSADDR_DEFINED__ && \ */
/* ! __CSADDR_T_DEFINED */
/* --------------------------------- */
/* ------------------------------- */
-#if !defined(IP_ADAPTER_DDNS_ENABLED)
+# if !defined(IP_ADAPTER_DDNS_ENABLED)
/* ------------------------------- */
-#define IP_ADAPTER_ADDRESS_DNS_ELIGIBLE 0x0001
-#define IP_ADAPTER_ADDRESS_TRANSIENT 0x0002
+# define IP_ADAPTER_ADDRESS_DNS_ELIGIBLE 0x0001
+# define IP_ADAPTER_ADDRESS_TRANSIENT 0x0002
-#define IP_ADAPTER_DDNS_ENABLED 0x0001
-#define IP_ADAPTER_REGISTER_ADAPTER_SUFFIX 0x0002
-#define IP_ADAPTER_DHCP_ENABLED 0x0004
-#define IP_ADAPTER_RECEIVE_ONLY 0x0008
-#define IP_ADAPTER_NO_MULTICAST 0x0010
-#define IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG 0x0020
+# define IP_ADAPTER_DDNS_ENABLED 0x0001
+# define IP_ADAPTER_REGISTER_ADAPTER_SUFFIX 0x0002
+# define IP_ADAPTER_DHCP_ENABLED 0x0004
+# define IP_ADAPTER_RECEIVE_ONLY 0x0008
+# define IP_ADAPTER_NO_MULTICAST 0x0010
+# define IP_ADAPTER_IPV6_OTHER_STATEFUL_CONFIG 0x0020
-#define GAA_FLAG_SKIP_UNICAST 0x0001
-#define GAA_FLAG_SKIP_ANYCAST 0x0002
-#define GAA_FLAG_SKIP_MULTICAST 0x0004
-#define GAA_FLAG_SKIP_DNS_SERVER 0x0008
-#define GAA_FLAG_INCLUDE_PREFIX 0x0010
-#define GAA_FLAG_SKIP_FRIENDLY_NAME 0x0020
+# define GAA_FLAG_SKIP_UNICAST 0x0001
+# define GAA_FLAG_SKIP_ANYCAST 0x0002
+# define GAA_FLAG_SKIP_MULTICAST 0x0004
+# define GAA_FLAG_SKIP_DNS_SERVER 0x0008
+# define GAA_FLAG_INCLUDE_PREFIX 0x0010
+# define GAA_FLAG_SKIP_FRIENDLY_NAME 0x0020
typedef enum {
IpPrefixOriginOther = 0,
@@ -120,100 +129,106 @@ typedef enum {
typedef struct _IP_ADAPTER_UNICAST_ADDRESS {
union {
ULONGLONG Alignment;
+
struct {
ULONG Length;
DWORD Flags;
} s;
} u;
struct _IP_ADAPTER_UNICAST_ADDRESS *Next;
- SOCKET_ADDRESS Address;
- IP_PREFIX_ORIGIN PrefixOrigin;
- IP_SUFFIX_ORIGIN SuffixOrigin;
- IP_DAD_STATE DadState;
- ULONG ValidLifetime;
- ULONG PreferredLifetime;
- ULONG LeaseLifetime;
+ SOCKET_ADDRESS Address;
+ IP_PREFIX_ORIGIN PrefixOrigin;
+ IP_SUFFIX_ORIGIN SuffixOrigin;
+ IP_DAD_STATE DadState;
+ ULONG ValidLifetime;
+ ULONG PreferredLifetime;
+ ULONG LeaseLifetime;
} IP_ADAPTER_UNICAST_ADDRESS, *PIP_ADAPTER_UNICAST_ADDRESS;
typedef struct _IP_ADAPTER_ANYCAST_ADDRESS {
union {
ULONGLONG Alignment;
+
struct {
ULONG Length;
DWORD Flags;
} s;
} u;
struct _IP_ADAPTER_ANYCAST_ADDRESS *Next;
- SOCKET_ADDRESS Address;
+ SOCKET_ADDRESS Address;
} IP_ADAPTER_ANYCAST_ADDRESS, *PIP_ADAPTER_ANYCAST_ADDRESS;
typedef struct _IP_ADAPTER_MULTICAST_ADDRESS {
union {
ULONGLONG Alignment;
+
struct {
ULONG Length;
DWORD Flags;
} s;
} u;
struct _IP_ADAPTER_MULTICAST_ADDRESS *Next;
- SOCKET_ADDRESS Address;
+ SOCKET_ADDRESS Address;
} IP_ADAPTER_MULTICAST_ADDRESS, *PIP_ADAPTER_MULTICAST_ADDRESS;
typedef struct _IP_ADAPTER_DNS_SERVER_ADDRESS {
union {
ULONGLONG Alignment;
+
struct {
ULONG Length;
DWORD Reserved;
} s;
} u;
struct _IP_ADAPTER_DNS_SERVER_ADDRESS *Next;
- SOCKET_ADDRESS Address;
+ SOCKET_ADDRESS Address;
} IP_ADAPTER_DNS_SERVER_ADDRESS, *PIP_ADAPTER_DNS_SERVER_ADDRESS;
typedef struct _IP_ADAPTER_PREFIX {
union {
ULONGLONG Alignment;
+
struct {
ULONG Length;
DWORD Flags;
} s;
} u;
struct _IP_ADAPTER_PREFIX *Next;
- SOCKET_ADDRESS Address;
- ULONG PrefixLength;
+ SOCKET_ADDRESS Address;
+ ULONG PrefixLength;
} IP_ADAPTER_PREFIX, *PIP_ADAPTER_PREFIX;
typedef struct _IP_ADAPTER_ADDRESSES {
union {
ULONGLONG Alignment;
+
struct {
ULONG Length;
DWORD IfIndex;
} s;
} u;
- struct _IP_ADAPTER_ADDRESSES *Next;
- PCHAR AdapterName;
- PIP_ADAPTER_UNICAST_ADDRESS FirstUnicastAddress;
- PIP_ADAPTER_ANYCAST_ADDRESS FirstAnycastAddress;
- PIP_ADAPTER_MULTICAST_ADDRESS FirstMulticastAddress;
+ struct _IP_ADAPTER_ADDRESSES *Next;
+ PCHAR AdapterName;
+ PIP_ADAPTER_UNICAST_ADDRESS FirstUnicastAddress;
+ PIP_ADAPTER_ANYCAST_ADDRESS FirstAnycastAddress;
+ PIP_ADAPTER_MULTICAST_ADDRESS FirstMulticastAddress;
PIP_ADAPTER_DNS_SERVER_ADDRESS FirstDnsServerAddress;
- PWCHAR DnsSuffix;
- PWCHAR Description;
- PWCHAR FriendlyName;
- BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
- DWORD PhysicalAddressLength;
- DWORD Flags;
- DWORD Mtu;
- DWORD IfType;
- IF_OPER_STATUS OperStatus;
- DWORD Ipv6IfIndex;
- DWORD ZoneIndices[16];
- PIP_ADAPTER_PREFIX FirstPrefix;
+ PWCHAR DnsSuffix;
+ PWCHAR Description;
+ PWCHAR FriendlyName;
+ BYTE PhysicalAddress[MAX_ADAPTER_ADDRESS_LENGTH];
+ DWORD PhysicalAddressLength;
+ DWORD Flags;
+ DWORD Mtu;
+ DWORD IfType;
+ IF_OPER_STATUS OperStatus;
+ DWORD Ipv6IfIndex;
+ DWORD ZoneIndices[16];
+ PIP_ADAPTER_PREFIX FirstPrefix;
} IP_ADAPTER_ADDRESSES, *PIP_ADAPTER_ADDRESSES;
/* -------------------------------- */
-#endif /* ! IP_ADAPTER_DDNS_ENABLED */
+# endif /* ! IP_ADAPTER_DDNS_ENABLED */
/* -------------------------------- */
#endif /* USE_WINSOCK */
diff --git a/src/lib/ares_ipv6.h b/src/lib/ares_ipv6.h
index fdbc21f..be8cbe9 100644
--- a/src/lib/ares_ipv6.h
+++ b/src/lib/ares_ipv6.h
@@ -1,29 +1,38 @@
-
-/* Copyright (C) 2005 by Dominick Meglio
+/* MIT License
+ *
+ * Copyright (c) 2005 Dominick Meglio
+ *
+ * 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 (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#ifndef ARES_IPV6_H
#define ARES_IPV6_H
#ifndef HAVE_PF_INET6
-#define PF_INET6 AF_INET6
+# define PF_INET6 AF_INET6
#endif
#ifndef HAVE_STRUCT_SOCKADDR_IN6
-struct sockaddr_in6
-{
+struct sockaddr_in6 {
unsigned short sin6_family;
unsigned short sin6_port;
unsigned long sin6_flowinfo;
@@ -32,21 +41,19 @@ struct sockaddr_in6
};
#endif
-typedef union
-{
+typedef union {
struct sockaddr sa;
struct sockaddr_in sa4;
struct sockaddr_in6 sa6;
} ares_sockaddr;
#ifndef HAVE_STRUCT_ADDRINFO
-struct addrinfo
-{
+struct addrinfo {
int ai_flags;
int ai_family;
int ai_socktype;
int ai_protocol;
- ares_socklen_t ai_addrlen; /* Follow rfc3493 struct addrinfo */
+ ares_socklen_t ai_addrlen; /* Follow rfc3493 struct addrinfo */
char *ai_canonname;
struct sockaddr *ai_addr;
struct addrinfo *ai_next;
@@ -54,28 +61,28 @@ struct addrinfo
#endif
#ifndef NS_IN6ADDRSZ
-#ifndef HAVE_STRUCT_IN6_ADDR
+# ifndef HAVE_STRUCT_IN6_ADDR
/* We cannot have it set to zero, so we pick a fixed value here */
-#define NS_IN6ADDRSZ 16
-#else
-#define NS_IN6ADDRSZ sizeof(struct in6_addr)
-#endif
+# define NS_IN6ADDRSZ 16
+# else
+# define NS_IN6ADDRSZ sizeof(struct in6_addr)
+# endif
#endif
#ifndef NS_INADDRSZ
-#define NS_INADDRSZ sizeof(struct in_addr)
+# define NS_INADDRSZ sizeof(struct in_addr)
#endif
#ifndef NS_INT16SZ
-#define NS_INT16SZ 2
+# define NS_INT16SZ 2
#endif
#ifndef IF_NAMESIZE
-#ifdef IFNAMSIZ
-#define IF_NAMESIZE IFNAMSIZ
-#else
-#define IF_NAMESIZE 256
-#endif
+# ifdef IFNAMSIZ
+# define IF_NAMESIZE IFNAMSIZ
+# else
+# define IF_NAMESIZE 256
+# endif
#endif
/* Defined in inet_net_pton.c for no particular reason. */
diff --git a/src/lib/ares_library_init.c b/src/lib/ares_library_init.c
index e0055d4..5cd39dc 100644
--- a/src/lib/ares_library_init.c
+++ b/src/lib/ares_library_init.c
@@ -1,37 +1,39 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2004-2009 by Daniel Stenberg
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) 2004 Daniel Stenberg
+ *
+ * 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 (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
#include "ares.h"
-#include "ares_library_init.h"
#include "ares_private.h"
/* library-private global and unique instance vars */
-#ifdef USE_WINSOCK
-fpGetNetworkParams_t ares_fpGetNetworkParams = ZERO_NULL;
-fpSystemFunction036_t ares_fpSystemFunction036 = ZERO_NULL;
-fpGetAdaptersAddresses_t ares_fpGetAdaptersAddresses = ZERO_NULL;
-fpGetBestRoute2_t ares_fpGetBestRoute2 = ZERO_NULL;
-#endif
-
#if defined(ANDROID) || defined(__ANDROID__)
-#include "ares_android.h"
+# include "ares_android.h"
#endif
/* library-private global vars with source visibility restricted to this file */
@@ -41,160 +43,120 @@ static int ares_init_flags;
/* library-private global vars with visibility across the whole library */
-/* Some systems may return either NULL or a valid pointer on malloc(0). c-ares should
- * never call malloc(0) so lets return NULL so we're more likely to find an issue if it
- * were to occur. */
+/* Some systems may return either NULL or a valid pointer on malloc(0). c-ares
+ * should never call malloc(0) so lets return NULL so we're more likely to find
+ * an issue if it were to occur. */
-static void *default_malloc(size_t size) { if (size == 0) { return NULL; } return malloc(size); }
+static void *default_malloc(size_t size)
+{
+ if (size == 0) {
+ return NULL;
+ }
+ return malloc(size);
+}
#if defined(WIN32)
/* We need indirections to handle Windows DLL rules. */
-static void *default_realloc(void *p, size_t size) { return realloc(p, size); }
-static void default_free(void *p) { free(p); }
+static void *default_realloc(void *p, size_t size)
+{
+ return realloc(p, size);
+}
+
+static void default_free(void *p)
+{
+ free(p);
+}
#else
-# define default_realloc realloc
-# define default_free free
+# define default_realloc realloc
+# define default_free free
#endif
-void *(*ares_malloc)(size_t size) = default_malloc;
+void *(*ares_malloc)(size_t size) = default_malloc;
void *(*ares_realloc)(void *ptr, size_t size) = default_realloc;
-void (*ares_free)(void *ptr) = default_free;
-
-#ifdef USE_WINSOCK
-static HMODULE hnd_iphlpapi;
-static HMODULE hnd_advapi32;
-#endif
+void (*ares_free)(void *ptr) = default_free;
-
-static int ares_win32_init(void)
+void *ares_malloc_zero(size_t size)
{
-#ifdef USE_WINSOCK
+ void *ptr = ares_malloc(size);
+ if (ptr != NULL) {
+ memset(ptr, 0, size);
+ }
- hnd_iphlpapi = 0;
- hnd_iphlpapi = LoadLibraryW(L"iphlpapi.dll");
- if (!hnd_iphlpapi)
- return ARES_ELOADIPHLPAPI;
-
- ares_fpGetNetworkParams = (fpGetNetworkParams_t)
- GetProcAddress(hnd_iphlpapi, "GetNetworkParams");
- if (!ares_fpGetNetworkParams)
- {
- FreeLibrary(hnd_iphlpapi);
- return ARES_EADDRGETNETWORKPARAMS;
- }
-
- ares_fpGetAdaptersAddresses = (fpGetAdaptersAddresses_t)
- GetProcAddress(hnd_iphlpapi, "GetAdaptersAddresses");
- if (!ares_fpGetAdaptersAddresses)
- {
- /* This can happen on clients before WinXP, I don't
- think it should be an error, unless we don't want to
- support Windows 2000 anymore */
- }
-
- ares_fpGetBestRoute2 = (fpGetBestRoute2_t)
- GetProcAddress(hnd_iphlpapi, "GetBestRoute2");
- if (!ares_fpGetBestRoute2)
- {
- /* This can happen on clients before Vista, I don't
- think it should be an error, unless we don't want to
- support Windows XP anymore */
- }
-
- /*
- * When advapi32.dll is unavailable or advapi32.dll has no SystemFunction036,
- * also known as RtlGenRandom, which is the case for Windows versions prior
- * to WinXP then c-ares uses portable rand() function. Then don't error here.
- */
-
- hnd_advapi32 = 0;
- hnd_advapi32 = LoadLibraryW(L"advapi32.dll");
- if (hnd_advapi32)
- {
- ares_fpSystemFunction036 = (fpSystemFunction036_t)
- GetProcAddress(hnd_advapi32, "SystemFunction036");
- }
-
-#endif
- return ARES_SUCCESS;
+ return ptr;
}
-
-static void ares_win32_cleanup(void)
+void *ares_realloc_zero(void *ptr, size_t orig_size, size_t new_size)
{
-#ifdef USE_WINSOCK
- if (hnd_advapi32)
- FreeLibrary(hnd_advapi32);
- if (hnd_iphlpapi)
- FreeLibrary(hnd_iphlpapi);
-#endif
-}
+ void *p = ares_realloc(ptr, new_size);
+ if (p == NULL) {
+ return NULL;
+ }
+
+ if (new_size > orig_size) {
+ memset((unsigned char *)p + orig_size, 0, new_size - orig_size);
+ }
+ return p;
+}
int ares_library_init(int flags)
{
- int res;
-
- if (ares_initialized)
- {
- ares_initialized++;
- return ARES_SUCCESS;
- }
+ if (ares_initialized) {
+ ares_initialized++;
+ return ARES_SUCCESS;
+ }
ares_initialized++;
- if (flags & ARES_LIB_INIT_WIN32)
- {
- res = ares_win32_init();
- if (res != ARES_SUCCESS)
- return res; /* LCOV_EXCL_LINE: can't test Win32 init failure */
- }
+ /* NOTE: ARES_LIB_INIT_WIN32 flag no longer used */
ares_init_flags = flags;
return ARES_SUCCESS;
}
-int ares_library_init_mem(int flags,
- void *(*amalloc)(size_t size),
- void (*afree)(void *ptr),
+int ares_library_init_mem(int flags, void *(*amalloc)(size_t size),
+ void (*afree)(void *ptr),
void *(*arealloc)(void *ptr, size_t size))
{
- if (amalloc)
+ if (amalloc) {
ares_malloc = amalloc;
- if (arealloc)
+ }
+ if (arealloc) {
ares_realloc = arealloc;
- if (afree)
+ }
+ if (afree) {
ares_free = afree;
+ }
return ares_library_init(flags);
}
-
void ares_library_cleanup(void)
{
- if (!ares_initialized)
+ if (!ares_initialized) {
return;
+ }
ares_initialized--;
- if (ares_initialized)
+ if (ares_initialized) {
return;
+ }
- if (ares_init_flags & ARES_LIB_INIT_WIN32)
- ares_win32_cleanup();
+ /* NOTE: ARES_LIB_INIT_WIN32 flag no longer used */
#if defined(ANDROID) || defined(__ANDROID__)
ares_library_cleanup_android();
#endif
ares_init_flags = ARES_LIB_INIT_NONE;
- ares_malloc = malloc;
- ares_realloc = realloc;
- ares_free = free;
+ ares_malloc = malloc;
+ ares_realloc = realloc;
+ ares_free = free;
}
-
int ares_library_initialized(void)
{
#ifdef USE_WINSOCK
- if (!ares_initialized)
+ if (!ares_initialized) {
return ARES_ENOTINITIALIZED;
+ }
#endif
return ARES_SUCCESS;
}
diff --git a/src/lib/ares_library_init.h b/src/lib/ares_library_init.h
deleted file mode 100644
index b3896d9..0000000
--- a/src/lib/ares_library_init.h
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef HEADER_CARES_LIBRARY_INIT_H
-#define HEADER_CARES_LIBRARY_INIT_H
-
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2004-2011 by Daniel Stenberg
- *
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
- */
-
-#include "ares_setup.h"
-
-#ifdef USE_WINSOCK
-
-#include <iphlpapi.h>
-#include "ares_iphlpapi.h"
-
-typedef DWORD (WINAPI *fpGetNetworkParams_t) (FIXED_INFO*, DWORD*);
-typedef BOOLEAN (APIENTRY *fpSystemFunction036_t) (void*, ULONG);
-typedef ULONG (WINAPI *fpGetAdaptersAddresses_t) ( ULONG, ULONG, void*, IP_ADAPTER_ADDRESSES*, ULONG* );
-typedef NETIO_STATUS (WINAPI *fpGetBestRoute2_t) ( NET_LUID *, NET_IFINDEX, const SOCKADDR_INET *, const SOCKADDR_INET *, ULONG, PMIB_IPFORWARD_ROW2, SOCKADDR_INET * );
-/* Forward-declaration of variables defined in ares_library_init.c */
-/* that are global and unique instances for whole c-ares library. */
-
-extern fpGetNetworkParams_t ares_fpGetNetworkParams;
-extern fpSystemFunction036_t ares_fpSystemFunction036;
-extern fpGetAdaptersAddresses_t ares_fpGetAdaptersAddresses;
-extern fpGetBestRoute2_t ares_fpGetBestRoute2;
-
-#endif /* USE_WINSOCK */
-
-#endif /* HEADER_CARES_LIBRARY_INIT_H */
-
diff --git a/src/lib/ares_llist.c b/src/lib/ares_llist.c
deleted file mode 100644
index 36ca84c..0000000
--- a/src/lib/ares_llist.c
+++ /dev/null
@@ -1,63 +0,0 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- *
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
- */
-
-#include "ares_setup.h"
-
-#include "ares.h"
-#include "ares_private.h"
-
-/* Routines for managing doubly-linked circular linked lists with a
- * dummy head.
- */
-
-/* Initialize a new head node */
-void ares__init_list_head(struct list_node* head) {
- head->prev = head;
- head->next = head;
- head->data = NULL;
-}
-
-/* Initialize a list node */
-void ares__init_list_node(struct list_node* node, void* d) {
- node->prev = NULL;
- node->next = NULL;
- node->data = d;
-}
-
-/* Returns true iff the given list is empty */
-int ares__is_list_empty(struct list_node* head) {
- return ((head->next == head) && (head->prev == head));
-}
-
-/* Inserts new_node before old_node */
-void ares__insert_in_list(struct list_node* new_node,
- struct list_node* old_node) {
- new_node->next = old_node;
- new_node->prev = old_node->prev;
- old_node->prev->next = new_node;
- old_node->prev = new_node;
-}
-
-/* Removes the node from the list it's in, if any */
-void ares__remove_from_list(struct list_node* node) {
- if (node->next != NULL) {
- node->prev->next = node->next;
- node->next->prev = node->prev;
- node->prev = NULL;
- node->next = NULL;
- }
-}
-
diff --git a/src/lib/ares_llist.h b/src/lib/ares_llist.h
deleted file mode 100644
index 20f4d1c..0000000
--- a/src/lib/ares_llist.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef __ARES_LLIST_H
-#define __ARES_LLIST_H
-
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- *
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
- */
-
-
-/* Node definition for circular, doubly-linked list */
-struct list_node {
- struct list_node *prev;
- struct list_node *next;
- void* data;
-};
-
-void ares__init_list_head(struct list_node* head);
-
-void ares__init_list_node(struct list_node* node, void* d);
-
-int ares__is_list_empty(struct list_node* head);
-
-void ares__insert_in_list(struct list_node* new_node,
- struct list_node* old_node);
-
-void ares__remove_from_list(struct list_node* node);
-
-#endif /* __ARES_LLIST_H */
diff --git a/src/lib/ares_math.c b/src/lib/ares_math.c
new file mode 100644
index 0000000..3c067e5
--- /dev/null
+++ b/src/lib/ares_math.c
@@ -0,0 +1,67 @@
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#include "ares_setup.h"
+#include "ares.h"
+#include "ares_private.h"
+
+/* Uses public domain code snipets from
+ * http://graphics.stanford.edu/~seander/bithacks.html */
+
+size_t ares__round_up_pow2(size_t n)
+{
+ /* NOTE: if already a power of 2, will return itself, not the next */
+ n--;
+ n |= n >> 1;
+ n |= n >> 2;
+ n |= n >> 4;
+ n |= n >> 8;
+ n |= n >> 16;
+ if (sizeof(size_t) > 4) {
+ n |= n >> 32;
+ }
+ n++;
+ return n;
+}
+
+size_t ares__log2(size_t n)
+{
+ static const unsigned char tab32[32] = { 0, 1, 28, 2, 29, 14, 24, 3,
+ 30, 22, 20, 15, 25, 17, 4, 8,
+ 31, 27, 13, 23, 21, 19, 16, 7,
+ 26, 12, 18, 6, 11, 5, 10, 9 };
+ static const unsigned char tab64[64] = {
+ 63, 0, 58, 1, 59, 47, 53, 2, 60, 39, 48, 27, 54, 33, 42, 3,
+ 61, 51, 37, 40, 49, 18, 28, 20, 55, 30, 34, 11, 43, 14, 22, 4,
+ 62, 57, 46, 52, 38, 26, 32, 41, 50, 36, 17, 19, 29, 10, 13, 21,
+ 56, 45, 25, 31, 35, 16, 9, 12, 44, 24, 15, 8, 23, 7, 6, 5
+ };
+
+ if (sizeof(size_t) == 4) {
+ return tab32[(n * 0x077CB531) >> 27];
+ }
+
+ return tab64[(n * 0x07EDD5E59A4E28C2) >> 58];
+}
diff --git a/src/lib/ares_mkquery.c b/src/lib/ares_mkquery.c
index 5aea914..da1898e 100644
--- a/src/lib/ares_mkquery.c
+++ b/src/lib/ares_mkquery.c
@@ -1,17 +1,28 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
diff --git a/src/lib/ares_nowarn.c b/src/lib/ares_nowarn.c
deleted file mode 100644
index f63d913..0000000
--- a/src/lib/ares_nowarn.c
+++ /dev/null
@@ -1,260 +0,0 @@
-
-/* Copyright (C) 2010-2013 by Daniel Stenberg
- *
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
- */
-
-
-#include "ares_setup.h"
-
-#ifdef HAVE_ASSERT_H
-# include <assert.h>
-#endif
-
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#if defined(__INTEL_COMPILER) && defined(__unix__)
-
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-# include <arpa/inet.h>
-#endif
-
-#endif /* __INTEL_COMPILER && __unix__ */
-
-#define BUILDING_ARES_NOWARN_C 1
-
-#include "ares_nowarn.h"
-
-#ifndef HAVE_LIMITS_H
-/* systems without <limits.h> we guess have 16 bit shorts, 32bit ints and
- 32bit longs */
-# define CARES_MASK_SSHORT 0x7FFF
-# define CARES_MASK_USHORT 0xFFFF
-# define CARES_MASK_SINT 0x7FFFFFFF
-# define CARES_MASK_UINT 0xFFFFFFFF
-# define CARES_MASK_SLONG 0x7FFFFFFFL
-# define CARES_MASK_ULONG 0xFFFFFFFFUL
-#else
-# define CARES_MASK_SSHORT SHRT_MAX
-# define CARES_MASK_USHORT USHRT_MAX
-# define CARES_MASK_SINT INT_MAX
-# define CARES_MASK_UINT UINT_MAX
-# define CARES_MASK_SLONG LONG_MAX
-# define CARES_MASK_ULONG ULONG_MAX
-#endif
-
-/*
-** unsigned size_t to signed long
-*/
-
-long aresx_uztosl(size_t uznum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- return (long)(uznum & (size_t) CARES_MASK_SLONG);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** unsigned size_t to signed int
-*/
-
-int aresx_uztosi(size_t uznum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- return (int)(uznum & (size_t) CARES_MASK_SINT);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** unsigned size_t to signed short
-*/
-
-short aresx_uztoss(size_t uznum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- return (short)(uznum & (size_t) CARES_MASK_SSHORT);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** signed int to signed short
-*/
-
-short aresx_sitoss(int sinum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- DEBUGASSERT(sinum >= 0);
- return (short)(sinum & (int) CARES_MASK_SSHORT);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** signed long to signed int
-*/
-
-int aresx_sltosi(long slnum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- DEBUGASSERT(slnum >= 0);
- return (int)(slnum & (long) CARES_MASK_SINT);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** signed ares_ssize_t to signed int
-*/
-
-int aresx_sztosi(ares_ssize_t sznum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- DEBUGASSERT(sznum >= 0);
- return (int)(sznum & (ares_ssize_t) CARES_MASK_SINT);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** signed ares_ssize_t to unsigned int
-*/
-
-unsigned int aresx_sztoui(ares_ssize_t sznum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- DEBUGASSERT(sznum >= 0);
- return (unsigned int)(sznum & (ares_ssize_t) CARES_MASK_UINT);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-/*
-** signed int to unsigned short
-*/
-
-unsigned short aresx_sitous(int sinum)
-{
-#ifdef __INTEL_COMPILER
-# pragma warning(push)
-# pragma warning(disable:810) /* conversion may lose significant bits */
-#endif
-
- DEBUGASSERT(sinum >= 0);
- return (unsigned short)(sinum & (int) CARES_MASK_USHORT);
-
-#ifdef __INTEL_COMPILER
-# pragma warning(pop)
-#endif
-}
-
-#if defined(__INTEL_COMPILER) && defined(__unix__)
-
-int aresx_FD_ISSET(int fd, fd_set *fdset)
-{
- #pragma warning(push)
- #pragma warning(disable:1469) /* clobber ignored */
- return FD_ISSET(fd, fdset);
- #pragma warning(pop)
-}
-
-void aresx_FD_SET(int fd, fd_set *fdset)
-{
- #pragma warning(push)
- #pragma warning(disable:1469) /* clobber ignored */
- FD_SET(fd, fdset);
- #pragma warning(pop)
-}
-
-void aresx_FD_ZERO(fd_set *fdset)
-{
- #pragma warning(push)
- #pragma warning(disable:593) /* variable was set but never used */
- FD_ZERO(fdset);
- #pragma warning(pop)
-}
-
-unsigned short aresx_htons(unsigned short usnum)
-{
-#if (__INTEL_COMPILER == 910) && defined(__i386__)
- return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF));
-#else
- #pragma warning(push)
- #pragma warning(disable:810) /* conversion may lose significant bits */
- return htons(usnum);
- #pragma warning(pop)
-#endif
-}
-
-unsigned short aresx_ntohs(unsigned short usnum)
-{
-#if (__INTEL_COMPILER == 910) && defined(__i386__)
- return (unsigned short)(((usnum << 8) & 0xFF00) | ((usnum >> 8) & 0x00FF));
-#else
- #pragma warning(push)
- #pragma warning(disable:810) /* conversion may lose significant bits */
- return ntohs(usnum);
- #pragma warning(pop)
-#endif
-}
-
-#endif /* __INTEL_COMPILER && __unix__ */
diff --git a/src/lib/ares_nowarn.h b/src/lib/ares_nowarn.h
deleted file mode 100644
index 505e622..0000000
--- a/src/lib/ares_nowarn.h
+++ /dev/null
@@ -1,61 +0,0 @@
-#ifndef HEADER_CARES_NOWARN_H
-#define HEADER_CARES_NOWARN_H
-
-
-/* Copyright (C) 2010-2012 by Daniel Stenberg
- *
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
- */
-
-long aresx_uztosl(size_t uznum);
-int aresx_uztosi(size_t uznum);
-short aresx_uztoss(size_t uznum);
-
-short aresx_sitoss(int sinum);
-
-int aresx_sltosi(long slnum);
-
-int aresx_sztosi(ares_ssize_t sznum);
-
-unsigned int aresx_sztoui(ares_ssize_t sznum);
-
-unsigned short aresx_sitous(int sinum);
-
-#if defined(__INTEL_COMPILER) && defined(__unix__)
-
-int aresx_FD_ISSET(int fd, fd_set *fdset);
-
-void aresx_FD_SET(int fd, fd_set *fdset);
-
-void aresx_FD_ZERO(fd_set *fdset);
-
-unsigned short aresx_htons(unsigned short usnum);
-
-unsigned short aresx_ntohs(unsigned short usnum);
-
-#ifndef BUILDING_ARES_NOWARN_C
-# undef FD_ISSET
-# define FD_ISSET(a,b) aresx_FD_ISSET((a),(b))
-# undef FD_SET
-# define FD_SET(a,b) aresx_FD_SET((a),(b))
-# undef FD_ZERO
-# define FD_ZERO(a) aresx_FD_ZERO((a))
-# undef htons
-# define htons(a) aresx_htons((a))
-# undef ntohs
-# define ntohs(a) aresx_ntohs((a))
-#endif
-
-#endif /* __INTEL_COMPILER && __unix__ */
-
-#endif /* HEADER_CARES_NOWARN_H */
diff --git a/src/lib/ares_options.c b/src/lib/ares_options.c
index de49de4..c2a3643 100644
--- a/src/lib/ares_options.c
+++ b/src/lib/ares_options.c
@@ -1,21 +1,30 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2008-2013 by Daniel Stenberg
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) 2008 Daniel Stenberg
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
-
#include "ares_setup.h"
#ifdef HAVE_ARPA_INET_H
@@ -27,255 +36,250 @@
#include "ares_inet_net_pton.h"
#include "ares_private.h"
-
-int ares_get_servers(ares_channel channel,
- struct ares_addr_node **servers)
+int ares_get_servers(ares_channel channel, struct ares_addr_node **servers)
{
struct ares_addr_node *srvr_head = NULL;
struct ares_addr_node *srvr_last = NULL;
struct ares_addr_node *srvr_curr;
- int status = ARES_SUCCESS;
- int i;
+ ares_status_t status = ARES_SUCCESS;
+ size_t i;
- if (!channel)
+ if (!channel) {
return ARES_ENODATA;
+ }
- for (i = 0; i < channel->nservers; i++)
- {
- /* Allocate storage for this server node appending it to the list */
- srvr_curr = ares_malloc_data(ARES_DATATYPE_ADDR_NODE);
- if (!srvr_curr)
- {
- status = ARES_ENOMEM;
- break;
- }
- if (srvr_last)
- {
- srvr_last->next = srvr_curr;
- }
- else
- {
- srvr_head = srvr_curr;
- }
- srvr_last = srvr_curr;
-
- /* Fill this server node data */
- srvr_curr->family = channel->servers[i].addr.family;
- if (srvr_curr->family == AF_INET)
- memcpy(&srvr_curr->addrV4, &channel->servers[i].addr.addrV4,
- sizeof(srvr_curr->addrV4));
- else
- memcpy(&srvr_curr->addrV6, &channel->servers[i].addr.addrV6,
- sizeof(srvr_curr->addrV6));
+ for (i = 0; i < channel->nservers; i++) {
+ /* Allocate storage for this server node appending it to the list */
+ srvr_curr = ares_malloc_data(ARES_DATATYPE_ADDR_NODE);
+ if (!srvr_curr) {
+ status = ARES_ENOMEM;
+ break;
+ }
+ if (srvr_last) {
+ srvr_last->next = srvr_curr;
+ } else {
+ srvr_head = srvr_curr;
}
+ srvr_last = srvr_curr;
+
+ /* Fill this server node data */
+ srvr_curr->family = channel->servers[i].addr.family;
+ if (srvr_curr->family == AF_INET) {
+ memcpy(&srvr_curr->addrV4, &channel->servers[i].addr.addrV4,
+ sizeof(srvr_curr->addrV4));
+ } else {
+ memcpy(&srvr_curr->addrV6, &channel->servers[i].addr.addrV6,
+ sizeof(srvr_curr->addrV6));
+ }
+ }
- if (status != ARES_SUCCESS)
- {
- if (srvr_head)
- {
- ares_free_data(srvr_head);
- srvr_head = NULL;
- }
+ if (status != ARES_SUCCESS) {
+ if (srvr_head) {
+ ares_free_data(srvr_head);
+ srvr_head = NULL;
}
+ }
*servers = srvr_head;
- return status;
+ return (int)status;
}
-int ares_get_servers_ports(ares_channel channel,
+int ares_get_servers_ports(ares_channel channel,
struct ares_addr_port_node **servers)
{
struct ares_addr_port_node *srvr_head = NULL;
struct ares_addr_port_node *srvr_last = NULL;
struct ares_addr_port_node *srvr_curr;
- int status = ARES_SUCCESS;
- int i;
+ ares_status_t status = ARES_SUCCESS;
+ size_t i;
- if (!channel)
+ if (!channel) {
return ARES_ENODATA;
+ }
- for (i = 0; i < channel->nservers; i++)
- {
- /* Allocate storage for this server node appending it to the list */
- srvr_curr = ares_malloc_data(ARES_DATATYPE_ADDR_PORT_NODE);
- if (!srvr_curr)
- {
- status = ARES_ENOMEM;
- break;
- }
- if (srvr_last)
- {
- srvr_last->next = srvr_curr;
- }
- else
- {
- srvr_head = srvr_curr;
- }
- srvr_last = srvr_curr;
-
- /* Fill this server node data */
- srvr_curr->family = channel->servers[i].addr.family;
- srvr_curr->udp_port = ntohs((unsigned short)channel->servers[i].addr.udp_port);
- srvr_curr->tcp_port = ntohs((unsigned short)channel->servers[i].addr.tcp_port);
- if (srvr_curr->family == AF_INET)
- memcpy(&srvr_curr->addrV4, &channel->servers[i].addr.addrV4,
- sizeof(srvr_curr->addrV4));
- else
- memcpy(&srvr_curr->addrV6, &channel->servers[i].addr.addrV6,
- sizeof(srvr_curr->addrV6));
+ for (i = 0; i < channel->nservers; i++) {
+ /* Allocate storage for this server node appending it to the list */
+ srvr_curr = ares_malloc_data(ARES_DATATYPE_ADDR_PORT_NODE);
+ if (!srvr_curr) {
+ status = ARES_ENOMEM;
+ break;
+ }
+ if (srvr_last) {
+ srvr_last->next = srvr_curr;
+ } else {
+ srvr_head = srvr_curr;
+ }
+ srvr_last = srvr_curr;
+
+ /* Fill this server node data */
+ srvr_curr->family = channel->servers[i].addr.family;
+ srvr_curr->udp_port =
+ ntohs((unsigned short)channel->servers[i].addr.udp_port);
+ srvr_curr->tcp_port =
+ ntohs((unsigned short)channel->servers[i].addr.tcp_port);
+ if (srvr_curr->family == AF_INET) {
+ memcpy(&srvr_curr->addrV4, &channel->servers[i].addr.addrV4,
+ sizeof(srvr_curr->addrV4));
+ } else {
+ memcpy(&srvr_curr->addrV6, &channel->servers[i].addr.addrV6,
+ sizeof(srvr_curr->addrV6));
}
+ }
- if (status != ARES_SUCCESS)
- {
- if (srvr_head)
- {
- ares_free_data(srvr_head);
- srvr_head = NULL;
- }
+ if (status != ARES_SUCCESS) {
+ if (srvr_head) {
+ ares_free_data(srvr_head);
+ srvr_head = NULL;
}
+ }
*servers = srvr_head;
- return status;
+ return (int)status;
}
-int ares_set_servers(ares_channel channel,
- struct ares_addr_node *servers)
+int ares_set_servers(ares_channel channel, struct ares_addr_node *servers)
{
struct ares_addr_node *srvr;
- int num_srvrs = 0;
- int i;
+ size_t num_srvrs = 0;
+ size_t i;
- if (ares_library_initialized() != ARES_SUCCESS)
- return ARES_ENOTINITIALIZED; /* LCOV_EXCL_LINE: n/a on non-WinSock */
+ if (ares_library_initialized() != ARES_SUCCESS) {
+ return ARES_ENOTINITIALIZED; /* LCOV_EXCL_LINE: n/a on non-WinSock */
+ }
- if (!channel)
+ if (!channel) {
return ARES_ENODATA;
+ }
- if (!ares__is_list_empty(&channel->all_queries))
+ if (ares__llist_len(channel->all_queries) != 0) {
return ARES_ENOTIMP;
+ }
ares__destroy_servers_state(channel);
- for (srvr = servers; srvr; srvr = srvr->next)
- {
- num_srvrs++;
- }
+ for (srvr = servers; srvr; srvr = srvr->next) {
+ num_srvrs++;
+ }
- if (num_srvrs > 0)
- {
- /* Allocate storage for servers state */
- channel->servers = ares_malloc(num_srvrs * sizeof(struct server_state));
- if (!channel->servers)
- {
- return ARES_ENOMEM;
- }
- channel->nservers = num_srvrs;
- /* Fill servers state address data */
- for (i = 0, srvr = servers; srvr; i++, srvr = srvr->next)
- {
- channel->servers[i].addr.family = srvr->family;
- channel->servers[i].addr.udp_port = 0;
- channel->servers[i].addr.tcp_port = 0;
- if (srvr->family == AF_INET)
- memcpy(&channel->servers[i].addr.addrV4, &srvr->addrV4,
- sizeof(srvr->addrV4));
- else
- memcpy(&channel->servers[i].addr.addrV6, &srvr->addrV6,
- sizeof(srvr->addrV6));
- }
- /* Initialize servers state remaining data */
- ares__init_servers_state(channel);
+ if (num_srvrs > 0) {
+ /* Allocate storage for servers state */
+ channel->servers = ares_malloc(num_srvrs * sizeof(*channel->servers));
+ if (!channel->servers) {
+ return ARES_ENOMEM;
+ }
+ memset(channel->servers, 0, num_srvrs * sizeof(*channel->servers));
+ channel->nservers = num_srvrs;
+ /* Fill servers state address data */
+ for (i = 0, srvr = servers; srvr; i++, srvr = srvr->next) {
+ channel->servers[i].addr.family = srvr->family;
+ channel->servers[i].addr.udp_port = 0;
+ channel->servers[i].addr.tcp_port = 0;
+ if (srvr->family == AF_INET) {
+ memcpy(&channel->servers[i].addr.addrV4, &srvr->addrV4,
+ sizeof(srvr->addrV4));
+ } else {
+ memcpy(&channel->servers[i].addr.addrV6, &srvr->addrV6,
+ sizeof(srvr->addrV6));
+ }
}
+ /* Initialize servers state remaining data */
+ ares__init_servers_state(channel);
+ }
return ARES_SUCCESS;
}
-int ares_set_servers_ports(ares_channel channel,
+int ares_set_servers_ports(ares_channel channel,
struct ares_addr_port_node *servers)
{
struct ares_addr_port_node *srvr;
- int num_srvrs = 0;
- int i;
+ size_t num_srvrs = 0;
+ size_t i;
- if (ares_library_initialized() != ARES_SUCCESS)
- return ARES_ENOTINITIALIZED; /* LCOV_EXCL_LINE: n/a on non-WinSock */
+ if (ares_library_initialized() != ARES_SUCCESS) {
+ return ARES_ENOTINITIALIZED; /* LCOV_EXCL_LINE: n/a on non-WinSock */
+ }
- if (!channel)
+ if (!channel) {
return ARES_ENODATA;
+ }
- if (!ares__is_list_empty(&channel->all_queries))
+ if (ares__llist_len(channel->all_queries) != 0) {
return ARES_ENOTIMP;
+ }
ares__destroy_servers_state(channel);
- for (srvr = servers; srvr; srvr = srvr->next)
- {
- num_srvrs++;
- }
+ for (srvr = servers; srvr; srvr = srvr->next) {
+ num_srvrs++;
+ }
- if (num_srvrs > 0)
- {
- /* Allocate storage for servers state */
- channel->servers = ares_malloc(num_srvrs * sizeof(struct server_state));
- if (!channel->servers)
- {
- return ARES_ENOMEM;
- }
- channel->nservers = num_srvrs;
- /* Fill servers state address data */
- for (i = 0, srvr = servers; srvr; i++, srvr = srvr->next)
- {
- channel->servers[i].addr.family = srvr->family;
- channel->servers[i].addr.udp_port = htons((unsigned short)srvr->udp_port);
- channel->servers[i].addr.tcp_port = htons((unsigned short)srvr->tcp_port);
- if (srvr->family == AF_INET)
- memcpy(&channel->servers[i].addr.addrV4, &srvr->addrV4,
- sizeof(srvr->addrV4));
- else
- memcpy(&channel->servers[i].addr.addrV6, &srvr->addrV6,
- sizeof(srvr->addrV6));
- }
- /* Initialize servers state remaining data */
- ares__init_servers_state(channel);
+ if (num_srvrs > 0) {
+ /* Allocate storage for servers state */
+ channel->servers = ares_malloc(num_srvrs * sizeof(*channel->servers));
+ if (!channel->servers) {
+ return ARES_ENOMEM;
+ }
+ memset(channel->servers, 0, num_srvrs * sizeof(*channel->servers));
+ channel->nservers = num_srvrs;
+ /* Fill servers state address data */
+ for (i = 0, srvr = servers; srvr; i++, srvr = srvr->next) {
+ channel->servers[i].addr.family = srvr->family;
+ channel->servers[i].addr.udp_port = htons((unsigned short)srvr->udp_port);
+ channel->servers[i].addr.tcp_port = htons((unsigned short)srvr->tcp_port);
+ if (srvr->family == AF_INET) {
+ memcpy(&channel->servers[i].addr.addrV4, &srvr->addrV4,
+ sizeof(srvr->addrV4));
+ } else {
+ memcpy(&channel->servers[i].addr.addrV6, &srvr->addrV6,
+ sizeof(srvr->addrV6));
+ }
}
+ /* Initialize servers state remaining data */
+ ares__init_servers_state(channel);
+ }
return ARES_SUCCESS;
}
/* Incomming string format: host[:port][,host[:port]]... */
/* IPv6 addresses with ports require square brackets [fe80::1%lo0]:53 */
-static int set_servers_csv(ares_channel channel,
- const char* _csv, int use_port)
+static ares_status_t set_servers_csv(ares_channel channel, const char *_csv,
+ int use_port)
{
- size_t i;
- char* csv = NULL;
- char* ptr;
- char* start_host;
- int cc = 0;
- int rv = ARES_SUCCESS;
+ size_t i;
+ char *csv = NULL;
+ char *ptr;
+ char *start_host;
+ int cc = 0;
+ ares_status_t status = ARES_SUCCESS;
struct ares_addr_port_node *servers = NULL;
- struct ares_addr_port_node *last = NULL;
+ struct ares_addr_port_node *last = NULL;
- if (ares_library_initialized() != ARES_SUCCESS)
- return ARES_ENOTINITIALIZED; /* LCOV_EXCL_LINE: n/a on non-WinSock */
+ if (ares_library_initialized() != ARES_SUCCESS) {
+ return ARES_ENOTINITIALIZED; /* LCOV_EXCL_LINE: n/a on non-WinSock */
+ }
- if (!channel)
+ if (!channel) {
return ARES_ENODATA;
+ }
- i = strlen(_csv);
- if (i == 0)
- return ARES_SUCCESS; /* blank all servers */
+ i = ares_strlen(_csv);
+ if (i == 0) {
+ return ARES_SUCCESS; /* blank all servers */
+ }
csv = ares_malloc(i + 2);
- if (!csv)
+ if (!csv) {
return ARES_ENOMEM;
+ }
- strcpy(csv, _csv);
- if (csv[i-1] != ',') { /* make parsing easier by ensuring ending ',' */
- csv[i] = ',';
- csv[i+1] = 0;
+ ares_strcpy(csv, _csv, i + 2);
+ if (csv[i - 1] != ',') { /* make parsing easier by ensuring ending ',' */
+ csv[i] = ',';
+ csv[i + 1] = 0;
}
start_host = csv;
@@ -284,18 +288,16 @@ static int set_servers_csv(ares_channel channel,
/* count colons to determine if we have an IPv6 number or IPv4 with
port */
cc++;
- }
- else if (*ptr == '[') {
+ } else if (*ptr == '[') {
/* move start_host if an open square bracket is found wrapping an IPv6
address */
start_host = ptr + 1;
- }
- else if (*ptr == ',') {
- char* pp = ptr - 1;
- char* p = ptr;
- int port = 0;
- struct in_addr in4;
- struct ares_in6_addr in6;
+ } else if (*ptr == ',') {
+ char *pp = ptr - 1;
+ char *p = ptr;
+ int port = 0;
+ struct in_addr in4;
+ struct ares_in6_addr in6;
struct ares_addr_port_node *s = NULL;
*ptr = 0; /* null terminate host:port string */
@@ -304,11 +306,13 @@ static int set_servers_csv(ares_channel channel,
while (pp > start_host) {
/* a single close square bracket followed by a colon, ']:' indicates
an IPv6 address with port */
- if ((*pp == ']') && (*p == ':'))
+ if ((*pp == ']') && (*p == ':')) {
break; /* found port */
+ }
/* a single colon, ':' indicates an IPv4 address with port */
- if ((*pp == ':') && (cc == 1))
+ if ((*pp == ':') && (cc == 1)) {
break; /* found port */
+ }
if (!(ISDIGIT(*pp) || (*pp == ':'))) {
/* Found end of digits before we found :, so wasn't a port */
/* must allow ':' for IPv6 case of ']:' indicates we found a port */
@@ -322,85 +326,80 @@ static int set_servers_csv(ares_channel channel,
/* Found it. Parse over the port number */
/* when an IPv6 address is wrapped with square brackets the port
starts at pp + 2 */
- if (*pp == ']')
+ if (*pp == ']') {
p++; /* move p before ':' */
+ }
/* p will point to the start of the port */
port = (int)strtol(p, NULL, 10);
- *pp = 0; /* null terminate host */
+ *pp = 0; /* null terminate host */
}
}
/* resolve host, try ipv4 first, rslt is in network byte order */
- rv = ares_inet_pton(AF_INET, start_host, &in4);
- if (!rv) {
+ if (!ares_inet_pton(AF_INET, start_host, &in4)) {
/* Ok, try IPv6 then */
- rv = ares_inet_pton(AF_INET6, start_host, &in6);
- if (!rv) {
- rv = ARES_EBADSTR;
+ if (!ares_inet_pton(AF_INET6, start_host, &in6)) {
+ status = ARES_EBADSTR;
goto out;
}
/* was ipv6, add new server */
s = ares_malloc(sizeof(*s));
if (!s) {
- rv = ARES_ENOMEM;
+ status = ARES_ENOMEM;
goto out;
}
s->family = AF_INET6;
memcpy(&s->addr, &in6, sizeof(struct ares_in6_addr));
- }
- else {
+ } else {
/* was ipv4, add new server */
s = ares_malloc(sizeof(*s));
if (!s) {
- rv = ARES_ENOMEM;
+ status = ARES_ENOMEM;
goto out;
}
s->family = AF_INET;
memcpy(&s->addr, &in4, sizeof(struct in_addr));
}
if (s) {
- s->udp_port = use_port ? port: 0;
+ s->udp_port = use_port ? port : 0;
s->tcp_port = s->udp_port;
- s->next = NULL;
+ s->next = NULL;
if (last) {
last->next = s;
/* need to move last to maintain the linked list */
last = last->next;
- }
- else {
+ } else {
servers = s;
- last = s;
+ last = s;
}
}
/* Set up for next one */
start_host = ptr + 1;
- cc = 0;
+ cc = 0;
}
}
- rv = ares_set_servers_ports(channel, servers);
+ status = (ares_status_t)ares_set_servers_ports(channel, servers);
- out:
- if (csv)
+out:
+ if (csv) {
ares_free(csv);
+ }
while (servers) {
struct ares_addr_port_node *s = servers;
- servers = servers->next;
+ servers = servers->next;
ares_free(s);
}
- return rv;
+ return status;
}
-int ares_set_servers_csv(ares_channel channel,
- const char* _csv)
+int ares_set_servers_csv(ares_channel channel, const char *_csv)
{
- return set_servers_csv(channel, _csv, FALSE);
+ return (int)set_servers_csv(channel, _csv, FALSE);
}
-int ares_set_servers_ports_csv(ares_channel channel,
- const char* _csv)
+int ares_set_servers_ports_csv(ares_channel channel, const char *_csv)
{
- return set_servers_csv(channel, _csv, TRUE);
+ return (int)set_servers_csv(channel, _csv, TRUE);
}
-
diff --git a/src/lib/ares_parse_a_reply.c b/src/lib/ares_parse_a_reply.c
index ee903c7..f576575 100644
--- a/src/lib/ares_parse_a_reply.c
+++ b/src/lib/ares_parse_a_reply.c
@@ -1,18 +1,28 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2019 by Andrew Selivanov
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) 2019 Andrew Selivanov
+ *
+ * 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:
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -46,38 +56,39 @@ int ares_parse_a_reply(const unsigned char *abuf, int alen,
int *naddrttls)
{
struct ares_addrinfo ai;
- char *question_hostname = NULL;
- int status;
- int req_naddrttls = 0;
-
- if (naddrttls)
- {
- req_naddrttls = *naddrttls;
- *naddrttls = 0;
- }
+ char *question_hostname = NULL;
+ ares_status_t status;
+ size_t req_naddrttls = 0;
+
+ if (alen < 0) {
+ return ARES_EBADRESP;
+ }
+
+ if (naddrttls) {
+ req_naddrttls = (size_t)*naddrttls;
+ *naddrttls = 0;
+ }
memset(&ai, 0, sizeof(ai));
- status = ares__parse_into_addrinfo(abuf, alen, 0, 0, &ai);
- if (status != ARES_SUCCESS && status != ARES_ENODATA)
- {
- goto fail;
- }
+ status = ares__parse_into_addrinfo(abuf, (size_t)alen, 0, 0, &ai);
+ if (status != ARES_SUCCESS && status != ARES_ENODATA) {
+ goto fail;
+ }
- if (host != NULL)
- {
- status = ares__addrinfo2hostent(&ai, AF_INET, host);
- if (status != ARES_SUCCESS && status != ARES_ENODATA)
- {
- goto fail;
- }
+ if (host != NULL) {
+ status = ares__addrinfo2hostent(&ai, AF_INET, host);
+ if (status != ARES_SUCCESS && status != ARES_ENODATA) {
+ goto fail;
}
+ }
- if (addrttls != NULL && req_naddrttls)
- {
- ares__addrinfo2addrttl(&ai, AF_INET, req_naddrttls, addrttls,
- NULL, naddrttls);
- }
+ if (addrttls != NULL && req_naddrttls) {
+ size_t temp_naddrttls = 0;
+ ares__addrinfo2addrttl(&ai, AF_INET, req_naddrttls, addrttls, NULL,
+ &temp_naddrttls);
+ *naddrttls = (int)temp_naddrttls;
+ }
fail:
@@ -86,5 +97,5 @@ fail:
ares_free(ai.name);
ares_free(question_hostname);
- return status;
+ return (int)status;
}
diff --git a/src/lib/ares_parse_aaaa_reply.c b/src/lib/ares_parse_aaaa_reply.c
index 091065d..cef4ad7 100644
--- a/src/lib/ares_parse_aaaa_reply.c
+++ b/src/lib/ares_parse_aaaa_reply.c
@@ -1,19 +1,29 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright 2005 Dominick Meglio
- * Copyright (C) 2019 by Andrew Selivanov
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) 2005 Dominick Meglio
+ * Copyright (c) 2019 Andrew Selivanov
+ *
+ * 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:
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -48,38 +58,39 @@ int ares_parse_aaaa_reply(const unsigned char *abuf, int alen,
int *naddrttls)
{
struct ares_addrinfo ai;
- char *question_hostname = NULL;
- int status;
- int req_naddrttls = 0;
+ char *question_hostname = NULL;
+ ares_status_t status;
+ size_t req_naddrttls = 0;
- if (naddrttls)
- {
- req_naddrttls = *naddrttls;
- *naddrttls = 0;
- }
+ if (alen < 0) {
+ return ARES_EBADRESP;
+ }
+
+ if (naddrttls) {
+ req_naddrttls = (size_t)*naddrttls;
+ *naddrttls = 0;
+ }
memset(&ai, 0, sizeof(ai));
- status = ares__parse_into_addrinfo(abuf, alen, 0, 0, &ai);
- if (status != ARES_SUCCESS && status != ARES_ENODATA)
- {
- goto fail;
- }
+ status = ares__parse_into_addrinfo(abuf, (size_t)alen, 0, 0, &ai);
+ if (status != ARES_SUCCESS && status != ARES_ENODATA) {
+ goto fail;
+ }
- if (host != NULL)
- {
- status = ares__addrinfo2hostent(&ai, AF_INET6, host);
- if (status != ARES_SUCCESS && status != ARES_ENODATA)
- {
- goto fail;
- }
+ if (host != NULL) {
+ status = ares__addrinfo2hostent(&ai, AF_INET6, host);
+ if (status != ARES_SUCCESS && status != ARES_ENODATA) {
+ goto fail;
}
+ }
- if (addrttls != NULL && req_naddrttls)
- {
- ares__addrinfo2addrttl(&ai, AF_INET6, req_naddrttls, NULL,
- addrttls, naddrttls);
- }
+ if (addrttls != NULL && req_naddrttls) {
+ size_t temp_naddrttls = 0;
+ ares__addrinfo2addrttl(&ai, AF_INET6, req_naddrttls, NULL, addrttls,
+ &temp_naddrttls);
+ *naddrttls = (int)temp_naddrttls;
+ }
fail:
ares__freeaddrinfo_cnames(ai.cnames);
@@ -87,6 +98,5 @@ fail:
ares_free(question_hostname);
ares_free(ai.name);
- return status;
+ return (int)status;
}
-
diff --git a/src/lib/ares_parse_caa_reply.c b/src/lib/ares_parse_caa_reply.c
index f6d4d3c..6c30305 100644
--- a/src/lib/ares_parse_caa_reply.c
+++ b/src/lib/ares_parse_caa_reply.c
@@ -1,199 +1,139 @@
-
-/* Copyright 2020 by <danny.sonnenschein@platynum.ch>
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
-
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-# include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-# include <arpa/inet.h>
-#endif
-
-#include "ares_nameser.h"
-
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-
#include "ares.h"
-#include "ares_dns.h"
#include "ares_data.h"
#include "ares_private.h"
-int
-ares_parse_caa_reply (const unsigned char *abuf, int alen,
- struct ares_caa_reply **caa_out)
+int ares_parse_caa_reply(const unsigned char *abuf, int alen_int,
+ struct ares_caa_reply **caa_out)
{
- unsigned int qdcount, ancount, i;
- const unsigned char *aptr;
- const unsigned char *strptr;
- int status, rr_type, rr_class, rr_len;
- long len;
- char *hostname = NULL, *rr_name = NULL;
+ ares_status_t status;
+ size_t alen;
struct ares_caa_reply *caa_head = NULL;
struct ares_caa_reply *caa_last = NULL;
struct ares_caa_reply *caa_curr;
+ ares_dns_record_t *dnsrec = NULL;
+ size_t i;
- /* Set *caa_out to NULL for all failure cases. */
*caa_out = NULL;
- /* Give up if abuf doesn't have room for a header. */
- if (alen < HFIXEDSZ)
+ if (alen_int < 0) {
return ARES_EBADRESP;
+ }
+
+ alen = (size_t)alen_int;
+
+ status = ares_dns_parse(abuf, alen, 0, &dnsrec);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+
+ if (ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER) == 0) {
+ status = ARES_ENODATA;
+ goto done;
+ }
+
+ for (i = 0; i < ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER); i++) {
+ const unsigned char *ptr;
+ size_t ptr_len;
+ const ares_dns_rr_t *rr =
+ ares_dns_record_rr_get(dnsrec, ARES_SECTION_ANSWER, i);
+
+ if (rr == NULL) {
+ /* Shouldn't be possible */
+ status = ARES_EBADRESP;
+ goto done;
+ }
- /* Fetch the question and answer count from the header. */
- qdcount = DNS_HEADER_QDCOUNT (abuf);
- ancount = DNS_HEADER_ANCOUNT (abuf);
- if (qdcount != 1)
- return ARES_EBADRESP;
- if (ancount == 0)
- return ARES_ENODATA;
-
- /* Expand the name from the question, and skip past the question. */
- aptr = abuf + HFIXEDSZ;
- status = ares_expand_name (aptr, abuf, alen, &hostname, &len);
- if (status != ARES_SUCCESS)
- return status;
-
- if (aptr + len + QFIXEDSZ > abuf + alen)
- {
- ares_free (hostname);
- return ARES_EBADRESP;
+ /* XXX: Why do we allow Chaos class? */
+ if (ares_dns_rr_get_class(rr) != ARES_CLASS_IN &&
+ ares_dns_rr_get_class(rr) != ARES_CLASS_CHAOS) {
+ continue;
}
- aptr += len + QFIXEDSZ;
-
- /* Examine each answer resource record (RR) in turn. */
- for (i = 0; i < ancount; i++)
- {
- /* Decode the RR up to the data field. */
- status = ares_expand_name (aptr, abuf, alen, &rr_name, &len);
- if (status != ARES_SUCCESS)
- {
- break;
- }
- aptr += len;
- if (aptr + RRFIXEDSZ > abuf + alen)
- {
- status = ARES_EBADRESP;
- break;
- }
- rr_type = DNS_RR_TYPE (aptr);
- rr_class = DNS_RR_CLASS (aptr);
- rr_len = DNS_RR_LEN (aptr);
- aptr += RRFIXEDSZ;
- if (aptr + rr_len > abuf + alen)
- {
- status = ARES_EBADRESP;
- break;
- }
-
- /* Check if we are really looking at a CAA record */
- if ((rr_class == C_IN || rr_class == C_CHAOS) && rr_type == T_CAA)
- {
- strptr = aptr;
-
- /* Allocate storage for this CAA answer appending it to the list */
- caa_curr = ares_malloc_data(ARES_DATATYPE_CAA_REPLY);
- if (!caa_curr)
- {
- status = ARES_ENOMEM;
- break;
- }
- if (caa_last)
- {
- caa_last->next = caa_curr;
- }
- else
- {
- caa_head = caa_curr;
- }
- caa_last = caa_curr;
- if (rr_len < 2)
- {
- status = ARES_EBADRESP;
- break;
- }
- caa_curr->critical = (int)*strptr++;
- caa_curr->plength = (int)*strptr++;
- if (caa_curr->plength <= 0 || (int)caa_curr->plength >= rr_len - 2)
- {
- status = ARES_EBADRESP;
- break;
- }
- caa_curr->property = ares_malloc (caa_curr->plength + 1/* Including null byte */);
- if (caa_curr->property == NULL)
- {
- status = ARES_ENOMEM;
- break;
- }
- memcpy ((char *) caa_curr->property, strptr, caa_curr->plength);
- /* Make sure we NULL-terminate */
- caa_curr->property[caa_curr->plength] = 0;
- strptr += caa_curr->plength;
-
- caa_curr->length = rr_len - caa_curr->plength - 2;
- if (caa_curr->length <= 0)
- {
- status = ARES_EBADRESP;
- break;
- }
- caa_curr->value = ares_malloc (caa_curr->length + 1/* Including null byte */);
- if (caa_curr->value == NULL)
- {
- status = ARES_ENOMEM;
- break;
- }
- memcpy ((char *) caa_curr->value, strptr, caa_curr->length);
- /* Make sure we NULL-terminate */
- caa_curr->value[caa_curr->length] = 0;
- }
-
- /* Propagate any failures */
- if (status != ARES_SUCCESS)
- {
- break;
- }
-
- /* Don't lose memory in the next iteration */
- ares_free (rr_name);
- rr_name = NULL;
-
- /* Move on to the next record */
- aptr += rr_len;
+
+ /* Only looking for CAA records */
+ if (ares_dns_rr_get_type(rr) != ARES_REC_TYPE_CAA) {
+ continue;
}
- if (hostname)
- ares_free (hostname);
- if (rr_name)
- ares_free (rr_name);
+ /* Allocate storage for this CAA answer appending it to the list */
+ caa_curr = ares_malloc_data(ARES_DATATYPE_CAA_REPLY);
+ if (caa_curr == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
- /* clean up on error */
- if (status != ARES_SUCCESS)
- {
- if (caa_head)
- ares_free_data (caa_head);
- return status;
+ /* Link in the record */
+ if (caa_last) {
+ caa_last->next = caa_curr;
+ } else {
+ caa_head = caa_curr;
+ }
+ caa_last = caa_curr;
+
+ caa_curr->critical = ares_dns_rr_get_u8(rr, ARES_RR_CAA_CRITICAL);
+ caa_curr->property =
+ (unsigned char *)ares_strdup(ares_dns_rr_get_str(rr, ARES_RR_CAA_TAG));
+ if (caa_curr->property == NULL) {
+ status = ARES_ENOMEM;
+ break;
+ }
+ /* RFC6844 says this can only be ascii, so not sure why we're recording a
+ * length */
+ caa_curr->plength = ares_strlen((const char *)caa_curr->property);
+
+ ptr = ares_dns_rr_get_bin(rr, ARES_RR_CAA_VALUE, &ptr_len);
+ if (ptr == NULL) {
+ status = ARES_EBADRESP;
+ goto done;
}
- /* everything looks fine, return the data */
- *caa_out = caa_head;
+ /* Wants NULL termination for some reason */
+ caa_curr->value = ares_malloc(ptr_len + 1);
+ if (caa_curr->value == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+ memcpy(caa_curr->value, ptr, ptr_len);
+ caa_curr->value[ptr_len] = 0;
+ caa_curr->length = ptr_len;
+ }
- return ARES_SUCCESS;
+done:
+ /* clean up on error */
+ if (status != ARES_SUCCESS) {
+ if (caa_head) {
+ ares_free_data(caa_head);
+ }
+ } else {
+ /* everything looks fine, return the data */
+ *caa_out = caa_head;
+ }
+ ares_dns_record_destroy(dnsrec);
+ return (int)status;
}
diff --git a/src/lib/ares_parse_mx_reply.c b/src/lib/ares_parse_mx_reply.c
index a497f55..db7155d 100644
--- a/src/lib/ares_parse_mx_reply.c
+++ b/src/lib/ares_parse_mx_reply.c
@@ -1,164 +1,112 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2010 Jeremy Lal <kapouer@melix.org>
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
-
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-# include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-# include <arpa/inet.h>
-#endif
-
-#include "ares_nameser.h"
-
#include "ares.h"
-#include "ares_dns.h"
#include "ares_data.h"
#include "ares_private.h"
-int
-ares_parse_mx_reply (const unsigned char *abuf, int alen,
- struct ares_mx_reply **mx_out)
+int ares_parse_mx_reply(const unsigned char *abuf, int alen_int,
+ struct ares_mx_reply **mx_out)
{
- unsigned int qdcount, ancount, i;
- const unsigned char *aptr, *vptr;
- int status, rr_type, rr_class, rr_len;
- long len;
- char *hostname = NULL, *rr_name = NULL;
+ ares_status_t status;
+ size_t alen;
struct ares_mx_reply *mx_head = NULL;
struct ares_mx_reply *mx_last = NULL;
struct ares_mx_reply *mx_curr;
+ ares_dns_record_t *dnsrec = NULL;
+ size_t i;
- /* Set *mx_out to NULL for all failure cases. */
*mx_out = NULL;
- /* Give up if abuf doesn't have room for a header. */
- if (alen < HFIXEDSZ)
+ if (alen_int < 0) {
return ARES_EBADRESP;
+ }
- /* Fetch the question and answer count from the header. */
- qdcount = DNS_HEADER_QDCOUNT (abuf);
- ancount = DNS_HEADER_ANCOUNT (abuf);
- if (qdcount != 1)
- return ARES_EBADRESP;
- if (ancount == 0)
- return ARES_ENODATA;
+ alen = (size_t)alen_int;
- /* Expand the name from the question, and skip past the question. */
- aptr = abuf + HFIXEDSZ;
- status = ares_expand_name (aptr, abuf, alen, &hostname, &len);
- if (status != ARES_SUCCESS)
- return status;
+ status = ares_dns_parse(abuf, alen, 0, &dnsrec);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
- if (aptr + len + QFIXEDSZ > abuf + alen)
- {
- ares_free (hostname);
- return ARES_EBADRESP;
- }
- aptr += len + QFIXEDSZ;
+ if (ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER) == 0) {
+ status = ARES_ENODATA;
+ goto done;
+ }
- /* Examine each answer resource record (RR) in turn. */
- for (i = 0; i < ancount; i++)
- {
- /* Decode the RR up to the data field. */
- status = ares_expand_name (aptr, abuf, alen, &rr_name, &len);
- if (status != ARES_SUCCESS)
- {
- break;
- }
- aptr += len;
- if (aptr + RRFIXEDSZ > abuf + alen)
- {
- status = ARES_EBADRESP;
- break;
- }
- rr_type = DNS_RR_TYPE (aptr);
- rr_class = DNS_RR_CLASS (aptr);
- rr_len = DNS_RR_LEN (aptr);
- aptr += RRFIXEDSZ;
- if (aptr + rr_len > abuf + alen)
- {
- status = ARES_EBADRESP;
- break;
- }
+ for (i = 0; i < ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER); i++) {
+ const ares_dns_rr_t *rr =
+ ares_dns_record_rr_get(dnsrec, ARES_SECTION_ANSWER, i);
- /* Check if we are really looking at a MX record */
- if (rr_class == C_IN && rr_type == T_MX)
- {
- /* parse the MX record itself */
- if (rr_len < 2)
- {
- status = ARES_EBADRESP;
- break;
- }
+ if (rr == NULL) {
+ /* Shouldn't be possible */
+ status = ARES_EBADRESP;
+ goto done;
+ }
- /* Allocate storage for this MX answer appending it to the list */
- mx_curr = ares_malloc_data(ARES_DATATYPE_MX_REPLY);
- if (!mx_curr)
- {
- status = ARES_ENOMEM;
- break;
- }
- if (mx_last)
- {
- mx_last->next = mx_curr;
- }
- else
- {
- mx_head = mx_curr;
- }
- mx_last = mx_curr;
+ if (ares_dns_rr_get_class(rr) != ARES_CLASS_IN ||
+ ares_dns_rr_get_type(rr) != ARES_REC_TYPE_MX) {
+ continue;
+ }
- vptr = aptr;
- mx_curr->priority = DNS__16BIT(vptr);
- vptr += sizeof(unsigned short);
+ /* Allocate storage for this MX answer appending it to the list */
+ mx_curr = ares_malloc_data(ARES_DATATYPE_MX_REPLY);
+ if (mx_curr == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
- status = ares_expand_name (vptr, abuf, alen, &mx_curr->host, &len);
- if (status != ARES_SUCCESS)
- break;
- }
+ /* Link in the record */
+ if (mx_last) {
+ mx_last->next = mx_curr;
+ } else {
+ mx_head = mx_curr;
+ }
+ mx_last = mx_curr;
- /* Don't lose memory in the next iteration */
- ares_free (rr_name);
- rr_name = NULL;
+ mx_curr->priority = ares_dns_rr_get_u16(rr, ARES_RR_MX_PREFERENCE);
+ mx_curr->host = ares_strdup(ares_dns_rr_get_str(rr, ARES_RR_MX_EXCHANGE));
- /* Move on to the next record */
- aptr += rr_len;
+ if (mx_curr->host == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
}
+ }
- if (hostname)
- ares_free (hostname);
- if (rr_name)
- ares_free (rr_name);
-
+done:
/* clean up on error */
- if (status != ARES_SUCCESS)
- {
- if (mx_head)
- ares_free_data (mx_head);
- return status;
+ if (status != ARES_SUCCESS) {
+ if (mx_head) {
+ ares_free_data(mx_head);
}
-
- /* everything looks fine, return the data */
- *mx_out = mx_head;
-
- return ARES_SUCCESS;
+ } else {
+ /* everything looks fine, return the data */
+ *mx_out = mx_head;
+ }
+ ares_dns_record_destroy(dnsrec);
+ return (int)status;
}
diff --git a/src/lib/ares_parse_naptr_reply.c b/src/lib/ares_parse_naptr_reply.c
index dd984c0..1a304cc 100644
--- a/src/lib/ares_parse_naptr_reply.c
+++ b/src/lib/ares_parse_naptr_reply.c
@@ -1,183 +1,134 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2009 by Jakub Hrozek <jhrozek@redhat.com>
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
-
#include "ares_setup.h"
-
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-# include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-# include <arpa/inet.h>
-#endif
-
-#include "ares_nameser.h"
-
#include "ares.h"
-#include "ares_dns.h"
#include "ares_data.h"
#include "ares_private.h"
-int
-ares_parse_naptr_reply (const unsigned char *abuf, int alen,
- struct ares_naptr_reply **naptr_out)
+int ares_parse_naptr_reply(const unsigned char *abuf, int alen_int,
+ struct ares_naptr_reply **naptr_out)
{
- unsigned int qdcount, ancount, i;
- const unsigned char *aptr, *vptr;
- int status, rr_type, rr_class, rr_len;
- long len;
- char *hostname = NULL, *rr_name = NULL;
+ ares_status_t status;
+ size_t alen;
struct ares_naptr_reply *naptr_head = NULL;
struct ares_naptr_reply *naptr_last = NULL;
struct ares_naptr_reply *naptr_curr;
+ ares_dns_record_t *dnsrec = NULL;
+ size_t i;
- /* Set *naptr_out to NULL for all failure cases. */
*naptr_out = NULL;
- /* Give up if abuf doesn't have room for a header. */
- if (alen < HFIXEDSZ)
- return ARES_EBADRESP;
-
- /* Fetch the question and answer count from the header. */
- qdcount = DNS_HEADER_QDCOUNT (abuf);
- ancount = DNS_HEADER_ANCOUNT (abuf);
- if (qdcount != 1)
+ if (alen_int < 0) {
return ARES_EBADRESP;
- if (ancount == 0)
- return ARES_ENODATA;
-
- /* Expand the name from the question, and skip past the question. */
- aptr = abuf + HFIXEDSZ;
- status = ares_expand_name (aptr, abuf, alen, &hostname, &len);
- if (status != ARES_SUCCESS)
- return status;
+ }
- if (aptr + len + QFIXEDSZ > abuf + alen)
- {
- ares_free (hostname);
- return ARES_EBADRESP;
- }
- aptr += len + QFIXEDSZ;
+ alen = (size_t)alen_int;
- /* Examine each answer resource record (RR) in turn. */
- for (i = 0; i < ancount; i++)
- {
- /* Decode the RR up to the data field. */
- status = ares_expand_name (aptr, abuf, alen, &rr_name, &len);
- if (status != ARES_SUCCESS)
- {
- break;
- }
- aptr += len;
- if (aptr + RRFIXEDSZ > abuf + alen)
- {
- status = ARES_EBADRESP;
- break;
- }
- rr_type = DNS_RR_TYPE (aptr);
- rr_class = DNS_RR_CLASS (aptr);
- rr_len = DNS_RR_LEN (aptr);
- aptr += RRFIXEDSZ;
- if (aptr + rr_len > abuf + alen)
- {
- status = ARES_EBADRESP;
- break;
- }
+ status = ares_dns_parse(abuf, alen, 0, &dnsrec);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
- /* Check if we are really looking at a NAPTR record */
- if (rr_class == C_IN && rr_type == T_NAPTR)
- {
- /* parse the NAPTR record itself */
+ if (ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER) == 0) {
+ status = ARES_ENODATA;
+ goto done;
+ }
- /* RR must contain at least 7 bytes = 2 x int16 + 3 x name */
- if (rr_len < 7)
- {
- status = ARES_EBADRESP;
- break;
- }
+ for (i = 0; i < ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER); i++) {
+ const ares_dns_rr_t *rr =
+ ares_dns_record_rr_get(dnsrec, ARES_SECTION_ANSWER, i);
- /* Allocate storage for this NAPTR answer appending it to the list */
- naptr_curr = ares_malloc_data(ARES_DATATYPE_NAPTR_REPLY);
- if (!naptr_curr)
- {
- status = ARES_ENOMEM;
- break;
- }
- if (naptr_last)
- {
- naptr_last->next = naptr_curr;
- }
- else
- {
- naptr_head = naptr_curr;
- }
- naptr_last = naptr_curr;
-
- vptr = aptr;
- naptr_curr->order = DNS__16BIT(vptr);
- vptr += sizeof(unsigned short);
- naptr_curr->preference = DNS__16BIT(vptr);
- vptr += sizeof(unsigned short);
-
- status = ares_expand_string(vptr, abuf, alen, &naptr_curr->flags, &len);
- if (status != ARES_SUCCESS)
- break;
- vptr += len;
+ if (rr == NULL) {
+ /* Shouldn't be possible */
+ status = ARES_EBADRESP;
+ goto done;
+ }
- status = ares_expand_string(vptr, abuf, alen, &naptr_curr->service, &len);
- if (status != ARES_SUCCESS)
- break;
- vptr += len;
+ if (ares_dns_rr_get_class(rr) != ARES_CLASS_IN ||
+ ares_dns_rr_get_type(rr) != ARES_REC_TYPE_NAPTR) {
+ continue;
+ }
- status = ares_expand_string(vptr, abuf, alen, &naptr_curr->regexp, &len);
- if (status != ARES_SUCCESS)
- break;
- vptr += len;
+ /* Allocate storage for this NAPTR answer appending it to the list */
+ naptr_curr = ares_malloc_data(ARES_DATATYPE_NAPTR_REPLY);
+ if (naptr_curr == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
- status = ares_expand_name(vptr, abuf, alen, &naptr_curr->replacement, &len);
- if (status != ARES_SUCCESS)
- break;
- }
+ /* Link in the record */
+ if (naptr_last) {
+ naptr_last->next = naptr_curr;
+ } else {
+ naptr_head = naptr_curr;
+ }
+ naptr_last = naptr_curr;
- /* Don't lose memory in the next iteration */
- ares_free (rr_name);
- rr_name = NULL;
+ naptr_curr->order = ares_dns_rr_get_u16(rr, ARES_RR_NAPTR_ORDER);
+ naptr_curr->preference = ares_dns_rr_get_u16(rr, ARES_RR_NAPTR_PREFERENCE);
- /* Move on to the next record */
- aptr += rr_len;
+ /* XXX: Why is this unsigned char * ? */
+ naptr_curr->flags = (unsigned char *)ares_strdup(
+ ares_dns_rr_get_str(rr, ARES_RR_NAPTR_FLAGS));
+ if (naptr_curr->flags == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
}
+ /* XXX: Why is this unsigned char * ? */
+ naptr_curr->service = (unsigned char *)ares_strdup(
+ ares_dns_rr_get_str(rr, ARES_RR_NAPTR_SERVICES));
+ if (naptr_curr->service == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+ /* XXX: Why is this unsigned char * ? */
+ naptr_curr->regexp = (unsigned char *)ares_strdup(
+ ares_dns_rr_get_str(rr, ARES_RR_NAPTR_REGEXP));
+ if (naptr_curr->regexp == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+ naptr_curr->replacement =
+ ares_strdup(ares_dns_rr_get_str(rr, ARES_RR_NAPTR_REPLACEMENT));
+ if (naptr_curr->replacement == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+ }
- if (hostname)
- ares_free (hostname);
- if (rr_name)
- ares_free (rr_name);
-
+done:
/* clean up on error */
- if (status != ARES_SUCCESS)
- {
- if (naptr_head)
- ares_free_data (naptr_head);
- return status;
+ if (status != ARES_SUCCESS) {
+ if (naptr_head) {
+ ares_free_data(naptr_head);
}
-
- /* everything looks fine, return the data */
- *naptr_out = naptr_head;
-
- return ARES_SUCCESS;
+ } else {
+ /* everything looks fine, return the data */
+ *naptr_out = naptr_head;
+ }
+ ares_dns_record_destroy(dnsrec);
+ return (int)status;
}
diff --git a/src/lib/ares_parse_ns_reply.c b/src/lib/ares_parse_ns_reply.c
index 47d1299..18fda82 100644
--- a/src/lib/ares_parse_ns_reply.c
+++ b/src/lib/ares_parse_ns_reply.c
@@ -1,21 +1,27 @@
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
- */
-
-/*
- * ares_parse_ns_reply created by Vlad Dinulescu <vlad.dinulescu@avira.com>
- * on behalf of AVIRA Gmbh - http://www.avira.com
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -30,148 +36,122 @@
# include <arpa/inet.h>
#endif
-#include "ares_nameser.h"
-
#include "ares.h"
-#include "ares_dns.h"
#include "ares_private.h"
-int ares_parse_ns_reply( const unsigned char* abuf, int alen,
- struct hostent** host )
+int ares_parse_ns_reply(const unsigned char *abuf, int alen_int,
+ struct hostent **host)
{
- unsigned int qdcount, ancount;
- int status, i, rr_type, rr_class, rr_len;
- int nameservers_num;
- long len;
- const unsigned char *aptr;
- char* hostname, *rr_name, *rr_data, **nameservers;
- struct hostent *hostent;
-
- /* Set *host to NULL for all failure cases. */
+ ares_status_t status;
+ size_t alen;
+ size_t nscount = 0;
+ struct hostent *hostent = NULL;
+ const char *hostname = NULL;
+ ares_dns_record_t *dnsrec = NULL;
+ size_t i;
+ size_t ancount;
+
*host = NULL;
- /* Give up if abuf doesn't have room for a header. */
- if ( alen < HFIXEDSZ )
+ if (alen_int < 0) {
return ARES_EBADRESP;
+ }
- /* Fetch the question and answer count from the header. */
- qdcount = DNS_HEADER_QDCOUNT( abuf );
- ancount = DNS_HEADER_ANCOUNT( abuf );
- if ( qdcount != 1 )
- return ARES_EBADRESP;
+ alen = (size_t)alen_int;
- /* Expand the name from the question, and skip past the question. */
- aptr = abuf + HFIXEDSZ;
- status = ares__expand_name_for_response( aptr, abuf, alen, &hostname, &len, 0);
- if ( status != ARES_SUCCESS )
- return status;
- if ( aptr + len + QFIXEDSZ > abuf + alen )
- {
- ares_free( hostname );
- return ARES_EBADRESP;
+ status = ares_dns_parse(abuf, alen, 0, &dnsrec);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+
+ ancount = ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER);
+ if (ancount == 0) {
+ status = ARES_ENODATA;
+ goto done;
+ }
+
+ /* Response structure */
+ hostent = ares_malloc(sizeof(*hostent));
+ if (hostent == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+
+ memset(hostent, 0, sizeof(*hostent));
+
+ hostent->h_addr_list = ares_malloc(sizeof(*hostent->h_addr_list));
+ if (hostent->h_addr_list == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
}
- aptr += len + QFIXEDSZ;
-
- /* Allocate nameservers array; ancount gives an upper bound */
- nameservers = ares_malloc( ( ancount + 1 ) * sizeof( char * ) );
- if ( !nameservers )
- {
- ares_free( hostname );
- return ARES_ENOMEM;
+ hostent->h_addr_list[0] = NULL;
+ hostent->h_addrtype = AF_INET;
+ hostent->h_length = sizeof(struct in_addr);
+
+ /* Fill in hostname */
+ status = ares_dns_record_query_get(dnsrec, 0, &hostname, NULL, NULL);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+ hostent->h_name = ares_strdup(hostname);
+ if (hostent->h_name == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
}
- nameservers_num = 0;
-
- /* Examine each answer resource record (RR) in turn. */
- for ( i = 0; i < ( int ) ancount; i++ )
- {
- /* Decode the RR up to the data field. */
- status = ares__expand_name_for_response( aptr, abuf, alen, &rr_name, &len, 0);
- if ( status != ARES_SUCCESS )
- break;
- aptr += len;
- if ( aptr + RRFIXEDSZ > abuf + alen )
- {
+
+ /* Preallocate the maximum number + 1 */
+ hostent->h_aliases = ares_malloc((ancount + 1) * sizeof(*hostent->h_aliases));
+ if (hostent->h_aliases == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+ memset(hostent->h_aliases, 0, (ancount + 1) * sizeof(*hostent->h_aliases));
+
+ for (i = 0; i < ancount; i++) {
+ const ares_dns_rr_t *rr =
+ ares_dns_record_rr_get(dnsrec, ARES_SECTION_ANSWER, i);
+
+ if (rr == NULL) {
+ /* Shouldn't be possible */
status = ARES_EBADRESP;
- ares_free(rr_name);
- break;
- }
- rr_type = DNS_RR_TYPE( aptr );
- rr_class = DNS_RR_CLASS( aptr );
- rr_len = DNS_RR_LEN( aptr );
- aptr += RRFIXEDSZ;
- if (aptr + rr_len > abuf + alen)
- {
- ares_free(rr_name);
- status = ARES_EBADRESP;
- break;
- }
-
- if ( rr_class == C_IN && rr_type == T_NS )
- {
- /* Decode the RR data and add it to the nameservers list */
- status = ares__expand_name_for_response( aptr, abuf, alen, &rr_data,
- &len, 1);
- if ( status != ARES_SUCCESS )
- {
- ares_free(rr_name);
- break;
- }
-
- nameservers[nameservers_num] = ares_malloc(strlen(rr_data)+1);
-
- if (nameservers[nameservers_num]==NULL)
- {
- ares_free(rr_name);
- ares_free(rr_data);
- status=ARES_ENOMEM;
- break;
- }
- strcpy(nameservers[nameservers_num],rr_data);
- ares_free(rr_data);
-
- nameservers_num++;
+ goto done;
}
- ares_free( rr_name );
+ if (ares_dns_rr_get_class(rr) != ARES_CLASS_IN ||
+ ares_dns_rr_get_type(rr) != ARES_REC_TYPE_NS) {
+ continue;
+ }
- aptr += rr_len;
- if ( aptr > abuf + alen )
- { /* LCOV_EXCL_START: already checked above */
+ hostname = ares_dns_rr_get_str(rr, ARES_RR_NS_NSDNAME);
+ if (hostname == NULL) {
status = ARES_EBADRESP;
- break;
- } /* LCOV_EXCL_STOP */
+ goto done;
+ }
+
+ hostent->h_aliases[nscount] = ares_strdup(hostname);
+ if (hostent->h_aliases[nscount] == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+ nscount++;
}
- if ( status == ARES_SUCCESS && nameservers_num == 0 )
- {
+ if (nscount == 0) {
status = ARES_ENODATA;
+ } else {
+ status = ARES_SUCCESS;
}
- if ( status == ARES_SUCCESS )
- {
- /* We got our answer. Allocate memory to build the host entry. */
- nameservers[nameservers_num] = NULL;
- hostent = ares_malloc( sizeof( struct hostent ) );
- if ( hostent )
- {
- hostent->h_addr_list = ares_malloc( 1 * sizeof( char * ) );
- if ( hostent->h_addr_list )
- {
- /* Fill in the hostent and return successfully. */
- hostent->h_name = hostname;
- hostent->h_aliases = nameservers;
- hostent->h_addrtype = AF_INET;
- hostent->h_length = sizeof( struct in_addr );
- hostent->h_addr_list[0] = NULL;
- *host = hostent;
- return ARES_SUCCESS;
- }
- ares_free( hostent );
+
+done:
+ if (status != ARES_SUCCESS) {
+ ares_free_hostent(hostent);
+ /* Compatibility */
+ if (status == ARES_EBADNAME) {
+ status = ARES_EBADRESP;
}
- status = ARES_ENOMEM;
+ } else {
+ *host = hostent;
}
- for ( i = 0; i < nameservers_num; i++ )
- ares_free( nameservers[i] );
- ares_free( nameservers );
- ares_free( hostname );
- return status;
+ ares_dns_record_destroy(dnsrec);
+ return (int)status;
}
diff --git a/src/lib/ares_parse_ptr_reply.c b/src/lib/ares_parse_ptr_reply.c
index ae78edf..f03f601 100644
--- a/src/lib/ares_parse_ptr_reply.c
+++ b/src/lib/ares_parse_ptr_reply.c
@@ -1,17 +1,27 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -23,206 +33,166 @@
# include <netdb.h>
#endif
-#include "ares_nameser.h"
-
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-
#include "ares.h"
-#include "ares_dns.h"
-#include "ares_nowarn.h"
#include "ares_private.h"
-int ares_parse_ptr_reply(const unsigned char *abuf, int alen, const void *addr,
- int addrlen, int family, struct hostent **host)
+int ares_parse_ptr_reply(const unsigned char *abuf, int alen_int,
+ const void *addr, int addrlen, int family,
+ struct hostent **host)
{
- unsigned int qdcount, ancount;
- int status, i, rr_type, rr_class, rr_len;
- long len;
- const unsigned char *aptr;
- char *ptrname, *hostname, *rr_name, *rr_data;
- struct hostent *hostent = NULL;
- int aliascnt = 0;
- int alias_alloc = 8;
- char ** aliases;
- size_t rr_data_len;
-
- /* Set *host to NULL for all failure cases. */
+ ares_status_t status;
+ size_t alen;
+ size_t ptrcount = 0;
+ struct hostent *hostent = NULL;
+ const char *hostname = NULL;
+ const char *ptrname = NULL;
+ ares_dns_record_t *dnsrec = NULL;
+ size_t i;
+ size_t ancount;
+
*host = NULL;
- /* Give up if abuf doesn't have room for a header. */
- if (alen < HFIXEDSZ)
+ if (alen_int < 0) {
return ARES_EBADRESP;
+ }
- /* Fetch the question and answer count from the header. */
- qdcount = DNS_HEADER_QDCOUNT(abuf);
- ancount = DNS_HEADER_ANCOUNT(abuf);
- if (qdcount != 1)
- return ARES_EBADRESP;
+ alen = (size_t)alen_int;
- /* Expand the name from the question, and skip past the question. */
- aptr = abuf + HFIXEDSZ;
- status = ares__expand_name_for_response(aptr, abuf, alen, &ptrname, &len, 0);
- if (status != ARES_SUCCESS)
- return status;
- if (aptr + len + QFIXEDSZ > abuf + alen)
- {
- ares_free(ptrname);
- return ARES_EBADRESP;
- }
- aptr += len + QFIXEDSZ;
-
- /* Examine each answer resource record (RR) in turn. */
- hostname = NULL;
- aliases = ares_malloc(alias_alloc * sizeof(char *));
- if (!aliases)
- {
- ares_free(ptrname);
- return ARES_ENOMEM;
- }
- for (i = 0; i < (int)ancount; i++)
- {
- /* Decode the RR up to the data field. */
- status = ares__expand_name_for_response(aptr, abuf, alen, &rr_name, &len, 0);
- if (status != ARES_SUCCESS)
- break;
- aptr += len;
- if (aptr + RRFIXEDSZ > abuf + alen)
- {
- ares_free(rr_name);
- status = ARES_EBADRESP;
- break;
- }
- rr_type = DNS_RR_TYPE(aptr);
- rr_class = DNS_RR_CLASS(aptr);
- rr_len = DNS_RR_LEN(aptr);
- aptr += RRFIXEDSZ;
- if (aptr + rr_len > abuf + alen)
- {
- ares_free(rr_name);
- status = ARES_EBADRESP;
- break;
- }
-
- if (rr_class == C_IN && rr_type == T_PTR
- && strcasecmp(rr_name, ptrname) == 0)
- {
- /* Decode the RR data and set hostname to it. */
- status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data,
- &len, 1);
- if (status != ARES_SUCCESS)
- {
- ares_free(rr_name);
- break;
- }
- if (hostname)
- ares_free(hostname);
- hostname = rr_data;
- rr_data_len = strlen(rr_data)+1;
- aliases[aliascnt] = ares_malloc(rr_data_len * sizeof(char));
- if (!aliases[aliascnt])
- {
- ares_free(rr_name);
- status = ARES_ENOMEM;
- break;
- }
- strncpy(aliases[aliascnt], rr_data, rr_data_len);
- aliascnt++;
- if (aliascnt >= alias_alloc) {
- char **ptr;
- alias_alloc *= 2;
- ptr = ares_realloc(aliases, alias_alloc * sizeof(char *));
- if(!ptr) {
- ares_free(rr_name);
- status = ARES_ENOMEM;
- break;
- }
- aliases = ptr;
- }
- }
-
- if (rr_class == C_IN && rr_type == T_CNAME)
- {
- /* Decode the RR data and replace ptrname with it. */
- status = ares__expand_name_for_response(aptr, abuf, alen, &rr_data,
- &len, 1);
- if (status != ARES_SUCCESS)
- {
- ares_free(rr_name);
- break;
- }
- ares_free(ptrname);
- ptrname = rr_data;
- }
-
- ares_free(rr_name);
- aptr += rr_len;
- if (aptr > abuf + alen)
- { /* LCOV_EXCL_START: already checked above */
- status = ARES_EBADRESP;
- break;
- } /* LCOV_EXCL_STOP */
- }
+ status = ares_dns_parse(abuf, alen, 0, &dnsrec);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+
+ /* Fetch name from query as we will use it to compare later on. Old code
+ * did this check, so we'll retain it. */
+ status = ares_dns_record_query_get(dnsrec, 0, &ptrname, NULL, NULL);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
- if (status == ARES_SUCCESS && !hostname)
+ ancount = ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER);
+ if (ancount == 0) {
status = ARES_ENODATA;
- if (status == ARES_SUCCESS)
- {
- /* If we don't reach the end, we must have failed due to out of memory */
+ goto done;
+ }
+
+ /* Response structure */
+ hostent = ares_malloc(sizeof(*hostent));
+ if (hostent == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+
+ memset(hostent, 0, sizeof(*hostent));
+
+ hostent->h_addr_list = ares_malloc(2 * sizeof(*hostent->h_addr_list));
+ if (hostent->h_addr_list == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+ memset(hostent->h_addr_list, 0, 2 * sizeof(*hostent->h_addr_list));
+ if (addr != NULL && addrlen > 0) {
+ hostent->h_addr_list[0] = ares_malloc((size_t)addrlen);
+ if (hostent->h_addr_list[0] == NULL) {
status = ARES_ENOMEM;
+ goto done;
+ }
+ memcpy(hostent->h_addr_list[0], addr, (size_t)addrlen);
+ }
+ hostent->h_addrtype = family;
+ hostent->h_length = addrlen;
+
+ /* Preallocate the maximum number + 1 */
+ hostent->h_aliases = ares_malloc((ancount + 1) * sizeof(*hostent->h_aliases));
+ if (hostent->h_aliases == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+ memset(hostent->h_aliases, 0, (ancount + 1) * sizeof(*hostent->h_aliases));
+
+
+ /* Cycle through answers */
+ for (i = 0; i < ancount; i++) {
+ const char *rname = NULL;
+ const ares_dns_rr_t *rr =
+ ares_dns_record_rr_get(dnsrec, ARES_SECTION_ANSWER, i);
+
+ if (rr == NULL) {
+ /* Shouldn't be possible */
+ status = ARES_EBADRESP;
+ goto done;
+ }
- /* We got our answer. Allocate memory to build the host entry. */
- hostent = ares_malloc(sizeof(*hostent));
- if (!hostent)
- goto fail;
+ if (ares_dns_rr_get_class(rr) != ARES_CLASS_IN) {
+ continue;
+ }
- /* If we don't memset here, cleanups may fail */
- memset(hostent, 0, sizeof(*hostent));
+ /* Any time we see a CNAME, replace our ptrname with its value */
+ if (ares_dns_rr_get_type(rr) == ARES_REC_TYPE_CNAME) {
+ ptrname = ares_dns_rr_get_str(rr, ARES_RR_CNAME_CNAME);
+ if (ptrname == NULL) {
+ status = ARES_EBADRESP;
+ goto done;
+ }
+ }
- hostent->h_addr_list = ares_malloc(2 * sizeof(char *));
- if (!hostent->h_addr_list)
- goto fail;
+ /* Handling for PTR records below this, otherwise skip */
+ if (ares_dns_rr_get_type(rr) != ARES_REC_TYPE_PTR) {
+ continue;
+ }
+ /* Old code compared the name in the rr to the ptrname, so we'll do that
+ * check here, but I'm not sure its necessary */
+ rname = ares_dns_rr_get_name(rr);
+ if (rname == NULL) {
+ /* Shouldn't be possible */
+ status = ARES_EBADRESP;
+ goto done;
+ }
+ if (strcasecmp(ptrname, rname) != 0) {
+ continue;
+ }
- if (addr && addrlen) {
- hostent->h_addr_list[0] = ares_malloc(addrlen);
- if (!hostent->h_addr_list[0])
- goto fail;
- } else {
- hostent->h_addr_list[0] = NULL;
- }
+ /* Save most recent PTR record as the hostname */
+ hostname = ares_dns_rr_get_str(rr, ARES_RR_PTR_DNAME);
+ if (hostname == NULL) {
+ status = ARES_EBADRESP;
+ goto done;
+ }
- hostent->h_aliases = ares_malloc((aliascnt+1) * sizeof (char *));
- if (!hostent->h_aliases)
- goto fail;
-
- /* Fill in the hostent and return successfully. */
- hostent->h_name = hostname;
- for (i=0 ; i<aliascnt ; i++)
- hostent->h_aliases[i] = aliases[i];
- hostent->h_aliases[aliascnt] = NULL;
- hostent->h_addrtype = aresx_sitoss(family);
- hostent->h_length = aresx_sitoss(addrlen);
- if (addr && addrlen)
- memcpy(hostent->h_addr_list[0], addr, addrlen);
- hostent->h_addr_list[1] = NULL;
- *host = hostent;
- ares_free(aliases);
- ares_free(ptrname);
-
- return ARES_SUCCESS;
+ /* Append as an alias */
+ hostent->h_aliases[ptrcount] = ares_strdup(hostname);
+ if (hostent->h_aliases[ptrcount] == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
}
+ ptrcount++;
+ }
-fail:
- ares_free_hostent(hostent);
-
- for (i=0 ; i<aliascnt ; i++)
- if (aliases[i])
- ares_free(aliases[i]);
- ares_free(aliases);
- if (hostname)
- ares_free(hostname);
- ares_free(ptrname);
- return status;
+ if (ptrcount == 0) {
+ status = ARES_ENODATA;
+ goto done;
+ } else {
+ status = ARES_SUCCESS;
+ }
+
+ /* Fill in hostname */
+ hostent->h_name = ares_strdup(hostname);
+ if (hostent->h_name == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+
+done:
+ if (status != ARES_SUCCESS) {
+ ares_free_hostent(hostent);
+ /* Compatibility */
+ if (status == ARES_EBADNAME) {
+ status = ARES_EBADRESP;
+ }
+ } else {
+ *host = hostent;
+ }
+ ares_dns_record_destroy(dnsrec);
+ return (int)status;
}
diff --git a/src/lib/ares_parse_soa_reply.c b/src/lib/ares_parse_soa_reply.c
index 3935eec..2777dbc 100644
--- a/src/lib/ares_parse_soa_reply.c
+++ b/src/lib/ares_parse_soa_reply.c
@@ -1,179 +1,117 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2012 Marko Kreen <markokr@gmail.com>
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
-
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-# include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-# include <arpa/inet.h>
-#endif
-
-#include "ares_nameser.h"
-
#include "ares.h"
-#include "ares_dns.h"
#include "ares_data.h"
#include "ares_private.h"
-int
-ares_parse_soa_reply(const unsigned char *abuf, int alen,
- struct ares_soa_reply **soa_out)
+int ares_parse_soa_reply(const unsigned char *abuf, int alen_int,
+ struct ares_soa_reply **soa_out)
{
- const unsigned char *aptr;
- long len;
- char *qname = NULL, *rr_name = NULL;
- struct ares_soa_reply *soa = NULL;
- int qdcount, ancount, qclass;
- int status, i, rr_type, rr_class, rr_len;
-
- if (alen < HFIXEDSZ)
- return ARES_EBADRESP;
+ ares_status_t status;
+ size_t alen;
+ struct ares_soa_reply *soa = NULL;
+ ares_dns_record_t *dnsrec = NULL;
+ size_t i;
- /* parse message header */
- qdcount = DNS_HEADER_QDCOUNT(abuf);
- ancount = DNS_HEADER_ANCOUNT(abuf);
+ *soa_out = NULL;
- if (qdcount != 1)
- return ARES_EBADRESP;
- if (ancount == 0)
+ if (alen_int < 0) {
return ARES_EBADRESP;
+ }
- aptr = abuf + HFIXEDSZ;
-
- /* query name */
- status = ares__expand_name_for_response(aptr, abuf, alen, &qname, &len, 0);
- if (status != ARES_SUCCESS)
- goto failed_stat;
-
- if (alen <= len + HFIXEDSZ + 1)
- goto failed;
- aptr += len;
-
- qclass = DNS_QUESTION_TYPE(aptr);
+ alen = (size_t)alen_int;
- /* skip qtype & qclass */
- if (aptr + QFIXEDSZ > abuf + alen)
- goto failed;
- aptr += QFIXEDSZ;
+ status = ares_dns_parse(abuf, alen, 0, &dnsrec);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
- /* qclass of SOA with multiple answers */
- if (qclass == T_SOA && ancount > 1)
- goto failed;
+ if (ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER) == 0) {
+ status = ARES_EBADRESP; /* ENODATA might make more sense */
+ goto done;
+ }
- /* examine all the records, break and return if found soa */
- for (i = 0; i < ancount; i++)
- {
- rr_name = NULL;
- status = ares__expand_name_for_response (aptr, abuf, alen, &rr_name, &len, 0);
- if (status != ARES_SUCCESS)
- {
- ares_free(rr_name);
- goto failed_stat;
- }
+ for (i = 0; i < ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER); i++) {
+ const ares_dns_rr_t *rr =
+ ares_dns_record_rr_get(dnsrec, ARES_SECTION_ANSWER, i);
- aptr += len;
- if ( aptr + RRFIXEDSZ > abuf + alen )
- {
- ares_free(rr_name);
+ if (rr == NULL) {
+ /* Shouldn't be possible */
status = ARES_EBADRESP;
- goto failed_stat;
+ goto done;
}
- rr_type = DNS_RR_TYPE( aptr );
- rr_class = DNS_RR_CLASS( aptr );
- rr_len = DNS_RR_LEN( aptr );
- aptr += RRFIXEDSZ;
- if (aptr + rr_len > abuf + alen)
- {
- ares_free(rr_name);
- status = ARES_EBADRESP;
- goto failed_stat;
- }
- if ( rr_class == C_IN && rr_type == T_SOA )
- {
- /* allocate result struct */
- soa = ares_malloc_data(ARES_DATATYPE_SOA_REPLY);
- if (!soa)
- {
- ares_free(rr_name);
- status = ARES_ENOMEM;
- goto failed_stat;
- }
-
- /* nsname */
- status = ares__expand_name_for_response(aptr, abuf, alen, &soa->nsname,
- &len, 0);
- if (status != ARES_SUCCESS)
- {
- ares_free(rr_name);
- goto failed_stat;
- }
- aptr += len;
-
- /* hostmaster */
- status = ares__expand_name_for_response(aptr, abuf, alen,
- &soa->hostmaster, &len, 0);
- if (status != ARES_SUCCESS)
- {
- ares_free(rr_name);
- goto failed_stat;
- }
- aptr += len;
-
- /* integer fields */
- if (aptr + 5 * 4 > abuf + alen)
- {
- ares_free(rr_name);
- goto failed;
- }
- soa->serial = DNS__32BIT(aptr + 0 * 4);
- soa->refresh = DNS__32BIT(aptr + 1 * 4);
- soa->retry = DNS__32BIT(aptr + 2 * 4);
- soa->expire = DNS__32BIT(aptr + 3 * 4);
- soa->minttl = DNS__32BIT(aptr + 4 * 4);
-
- ares_free(qname);
- ares_free(rr_name);
- *soa_out = soa;
+ if (ares_dns_rr_get_class(rr) != ARES_CLASS_IN ||
+ ares_dns_rr_get_type(rr) != ARES_REC_TYPE_SOA) {
+ continue;
+ }
- return ARES_SUCCESS;
+ /* allocate result struct */
+ soa = ares_malloc_data(ARES_DATATYPE_SOA_REPLY);
+ if (soa == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
}
- aptr += rr_len;
- ares_free(rr_name);
+ soa->serial = ares_dns_rr_get_u32(rr, ARES_RR_SOA_SERIAL);
+ soa->refresh = ares_dns_rr_get_u32(rr, ARES_RR_SOA_REFRESH);
+ soa->retry = ares_dns_rr_get_u32(rr, ARES_RR_SOA_RETRY);
+ soa->expire = ares_dns_rr_get_u32(rr, ARES_RR_SOA_EXPIRE);
+ soa->minttl = ares_dns_rr_get_u32(rr, ARES_RR_SOA_MINIMUM);
+ soa->nsname = ares_strdup(ares_dns_rr_get_str(rr, ARES_RR_SOA_MNAME));
+ if (soa->nsname == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+ soa->hostmaster = ares_strdup(ares_dns_rr_get_str(rr, ARES_RR_SOA_RNAME));
+ if (soa->hostmaster == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+ break;
+ }
- if (aptr > abuf + alen)
- goto failed_stat;
+ if (soa == NULL) {
+ status = ARES_EBADRESP;
}
- /* no SOA record found */
- status = ARES_EBADRESP;
- goto failed_stat;
-failed:
- status = ARES_EBADRESP;
-failed_stat:
- if (soa)
+done:
+ /* clean up on error */
+ if (status != ARES_SUCCESS) {
ares_free_data(soa);
- if (qname)
- ares_free(qname);
- return status;
+ /* Compatibility */
+ if (status == ARES_EBADNAME) {
+ status = ARES_EBADRESP;
+ }
+ } else {
+ /* everything looks fine, return the data */
+ *soa_out = soa;
+ }
+ ares_dns_record_destroy(dnsrec);
+ return (int)status;
}
diff --git a/src/lib/ares_parse_srv_reply.c b/src/lib/ares_parse_srv_reply.c
index 0d8f4d2..90cf684 100644
--- a/src/lib/ares_parse_srv_reply.c
+++ b/src/lib/ares_parse_srv_reply.c
@@ -1,168 +1,116 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2009 by Jakub Hrozek <jhrozek@redhat.com>
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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:
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
-
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-# include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-# include <arpa/inet.h>
-#endif
-
-#include "ares_nameser.h"
-
#include "ares.h"
-#include "ares_dns.h"
#include "ares_data.h"
#include "ares_private.h"
-int
-ares_parse_srv_reply (const unsigned char *abuf, int alen,
- struct ares_srv_reply **srv_out)
+int ares_parse_srv_reply(const unsigned char *abuf, int alen_int,
+ struct ares_srv_reply **srv_out)
{
- unsigned int qdcount, ancount, i;
- const unsigned char *aptr, *vptr;
- int status, rr_type, rr_class, rr_len;
- long len;
- char *hostname = NULL, *rr_name = NULL;
+ ares_status_t status;
+ size_t alen;
struct ares_srv_reply *srv_head = NULL;
struct ares_srv_reply *srv_last = NULL;
struct ares_srv_reply *srv_curr;
+ ares_dns_record_t *dnsrec = NULL;
+ size_t i;
- /* Set *srv_out to NULL for all failure cases. */
*srv_out = NULL;
- /* Give up if abuf doesn't have room for a header. */
- if (alen < HFIXEDSZ)
+ if (alen_int < 0) {
return ARES_EBADRESP;
+ }
- /* Fetch the question and answer count from the header. */
- qdcount = DNS_HEADER_QDCOUNT (abuf);
- ancount = DNS_HEADER_ANCOUNT (abuf);
- if (qdcount != 1)
- return ARES_EBADRESP;
- if (ancount == 0)
- return ARES_ENODATA;
-
- /* Expand the name from the question, and skip past the question. */
- aptr = abuf + HFIXEDSZ;
- status = ares_expand_name (aptr, abuf, alen, &hostname, &len);
- if (status != ARES_SUCCESS)
- return status;
-
- if (aptr + len + QFIXEDSZ > abuf + alen)
- {
- ares_free (hostname);
- return ARES_EBADRESP;
+ alen = (size_t)alen_int;
+
+ status = ares_dns_parse(abuf, alen, 0, &dnsrec);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+
+ if (ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER) == 0) {
+ status = ARES_ENODATA;
+ goto done;
+ }
+
+ for (i = 0; i < ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER); i++) {
+ const ares_dns_rr_t *rr =
+ ares_dns_record_rr_get(dnsrec, ARES_SECTION_ANSWER, i);
+
+ if (rr == NULL) {
+ /* Shouldn't be possible */
+ status = ARES_EBADRESP;
+ goto done;
}
- aptr += len + QFIXEDSZ;
-
- /* Examine each answer resource record (RR) in turn. */
- for (i = 0; i < ancount; i++)
- {
- /* Decode the RR up to the data field. */
- status = ares_expand_name (aptr, abuf, alen, &rr_name, &len);
- if (status != ARES_SUCCESS)
- {
- break;
- }
- aptr += len;
- if (aptr + RRFIXEDSZ > abuf + alen)
- {
- status = ARES_EBADRESP;
- break;
- }
- rr_type = DNS_RR_TYPE (aptr);
- rr_class = DNS_RR_CLASS (aptr);
- rr_len = DNS_RR_LEN (aptr);
- aptr += RRFIXEDSZ;
- if (aptr + rr_len > abuf + alen)
- {
- status = ARES_EBADRESP;
- break;
- }
-
- /* Check if we are really looking at a SRV record */
- if (rr_class == C_IN && rr_type == T_SRV)
- {
- /* parse the SRV record itself */
- if (rr_len < 6)
- {
- status = ARES_EBADRESP;
- break;
- }
-
- /* Allocate storage for this SRV answer appending it to the list */
- srv_curr = ares_malloc_data(ARES_DATATYPE_SRV_REPLY);
- if (!srv_curr)
- {
- status = ARES_ENOMEM;
- break;
- }
- if (srv_last)
- {
- srv_last->next = srv_curr;
- }
- else
- {
- srv_head = srv_curr;
- }
- srv_last = srv_curr;
-
- vptr = aptr;
- srv_curr->priority = DNS__16BIT(vptr);
- vptr += sizeof(unsigned short);
- srv_curr->weight = DNS__16BIT(vptr);
- vptr += sizeof(unsigned short);
- srv_curr->port = DNS__16BIT(vptr);
- vptr += sizeof(unsigned short);
-
- status = ares_expand_name (vptr, abuf, alen, &srv_curr->host, &len);
- if (status != ARES_SUCCESS)
- break;
- }
-
- /* Don't lose memory in the next iteration */
- ares_free (rr_name);
- rr_name = NULL;
-
- /* Move on to the next record */
- aptr += rr_len;
+
+ if (ares_dns_rr_get_class(rr) != ARES_CLASS_IN ||
+ ares_dns_rr_get_type(rr) != ARES_REC_TYPE_SRV) {
+ continue;
}
- if (hostname)
- ares_free (hostname);
- if (rr_name)
- ares_free (rr_name);
+ /* Allocate storage for this URI answer appending it to the list */
+ srv_curr = ares_malloc_data(ARES_DATATYPE_SRV_REPLY);
+ if (srv_curr == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
- /* clean up on error */
- if (status != ARES_SUCCESS)
- {
- if (srv_head)
- ares_free_data (srv_head);
- return status;
+ /* Link in the record */
+ if (srv_last) {
+ srv_last->next = srv_curr;
+ } else {
+ srv_head = srv_curr;
}
+ srv_last = srv_curr;
+
- /* everything looks fine, return the data */
- *srv_out = srv_head;
+ srv_curr->priority = ares_dns_rr_get_u16(rr, ARES_RR_SRV_PRIORITY);
+ srv_curr->weight = ares_dns_rr_get_u16(rr, ARES_RR_SRV_WEIGHT);
+ srv_curr->port = ares_dns_rr_get_u16(rr, ARES_RR_SRV_PORT);
- return ARES_SUCCESS;
+ srv_curr->host = ares_strdup(ares_dns_rr_get_str(rr, ARES_RR_SRV_TARGET));
+
+ if (srv_curr->host == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+ }
+
+done:
+ /* clean up on error */
+ if (status != ARES_SUCCESS) {
+ if (srv_head) {
+ ares_free_data(srv_head);
+ }
+ } else {
+ /* everything looks fine, return the data */
+ *srv_out = srv_head;
+ }
+ ares_dns_record_destroy(dnsrec);
+ return (int)status;
}
diff --git a/src/lib/ares_parse_txt_reply.c b/src/lib/ares_parse_txt_reply.c
index 6848a09..85c3644 100644
--- a/src/lib/ares_parse_txt_reply.c
+++ b/src/lib/ares_parse_txt_reply.c
@@ -1,214 +1,137 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2009 by Jakub Hrozek <jhrozek@redhat.com>
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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:
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
-
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-# include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-# include <arpa/inet.h>
-#endif
-
-#include "ares_nameser.h"
-
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-
#include "ares.h"
-#include "ares_dns.h"
#include "ares_data.h"
#include "ares_private.h"
-static int
-ares__parse_txt_reply (const unsigned char *abuf, int alen,
- int ex, void **txt_out)
+static int ares__parse_txt_reply(const unsigned char *abuf, size_t alen,
+ ares_bool_t ex, void **txt_out)
{
- size_t substr_len;
- unsigned int qdcount, ancount, i;
- const unsigned char *aptr;
- const unsigned char *strptr;
- int status, rr_type, rr_class, rr_len;
- long len;
- char *hostname = NULL, *rr_name = NULL;
+ ares_status_t status;
struct ares_txt_ext *txt_head = NULL;
struct ares_txt_ext *txt_last = NULL;
struct ares_txt_ext *txt_curr;
+ ares_dns_record_t *dnsrec = NULL;
+ size_t i;
- /* Set *txt_out to NULL for all failure cases. */
*txt_out = NULL;
- /* Give up if abuf doesn't have room for a header. */
- if (alen < HFIXEDSZ)
- return ARES_EBADRESP;
+ status = ares_dns_parse(abuf, alen, 0, &dnsrec);
+ if (status != ARES_SUCCESS) {
+ goto done;
+ }
+
+ if (ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER) == 0) {
+ status = ARES_ENODATA;
+ goto done;
+ }
+
+ for (i = 0; i < ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER); i++) {
+ const ares_dns_rr_t *rr =
+ ares_dns_record_rr_get(dnsrec, ARES_SECTION_ANSWER, i);
+ const unsigned char *ptr;
+ size_t ptr_len;
+
+ if (rr == NULL) {
+ /* Shouldn't be possible */
+ status = ARES_EBADRESP;
+ goto done;
+ }
- /* Fetch the question and answer count from the header. */
- qdcount = DNS_HEADER_QDCOUNT (abuf);
- ancount = DNS_HEADER_ANCOUNT (abuf);
- if (qdcount != 1)
- return ARES_EBADRESP;
- if (ancount == 0)
- return ARES_ENODATA;
-
- /* Expand the name from the question, and skip past the question. */
- aptr = abuf + HFIXEDSZ;
- status = ares_expand_name (aptr, abuf, alen, &hostname, &len);
- if (status != ARES_SUCCESS)
- return status;
-
- if (aptr + len + QFIXEDSZ > abuf + alen)
- {
- ares_free (hostname);
- return ARES_EBADRESP;
+ /* XXX: Why Chaos? */
+ if ((ares_dns_rr_get_class(rr) != ARES_CLASS_IN &&
+ ares_dns_rr_get_class(rr) != ARES_CLASS_CHAOS) ||
+ ares_dns_rr_get_type(rr) != ARES_REC_TYPE_TXT) {
+ continue;
}
- aptr += len + QFIXEDSZ;
-
- /* Examine each answer resource record (RR) in turn. */
- for (i = 0; i < ancount; i++)
- {
- /* Decode the RR up to the data field. */
- status = ares_expand_name (aptr, abuf, alen, &rr_name, &len);
- if (status != ARES_SUCCESS)
- {
- break;
- }
- aptr += len;
- if (aptr + RRFIXEDSZ > abuf + alen)
- {
- status = ARES_EBADRESP;
- break;
- }
- rr_type = DNS_RR_TYPE (aptr);
- rr_class = DNS_RR_CLASS (aptr);
- rr_len = DNS_RR_LEN (aptr);
- aptr += RRFIXEDSZ;
- if (aptr + rr_len > abuf + alen)
- {
- status = ARES_EBADRESP;
- break;
- }
-
- /* Check if we are really looking at a TXT record */
- if ((rr_class == C_IN || rr_class == C_CHAOS) && rr_type == T_TXT)
- {
- /*
- * There may be multiple substrings in a single TXT record. Each
- * substring may be up to 255 characters in length, with a
- * "length byte" indicating the size of the substring payload.
- * RDATA contains both the length-bytes and payloads of all
- * substrings contained therein.
- */
-
- strptr = aptr;
- while (strptr < (aptr + rr_len))
- {
- substr_len = (unsigned char)*strptr;
- if (strptr + substr_len + 1 > aptr + rr_len)
- {
- status = ARES_EBADRESP;
- break;
- }
-
- /* Allocate storage for this TXT answer appending it to the list */
- txt_curr = ares_malloc_data(ex ? ARES_DATATYPE_TXT_EXT :
- ARES_DATATYPE_TXT_REPLY);
- if (!txt_curr)
- {
- status = ARES_ENOMEM;
- break;
- }
- if (txt_last)
- {
- txt_last->next = txt_curr;
- }
- else
- {
- txt_head = txt_curr;
- }
- txt_last = txt_curr;
-
- if (ex)
- txt_curr->record_start = (strptr == aptr);
- txt_curr->length = substr_len;
- txt_curr->txt = ares_malloc (substr_len + 1/* Including null byte */);
- if (txt_curr->txt == NULL)
- {
- status = ARES_ENOMEM;
- break;
- }
-
- ++strptr;
- memcpy ((char *) txt_curr->txt, strptr, substr_len);
-
- /* Make sure we NULL-terminate */
- txt_curr->txt[substr_len] = 0;
-
- strptr += substr_len;
- }
- }
-
- /* Propagate any failures */
- if (status != ARES_SUCCESS)
- {
- break;
- }
-
- /* Don't lose memory in the next iteration */
- ares_free (rr_name);
- rr_name = NULL;
-
- /* Move on to the next record */
- aptr += rr_len;
+
+ /* Allocate storage for this TXT answer appending it to the list */
+ txt_curr =
+ ares_malloc_data(ex ? ARES_DATATYPE_TXT_EXT : ARES_DATATYPE_TXT_REPLY);
+ if (txt_curr == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
}
- if (hostname)
- ares_free (hostname);
- if (rr_name)
- ares_free (rr_name);
+ /* Link in the record */
+ if (txt_last) {
+ txt_last->next = txt_curr;
+ } else {
+ txt_head = txt_curr;
+ }
+ txt_last = txt_curr;
- /* clean up on error */
- if (status != ARES_SUCCESS)
- {
- if (txt_head)
- ares_free_data (txt_head);
- return status;
+ /* These days, records are joined, always tag as start */
+ if (ex) {
+ txt_curr->record_start = 1;
}
- /* everything looks fine, return the data */
- *txt_out = txt_head;
+ ptr = ares_dns_rr_get_bin(rr, ARES_RR_TXT_DATA, &ptr_len);
+
+ txt_curr->txt = ares_malloc(ptr_len + 1);
+ if (txt_curr->txt == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+ memcpy(txt_curr->txt, ptr, ptr_len);
+ txt_curr->txt[ptr_len] = 0;
+ txt_curr->length = ptr_len;
+ }
- return ARES_SUCCESS;
+done:
+ /* clean up on error */
+ if (status != ARES_SUCCESS) {
+ if (txt_head) {
+ ares_free_data(txt_head);
+ }
+ } else {
+ /* everything looks fine, return the data */
+ *txt_out = txt_head;
+ }
+ ares_dns_record_destroy(dnsrec);
+ return (int)status;
}
-int
-ares_parse_txt_reply (const unsigned char *abuf, int alen,
- struct ares_txt_reply **txt_out)
+int ares_parse_txt_reply(const unsigned char *abuf, int alen,
+ struct ares_txt_reply **txt_out)
{
- return ares__parse_txt_reply(abuf, alen, 0, (void **) txt_out);
+ if (alen < 0) {
+ return ARES_EBADRESP;
+ }
+ return ares__parse_txt_reply(abuf, (size_t)alen, ARES_FALSE,
+ (void **)txt_out);
}
-
-int
-ares_parse_txt_reply_ext (const unsigned char *abuf, int alen,
- struct ares_txt_ext **txt_out)
+int ares_parse_txt_reply_ext(const unsigned char *abuf, int alen,
+ struct ares_txt_ext **txt_out)
{
- return ares__parse_txt_reply(abuf, alen, 1, (void **) txt_out);
+ if (alen < 0) {
+ return ARES_EBADRESP;
+ }
+ return ares__parse_txt_reply(abuf, (size_t)alen, ARES_TRUE, (void **)txt_out);
}
diff --git a/src/lib/ares_parse_uri_reply.c b/src/lib/ares_parse_uri_reply.c
index d79b5c4..bff7023 100644
--- a/src/lib/ares_parse_uri_reply.c
+++ b/src/lib/ares_parse_uri_reply.c
@@ -1,184 +1,115 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2009 by Jakub Hrozek <jhrozek@redhat.com>
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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:
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
-
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-#ifdef HAVE_NETDB_H
-# include <netdb.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-# include <arpa/inet.h>
-#endif
-
-#include "ares_nameser.h"
-
#include "ares.h"
-#include "ares_dns.h"
#include "ares_data.h"
#include "ares_private.h"
-/* AIX portability check */
-#ifndef T_URI
-# define T_URI 256 /* uri selection */
-#endif
-
-int
-ares_parse_uri_reply (const unsigned char *abuf, int alen,
- struct ares_uri_reply **uri_out)
+int ares_parse_uri_reply(const unsigned char *abuf, int alen_int,
+ struct ares_uri_reply **uri_out)
{
- unsigned int qdcount, ancount, i;
- const unsigned char *aptr, *vptr;
- int status, rr_type, rr_class, rr_len, rr_ttl;
- long len;
- char *uri_str = NULL, *rr_name = NULL;
+ ares_status_t status;
+ size_t alen;
struct ares_uri_reply *uri_head = NULL;
struct ares_uri_reply *uri_last = NULL;
struct ares_uri_reply *uri_curr;
+ ares_dns_record_t *dnsrec = NULL;
+ size_t i;
- /* Set *uri_out to NULL for all failure cases. */
*uri_out = NULL;
- /* Give up if abuf doesn't have room for a header. */
- if (alen < HFIXEDSZ){
- return ARES_EBADRESP;
+ if (alen_int < 0) {
+ return ARES_EBADRESP;
}
- /* Fetch the question and answer count from the header. */
- qdcount = DNS_HEADER_QDCOUNT (abuf);
- ancount = DNS_HEADER_ANCOUNT (abuf);
- if (qdcount != 1) {
- return ARES_EBADRESP;
- }
- if (ancount == 0) {
- return ARES_ENODATA;
+ alen = (size_t)alen_int;
+
+ status = ares_dns_parse(abuf, alen, 0, &dnsrec);
+ if (status != ARES_SUCCESS) {
+ goto done;
}
- /* Expand the name from the question, and skip past the question. */
- aptr = abuf + HFIXEDSZ;
- status = ares_expand_name (aptr, abuf, alen, &uri_str, &len);
- if (status != ARES_SUCCESS){
- return status;
+ if (ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER) == 0) {
+ status = ARES_ENODATA;
+ goto done;
}
- if (aptr + len + QFIXEDSZ > abuf + alen)
- {
- ares_free (uri_str);
- return ARES_EBADRESP;
+
+ for (i = 0; i < ares_dns_record_rr_cnt(dnsrec, ARES_SECTION_ANSWER); i++) {
+ const ares_dns_rr_t *rr =
+ ares_dns_record_rr_get(dnsrec, ARES_SECTION_ANSWER, i);
+
+ if (rr == NULL) {
+ /* Shouldn't be possible */
+ status = ARES_EBADRESP;
+ goto done;
}
- aptr += len + QFIXEDSZ;
-
- /* Examine each answer resource record (RR) in turn. */
- for (i = 0; i < ancount; i++)
- {
- /* Decode the RR up to the data field. */
- status = ares_expand_name (aptr, abuf, alen, &rr_name, &len);
- if (status != ARES_SUCCESS)
- {
- break;
- }
- aptr += len;
- if (aptr + RRFIXEDSZ > abuf + alen)
- {
- status = ARES_EBADRESP;
- break;
- }
-
- rr_type = DNS_RR_TYPE (aptr);
- rr_class = DNS_RR_CLASS (aptr);
- rr_ttl = DNS_RR_TTL(aptr);
- rr_len = DNS_RR_LEN (aptr);
- aptr += RRFIXEDSZ;
-
- if (aptr + rr_len > abuf + alen)
- {
- status = ARES_EBADRESP;
- break;
- }
-
- /* Check if we are really looking at a URI record */
- if (rr_class == C_IN && rr_type == T_URI)
- {
- /* parse the URI record itself */
- if (rr_len < 5)
- {
- status = ARES_EBADRESP;
- break;
- }
- /* Allocate storage for this URI answer appending it to the list */
- uri_curr = ares_malloc_data(ARES_DATATYPE_URI_REPLY);
- if (!uri_curr)
- {
- status = ARES_ENOMEM;
- break;
- }
- if (uri_last)
- {
- uri_last->next = uri_curr;
- }
- else
- {
- uri_head = uri_curr;
- }
- uri_last = uri_curr;
-
- vptr = aptr;
- uri_curr->priority = DNS__16BIT(vptr);
- vptr += sizeof(unsigned short);
- uri_curr->weight = DNS__16BIT(vptr);
- vptr += sizeof(unsigned short);
- uri_curr->uri = (char *)ares_malloc(rr_len-3);
- if (!uri_curr->uri)
- {
- status = ARES_ENOMEM;
- break;
- }
- uri_curr->uri = strncpy(uri_curr->uri, (const char *)vptr, rr_len-4);
- uri_curr->uri[rr_len-4]='\0';
- uri_curr->ttl = rr_ttl;
-
- if (status != ARES_SUCCESS)
- break;
- }
-
- /* Don't lose memory in the next iteration */
- ares_free (rr_name);
- rr_name = NULL;
-
- /* Move on to the next record */
- aptr += rr_len;
+
+ if (ares_dns_rr_get_class(rr) != ARES_CLASS_IN ||
+ ares_dns_rr_get_type(rr) != ARES_REC_TYPE_URI) {
+ continue;
}
- if (uri_str)
- ares_free (uri_str);
- if (rr_name)
- ares_free (rr_name);
+ /* Allocate storage for this URI answer appending it to the list */
+ uri_curr = ares_malloc_data(ARES_DATATYPE_URI_REPLY);
+ if (uri_curr == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
- /* clean up on error */
- if (status != ARES_SUCCESS)
- {
- if (uri_head)
- ares_free_data (uri_head);
- return status;
+ /* Link in the record */
+ if (uri_last) {
+ uri_last->next = uri_curr;
+ } else {
+ uri_head = uri_curr;
}
+ uri_last = uri_curr;
+
- /* everything looks fine, return the data */
- *uri_out = uri_head;
+ uri_curr->priority = ares_dns_rr_get_u16(rr, ARES_RR_URI_PRIORITY);
+ uri_curr->weight = ares_dns_rr_get_u16(rr, ARES_RR_URI_WEIGHT);
+ uri_curr->uri = ares_strdup(ares_dns_rr_get_str(rr, ARES_RR_URI_TARGET));
+ uri_curr->ttl = (int)ares_dns_rr_get_ttl(rr);
- return ARES_SUCCESS;
+ if (uri_curr->uri == NULL) {
+ status = ARES_ENOMEM;
+ goto done;
+ }
+ }
+
+done:
+ /* clean up on error */
+ if (status != ARES_SUCCESS) {
+ if (uri_head) {
+ ares_free_data(uri_head);
+ }
+ } else {
+ /* everything looks fine, return the data */
+ *uri_out = uri_head;
+ }
+ ares_dns_record_destroy(dnsrec);
+ return (int)status;
}
diff --git a/src/lib/ares_platform.c b/src/lib/ares_platform.c
index 6c749dc..0727ae0 100644
--- a/src/lib/ares_platform.c
+++ b/src/lib/ares_platform.c
@@ -1,34 +1,42 @@
-
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2004 - 2011 by Daniel Stenberg et al
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) 2004 Daniel Stenberg
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
#include "ares.h"
#include "ares_platform.h"
-#include "ares_nowarn.h"
#include "ares_private.h"
#if defined(WIN32) && !defined(MSDOS)
-#define V_PLATFORM_WIN32s 0
-#define V_PLATFORM_WIN32_WINDOWS 1
-#define V_PLATFORM_WIN32_NT 2
-#define V_PLATFORM_WIN32_CE 3
+# define V_PLATFORM_WIN32s 0
+# define V_PLATFORM_WIN32_WINDOWS 1
+# define V_PLATFORM_WIN32_NT 2
+# define V_PLATFORM_WIN32_CE 3
win_platform ares__getplatform(void)
{
@@ -36,38 +44,38 @@ win_platform ares__getplatform(void)
memset(&OsvEx, 0, sizeof(OsvEx));
OsvEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable:4996) /* warning C4996: 'GetVersionExW': was declared deprecated */
-#endif
- if (!GetVersionEx((void *)&OsvEx))
- {
- memset(&OsvEx, 0, sizeof(OsvEx));
- OsvEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
- if (!GetVersionEx((void *)&OsvEx))
- return WIN_UNKNOWN;
+# ifdef _MSC_VER
+# pragma warning(push)
+# pragma warning(disable : 4996) /* warning C4996: 'GetVersionExW': was \
+ declared deprecated */
+# endif
+ if (!GetVersionEx((void *)&OsvEx)) {
+ memset(&OsvEx, 0, sizeof(OsvEx));
+ OsvEx.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
+ if (!GetVersionEx((void *)&OsvEx)) {
+ return WIN_UNKNOWN;
}
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
+ }
+# ifdef _MSC_VER
+# pragma warning(pop)
+# endif
- switch(OsvEx.dwPlatformId)
- {
- case V_PLATFORM_WIN32s:
- return WIN_3X;
+ switch (OsvEx.dwPlatformId) {
+ case V_PLATFORM_WIN32s:
+ return WIN_3X;
- case V_PLATFORM_WIN32_WINDOWS:
- return WIN_9X;
+ case V_PLATFORM_WIN32_WINDOWS:
+ return WIN_9X;
- case V_PLATFORM_WIN32_NT:
- return WIN_NT;
+ case V_PLATFORM_WIN32_NT:
+ return WIN_NT;
- case V_PLATFORM_WIN32_CE:
- return WIN_CE;
+ case V_PLATFORM_WIN32_CE:
+ return WIN_CE;
- default:
- return WIN_UNKNOWN;
- }
+ default:
+ return WIN_UNKNOWN;
+ }
}
#endif /* WIN32 && ! MSDOS */
@@ -75,16 +83,16 @@ win_platform ares__getplatform(void)
#if defined(_WIN32_WCE)
/* IANA Well Known Ports are in range 0-1023 */
-#define USE_IANA_WELL_KNOWN_PORTS 1
+# define USE_IANA_WELL_KNOWN_PORTS 1
/* IANA Registered Ports are in range 1024-49151 */
-#define USE_IANA_REGISTERED_PORTS 1
+# define USE_IANA_REGISTERED_PORTS 1
struct pvt_servent {
- char *s_name;
- char **s_aliases;
- unsigned short s_port;
- char *s_proto;
+ char *s_name;
+ char **s_aliases;
+ unsigned short s_port;
+ char *s_proto;
};
/*
@@ -92,10948 +100,10948 @@ struct pvt_servent {
*/
static struct pvt_servent IANAports[] = {
-#ifdef USE_IANA_WELL_KNOWN_PORTS
-{"tcpmux", {NULL}, 1, "tcp"},
-{"tcpmux", {NULL}, 1, "udp"},
-{"compressnet", {NULL}, 2, "tcp"},
-{"compressnet", {NULL}, 2, "udp"},
-{"compressnet", {NULL}, 3, "tcp"},
-{"compressnet", {NULL}, 3, "udp"},
-{"rje", {NULL}, 5, "tcp"},
-{"rje", {NULL}, 5, "udp"},
-{"echo", {NULL}, 7, "tcp"},
-{"echo", {NULL}, 7, "udp"},
-{"discard", {NULL}, 9, "tcp"},
-{"discard", {NULL}, 9, "udp"},
-{"discard", {NULL}, 9, "sctp"},
-{"discard", {NULL}, 9, "dccp"},
-{"systat", {NULL}, 11, "tcp"},
-{"systat", {NULL}, 11, "udp"},
-{"daytime", {NULL}, 13, "tcp"},
-{"daytime", {NULL}, 13, "udp"},
-{"qotd", {NULL}, 17, "tcp"},
-{"qotd", {NULL}, 17, "udp"},
-{"msp", {NULL}, 18, "tcp"},
-{"msp", {NULL}, 18, "udp"},
-{"chargen", {NULL}, 19, "tcp"},
-{"chargen", {NULL}, 19, "udp"},
-{"ftp-data", {NULL}, 20, "tcp"},
-{"ftp-data", {NULL}, 20, "udp"},
-{"ftp-data", {NULL}, 20, "sctp"},
-{"ftp", {NULL}, 21, "tcp"},
-{"ftp", {NULL}, 21, "udp"},
-{"ftp", {NULL}, 21, "sctp"},
-{"ssh", {NULL}, 22, "tcp"},
-{"ssh", {NULL}, 22, "udp"},
-{"ssh", {NULL}, 22, "sctp"},
-{"telnet", {NULL}, 23, "tcp"},
-{"telnet", {NULL}, 23, "udp"},
-{"smtp", {NULL}, 25, "tcp"},
-{"smtp", {NULL}, 25, "udp"},
-{"nsw-fe", {NULL}, 27, "tcp"},
-{"nsw-fe", {NULL}, 27, "udp"},
-{"msg-icp", {NULL}, 29, "tcp"},
-{"msg-icp", {NULL}, 29, "udp"},
-{"msg-auth", {NULL}, 31, "tcp"},
-{"msg-auth", {NULL}, 31, "udp"},
-{"dsp", {NULL}, 33, "tcp"},
-{"dsp", {NULL}, 33, "udp"},
-{"time", {NULL}, 37, "tcp"},
-{"time", {NULL}, 37, "udp"},
-{"rap", {NULL}, 38, "tcp"},
-{"rap", {NULL}, 38, "udp"},
-{"rlp", {NULL}, 39, "tcp"},
-{"rlp", {NULL}, 39, "udp"},
-{"graphics", {NULL}, 41, "tcp"},
-{"graphics", {NULL}, 41, "udp"},
-{"name", {NULL}, 42, "tcp"},
-{"name", {NULL}, 42, "udp"},
-{"nameserver", {NULL}, 42, "tcp"},
-{"nameserver", {NULL}, 42, "udp"},
-{"nicname", {NULL}, 43, "tcp"},
-{"nicname", {NULL}, 43, "udp"},
-{"mpm-flags", {NULL}, 44, "tcp"},
-{"mpm-flags", {NULL}, 44, "udp"},
-{"mpm", {NULL}, 45, "tcp"},
-{"mpm", {NULL}, 45, "udp"},
-{"mpm-snd", {NULL}, 46, "tcp"},
-{"mpm-snd", {NULL}, 46, "udp"},
-{"ni-ftp", {NULL}, 47, "tcp"},
-{"ni-ftp", {NULL}, 47, "udp"},
-{"auditd", {NULL}, 48, "tcp"},
-{"auditd", {NULL}, 48, "udp"},
-{"tacacs", {NULL}, 49, "tcp"},
-{"tacacs", {NULL}, 49, "udp"},
-{"re-mail-ck", {NULL}, 50, "tcp"},
-{"re-mail-ck", {NULL}, 50, "udp"},
-{"la-maint", {NULL}, 51, "tcp"},
-{"la-maint", {NULL}, 51, "udp"},
-{"xns-time", {NULL}, 52, "tcp"},
-{"xns-time", {NULL}, 52, "udp"},
-{"domain", {NULL}, 53, "tcp"},
-{"domain", {NULL}, 53, "udp"},
-{"xns-ch", {NULL}, 54, "tcp"},
-{"xns-ch", {NULL}, 54, "udp"},
-{"isi-gl", {NULL}, 55, "tcp"},
-{"isi-gl", {NULL}, 55, "udp"},
-{"xns-auth", {NULL}, 56, "tcp"},
-{"xns-auth", {NULL}, 56, "udp"},
-{"xns-mail", {NULL}, 58, "tcp"},
-{"xns-mail", {NULL}, 58, "udp"},
-{"ni-mail", {NULL}, 61, "tcp"},
-{"ni-mail", {NULL}, 61, "udp"},
-{"acas", {NULL}, 62, "tcp"},
-{"acas", {NULL}, 62, "udp"},
-{"whois++", {NULL}, 63, "tcp"},
-{"whois++", {NULL}, 63, "udp"},
-{"covia", {NULL}, 64, "tcp"},
-{"covia", {NULL}, 64, "udp"},
-{"tacacs-ds", {NULL}, 65, "tcp"},
-{"tacacs-ds", {NULL}, 65, "udp"},
-{"sql*net", {NULL}, 66, "tcp"},
-{"sql*net", {NULL}, 66, "udp"},
-{"bootps", {NULL}, 67, "tcp"},
-{"bootps", {NULL}, 67, "udp"},
-{"bootpc", {NULL}, 68, "tcp"},
-{"bootpc", {NULL}, 68, "udp"},
-{"tftp", {NULL}, 69, "tcp"},
-{"tftp", {NULL}, 69, "udp"},
-{"gopher", {NULL}, 70, "tcp"},
-{"gopher", {NULL}, 70, "udp"},
-{"netrjs-1", {NULL}, 71, "tcp"},
-{"netrjs-1", {NULL}, 71, "udp"},
-{"netrjs-2", {NULL}, 72, "tcp"},
-{"netrjs-2", {NULL}, 72, "udp"},
-{"netrjs-3", {NULL}, 73, "tcp"},
-{"netrjs-3", {NULL}, 73, "udp"},
-{"netrjs-4", {NULL}, 74, "tcp"},
-{"netrjs-4", {NULL}, 74, "udp"},
-{"deos", {NULL}, 76, "tcp"},
-{"deos", {NULL}, 76, "udp"},
-{"vettcp", {NULL}, 78, "tcp"},
-{"vettcp", {NULL}, 78, "udp"},
-{"finger", {NULL}, 79, "tcp"},
-{"finger", {NULL}, 79, "udp"},
-{"http", {NULL}, 80, "tcp"},
-{"http", {NULL}, 80, "udp"},
-{"www", {NULL}, 80, "tcp"},
-{"www", {NULL}, 80, "udp"},
-{"www-http", {NULL}, 80, "tcp"},
-{"www-http", {NULL}, 80, "udp"},
-{"http", {NULL}, 80, "sctp"},
-{"xfer", {NULL}, 82, "tcp"},
-{"xfer", {NULL}, 82, "udp"},
-{"mit-ml-dev", {NULL}, 83, "tcp"},
-{"mit-ml-dev", {NULL}, 83, "udp"},
-{"ctf", {NULL}, 84, "tcp"},
-{"ctf", {NULL}, 84, "udp"},
-{"mit-ml-dev", {NULL}, 85, "tcp"},
-{"mit-ml-dev", {NULL}, 85, "udp"},
-{"mfcobol", {NULL}, 86, "tcp"},
-{"mfcobol", {NULL}, 86, "udp"},
-{"kerberos", {NULL}, 88, "tcp"},
-{"kerberos", {NULL}, 88, "udp"},
-{"su-mit-tg", {NULL}, 89, "tcp"},
-{"su-mit-tg", {NULL}, 89, "udp"},
-{"dnsix", {NULL}, 90, "tcp"},
-{"dnsix", {NULL}, 90, "udp"},
-{"mit-dov", {NULL}, 91, "tcp"},
-{"mit-dov", {NULL}, 91, "udp"},
-{"npp", {NULL}, 92, "tcp"},
-{"npp", {NULL}, 92, "udp"},
-{"dcp", {NULL}, 93, "tcp"},
-{"dcp", {NULL}, 93, "udp"},
-{"objcall", {NULL}, 94, "tcp"},
-{"objcall", {NULL}, 94, "udp"},
-{"supdup", {NULL}, 95, "tcp"},
-{"supdup", {NULL}, 95, "udp"},
-{"dixie", {NULL}, 96, "tcp"},
-{"dixie", {NULL}, 96, "udp"},
-{"swift-rvf", {NULL}, 97, "tcp"},
-{"swift-rvf", {NULL}, 97, "udp"},
-{"tacnews", {NULL}, 98, "tcp"},
-{"tacnews", {NULL}, 98, "udp"},
-{"metagram", {NULL}, 99, "tcp"},
-{"metagram", {NULL}, 99, "udp"},
-{"newacct", {NULL}, 100, "tcp"},
-{"hostname", {NULL}, 101, "tcp"},
-{"hostname", {NULL}, 101, "udp"},
-{"iso-tsap", {NULL}, 102, "tcp"},
-{"iso-tsap", {NULL}, 102, "udp"},
-{"gppitnp", {NULL}, 103, "tcp"},
-{"gppitnp", {NULL}, 103, "udp"},
-{"acr-nema", {NULL}, 104, "tcp"},
-{"acr-nema", {NULL}, 104, "udp"},
-{"cso", {NULL}, 105, "tcp"},
-{"cso", {NULL}, 105, "udp"},
-{"csnet-ns", {NULL}, 105, "tcp"},
-{"csnet-ns", {NULL}, 105, "udp"},
-{"3com-tsmux", {NULL}, 106, "tcp"},
-{"3com-tsmux", {NULL}, 106, "udp"},
-{"rtelnet", {NULL}, 107, "tcp"},
-{"rtelnet", {NULL}, 107, "udp"},
-{"snagas", {NULL}, 108, "tcp"},
-{"snagas", {NULL}, 108, "udp"},
-{"pop2", {NULL}, 109, "tcp"},
-{"pop2", {NULL}, 109, "udp"},
-{"pop3", {NULL}, 110, "tcp"},
-{"pop3", {NULL}, 110, "udp"},
-{"sunrpc", {NULL}, 111, "tcp"},
-{"sunrpc", {NULL}, 111, "udp"},
-{"mcidas", {NULL}, 112, "tcp"},
-{"mcidas", {NULL}, 112, "udp"},
-{"ident", {NULL}, 113, "tcp"},
-{"auth", {NULL}, 113, "tcp"},
-{"auth", {NULL}, 113, "udp"},
-{"sftp", {NULL}, 115, "tcp"},
-{"sftp", {NULL}, 115, "udp"},
-{"ansanotify", {NULL}, 116, "tcp"},
-{"ansanotify", {NULL}, 116, "udp"},
-{"uucp-path", {NULL}, 117, "tcp"},
-{"uucp-path", {NULL}, 117, "udp"},
-{"sqlserv", {NULL}, 118, "tcp"},
-{"sqlserv", {NULL}, 118, "udp"},
-{"nntp", {NULL}, 119, "tcp"},
-{"nntp", {NULL}, 119, "udp"},
-{"cfdptkt", {NULL}, 120, "tcp"},
-{"cfdptkt", {NULL}, 120, "udp"},
-{"erpc", {NULL}, 121, "tcp"},
-{"erpc", {NULL}, 121, "udp"},
-{"smakynet", {NULL}, 122, "tcp"},
-{"smakynet", {NULL}, 122, "udp"},
-{"ntp", {NULL}, 123, "tcp"},
-{"ntp", {NULL}, 123, "udp"},
-{"ansatrader", {NULL}, 124, "tcp"},
-{"ansatrader", {NULL}, 124, "udp"},
-{"locus-map", {NULL}, 125, "tcp"},
-{"locus-map", {NULL}, 125, "udp"},
-{"nxedit", {NULL}, 126, "tcp"},
-{"nxedit", {NULL}, 126, "udp"},
-{"locus-con", {NULL}, 127, "tcp"},
-{"locus-con", {NULL}, 127, "udp"},
-{"gss-xlicen", {NULL}, 128, "tcp"},
-{"gss-xlicen", {NULL}, 128, "udp"},
-{"pwdgen", {NULL}, 129, "tcp"},
-{"pwdgen", {NULL}, 129, "udp"},
-{"cisco-fna", {NULL}, 130, "tcp"},
-{"cisco-fna", {NULL}, 130, "udp"},
-{"cisco-tna", {NULL}, 131, "tcp"},
-{"cisco-tna", {NULL}, 131, "udp"},
-{"cisco-sys", {NULL}, 132, "tcp"},
-{"cisco-sys", {NULL}, 132, "udp"},
-{"statsrv", {NULL}, 133, "tcp"},
-{"statsrv", {NULL}, 133, "udp"},
-{"ingres-net", {NULL}, 134, "tcp"},
-{"ingres-net", {NULL}, 134, "udp"},
-{"epmap", {NULL}, 135, "tcp"},
-{"epmap", {NULL}, 135, "udp"},
-{"profile", {NULL}, 136, "tcp"},
-{"profile", {NULL}, 136, "udp"},
-{"netbios-ns", {NULL}, 137, "tcp"},
-{"netbios-ns", {NULL}, 137, "udp"},
-{"netbios-dgm", {NULL}, 138, "tcp"},
-{"netbios-dgm", {NULL}, 138, "udp"},
-{"netbios-ssn", {NULL}, 139, "tcp"},
-{"netbios-ssn", {NULL}, 139, "udp"},
-{"emfis-data", {NULL}, 140, "tcp"},
-{"emfis-data", {NULL}, 140, "udp"},
-{"emfis-cntl", {NULL}, 141, "tcp"},
-{"emfis-cntl", {NULL}, 141, "udp"},
-{"bl-idm", {NULL}, 142, "tcp"},
-{"bl-idm", {NULL}, 142, "udp"},
-{"imap", {NULL}, 143, "tcp"},
-{"imap", {NULL}, 143, "udp"},
-{"uma", {NULL}, 144, "tcp"},
-{"uma", {NULL}, 144, "udp"},
-{"uaac", {NULL}, 145, "tcp"},
-{"uaac", {NULL}, 145, "udp"},
-{"iso-tp0", {NULL}, 146, "tcp"},
-{"iso-tp0", {NULL}, 146, "udp"},
-{"iso-ip", {NULL}, 147, "tcp"},
-{"iso-ip", {NULL}, 147, "udp"},
-{"jargon", {NULL}, 148, "tcp"},
-{"jargon", {NULL}, 148, "udp"},
-{"aed-512", {NULL}, 149, "tcp"},
-{"aed-512", {NULL}, 149, "udp"},
-{"sql-net", {NULL}, 150, "tcp"},
-{"sql-net", {NULL}, 150, "udp"},
-{"hems", {NULL}, 151, "tcp"},
-{"hems", {NULL}, 151, "udp"},
-{"bftp", {NULL}, 152, "tcp"},
-{"bftp", {NULL}, 152, "udp"},
-{"sgmp", {NULL}, 153, "tcp"},
-{"sgmp", {NULL}, 153, "udp"},
-{"netsc-prod", {NULL}, 154, "tcp"},
-{"netsc-prod", {NULL}, 154, "udp"},
-{"netsc-dev", {NULL}, 155, "tcp"},
-{"netsc-dev", {NULL}, 155, "udp"},
-{"sqlsrv", {NULL}, 156, "tcp"},
-{"sqlsrv", {NULL}, 156, "udp"},
-{"knet-cmp", {NULL}, 157, "tcp"},
-{"knet-cmp", {NULL}, 157, "udp"},
-{"pcmail-srv", {NULL}, 158, "tcp"},
-{"pcmail-srv", {NULL}, 158, "udp"},
-{"nss-routing", {NULL}, 159, "tcp"},
-{"nss-routing", {NULL}, 159, "udp"},
-{"sgmp-traps", {NULL}, 160, "tcp"},
-{"sgmp-traps", {NULL}, 160, "udp"},
-{"snmp", {NULL}, 161, "tcp"},
-{"snmp", {NULL}, 161, "udp"},
-{"snmptrap", {NULL}, 162, "tcp"},
-{"snmptrap", {NULL}, 162, "udp"},
-{"cmip-man", {NULL}, 163, "tcp"},
-{"cmip-man", {NULL}, 163, "udp"},
-{"cmip-agent", {NULL}, 164, "tcp"},
-{"cmip-agent", {NULL}, 164, "udp"},
-{"xns-courier", {NULL}, 165, "tcp"},
-{"xns-courier", {NULL}, 165, "udp"},
-{"s-net", {NULL}, 166, "tcp"},
-{"s-net", {NULL}, 166, "udp"},
-{"namp", {NULL}, 167, "tcp"},
-{"namp", {NULL}, 167, "udp"},
-{"rsvd", {NULL}, 168, "tcp"},
-{"rsvd", {NULL}, 168, "udp"},
-{"send", {NULL}, 169, "tcp"},
-{"send", {NULL}, 169, "udp"},
-{"print-srv", {NULL}, 170, "tcp"},
-{"print-srv", {NULL}, 170, "udp"},
-{"multiplex", {NULL}, 171, "tcp"},
-{"multiplex", {NULL}, 171, "udp"},
-{"cl/1", {NULL}, 172, "tcp"},
-{"cl/1", {NULL}, 172, "udp"},
-{"xyplex-mux", {NULL}, 173, "tcp"},
-{"xyplex-mux", {NULL}, 173, "udp"},
-{"mailq", {NULL}, 174, "tcp"},
-{"mailq", {NULL}, 174, "udp"},
-{"vmnet", {NULL}, 175, "tcp"},
-{"vmnet", {NULL}, 175, "udp"},
-{"genrad-mux", {NULL}, 176, "tcp"},
-{"genrad-mux", {NULL}, 176, "udp"},
-{"xdmcp", {NULL}, 177, "tcp"},
-{"xdmcp", {NULL}, 177, "udp"},
-{"nextstep", {NULL}, 178, "tcp"},
-{"nextstep", {NULL}, 178, "udp"},
-{"bgp", {NULL}, 179, "tcp"},
-{"bgp", {NULL}, 179, "udp"},
-{"bgp", {NULL}, 179, "sctp"},
-{"ris", {NULL}, 180, "tcp"},
-{"ris", {NULL}, 180, "udp"},
-{"unify", {NULL}, 181, "tcp"},
-{"unify", {NULL}, 181, "udp"},
-{"audit", {NULL}, 182, "tcp"},
-{"audit", {NULL}, 182, "udp"},
-{"ocbinder", {NULL}, 183, "tcp"},
-{"ocbinder", {NULL}, 183, "udp"},
-{"ocserver", {NULL}, 184, "tcp"},
-{"ocserver", {NULL}, 184, "udp"},
-{"remote-kis", {NULL}, 185, "tcp"},
-{"remote-kis", {NULL}, 185, "udp"},
-{"kis", {NULL}, 186, "tcp"},
-{"kis", {NULL}, 186, "udp"},
-{"aci", {NULL}, 187, "tcp"},
-{"aci", {NULL}, 187, "udp"},
-{"mumps", {NULL}, 188, "tcp"},
-{"mumps", {NULL}, 188, "udp"},
-{"qft", {NULL}, 189, "tcp"},
-{"qft", {NULL}, 189, "udp"},
-{"gacp", {NULL}, 190, "tcp"},
-{"gacp", {NULL}, 190, "udp"},
-{"prospero", {NULL}, 191, "tcp"},
-{"prospero", {NULL}, 191, "udp"},
-{"osu-nms", {NULL}, 192, "tcp"},
-{"osu-nms", {NULL}, 192, "udp"},
-{"srmp", {NULL}, 193, "tcp"},
-{"srmp", {NULL}, 193, "udp"},
-{"irc", {NULL}, 194, "tcp"},
-{"irc", {NULL}, 194, "udp"},
-{"dn6-nlm-aud", {NULL}, 195, "tcp"},
-{"dn6-nlm-aud", {NULL}, 195, "udp"},
-{"dn6-smm-red", {NULL}, 196, "tcp"},
-{"dn6-smm-red", {NULL}, 196, "udp"},
-{"dls", {NULL}, 197, "tcp"},
-{"dls", {NULL}, 197, "udp"},
-{"dls-mon", {NULL}, 198, "tcp"},
-{"dls-mon", {NULL}, 198, "udp"},
-{"smux", {NULL}, 199, "tcp"},
-{"smux", {NULL}, 199, "udp"},
-{"src", {NULL}, 200, "tcp"},
-{"src", {NULL}, 200, "udp"},
-{"at-rtmp", {NULL}, 201, "tcp"},
-{"at-rtmp", {NULL}, 201, "udp"},
-{"at-nbp", {NULL}, 202, "tcp"},
-{"at-nbp", {NULL}, 202, "udp"},
-{"at-3", {NULL}, 203, "tcp"},
-{"at-3", {NULL}, 203, "udp"},
-{"at-echo", {NULL}, 204, "tcp"},
-{"at-echo", {NULL}, 204, "udp"},
-{"at-5", {NULL}, 205, "tcp"},
-{"at-5", {NULL}, 205, "udp"},
-{"at-zis", {NULL}, 206, "tcp"},
-{"at-zis", {NULL}, 206, "udp"},
-{"at-7", {NULL}, 207, "tcp"},
-{"at-7", {NULL}, 207, "udp"},
-{"at-8", {NULL}, 208, "tcp"},
-{"at-8", {NULL}, 208, "udp"},
-{"qmtp", {NULL}, 209, "tcp"},
-{"qmtp", {NULL}, 209, "udp"},
-{"z39.50", {NULL}, 210, "tcp"},
-{"z39.50", {NULL}, 210, "udp"},
-{"914c/g", {NULL}, 211, "tcp"},
-{"914c/g", {NULL}, 211, "udp"},
-{"anet", {NULL}, 212, "tcp"},
-{"anet", {NULL}, 212, "udp"},
-{"ipx", {NULL}, 213, "tcp"},
-{"ipx", {NULL}, 213, "udp"},
-{"vmpwscs", {NULL}, 214, "tcp"},
-{"vmpwscs", {NULL}, 214, "udp"},
-{"softpc", {NULL}, 215, "tcp"},
-{"softpc", {NULL}, 215, "udp"},
-{"CAIlic", {NULL}, 216, "tcp"},
-{"CAIlic", {NULL}, 216, "udp"},
-{"dbase", {NULL}, 217, "tcp"},
-{"dbase", {NULL}, 217, "udp"},
-{"mpp", {NULL}, 218, "tcp"},
-{"mpp", {NULL}, 218, "udp"},
-{"uarps", {NULL}, 219, "tcp"},
-{"uarps", {NULL}, 219, "udp"},
-{"imap3", {NULL}, 220, "tcp"},
-{"imap3", {NULL}, 220, "udp"},
-{"fln-spx", {NULL}, 221, "tcp"},
-{"fln-spx", {NULL}, 221, "udp"},
-{"rsh-spx", {NULL}, 222, "tcp"},
-{"rsh-spx", {NULL}, 222, "udp"},
-{"cdc", {NULL}, 223, "tcp"},
-{"cdc", {NULL}, 223, "udp"},
-{"masqdialer", {NULL}, 224, "tcp"},
-{"masqdialer", {NULL}, 224, "udp"},
-{"direct", {NULL}, 242, "tcp"},
-{"direct", {NULL}, 242, "udp"},
-{"sur-meas", {NULL}, 243, "tcp"},
-{"sur-meas", {NULL}, 243, "udp"},
-{"inbusiness", {NULL}, 244, "tcp"},
-{"inbusiness", {NULL}, 244, "udp"},
-{"link", {NULL}, 245, "tcp"},
-{"link", {NULL}, 245, "udp"},
-{"dsp3270", {NULL}, 246, "tcp"},
-{"dsp3270", {NULL}, 246, "udp"},
-{"subntbcst_tftp", {NULL}, 247, "tcp"},
-{"subntbcst_tftp", {NULL}, 247, "udp"},
-{"bhfhs", {NULL}, 248, "tcp"},
-{"bhfhs", {NULL}, 248, "udp"},
-{"rap", {NULL}, 256, "tcp"},
-{"rap", {NULL}, 256, "udp"},
-{"set", {NULL}, 257, "tcp"},
-{"set", {NULL}, 257, "udp"},
-{"esro-gen", {NULL}, 259, "tcp"},
-{"esro-gen", {NULL}, 259, "udp"},
-{"openport", {NULL}, 260, "tcp"},
-{"openport", {NULL}, 260, "udp"},
-{"nsiiops", {NULL}, 261, "tcp"},
-{"nsiiops", {NULL}, 261, "udp"},
-{"arcisdms", {NULL}, 262, "tcp"},
-{"arcisdms", {NULL}, 262, "udp"},
-{"hdap", {NULL}, 263, "tcp"},
-{"hdap", {NULL}, 263, "udp"},
-{"bgmp", {NULL}, 264, "tcp"},
-{"bgmp", {NULL}, 264, "udp"},
-{"x-bone-ctl", {NULL}, 265, "tcp"},
-{"x-bone-ctl", {NULL}, 265, "udp"},
-{"sst", {NULL}, 266, "tcp"},
-{"sst", {NULL}, 266, "udp"},
-{"td-service", {NULL}, 267, "tcp"},
-{"td-service", {NULL}, 267, "udp"},
-{"td-replica", {NULL}, 268, "tcp"},
-{"td-replica", {NULL}, 268, "udp"},
-{"manet", {NULL}, 269, "tcp"},
-{"manet", {NULL}, 269, "udp"},
-{"gist", {NULL}, 270, "udp"},
-{"http-mgmt", {NULL}, 280, "tcp"},
-{"http-mgmt", {NULL}, 280, "udp"},
-{"personal-link", {NULL}, 281, "tcp"},
-{"personal-link", {NULL}, 281, "udp"},
-{"cableport-ax", {NULL}, 282, "tcp"},
-{"cableport-ax", {NULL}, 282, "udp"},
-{"rescap", {NULL}, 283, "tcp"},
-{"rescap", {NULL}, 283, "udp"},
-{"corerjd", {NULL}, 284, "tcp"},
-{"corerjd", {NULL}, 284, "udp"},
-{"fxp", {NULL}, 286, "tcp"},
-{"fxp", {NULL}, 286, "udp"},
-{"k-block", {NULL}, 287, "tcp"},
-{"k-block", {NULL}, 287, "udp"},
-{"novastorbakcup", {NULL}, 308, "tcp"},
-{"novastorbakcup", {NULL}, 308, "udp"},
-{"entrusttime", {NULL}, 309, "tcp"},
-{"entrusttime", {NULL}, 309, "udp"},
-{"bhmds", {NULL}, 310, "tcp"},
-{"bhmds", {NULL}, 310, "udp"},
-{"asip-webadmin", {NULL}, 311, "tcp"},
-{"asip-webadmin", {NULL}, 311, "udp"},
-{"vslmp", {NULL}, 312, "tcp"},
-{"vslmp", {NULL}, 312, "udp"},
-{"magenta-logic", {NULL}, 313, "tcp"},
-{"magenta-logic", {NULL}, 313, "udp"},
-{"opalis-robot", {NULL}, 314, "tcp"},
-{"opalis-robot", {NULL}, 314, "udp"},
-{"dpsi", {NULL}, 315, "tcp"},
-{"dpsi", {NULL}, 315, "udp"},
-{"decauth", {NULL}, 316, "tcp"},
-{"decauth", {NULL}, 316, "udp"},
-{"zannet", {NULL}, 317, "tcp"},
-{"zannet", {NULL}, 317, "udp"},
-{"pkix-timestamp", {NULL}, 318, "tcp"},
-{"pkix-timestamp", {NULL}, 318, "udp"},
-{"ptp-event", {NULL}, 319, "tcp"},
-{"ptp-event", {NULL}, 319, "udp"},
-{"ptp-general", {NULL}, 320, "tcp"},
-{"ptp-general", {NULL}, 320, "udp"},
-{"pip", {NULL}, 321, "tcp"},
-{"pip", {NULL}, 321, "udp"},
-{"rtsps", {NULL}, 322, "tcp"},
-{"rtsps", {NULL}, 322, "udp"},
-{"texar", {NULL}, 333, "tcp"},
-{"texar", {NULL}, 333, "udp"},
-{"pdap", {NULL}, 344, "tcp"},
-{"pdap", {NULL}, 344, "udp"},
-{"pawserv", {NULL}, 345, "tcp"},
-{"pawserv", {NULL}, 345, "udp"},
-{"zserv", {NULL}, 346, "tcp"},
-{"zserv", {NULL}, 346, "udp"},
-{"fatserv", {NULL}, 347, "tcp"},
-{"fatserv", {NULL}, 347, "udp"},
-{"csi-sgwp", {NULL}, 348, "tcp"},
-{"csi-sgwp", {NULL}, 348, "udp"},
-{"mftp", {NULL}, 349, "tcp"},
-{"mftp", {NULL}, 349, "udp"},
-{"matip-type-a", {NULL}, 350, "tcp"},
-{"matip-type-a", {NULL}, 350, "udp"},
-{"matip-type-b", {NULL}, 351, "tcp"},
-{"matip-type-b", {NULL}, 351, "udp"},
-{"bhoetty", {NULL}, 351, "tcp"},
-{"bhoetty", {NULL}, 351, "udp"},
-{"dtag-ste-sb", {NULL}, 352, "tcp"},
-{"dtag-ste-sb", {NULL}, 352, "udp"},
-{"bhoedap4", {NULL}, 352, "tcp"},
-{"bhoedap4", {NULL}, 352, "udp"},
-{"ndsauth", {NULL}, 353, "tcp"},
-{"ndsauth", {NULL}, 353, "udp"},
-{"bh611", {NULL}, 354, "tcp"},
-{"bh611", {NULL}, 354, "udp"},
-{"datex-asn", {NULL}, 355, "tcp"},
-{"datex-asn", {NULL}, 355, "udp"},
-{"cloanto-net-1", {NULL}, 356, "tcp"},
-{"cloanto-net-1", {NULL}, 356, "udp"},
-{"bhevent", {NULL}, 357, "tcp"},
-{"bhevent", {NULL}, 357, "udp"},
-{"shrinkwrap", {NULL}, 358, "tcp"},
-{"shrinkwrap", {NULL}, 358, "udp"},
-{"nsrmp", {NULL}, 359, "tcp"},
-{"nsrmp", {NULL}, 359, "udp"},
-{"scoi2odialog", {NULL}, 360, "tcp"},
-{"scoi2odialog", {NULL}, 360, "udp"},
-{"semantix", {NULL}, 361, "tcp"},
-{"semantix", {NULL}, 361, "udp"},
-{"srssend", {NULL}, 362, "tcp"},
-{"srssend", {NULL}, 362, "udp"},
-{"rsvp_tunnel", {NULL}, 363, "tcp"},
-{"rsvp_tunnel", {NULL}, 363, "udp"},
-{"aurora-cmgr", {NULL}, 364, "tcp"},
-{"aurora-cmgr", {NULL}, 364, "udp"},
-{"dtk", {NULL}, 365, "tcp"},
-{"dtk", {NULL}, 365, "udp"},
-{"odmr", {NULL}, 366, "tcp"},
-{"odmr", {NULL}, 366, "udp"},
-{"mortgageware", {NULL}, 367, "tcp"},
-{"mortgageware", {NULL}, 367, "udp"},
-{"qbikgdp", {NULL}, 368, "tcp"},
-{"qbikgdp", {NULL}, 368, "udp"},
-{"rpc2portmap", {NULL}, 369, "tcp"},
-{"rpc2portmap", {NULL}, 369, "udp"},
-{"codaauth2", {NULL}, 370, "tcp"},
-{"codaauth2", {NULL}, 370, "udp"},
-{"clearcase", {NULL}, 371, "tcp"},
-{"clearcase", {NULL}, 371, "udp"},
-{"ulistproc", {NULL}, 372, "tcp"},
-{"ulistproc", {NULL}, 372, "udp"},
-{"legent-1", {NULL}, 373, "tcp"},
-{"legent-1", {NULL}, 373, "udp"},
-{"legent-2", {NULL}, 374, "tcp"},
-{"legent-2", {NULL}, 374, "udp"},
-{"hassle", {NULL}, 375, "tcp"},
-{"hassle", {NULL}, 375, "udp"},
-{"nip", {NULL}, 376, "tcp"},
-{"nip", {NULL}, 376, "udp"},
-{"tnETOS", {NULL}, 377, "tcp"},
-{"tnETOS", {NULL}, 377, "udp"},
-{"dsETOS", {NULL}, 378, "tcp"},
-{"dsETOS", {NULL}, 378, "udp"},
-{"is99c", {NULL}, 379, "tcp"},
-{"is99c", {NULL}, 379, "udp"},
-{"is99s", {NULL}, 380, "tcp"},
-{"is99s", {NULL}, 380, "udp"},
-{"hp-collector", {NULL}, 381, "tcp"},
-{"hp-collector", {NULL}, 381, "udp"},
-{"hp-managed-node", {NULL}, 382, "tcp"},
-{"hp-managed-node", {NULL}, 382, "udp"},
-{"hp-alarm-mgr", {NULL}, 383, "tcp"},
-{"hp-alarm-mgr", {NULL}, 383, "udp"},
-{"arns", {NULL}, 384, "tcp"},
-{"arns", {NULL}, 384, "udp"},
-{"ibm-app", {NULL}, 385, "tcp"},
-{"ibm-app", {NULL}, 385, "udp"},
-{"asa", {NULL}, 386, "tcp"},
-{"asa", {NULL}, 386, "udp"},
-{"aurp", {NULL}, 387, "tcp"},
-{"aurp", {NULL}, 387, "udp"},
-{"unidata-ldm", {NULL}, 388, "tcp"},
-{"unidata-ldm", {NULL}, 388, "udp"},
-{"ldap", {NULL}, 389, "tcp"},
-{"ldap", {NULL}, 389, "udp"},
-{"uis", {NULL}, 390, "tcp"},
-{"uis", {NULL}, 390, "udp"},
-{"synotics-relay", {NULL}, 391, "tcp"},
-{"synotics-relay", {NULL}, 391, "udp"},
-{"synotics-broker", {NULL}, 392, "tcp"},
-{"synotics-broker", {NULL}, 392, "udp"},
-{"meta5", {NULL}, 393, "tcp"},
-{"meta5", {NULL}, 393, "udp"},
-{"embl-ndt", {NULL}, 394, "tcp"},
-{"embl-ndt", {NULL}, 394, "udp"},
-{"netcp", {NULL}, 395, "tcp"},
-{"netcp", {NULL}, 395, "udp"},
-{"netware-ip", {NULL}, 396, "tcp"},
-{"netware-ip", {NULL}, 396, "udp"},
-{"mptn", {NULL}, 397, "tcp"},
-{"mptn", {NULL}, 397, "udp"},
-{"kryptolan", {NULL}, 398, "tcp"},
-{"kryptolan", {NULL}, 398, "udp"},
-{"iso-tsap-c2", {NULL}, 399, "tcp"},
-{"iso-tsap-c2", {NULL}, 399, "udp"},
-{"osb-sd", {NULL}, 400, "tcp"},
-{"osb-sd", {NULL}, 400, "udp"},
-{"ups", {NULL}, 401, "tcp"},
-{"ups", {NULL}, 401, "udp"},
-{"genie", {NULL}, 402, "tcp"},
-{"genie", {NULL}, 402, "udp"},
-{"decap", {NULL}, 403, "tcp"},
-{"decap", {NULL}, 403, "udp"},
-{"nced", {NULL}, 404, "tcp"},
-{"nced", {NULL}, 404, "udp"},
-{"ncld", {NULL}, 405, "tcp"},
-{"ncld", {NULL}, 405, "udp"},
-{"imsp", {NULL}, 406, "tcp"},
-{"imsp", {NULL}, 406, "udp"},
-{"timbuktu", {NULL}, 407, "tcp"},
-{"timbuktu", {NULL}, 407, "udp"},
-{"prm-sm", {NULL}, 408, "tcp"},
-{"prm-sm", {NULL}, 408, "udp"},
-{"prm-nm", {NULL}, 409, "tcp"},
-{"prm-nm", {NULL}, 409, "udp"},
-{"decladebug", {NULL}, 410, "tcp"},
-{"decladebug", {NULL}, 410, "udp"},
-{"rmt", {NULL}, 411, "tcp"},
-{"rmt", {NULL}, 411, "udp"},
-{"synoptics-trap", {NULL}, 412, "tcp"},
-{"synoptics-trap", {NULL}, 412, "udp"},
-{"smsp", {NULL}, 413, "tcp"},
-{"smsp", {NULL}, 413, "udp"},
-{"infoseek", {NULL}, 414, "tcp"},
-{"infoseek", {NULL}, 414, "udp"},
-{"bnet", {NULL}, 415, "tcp"},
-{"bnet", {NULL}, 415, "udp"},
-{"silverplatter", {NULL}, 416, "tcp"},
-{"silverplatter", {NULL}, 416, "udp"},
-{"onmux", {NULL}, 417, "tcp"},
-{"onmux", {NULL}, 417, "udp"},
-{"hyper-g", {NULL}, 418, "tcp"},
-{"hyper-g", {NULL}, 418, "udp"},
-{"ariel1", {NULL}, 419, "tcp"},
-{"ariel1", {NULL}, 419, "udp"},
-{"smpte", {NULL}, 420, "tcp"},
-{"smpte", {NULL}, 420, "udp"},
-{"ariel2", {NULL}, 421, "tcp"},
-{"ariel2", {NULL}, 421, "udp"},
-{"ariel3", {NULL}, 422, "tcp"},
-{"ariel3", {NULL}, 422, "udp"},
-{"opc-job-start", {NULL}, 423, "tcp"},
-{"opc-job-start", {NULL}, 423, "udp"},
-{"opc-job-track", {NULL}, 424, "tcp"},
-{"opc-job-track", {NULL}, 424, "udp"},
-{"icad-el", {NULL}, 425, "tcp"},
-{"icad-el", {NULL}, 425, "udp"},
-{"smartsdp", {NULL}, 426, "tcp"},
-{"smartsdp", {NULL}, 426, "udp"},
-{"svrloc", {NULL}, 427, "tcp"},
-{"svrloc", {NULL}, 427, "udp"},
-{"ocs_cmu", {NULL}, 428, "tcp"},
-{"ocs_cmu", {NULL}, 428, "udp"},
-{"ocs_amu", {NULL}, 429, "tcp"},
-{"ocs_amu", {NULL}, 429, "udp"},
-{"utmpsd", {NULL}, 430, "tcp"},
-{"utmpsd", {NULL}, 430, "udp"},
-{"utmpcd", {NULL}, 431, "tcp"},
-{"utmpcd", {NULL}, 431, "udp"},
-{"iasd", {NULL}, 432, "tcp"},
-{"iasd", {NULL}, 432, "udp"},
-{"nnsp", {NULL}, 433, "tcp"},
-{"nnsp", {NULL}, 433, "udp"},
-{"mobileip-agent", {NULL}, 434, "tcp"},
-{"mobileip-agent", {NULL}, 434, "udp"},
-{"mobilip-mn", {NULL}, 435, "tcp"},
-{"mobilip-mn", {NULL}, 435, "udp"},
-{"dna-cml", {NULL}, 436, "tcp"},
-{"dna-cml", {NULL}, 436, "udp"},
-{"comscm", {NULL}, 437, "tcp"},
-{"comscm", {NULL}, 437, "udp"},
-{"dsfgw", {NULL}, 438, "tcp"},
-{"dsfgw", {NULL}, 438, "udp"},
-{"dasp", {NULL}, 439, "tcp"},
-{"dasp", {NULL}, 439, "udp"},
-{"sgcp", {NULL}, 440, "tcp"},
-{"sgcp", {NULL}, 440, "udp"},
-{"decvms-sysmgt", {NULL}, 441, "tcp"},
-{"decvms-sysmgt", {NULL}, 441, "udp"},
-{"cvc_hostd", {NULL}, 442, "tcp"},
-{"cvc_hostd", {NULL}, 442, "udp"},
-{"https", {NULL}, 443, "tcp"},
-{"https", {NULL}, 443, "udp"},
-{"https", {NULL}, 443, "sctp"},
-{"snpp", {NULL}, 444, "tcp"},
-{"snpp", {NULL}, 444, "udp"},
-{"microsoft-ds", {NULL}, 445, "tcp"},
-{"microsoft-ds", {NULL}, 445, "udp"},
-{"ddm-rdb", {NULL}, 446, "tcp"},
-{"ddm-rdb", {NULL}, 446, "udp"},
-{"ddm-dfm", {NULL}, 447, "tcp"},
-{"ddm-dfm", {NULL}, 447, "udp"},
-{"ddm-ssl", {NULL}, 448, "tcp"},
-{"ddm-ssl", {NULL}, 448, "udp"},
-{"as-servermap", {NULL}, 449, "tcp"},
-{"as-servermap", {NULL}, 449, "udp"},
-{"tserver", {NULL}, 450, "tcp"},
-{"tserver", {NULL}, 450, "udp"},
-{"sfs-smp-net", {NULL}, 451, "tcp"},
-{"sfs-smp-net", {NULL}, 451, "udp"},
-{"sfs-config", {NULL}, 452, "tcp"},
-{"sfs-config", {NULL}, 452, "udp"},
-{"creativeserver", {NULL}, 453, "tcp"},
-{"creativeserver", {NULL}, 453, "udp"},
-{"contentserver", {NULL}, 454, "tcp"},
-{"contentserver", {NULL}, 454, "udp"},
-{"creativepartnr", {NULL}, 455, "tcp"},
-{"creativepartnr", {NULL}, 455, "udp"},
-{"macon-tcp", {NULL}, 456, "tcp"},
-{"macon-udp", {NULL}, 456, "udp"},
-{"scohelp", {NULL}, 457, "tcp"},
-{"scohelp", {NULL}, 457, "udp"},
-{"appleqtc", {NULL}, 458, "tcp"},
-{"appleqtc", {NULL}, 458, "udp"},
-{"ampr-rcmd", {NULL}, 459, "tcp"},
-{"ampr-rcmd", {NULL}, 459, "udp"},
-{"skronk", {NULL}, 460, "tcp"},
-{"skronk", {NULL}, 460, "udp"},
-{"datasurfsrv", {NULL}, 461, "tcp"},
-{"datasurfsrv", {NULL}, 461, "udp"},
-{"datasurfsrvsec", {NULL}, 462, "tcp"},
-{"datasurfsrvsec", {NULL}, 462, "udp"},
-{"alpes", {NULL}, 463, "tcp"},
-{"alpes", {NULL}, 463, "udp"},
-{"kpasswd", {NULL}, 464, "tcp"},
-{"kpasswd", {NULL}, 464, "udp"},
-{"urd", {NULL}, 465, "tcp"},
-{"igmpv3lite", {NULL}, 465, "udp"},
-{"digital-vrc", {NULL}, 466, "tcp"},
-{"digital-vrc", {NULL}, 466, "udp"},
-{"mylex-mapd", {NULL}, 467, "tcp"},
-{"mylex-mapd", {NULL}, 467, "udp"},
-{"photuris", {NULL}, 468, "tcp"},
-{"photuris", {NULL}, 468, "udp"},
-{"rcp", {NULL}, 469, "tcp"},
-{"rcp", {NULL}, 469, "udp"},
-{"scx-proxy", {NULL}, 470, "tcp"},
-{"scx-proxy", {NULL}, 470, "udp"},
-{"mondex", {NULL}, 471, "tcp"},
-{"mondex", {NULL}, 471, "udp"},
-{"ljk-login", {NULL}, 472, "tcp"},
-{"ljk-login", {NULL}, 472, "udp"},
-{"hybrid-pop", {NULL}, 473, "tcp"},
-{"hybrid-pop", {NULL}, 473, "udp"},
-{"tn-tl-w1", {NULL}, 474, "tcp"},
-{"tn-tl-w2", {NULL}, 474, "udp"},
-{"tcpnethaspsrv", {NULL}, 475, "tcp"},
-{"tcpnethaspsrv", {NULL}, 475, "udp"},
-{"tn-tl-fd1", {NULL}, 476, "tcp"},
-{"tn-tl-fd1", {NULL}, 476, "udp"},
-{"ss7ns", {NULL}, 477, "tcp"},
-{"ss7ns", {NULL}, 477, "udp"},
-{"spsc", {NULL}, 478, "tcp"},
-{"spsc", {NULL}, 478, "udp"},
-{"iafserver", {NULL}, 479, "tcp"},
-{"iafserver", {NULL}, 479, "udp"},
-{"iafdbase", {NULL}, 480, "tcp"},
-{"iafdbase", {NULL}, 480, "udp"},
-{"ph", {NULL}, 481, "tcp"},
-{"ph", {NULL}, 481, "udp"},
-{"bgs-nsi", {NULL}, 482, "tcp"},
-{"bgs-nsi", {NULL}, 482, "udp"},
-{"ulpnet", {NULL}, 483, "tcp"},
-{"ulpnet", {NULL}, 483, "udp"},
-{"integra-sme", {NULL}, 484, "tcp"},
-{"integra-sme", {NULL}, 484, "udp"},
-{"powerburst", {NULL}, 485, "tcp"},
-{"powerburst", {NULL}, 485, "udp"},
-{"avian", {NULL}, 486, "tcp"},
-{"avian", {NULL}, 486, "udp"},
-{"saft", {NULL}, 487, "tcp"},
-{"saft", {NULL}, 487, "udp"},
-{"gss-http", {NULL}, 488, "tcp"},
-{"gss-http", {NULL}, 488, "udp"},
-{"nest-protocol", {NULL}, 489, "tcp"},
-{"nest-protocol", {NULL}, 489, "udp"},
-{"micom-pfs", {NULL}, 490, "tcp"},
-{"micom-pfs", {NULL}, 490, "udp"},
-{"go-login", {NULL}, 491, "tcp"},
-{"go-login", {NULL}, 491, "udp"},
-{"ticf-1", {NULL}, 492, "tcp"},
-{"ticf-1", {NULL}, 492, "udp"},
-{"ticf-2", {NULL}, 493, "tcp"},
-{"ticf-2", {NULL}, 493, "udp"},
-{"pov-ray", {NULL}, 494, "tcp"},
-{"pov-ray", {NULL}, 494, "udp"},
-{"intecourier", {NULL}, 495, "tcp"},
-{"intecourier", {NULL}, 495, "udp"},
-{"pim-rp-disc", {NULL}, 496, "tcp"},
-{"pim-rp-disc", {NULL}, 496, "udp"},
-{"dantz", {NULL}, 497, "tcp"},
-{"dantz", {NULL}, 497, "udp"},
-{"siam", {NULL}, 498, "tcp"},
-{"siam", {NULL}, 498, "udp"},
-{"iso-ill", {NULL}, 499, "tcp"},
-{"iso-ill", {NULL}, 499, "udp"},
-{"isakmp", {NULL}, 500, "tcp"},
-{"isakmp", {NULL}, 500, "udp"},
-{"stmf", {NULL}, 501, "tcp"},
-{"stmf", {NULL}, 501, "udp"},
-{"asa-appl-proto", {NULL}, 502, "tcp"},
-{"asa-appl-proto", {NULL}, 502, "udp"},
-{"intrinsa", {NULL}, 503, "tcp"},
-{"intrinsa", {NULL}, 503, "udp"},
-{"citadel", {NULL}, 504, "tcp"},
-{"citadel", {NULL}, 504, "udp"},
-{"mailbox-lm", {NULL}, 505, "tcp"},
-{"mailbox-lm", {NULL}, 505, "udp"},
-{"ohimsrv", {NULL}, 506, "tcp"},
-{"ohimsrv", {NULL}, 506, "udp"},
-{"crs", {NULL}, 507, "tcp"},
-{"crs", {NULL}, 507, "udp"},
-{"xvttp", {NULL}, 508, "tcp"},
-{"xvttp", {NULL}, 508, "udp"},
-{"snare", {NULL}, 509, "tcp"},
-{"snare", {NULL}, 509, "udp"},
-{"fcp", {NULL}, 510, "tcp"},
-{"fcp", {NULL}, 510, "udp"},
-{"passgo", {NULL}, 511, "tcp"},
-{"passgo", {NULL}, 511, "udp"},
-{"exec", {NULL}, 512, "tcp"},
-{"comsat", {NULL}, 512, "udp"},
-{"biff", {NULL}, 512, "udp"},
-{"login", {NULL}, 513, "tcp"},
-{"who", {NULL}, 513, "udp"},
-{"shell", {NULL}, 514, "tcp"},
-{"syslog", {NULL}, 514, "udp"},
-{"printer", {NULL}, 515, "tcp"},
-{"printer", {NULL}, 515, "udp"},
-{"videotex", {NULL}, 516, "tcp"},
-{"videotex", {NULL}, 516, "udp"},
-{"talk", {NULL}, 517, "tcp"},
-{"talk", {NULL}, 517, "udp"},
-{"ntalk", {NULL}, 518, "tcp"},
-{"ntalk", {NULL}, 518, "udp"},
-{"utime", {NULL}, 519, "tcp"},
-{"utime", {NULL}, 519, "udp"},
-{"efs", {NULL}, 520, "tcp"},
-{"router", {NULL}, 520, "udp"},
-{"ripng", {NULL}, 521, "tcp"},
-{"ripng", {NULL}, 521, "udp"},
-{"ulp", {NULL}, 522, "tcp"},
-{"ulp", {NULL}, 522, "udp"},
-{"ibm-db2", {NULL}, 523, "tcp"},
-{"ibm-db2", {NULL}, 523, "udp"},
-{"ncp", {NULL}, 524, "tcp"},
-{"ncp", {NULL}, 524, "udp"},
-{"timed", {NULL}, 525, "tcp"},
-{"timed", {NULL}, 525, "udp"},
-{"tempo", {NULL}, 526, "tcp"},
-{"tempo", {NULL}, 526, "udp"},
-{"stx", {NULL}, 527, "tcp"},
-{"stx", {NULL}, 527, "udp"},
-{"custix", {NULL}, 528, "tcp"},
-{"custix", {NULL}, 528, "udp"},
-{"irc-serv", {NULL}, 529, "tcp"},
-{"irc-serv", {NULL}, 529, "udp"},
-{"courier", {NULL}, 530, "tcp"},
-{"courier", {NULL}, 530, "udp"},
-{"conference", {NULL}, 531, "tcp"},
-{"conference", {NULL}, 531, "udp"},
-{"netnews", {NULL}, 532, "tcp"},
-{"netnews", {NULL}, 532, "udp"},
-{"netwall", {NULL}, 533, "tcp"},
-{"netwall", {NULL}, 533, "udp"},
-{"windream", {NULL}, 534, "tcp"},
-{"windream", {NULL}, 534, "udp"},
-{"iiop", {NULL}, 535, "tcp"},
-{"iiop", {NULL}, 535, "udp"},
-{"opalis-rdv", {NULL}, 536, "tcp"},
-{"opalis-rdv", {NULL}, 536, "udp"},
-{"nmsp", {NULL}, 537, "tcp"},
-{"nmsp", {NULL}, 537, "udp"},
-{"gdomap", {NULL}, 538, "tcp"},
-{"gdomap", {NULL}, 538, "udp"},
-{"apertus-ldp", {NULL}, 539, "tcp"},
-{"apertus-ldp", {NULL}, 539, "udp"},
-{"uucp", {NULL}, 540, "tcp"},
-{"uucp", {NULL}, 540, "udp"},
-{"uucp-rlogin", {NULL}, 541, "tcp"},
-{"uucp-rlogin", {NULL}, 541, "udp"},
-{"commerce", {NULL}, 542, "tcp"},
-{"commerce", {NULL}, 542, "udp"},
-{"klogin", {NULL}, 543, "tcp"},
-{"klogin", {NULL}, 543, "udp"},
-{"kshell", {NULL}, 544, "tcp"},
-{"kshell", {NULL}, 544, "udp"},
-{"appleqtcsrvr", {NULL}, 545, "tcp"},
-{"appleqtcsrvr", {NULL}, 545, "udp"},
-{"dhcpv6-client", {NULL}, 546, "tcp"},
-{"dhcpv6-client", {NULL}, 546, "udp"},
-{"dhcpv6-server", {NULL}, 547, "tcp"},
-{"dhcpv6-server", {NULL}, 547, "udp"},
-{"afpovertcp", {NULL}, 548, "tcp"},
-{"afpovertcp", {NULL}, 548, "udp"},
-{"idfp", {NULL}, 549, "tcp"},
-{"idfp", {NULL}, 549, "udp"},
-{"new-rwho", {NULL}, 550, "tcp"},
-{"new-rwho", {NULL}, 550, "udp"},
-{"cybercash", {NULL}, 551, "tcp"},
-{"cybercash", {NULL}, 551, "udp"},
-{"devshr-nts", {NULL}, 552, "tcp"},
-{"devshr-nts", {NULL}, 552, "udp"},
-{"pirp", {NULL}, 553, "tcp"},
-{"pirp", {NULL}, 553, "udp"},
-{"rtsp", {NULL}, 554, "tcp"},
-{"rtsp", {NULL}, 554, "udp"},
-{"dsf", {NULL}, 555, "tcp"},
-{"dsf", {NULL}, 555, "udp"},
-{"remotefs", {NULL}, 556, "tcp"},
-{"remotefs", {NULL}, 556, "udp"},
-{"openvms-sysipc", {NULL}, 557, "tcp"},
-{"openvms-sysipc", {NULL}, 557, "udp"},
-{"sdnskmp", {NULL}, 558, "tcp"},
-{"sdnskmp", {NULL}, 558, "udp"},
-{"teedtap", {NULL}, 559, "tcp"},
-{"teedtap", {NULL}, 559, "udp"},
-{"rmonitor", {NULL}, 560, "tcp"},
-{"rmonitor", {NULL}, 560, "udp"},
-{"monitor", {NULL}, 561, "tcp"},
-{"monitor", {NULL}, 561, "udp"},
-{"chshell", {NULL}, 562, "tcp"},
-{"chshell", {NULL}, 562, "udp"},
-{"nntps", {NULL}, 563, "tcp"},
-{"nntps", {NULL}, 563, "udp"},
-{"9pfs", {NULL}, 564, "tcp"},
-{"9pfs", {NULL}, 564, "udp"},
-{"whoami", {NULL}, 565, "tcp"},
-{"whoami", {NULL}, 565, "udp"},
-{"streettalk", {NULL}, 566, "tcp"},
-{"streettalk", {NULL}, 566, "udp"},
-{"banyan-rpc", {NULL}, 567, "tcp"},
-{"banyan-rpc", {NULL}, 567, "udp"},
-{"ms-shuttle", {NULL}, 568, "tcp"},
-{"ms-shuttle", {NULL}, 568, "udp"},
-{"ms-rome", {NULL}, 569, "tcp"},
-{"ms-rome", {NULL}, 569, "udp"},
-{"meter", {NULL}, 570, "tcp"},
-{"meter", {NULL}, 570, "udp"},
-{"meter", {NULL}, 571, "tcp"},
-{"meter", {NULL}, 571, "udp"},
-{"sonar", {NULL}, 572, "tcp"},
-{"sonar", {NULL}, 572, "udp"},
-{"banyan-vip", {NULL}, 573, "tcp"},
-{"banyan-vip", {NULL}, 573, "udp"},
-{"ftp-agent", {NULL}, 574, "tcp"},
-{"ftp-agent", {NULL}, 574, "udp"},
-{"vemmi", {NULL}, 575, "tcp"},
-{"vemmi", {NULL}, 575, "udp"},
-{"ipcd", {NULL}, 576, "tcp"},
-{"ipcd", {NULL}, 576, "udp"},
-{"vnas", {NULL}, 577, "tcp"},
-{"vnas", {NULL}, 577, "udp"},
-{"ipdd", {NULL}, 578, "tcp"},
-{"ipdd", {NULL}, 578, "udp"},
-{"decbsrv", {NULL}, 579, "tcp"},
-{"decbsrv", {NULL}, 579, "udp"},
-{"sntp-heartbeat", {NULL}, 580, "tcp"},
-{"sntp-heartbeat", {NULL}, 580, "udp"},
-{"bdp", {NULL}, 581, "tcp"},
-{"bdp", {NULL}, 581, "udp"},
-{"scc-security", {NULL}, 582, "tcp"},
-{"scc-security", {NULL}, 582, "udp"},
-{"philips-vc", {NULL}, 583, "tcp"},
-{"philips-vc", {NULL}, 583, "udp"},
-{"keyserver", {NULL}, 584, "tcp"},
-{"keyserver", {NULL}, 584, "udp"},
-{"password-chg", {NULL}, 586, "tcp"},
-{"password-chg", {NULL}, 586, "udp"},
-{"submission", {NULL}, 587, "tcp"},
-{"submission", {NULL}, 587, "udp"},
-{"cal", {NULL}, 588, "tcp"},
-{"cal", {NULL}, 588, "udp"},
-{"eyelink", {NULL}, 589, "tcp"},
-{"eyelink", {NULL}, 589, "udp"},
-{"tns-cml", {NULL}, 590, "tcp"},
-{"tns-cml", {NULL}, 590, "udp"},
-{"http-alt", {NULL}, 591, "tcp"},
-{"http-alt", {NULL}, 591, "udp"},
-{"eudora-set", {NULL}, 592, "tcp"},
-{"eudora-set", {NULL}, 592, "udp"},
-{"http-rpc-epmap", {NULL}, 593, "tcp"},
-{"http-rpc-epmap", {NULL}, 593, "udp"},
-{"tpip", {NULL}, 594, "tcp"},
-{"tpip", {NULL}, 594, "udp"},
-{"cab-protocol", {NULL}, 595, "tcp"},
-{"cab-protocol", {NULL}, 595, "udp"},
-{"smsd", {NULL}, 596, "tcp"},
-{"smsd", {NULL}, 596, "udp"},
-{"ptcnameservice", {NULL}, 597, "tcp"},
-{"ptcnameservice", {NULL}, 597, "udp"},
-{"sco-websrvrmg3", {NULL}, 598, "tcp"},
-{"sco-websrvrmg3", {NULL}, 598, "udp"},
-{"acp", {NULL}, 599, "tcp"},
-{"acp", {NULL}, 599, "udp"},
-{"ipcserver", {NULL}, 600, "tcp"},
-{"ipcserver", {NULL}, 600, "udp"},
-{"syslog-conn", {NULL}, 601, "tcp"},
-{"syslog-conn", {NULL}, 601, "udp"},
-{"xmlrpc-beep", {NULL}, 602, "tcp"},
-{"xmlrpc-beep", {NULL}, 602, "udp"},
-{"idxp", {NULL}, 603, "tcp"},
-{"idxp", {NULL}, 603, "udp"},
-{"tunnel", {NULL}, 604, "tcp"},
-{"tunnel", {NULL}, 604, "udp"},
-{"soap-beep", {NULL}, 605, "tcp"},
-{"soap-beep", {NULL}, 605, "udp"},
-{"urm", {NULL}, 606, "tcp"},
-{"urm", {NULL}, 606, "udp"},
-{"nqs", {NULL}, 607, "tcp"},
-{"nqs", {NULL}, 607, "udp"},
-{"sift-uft", {NULL}, 608, "tcp"},
-{"sift-uft", {NULL}, 608, "udp"},
-{"npmp-trap", {NULL}, 609, "tcp"},
-{"npmp-trap", {NULL}, 609, "udp"},
-{"npmp-local", {NULL}, 610, "tcp"},
-{"npmp-local", {NULL}, 610, "udp"},
-{"npmp-gui", {NULL}, 611, "tcp"},
-{"npmp-gui", {NULL}, 611, "udp"},
-{"hmmp-ind", {NULL}, 612, "tcp"},
-{"hmmp-ind", {NULL}, 612, "udp"},
-{"hmmp-op", {NULL}, 613, "tcp"},
-{"hmmp-op", {NULL}, 613, "udp"},
-{"sshell", {NULL}, 614, "tcp"},
-{"sshell", {NULL}, 614, "udp"},
-{"sco-inetmgr", {NULL}, 615, "tcp"},
-{"sco-inetmgr", {NULL}, 615, "udp"},
-{"sco-sysmgr", {NULL}, 616, "tcp"},
-{"sco-sysmgr", {NULL}, 616, "udp"},
-{"sco-dtmgr", {NULL}, 617, "tcp"},
-{"sco-dtmgr", {NULL}, 617, "udp"},
-{"dei-icda", {NULL}, 618, "tcp"},
-{"dei-icda", {NULL}, 618, "udp"},
-{"compaq-evm", {NULL}, 619, "tcp"},
-{"compaq-evm", {NULL}, 619, "udp"},
-{"sco-websrvrmgr", {NULL}, 620, "tcp"},
-{"sco-websrvrmgr", {NULL}, 620, "udp"},
-{"escp-ip", {NULL}, 621, "tcp"},
-{"escp-ip", {NULL}, 621, "udp"},
-{"collaborator", {NULL}, 622, "tcp"},
-{"collaborator", {NULL}, 622, "udp"},
-{"oob-ws-http", {NULL}, 623, "tcp"},
-{"asf-rmcp", {NULL}, 623, "udp"},
-{"cryptoadmin", {NULL}, 624, "tcp"},
-{"cryptoadmin", {NULL}, 624, "udp"},
-{"dec_dlm", {NULL}, 625, "tcp"},
-{"dec_dlm", {NULL}, 625, "udp"},
-{"asia", {NULL}, 626, "tcp"},
-{"asia", {NULL}, 626, "udp"},
-{"passgo-tivoli", {NULL}, 627, "tcp"},
-{"passgo-tivoli", {NULL}, 627, "udp"},
-{"qmqp", {NULL}, 628, "tcp"},
-{"qmqp", {NULL}, 628, "udp"},
-{"3com-amp3", {NULL}, 629, "tcp"},
-{"3com-amp3", {NULL}, 629, "udp"},
-{"rda", {NULL}, 630, "tcp"},
-{"rda", {NULL}, 630, "udp"},
-{"ipp", {NULL}, 631, "tcp"},
-{"ipp", {NULL}, 631, "udp"},
-{"bmpp", {NULL}, 632, "tcp"},
-{"bmpp", {NULL}, 632, "udp"},
-{"servstat", {NULL}, 633, "tcp"},
-{"servstat", {NULL}, 633, "udp"},
-{"ginad", {NULL}, 634, "tcp"},
-{"ginad", {NULL}, 634, "udp"},
-{"rlzdbase", {NULL}, 635, "tcp"},
-{"rlzdbase", {NULL}, 635, "udp"},
-{"ldaps", {NULL}, 636, "tcp"},
-{"ldaps", {NULL}, 636, "udp"},
-{"lanserver", {NULL}, 637, "tcp"},
-{"lanserver", {NULL}, 637, "udp"},
-{"mcns-sec", {NULL}, 638, "tcp"},
-{"mcns-sec", {NULL}, 638, "udp"},
-{"msdp", {NULL}, 639, "tcp"},
-{"msdp", {NULL}, 639, "udp"},
-{"entrust-sps", {NULL}, 640, "tcp"},
-{"entrust-sps", {NULL}, 640, "udp"},
-{"repcmd", {NULL}, 641, "tcp"},
-{"repcmd", {NULL}, 641, "udp"},
-{"esro-emsdp", {NULL}, 642, "tcp"},
-{"esro-emsdp", {NULL}, 642, "udp"},
-{"sanity", {NULL}, 643, "tcp"},
-{"sanity", {NULL}, 643, "udp"},
-{"dwr", {NULL}, 644, "tcp"},
-{"dwr", {NULL}, 644, "udp"},
-{"pssc", {NULL}, 645, "tcp"},
-{"pssc", {NULL}, 645, "udp"},
-{"ldp", {NULL}, 646, "tcp"},
-{"ldp", {NULL}, 646, "udp"},
-{"dhcp-failover", {NULL}, 647, "tcp"},
-{"dhcp-failover", {NULL}, 647, "udp"},
-{"rrp", {NULL}, 648, "tcp"},
-{"rrp", {NULL}, 648, "udp"},
-{"cadview-3d", {NULL}, 649, "tcp"},
-{"cadview-3d", {NULL}, 649, "udp"},
-{"obex", {NULL}, 650, "tcp"},
-{"obex", {NULL}, 650, "udp"},
-{"ieee-mms", {NULL}, 651, "tcp"},
-{"ieee-mms", {NULL}, 651, "udp"},
-{"hello-port", {NULL}, 652, "tcp"},
-{"hello-port", {NULL}, 652, "udp"},
-{"repscmd", {NULL}, 653, "tcp"},
-{"repscmd", {NULL}, 653, "udp"},
-{"aodv", {NULL}, 654, "tcp"},
-{"aodv", {NULL}, 654, "udp"},
-{"tinc", {NULL}, 655, "tcp"},
-{"tinc", {NULL}, 655, "udp"},
-{"spmp", {NULL}, 656, "tcp"},
-{"spmp", {NULL}, 656, "udp"},
-{"rmc", {NULL}, 657, "tcp"},
-{"rmc", {NULL}, 657, "udp"},
-{"tenfold", {NULL}, 658, "tcp"},
-{"tenfold", {NULL}, 658, "udp"},
-{"mac-srvr-admin", {NULL}, 660, "tcp"},
-{"mac-srvr-admin", {NULL}, 660, "udp"},
-{"hap", {NULL}, 661, "tcp"},
-{"hap", {NULL}, 661, "udp"},
-{"pftp", {NULL}, 662, "tcp"},
-{"pftp", {NULL}, 662, "udp"},
-{"purenoise", {NULL}, 663, "tcp"},
-{"purenoise", {NULL}, 663, "udp"},
-{"oob-ws-https", {NULL}, 664, "tcp"},
-{"asf-secure-rmcp", {NULL}, 664, "udp"},
-{"sun-dr", {NULL}, 665, "tcp"},
-{"sun-dr", {NULL}, 665, "udp"},
-{"mdqs", {NULL}, 666, "tcp"},
-{"mdqs", {NULL}, 666, "udp"},
-{"doom", {NULL}, 666, "tcp"},
-{"doom", {NULL}, 666, "udp"},
-{"disclose", {NULL}, 667, "tcp"},
-{"disclose", {NULL}, 667, "udp"},
-{"mecomm", {NULL}, 668, "tcp"},
-{"mecomm", {NULL}, 668, "udp"},
-{"meregister", {NULL}, 669, "tcp"},
-{"meregister", {NULL}, 669, "udp"},
-{"vacdsm-sws", {NULL}, 670, "tcp"},
-{"vacdsm-sws", {NULL}, 670, "udp"},
-{"vacdsm-app", {NULL}, 671, "tcp"},
-{"vacdsm-app", {NULL}, 671, "udp"},
-{"vpps-qua", {NULL}, 672, "tcp"},
-{"vpps-qua", {NULL}, 672, "udp"},
-{"cimplex", {NULL}, 673, "tcp"},
-{"cimplex", {NULL}, 673, "udp"},
-{"acap", {NULL}, 674, "tcp"},
-{"acap", {NULL}, 674, "udp"},
-{"dctp", {NULL}, 675, "tcp"},
-{"dctp", {NULL}, 675, "udp"},
-{"vpps-via", {NULL}, 676, "tcp"},
-{"vpps-via", {NULL}, 676, "udp"},
-{"vpp", {NULL}, 677, "tcp"},
-{"vpp", {NULL}, 677, "udp"},
-{"ggf-ncp", {NULL}, 678, "tcp"},
-{"ggf-ncp", {NULL}, 678, "udp"},
-{"mrm", {NULL}, 679, "tcp"},
-{"mrm", {NULL}, 679, "udp"},
-{"entrust-aaas", {NULL}, 680, "tcp"},
-{"entrust-aaas", {NULL}, 680, "udp"},
-{"entrust-aams", {NULL}, 681, "tcp"},
-{"entrust-aams", {NULL}, 681, "udp"},
-{"xfr", {NULL}, 682, "tcp"},
-{"xfr", {NULL}, 682, "udp"},
-{"corba-iiop", {NULL}, 683, "tcp"},
-{"corba-iiop", {NULL}, 683, "udp"},
-{"corba-iiop-ssl", {NULL}, 684, "tcp"},
-{"corba-iiop-ssl", {NULL}, 684, "udp"},
-{"mdc-portmapper", {NULL}, 685, "tcp"},
-{"mdc-portmapper", {NULL}, 685, "udp"},
-{"hcp-wismar", {NULL}, 686, "tcp"},
-{"hcp-wismar", {NULL}, 686, "udp"},
-{"asipregistry", {NULL}, 687, "tcp"},
-{"asipregistry", {NULL}, 687, "udp"},
-{"realm-rusd", {NULL}, 688, "tcp"},
-{"realm-rusd", {NULL}, 688, "udp"},
-{"nmap", {NULL}, 689, "tcp"},
-{"nmap", {NULL}, 689, "udp"},
-{"vatp", {NULL}, 690, "tcp"},
-{"vatp", {NULL}, 690, "udp"},
-{"msexch-routing", {NULL}, 691, "tcp"},
-{"msexch-routing", {NULL}, 691, "udp"},
-{"hyperwave-isp", {NULL}, 692, "tcp"},
-{"hyperwave-isp", {NULL}, 692, "udp"},
-{"connendp", {NULL}, 693, "tcp"},
-{"connendp", {NULL}, 693, "udp"},
-{"ha-cluster", {NULL}, 694, "tcp"},
-{"ha-cluster", {NULL}, 694, "udp"},
-{"ieee-mms-ssl", {NULL}, 695, "tcp"},
-{"ieee-mms-ssl", {NULL}, 695, "udp"},
-{"rushd", {NULL}, 696, "tcp"},
-{"rushd", {NULL}, 696, "udp"},
-{"uuidgen", {NULL}, 697, "tcp"},
-{"uuidgen", {NULL}, 697, "udp"},
-{"olsr", {NULL}, 698, "tcp"},
-{"olsr", {NULL}, 698, "udp"},
-{"accessnetwork", {NULL}, 699, "tcp"},
-{"accessnetwork", {NULL}, 699, "udp"},
-{"epp", {NULL}, 700, "tcp"},
-{"epp", {NULL}, 700, "udp"},
-{"lmp", {NULL}, 701, "tcp"},
-{"lmp", {NULL}, 701, "udp"},
-{"iris-beep", {NULL}, 702, "tcp"},
-{"iris-beep", {NULL}, 702, "udp"},
-{"elcsd", {NULL}, 704, "tcp"},
-{"elcsd", {NULL}, 704, "udp"},
-{"agentx", {NULL}, 705, "tcp"},
-{"agentx", {NULL}, 705, "udp"},
-{"silc", {NULL}, 706, "tcp"},
-{"silc", {NULL}, 706, "udp"},
-{"borland-dsj", {NULL}, 707, "tcp"},
-{"borland-dsj", {NULL}, 707, "udp"},
-{"entrust-kmsh", {NULL}, 709, "tcp"},
-{"entrust-kmsh", {NULL}, 709, "udp"},
-{"entrust-ash", {NULL}, 710, "tcp"},
-{"entrust-ash", {NULL}, 710, "udp"},
-{"cisco-tdp", {NULL}, 711, "tcp"},
-{"cisco-tdp", {NULL}, 711, "udp"},
-{"tbrpf", {NULL}, 712, "tcp"},
-{"tbrpf", {NULL}, 712, "udp"},
-{"iris-xpc", {NULL}, 713, "tcp"},
-{"iris-xpc", {NULL}, 713, "udp"},
-{"iris-xpcs", {NULL}, 714, "tcp"},
-{"iris-xpcs", {NULL}, 714, "udp"},
-{"iris-lwz", {NULL}, 715, "tcp"},
-{"iris-lwz", {NULL}, 715, "udp"},
-{"pana", {NULL}, 716, "udp"},
-{"netviewdm1", {NULL}, 729, "tcp"},
-{"netviewdm1", {NULL}, 729, "udp"},
-{"netviewdm2", {NULL}, 730, "tcp"},
-{"netviewdm2", {NULL}, 730, "udp"},
-{"netviewdm3", {NULL}, 731, "tcp"},
-{"netviewdm3", {NULL}, 731, "udp"},
-{"netgw", {NULL}, 741, "tcp"},
-{"netgw", {NULL}, 741, "udp"},
-{"netrcs", {NULL}, 742, "tcp"},
-{"netrcs", {NULL}, 742, "udp"},
-{"flexlm", {NULL}, 744, "tcp"},
-{"flexlm", {NULL}, 744, "udp"},
-{"fujitsu-dev", {NULL}, 747, "tcp"},
-{"fujitsu-dev", {NULL}, 747, "udp"},
-{"ris-cm", {NULL}, 748, "tcp"},
-{"ris-cm", {NULL}, 748, "udp"},
-{"kerberos-adm", {NULL}, 749, "tcp"},
-{"kerberos-adm", {NULL}, 749, "udp"},
-{"rfile", {NULL}, 750, "tcp"},
-{"loadav", {NULL}, 750, "udp"},
-{"kerberos-iv", {NULL}, 750, "udp"},
-{"pump", {NULL}, 751, "tcp"},
-{"pump", {NULL}, 751, "udp"},
-{"qrh", {NULL}, 752, "tcp"},
-{"qrh", {NULL}, 752, "udp"},
-{"rrh", {NULL}, 753, "tcp"},
-{"rrh", {NULL}, 753, "udp"},
-{"tell", {NULL}, 754, "tcp"},
-{"tell", {NULL}, 754, "udp"},
-{"nlogin", {NULL}, 758, "tcp"},
-{"nlogin", {NULL}, 758, "udp"},
-{"con", {NULL}, 759, "tcp"},
-{"con", {NULL}, 759, "udp"},
-{"ns", {NULL}, 760, "tcp"},
-{"ns", {NULL}, 760, "udp"},
-{"rxe", {NULL}, 761, "tcp"},
-{"rxe", {NULL}, 761, "udp"},
-{"quotad", {NULL}, 762, "tcp"},
-{"quotad", {NULL}, 762, "udp"},
-{"cycleserv", {NULL}, 763, "tcp"},
-{"cycleserv", {NULL}, 763, "udp"},
-{"omserv", {NULL}, 764, "tcp"},
-{"omserv", {NULL}, 764, "udp"},
-{"webster", {NULL}, 765, "tcp"},
-{"webster", {NULL}, 765, "udp"},
-{"phonebook", {NULL}, 767, "tcp"},
-{"phonebook", {NULL}, 767, "udp"},
-{"vid", {NULL}, 769, "tcp"},
-{"vid", {NULL}, 769, "udp"},
-{"cadlock", {NULL}, 770, "tcp"},
-{"cadlock", {NULL}, 770, "udp"},
-{"rtip", {NULL}, 771, "tcp"},
-{"rtip", {NULL}, 771, "udp"},
-{"cycleserv2", {NULL}, 772, "tcp"},
-{"cycleserv2", {NULL}, 772, "udp"},
-{"submit", {NULL}, 773, "tcp"},
-{"notify", {NULL}, 773, "udp"},
-{"rpasswd", {NULL}, 774, "tcp"},
-{"acmaint_dbd", {NULL}, 774, "udp"},
-{"entomb", {NULL}, 775, "tcp"},
-{"acmaint_transd", {NULL}, 775, "udp"},
-{"wpages", {NULL}, 776, "tcp"},
-{"wpages", {NULL}, 776, "udp"},
-{"multiling-http", {NULL}, 777, "tcp"},
-{"multiling-http", {NULL}, 777, "udp"},
-{"wpgs", {NULL}, 780, "tcp"},
-{"wpgs", {NULL}, 780, "udp"},
-{"mdbs_daemon", {NULL}, 800, "tcp"},
-{"mdbs_daemon", {NULL}, 800, "udp"},
-{"device", {NULL}, 801, "tcp"},
-{"device", {NULL}, 801, "udp"},
-{"fcp-udp", {NULL}, 810, "tcp"},
-{"fcp-udp", {NULL}, 810, "udp"},
-{"itm-mcell-s", {NULL}, 828, "tcp"},
-{"itm-mcell-s", {NULL}, 828, "udp"},
-{"pkix-3-ca-ra", {NULL}, 829, "tcp"},
-{"pkix-3-ca-ra", {NULL}, 829, "udp"},
-{"netconf-ssh", {NULL}, 830, "tcp"},
-{"netconf-ssh", {NULL}, 830, "udp"},
-{"netconf-beep", {NULL}, 831, "tcp"},
-{"netconf-beep", {NULL}, 831, "udp"},
-{"netconfsoaphttp", {NULL}, 832, "tcp"},
-{"netconfsoaphttp", {NULL}, 832, "udp"},
-{"netconfsoapbeep", {NULL}, 833, "tcp"},
-{"netconfsoapbeep", {NULL}, 833, "udp"},
-{"dhcp-failover2", {NULL}, 847, "tcp"},
-{"dhcp-failover2", {NULL}, 847, "udp"},
-{"gdoi", {NULL}, 848, "tcp"},
-{"gdoi", {NULL}, 848, "udp"},
-{"iscsi", {NULL}, 860, "tcp"},
-{"iscsi", {NULL}, 860, "udp"},
-{"owamp-control", {NULL}, 861, "tcp"},
-{"owamp-control", {NULL}, 861, "udp"},
-{"twamp-control", {NULL}, 862, "tcp"},
-{"twamp-control", {NULL}, 862, "udp"},
-{"rsync", {NULL}, 873, "tcp"},
-{"rsync", {NULL}, 873, "udp"},
-{"iclcnet-locate", {NULL}, 886, "tcp"},
-{"iclcnet-locate", {NULL}, 886, "udp"},
-{"iclcnet_svinfo", {NULL}, 887, "tcp"},
-{"iclcnet_svinfo", {NULL}, 887, "udp"},
-{"accessbuilder", {NULL}, 888, "tcp"},
-{"accessbuilder", {NULL}, 888, "udp"},
-{"cddbp", {NULL}, 888, "tcp"},
-{"omginitialrefs", {NULL}, 900, "tcp"},
-{"omginitialrefs", {NULL}, 900, "udp"},
-{"smpnameres", {NULL}, 901, "tcp"},
-{"smpnameres", {NULL}, 901, "udp"},
-{"ideafarm-door", {NULL}, 902, "tcp"},
-{"ideafarm-door", {NULL}, 902, "udp"},
-{"ideafarm-panic", {NULL}, 903, "tcp"},
-{"ideafarm-panic", {NULL}, 903, "udp"},
-{"kink", {NULL}, 910, "tcp"},
-{"kink", {NULL}, 910, "udp"},
-{"xact-backup", {NULL}, 911, "tcp"},
-{"xact-backup", {NULL}, 911, "udp"},
-{"apex-mesh", {NULL}, 912, "tcp"},
-{"apex-mesh", {NULL}, 912, "udp"},
-{"apex-edge", {NULL}, 913, "tcp"},
-{"apex-edge", {NULL}, 913, "udp"},
-{"ftps-data", {NULL}, 989, "tcp"},
-{"ftps-data", {NULL}, 989, "udp"},
-{"ftps", {NULL}, 990, "tcp"},
-{"ftps", {NULL}, 990, "udp"},
-{"nas", {NULL}, 991, "tcp"},
-{"nas", {NULL}, 991, "udp"},
-{"telnets", {NULL}, 992, "tcp"},
-{"telnets", {NULL}, 992, "udp"},
-{"imaps", {NULL}, 993, "tcp"},
-{"imaps", {NULL}, 993, "udp"},
-{"ircs", {NULL}, 994, "tcp"},
-{"ircs", {NULL}, 994, "udp"},
-{"pop3s", {NULL}, 995, "tcp"},
-{"pop3s", {NULL}, 995, "udp"},
-{"vsinet", {NULL}, 996, "tcp"},
-{"vsinet", {NULL}, 996, "udp"},
-{"maitrd", {NULL}, 997, "tcp"},
-{"maitrd", {NULL}, 997, "udp"},
-{"busboy", {NULL}, 998, "tcp"},
-{"puparp", {NULL}, 998, "udp"},
-{"garcon", {NULL}, 999, "tcp"},
-{"applix", {NULL}, 999, "udp"},
-{"puprouter", {NULL}, 999, "tcp"},
-{"puprouter", {NULL}, 999, "udp"},
-{"cadlock2", {NULL}, 1000, "tcp"},
-{"cadlock2", {NULL}, 1000, "udp"},
-{"surf", {NULL}, 1010, "tcp"},
-{"surf", {NULL}, 1010, "udp"},
-{"exp1", {NULL}, 1021, "tcp"},
-{"exp1", {NULL}, 1021, "udp"},
-{"exp2", {NULL}, 1022, "tcp"},
-{"exp2", {NULL}, 1022, "udp"},
-#endif /* USE_IANA_WELL_KNOWN_PORTS */
-#ifdef USE_IANA_REGISTERED_PORTS
-{"blackjack", {NULL}, 1025, "tcp"},
-{"blackjack", {NULL}, 1025, "udp"},
-{"cap", {NULL}, 1026, "tcp"},
-{"cap", {NULL}, 1026, "udp"},
-{"solid-mux", {NULL}, 1029, "tcp"},
-{"solid-mux", {NULL}, 1029, "udp"},
-{"iad1", {NULL}, 1030, "tcp"},
-{"iad1", {NULL}, 1030, "udp"},
-{"iad2", {NULL}, 1031, "tcp"},
-{"iad2", {NULL}, 1031, "udp"},
-{"iad3", {NULL}, 1032, "tcp"},
-{"iad3", {NULL}, 1032, "udp"},
-{"netinfo-local", {NULL}, 1033, "tcp"},
-{"netinfo-local", {NULL}, 1033, "udp"},
-{"activesync", {NULL}, 1034, "tcp"},
-{"activesync", {NULL}, 1034, "udp"},
-{"mxxrlogin", {NULL}, 1035, "tcp"},
-{"mxxrlogin", {NULL}, 1035, "udp"},
-{"nsstp", {NULL}, 1036, "tcp"},
-{"nsstp", {NULL}, 1036, "udp"},
-{"ams", {NULL}, 1037, "tcp"},
-{"ams", {NULL}, 1037, "udp"},
-{"mtqp", {NULL}, 1038, "tcp"},
-{"mtqp", {NULL}, 1038, "udp"},
-{"sbl", {NULL}, 1039, "tcp"},
-{"sbl", {NULL}, 1039, "udp"},
-{"netarx", {NULL}, 1040, "tcp"},
-{"netarx", {NULL}, 1040, "udp"},
-{"danf-ak2", {NULL}, 1041, "tcp"},
-{"danf-ak2", {NULL}, 1041, "udp"},
-{"afrog", {NULL}, 1042, "tcp"},
-{"afrog", {NULL}, 1042, "udp"},
-{"boinc-client", {NULL}, 1043, "tcp"},
-{"boinc-client", {NULL}, 1043, "udp"},
-{"dcutility", {NULL}, 1044, "tcp"},
-{"dcutility", {NULL}, 1044, "udp"},
-{"fpitp", {NULL}, 1045, "tcp"},
-{"fpitp", {NULL}, 1045, "udp"},
-{"wfremotertm", {NULL}, 1046, "tcp"},
-{"wfremotertm", {NULL}, 1046, "udp"},
-{"neod1", {NULL}, 1047, "tcp"},
-{"neod1", {NULL}, 1047, "udp"},
-{"neod2", {NULL}, 1048, "tcp"},
-{"neod2", {NULL}, 1048, "udp"},
-{"td-postman", {NULL}, 1049, "tcp"},
-{"td-postman", {NULL}, 1049, "udp"},
-{"cma", {NULL}, 1050, "tcp"},
-{"cma", {NULL}, 1050, "udp"},
-{"optima-vnet", {NULL}, 1051, "tcp"},
-{"optima-vnet", {NULL}, 1051, "udp"},
-{"ddt", {NULL}, 1052, "tcp"},
-{"ddt", {NULL}, 1052, "udp"},
-{"remote-as", {NULL}, 1053, "tcp"},
-{"remote-as", {NULL}, 1053, "udp"},
-{"brvread", {NULL}, 1054, "tcp"},
-{"brvread", {NULL}, 1054, "udp"},
-{"ansyslmd", {NULL}, 1055, "tcp"},
-{"ansyslmd", {NULL}, 1055, "udp"},
-{"vfo", {NULL}, 1056, "tcp"},
-{"vfo", {NULL}, 1056, "udp"},
-{"startron", {NULL}, 1057, "tcp"},
-{"startron", {NULL}, 1057, "udp"},
-{"nim", {NULL}, 1058, "tcp"},
-{"nim", {NULL}, 1058, "udp"},
-{"nimreg", {NULL}, 1059, "tcp"},
-{"nimreg", {NULL}, 1059, "udp"},
-{"polestar", {NULL}, 1060, "tcp"},
-{"polestar", {NULL}, 1060, "udp"},
-{"kiosk", {NULL}, 1061, "tcp"},
-{"kiosk", {NULL}, 1061, "udp"},
-{"veracity", {NULL}, 1062, "tcp"},
-{"veracity", {NULL}, 1062, "udp"},
-{"kyoceranetdev", {NULL}, 1063, "tcp"},
-{"kyoceranetdev", {NULL}, 1063, "udp"},
-{"jstel", {NULL}, 1064, "tcp"},
-{"jstel", {NULL}, 1064, "udp"},
-{"syscomlan", {NULL}, 1065, "tcp"},
-{"syscomlan", {NULL}, 1065, "udp"},
-{"fpo-fns", {NULL}, 1066, "tcp"},
-{"fpo-fns", {NULL}, 1066, "udp"},
-{"instl_boots", {NULL}, 1067, "tcp"},
-{"instl_boots", {NULL}, 1067, "udp"},
-{"instl_bootc", {NULL}, 1068, "tcp"},
-{"instl_bootc", {NULL}, 1068, "udp"},
-{"cognex-insight", {NULL}, 1069, "tcp"},
-{"cognex-insight", {NULL}, 1069, "udp"},
-{"gmrupdateserv", {NULL}, 1070, "tcp"},
-{"gmrupdateserv", {NULL}, 1070, "udp"},
-{"bsquare-voip", {NULL}, 1071, "tcp"},
-{"bsquare-voip", {NULL}, 1071, "udp"},
-{"cardax", {NULL}, 1072, "tcp"},
-{"cardax", {NULL}, 1072, "udp"},
-{"bridgecontrol", {NULL}, 1073, "tcp"},
-{"bridgecontrol", {NULL}, 1073, "udp"},
-{"warmspotMgmt", {NULL}, 1074, "tcp"},
-{"warmspotMgmt", {NULL}, 1074, "udp"},
-{"rdrmshc", {NULL}, 1075, "tcp"},
-{"rdrmshc", {NULL}, 1075, "udp"},
-{"dab-sti-c", {NULL}, 1076, "tcp"},
-{"dab-sti-c", {NULL}, 1076, "udp"},
-{"imgames", {NULL}, 1077, "tcp"},
-{"imgames", {NULL}, 1077, "udp"},
-{"avocent-proxy", {NULL}, 1078, "tcp"},
-{"avocent-proxy", {NULL}, 1078, "udp"},
-{"asprovatalk", {NULL}, 1079, "tcp"},
-{"asprovatalk", {NULL}, 1079, "udp"},
-{"socks", {NULL}, 1080, "tcp"},
-{"socks", {NULL}, 1080, "udp"},
-{"pvuniwien", {NULL}, 1081, "tcp"},
-{"pvuniwien", {NULL}, 1081, "udp"},
-{"amt-esd-prot", {NULL}, 1082, "tcp"},
-{"amt-esd-prot", {NULL}, 1082, "udp"},
-{"ansoft-lm-1", {NULL}, 1083, "tcp"},
-{"ansoft-lm-1", {NULL}, 1083, "udp"},
-{"ansoft-lm-2", {NULL}, 1084, "tcp"},
-{"ansoft-lm-2", {NULL}, 1084, "udp"},
-{"webobjects", {NULL}, 1085, "tcp"},
-{"webobjects", {NULL}, 1085, "udp"},
-{"cplscrambler-lg", {NULL}, 1086, "tcp"},
-{"cplscrambler-lg", {NULL}, 1086, "udp"},
-{"cplscrambler-in", {NULL}, 1087, "tcp"},
-{"cplscrambler-in", {NULL}, 1087, "udp"},
-{"cplscrambler-al", {NULL}, 1088, "tcp"},
-{"cplscrambler-al", {NULL}, 1088, "udp"},
-{"ff-annunc", {NULL}, 1089, "tcp"},
-{"ff-annunc", {NULL}, 1089, "udp"},
-{"ff-fms", {NULL}, 1090, "tcp"},
-{"ff-fms", {NULL}, 1090, "udp"},
-{"ff-sm", {NULL}, 1091, "tcp"},
-{"ff-sm", {NULL}, 1091, "udp"},
-{"obrpd", {NULL}, 1092, "tcp"},
-{"obrpd", {NULL}, 1092, "udp"},
-{"proofd", {NULL}, 1093, "tcp"},
-{"proofd", {NULL}, 1093, "udp"},
-{"rootd", {NULL}, 1094, "tcp"},
-{"rootd", {NULL}, 1094, "udp"},
-{"nicelink", {NULL}, 1095, "tcp"},
-{"nicelink", {NULL}, 1095, "udp"},
-{"cnrprotocol", {NULL}, 1096, "tcp"},
-{"cnrprotocol", {NULL}, 1096, "udp"},
-{"sunclustermgr", {NULL}, 1097, "tcp"},
-{"sunclustermgr", {NULL}, 1097, "udp"},
-{"rmiactivation", {NULL}, 1098, "tcp"},
-{"rmiactivation", {NULL}, 1098, "udp"},
-{"rmiregistry", {NULL}, 1099, "tcp"},
-{"rmiregistry", {NULL}, 1099, "udp"},
-{"mctp", {NULL}, 1100, "tcp"},
-{"mctp", {NULL}, 1100, "udp"},
-{"pt2-discover", {NULL}, 1101, "tcp"},
-{"pt2-discover", {NULL}, 1101, "udp"},
-{"adobeserver-1", {NULL}, 1102, "tcp"},
-{"adobeserver-1", {NULL}, 1102, "udp"},
-{"adobeserver-2", {NULL}, 1103, "tcp"},
-{"adobeserver-2", {NULL}, 1103, "udp"},
-{"xrl", {NULL}, 1104, "tcp"},
-{"xrl", {NULL}, 1104, "udp"},
-{"ftranhc", {NULL}, 1105, "tcp"},
-{"ftranhc", {NULL}, 1105, "udp"},
-{"isoipsigport-1", {NULL}, 1106, "tcp"},
-{"isoipsigport-1", {NULL}, 1106, "udp"},
-{"isoipsigport-2", {NULL}, 1107, "tcp"},
-{"isoipsigport-2", {NULL}, 1107, "udp"},
-{"ratio-adp", {NULL}, 1108, "tcp"},
-{"ratio-adp", {NULL}, 1108, "udp"},
-{"webadmstart", {NULL}, 1110, "tcp"},
-{"nfsd-keepalive", {NULL}, 1110, "udp"},
-{"lmsocialserver", {NULL}, 1111, "tcp"},
-{"lmsocialserver", {NULL}, 1111, "udp"},
-{"icp", {NULL}, 1112, "tcp"},
-{"icp", {NULL}, 1112, "udp"},
-{"ltp-deepspace", {NULL}, 1113, "tcp"},
-{"ltp-deepspace", {NULL}, 1113, "udp"},
-{"mini-sql", {NULL}, 1114, "tcp"},
-{"mini-sql", {NULL}, 1114, "udp"},
-{"ardus-trns", {NULL}, 1115, "tcp"},
-{"ardus-trns", {NULL}, 1115, "udp"},
-{"ardus-cntl", {NULL}, 1116, "tcp"},
-{"ardus-cntl", {NULL}, 1116, "udp"},
-{"ardus-mtrns", {NULL}, 1117, "tcp"},
-{"ardus-mtrns", {NULL}, 1117, "udp"},
-{"sacred", {NULL}, 1118, "tcp"},
-{"sacred", {NULL}, 1118, "udp"},
-{"bnetgame", {NULL}, 1119, "tcp"},
-{"bnetgame", {NULL}, 1119, "udp"},
-{"bnetfile", {NULL}, 1120, "tcp"},
-{"bnetfile", {NULL}, 1120, "udp"},
-{"rmpp", {NULL}, 1121, "tcp"},
-{"rmpp", {NULL}, 1121, "udp"},
-{"availant-mgr", {NULL}, 1122, "tcp"},
-{"availant-mgr", {NULL}, 1122, "udp"},
-{"murray", {NULL}, 1123, "tcp"},
-{"murray", {NULL}, 1123, "udp"},
-{"hpvmmcontrol", {NULL}, 1124, "tcp"},
-{"hpvmmcontrol", {NULL}, 1124, "udp"},
-{"hpvmmagent", {NULL}, 1125, "tcp"},
-{"hpvmmagent", {NULL}, 1125, "udp"},
-{"hpvmmdata", {NULL}, 1126, "tcp"},
-{"hpvmmdata", {NULL}, 1126, "udp"},
-{"kwdb-commn", {NULL}, 1127, "tcp"},
-{"kwdb-commn", {NULL}, 1127, "udp"},
-{"saphostctrl", {NULL}, 1128, "tcp"},
-{"saphostctrl", {NULL}, 1128, "udp"},
-{"saphostctrls", {NULL}, 1129, "tcp"},
-{"saphostctrls", {NULL}, 1129, "udp"},
-{"casp", {NULL}, 1130, "tcp"},
-{"casp", {NULL}, 1130, "udp"},
-{"caspssl", {NULL}, 1131, "tcp"},
-{"caspssl", {NULL}, 1131, "udp"},
-{"kvm-via-ip", {NULL}, 1132, "tcp"},
-{"kvm-via-ip", {NULL}, 1132, "udp"},
-{"dfn", {NULL}, 1133, "tcp"},
-{"dfn", {NULL}, 1133, "udp"},
-{"aplx", {NULL}, 1134, "tcp"},
-{"aplx", {NULL}, 1134, "udp"},
-{"omnivision", {NULL}, 1135, "tcp"},
-{"omnivision", {NULL}, 1135, "udp"},
-{"hhb-gateway", {NULL}, 1136, "tcp"},
-{"hhb-gateway", {NULL}, 1136, "udp"},
-{"trim", {NULL}, 1137, "tcp"},
-{"trim", {NULL}, 1137, "udp"},
-{"encrypted_admin", {NULL}, 1138, "tcp"},
-{"encrypted_admin", {NULL}, 1138, "udp"},
-{"evm", {NULL}, 1139, "tcp"},
-{"evm", {NULL}, 1139, "udp"},
-{"autonoc", {NULL}, 1140, "tcp"},
-{"autonoc", {NULL}, 1140, "udp"},
-{"mxomss", {NULL}, 1141, "tcp"},
-{"mxomss", {NULL}, 1141, "udp"},
-{"edtools", {NULL}, 1142, "tcp"},
-{"edtools", {NULL}, 1142, "udp"},
-{"imyx", {NULL}, 1143, "tcp"},
-{"imyx", {NULL}, 1143, "udp"},
-{"fuscript", {NULL}, 1144, "tcp"},
-{"fuscript", {NULL}, 1144, "udp"},
-{"x9-icue", {NULL}, 1145, "tcp"},
-{"x9-icue", {NULL}, 1145, "udp"},
-{"audit-transfer", {NULL}, 1146, "tcp"},
-{"audit-transfer", {NULL}, 1146, "udp"},
-{"capioverlan", {NULL}, 1147, "tcp"},
-{"capioverlan", {NULL}, 1147, "udp"},
-{"elfiq-repl", {NULL}, 1148, "tcp"},
-{"elfiq-repl", {NULL}, 1148, "udp"},
-{"bvtsonar", {NULL}, 1149, "tcp"},
-{"bvtsonar", {NULL}, 1149, "udp"},
-{"blaze", {NULL}, 1150, "tcp"},
-{"blaze", {NULL}, 1150, "udp"},
-{"unizensus", {NULL}, 1151, "tcp"},
-{"unizensus", {NULL}, 1151, "udp"},
-{"winpoplanmess", {NULL}, 1152, "tcp"},
-{"winpoplanmess", {NULL}, 1152, "udp"},
-{"c1222-acse", {NULL}, 1153, "tcp"},
-{"c1222-acse", {NULL}, 1153, "udp"},
-{"resacommunity", {NULL}, 1154, "tcp"},
-{"resacommunity", {NULL}, 1154, "udp"},
-{"nfa", {NULL}, 1155, "tcp"},
-{"nfa", {NULL}, 1155, "udp"},
-{"iascontrol-oms", {NULL}, 1156, "tcp"},
-{"iascontrol-oms", {NULL}, 1156, "udp"},
-{"iascontrol", {NULL}, 1157, "tcp"},
-{"iascontrol", {NULL}, 1157, "udp"},
-{"dbcontrol-oms", {NULL}, 1158, "tcp"},
-{"dbcontrol-oms", {NULL}, 1158, "udp"},
-{"oracle-oms", {NULL}, 1159, "tcp"},
-{"oracle-oms", {NULL}, 1159, "udp"},
-{"olsv", {NULL}, 1160, "tcp"},
-{"olsv", {NULL}, 1160, "udp"},
-{"health-polling", {NULL}, 1161, "tcp"},
-{"health-polling", {NULL}, 1161, "udp"},
-{"health-trap", {NULL}, 1162, "tcp"},
-{"health-trap", {NULL}, 1162, "udp"},
-{"sddp", {NULL}, 1163, "tcp"},
-{"sddp", {NULL}, 1163, "udp"},
-{"qsm-proxy", {NULL}, 1164, "tcp"},
-{"qsm-proxy", {NULL}, 1164, "udp"},
-{"qsm-gui", {NULL}, 1165, "tcp"},
-{"qsm-gui", {NULL}, 1165, "udp"},
-{"qsm-remote", {NULL}, 1166, "tcp"},
-{"qsm-remote", {NULL}, 1166, "udp"},
-{"cisco-ipsla", {NULL}, 1167, "tcp"},
-{"cisco-ipsla", {NULL}, 1167, "udp"},
-{"cisco-ipsla", {NULL}, 1167, "sctp"},
-{"vchat", {NULL}, 1168, "tcp"},
-{"vchat", {NULL}, 1168, "udp"},
-{"tripwire", {NULL}, 1169, "tcp"},
-{"tripwire", {NULL}, 1169, "udp"},
-{"atc-lm", {NULL}, 1170, "tcp"},
-{"atc-lm", {NULL}, 1170, "udp"},
-{"atc-appserver", {NULL}, 1171, "tcp"},
-{"atc-appserver", {NULL}, 1171, "udp"},
-{"dnap", {NULL}, 1172, "tcp"},
-{"dnap", {NULL}, 1172, "udp"},
-{"d-cinema-rrp", {NULL}, 1173, "tcp"},
-{"d-cinema-rrp", {NULL}, 1173, "udp"},
-{"fnet-remote-ui", {NULL}, 1174, "tcp"},
-{"fnet-remote-ui", {NULL}, 1174, "udp"},
-{"dossier", {NULL}, 1175, "tcp"},
-{"dossier", {NULL}, 1175, "udp"},
-{"indigo-server", {NULL}, 1176, "tcp"},
-{"indigo-server", {NULL}, 1176, "udp"},
-{"dkmessenger", {NULL}, 1177, "tcp"},
-{"dkmessenger", {NULL}, 1177, "udp"},
-{"sgi-storman", {NULL}, 1178, "tcp"},
-{"sgi-storman", {NULL}, 1178, "udp"},
-{"b2n", {NULL}, 1179, "tcp"},
-{"b2n", {NULL}, 1179, "udp"},
-{"mc-client", {NULL}, 1180, "tcp"},
-{"mc-client", {NULL}, 1180, "udp"},
-{"3comnetman", {NULL}, 1181, "tcp"},
-{"3comnetman", {NULL}, 1181, "udp"},
-{"accelenet", {NULL}, 1182, "tcp"},
-{"accelenet-data", {NULL}, 1182, "udp"},
-{"llsurfup-http", {NULL}, 1183, "tcp"},
-{"llsurfup-http", {NULL}, 1183, "udp"},
-{"llsurfup-https", {NULL}, 1184, "tcp"},
-{"llsurfup-https", {NULL}, 1184, "udp"},
-{"catchpole", {NULL}, 1185, "tcp"},
-{"catchpole", {NULL}, 1185, "udp"},
-{"mysql-cluster", {NULL}, 1186, "tcp"},
-{"mysql-cluster", {NULL}, 1186, "udp"},
-{"alias", {NULL}, 1187, "tcp"},
-{"alias", {NULL}, 1187, "udp"},
-{"hp-webadmin", {NULL}, 1188, "tcp"},
-{"hp-webadmin", {NULL}, 1188, "udp"},
-{"unet", {NULL}, 1189, "tcp"},
-{"unet", {NULL}, 1189, "udp"},
-{"commlinx-avl", {NULL}, 1190, "tcp"},
-{"commlinx-avl", {NULL}, 1190, "udp"},
-{"gpfs", {NULL}, 1191, "tcp"},
-{"gpfs", {NULL}, 1191, "udp"},
-{"caids-sensor", {NULL}, 1192, "tcp"},
-{"caids-sensor", {NULL}, 1192, "udp"},
-{"fiveacross", {NULL}, 1193, "tcp"},
-{"fiveacross", {NULL}, 1193, "udp"},
-{"openvpn", {NULL}, 1194, "tcp"},
-{"openvpn", {NULL}, 1194, "udp"},
-{"rsf-1", {NULL}, 1195, "tcp"},
-{"rsf-1", {NULL}, 1195, "udp"},
-{"netmagic", {NULL}, 1196, "tcp"},
-{"netmagic", {NULL}, 1196, "udp"},
-{"carrius-rshell", {NULL}, 1197, "tcp"},
-{"carrius-rshell", {NULL}, 1197, "udp"},
-{"cajo-discovery", {NULL}, 1198, "tcp"},
-{"cajo-discovery", {NULL}, 1198, "udp"},
-{"dmidi", {NULL}, 1199, "tcp"},
-{"dmidi", {NULL}, 1199, "udp"},
-{"scol", {NULL}, 1200, "tcp"},
-{"scol", {NULL}, 1200, "udp"},
-{"nucleus-sand", {NULL}, 1201, "tcp"},
-{"nucleus-sand", {NULL}, 1201, "udp"},
-{"caiccipc", {NULL}, 1202, "tcp"},
-{"caiccipc", {NULL}, 1202, "udp"},
-{"ssslic-mgr", {NULL}, 1203, "tcp"},
-{"ssslic-mgr", {NULL}, 1203, "udp"},
-{"ssslog-mgr", {NULL}, 1204, "tcp"},
-{"ssslog-mgr", {NULL}, 1204, "udp"},
-{"accord-mgc", {NULL}, 1205, "tcp"},
-{"accord-mgc", {NULL}, 1205, "udp"},
-{"anthony-data", {NULL}, 1206, "tcp"},
-{"anthony-data", {NULL}, 1206, "udp"},
-{"metasage", {NULL}, 1207, "tcp"},
-{"metasage", {NULL}, 1207, "udp"},
-{"seagull-ais", {NULL}, 1208, "tcp"},
-{"seagull-ais", {NULL}, 1208, "udp"},
-{"ipcd3", {NULL}, 1209, "tcp"},
-{"ipcd3", {NULL}, 1209, "udp"},
-{"eoss", {NULL}, 1210, "tcp"},
-{"eoss", {NULL}, 1210, "udp"},
-{"groove-dpp", {NULL}, 1211, "tcp"},
-{"groove-dpp", {NULL}, 1211, "udp"},
-{"lupa", {NULL}, 1212, "tcp"},
-{"lupa", {NULL}, 1212, "udp"},
-{"mpc-lifenet", {NULL}, 1213, "tcp"},
-{"mpc-lifenet", {NULL}, 1213, "udp"},
-{"kazaa", {NULL}, 1214, "tcp"},
-{"kazaa", {NULL}, 1214, "udp"},
-{"scanstat-1", {NULL}, 1215, "tcp"},
-{"scanstat-1", {NULL}, 1215, "udp"},
-{"etebac5", {NULL}, 1216, "tcp"},
-{"etebac5", {NULL}, 1216, "udp"},
-{"hpss-ndapi", {NULL}, 1217, "tcp"},
-{"hpss-ndapi", {NULL}, 1217, "udp"},
-{"aeroflight-ads", {NULL}, 1218, "tcp"},
-{"aeroflight-ads", {NULL}, 1218, "udp"},
-{"aeroflight-ret", {NULL}, 1219, "tcp"},
-{"aeroflight-ret", {NULL}, 1219, "udp"},
-{"qt-serveradmin", {NULL}, 1220, "tcp"},
-{"qt-serveradmin", {NULL}, 1220, "udp"},
-{"sweetware-apps", {NULL}, 1221, "tcp"},
-{"sweetware-apps", {NULL}, 1221, "udp"},
-{"nerv", {NULL}, 1222, "tcp"},
-{"nerv", {NULL}, 1222, "udp"},
-{"tgp", {NULL}, 1223, "tcp"},
-{"tgp", {NULL}, 1223, "udp"},
-{"vpnz", {NULL}, 1224, "tcp"},
-{"vpnz", {NULL}, 1224, "udp"},
-{"slinkysearch", {NULL}, 1225, "tcp"},
-{"slinkysearch", {NULL}, 1225, "udp"},
-{"stgxfws", {NULL}, 1226, "tcp"},
-{"stgxfws", {NULL}, 1226, "udp"},
-{"dns2go", {NULL}, 1227, "tcp"},
-{"dns2go", {NULL}, 1227, "udp"},
-{"florence", {NULL}, 1228, "tcp"},
-{"florence", {NULL}, 1228, "udp"},
-{"zented", {NULL}, 1229, "tcp"},
-{"zented", {NULL}, 1229, "udp"},
-{"periscope", {NULL}, 1230, "tcp"},
-{"periscope", {NULL}, 1230, "udp"},
-{"menandmice-lpm", {NULL}, 1231, "tcp"},
-{"menandmice-lpm", {NULL}, 1231, "udp"},
-{"univ-appserver", {NULL}, 1233, "tcp"},
-{"univ-appserver", {NULL}, 1233, "udp"},
-{"search-agent", {NULL}, 1234, "tcp"},
-{"search-agent", {NULL}, 1234, "udp"},
-{"mosaicsyssvc1", {NULL}, 1235, "tcp"},
-{"mosaicsyssvc1", {NULL}, 1235, "udp"},
-{"bvcontrol", {NULL}, 1236, "tcp"},
-{"bvcontrol", {NULL}, 1236, "udp"},
-{"tsdos390", {NULL}, 1237, "tcp"},
-{"tsdos390", {NULL}, 1237, "udp"},
-{"hacl-qs", {NULL}, 1238, "tcp"},
-{"hacl-qs", {NULL}, 1238, "udp"},
-{"nmsd", {NULL}, 1239, "tcp"},
-{"nmsd", {NULL}, 1239, "udp"},
-{"instantia", {NULL}, 1240, "tcp"},
-{"instantia", {NULL}, 1240, "udp"},
-{"nessus", {NULL}, 1241, "tcp"},
-{"nessus", {NULL}, 1241, "udp"},
-{"nmasoverip", {NULL}, 1242, "tcp"},
-{"nmasoverip", {NULL}, 1242, "udp"},
-{"serialgateway", {NULL}, 1243, "tcp"},
-{"serialgateway", {NULL}, 1243, "udp"},
-{"isbconference1", {NULL}, 1244, "tcp"},
-{"isbconference1", {NULL}, 1244, "udp"},
-{"isbconference2", {NULL}, 1245, "tcp"},
-{"isbconference2", {NULL}, 1245, "udp"},
-{"payrouter", {NULL}, 1246, "tcp"},
-{"payrouter", {NULL}, 1246, "udp"},
-{"visionpyramid", {NULL}, 1247, "tcp"},
-{"visionpyramid", {NULL}, 1247, "udp"},
-{"hermes", {NULL}, 1248, "tcp"},
-{"hermes", {NULL}, 1248, "udp"},
-{"mesavistaco", {NULL}, 1249, "tcp"},
-{"mesavistaco", {NULL}, 1249, "udp"},
-{"swldy-sias", {NULL}, 1250, "tcp"},
-{"swldy-sias", {NULL}, 1250, "udp"},
-{"servergraph", {NULL}, 1251, "tcp"},
-{"servergraph", {NULL}, 1251, "udp"},
-{"bspne-pcc", {NULL}, 1252, "tcp"},
-{"bspne-pcc", {NULL}, 1252, "udp"},
-{"q55-pcc", {NULL}, 1253, "tcp"},
-{"q55-pcc", {NULL}, 1253, "udp"},
-{"de-noc", {NULL}, 1254, "tcp"},
-{"de-noc", {NULL}, 1254, "udp"},
-{"de-cache-query", {NULL}, 1255, "tcp"},
-{"de-cache-query", {NULL}, 1255, "udp"},
-{"de-server", {NULL}, 1256, "tcp"},
-{"de-server", {NULL}, 1256, "udp"},
-{"shockwave2", {NULL}, 1257, "tcp"},
-{"shockwave2", {NULL}, 1257, "udp"},
-{"opennl", {NULL}, 1258, "tcp"},
-{"opennl", {NULL}, 1258, "udp"},
-{"opennl-voice", {NULL}, 1259, "tcp"},
-{"opennl-voice", {NULL}, 1259, "udp"},
-{"ibm-ssd", {NULL}, 1260, "tcp"},
-{"ibm-ssd", {NULL}, 1260, "udp"},
-{"mpshrsv", {NULL}, 1261, "tcp"},
-{"mpshrsv", {NULL}, 1261, "udp"},
-{"qnts-orb", {NULL}, 1262, "tcp"},
-{"qnts-orb", {NULL}, 1262, "udp"},
-{"dka", {NULL}, 1263, "tcp"},
-{"dka", {NULL}, 1263, "udp"},
-{"prat", {NULL}, 1264, "tcp"},
-{"prat", {NULL}, 1264, "udp"},
-{"dssiapi", {NULL}, 1265, "tcp"},
-{"dssiapi", {NULL}, 1265, "udp"},
-{"dellpwrappks", {NULL}, 1266, "tcp"},
-{"dellpwrappks", {NULL}, 1266, "udp"},
-{"epc", {NULL}, 1267, "tcp"},
-{"epc", {NULL}, 1267, "udp"},
-{"propel-msgsys", {NULL}, 1268, "tcp"},
-{"propel-msgsys", {NULL}, 1268, "udp"},
-{"watilapp", {NULL}, 1269, "tcp"},
-{"watilapp", {NULL}, 1269, "udp"},
-{"opsmgr", {NULL}, 1270, "tcp"},
-{"opsmgr", {NULL}, 1270, "udp"},
-{"excw", {NULL}, 1271, "tcp"},
-{"excw", {NULL}, 1271, "udp"},
-{"cspmlockmgr", {NULL}, 1272, "tcp"},
-{"cspmlockmgr", {NULL}, 1272, "udp"},
-{"emc-gateway", {NULL}, 1273, "tcp"},
-{"emc-gateway", {NULL}, 1273, "udp"},
-{"t1distproc", {NULL}, 1274, "tcp"},
-{"t1distproc", {NULL}, 1274, "udp"},
-{"ivcollector", {NULL}, 1275, "tcp"},
-{"ivcollector", {NULL}, 1275, "udp"},
-{"ivmanager", {NULL}, 1276, "tcp"},
-{"ivmanager", {NULL}, 1276, "udp"},
-{"miva-mqs", {NULL}, 1277, "tcp"},
-{"miva-mqs", {NULL}, 1277, "udp"},
-{"dellwebadmin-1", {NULL}, 1278, "tcp"},
-{"dellwebadmin-1", {NULL}, 1278, "udp"},
-{"dellwebadmin-2", {NULL}, 1279, "tcp"},
-{"dellwebadmin-2", {NULL}, 1279, "udp"},
-{"pictrography", {NULL}, 1280, "tcp"},
-{"pictrography", {NULL}, 1280, "udp"},
-{"healthd", {NULL}, 1281, "tcp"},
-{"healthd", {NULL}, 1281, "udp"},
-{"emperion", {NULL}, 1282, "tcp"},
-{"emperion", {NULL}, 1282, "udp"},
-{"productinfo", {NULL}, 1283, "tcp"},
-{"productinfo", {NULL}, 1283, "udp"},
-{"iee-qfx", {NULL}, 1284, "tcp"},
-{"iee-qfx", {NULL}, 1284, "udp"},
-{"neoiface", {NULL}, 1285, "tcp"},
-{"neoiface", {NULL}, 1285, "udp"},
-{"netuitive", {NULL}, 1286, "tcp"},
-{"netuitive", {NULL}, 1286, "udp"},
-{"routematch", {NULL}, 1287, "tcp"},
-{"routematch", {NULL}, 1287, "udp"},
-{"navbuddy", {NULL}, 1288, "tcp"},
-{"navbuddy", {NULL}, 1288, "udp"},
-{"jwalkserver", {NULL}, 1289, "tcp"},
-{"jwalkserver", {NULL}, 1289, "udp"},
-{"winjaserver", {NULL}, 1290, "tcp"},
-{"winjaserver", {NULL}, 1290, "udp"},
-{"seagulllms", {NULL}, 1291, "tcp"},
-{"seagulllms", {NULL}, 1291, "udp"},
-{"dsdn", {NULL}, 1292, "tcp"},
-{"dsdn", {NULL}, 1292, "udp"},
-{"pkt-krb-ipsec", {NULL}, 1293, "tcp"},
-{"pkt-krb-ipsec", {NULL}, 1293, "udp"},
-{"cmmdriver", {NULL}, 1294, "tcp"},
-{"cmmdriver", {NULL}, 1294, "udp"},
-{"ehtp", {NULL}, 1295, "tcp"},
-{"ehtp", {NULL}, 1295, "udp"},
-{"dproxy", {NULL}, 1296, "tcp"},
-{"dproxy", {NULL}, 1296, "udp"},
-{"sdproxy", {NULL}, 1297, "tcp"},
-{"sdproxy", {NULL}, 1297, "udp"},
-{"lpcp", {NULL}, 1298, "tcp"},
-{"lpcp", {NULL}, 1298, "udp"},
-{"hp-sci", {NULL}, 1299, "tcp"},
-{"hp-sci", {NULL}, 1299, "udp"},
-{"h323hostcallsc", {NULL}, 1300, "tcp"},
-{"h323hostcallsc", {NULL}, 1300, "udp"},
-{"ci3-software-1", {NULL}, 1301, "tcp"},
-{"ci3-software-1", {NULL}, 1301, "udp"},
-{"ci3-software-2", {NULL}, 1302, "tcp"},
-{"ci3-software-2", {NULL}, 1302, "udp"},
-{"sftsrv", {NULL}, 1303, "tcp"},
-{"sftsrv", {NULL}, 1303, "udp"},
-{"boomerang", {NULL}, 1304, "tcp"},
-{"boomerang", {NULL}, 1304, "udp"},
-{"pe-mike", {NULL}, 1305, "tcp"},
-{"pe-mike", {NULL}, 1305, "udp"},
-{"re-conn-proto", {NULL}, 1306, "tcp"},
-{"re-conn-proto", {NULL}, 1306, "udp"},
-{"pacmand", {NULL}, 1307, "tcp"},
-{"pacmand", {NULL}, 1307, "udp"},
-{"odsi", {NULL}, 1308, "tcp"},
-{"odsi", {NULL}, 1308, "udp"},
-{"jtag-server", {NULL}, 1309, "tcp"},
-{"jtag-server", {NULL}, 1309, "udp"},
-{"husky", {NULL}, 1310, "tcp"},
-{"husky", {NULL}, 1310, "udp"},
-{"rxmon", {NULL}, 1311, "tcp"},
-{"rxmon", {NULL}, 1311, "udp"},
-{"sti-envision", {NULL}, 1312, "tcp"},
-{"sti-envision", {NULL}, 1312, "udp"},
-{"bmc_patroldb", {NULL}, 1313, "tcp"},
-{"bmc_patroldb", {NULL}, 1313, "udp"},
-{"pdps", {NULL}, 1314, "tcp"},
-{"pdps", {NULL}, 1314, "udp"},
-{"els", {NULL}, 1315, "tcp"},
-{"els", {NULL}, 1315, "udp"},
-{"exbit-escp", {NULL}, 1316, "tcp"},
-{"exbit-escp", {NULL}, 1316, "udp"},
-{"vrts-ipcserver", {NULL}, 1317, "tcp"},
-{"vrts-ipcserver", {NULL}, 1317, "udp"},
-{"krb5gatekeeper", {NULL}, 1318, "tcp"},
-{"krb5gatekeeper", {NULL}, 1318, "udp"},
-{"amx-icsp", {NULL}, 1319, "tcp"},
-{"amx-icsp", {NULL}, 1319, "udp"},
-{"amx-axbnet", {NULL}, 1320, "tcp"},
-{"amx-axbnet", {NULL}, 1320, "udp"},
-{"pip", {NULL}, 1321, "tcp"},
-{"pip", {NULL}, 1321, "udp"},
-{"novation", {NULL}, 1322, "tcp"},
-{"novation", {NULL}, 1322, "udp"},
-{"brcd", {NULL}, 1323, "tcp"},
-{"brcd", {NULL}, 1323, "udp"},
-{"delta-mcp", {NULL}, 1324, "tcp"},
-{"delta-mcp", {NULL}, 1324, "udp"},
-{"dx-instrument", {NULL}, 1325, "tcp"},
-{"dx-instrument", {NULL}, 1325, "udp"},
-{"wimsic", {NULL}, 1326, "tcp"},
-{"wimsic", {NULL}, 1326, "udp"},
-{"ultrex", {NULL}, 1327, "tcp"},
-{"ultrex", {NULL}, 1327, "udp"},
-{"ewall", {NULL}, 1328, "tcp"},
-{"ewall", {NULL}, 1328, "udp"},
-{"netdb-export", {NULL}, 1329, "tcp"},
-{"netdb-export", {NULL}, 1329, "udp"},
-{"streetperfect", {NULL}, 1330, "tcp"},
-{"streetperfect", {NULL}, 1330, "udp"},
-{"intersan", {NULL}, 1331, "tcp"},
-{"intersan", {NULL}, 1331, "udp"},
-{"pcia-rxp-b", {NULL}, 1332, "tcp"},
-{"pcia-rxp-b", {NULL}, 1332, "udp"},
-{"passwrd-policy", {NULL}, 1333, "tcp"},
-{"passwrd-policy", {NULL}, 1333, "udp"},
-{"writesrv", {NULL}, 1334, "tcp"},
-{"writesrv", {NULL}, 1334, "udp"},
-{"digital-notary", {NULL}, 1335, "tcp"},
-{"digital-notary", {NULL}, 1335, "udp"},
-{"ischat", {NULL}, 1336, "tcp"},
-{"ischat", {NULL}, 1336, "udp"},
-{"menandmice-dns", {NULL}, 1337, "tcp"},
-{"menandmice-dns", {NULL}, 1337, "udp"},
-{"wmc-log-svc", {NULL}, 1338, "tcp"},
-{"wmc-log-svc", {NULL}, 1338, "udp"},
-{"kjtsiteserver", {NULL}, 1339, "tcp"},
-{"kjtsiteserver", {NULL}, 1339, "udp"},
-{"naap", {NULL}, 1340, "tcp"},
-{"naap", {NULL}, 1340, "udp"},
-{"qubes", {NULL}, 1341, "tcp"},
-{"qubes", {NULL}, 1341, "udp"},
-{"esbroker", {NULL}, 1342, "tcp"},
-{"esbroker", {NULL}, 1342, "udp"},
-{"re101", {NULL}, 1343, "tcp"},
-{"re101", {NULL}, 1343, "udp"},
-{"icap", {NULL}, 1344, "tcp"},
-{"icap", {NULL}, 1344, "udp"},
-{"vpjp", {NULL}, 1345, "tcp"},
-{"vpjp", {NULL}, 1345, "udp"},
-{"alta-ana-lm", {NULL}, 1346, "tcp"},
-{"alta-ana-lm", {NULL}, 1346, "udp"},
-{"bbn-mmc", {NULL}, 1347, "tcp"},
-{"bbn-mmc", {NULL}, 1347, "udp"},
-{"bbn-mmx", {NULL}, 1348, "tcp"},
-{"bbn-mmx", {NULL}, 1348, "udp"},
-{"sbook", {NULL}, 1349, "tcp"},
-{"sbook", {NULL}, 1349, "udp"},
-{"editbench", {NULL}, 1350, "tcp"},
-{"editbench", {NULL}, 1350, "udp"},
-{"equationbuilder", {NULL}, 1351, "tcp"},
-{"equationbuilder", {NULL}, 1351, "udp"},
-{"lotusnote", {NULL}, 1352, "tcp"},
-{"lotusnote", {NULL}, 1352, "udp"},
-{"relief", {NULL}, 1353, "tcp"},
-{"relief", {NULL}, 1353, "udp"},
-{"XSIP-network", {NULL}, 1354, "tcp"},
-{"XSIP-network", {NULL}, 1354, "udp"},
-{"intuitive-edge", {NULL}, 1355, "tcp"},
-{"intuitive-edge", {NULL}, 1355, "udp"},
-{"cuillamartin", {NULL}, 1356, "tcp"},
-{"cuillamartin", {NULL}, 1356, "udp"},
-{"pegboard", {NULL}, 1357, "tcp"},
-{"pegboard", {NULL}, 1357, "udp"},
-{"connlcli", {NULL}, 1358, "tcp"},
-{"connlcli", {NULL}, 1358, "udp"},
-{"ftsrv", {NULL}, 1359, "tcp"},
-{"ftsrv", {NULL}, 1359, "udp"},
-{"mimer", {NULL}, 1360, "tcp"},
-{"mimer", {NULL}, 1360, "udp"},
-{"linx", {NULL}, 1361, "tcp"},
-{"linx", {NULL}, 1361, "udp"},
-{"timeflies", {NULL}, 1362, "tcp"},
-{"timeflies", {NULL}, 1362, "udp"},
-{"ndm-requester", {NULL}, 1363, "tcp"},
-{"ndm-requester", {NULL}, 1363, "udp"},
-{"ndm-server", {NULL}, 1364, "tcp"},
-{"ndm-server", {NULL}, 1364, "udp"},
-{"adapt-sna", {NULL}, 1365, "tcp"},
-{"adapt-sna", {NULL}, 1365, "udp"},
-{"netware-csp", {NULL}, 1366, "tcp"},
-{"netware-csp", {NULL}, 1366, "udp"},
-{"dcs", {NULL}, 1367, "tcp"},
-{"dcs", {NULL}, 1367, "udp"},
-{"screencast", {NULL}, 1368, "tcp"},
-{"screencast", {NULL}, 1368, "udp"},
-{"gv-us", {NULL}, 1369, "tcp"},
-{"gv-us", {NULL}, 1369, "udp"},
-{"us-gv", {NULL}, 1370, "tcp"},
-{"us-gv", {NULL}, 1370, "udp"},
-{"fc-cli", {NULL}, 1371, "tcp"},
-{"fc-cli", {NULL}, 1371, "udp"},
-{"fc-ser", {NULL}, 1372, "tcp"},
-{"fc-ser", {NULL}, 1372, "udp"},
-{"chromagrafx", {NULL}, 1373, "tcp"},
-{"chromagrafx", {NULL}, 1373, "udp"},
-{"molly", {NULL}, 1374, "tcp"},
-{"molly", {NULL}, 1374, "udp"},
-{"bytex", {NULL}, 1375, "tcp"},
-{"bytex", {NULL}, 1375, "udp"},
-{"ibm-pps", {NULL}, 1376, "tcp"},
-{"ibm-pps", {NULL}, 1376, "udp"},
-{"cichlid", {NULL}, 1377, "tcp"},
-{"cichlid", {NULL}, 1377, "udp"},
-{"elan", {NULL}, 1378, "tcp"},
-{"elan", {NULL}, 1378, "udp"},
-{"dbreporter", {NULL}, 1379, "tcp"},
-{"dbreporter", {NULL}, 1379, "udp"},
-{"telesis-licman", {NULL}, 1380, "tcp"},
-{"telesis-licman", {NULL}, 1380, "udp"},
-{"apple-licman", {NULL}, 1381, "tcp"},
-{"apple-licman", {NULL}, 1381, "udp"},
-{"udt_os", {NULL}, 1382, "tcp"},
-{"udt_os", {NULL}, 1382, "udp"},
-{"gwha", {NULL}, 1383, "tcp"},
-{"gwha", {NULL}, 1383, "udp"},
-{"os-licman", {NULL}, 1384, "tcp"},
-{"os-licman", {NULL}, 1384, "udp"},
-{"atex_elmd", {NULL}, 1385, "tcp"},
-{"atex_elmd", {NULL}, 1385, "udp"},
-{"checksum", {NULL}, 1386, "tcp"},
-{"checksum", {NULL}, 1386, "udp"},
-{"cadsi-lm", {NULL}, 1387, "tcp"},
-{"cadsi-lm", {NULL}, 1387, "udp"},
-{"objective-dbc", {NULL}, 1388, "tcp"},
-{"objective-dbc", {NULL}, 1388, "udp"},
-{"iclpv-dm", {NULL}, 1389, "tcp"},
-{"iclpv-dm", {NULL}, 1389, "udp"},
-{"iclpv-sc", {NULL}, 1390, "tcp"},
-{"iclpv-sc", {NULL}, 1390, "udp"},
-{"iclpv-sas", {NULL}, 1391, "tcp"},
-{"iclpv-sas", {NULL}, 1391, "udp"},
-{"iclpv-pm", {NULL}, 1392, "tcp"},
-{"iclpv-pm", {NULL}, 1392, "udp"},
-{"iclpv-nls", {NULL}, 1393, "tcp"},
-{"iclpv-nls", {NULL}, 1393, "udp"},
-{"iclpv-nlc", {NULL}, 1394, "tcp"},
-{"iclpv-nlc", {NULL}, 1394, "udp"},
-{"iclpv-wsm", {NULL}, 1395, "tcp"},
-{"iclpv-wsm", {NULL}, 1395, "udp"},
-{"dvl-activemail", {NULL}, 1396, "tcp"},
-{"dvl-activemail", {NULL}, 1396, "udp"},
-{"audio-activmail", {NULL}, 1397, "tcp"},
-{"audio-activmail", {NULL}, 1397, "udp"},
-{"video-activmail", {NULL}, 1398, "tcp"},
-{"video-activmail", {NULL}, 1398, "udp"},
-{"cadkey-licman", {NULL}, 1399, "tcp"},
-{"cadkey-licman", {NULL}, 1399, "udp"},
-{"cadkey-tablet", {NULL}, 1400, "tcp"},
-{"cadkey-tablet", {NULL}, 1400, "udp"},
-{"goldleaf-licman", {NULL}, 1401, "tcp"},
-{"goldleaf-licman", {NULL}, 1401, "udp"},
-{"prm-sm-np", {NULL}, 1402, "tcp"},
-{"prm-sm-np", {NULL}, 1402, "udp"},
-{"prm-nm-np", {NULL}, 1403, "tcp"},
-{"prm-nm-np", {NULL}, 1403, "udp"},
-{"igi-lm", {NULL}, 1404, "tcp"},
-{"igi-lm", {NULL}, 1404, "udp"},
-{"ibm-res", {NULL}, 1405, "tcp"},
-{"ibm-res", {NULL}, 1405, "udp"},
-{"netlabs-lm", {NULL}, 1406, "tcp"},
-{"netlabs-lm", {NULL}, 1406, "udp"},
-{"dbsa-lm", {NULL}, 1407, "tcp"},
-{"dbsa-lm", {NULL}, 1407, "udp"},
-{"sophia-lm", {NULL}, 1408, "tcp"},
-{"sophia-lm", {NULL}, 1408, "udp"},
-{"here-lm", {NULL}, 1409, "tcp"},
-{"here-lm", {NULL}, 1409, "udp"},
-{"hiq", {NULL}, 1410, "tcp"},
-{"hiq", {NULL}, 1410, "udp"},
-{"af", {NULL}, 1411, "tcp"},
-{"af", {NULL}, 1411, "udp"},
-{"innosys", {NULL}, 1412, "tcp"},
-{"innosys", {NULL}, 1412, "udp"},
-{"innosys-acl", {NULL}, 1413, "tcp"},
-{"innosys-acl", {NULL}, 1413, "udp"},
-{"ibm-mqseries", {NULL}, 1414, "tcp"},
-{"ibm-mqseries", {NULL}, 1414, "udp"},
-{"dbstar", {NULL}, 1415, "tcp"},
-{"dbstar", {NULL}, 1415, "udp"},
-{"novell-lu6.2", {NULL}, 1416, "tcp"},
-{"novell-lu6.2", {NULL}, 1416, "udp"},
-{"timbuktu-srv1", {NULL}, 1417, "tcp"},
-{"timbuktu-srv1", {NULL}, 1417, "udp"},
-{"timbuktu-srv2", {NULL}, 1418, "tcp"},
-{"timbuktu-srv2", {NULL}, 1418, "udp"},
-{"timbuktu-srv3", {NULL}, 1419, "tcp"},
-{"timbuktu-srv3", {NULL}, 1419, "udp"},
-{"timbuktu-srv4", {NULL}, 1420, "tcp"},
-{"timbuktu-srv4", {NULL}, 1420, "udp"},
-{"gandalf-lm", {NULL}, 1421, "tcp"},
-{"gandalf-lm", {NULL}, 1421, "udp"},
-{"autodesk-lm", {NULL}, 1422, "tcp"},
-{"autodesk-lm", {NULL}, 1422, "udp"},
-{"essbase", {NULL}, 1423, "tcp"},
-{"essbase", {NULL}, 1423, "udp"},
-{"hybrid", {NULL}, 1424, "tcp"},
-{"hybrid", {NULL}, 1424, "udp"},
-{"zion-lm", {NULL}, 1425, "tcp"},
-{"zion-lm", {NULL}, 1425, "udp"},
-{"sais", {NULL}, 1426, "tcp"},
-{"sais", {NULL}, 1426, "udp"},
-{"mloadd", {NULL}, 1427, "tcp"},
-{"mloadd", {NULL}, 1427, "udp"},
-{"informatik-lm", {NULL}, 1428, "tcp"},
-{"informatik-lm", {NULL}, 1428, "udp"},
-{"nms", {NULL}, 1429, "tcp"},
-{"nms", {NULL}, 1429, "udp"},
-{"tpdu", {NULL}, 1430, "tcp"},
-{"tpdu", {NULL}, 1430, "udp"},
-{"rgtp", {NULL}, 1431, "tcp"},
-{"rgtp", {NULL}, 1431, "udp"},
-{"blueberry-lm", {NULL}, 1432, "tcp"},
-{"blueberry-lm", {NULL}, 1432, "udp"},
-{"ms-sql-s", {NULL}, 1433, "tcp"},
-{"ms-sql-s", {NULL}, 1433, "udp"},
-{"ms-sql-m", {NULL}, 1434, "tcp"},
-{"ms-sql-m", {NULL}, 1434, "udp"},
-{"ibm-cics", {NULL}, 1435, "tcp"},
-{"ibm-cics", {NULL}, 1435, "udp"},
-{"saism", {NULL}, 1436, "tcp"},
-{"saism", {NULL}, 1436, "udp"},
-{"tabula", {NULL}, 1437, "tcp"},
-{"tabula", {NULL}, 1437, "udp"},
-{"eicon-server", {NULL}, 1438, "tcp"},
-{"eicon-server", {NULL}, 1438, "udp"},
-{"eicon-x25", {NULL}, 1439, "tcp"},
-{"eicon-x25", {NULL}, 1439, "udp"},
-{"eicon-slp", {NULL}, 1440, "tcp"},
-{"eicon-slp", {NULL}, 1440, "udp"},
-{"cadis-1", {NULL}, 1441, "tcp"},
-{"cadis-1", {NULL}, 1441, "udp"},
-{"cadis-2", {NULL}, 1442, "tcp"},
-{"cadis-2", {NULL}, 1442, "udp"},
-{"ies-lm", {NULL}, 1443, "tcp"},
-{"ies-lm", {NULL}, 1443, "udp"},
-{"marcam-lm", {NULL}, 1444, "tcp"},
-{"marcam-lm", {NULL}, 1444, "udp"},
-{"proxima-lm", {NULL}, 1445, "tcp"},
-{"proxima-lm", {NULL}, 1445, "udp"},
-{"ora-lm", {NULL}, 1446, "tcp"},
-{"ora-lm", {NULL}, 1446, "udp"},
-{"apri-lm", {NULL}, 1447, "tcp"},
-{"apri-lm", {NULL}, 1447, "udp"},
-{"oc-lm", {NULL}, 1448, "tcp"},
-{"oc-lm", {NULL}, 1448, "udp"},
-{"peport", {NULL}, 1449, "tcp"},
-{"peport", {NULL}, 1449, "udp"},
-{"dwf", {NULL}, 1450, "tcp"},
-{"dwf", {NULL}, 1450, "udp"},
-{"infoman", {NULL}, 1451, "tcp"},
-{"infoman", {NULL}, 1451, "udp"},
-{"gtegsc-lm", {NULL}, 1452, "tcp"},
-{"gtegsc-lm", {NULL}, 1452, "udp"},
-{"genie-lm", {NULL}, 1453, "tcp"},
-{"genie-lm", {NULL}, 1453, "udp"},
-{"interhdl_elmd", {NULL}, 1454, "tcp"},
-{"interhdl_elmd", {NULL}, 1454, "udp"},
-{"esl-lm", {NULL}, 1455, "tcp"},
-{"esl-lm", {NULL}, 1455, "udp"},
-{"dca", {NULL}, 1456, "tcp"},
-{"dca", {NULL}, 1456, "udp"},
-{"valisys-lm", {NULL}, 1457, "tcp"},
-{"valisys-lm", {NULL}, 1457, "udp"},
-{"nrcabq-lm", {NULL}, 1458, "tcp"},
-{"nrcabq-lm", {NULL}, 1458, "udp"},
-{"proshare1", {NULL}, 1459, "tcp"},
-{"proshare1", {NULL}, 1459, "udp"},
-{"proshare2", {NULL}, 1460, "tcp"},
-{"proshare2", {NULL}, 1460, "udp"},
-{"ibm_wrless_lan", {NULL}, 1461, "tcp"},
-{"ibm_wrless_lan", {NULL}, 1461, "udp"},
-{"world-lm", {NULL}, 1462, "tcp"},
-{"world-lm", {NULL}, 1462, "udp"},
-{"nucleus", {NULL}, 1463, "tcp"},
-{"nucleus", {NULL}, 1463, "udp"},
-{"msl_lmd", {NULL}, 1464, "tcp"},
-{"msl_lmd", {NULL}, 1464, "udp"},
-{"pipes", {NULL}, 1465, "tcp"},
-{"pipes", {NULL}, 1465, "udp"},
-{"oceansoft-lm", {NULL}, 1466, "tcp"},
-{"oceansoft-lm", {NULL}, 1466, "udp"},
-{"csdmbase", {NULL}, 1467, "tcp"},
-{"csdmbase", {NULL}, 1467, "udp"},
-{"csdm", {NULL}, 1468, "tcp"},
-{"csdm", {NULL}, 1468, "udp"},
-{"aal-lm", {NULL}, 1469, "tcp"},
-{"aal-lm", {NULL}, 1469, "udp"},
-{"uaiact", {NULL}, 1470, "tcp"},
-{"uaiact", {NULL}, 1470, "udp"},
-{"csdmbase", {NULL}, 1471, "tcp"},
-{"csdmbase", {NULL}, 1471, "udp"},
-{"csdm", {NULL}, 1472, "tcp"},
-{"csdm", {NULL}, 1472, "udp"},
-{"openmath", {NULL}, 1473, "tcp"},
-{"openmath", {NULL}, 1473, "udp"},
-{"telefinder", {NULL}, 1474, "tcp"},
-{"telefinder", {NULL}, 1474, "udp"},
-{"taligent-lm", {NULL}, 1475, "tcp"},
-{"taligent-lm", {NULL}, 1475, "udp"},
-{"clvm-cfg", {NULL}, 1476, "tcp"},
-{"clvm-cfg", {NULL}, 1476, "udp"},
-{"ms-sna-server", {NULL}, 1477, "tcp"},
-{"ms-sna-server", {NULL}, 1477, "udp"},
-{"ms-sna-base", {NULL}, 1478, "tcp"},
-{"ms-sna-base", {NULL}, 1478, "udp"},
-{"dberegister", {NULL}, 1479, "tcp"},
-{"dberegister", {NULL}, 1479, "udp"},
-{"pacerforum", {NULL}, 1480, "tcp"},
-{"pacerforum", {NULL}, 1480, "udp"},
-{"airs", {NULL}, 1481, "tcp"},
-{"airs", {NULL}, 1481, "udp"},
-{"miteksys-lm", {NULL}, 1482, "tcp"},
-{"miteksys-lm", {NULL}, 1482, "udp"},
-{"afs", {NULL}, 1483, "tcp"},
-{"afs", {NULL}, 1483, "udp"},
-{"confluent", {NULL}, 1484, "tcp"},
-{"confluent", {NULL}, 1484, "udp"},
-{"lansource", {NULL}, 1485, "tcp"},
-{"lansource", {NULL}, 1485, "udp"},
-{"nms_topo_serv", {NULL}, 1486, "tcp"},
-{"nms_topo_serv", {NULL}, 1486, "udp"},
-{"localinfosrvr", {NULL}, 1487, "tcp"},
-{"localinfosrvr", {NULL}, 1487, "udp"},
-{"docstor", {NULL}, 1488, "tcp"},
-{"docstor", {NULL}, 1488, "udp"},
-{"dmdocbroker", {NULL}, 1489, "tcp"},
-{"dmdocbroker", {NULL}, 1489, "udp"},
-{"insitu-conf", {NULL}, 1490, "tcp"},
-{"insitu-conf", {NULL}, 1490, "udp"},
-{"stone-design-1", {NULL}, 1492, "tcp"},
-{"stone-design-1", {NULL}, 1492, "udp"},
-{"netmap_lm", {NULL}, 1493, "tcp"},
-{"netmap_lm", {NULL}, 1493, "udp"},
-{"ica", {NULL}, 1494, "tcp"},
-{"ica", {NULL}, 1494, "udp"},
-{"cvc", {NULL}, 1495, "tcp"},
-{"cvc", {NULL}, 1495, "udp"},
-{"liberty-lm", {NULL}, 1496, "tcp"},
-{"liberty-lm", {NULL}, 1496, "udp"},
-{"rfx-lm", {NULL}, 1497, "tcp"},
-{"rfx-lm", {NULL}, 1497, "udp"},
-{"sybase-sqlany", {NULL}, 1498, "tcp"},
-{"sybase-sqlany", {NULL}, 1498, "udp"},
-{"fhc", {NULL}, 1499, "tcp"},
-{"fhc", {NULL}, 1499, "udp"},
-{"vlsi-lm", {NULL}, 1500, "tcp"},
-{"vlsi-lm", {NULL}, 1500, "udp"},
-{"saiscm", {NULL}, 1501, "tcp"},
-{"saiscm", {NULL}, 1501, "udp"},
-{"shivadiscovery", {NULL}, 1502, "tcp"},
-{"shivadiscovery", {NULL}, 1502, "udp"},
-{"imtc-mcs", {NULL}, 1503, "tcp"},
-{"imtc-mcs", {NULL}, 1503, "udp"},
-{"evb-elm", {NULL}, 1504, "tcp"},
-{"evb-elm", {NULL}, 1504, "udp"},
-{"funkproxy", {NULL}, 1505, "tcp"},
-{"funkproxy", {NULL}, 1505, "udp"},
-{"utcd", {NULL}, 1506, "tcp"},
-{"utcd", {NULL}, 1506, "udp"},
-{"symplex", {NULL}, 1507, "tcp"},
-{"symplex", {NULL}, 1507, "udp"},
-{"diagmond", {NULL}, 1508, "tcp"},
-{"diagmond", {NULL}, 1508, "udp"},
-{"robcad-lm", {NULL}, 1509, "tcp"},
-{"robcad-lm", {NULL}, 1509, "udp"},
-{"mvx-lm", {NULL}, 1510, "tcp"},
-{"mvx-lm", {NULL}, 1510, "udp"},
-{"3l-l1", {NULL}, 1511, "tcp"},
-{"3l-l1", {NULL}, 1511, "udp"},
-{"wins", {NULL}, 1512, "tcp"},
-{"wins", {NULL}, 1512, "udp"},
-{"fujitsu-dtc", {NULL}, 1513, "tcp"},
-{"fujitsu-dtc", {NULL}, 1513, "udp"},
-{"fujitsu-dtcns", {NULL}, 1514, "tcp"},
-{"fujitsu-dtcns", {NULL}, 1514, "udp"},
-{"ifor-protocol", {NULL}, 1515, "tcp"},
-{"ifor-protocol", {NULL}, 1515, "udp"},
-{"vpad", {NULL}, 1516, "tcp"},
-{"vpad", {NULL}, 1516, "udp"},
-{"vpac", {NULL}, 1517, "tcp"},
-{"vpac", {NULL}, 1517, "udp"},
-{"vpvd", {NULL}, 1518, "tcp"},
-{"vpvd", {NULL}, 1518, "udp"},
-{"vpvc", {NULL}, 1519, "tcp"},
-{"vpvc", {NULL}, 1519, "udp"},
-{"atm-zip-office", {NULL}, 1520, "tcp"},
-{"atm-zip-office", {NULL}, 1520, "udp"},
-{"ncube-lm", {NULL}, 1521, "tcp"},
-{"ncube-lm", {NULL}, 1521, "udp"},
-{"ricardo-lm", {NULL}, 1522, "tcp"},
-{"ricardo-lm", {NULL}, 1522, "udp"},
-{"cichild-lm", {NULL}, 1523, "tcp"},
-{"cichild-lm", {NULL}, 1523, "udp"},
-{"ingreslock", {NULL}, 1524, "tcp"},
-{"ingreslock", {NULL}, 1524, "udp"},
-{"orasrv", {NULL}, 1525, "tcp"},
-{"orasrv", {NULL}, 1525, "udp"},
-{"prospero-np", {NULL}, 1525, "tcp"},
-{"prospero-np", {NULL}, 1525, "udp"},
-{"pdap-np", {NULL}, 1526, "tcp"},
-{"pdap-np", {NULL}, 1526, "udp"},
-{"tlisrv", {NULL}, 1527, "tcp"},
-{"tlisrv", {NULL}, 1527, "udp"},
-{"coauthor", {NULL}, 1529, "tcp"},
-{"coauthor", {NULL}, 1529, "udp"},
-{"rap-service", {NULL}, 1530, "tcp"},
-{"rap-service", {NULL}, 1530, "udp"},
-{"rap-listen", {NULL}, 1531, "tcp"},
-{"rap-listen", {NULL}, 1531, "udp"},
-{"miroconnect", {NULL}, 1532, "tcp"},
-{"miroconnect", {NULL}, 1532, "udp"},
-{"virtual-places", {NULL}, 1533, "tcp"},
-{"virtual-places", {NULL}, 1533, "udp"},
-{"micromuse-lm", {NULL}, 1534, "tcp"},
-{"micromuse-lm", {NULL}, 1534, "udp"},
-{"ampr-info", {NULL}, 1535, "tcp"},
-{"ampr-info", {NULL}, 1535, "udp"},
-{"ampr-inter", {NULL}, 1536, "tcp"},
-{"ampr-inter", {NULL}, 1536, "udp"},
-{"sdsc-lm", {NULL}, 1537, "tcp"},
-{"sdsc-lm", {NULL}, 1537, "udp"},
-{"3ds-lm", {NULL}, 1538, "tcp"},
-{"3ds-lm", {NULL}, 1538, "udp"},
-{"intellistor-lm", {NULL}, 1539, "tcp"},
-{"intellistor-lm", {NULL}, 1539, "udp"},
-{"rds", {NULL}, 1540, "tcp"},
-{"rds", {NULL}, 1540, "udp"},
-{"rds2", {NULL}, 1541, "tcp"},
-{"rds2", {NULL}, 1541, "udp"},
-{"gridgen-elmd", {NULL}, 1542, "tcp"},
-{"gridgen-elmd", {NULL}, 1542, "udp"},
-{"simba-cs", {NULL}, 1543, "tcp"},
-{"simba-cs", {NULL}, 1543, "udp"},
-{"aspeclmd", {NULL}, 1544, "tcp"},
-{"aspeclmd", {NULL}, 1544, "udp"},
-{"vistium-share", {NULL}, 1545, "tcp"},
-{"vistium-share", {NULL}, 1545, "udp"},
-{"abbaccuray", {NULL}, 1546, "tcp"},
-{"abbaccuray", {NULL}, 1546, "udp"},
-{"laplink", {NULL}, 1547, "tcp"},
-{"laplink", {NULL}, 1547, "udp"},
-{"axon-lm", {NULL}, 1548, "tcp"},
-{"axon-lm", {NULL}, 1548, "udp"},
-{"shivahose", {NULL}, 1549, "tcp"},
-{"shivasound", {NULL}, 1549, "udp"},
-{"3m-image-lm", {NULL}, 1550, "tcp"},
-{"3m-image-lm", {NULL}, 1550, "udp"},
-{"hecmtl-db", {NULL}, 1551, "tcp"},
-{"hecmtl-db", {NULL}, 1551, "udp"},
-{"pciarray", {NULL}, 1552, "tcp"},
-{"pciarray", {NULL}, 1552, "udp"},
-{"sna-cs", {NULL}, 1553, "tcp"},
-{"sna-cs", {NULL}, 1553, "udp"},
-{"caci-lm", {NULL}, 1554, "tcp"},
-{"caci-lm", {NULL}, 1554, "udp"},
-{"livelan", {NULL}, 1555, "tcp"},
-{"livelan", {NULL}, 1555, "udp"},
-{"veritas_pbx", {NULL}, 1556, "tcp"},
-{"veritas_pbx", {NULL}, 1556, "udp"},
-{"arbortext-lm", {NULL}, 1557, "tcp"},
-{"arbortext-lm", {NULL}, 1557, "udp"},
-{"xingmpeg", {NULL}, 1558, "tcp"},
-{"xingmpeg", {NULL}, 1558, "udp"},
-{"web2host", {NULL}, 1559, "tcp"},
-{"web2host", {NULL}, 1559, "udp"},
-{"asci-val", {NULL}, 1560, "tcp"},
-{"asci-val", {NULL}, 1560, "udp"},
-{"facilityview", {NULL}, 1561, "tcp"},
-{"facilityview", {NULL}, 1561, "udp"},
-{"pconnectmgr", {NULL}, 1562, "tcp"},
-{"pconnectmgr", {NULL}, 1562, "udp"},
-{"cadabra-lm", {NULL}, 1563, "tcp"},
-{"cadabra-lm", {NULL}, 1563, "udp"},
-{"pay-per-view", {NULL}, 1564, "tcp"},
-{"pay-per-view", {NULL}, 1564, "udp"},
-{"winddlb", {NULL}, 1565, "tcp"},
-{"winddlb", {NULL}, 1565, "udp"},
-{"corelvideo", {NULL}, 1566, "tcp"},
-{"corelvideo", {NULL}, 1566, "udp"},
-{"jlicelmd", {NULL}, 1567, "tcp"},
-{"jlicelmd", {NULL}, 1567, "udp"},
-{"tsspmap", {NULL}, 1568, "tcp"},
-{"tsspmap", {NULL}, 1568, "udp"},
-{"ets", {NULL}, 1569, "tcp"},
-{"ets", {NULL}, 1569, "udp"},
-{"orbixd", {NULL}, 1570, "tcp"},
-{"orbixd", {NULL}, 1570, "udp"},
-{"rdb-dbs-disp", {NULL}, 1571, "tcp"},
-{"rdb-dbs-disp", {NULL}, 1571, "udp"},
-{"chip-lm", {NULL}, 1572, "tcp"},
-{"chip-lm", {NULL}, 1572, "udp"},
-{"itscomm-ns", {NULL}, 1573, "tcp"},
-{"itscomm-ns", {NULL}, 1573, "udp"},
-{"mvel-lm", {NULL}, 1574, "tcp"},
-{"mvel-lm", {NULL}, 1574, "udp"},
-{"oraclenames", {NULL}, 1575, "tcp"},
-{"oraclenames", {NULL}, 1575, "udp"},
-{"moldflow-lm", {NULL}, 1576, "tcp"},
-{"moldflow-lm", {NULL}, 1576, "udp"},
-{"hypercube-lm", {NULL}, 1577, "tcp"},
-{"hypercube-lm", {NULL}, 1577, "udp"},
-{"jacobus-lm", {NULL}, 1578, "tcp"},
-{"jacobus-lm", {NULL}, 1578, "udp"},
-{"ioc-sea-lm", {NULL}, 1579, "tcp"},
-{"ioc-sea-lm", {NULL}, 1579, "udp"},
-{"tn-tl-r1", {NULL}, 1580, "tcp"},
-{"tn-tl-r2", {NULL}, 1580, "udp"},
-{"mil-2045-47001", {NULL}, 1581, "tcp"},
-{"mil-2045-47001", {NULL}, 1581, "udp"},
-{"msims", {NULL}, 1582, "tcp"},
-{"msims", {NULL}, 1582, "udp"},
-{"simbaexpress", {NULL}, 1583, "tcp"},
-{"simbaexpress", {NULL}, 1583, "udp"},
-{"tn-tl-fd2", {NULL}, 1584, "tcp"},
-{"tn-tl-fd2", {NULL}, 1584, "udp"},
-{"intv", {NULL}, 1585, "tcp"},
-{"intv", {NULL}, 1585, "udp"},
-{"ibm-abtact", {NULL}, 1586, "tcp"},
-{"ibm-abtact", {NULL}, 1586, "udp"},
-{"pra_elmd", {NULL}, 1587, "tcp"},
-{"pra_elmd", {NULL}, 1587, "udp"},
-{"triquest-lm", {NULL}, 1588, "tcp"},
-{"triquest-lm", {NULL}, 1588, "udp"},
-{"vqp", {NULL}, 1589, "tcp"},
-{"vqp", {NULL}, 1589, "udp"},
-{"gemini-lm", {NULL}, 1590, "tcp"},
-{"gemini-lm", {NULL}, 1590, "udp"},
-{"ncpm-pm", {NULL}, 1591, "tcp"},
-{"ncpm-pm", {NULL}, 1591, "udp"},
-{"commonspace", {NULL}, 1592, "tcp"},
-{"commonspace", {NULL}, 1592, "udp"},
-{"mainsoft-lm", {NULL}, 1593, "tcp"},
-{"mainsoft-lm", {NULL}, 1593, "udp"},
-{"sixtrak", {NULL}, 1594, "tcp"},
-{"sixtrak", {NULL}, 1594, "udp"},
-{"radio", {NULL}, 1595, "tcp"},
-{"radio", {NULL}, 1595, "udp"},
-{"radio-sm", {NULL}, 1596, "tcp"},
-{"radio-bc", {NULL}, 1596, "udp"},
-{"orbplus-iiop", {NULL}, 1597, "tcp"},
-{"orbplus-iiop", {NULL}, 1597, "udp"},
-{"picknfs", {NULL}, 1598, "tcp"},
-{"picknfs", {NULL}, 1598, "udp"},
-{"simbaservices", {NULL}, 1599, "tcp"},
-{"simbaservices", {NULL}, 1599, "udp"},
-{"issd", {NULL}, 1600, "tcp"},
-{"issd", {NULL}, 1600, "udp"},
-{"aas", {NULL}, 1601, "tcp"},
-{"aas", {NULL}, 1601, "udp"},
-{"inspect", {NULL}, 1602, "tcp"},
-{"inspect", {NULL}, 1602, "udp"},
-{"picodbc", {NULL}, 1603, "tcp"},
-{"picodbc", {NULL}, 1603, "udp"},
-{"icabrowser", {NULL}, 1604, "tcp"},
-{"icabrowser", {NULL}, 1604, "udp"},
-{"slp", {NULL}, 1605, "tcp"},
-{"slp", {NULL}, 1605, "udp"},
-{"slm-api", {NULL}, 1606, "tcp"},
-{"slm-api", {NULL}, 1606, "udp"},
-{"stt", {NULL}, 1607, "tcp"},
-{"stt", {NULL}, 1607, "udp"},
-{"smart-lm", {NULL}, 1608, "tcp"},
-{"smart-lm", {NULL}, 1608, "udp"},
-{"isysg-lm", {NULL}, 1609, "tcp"},
-{"isysg-lm", {NULL}, 1609, "udp"},
-{"taurus-wh", {NULL}, 1610, "tcp"},
-{"taurus-wh", {NULL}, 1610, "udp"},
-{"ill", {NULL}, 1611, "tcp"},
-{"ill", {NULL}, 1611, "udp"},
-{"netbill-trans", {NULL}, 1612, "tcp"},
-{"netbill-trans", {NULL}, 1612, "udp"},
-{"netbill-keyrep", {NULL}, 1613, "tcp"},
-{"netbill-keyrep", {NULL}, 1613, "udp"},
-{"netbill-cred", {NULL}, 1614, "tcp"},
-{"netbill-cred", {NULL}, 1614, "udp"},
-{"netbill-auth", {NULL}, 1615, "tcp"},
-{"netbill-auth", {NULL}, 1615, "udp"},
-{"netbill-prod", {NULL}, 1616, "tcp"},
-{"netbill-prod", {NULL}, 1616, "udp"},
-{"nimrod-agent", {NULL}, 1617, "tcp"},
-{"nimrod-agent", {NULL}, 1617, "udp"},
-{"skytelnet", {NULL}, 1618, "tcp"},
-{"skytelnet", {NULL}, 1618, "udp"},
-{"xs-openstorage", {NULL}, 1619, "tcp"},
-{"xs-openstorage", {NULL}, 1619, "udp"},
-{"faxportwinport", {NULL}, 1620, "tcp"},
-{"faxportwinport", {NULL}, 1620, "udp"},
-{"softdataphone", {NULL}, 1621, "tcp"},
-{"softdataphone", {NULL}, 1621, "udp"},
-{"ontime", {NULL}, 1622, "tcp"},
-{"ontime", {NULL}, 1622, "udp"},
-{"jaleosnd", {NULL}, 1623, "tcp"},
-{"jaleosnd", {NULL}, 1623, "udp"},
-{"udp-sr-port", {NULL}, 1624, "tcp"},
-{"udp-sr-port", {NULL}, 1624, "udp"},
-{"svs-omagent", {NULL}, 1625, "tcp"},
-{"svs-omagent", {NULL}, 1625, "udp"},
-{"shockwave", {NULL}, 1626, "tcp"},
-{"shockwave", {NULL}, 1626, "udp"},
-{"t128-gateway", {NULL}, 1627, "tcp"},
-{"t128-gateway", {NULL}, 1627, "udp"},
-{"lontalk-norm", {NULL}, 1628, "tcp"},
-{"lontalk-norm", {NULL}, 1628, "udp"},
-{"lontalk-urgnt", {NULL}, 1629, "tcp"},
-{"lontalk-urgnt", {NULL}, 1629, "udp"},
-{"oraclenet8cman", {NULL}, 1630, "tcp"},
-{"oraclenet8cman", {NULL}, 1630, "udp"},
-{"visitview", {NULL}, 1631, "tcp"},
-{"visitview", {NULL}, 1631, "udp"},
-{"pammratc", {NULL}, 1632, "tcp"},
-{"pammratc", {NULL}, 1632, "udp"},
-{"pammrpc", {NULL}, 1633, "tcp"},
-{"pammrpc", {NULL}, 1633, "udp"},
-{"loaprobe", {NULL}, 1634, "tcp"},
-{"loaprobe", {NULL}, 1634, "udp"},
-{"edb-server1", {NULL}, 1635, "tcp"},
-{"edb-server1", {NULL}, 1635, "udp"},
-{"isdc", {NULL}, 1636, "tcp"},
-{"isdc", {NULL}, 1636, "udp"},
-{"islc", {NULL}, 1637, "tcp"},
-{"islc", {NULL}, 1637, "udp"},
-{"ismc", {NULL}, 1638, "tcp"},
-{"ismc", {NULL}, 1638, "udp"},
-{"cert-initiator", {NULL}, 1639, "tcp"},
-{"cert-initiator", {NULL}, 1639, "udp"},
-{"cert-responder", {NULL}, 1640, "tcp"},
-{"cert-responder", {NULL}, 1640, "udp"},
-{"invision", {NULL}, 1641, "tcp"},
-{"invision", {NULL}, 1641, "udp"},
-{"isis-am", {NULL}, 1642, "tcp"},
-{"isis-am", {NULL}, 1642, "udp"},
-{"isis-ambc", {NULL}, 1643, "tcp"},
-{"isis-ambc", {NULL}, 1643, "udp"},
-{"saiseh", {NULL}, 1644, "tcp"},
-{"sightline", {NULL}, 1645, "tcp"},
-{"sightline", {NULL}, 1645, "udp"},
-{"sa-msg-port", {NULL}, 1646, "tcp"},
-{"sa-msg-port", {NULL}, 1646, "udp"},
-{"rsap", {NULL}, 1647, "tcp"},
-{"rsap", {NULL}, 1647, "udp"},
-{"concurrent-lm", {NULL}, 1648, "tcp"},
-{"concurrent-lm", {NULL}, 1648, "udp"},
-{"kermit", {NULL}, 1649, "tcp"},
-{"kermit", {NULL}, 1649, "udp"},
-{"nkd", {NULL}, 1650, "tcp"},
-{"nkd", {NULL}, 1650, "udp"},
-{"shiva_confsrvr", {NULL}, 1651, "tcp"},
-{"shiva_confsrvr", {NULL}, 1651, "udp"},
-{"xnmp", {NULL}, 1652, "tcp"},
-{"xnmp", {NULL}, 1652, "udp"},
-{"alphatech-lm", {NULL}, 1653, "tcp"},
-{"alphatech-lm", {NULL}, 1653, "udp"},
-{"stargatealerts", {NULL}, 1654, "tcp"},
-{"stargatealerts", {NULL}, 1654, "udp"},
-{"dec-mbadmin", {NULL}, 1655, "tcp"},
-{"dec-mbadmin", {NULL}, 1655, "udp"},
-{"dec-mbadmin-h", {NULL}, 1656, "tcp"},
-{"dec-mbadmin-h", {NULL}, 1656, "udp"},
-{"fujitsu-mmpdc", {NULL}, 1657, "tcp"},
-{"fujitsu-mmpdc", {NULL}, 1657, "udp"},
-{"sixnetudr", {NULL}, 1658, "tcp"},
-{"sixnetudr", {NULL}, 1658, "udp"},
-{"sg-lm", {NULL}, 1659, "tcp"},
-{"sg-lm", {NULL}, 1659, "udp"},
-{"skip-mc-gikreq", {NULL}, 1660, "tcp"},
-{"skip-mc-gikreq", {NULL}, 1660, "udp"},
-{"netview-aix-1", {NULL}, 1661, "tcp"},
-{"netview-aix-1", {NULL}, 1661, "udp"},
-{"netview-aix-2", {NULL}, 1662, "tcp"},
-{"netview-aix-2", {NULL}, 1662, "udp"},
-{"netview-aix-3", {NULL}, 1663, "tcp"},
-{"netview-aix-3", {NULL}, 1663, "udp"},
-{"netview-aix-4", {NULL}, 1664, "tcp"},
-{"netview-aix-4", {NULL}, 1664, "udp"},
-{"netview-aix-5", {NULL}, 1665, "tcp"},
-{"netview-aix-5", {NULL}, 1665, "udp"},
-{"netview-aix-6", {NULL}, 1666, "tcp"},
-{"netview-aix-6", {NULL}, 1666, "udp"},
-{"netview-aix-7", {NULL}, 1667, "tcp"},
-{"netview-aix-7", {NULL}, 1667, "udp"},
-{"netview-aix-8", {NULL}, 1668, "tcp"},
-{"netview-aix-8", {NULL}, 1668, "udp"},
-{"netview-aix-9", {NULL}, 1669, "tcp"},
-{"netview-aix-9", {NULL}, 1669, "udp"},
-{"netview-aix-10", {NULL}, 1670, "tcp"},
-{"netview-aix-10", {NULL}, 1670, "udp"},
-{"netview-aix-11", {NULL}, 1671, "tcp"},
-{"netview-aix-11", {NULL}, 1671, "udp"},
-{"netview-aix-12", {NULL}, 1672, "tcp"},
-{"netview-aix-12", {NULL}, 1672, "udp"},
-{"proshare-mc-1", {NULL}, 1673, "tcp"},
-{"proshare-mc-1", {NULL}, 1673, "udp"},
-{"proshare-mc-2", {NULL}, 1674, "tcp"},
-{"proshare-mc-2", {NULL}, 1674, "udp"},
-{"pdp", {NULL}, 1675, "tcp"},
-{"pdp", {NULL}, 1675, "udp"},
-{"netcomm1", {NULL}, 1676, "tcp"},
-{"netcomm2", {NULL}, 1676, "udp"},
-{"groupwise", {NULL}, 1677, "tcp"},
-{"groupwise", {NULL}, 1677, "udp"},
-{"prolink", {NULL}, 1678, "tcp"},
-{"prolink", {NULL}, 1678, "udp"},
-{"darcorp-lm", {NULL}, 1679, "tcp"},
-{"darcorp-lm", {NULL}, 1679, "udp"},
-{"microcom-sbp", {NULL}, 1680, "tcp"},
-{"microcom-sbp", {NULL}, 1680, "udp"},
-{"sd-elmd", {NULL}, 1681, "tcp"},
-{"sd-elmd", {NULL}, 1681, "udp"},
-{"lanyon-lantern", {NULL}, 1682, "tcp"},
-{"lanyon-lantern", {NULL}, 1682, "udp"},
-{"ncpm-hip", {NULL}, 1683, "tcp"},
-{"ncpm-hip", {NULL}, 1683, "udp"},
-{"snaresecure", {NULL}, 1684, "tcp"},
-{"snaresecure", {NULL}, 1684, "udp"},
-{"n2nremote", {NULL}, 1685, "tcp"},
-{"n2nremote", {NULL}, 1685, "udp"},
-{"cvmon", {NULL}, 1686, "tcp"},
-{"cvmon", {NULL}, 1686, "udp"},
-{"nsjtp-ctrl", {NULL}, 1687, "tcp"},
-{"nsjtp-ctrl", {NULL}, 1687, "udp"},
-{"nsjtp-data", {NULL}, 1688, "tcp"},
-{"nsjtp-data", {NULL}, 1688, "udp"},
-{"firefox", {NULL}, 1689, "tcp"},
-{"firefox", {NULL}, 1689, "udp"},
-{"ng-umds", {NULL}, 1690, "tcp"},
-{"ng-umds", {NULL}, 1690, "udp"},
-{"empire-empuma", {NULL}, 1691, "tcp"},
-{"empire-empuma", {NULL}, 1691, "udp"},
-{"sstsys-lm", {NULL}, 1692, "tcp"},
-{"sstsys-lm", {NULL}, 1692, "udp"},
-{"rrirtr", {NULL}, 1693, "tcp"},
-{"rrirtr", {NULL}, 1693, "udp"},
-{"rrimwm", {NULL}, 1694, "tcp"},
-{"rrimwm", {NULL}, 1694, "udp"},
-{"rrilwm", {NULL}, 1695, "tcp"},
-{"rrilwm", {NULL}, 1695, "udp"},
-{"rrifmm", {NULL}, 1696, "tcp"},
-{"rrifmm", {NULL}, 1696, "udp"},
-{"rrisat", {NULL}, 1697, "tcp"},
-{"rrisat", {NULL}, 1697, "udp"},
-{"rsvp-encap-1", {NULL}, 1698, "tcp"},
-{"rsvp-encap-1", {NULL}, 1698, "udp"},
-{"rsvp-encap-2", {NULL}, 1699, "tcp"},
-{"rsvp-encap-2", {NULL}, 1699, "udp"},
-{"mps-raft", {NULL}, 1700, "tcp"},
-{"mps-raft", {NULL}, 1700, "udp"},
-{"l2f", {NULL}, 1701, "tcp"},
-{"l2f", {NULL}, 1701, "udp"},
-{"l2tp", {NULL}, 1701, "tcp"},
-{"l2tp", {NULL}, 1701, "udp"},
-{"deskshare", {NULL}, 1702, "tcp"},
-{"deskshare", {NULL}, 1702, "udp"},
-{"hb-engine", {NULL}, 1703, "tcp"},
-{"hb-engine", {NULL}, 1703, "udp"},
-{"bcs-broker", {NULL}, 1704, "tcp"},
-{"bcs-broker", {NULL}, 1704, "udp"},
-{"slingshot", {NULL}, 1705, "tcp"},
-{"slingshot", {NULL}, 1705, "udp"},
-{"jetform", {NULL}, 1706, "tcp"},
-{"jetform", {NULL}, 1706, "udp"},
-{"vdmplay", {NULL}, 1707, "tcp"},
-{"vdmplay", {NULL}, 1707, "udp"},
-{"gat-lmd", {NULL}, 1708, "tcp"},
-{"gat-lmd", {NULL}, 1708, "udp"},
-{"centra", {NULL}, 1709, "tcp"},
-{"centra", {NULL}, 1709, "udp"},
-{"impera", {NULL}, 1710, "tcp"},
-{"impera", {NULL}, 1710, "udp"},
-{"pptconference", {NULL}, 1711, "tcp"},
-{"pptconference", {NULL}, 1711, "udp"},
-{"registrar", {NULL}, 1712, "tcp"},
-{"registrar", {NULL}, 1712, "udp"},
-{"conferencetalk", {NULL}, 1713, "tcp"},
-{"conferencetalk", {NULL}, 1713, "udp"},
-{"sesi-lm", {NULL}, 1714, "tcp"},
-{"sesi-lm", {NULL}, 1714, "udp"},
-{"houdini-lm", {NULL}, 1715, "tcp"},
-{"houdini-lm", {NULL}, 1715, "udp"},
-{"xmsg", {NULL}, 1716, "tcp"},
-{"xmsg", {NULL}, 1716, "udp"},
-{"fj-hdnet", {NULL}, 1717, "tcp"},
-{"fj-hdnet", {NULL}, 1717, "udp"},
-{"h323gatedisc", {NULL}, 1718, "tcp"},
-{"h323gatedisc", {NULL}, 1718, "udp"},
-{"h323gatestat", {NULL}, 1719, "tcp"},
-{"h323gatestat", {NULL}, 1719, "udp"},
-{"h323hostcall", {NULL}, 1720, "tcp"},
-{"h323hostcall", {NULL}, 1720, "udp"},
-{"caicci", {NULL}, 1721, "tcp"},
-{"caicci", {NULL}, 1721, "udp"},
-{"hks-lm", {NULL}, 1722, "tcp"},
-{"hks-lm", {NULL}, 1722, "udp"},
-{"pptp", {NULL}, 1723, "tcp"},
-{"pptp", {NULL}, 1723, "udp"},
-{"csbphonemaster", {NULL}, 1724, "tcp"},
-{"csbphonemaster", {NULL}, 1724, "udp"},
-{"iden-ralp", {NULL}, 1725, "tcp"},
-{"iden-ralp", {NULL}, 1725, "udp"},
-{"iberiagames", {NULL}, 1726, "tcp"},
-{"iberiagames", {NULL}, 1726, "udp"},
-{"winddx", {NULL}, 1727, "tcp"},
-{"winddx", {NULL}, 1727, "udp"},
-{"telindus", {NULL}, 1728, "tcp"},
-{"telindus", {NULL}, 1728, "udp"},
-{"citynl", {NULL}, 1729, "tcp"},
-{"citynl", {NULL}, 1729, "udp"},
-{"roketz", {NULL}, 1730, "tcp"},
-{"roketz", {NULL}, 1730, "udp"},
-{"msiccp", {NULL}, 1731, "tcp"},
-{"msiccp", {NULL}, 1731, "udp"},
-{"proxim", {NULL}, 1732, "tcp"},
-{"proxim", {NULL}, 1732, "udp"},
-{"siipat", {NULL}, 1733, "tcp"},
-{"siipat", {NULL}, 1733, "udp"},
-{"cambertx-lm", {NULL}, 1734, "tcp"},
-{"cambertx-lm", {NULL}, 1734, "udp"},
-{"privatechat", {NULL}, 1735, "tcp"},
-{"privatechat", {NULL}, 1735, "udp"},
-{"street-stream", {NULL}, 1736, "tcp"},
-{"street-stream", {NULL}, 1736, "udp"},
-{"ultimad", {NULL}, 1737, "tcp"},
-{"ultimad", {NULL}, 1737, "udp"},
-{"gamegen1", {NULL}, 1738, "tcp"},
-{"gamegen1", {NULL}, 1738, "udp"},
-{"webaccess", {NULL}, 1739, "tcp"},
-{"webaccess", {NULL}, 1739, "udp"},
-{"encore", {NULL}, 1740, "tcp"},
-{"encore", {NULL}, 1740, "udp"},
-{"cisco-net-mgmt", {NULL}, 1741, "tcp"},
-{"cisco-net-mgmt", {NULL}, 1741, "udp"},
-{"3Com-nsd", {NULL}, 1742, "tcp"},
-{"3Com-nsd", {NULL}, 1742, "udp"},
-{"cinegrfx-lm", {NULL}, 1743, "tcp"},
-{"cinegrfx-lm", {NULL}, 1743, "udp"},
-{"ncpm-ft", {NULL}, 1744, "tcp"},
-{"ncpm-ft", {NULL}, 1744, "udp"},
-{"remote-winsock", {NULL}, 1745, "tcp"},
-{"remote-winsock", {NULL}, 1745, "udp"},
-{"ftrapid-1", {NULL}, 1746, "tcp"},
-{"ftrapid-1", {NULL}, 1746, "udp"},
-{"ftrapid-2", {NULL}, 1747, "tcp"},
-{"ftrapid-2", {NULL}, 1747, "udp"},
-{"oracle-em1", {NULL}, 1748, "tcp"},
-{"oracle-em1", {NULL}, 1748, "udp"},
-{"aspen-services", {NULL}, 1749, "tcp"},
-{"aspen-services", {NULL}, 1749, "udp"},
-{"sslp", {NULL}, 1750, "tcp"},
-{"sslp", {NULL}, 1750, "udp"},
-{"swiftnet", {NULL}, 1751, "tcp"},
-{"swiftnet", {NULL}, 1751, "udp"},
-{"lofr-lm", {NULL}, 1752, "tcp"},
-{"lofr-lm", {NULL}, 1752, "udp"},
-{"oracle-em2", {NULL}, 1754, "tcp"},
-{"oracle-em2", {NULL}, 1754, "udp"},
-{"ms-streaming", {NULL}, 1755, "tcp"},
-{"ms-streaming", {NULL}, 1755, "udp"},
-{"capfast-lmd", {NULL}, 1756, "tcp"},
-{"capfast-lmd", {NULL}, 1756, "udp"},
-{"cnhrp", {NULL}, 1757, "tcp"},
-{"cnhrp", {NULL}, 1757, "udp"},
-{"tftp-mcast", {NULL}, 1758, "tcp"},
-{"tftp-mcast", {NULL}, 1758, "udp"},
-{"spss-lm", {NULL}, 1759, "tcp"},
-{"spss-lm", {NULL}, 1759, "udp"},
-{"www-ldap-gw", {NULL}, 1760, "tcp"},
-{"www-ldap-gw", {NULL}, 1760, "udp"},
-{"cft-0", {NULL}, 1761, "tcp"},
-{"cft-0", {NULL}, 1761, "udp"},
-{"cft-1", {NULL}, 1762, "tcp"},
-{"cft-1", {NULL}, 1762, "udp"},
-{"cft-2", {NULL}, 1763, "tcp"},
-{"cft-2", {NULL}, 1763, "udp"},
-{"cft-3", {NULL}, 1764, "tcp"},
-{"cft-3", {NULL}, 1764, "udp"},
-{"cft-4", {NULL}, 1765, "tcp"},
-{"cft-4", {NULL}, 1765, "udp"},
-{"cft-5", {NULL}, 1766, "tcp"},
-{"cft-5", {NULL}, 1766, "udp"},
-{"cft-6", {NULL}, 1767, "tcp"},
-{"cft-6", {NULL}, 1767, "udp"},
-{"cft-7", {NULL}, 1768, "tcp"},
-{"cft-7", {NULL}, 1768, "udp"},
-{"bmc-net-adm", {NULL}, 1769, "tcp"},
-{"bmc-net-adm", {NULL}, 1769, "udp"},
-{"bmc-net-svc", {NULL}, 1770, "tcp"},
-{"bmc-net-svc", {NULL}, 1770, "udp"},
-{"vaultbase", {NULL}, 1771, "tcp"},
-{"vaultbase", {NULL}, 1771, "udp"},
-{"essweb-gw", {NULL}, 1772, "tcp"},
-{"essweb-gw", {NULL}, 1772, "udp"},
-{"kmscontrol", {NULL}, 1773, "tcp"},
-{"kmscontrol", {NULL}, 1773, "udp"},
-{"global-dtserv", {NULL}, 1774, "tcp"},
-{"global-dtserv", {NULL}, 1774, "udp"},
-{"femis", {NULL}, 1776, "tcp"},
-{"femis", {NULL}, 1776, "udp"},
-{"powerguardian", {NULL}, 1777, "tcp"},
-{"powerguardian", {NULL}, 1777, "udp"},
-{"prodigy-intrnet", {NULL}, 1778, "tcp"},
-{"prodigy-intrnet", {NULL}, 1778, "udp"},
-{"pharmasoft", {NULL}, 1779, "tcp"},
-{"pharmasoft", {NULL}, 1779, "udp"},
-{"dpkeyserv", {NULL}, 1780, "tcp"},
-{"dpkeyserv", {NULL}, 1780, "udp"},
-{"answersoft-lm", {NULL}, 1781, "tcp"},
-{"answersoft-lm", {NULL}, 1781, "udp"},
-{"hp-hcip", {NULL}, 1782, "tcp"},
-{"hp-hcip", {NULL}, 1782, "udp"},
-{"finle-lm", {NULL}, 1784, "tcp"},
-{"finle-lm", {NULL}, 1784, "udp"},
-{"windlm", {NULL}, 1785, "tcp"},
-{"windlm", {NULL}, 1785, "udp"},
-{"funk-logger", {NULL}, 1786, "tcp"},
-{"funk-logger", {NULL}, 1786, "udp"},
-{"funk-license", {NULL}, 1787, "tcp"},
-{"funk-license", {NULL}, 1787, "udp"},
-{"psmond", {NULL}, 1788, "tcp"},
-{"psmond", {NULL}, 1788, "udp"},
-{"hello", {NULL}, 1789, "tcp"},
-{"hello", {NULL}, 1789, "udp"},
-{"nmsp", {NULL}, 1790, "tcp"},
-{"nmsp", {NULL}, 1790, "udp"},
-{"ea1", {NULL}, 1791, "tcp"},
-{"ea1", {NULL}, 1791, "udp"},
-{"ibm-dt-2", {NULL}, 1792, "tcp"},
-{"ibm-dt-2", {NULL}, 1792, "udp"},
-{"rsc-robot", {NULL}, 1793, "tcp"},
-{"rsc-robot", {NULL}, 1793, "udp"},
-{"cera-bcm", {NULL}, 1794, "tcp"},
-{"cera-bcm", {NULL}, 1794, "udp"},
-{"dpi-proxy", {NULL}, 1795, "tcp"},
-{"dpi-proxy", {NULL}, 1795, "udp"},
-{"vocaltec-admin", {NULL}, 1796, "tcp"},
-{"vocaltec-admin", {NULL}, 1796, "udp"},
-{"uma", {NULL}, 1797, "tcp"},
-{"uma", {NULL}, 1797, "udp"},
-{"etp", {NULL}, 1798, "tcp"},
-{"etp", {NULL}, 1798, "udp"},
-{"netrisk", {NULL}, 1799, "tcp"},
-{"netrisk", {NULL}, 1799, "udp"},
-{"ansys-lm", {NULL}, 1800, "tcp"},
-{"ansys-lm", {NULL}, 1800, "udp"},
-{"msmq", {NULL}, 1801, "tcp"},
-{"msmq", {NULL}, 1801, "udp"},
-{"concomp1", {NULL}, 1802, "tcp"},
-{"concomp1", {NULL}, 1802, "udp"},
-{"hp-hcip-gwy", {NULL}, 1803, "tcp"},
-{"hp-hcip-gwy", {NULL}, 1803, "udp"},
-{"enl", {NULL}, 1804, "tcp"},
-{"enl", {NULL}, 1804, "udp"},
-{"enl-name", {NULL}, 1805, "tcp"},
-{"enl-name", {NULL}, 1805, "udp"},
-{"musiconline", {NULL}, 1806, "tcp"},
-{"musiconline", {NULL}, 1806, "udp"},
-{"fhsp", {NULL}, 1807, "tcp"},
-{"fhsp", {NULL}, 1807, "udp"},
-{"oracle-vp2", {NULL}, 1808, "tcp"},
-{"oracle-vp2", {NULL}, 1808, "udp"},
-{"oracle-vp1", {NULL}, 1809, "tcp"},
-{"oracle-vp1", {NULL}, 1809, "udp"},
-{"jerand-lm", {NULL}, 1810, "tcp"},
-{"jerand-lm", {NULL}, 1810, "udp"},
-{"scientia-sdb", {NULL}, 1811, "tcp"},
-{"scientia-sdb", {NULL}, 1811, "udp"},
-{"radius", {NULL}, 1812, "tcp"},
-{"radius", {NULL}, 1812, "udp"},
-{"radius-acct", {NULL}, 1813, "tcp"},
-{"radius-acct", {NULL}, 1813, "udp"},
-{"tdp-suite", {NULL}, 1814, "tcp"},
-{"tdp-suite", {NULL}, 1814, "udp"},
-{"mmpft", {NULL}, 1815, "tcp"},
-{"mmpft", {NULL}, 1815, "udp"},
-{"harp", {NULL}, 1816, "tcp"},
-{"harp", {NULL}, 1816, "udp"},
-{"rkb-oscs", {NULL}, 1817, "tcp"},
-{"rkb-oscs", {NULL}, 1817, "udp"},
-{"etftp", {NULL}, 1818, "tcp"},
-{"etftp", {NULL}, 1818, "udp"},
-{"plato-lm", {NULL}, 1819, "tcp"},
-{"plato-lm", {NULL}, 1819, "udp"},
-{"mcagent", {NULL}, 1820, "tcp"},
-{"mcagent", {NULL}, 1820, "udp"},
-{"donnyworld", {NULL}, 1821, "tcp"},
-{"donnyworld", {NULL}, 1821, "udp"},
-{"es-elmd", {NULL}, 1822, "tcp"},
-{"es-elmd", {NULL}, 1822, "udp"},
-{"unisys-lm", {NULL}, 1823, "tcp"},
-{"unisys-lm", {NULL}, 1823, "udp"},
-{"metrics-pas", {NULL}, 1824, "tcp"},
-{"metrics-pas", {NULL}, 1824, "udp"},
-{"direcpc-video", {NULL}, 1825, "tcp"},
-{"direcpc-video", {NULL}, 1825, "udp"},
-{"ardt", {NULL}, 1826, "tcp"},
-{"ardt", {NULL}, 1826, "udp"},
-{"asi", {NULL}, 1827, "tcp"},
-{"asi", {NULL}, 1827, "udp"},
-{"itm-mcell-u", {NULL}, 1828, "tcp"},
-{"itm-mcell-u", {NULL}, 1828, "udp"},
-{"optika-emedia", {NULL}, 1829, "tcp"},
-{"optika-emedia", {NULL}, 1829, "udp"},
-{"net8-cman", {NULL}, 1830, "tcp"},
-{"net8-cman", {NULL}, 1830, "udp"},
-{"myrtle", {NULL}, 1831, "tcp"},
-{"myrtle", {NULL}, 1831, "udp"},
-{"tht-treasure", {NULL}, 1832, "tcp"},
-{"tht-treasure", {NULL}, 1832, "udp"},
-{"udpradio", {NULL}, 1833, "tcp"},
-{"udpradio", {NULL}, 1833, "udp"},
-{"ardusuni", {NULL}, 1834, "tcp"},
-{"ardusuni", {NULL}, 1834, "udp"},
-{"ardusmul", {NULL}, 1835, "tcp"},
-{"ardusmul", {NULL}, 1835, "udp"},
-{"ste-smsc", {NULL}, 1836, "tcp"},
-{"ste-smsc", {NULL}, 1836, "udp"},
-{"csoft1", {NULL}, 1837, "tcp"},
-{"csoft1", {NULL}, 1837, "udp"},
-{"talnet", {NULL}, 1838, "tcp"},
-{"talnet", {NULL}, 1838, "udp"},
-{"netopia-vo1", {NULL}, 1839, "tcp"},
-{"netopia-vo1", {NULL}, 1839, "udp"},
-{"netopia-vo2", {NULL}, 1840, "tcp"},
-{"netopia-vo2", {NULL}, 1840, "udp"},
-{"netopia-vo3", {NULL}, 1841, "tcp"},
-{"netopia-vo3", {NULL}, 1841, "udp"},
-{"netopia-vo4", {NULL}, 1842, "tcp"},
-{"netopia-vo4", {NULL}, 1842, "udp"},
-{"netopia-vo5", {NULL}, 1843, "tcp"},
-{"netopia-vo5", {NULL}, 1843, "udp"},
-{"direcpc-dll", {NULL}, 1844, "tcp"},
-{"direcpc-dll", {NULL}, 1844, "udp"},
-{"altalink", {NULL}, 1845, "tcp"},
-{"altalink", {NULL}, 1845, "udp"},
-{"tunstall-pnc", {NULL}, 1846, "tcp"},
-{"tunstall-pnc", {NULL}, 1846, "udp"},
-{"slp-notify", {NULL}, 1847, "tcp"},
-{"slp-notify", {NULL}, 1847, "udp"},
-{"fjdocdist", {NULL}, 1848, "tcp"},
-{"fjdocdist", {NULL}, 1848, "udp"},
-{"alpha-sms", {NULL}, 1849, "tcp"},
-{"alpha-sms", {NULL}, 1849, "udp"},
-{"gsi", {NULL}, 1850, "tcp"},
-{"gsi", {NULL}, 1850, "udp"},
-{"ctcd", {NULL}, 1851, "tcp"},
-{"ctcd", {NULL}, 1851, "udp"},
-{"virtual-time", {NULL}, 1852, "tcp"},
-{"virtual-time", {NULL}, 1852, "udp"},
-{"vids-avtp", {NULL}, 1853, "tcp"},
-{"vids-avtp", {NULL}, 1853, "udp"},
-{"buddy-draw", {NULL}, 1854, "tcp"},
-{"buddy-draw", {NULL}, 1854, "udp"},
-{"fiorano-rtrsvc", {NULL}, 1855, "tcp"},
-{"fiorano-rtrsvc", {NULL}, 1855, "udp"},
-{"fiorano-msgsvc", {NULL}, 1856, "tcp"},
-{"fiorano-msgsvc", {NULL}, 1856, "udp"},
-{"datacaptor", {NULL}, 1857, "tcp"},
-{"datacaptor", {NULL}, 1857, "udp"},
-{"privateark", {NULL}, 1858, "tcp"},
-{"privateark", {NULL}, 1858, "udp"},
-{"gammafetchsvr", {NULL}, 1859, "tcp"},
-{"gammafetchsvr", {NULL}, 1859, "udp"},
-{"sunscalar-svc", {NULL}, 1860, "tcp"},
-{"sunscalar-svc", {NULL}, 1860, "udp"},
-{"lecroy-vicp", {NULL}, 1861, "tcp"},
-{"lecroy-vicp", {NULL}, 1861, "udp"},
-{"mysql-cm-agent", {NULL}, 1862, "tcp"},
-{"mysql-cm-agent", {NULL}, 1862, "udp"},
-{"msnp", {NULL}, 1863, "tcp"},
-{"msnp", {NULL}, 1863, "udp"},
-{"paradym-31port", {NULL}, 1864, "tcp"},
-{"paradym-31port", {NULL}, 1864, "udp"},
-{"entp", {NULL}, 1865, "tcp"},
-{"entp", {NULL}, 1865, "udp"},
-{"swrmi", {NULL}, 1866, "tcp"},
-{"swrmi", {NULL}, 1866, "udp"},
-{"udrive", {NULL}, 1867, "tcp"},
-{"udrive", {NULL}, 1867, "udp"},
-{"viziblebrowser", {NULL}, 1868, "tcp"},
-{"viziblebrowser", {NULL}, 1868, "udp"},
-{"transact", {NULL}, 1869, "tcp"},
-{"transact", {NULL}, 1869, "udp"},
-{"sunscalar-dns", {NULL}, 1870, "tcp"},
-{"sunscalar-dns", {NULL}, 1870, "udp"},
-{"canocentral0", {NULL}, 1871, "tcp"},
-{"canocentral0", {NULL}, 1871, "udp"},
-{"canocentral1", {NULL}, 1872, "tcp"},
-{"canocentral1", {NULL}, 1872, "udp"},
-{"fjmpjps", {NULL}, 1873, "tcp"},
-{"fjmpjps", {NULL}, 1873, "udp"},
-{"fjswapsnp", {NULL}, 1874, "tcp"},
-{"fjswapsnp", {NULL}, 1874, "udp"},
-{"westell-stats", {NULL}, 1875, "tcp"},
-{"westell-stats", {NULL}, 1875, "udp"},
-{"ewcappsrv", {NULL}, 1876, "tcp"},
-{"ewcappsrv", {NULL}, 1876, "udp"},
-{"hp-webqosdb", {NULL}, 1877, "tcp"},
-{"hp-webqosdb", {NULL}, 1877, "udp"},
-{"drmsmc", {NULL}, 1878, "tcp"},
-{"drmsmc", {NULL}, 1878, "udp"},
-{"nettgain-nms", {NULL}, 1879, "tcp"},
-{"nettgain-nms", {NULL}, 1879, "udp"},
-{"vsat-control", {NULL}, 1880, "tcp"},
-{"vsat-control", {NULL}, 1880, "udp"},
-{"ibm-mqseries2", {NULL}, 1881, "tcp"},
-{"ibm-mqseries2", {NULL}, 1881, "udp"},
-{"ecsqdmn", {NULL}, 1882, "tcp"},
-{"ecsqdmn", {NULL}, 1882, "udp"},
-{"ibm-mqisdp", {NULL}, 1883, "tcp"},
-{"ibm-mqisdp", {NULL}, 1883, "udp"},
-{"idmaps", {NULL}, 1884, "tcp"},
-{"idmaps", {NULL}, 1884, "udp"},
-{"vrtstrapserver", {NULL}, 1885, "tcp"},
-{"vrtstrapserver", {NULL}, 1885, "udp"},
-{"leoip", {NULL}, 1886, "tcp"},
-{"leoip", {NULL}, 1886, "udp"},
-{"filex-lport", {NULL}, 1887, "tcp"},
-{"filex-lport", {NULL}, 1887, "udp"},
-{"ncconfig", {NULL}, 1888, "tcp"},
-{"ncconfig", {NULL}, 1888, "udp"},
-{"unify-adapter", {NULL}, 1889, "tcp"},
-{"unify-adapter", {NULL}, 1889, "udp"},
-{"wilkenlistener", {NULL}, 1890, "tcp"},
-{"wilkenlistener", {NULL}, 1890, "udp"},
-{"childkey-notif", {NULL}, 1891, "tcp"},
-{"childkey-notif", {NULL}, 1891, "udp"},
-{"childkey-ctrl", {NULL}, 1892, "tcp"},
-{"childkey-ctrl", {NULL}, 1892, "udp"},
-{"elad", {NULL}, 1893, "tcp"},
-{"elad", {NULL}, 1893, "udp"},
-{"o2server-port", {NULL}, 1894, "tcp"},
-{"o2server-port", {NULL}, 1894, "udp"},
-{"b-novative-ls", {NULL}, 1896, "tcp"},
-{"b-novative-ls", {NULL}, 1896, "udp"},
-{"metaagent", {NULL}, 1897, "tcp"},
-{"metaagent", {NULL}, 1897, "udp"},
-{"cymtec-port", {NULL}, 1898, "tcp"},
-{"cymtec-port", {NULL}, 1898, "udp"},
-{"mc2studios", {NULL}, 1899, "tcp"},
-{"mc2studios", {NULL}, 1899, "udp"},
-{"ssdp", {NULL}, 1900, "tcp"},
-{"ssdp", {NULL}, 1900, "udp"},
-{"fjicl-tep-a", {NULL}, 1901, "tcp"},
-{"fjicl-tep-a", {NULL}, 1901, "udp"},
-{"fjicl-tep-b", {NULL}, 1902, "tcp"},
-{"fjicl-tep-b", {NULL}, 1902, "udp"},
-{"linkname", {NULL}, 1903, "tcp"},
-{"linkname", {NULL}, 1903, "udp"},
-{"fjicl-tep-c", {NULL}, 1904, "tcp"},
-{"fjicl-tep-c", {NULL}, 1904, "udp"},
-{"sugp", {NULL}, 1905, "tcp"},
-{"sugp", {NULL}, 1905, "udp"},
-{"tpmd", {NULL}, 1906, "tcp"},
-{"tpmd", {NULL}, 1906, "udp"},
-{"intrastar", {NULL}, 1907, "tcp"},
-{"intrastar", {NULL}, 1907, "udp"},
-{"dawn", {NULL}, 1908, "tcp"},
-{"dawn", {NULL}, 1908, "udp"},
-{"global-wlink", {NULL}, 1909, "tcp"},
-{"global-wlink", {NULL}, 1909, "udp"},
-{"ultrabac", {NULL}, 1910, "tcp"},
-{"ultrabac", {NULL}, 1910, "udp"},
-{"mtp", {NULL}, 1911, "tcp"},
-{"mtp", {NULL}, 1911, "udp"},
-{"rhp-iibp", {NULL}, 1912, "tcp"},
-{"rhp-iibp", {NULL}, 1912, "udp"},
-{"armadp", {NULL}, 1913, "tcp"},
-{"armadp", {NULL}, 1913, "udp"},
-{"elm-momentum", {NULL}, 1914, "tcp"},
-{"elm-momentum", {NULL}, 1914, "udp"},
-{"facelink", {NULL}, 1915, "tcp"},
-{"facelink", {NULL}, 1915, "udp"},
-{"persona", {NULL}, 1916, "tcp"},
-{"persona", {NULL}, 1916, "udp"},
-{"noagent", {NULL}, 1917, "tcp"},
-{"noagent", {NULL}, 1917, "udp"},
-{"can-nds", {NULL}, 1918, "tcp"},
-{"can-nds", {NULL}, 1918, "udp"},
-{"can-dch", {NULL}, 1919, "tcp"},
-{"can-dch", {NULL}, 1919, "udp"},
-{"can-ferret", {NULL}, 1920, "tcp"},
-{"can-ferret", {NULL}, 1920, "udp"},
-{"noadmin", {NULL}, 1921, "tcp"},
-{"noadmin", {NULL}, 1921, "udp"},
-{"tapestry", {NULL}, 1922, "tcp"},
-{"tapestry", {NULL}, 1922, "udp"},
-{"spice", {NULL}, 1923, "tcp"},
-{"spice", {NULL}, 1923, "udp"},
-{"xiip", {NULL}, 1924, "tcp"},
-{"xiip", {NULL}, 1924, "udp"},
-{"discovery-port", {NULL}, 1925, "tcp"},
-{"discovery-port", {NULL}, 1925, "udp"},
-{"egs", {NULL}, 1926, "tcp"},
-{"egs", {NULL}, 1926, "udp"},
-{"videte-cipc", {NULL}, 1927, "tcp"},
-{"videte-cipc", {NULL}, 1927, "udp"},
-{"emsd-port", {NULL}, 1928, "tcp"},
-{"emsd-port", {NULL}, 1928, "udp"},
-{"bandwiz-system", {NULL}, 1929, "tcp"},
-{"bandwiz-system", {NULL}, 1929, "udp"},
-{"driveappserver", {NULL}, 1930, "tcp"},
-{"driveappserver", {NULL}, 1930, "udp"},
-{"amdsched", {NULL}, 1931, "tcp"},
-{"amdsched", {NULL}, 1931, "udp"},
-{"ctt-broker", {NULL}, 1932, "tcp"},
-{"ctt-broker", {NULL}, 1932, "udp"},
-{"xmapi", {NULL}, 1933, "tcp"},
-{"xmapi", {NULL}, 1933, "udp"},
-{"xaapi", {NULL}, 1934, "tcp"},
-{"xaapi", {NULL}, 1934, "udp"},
-{"macromedia-fcs", {NULL}, 1935, "tcp"},
-{"macromedia-fcs", {NULL}, 1935, "udp"},
-{"jetcmeserver", {NULL}, 1936, "tcp"},
-{"jetcmeserver", {NULL}, 1936, "udp"},
-{"jwserver", {NULL}, 1937, "tcp"},
-{"jwserver", {NULL}, 1937, "udp"},
-{"jwclient", {NULL}, 1938, "tcp"},
-{"jwclient", {NULL}, 1938, "udp"},
-{"jvserver", {NULL}, 1939, "tcp"},
-{"jvserver", {NULL}, 1939, "udp"},
-{"jvclient", {NULL}, 1940, "tcp"},
-{"jvclient", {NULL}, 1940, "udp"},
-{"dic-aida", {NULL}, 1941, "tcp"},
-{"dic-aida", {NULL}, 1941, "udp"},
-{"res", {NULL}, 1942, "tcp"},
-{"res", {NULL}, 1942, "udp"},
-{"beeyond-media", {NULL}, 1943, "tcp"},
-{"beeyond-media", {NULL}, 1943, "udp"},
-{"close-combat", {NULL}, 1944, "tcp"},
-{"close-combat", {NULL}, 1944, "udp"},
-{"dialogic-elmd", {NULL}, 1945, "tcp"},
-{"dialogic-elmd", {NULL}, 1945, "udp"},
-{"tekpls", {NULL}, 1946, "tcp"},
-{"tekpls", {NULL}, 1946, "udp"},
-{"sentinelsrm", {NULL}, 1947, "tcp"},
-{"sentinelsrm", {NULL}, 1947, "udp"},
-{"eye2eye", {NULL}, 1948, "tcp"},
-{"eye2eye", {NULL}, 1948, "udp"},
-{"ismaeasdaqlive", {NULL}, 1949, "tcp"},
-{"ismaeasdaqlive", {NULL}, 1949, "udp"},
-{"ismaeasdaqtest", {NULL}, 1950, "tcp"},
-{"ismaeasdaqtest", {NULL}, 1950, "udp"},
-{"bcs-lmserver", {NULL}, 1951, "tcp"},
-{"bcs-lmserver", {NULL}, 1951, "udp"},
-{"mpnjsc", {NULL}, 1952, "tcp"},
-{"mpnjsc", {NULL}, 1952, "udp"},
-{"rapidbase", {NULL}, 1953, "tcp"},
-{"rapidbase", {NULL}, 1953, "udp"},
-{"abr-api", {NULL}, 1954, "tcp"},
-{"abr-api", {NULL}, 1954, "udp"},
-{"abr-secure", {NULL}, 1955, "tcp"},
-{"abr-secure", {NULL}, 1955, "udp"},
-{"vrtl-vmf-ds", {NULL}, 1956, "tcp"},
-{"vrtl-vmf-ds", {NULL}, 1956, "udp"},
-{"unix-status", {NULL}, 1957, "tcp"},
-{"unix-status", {NULL}, 1957, "udp"},
-{"dxadmind", {NULL}, 1958, "tcp"},
-{"dxadmind", {NULL}, 1958, "udp"},
-{"simp-all", {NULL}, 1959, "tcp"},
-{"simp-all", {NULL}, 1959, "udp"},
-{"nasmanager", {NULL}, 1960, "tcp"},
-{"nasmanager", {NULL}, 1960, "udp"},
-{"bts-appserver", {NULL}, 1961, "tcp"},
-{"bts-appserver", {NULL}, 1961, "udp"},
-{"biap-mp", {NULL}, 1962, "tcp"},
-{"biap-mp", {NULL}, 1962, "udp"},
-{"webmachine", {NULL}, 1963, "tcp"},
-{"webmachine", {NULL}, 1963, "udp"},
-{"solid-e-engine", {NULL}, 1964, "tcp"},
-{"solid-e-engine", {NULL}, 1964, "udp"},
-{"tivoli-npm", {NULL}, 1965, "tcp"},
-{"tivoli-npm", {NULL}, 1965, "udp"},
-{"slush", {NULL}, 1966, "tcp"},
-{"slush", {NULL}, 1966, "udp"},
-{"sns-quote", {NULL}, 1967, "tcp"},
-{"sns-quote", {NULL}, 1967, "udp"},
-{"lipsinc", {NULL}, 1968, "tcp"},
-{"lipsinc", {NULL}, 1968, "udp"},
-{"lipsinc1", {NULL}, 1969, "tcp"},
-{"lipsinc1", {NULL}, 1969, "udp"},
-{"netop-rc", {NULL}, 1970, "tcp"},
-{"netop-rc", {NULL}, 1970, "udp"},
-{"netop-school", {NULL}, 1971, "tcp"},
-{"netop-school", {NULL}, 1971, "udp"},
-{"intersys-cache", {NULL}, 1972, "tcp"},
-{"intersys-cache", {NULL}, 1972, "udp"},
-{"dlsrap", {NULL}, 1973, "tcp"},
-{"dlsrap", {NULL}, 1973, "udp"},
-{"drp", {NULL}, 1974, "tcp"},
-{"drp", {NULL}, 1974, "udp"},
-{"tcoflashagent", {NULL}, 1975, "tcp"},
-{"tcoflashagent", {NULL}, 1975, "udp"},
-{"tcoregagent", {NULL}, 1976, "tcp"},
-{"tcoregagent", {NULL}, 1976, "udp"},
-{"tcoaddressbook", {NULL}, 1977, "tcp"},
-{"tcoaddressbook", {NULL}, 1977, "udp"},
-{"unisql", {NULL}, 1978, "tcp"},
-{"unisql", {NULL}, 1978, "udp"},
-{"unisql-java", {NULL}, 1979, "tcp"},
-{"unisql-java", {NULL}, 1979, "udp"},
-{"pearldoc-xact", {NULL}, 1980, "tcp"},
-{"pearldoc-xact", {NULL}, 1980, "udp"},
-{"p2pq", {NULL}, 1981, "tcp"},
-{"p2pq", {NULL}, 1981, "udp"},
-{"estamp", {NULL}, 1982, "tcp"},
-{"estamp", {NULL}, 1982, "udp"},
-{"lhtp", {NULL}, 1983, "tcp"},
-{"lhtp", {NULL}, 1983, "udp"},
-{"bb", {NULL}, 1984, "tcp"},
-{"bb", {NULL}, 1984, "udp"},
-{"hsrp", {NULL}, 1985, "tcp"},
-{"hsrp", {NULL}, 1985, "udp"},
-{"licensedaemon", {NULL}, 1986, "tcp"},
-{"licensedaemon", {NULL}, 1986, "udp"},
-{"tr-rsrb-p1", {NULL}, 1987, "tcp"},
-{"tr-rsrb-p1", {NULL}, 1987, "udp"},
-{"tr-rsrb-p2", {NULL}, 1988, "tcp"},
-{"tr-rsrb-p2", {NULL}, 1988, "udp"},
-{"tr-rsrb-p3", {NULL}, 1989, "tcp"},
-{"tr-rsrb-p3", {NULL}, 1989, "udp"},
-{"mshnet", {NULL}, 1989, "tcp"},
-{"mshnet", {NULL}, 1989, "udp"},
-{"stun-p1", {NULL}, 1990, "tcp"},
-{"stun-p1", {NULL}, 1990, "udp"},
-{"stun-p2", {NULL}, 1991, "tcp"},
-{"stun-p2", {NULL}, 1991, "udp"},
-{"stun-p3", {NULL}, 1992, "tcp"},
-{"stun-p3", {NULL}, 1992, "udp"},
-{"ipsendmsg", {NULL}, 1992, "tcp"},
-{"ipsendmsg", {NULL}, 1992, "udp"},
-{"snmp-tcp-port", {NULL}, 1993, "tcp"},
-{"snmp-tcp-port", {NULL}, 1993, "udp"},
-{"stun-port", {NULL}, 1994, "tcp"},
-{"stun-port", {NULL}, 1994, "udp"},
-{"perf-port", {NULL}, 1995, "tcp"},
-{"perf-port", {NULL}, 1995, "udp"},
-{"tr-rsrb-port", {NULL}, 1996, "tcp"},
-{"tr-rsrb-port", {NULL}, 1996, "udp"},
-{"gdp-port", {NULL}, 1997, "tcp"},
-{"gdp-port", {NULL}, 1997, "udp"},
-{"x25-svc-port", {NULL}, 1998, "tcp"},
-{"x25-svc-port", {NULL}, 1998, "udp"},
-{"tcp-id-port", {NULL}, 1999, "tcp"},
-{"tcp-id-port", {NULL}, 1999, "udp"},
-{"cisco-sccp", {NULL}, 2000, "tcp"},
-{"cisco-sccp", {NULL}, 2000, "udp"},
-{"dc", {NULL}, 2001, "tcp"},
-{"wizard", {NULL}, 2001, "udp"},
-{"globe", {NULL}, 2002, "tcp"},
-{"globe", {NULL}, 2002, "udp"},
-{"brutus", {NULL}, 2003, "tcp"},
-{"brutus", {NULL}, 2003, "udp"},
-{"mailbox", {NULL}, 2004, "tcp"},
-{"emce", {NULL}, 2004, "udp"},
-{"berknet", {NULL}, 2005, "tcp"},
-{"oracle", {NULL}, 2005, "udp"},
-{"invokator", {NULL}, 2006, "tcp"},
-{"raid-cd", {NULL}, 2006, "udp"},
-{"dectalk", {NULL}, 2007, "tcp"},
-{"raid-am", {NULL}, 2007, "udp"},
-{"conf", {NULL}, 2008, "tcp"},
-{"terminaldb", {NULL}, 2008, "udp"},
-{"news", {NULL}, 2009, "tcp"},
-{"whosockami", {NULL}, 2009, "udp"},
-{"search", {NULL}, 2010, "tcp"},
-{"pipe_server", {NULL}, 2010, "udp"},
-{"raid-cc", {NULL}, 2011, "tcp"},
-{"servserv", {NULL}, 2011, "udp"},
-{"ttyinfo", {NULL}, 2012, "tcp"},
-{"raid-ac", {NULL}, 2012, "udp"},
-{"raid-am", {NULL}, 2013, "tcp"},
-{"raid-cd", {NULL}, 2013, "udp"},
-{"troff", {NULL}, 2014, "tcp"},
-{"raid-sf", {NULL}, 2014, "udp"},
-{"cypress", {NULL}, 2015, "tcp"},
-{"raid-cs", {NULL}, 2015, "udp"},
-{"bootserver", {NULL}, 2016, "tcp"},
-{"bootserver", {NULL}, 2016, "udp"},
-{"cypress-stat", {NULL}, 2017, "tcp"},
-{"bootclient", {NULL}, 2017, "udp"},
-{"terminaldb", {NULL}, 2018, "tcp"},
-{"rellpack", {NULL}, 2018, "udp"},
-{"whosockami", {NULL}, 2019, "tcp"},
-{"about", {NULL}, 2019, "udp"},
-{"xinupageserver", {NULL}, 2020, "tcp"},
-{"xinupageserver", {NULL}, 2020, "udp"},
-{"servexec", {NULL}, 2021, "tcp"},
-{"xinuexpansion1", {NULL}, 2021, "udp"},
-{"down", {NULL}, 2022, "tcp"},
-{"xinuexpansion2", {NULL}, 2022, "udp"},
-{"xinuexpansion3", {NULL}, 2023, "tcp"},
-{"xinuexpansion3", {NULL}, 2023, "udp"},
-{"xinuexpansion4", {NULL}, 2024, "tcp"},
-{"xinuexpansion4", {NULL}, 2024, "udp"},
-{"ellpack", {NULL}, 2025, "tcp"},
-{"xribs", {NULL}, 2025, "udp"},
-{"scrabble", {NULL}, 2026, "tcp"},
-{"scrabble", {NULL}, 2026, "udp"},
-{"shadowserver", {NULL}, 2027, "tcp"},
-{"shadowserver", {NULL}, 2027, "udp"},
-{"submitserver", {NULL}, 2028, "tcp"},
-{"submitserver", {NULL}, 2028, "udp"},
-{"hsrpv6", {NULL}, 2029, "tcp"},
-{"hsrpv6", {NULL}, 2029, "udp"},
-{"device2", {NULL}, 2030, "tcp"},
-{"device2", {NULL}, 2030, "udp"},
-{"mobrien-chat", {NULL}, 2031, "tcp"},
-{"mobrien-chat", {NULL}, 2031, "udp"},
-{"blackboard", {NULL}, 2032, "tcp"},
-{"blackboard", {NULL}, 2032, "udp"},
-{"glogger", {NULL}, 2033, "tcp"},
-{"glogger", {NULL}, 2033, "udp"},
-{"scoremgr", {NULL}, 2034, "tcp"},
-{"scoremgr", {NULL}, 2034, "udp"},
-{"imsldoc", {NULL}, 2035, "tcp"},
-{"imsldoc", {NULL}, 2035, "udp"},
-{"e-dpnet", {NULL}, 2036, "tcp"},
-{"e-dpnet", {NULL}, 2036, "udp"},
-{"applus", {NULL}, 2037, "tcp"},
-{"applus", {NULL}, 2037, "udp"},
-{"objectmanager", {NULL}, 2038, "tcp"},
-{"objectmanager", {NULL}, 2038, "udp"},
-{"prizma", {NULL}, 2039, "tcp"},
-{"prizma", {NULL}, 2039, "udp"},
-{"lam", {NULL}, 2040, "tcp"},
-{"lam", {NULL}, 2040, "udp"},
-{"interbase", {NULL}, 2041, "tcp"},
-{"interbase", {NULL}, 2041, "udp"},
-{"isis", {NULL}, 2042, "tcp"},
-{"isis", {NULL}, 2042, "udp"},
-{"isis-bcast", {NULL}, 2043, "tcp"},
-{"isis-bcast", {NULL}, 2043, "udp"},
-{"rimsl", {NULL}, 2044, "tcp"},
-{"rimsl", {NULL}, 2044, "udp"},
-{"cdfunc", {NULL}, 2045, "tcp"},
-{"cdfunc", {NULL}, 2045, "udp"},
-{"sdfunc", {NULL}, 2046, "tcp"},
-{"sdfunc", {NULL}, 2046, "udp"},
-{"dls", {NULL}, 2047, "tcp"},
-{"dls", {NULL}, 2047, "udp"},
-{"dls-monitor", {NULL}, 2048, "tcp"},
-{"dls-monitor", {NULL}, 2048, "udp"},
-{"shilp", {NULL}, 2049, "tcp"},
-{"shilp", {NULL}, 2049, "udp"},
-{"nfs", {NULL}, 2049, "tcp"},
-{"nfs", {NULL}, 2049, "udp"},
-{"nfs", {NULL}, 2049, "sctp"},
-{"av-emb-config", {NULL}, 2050, "tcp"},
-{"av-emb-config", {NULL}, 2050, "udp"},
-{"epnsdp", {NULL}, 2051, "tcp"},
-{"epnsdp", {NULL}, 2051, "udp"},
-{"clearvisn", {NULL}, 2052, "tcp"},
-{"clearvisn", {NULL}, 2052, "udp"},
-{"lot105-ds-upd", {NULL}, 2053, "tcp"},
-{"lot105-ds-upd", {NULL}, 2053, "udp"},
-{"weblogin", {NULL}, 2054, "tcp"},
-{"weblogin", {NULL}, 2054, "udp"},
-{"iop", {NULL}, 2055, "tcp"},
-{"iop", {NULL}, 2055, "udp"},
-{"omnisky", {NULL}, 2056, "tcp"},
-{"omnisky", {NULL}, 2056, "udp"},
-{"rich-cp", {NULL}, 2057, "tcp"},
-{"rich-cp", {NULL}, 2057, "udp"},
-{"newwavesearch", {NULL}, 2058, "tcp"},
-{"newwavesearch", {NULL}, 2058, "udp"},
-{"bmc-messaging", {NULL}, 2059, "tcp"},
-{"bmc-messaging", {NULL}, 2059, "udp"},
-{"teleniumdaemon", {NULL}, 2060, "tcp"},
-{"teleniumdaemon", {NULL}, 2060, "udp"},
-{"netmount", {NULL}, 2061, "tcp"},
-{"netmount", {NULL}, 2061, "udp"},
-{"icg-swp", {NULL}, 2062, "tcp"},
-{"icg-swp", {NULL}, 2062, "udp"},
-{"icg-bridge", {NULL}, 2063, "tcp"},
-{"icg-bridge", {NULL}, 2063, "udp"},
-{"icg-iprelay", {NULL}, 2064, "tcp"},
-{"icg-iprelay", {NULL}, 2064, "udp"},
-{"dlsrpn", {NULL}, 2065, "tcp"},
-{"dlsrpn", {NULL}, 2065, "udp"},
-{"aura", {NULL}, 2066, "tcp"},
-{"aura", {NULL}, 2066, "udp"},
-{"dlswpn", {NULL}, 2067, "tcp"},
-{"dlswpn", {NULL}, 2067, "udp"},
-{"avauthsrvprtcl", {NULL}, 2068, "tcp"},
-{"avauthsrvprtcl", {NULL}, 2068, "udp"},
-{"event-port", {NULL}, 2069, "tcp"},
-{"event-port", {NULL}, 2069, "udp"},
-{"ah-esp-encap", {NULL}, 2070, "tcp"},
-{"ah-esp-encap", {NULL}, 2070, "udp"},
-{"acp-port", {NULL}, 2071, "tcp"},
-{"acp-port", {NULL}, 2071, "udp"},
-{"msync", {NULL}, 2072, "tcp"},
-{"msync", {NULL}, 2072, "udp"},
-{"gxs-data-port", {NULL}, 2073, "tcp"},
-{"gxs-data-port", {NULL}, 2073, "udp"},
-{"vrtl-vmf-sa", {NULL}, 2074, "tcp"},
-{"vrtl-vmf-sa", {NULL}, 2074, "udp"},
-{"newlixengine", {NULL}, 2075, "tcp"},
-{"newlixengine", {NULL}, 2075, "udp"},
-{"newlixconfig", {NULL}, 2076, "tcp"},
-{"newlixconfig", {NULL}, 2076, "udp"},
-{"tsrmagt", {NULL}, 2077, "tcp"},
-{"tsrmagt", {NULL}, 2077, "udp"},
-{"tpcsrvr", {NULL}, 2078, "tcp"},
-{"tpcsrvr", {NULL}, 2078, "udp"},
-{"idware-router", {NULL}, 2079, "tcp"},
-{"idware-router", {NULL}, 2079, "udp"},
-{"autodesk-nlm", {NULL}, 2080, "tcp"},
-{"autodesk-nlm", {NULL}, 2080, "udp"},
-{"kme-trap-port", {NULL}, 2081, "tcp"},
-{"kme-trap-port", {NULL}, 2081, "udp"},
-{"infowave", {NULL}, 2082, "tcp"},
-{"infowave", {NULL}, 2082, "udp"},
-{"radsec", {NULL}, 2083, "tcp"},
-{"radsec", {NULL}, 2083, "udp"},
-{"sunclustergeo", {NULL}, 2084, "tcp"},
-{"sunclustergeo", {NULL}, 2084, "udp"},
-{"ada-cip", {NULL}, 2085, "tcp"},
-{"ada-cip", {NULL}, 2085, "udp"},
-{"gnunet", {NULL}, 2086, "tcp"},
-{"gnunet", {NULL}, 2086, "udp"},
-{"eli", {NULL}, 2087, "tcp"},
-{"eli", {NULL}, 2087, "udp"},
-{"ip-blf", {NULL}, 2088, "tcp"},
-{"ip-blf", {NULL}, 2088, "udp"},
-{"sep", {NULL}, 2089, "tcp"},
-{"sep", {NULL}, 2089, "udp"},
-{"lrp", {NULL}, 2090, "tcp"},
-{"lrp", {NULL}, 2090, "udp"},
-{"prp", {NULL}, 2091, "tcp"},
-{"prp", {NULL}, 2091, "udp"},
-{"descent3", {NULL}, 2092, "tcp"},
-{"descent3", {NULL}, 2092, "udp"},
-{"nbx-cc", {NULL}, 2093, "tcp"},
-{"nbx-cc", {NULL}, 2093, "udp"},
-{"nbx-au", {NULL}, 2094, "tcp"},
-{"nbx-au", {NULL}, 2094, "udp"},
-{"nbx-ser", {NULL}, 2095, "tcp"},
-{"nbx-ser", {NULL}, 2095, "udp"},
-{"nbx-dir", {NULL}, 2096, "tcp"},
-{"nbx-dir", {NULL}, 2096, "udp"},
-{"jetformpreview", {NULL}, 2097, "tcp"},
-{"jetformpreview", {NULL}, 2097, "udp"},
-{"dialog-port", {NULL}, 2098, "tcp"},
-{"dialog-port", {NULL}, 2098, "udp"},
-{"h2250-annex-g", {NULL}, 2099, "tcp"},
-{"h2250-annex-g", {NULL}, 2099, "udp"},
-{"amiganetfs", {NULL}, 2100, "tcp"},
-{"amiganetfs", {NULL}, 2100, "udp"},
-{"rtcm-sc104", {NULL}, 2101, "tcp"},
-{"rtcm-sc104", {NULL}, 2101, "udp"},
-{"zephyr-srv", {NULL}, 2102, "tcp"},
-{"zephyr-srv", {NULL}, 2102, "udp"},
-{"zephyr-clt", {NULL}, 2103, "tcp"},
-{"zephyr-clt", {NULL}, 2103, "udp"},
-{"zephyr-hm", {NULL}, 2104, "tcp"},
-{"zephyr-hm", {NULL}, 2104, "udp"},
-{"minipay", {NULL}, 2105, "tcp"},
-{"minipay", {NULL}, 2105, "udp"},
-{"mzap", {NULL}, 2106, "tcp"},
-{"mzap", {NULL}, 2106, "udp"},
-{"bintec-admin", {NULL}, 2107, "tcp"},
-{"bintec-admin", {NULL}, 2107, "udp"},
-{"comcam", {NULL}, 2108, "tcp"},
-{"comcam", {NULL}, 2108, "udp"},
-{"ergolight", {NULL}, 2109, "tcp"},
-{"ergolight", {NULL}, 2109, "udp"},
-{"umsp", {NULL}, 2110, "tcp"},
-{"umsp", {NULL}, 2110, "udp"},
-{"dsatp", {NULL}, 2111, "tcp"},
-{"dsatp", {NULL}, 2111, "udp"},
-{"idonix-metanet", {NULL}, 2112, "tcp"},
-{"idonix-metanet", {NULL}, 2112, "udp"},
-{"hsl-storm", {NULL}, 2113, "tcp"},
-{"hsl-storm", {NULL}, 2113, "udp"},
-{"newheights", {NULL}, 2114, "tcp"},
-{"newheights", {NULL}, 2114, "udp"},
-{"kdm", {NULL}, 2115, "tcp"},
-{"kdm", {NULL}, 2115, "udp"},
-{"ccowcmr", {NULL}, 2116, "tcp"},
-{"ccowcmr", {NULL}, 2116, "udp"},
-{"mentaclient", {NULL}, 2117, "tcp"},
-{"mentaclient", {NULL}, 2117, "udp"},
-{"mentaserver", {NULL}, 2118, "tcp"},
-{"mentaserver", {NULL}, 2118, "udp"},
-{"gsigatekeeper", {NULL}, 2119, "tcp"},
-{"gsigatekeeper", {NULL}, 2119, "udp"},
-{"qencp", {NULL}, 2120, "tcp"},
-{"qencp", {NULL}, 2120, "udp"},
-{"scientia-ssdb", {NULL}, 2121, "tcp"},
-{"scientia-ssdb", {NULL}, 2121, "udp"},
-{"caupc-remote", {NULL}, 2122, "tcp"},
-{"caupc-remote", {NULL}, 2122, "udp"},
-{"gtp-control", {NULL}, 2123, "tcp"},
-{"gtp-control", {NULL}, 2123, "udp"},
-{"elatelink", {NULL}, 2124, "tcp"},
-{"elatelink", {NULL}, 2124, "udp"},
-{"lockstep", {NULL}, 2125, "tcp"},
-{"lockstep", {NULL}, 2125, "udp"},
-{"pktcable-cops", {NULL}, 2126, "tcp"},
-{"pktcable-cops", {NULL}, 2126, "udp"},
-{"index-pc-wb", {NULL}, 2127, "tcp"},
-{"index-pc-wb", {NULL}, 2127, "udp"},
-{"net-steward", {NULL}, 2128, "tcp"},
-{"net-steward", {NULL}, 2128, "udp"},
-{"cs-live", {NULL}, 2129, "tcp"},
-{"cs-live", {NULL}, 2129, "udp"},
-{"xds", {NULL}, 2130, "tcp"},
-{"xds", {NULL}, 2130, "udp"},
-{"avantageb2b", {NULL}, 2131, "tcp"},
-{"avantageb2b", {NULL}, 2131, "udp"},
-{"solera-epmap", {NULL}, 2132, "tcp"},
-{"solera-epmap", {NULL}, 2132, "udp"},
-{"zymed-zpp", {NULL}, 2133, "tcp"},
-{"zymed-zpp", {NULL}, 2133, "udp"},
-{"avenue", {NULL}, 2134, "tcp"},
-{"avenue", {NULL}, 2134, "udp"},
-{"gris", {NULL}, 2135, "tcp"},
-{"gris", {NULL}, 2135, "udp"},
-{"appworxsrv", {NULL}, 2136, "tcp"},
-{"appworxsrv", {NULL}, 2136, "udp"},
-{"connect", {NULL}, 2137, "tcp"},
-{"connect", {NULL}, 2137, "udp"},
-{"unbind-cluster", {NULL}, 2138, "tcp"},
-{"unbind-cluster", {NULL}, 2138, "udp"},
-{"ias-auth", {NULL}, 2139, "tcp"},
-{"ias-auth", {NULL}, 2139, "udp"},
-{"ias-reg", {NULL}, 2140, "tcp"},
-{"ias-reg", {NULL}, 2140, "udp"},
-{"ias-admind", {NULL}, 2141, "tcp"},
-{"ias-admind", {NULL}, 2141, "udp"},
-{"tdmoip", {NULL}, 2142, "tcp"},
-{"tdmoip", {NULL}, 2142, "udp"},
-{"lv-jc", {NULL}, 2143, "tcp"},
-{"lv-jc", {NULL}, 2143, "udp"},
-{"lv-ffx", {NULL}, 2144, "tcp"},
-{"lv-ffx", {NULL}, 2144, "udp"},
-{"lv-pici", {NULL}, 2145, "tcp"},
-{"lv-pici", {NULL}, 2145, "udp"},
-{"lv-not", {NULL}, 2146, "tcp"},
-{"lv-not", {NULL}, 2146, "udp"},
-{"lv-auth", {NULL}, 2147, "tcp"},
-{"lv-auth", {NULL}, 2147, "udp"},
-{"veritas-ucl", {NULL}, 2148, "tcp"},
-{"veritas-ucl", {NULL}, 2148, "udp"},
-{"acptsys", {NULL}, 2149, "tcp"},
-{"acptsys", {NULL}, 2149, "udp"},
-{"dynamic3d", {NULL}, 2150, "tcp"},
-{"dynamic3d", {NULL}, 2150, "udp"},
-{"docent", {NULL}, 2151, "tcp"},
-{"docent", {NULL}, 2151, "udp"},
-{"gtp-user", {NULL}, 2152, "tcp"},
-{"gtp-user", {NULL}, 2152, "udp"},
-{"ctlptc", {NULL}, 2153, "tcp"},
-{"ctlptc", {NULL}, 2153, "udp"},
-{"stdptc", {NULL}, 2154, "tcp"},
-{"stdptc", {NULL}, 2154, "udp"},
-{"brdptc", {NULL}, 2155, "tcp"},
-{"brdptc", {NULL}, 2155, "udp"},
-{"trp", {NULL}, 2156, "tcp"},
-{"trp", {NULL}, 2156, "udp"},
-{"xnds", {NULL}, 2157, "tcp"},
-{"xnds", {NULL}, 2157, "udp"},
-{"touchnetplus", {NULL}, 2158, "tcp"},
-{"touchnetplus", {NULL}, 2158, "udp"},
-{"gdbremote", {NULL}, 2159, "tcp"},
-{"gdbremote", {NULL}, 2159, "udp"},
-{"apc-2160", {NULL}, 2160, "tcp"},
-{"apc-2160", {NULL}, 2160, "udp"},
-{"apc-2161", {NULL}, 2161, "tcp"},
-{"apc-2161", {NULL}, 2161, "udp"},
-{"navisphere", {NULL}, 2162, "tcp"},
-{"navisphere", {NULL}, 2162, "udp"},
-{"navisphere-sec", {NULL}, 2163, "tcp"},
-{"navisphere-sec", {NULL}, 2163, "udp"},
-{"ddns-v3", {NULL}, 2164, "tcp"},
-{"ddns-v3", {NULL}, 2164, "udp"},
-{"x-bone-api", {NULL}, 2165, "tcp"},
-{"x-bone-api", {NULL}, 2165, "udp"},
-{"iwserver", {NULL}, 2166, "tcp"},
-{"iwserver", {NULL}, 2166, "udp"},
-{"raw-serial", {NULL}, 2167, "tcp"},
-{"raw-serial", {NULL}, 2167, "udp"},
-{"easy-soft-mux", {NULL}, 2168, "tcp"},
-{"easy-soft-mux", {NULL}, 2168, "udp"},
-{"brain", {NULL}, 2169, "tcp"},
-{"brain", {NULL}, 2169, "udp"},
-{"eyetv", {NULL}, 2170, "tcp"},
-{"eyetv", {NULL}, 2170, "udp"},
-{"msfw-storage", {NULL}, 2171, "tcp"},
-{"msfw-storage", {NULL}, 2171, "udp"},
-{"msfw-s-storage", {NULL}, 2172, "tcp"},
-{"msfw-s-storage", {NULL}, 2172, "udp"},
-{"msfw-replica", {NULL}, 2173, "tcp"},
-{"msfw-replica", {NULL}, 2173, "udp"},
-{"msfw-array", {NULL}, 2174, "tcp"},
-{"msfw-array", {NULL}, 2174, "udp"},
-{"airsync", {NULL}, 2175, "tcp"},
-{"airsync", {NULL}, 2175, "udp"},
-{"rapi", {NULL}, 2176, "tcp"},
-{"rapi", {NULL}, 2176, "udp"},
-{"qwave", {NULL}, 2177, "tcp"},
-{"qwave", {NULL}, 2177, "udp"},
-{"bitspeer", {NULL}, 2178, "tcp"},
-{"bitspeer", {NULL}, 2178, "udp"},
-{"vmrdp", {NULL}, 2179, "tcp"},
-{"vmrdp", {NULL}, 2179, "udp"},
-{"mc-gt-srv", {NULL}, 2180, "tcp"},
-{"mc-gt-srv", {NULL}, 2180, "udp"},
-{"eforward", {NULL}, 2181, "tcp"},
-{"eforward", {NULL}, 2181, "udp"},
-{"cgn-stat", {NULL}, 2182, "tcp"},
-{"cgn-stat", {NULL}, 2182, "udp"},
-{"cgn-config", {NULL}, 2183, "tcp"},
-{"cgn-config", {NULL}, 2183, "udp"},
-{"nvd", {NULL}, 2184, "tcp"},
-{"nvd", {NULL}, 2184, "udp"},
-{"onbase-dds", {NULL}, 2185, "tcp"},
-{"onbase-dds", {NULL}, 2185, "udp"},
-{"gtaua", {NULL}, 2186, "tcp"},
-{"gtaua", {NULL}, 2186, "udp"},
-{"ssmc", {NULL}, 2187, "tcp"},
-{"ssmd", {NULL}, 2187, "udp"},
-{"tivoconnect", {NULL}, 2190, "tcp"},
-{"tivoconnect", {NULL}, 2190, "udp"},
-{"tvbus", {NULL}, 2191, "tcp"},
-{"tvbus", {NULL}, 2191, "udp"},
-{"asdis", {NULL}, 2192, "tcp"},
-{"asdis", {NULL}, 2192, "udp"},
-{"drwcs", {NULL}, 2193, "tcp"},
-{"drwcs", {NULL}, 2193, "udp"},
-{"mnp-exchange", {NULL}, 2197, "tcp"},
-{"mnp-exchange", {NULL}, 2197, "udp"},
-{"onehome-remote", {NULL}, 2198, "tcp"},
-{"onehome-remote", {NULL}, 2198, "udp"},
-{"onehome-help", {NULL}, 2199, "tcp"},
-{"onehome-help", {NULL}, 2199, "udp"},
-{"ici", {NULL}, 2200, "tcp"},
-{"ici", {NULL}, 2200, "udp"},
-{"ats", {NULL}, 2201, "tcp"},
-{"ats", {NULL}, 2201, "udp"},
-{"imtc-map", {NULL}, 2202, "tcp"},
-{"imtc-map", {NULL}, 2202, "udp"},
-{"b2-runtime", {NULL}, 2203, "tcp"},
-{"b2-runtime", {NULL}, 2203, "udp"},
-{"b2-license", {NULL}, 2204, "tcp"},
-{"b2-license", {NULL}, 2204, "udp"},
-{"jps", {NULL}, 2205, "tcp"},
-{"jps", {NULL}, 2205, "udp"},
-{"hpocbus", {NULL}, 2206, "tcp"},
-{"hpocbus", {NULL}, 2206, "udp"},
-{"hpssd", {NULL}, 2207, "tcp"},
-{"hpssd", {NULL}, 2207, "udp"},
-{"hpiod", {NULL}, 2208, "tcp"},
-{"hpiod", {NULL}, 2208, "udp"},
-{"rimf-ps", {NULL}, 2209, "tcp"},
-{"rimf-ps", {NULL}, 2209, "udp"},
-{"noaaport", {NULL}, 2210, "tcp"},
-{"noaaport", {NULL}, 2210, "udp"},
-{"emwin", {NULL}, 2211, "tcp"},
-{"emwin", {NULL}, 2211, "udp"},
-{"leecoposserver", {NULL}, 2212, "tcp"},
-{"leecoposserver", {NULL}, 2212, "udp"},
-{"kali", {NULL}, 2213, "tcp"},
-{"kali", {NULL}, 2213, "udp"},
-{"rpi", {NULL}, 2214, "tcp"},
-{"rpi", {NULL}, 2214, "udp"},
-{"ipcore", {NULL}, 2215, "tcp"},
-{"ipcore", {NULL}, 2215, "udp"},
-{"vtu-comms", {NULL}, 2216, "tcp"},
-{"vtu-comms", {NULL}, 2216, "udp"},
-{"gotodevice", {NULL}, 2217, "tcp"},
-{"gotodevice", {NULL}, 2217, "udp"},
-{"bounzza", {NULL}, 2218, "tcp"},
-{"bounzza", {NULL}, 2218, "udp"},
-{"netiq-ncap", {NULL}, 2219, "tcp"},
-{"netiq-ncap", {NULL}, 2219, "udp"},
-{"netiq", {NULL}, 2220, "tcp"},
-{"netiq", {NULL}, 2220, "udp"},
-{"rockwell-csp1", {NULL}, 2221, "tcp"},
-{"rockwell-csp1", {NULL}, 2221, "udp"},
-{"EtherNet/IP-1", {NULL}, 2222, "tcp"},
-{"EtherNet/IP-1", {NULL}, 2222, "udp"},
-{"rockwell-csp2", {NULL}, 2223, "tcp"},
-{"rockwell-csp2", {NULL}, 2223, "udp"},
-{"efi-mg", {NULL}, 2224, "tcp"},
-{"efi-mg", {NULL}, 2224, "udp"},
-{"rcip-itu", {NULL}, 2225, "tcp"},
-{"rcip-itu", {NULL}, 2225, "sctp"},
-{"di-drm", {NULL}, 2226, "tcp"},
-{"di-drm", {NULL}, 2226, "udp"},
-{"di-msg", {NULL}, 2227, "tcp"},
-{"di-msg", {NULL}, 2227, "udp"},
-{"ehome-ms", {NULL}, 2228, "tcp"},
-{"ehome-ms", {NULL}, 2228, "udp"},
-{"datalens", {NULL}, 2229, "tcp"},
-{"datalens", {NULL}, 2229, "udp"},
-{"queueadm", {NULL}, 2230, "tcp"},
-{"queueadm", {NULL}, 2230, "udp"},
-{"wimaxasncp", {NULL}, 2231, "tcp"},
-{"wimaxasncp", {NULL}, 2231, "udp"},
-{"ivs-video", {NULL}, 2232, "tcp"},
-{"ivs-video", {NULL}, 2232, "udp"},
-{"infocrypt", {NULL}, 2233, "tcp"},
-{"infocrypt", {NULL}, 2233, "udp"},
-{"directplay", {NULL}, 2234, "tcp"},
-{"directplay", {NULL}, 2234, "udp"},
-{"sercomm-wlink", {NULL}, 2235, "tcp"},
-{"sercomm-wlink", {NULL}, 2235, "udp"},
-{"nani", {NULL}, 2236, "tcp"},
-{"nani", {NULL}, 2236, "udp"},
-{"optech-port1-lm", {NULL}, 2237, "tcp"},
-{"optech-port1-lm", {NULL}, 2237, "udp"},
-{"aviva-sna", {NULL}, 2238, "tcp"},
-{"aviva-sna", {NULL}, 2238, "udp"},
-{"imagequery", {NULL}, 2239, "tcp"},
-{"imagequery", {NULL}, 2239, "udp"},
-{"recipe", {NULL}, 2240, "tcp"},
-{"recipe", {NULL}, 2240, "udp"},
-{"ivsd", {NULL}, 2241, "tcp"},
-{"ivsd", {NULL}, 2241, "udp"},
-{"foliocorp", {NULL}, 2242, "tcp"},
-{"foliocorp", {NULL}, 2242, "udp"},
-{"magicom", {NULL}, 2243, "tcp"},
-{"magicom", {NULL}, 2243, "udp"},
-{"nmsserver", {NULL}, 2244, "tcp"},
-{"nmsserver", {NULL}, 2244, "udp"},
-{"hao", {NULL}, 2245, "tcp"},
-{"hao", {NULL}, 2245, "udp"},
-{"pc-mta-addrmap", {NULL}, 2246, "tcp"},
-{"pc-mta-addrmap", {NULL}, 2246, "udp"},
-{"antidotemgrsvr", {NULL}, 2247, "tcp"},
-{"antidotemgrsvr", {NULL}, 2247, "udp"},
-{"ums", {NULL}, 2248, "tcp"},
-{"ums", {NULL}, 2248, "udp"},
-{"rfmp", {NULL}, 2249, "tcp"},
-{"rfmp", {NULL}, 2249, "udp"},
-{"remote-collab", {NULL}, 2250, "tcp"},
-{"remote-collab", {NULL}, 2250, "udp"},
-{"dif-port", {NULL}, 2251, "tcp"},
-{"dif-port", {NULL}, 2251, "udp"},
-{"njenet-ssl", {NULL}, 2252, "tcp"},
-{"njenet-ssl", {NULL}, 2252, "udp"},
-{"dtv-chan-req", {NULL}, 2253, "tcp"},
-{"dtv-chan-req", {NULL}, 2253, "udp"},
-{"seispoc", {NULL}, 2254, "tcp"},
-{"seispoc", {NULL}, 2254, "udp"},
-{"vrtp", {NULL}, 2255, "tcp"},
-{"vrtp", {NULL}, 2255, "udp"},
-{"pcc-mfp", {NULL}, 2256, "tcp"},
-{"pcc-mfp", {NULL}, 2256, "udp"},
-{"simple-tx-rx", {NULL}, 2257, "tcp"},
-{"simple-tx-rx", {NULL}, 2257, "udp"},
-{"rcts", {NULL}, 2258, "tcp"},
-{"rcts", {NULL}, 2258, "udp"},
-{"acd-pm", {NULL}, 2259, "tcp"},
-{"acd-pm", {NULL}, 2259, "udp"},
-{"apc-2260", {NULL}, 2260, "tcp"},
-{"apc-2260", {NULL}, 2260, "udp"},
-{"comotionmaster", {NULL}, 2261, "tcp"},
-{"comotionmaster", {NULL}, 2261, "udp"},
-{"comotionback", {NULL}, 2262, "tcp"},
-{"comotionback", {NULL}, 2262, "udp"},
-{"ecwcfg", {NULL}, 2263, "tcp"},
-{"ecwcfg", {NULL}, 2263, "udp"},
-{"apx500api-1", {NULL}, 2264, "tcp"},
-{"apx500api-1", {NULL}, 2264, "udp"},
-{"apx500api-2", {NULL}, 2265, "tcp"},
-{"apx500api-2", {NULL}, 2265, "udp"},
-{"mfserver", {NULL}, 2266, "tcp"},
-{"mfserver", {NULL}, 2266, "udp"},
-{"ontobroker", {NULL}, 2267, "tcp"},
-{"ontobroker", {NULL}, 2267, "udp"},
-{"amt", {NULL}, 2268, "tcp"},
-{"amt", {NULL}, 2268, "udp"},
-{"mikey", {NULL}, 2269, "tcp"},
-{"mikey", {NULL}, 2269, "udp"},
-{"starschool", {NULL}, 2270, "tcp"},
-{"starschool", {NULL}, 2270, "udp"},
-{"mmcals", {NULL}, 2271, "tcp"},
-{"mmcals", {NULL}, 2271, "udp"},
-{"mmcal", {NULL}, 2272, "tcp"},
-{"mmcal", {NULL}, 2272, "udp"},
-{"mysql-im", {NULL}, 2273, "tcp"},
-{"mysql-im", {NULL}, 2273, "udp"},
-{"pcttunnell", {NULL}, 2274, "tcp"},
-{"pcttunnell", {NULL}, 2274, "udp"},
-{"ibridge-data", {NULL}, 2275, "tcp"},
-{"ibridge-data", {NULL}, 2275, "udp"},
-{"ibridge-mgmt", {NULL}, 2276, "tcp"},
-{"ibridge-mgmt", {NULL}, 2276, "udp"},
-{"bluectrlproxy", {NULL}, 2277, "tcp"},
-{"bluectrlproxy", {NULL}, 2277, "udp"},
-{"s3db", {NULL}, 2278, "tcp"},
-{"s3db", {NULL}, 2278, "udp"},
-{"xmquery", {NULL}, 2279, "tcp"},
-{"xmquery", {NULL}, 2279, "udp"},
-{"lnvpoller", {NULL}, 2280, "tcp"},
-{"lnvpoller", {NULL}, 2280, "udp"},
-{"lnvconsole", {NULL}, 2281, "tcp"},
-{"lnvconsole", {NULL}, 2281, "udp"},
-{"lnvalarm", {NULL}, 2282, "tcp"},
-{"lnvalarm", {NULL}, 2282, "udp"},
-{"lnvstatus", {NULL}, 2283, "tcp"},
-{"lnvstatus", {NULL}, 2283, "udp"},
-{"lnvmaps", {NULL}, 2284, "tcp"},
-{"lnvmaps", {NULL}, 2284, "udp"},
-{"lnvmailmon", {NULL}, 2285, "tcp"},
-{"lnvmailmon", {NULL}, 2285, "udp"},
-{"nas-metering", {NULL}, 2286, "tcp"},
-{"nas-metering", {NULL}, 2286, "udp"},
-{"dna", {NULL}, 2287, "tcp"},
-{"dna", {NULL}, 2287, "udp"},
-{"netml", {NULL}, 2288, "tcp"},
-{"netml", {NULL}, 2288, "udp"},
-{"dict-lookup", {NULL}, 2289, "tcp"},
-{"dict-lookup", {NULL}, 2289, "udp"},
-{"sonus-logging", {NULL}, 2290, "tcp"},
-{"sonus-logging", {NULL}, 2290, "udp"},
-{"eapsp", {NULL}, 2291, "tcp"},
-{"eapsp", {NULL}, 2291, "udp"},
-{"mib-streaming", {NULL}, 2292, "tcp"},
-{"mib-streaming", {NULL}, 2292, "udp"},
-{"npdbgmngr", {NULL}, 2293, "tcp"},
-{"npdbgmngr", {NULL}, 2293, "udp"},
-{"konshus-lm", {NULL}, 2294, "tcp"},
-{"konshus-lm", {NULL}, 2294, "udp"},
-{"advant-lm", {NULL}, 2295, "tcp"},
-{"advant-lm", {NULL}, 2295, "udp"},
-{"theta-lm", {NULL}, 2296, "tcp"},
-{"theta-lm", {NULL}, 2296, "udp"},
-{"d2k-datamover1", {NULL}, 2297, "tcp"},
-{"d2k-datamover1", {NULL}, 2297, "udp"},
-{"d2k-datamover2", {NULL}, 2298, "tcp"},
-{"d2k-datamover2", {NULL}, 2298, "udp"},
-{"pc-telecommute", {NULL}, 2299, "tcp"},
-{"pc-telecommute", {NULL}, 2299, "udp"},
-{"cvmmon", {NULL}, 2300, "tcp"},
-{"cvmmon", {NULL}, 2300, "udp"},
-{"cpq-wbem", {NULL}, 2301, "tcp"},
-{"cpq-wbem", {NULL}, 2301, "udp"},
-{"binderysupport", {NULL}, 2302, "tcp"},
-{"binderysupport", {NULL}, 2302, "udp"},
-{"proxy-gateway", {NULL}, 2303, "tcp"},
-{"proxy-gateway", {NULL}, 2303, "udp"},
-{"attachmate-uts", {NULL}, 2304, "tcp"},
-{"attachmate-uts", {NULL}, 2304, "udp"},
-{"mt-scaleserver", {NULL}, 2305, "tcp"},
-{"mt-scaleserver", {NULL}, 2305, "udp"},
-{"tappi-boxnet", {NULL}, 2306, "tcp"},
-{"tappi-boxnet", {NULL}, 2306, "udp"},
-{"pehelp", {NULL}, 2307, "tcp"},
-{"pehelp", {NULL}, 2307, "udp"},
-{"sdhelp", {NULL}, 2308, "tcp"},
-{"sdhelp", {NULL}, 2308, "udp"},
-{"sdserver", {NULL}, 2309, "tcp"},
-{"sdserver", {NULL}, 2309, "udp"},
-{"sdclient", {NULL}, 2310, "tcp"},
-{"sdclient", {NULL}, 2310, "udp"},
-{"messageservice", {NULL}, 2311, "tcp"},
-{"messageservice", {NULL}, 2311, "udp"},
-{"wanscaler", {NULL}, 2312, "tcp"},
-{"wanscaler", {NULL}, 2312, "udp"},
-{"iapp", {NULL}, 2313, "tcp"},
-{"iapp", {NULL}, 2313, "udp"},
-{"cr-websystems", {NULL}, 2314, "tcp"},
-{"cr-websystems", {NULL}, 2314, "udp"},
-{"precise-sft", {NULL}, 2315, "tcp"},
-{"precise-sft", {NULL}, 2315, "udp"},
-{"sent-lm", {NULL}, 2316, "tcp"},
-{"sent-lm", {NULL}, 2316, "udp"},
-{"attachmate-g32", {NULL}, 2317, "tcp"},
-{"attachmate-g32", {NULL}, 2317, "udp"},
-{"cadencecontrol", {NULL}, 2318, "tcp"},
-{"cadencecontrol", {NULL}, 2318, "udp"},
-{"infolibria", {NULL}, 2319, "tcp"},
-{"infolibria", {NULL}, 2319, "udp"},
-{"siebel-ns", {NULL}, 2320, "tcp"},
-{"siebel-ns", {NULL}, 2320, "udp"},
-{"rdlap", {NULL}, 2321, "tcp"},
-{"rdlap", {NULL}, 2321, "udp"},
-{"ofsd", {NULL}, 2322, "tcp"},
-{"ofsd", {NULL}, 2322, "udp"},
-{"3d-nfsd", {NULL}, 2323, "tcp"},
-{"3d-nfsd", {NULL}, 2323, "udp"},
-{"cosmocall", {NULL}, 2324, "tcp"},
-{"cosmocall", {NULL}, 2324, "udp"},
-{"ansysli", {NULL}, 2325, "tcp"},
-{"ansysli", {NULL}, 2325, "udp"},
-{"idcp", {NULL}, 2326, "tcp"},
-{"idcp", {NULL}, 2326, "udp"},
-{"xingcsm", {NULL}, 2327, "tcp"},
-{"xingcsm", {NULL}, 2327, "udp"},
-{"netrix-sftm", {NULL}, 2328, "tcp"},
-{"netrix-sftm", {NULL}, 2328, "udp"},
-{"nvd", {NULL}, 2329, "tcp"},
-{"nvd", {NULL}, 2329, "udp"},
-{"tscchat", {NULL}, 2330, "tcp"},
-{"tscchat", {NULL}, 2330, "udp"},
-{"agentview", {NULL}, 2331, "tcp"},
-{"agentview", {NULL}, 2331, "udp"},
-{"rcc-host", {NULL}, 2332, "tcp"},
-{"rcc-host", {NULL}, 2332, "udp"},
-{"snapp", {NULL}, 2333, "tcp"},
-{"snapp", {NULL}, 2333, "udp"},
-{"ace-client", {NULL}, 2334, "tcp"},
-{"ace-client", {NULL}, 2334, "udp"},
-{"ace-proxy", {NULL}, 2335, "tcp"},
-{"ace-proxy", {NULL}, 2335, "udp"},
-{"appleugcontrol", {NULL}, 2336, "tcp"},
-{"appleugcontrol", {NULL}, 2336, "udp"},
-{"ideesrv", {NULL}, 2337, "tcp"},
-{"ideesrv", {NULL}, 2337, "udp"},
-{"norton-lambert", {NULL}, 2338, "tcp"},
-{"norton-lambert", {NULL}, 2338, "udp"},
-{"3com-webview", {NULL}, 2339, "tcp"},
-{"3com-webview", {NULL}, 2339, "udp"},
-{"wrs_registry", {NULL}, 2340, "tcp"},
-{"wrs_registry", {NULL}, 2340, "udp"},
-{"xiostatus", {NULL}, 2341, "tcp"},
-{"xiostatus", {NULL}, 2341, "udp"},
-{"manage-exec", {NULL}, 2342, "tcp"},
-{"manage-exec", {NULL}, 2342, "udp"},
-{"nati-logos", {NULL}, 2343, "tcp"},
-{"nati-logos", {NULL}, 2343, "udp"},
-{"fcmsys", {NULL}, 2344, "tcp"},
-{"fcmsys", {NULL}, 2344, "udp"},
-{"dbm", {NULL}, 2345, "tcp"},
-{"dbm", {NULL}, 2345, "udp"},
-{"redstorm_join", {NULL}, 2346, "tcp"},
-{"redstorm_join", {NULL}, 2346, "udp"},
-{"redstorm_find", {NULL}, 2347, "tcp"},
-{"redstorm_find", {NULL}, 2347, "udp"},
-{"redstorm_info", {NULL}, 2348, "tcp"},
-{"redstorm_info", {NULL}, 2348, "udp"},
-{"redstorm_diag", {NULL}, 2349, "tcp"},
-{"redstorm_diag", {NULL}, 2349, "udp"},
-{"psbserver", {NULL}, 2350, "tcp"},
-{"psbserver", {NULL}, 2350, "udp"},
-{"psrserver", {NULL}, 2351, "tcp"},
-{"psrserver", {NULL}, 2351, "udp"},
-{"pslserver", {NULL}, 2352, "tcp"},
-{"pslserver", {NULL}, 2352, "udp"},
-{"pspserver", {NULL}, 2353, "tcp"},
-{"pspserver", {NULL}, 2353, "udp"},
-{"psprserver", {NULL}, 2354, "tcp"},
-{"psprserver", {NULL}, 2354, "udp"},
-{"psdbserver", {NULL}, 2355, "tcp"},
-{"psdbserver", {NULL}, 2355, "udp"},
-{"gxtelmd", {NULL}, 2356, "tcp"},
-{"gxtelmd", {NULL}, 2356, "udp"},
-{"unihub-server", {NULL}, 2357, "tcp"},
-{"unihub-server", {NULL}, 2357, "udp"},
-{"futrix", {NULL}, 2358, "tcp"},
-{"futrix", {NULL}, 2358, "udp"},
-{"flukeserver", {NULL}, 2359, "tcp"},
-{"flukeserver", {NULL}, 2359, "udp"},
-{"nexstorindltd", {NULL}, 2360, "tcp"},
-{"nexstorindltd", {NULL}, 2360, "udp"},
-{"tl1", {NULL}, 2361, "tcp"},
-{"tl1", {NULL}, 2361, "udp"},
-{"digiman", {NULL}, 2362, "tcp"},
-{"digiman", {NULL}, 2362, "udp"},
-{"mediacntrlnfsd", {NULL}, 2363, "tcp"},
-{"mediacntrlnfsd", {NULL}, 2363, "udp"},
-{"oi-2000", {NULL}, 2364, "tcp"},
-{"oi-2000", {NULL}, 2364, "udp"},
-{"dbref", {NULL}, 2365, "tcp"},
-{"dbref", {NULL}, 2365, "udp"},
-{"qip-login", {NULL}, 2366, "tcp"},
-{"qip-login", {NULL}, 2366, "udp"},
-{"service-ctrl", {NULL}, 2367, "tcp"},
-{"service-ctrl", {NULL}, 2367, "udp"},
-{"opentable", {NULL}, 2368, "tcp"},
-{"opentable", {NULL}, 2368, "udp"},
-{"l3-hbmon", {NULL}, 2370, "tcp"},
-{"l3-hbmon", {NULL}, 2370, "udp"},
-{"worldwire", {NULL}, 2371, "tcp"},
-{"worldwire", {NULL}, 2371, "udp"},
-{"lanmessenger", {NULL}, 2372, "tcp"},
-{"lanmessenger", {NULL}, 2372, "udp"},
-{"remographlm", {NULL}, 2373, "tcp"},
-{"hydra", {NULL}, 2374, "tcp"},
-{"compaq-https", {NULL}, 2381, "tcp"},
-{"compaq-https", {NULL}, 2381, "udp"},
-{"ms-olap3", {NULL}, 2382, "tcp"},
-{"ms-olap3", {NULL}, 2382, "udp"},
-{"ms-olap4", {NULL}, 2383, "tcp"},
-{"ms-olap4", {NULL}, 2383, "udp"},
-{"sd-request", {NULL}, 2384, "tcp"},
-{"sd-capacity", {NULL}, 2384, "udp"},
-{"sd-data", {NULL}, 2385, "tcp"},
-{"sd-data", {NULL}, 2385, "udp"},
-{"virtualtape", {NULL}, 2386, "tcp"},
-{"virtualtape", {NULL}, 2386, "udp"},
-{"vsamredirector", {NULL}, 2387, "tcp"},
-{"vsamredirector", {NULL}, 2387, "udp"},
-{"mynahautostart", {NULL}, 2388, "tcp"},
-{"mynahautostart", {NULL}, 2388, "udp"},
-{"ovsessionmgr", {NULL}, 2389, "tcp"},
-{"ovsessionmgr", {NULL}, 2389, "udp"},
-{"rsmtp", {NULL}, 2390, "tcp"},
-{"rsmtp", {NULL}, 2390, "udp"},
-{"3com-net-mgmt", {NULL}, 2391, "tcp"},
-{"3com-net-mgmt", {NULL}, 2391, "udp"},
-{"tacticalauth", {NULL}, 2392, "tcp"},
-{"tacticalauth", {NULL}, 2392, "udp"},
-{"ms-olap1", {NULL}, 2393, "tcp"},
-{"ms-olap1", {NULL}, 2393, "udp"},
-{"ms-olap2", {NULL}, 2394, "tcp"},
-{"ms-olap2", {NULL}, 2394, "udp"},
-{"lan900_remote", {NULL}, 2395, "tcp"},
-{"lan900_remote", {NULL}, 2395, "udp"},
-{"wusage", {NULL}, 2396, "tcp"},
-{"wusage", {NULL}, 2396, "udp"},
-{"ncl", {NULL}, 2397, "tcp"},
-{"ncl", {NULL}, 2397, "udp"},
-{"orbiter", {NULL}, 2398, "tcp"},
-{"orbiter", {NULL}, 2398, "udp"},
-{"fmpro-fdal", {NULL}, 2399, "tcp"},
-{"fmpro-fdal", {NULL}, 2399, "udp"},
-{"opequus-server", {NULL}, 2400, "tcp"},
-{"opequus-server", {NULL}, 2400, "udp"},
-{"cvspserver", {NULL}, 2401, "tcp"},
-{"cvspserver", {NULL}, 2401, "udp"},
-{"taskmaster2000", {NULL}, 2402, "tcp"},
-{"taskmaster2000", {NULL}, 2402, "udp"},
-{"taskmaster2000", {NULL}, 2403, "tcp"},
-{"taskmaster2000", {NULL}, 2403, "udp"},
-{"iec-104", {NULL}, 2404, "tcp"},
-{"iec-104", {NULL}, 2404, "udp"},
-{"trc-netpoll", {NULL}, 2405, "tcp"},
-{"trc-netpoll", {NULL}, 2405, "udp"},
-{"jediserver", {NULL}, 2406, "tcp"},
-{"jediserver", {NULL}, 2406, "udp"},
-{"orion", {NULL}, 2407, "tcp"},
-{"orion", {NULL}, 2407, "udp"},
-{"optimanet", {NULL}, 2408, "tcp"},
-{"optimanet", {NULL}, 2408, "udp"},
-{"sns-protocol", {NULL}, 2409, "tcp"},
-{"sns-protocol", {NULL}, 2409, "udp"},
-{"vrts-registry", {NULL}, 2410, "tcp"},
-{"vrts-registry", {NULL}, 2410, "udp"},
-{"netwave-ap-mgmt", {NULL}, 2411, "tcp"},
-{"netwave-ap-mgmt", {NULL}, 2411, "udp"},
-{"cdn", {NULL}, 2412, "tcp"},
-{"cdn", {NULL}, 2412, "udp"},
-{"orion-rmi-reg", {NULL}, 2413, "tcp"},
-{"orion-rmi-reg", {NULL}, 2413, "udp"},
-{"beeyond", {NULL}, 2414, "tcp"},
-{"beeyond", {NULL}, 2414, "udp"},
-{"codima-rtp", {NULL}, 2415, "tcp"},
-{"codima-rtp", {NULL}, 2415, "udp"},
-{"rmtserver", {NULL}, 2416, "tcp"},
-{"rmtserver", {NULL}, 2416, "udp"},
-{"composit-server", {NULL}, 2417, "tcp"},
-{"composit-server", {NULL}, 2417, "udp"},
-{"cas", {NULL}, 2418, "tcp"},
-{"cas", {NULL}, 2418, "udp"},
-{"attachmate-s2s", {NULL}, 2419, "tcp"},
-{"attachmate-s2s", {NULL}, 2419, "udp"},
-{"dslremote-mgmt", {NULL}, 2420, "tcp"},
-{"dslremote-mgmt", {NULL}, 2420, "udp"},
-{"g-talk", {NULL}, 2421, "tcp"},
-{"g-talk", {NULL}, 2421, "udp"},
-{"crmsbits", {NULL}, 2422, "tcp"},
-{"crmsbits", {NULL}, 2422, "udp"},
-{"rnrp", {NULL}, 2423, "tcp"},
-{"rnrp", {NULL}, 2423, "udp"},
-{"kofax-svr", {NULL}, 2424, "tcp"},
-{"kofax-svr", {NULL}, 2424, "udp"},
-{"fjitsuappmgr", {NULL}, 2425, "tcp"},
-{"fjitsuappmgr", {NULL}, 2425, "udp"},
-{"mgcp-gateway", {NULL}, 2427, "tcp"},
-{"mgcp-gateway", {NULL}, 2427, "udp"},
-{"ott", {NULL}, 2428, "tcp"},
-{"ott", {NULL}, 2428, "udp"},
-{"ft-role", {NULL}, 2429, "tcp"},
-{"ft-role", {NULL}, 2429, "udp"},
-{"venus", {NULL}, 2430, "tcp"},
-{"venus", {NULL}, 2430, "udp"},
-{"venus-se", {NULL}, 2431, "tcp"},
-{"venus-se", {NULL}, 2431, "udp"},
-{"codasrv", {NULL}, 2432, "tcp"},
-{"codasrv", {NULL}, 2432, "udp"},
-{"codasrv-se", {NULL}, 2433, "tcp"},
-{"codasrv-se", {NULL}, 2433, "udp"},
-{"pxc-epmap", {NULL}, 2434, "tcp"},
-{"pxc-epmap", {NULL}, 2434, "udp"},
-{"optilogic", {NULL}, 2435, "tcp"},
-{"optilogic", {NULL}, 2435, "udp"},
-{"topx", {NULL}, 2436, "tcp"},
-{"topx", {NULL}, 2436, "udp"},
-{"unicontrol", {NULL}, 2437, "tcp"},
-{"unicontrol", {NULL}, 2437, "udp"},
-{"msp", {NULL}, 2438, "tcp"},
-{"msp", {NULL}, 2438, "udp"},
-{"sybasedbsynch", {NULL}, 2439, "tcp"},
-{"sybasedbsynch", {NULL}, 2439, "udp"},
-{"spearway", {NULL}, 2440, "tcp"},
-{"spearway", {NULL}, 2440, "udp"},
-{"pvsw-inet", {NULL}, 2441, "tcp"},
-{"pvsw-inet", {NULL}, 2441, "udp"},
-{"netangel", {NULL}, 2442, "tcp"},
-{"netangel", {NULL}, 2442, "udp"},
-{"powerclientcsf", {NULL}, 2443, "tcp"},
-{"powerclientcsf", {NULL}, 2443, "udp"},
-{"btpp2sectrans", {NULL}, 2444, "tcp"},
-{"btpp2sectrans", {NULL}, 2444, "udp"},
-{"dtn1", {NULL}, 2445, "tcp"},
-{"dtn1", {NULL}, 2445, "udp"},
-{"bues_service", {NULL}, 2446, "tcp"},
-{"bues_service", {NULL}, 2446, "udp"},
-{"ovwdb", {NULL}, 2447, "tcp"},
-{"ovwdb", {NULL}, 2447, "udp"},
-{"hpppssvr", {NULL}, 2448, "tcp"},
-{"hpppssvr", {NULL}, 2448, "udp"},
-{"ratl", {NULL}, 2449, "tcp"},
-{"ratl", {NULL}, 2449, "udp"},
-{"netadmin", {NULL}, 2450, "tcp"},
-{"netadmin", {NULL}, 2450, "udp"},
-{"netchat", {NULL}, 2451, "tcp"},
-{"netchat", {NULL}, 2451, "udp"},
-{"snifferclient", {NULL}, 2452, "tcp"},
-{"snifferclient", {NULL}, 2452, "udp"},
-{"madge-ltd", {NULL}, 2453, "tcp"},
-{"madge-ltd", {NULL}, 2453, "udp"},
-{"indx-dds", {NULL}, 2454, "tcp"},
-{"indx-dds", {NULL}, 2454, "udp"},
-{"wago-io-system", {NULL}, 2455, "tcp"},
-{"wago-io-system", {NULL}, 2455, "udp"},
-{"altav-remmgt", {NULL}, 2456, "tcp"},
-{"altav-remmgt", {NULL}, 2456, "udp"},
-{"rapido-ip", {NULL}, 2457, "tcp"},
-{"rapido-ip", {NULL}, 2457, "udp"},
-{"griffin", {NULL}, 2458, "tcp"},
-{"griffin", {NULL}, 2458, "udp"},
-{"community", {NULL}, 2459, "tcp"},
-{"community", {NULL}, 2459, "udp"},
-{"ms-theater", {NULL}, 2460, "tcp"},
-{"ms-theater", {NULL}, 2460, "udp"},
-{"qadmifoper", {NULL}, 2461, "tcp"},
-{"qadmifoper", {NULL}, 2461, "udp"},
-{"qadmifevent", {NULL}, 2462, "tcp"},
-{"qadmifevent", {NULL}, 2462, "udp"},
-{"lsi-raid-mgmt", {NULL}, 2463, "tcp"},
-{"lsi-raid-mgmt", {NULL}, 2463, "udp"},
-{"direcpc-si", {NULL}, 2464, "tcp"},
-{"direcpc-si", {NULL}, 2464, "udp"},
-{"lbm", {NULL}, 2465, "tcp"},
-{"lbm", {NULL}, 2465, "udp"},
-{"lbf", {NULL}, 2466, "tcp"},
-{"lbf", {NULL}, 2466, "udp"},
-{"high-criteria", {NULL}, 2467, "tcp"},
-{"high-criteria", {NULL}, 2467, "udp"},
-{"qip-msgd", {NULL}, 2468, "tcp"},
-{"qip-msgd", {NULL}, 2468, "udp"},
-{"mti-tcs-comm", {NULL}, 2469, "tcp"},
-{"mti-tcs-comm", {NULL}, 2469, "udp"},
-{"taskman-port", {NULL}, 2470, "tcp"},
-{"taskman-port", {NULL}, 2470, "udp"},
-{"seaodbc", {NULL}, 2471, "tcp"},
-{"seaodbc", {NULL}, 2471, "udp"},
-{"c3", {NULL}, 2472, "tcp"},
-{"c3", {NULL}, 2472, "udp"},
-{"aker-cdp", {NULL}, 2473, "tcp"},
-{"aker-cdp", {NULL}, 2473, "udp"},
-{"vitalanalysis", {NULL}, 2474, "tcp"},
-{"vitalanalysis", {NULL}, 2474, "udp"},
-{"ace-server", {NULL}, 2475, "tcp"},
-{"ace-server", {NULL}, 2475, "udp"},
-{"ace-svr-prop", {NULL}, 2476, "tcp"},
-{"ace-svr-prop", {NULL}, 2476, "udp"},
-{"ssm-cvs", {NULL}, 2477, "tcp"},
-{"ssm-cvs", {NULL}, 2477, "udp"},
-{"ssm-cssps", {NULL}, 2478, "tcp"},
-{"ssm-cssps", {NULL}, 2478, "udp"},
-{"ssm-els", {NULL}, 2479, "tcp"},
-{"ssm-els", {NULL}, 2479, "udp"},
-{"powerexchange", {NULL}, 2480, "tcp"},
-{"powerexchange", {NULL}, 2480, "udp"},
-{"giop", {NULL}, 2481, "tcp"},
-{"giop", {NULL}, 2481, "udp"},
-{"giop-ssl", {NULL}, 2482, "tcp"},
-{"giop-ssl", {NULL}, 2482, "udp"},
-{"ttc", {NULL}, 2483, "tcp"},
-{"ttc", {NULL}, 2483, "udp"},
-{"ttc-ssl", {NULL}, 2484, "tcp"},
-{"ttc-ssl", {NULL}, 2484, "udp"},
-{"netobjects1", {NULL}, 2485, "tcp"},
-{"netobjects1", {NULL}, 2485, "udp"},
-{"netobjects2", {NULL}, 2486, "tcp"},
-{"netobjects2", {NULL}, 2486, "udp"},
-{"pns", {NULL}, 2487, "tcp"},
-{"pns", {NULL}, 2487, "udp"},
-{"moy-corp", {NULL}, 2488, "tcp"},
-{"moy-corp", {NULL}, 2488, "udp"},
-{"tsilb", {NULL}, 2489, "tcp"},
-{"tsilb", {NULL}, 2489, "udp"},
-{"qip-qdhcp", {NULL}, 2490, "tcp"},
-{"qip-qdhcp", {NULL}, 2490, "udp"},
-{"conclave-cpp", {NULL}, 2491, "tcp"},
-{"conclave-cpp", {NULL}, 2491, "udp"},
-{"groove", {NULL}, 2492, "tcp"},
-{"groove", {NULL}, 2492, "udp"},
-{"talarian-mqs", {NULL}, 2493, "tcp"},
-{"talarian-mqs", {NULL}, 2493, "udp"},
-{"bmc-ar", {NULL}, 2494, "tcp"},
-{"bmc-ar", {NULL}, 2494, "udp"},
-{"fast-rem-serv", {NULL}, 2495, "tcp"},
-{"fast-rem-serv", {NULL}, 2495, "udp"},
-{"dirgis", {NULL}, 2496, "tcp"},
-{"dirgis", {NULL}, 2496, "udp"},
-{"quaddb", {NULL}, 2497, "tcp"},
-{"quaddb", {NULL}, 2497, "udp"},
-{"odn-castraq", {NULL}, 2498, "tcp"},
-{"odn-castraq", {NULL}, 2498, "udp"},
-{"unicontrol", {NULL}, 2499, "tcp"},
-{"unicontrol", {NULL}, 2499, "udp"},
-{"rtsserv", {NULL}, 2500, "tcp"},
-{"rtsserv", {NULL}, 2500, "udp"},
-{"rtsclient", {NULL}, 2501, "tcp"},
-{"rtsclient", {NULL}, 2501, "udp"},
-{"kentrox-prot", {NULL}, 2502, "tcp"},
-{"kentrox-prot", {NULL}, 2502, "udp"},
-{"nms-dpnss", {NULL}, 2503, "tcp"},
-{"nms-dpnss", {NULL}, 2503, "udp"},
-{"wlbs", {NULL}, 2504, "tcp"},
-{"wlbs", {NULL}, 2504, "udp"},
-{"ppcontrol", {NULL}, 2505, "tcp"},
-{"ppcontrol", {NULL}, 2505, "udp"},
-{"jbroker", {NULL}, 2506, "tcp"},
-{"jbroker", {NULL}, 2506, "udp"},
-{"spock", {NULL}, 2507, "tcp"},
-{"spock", {NULL}, 2507, "udp"},
-{"jdatastore", {NULL}, 2508, "tcp"},
-{"jdatastore", {NULL}, 2508, "udp"},
-{"fjmpss", {NULL}, 2509, "tcp"},
-{"fjmpss", {NULL}, 2509, "udp"},
-{"fjappmgrbulk", {NULL}, 2510, "tcp"},
-{"fjappmgrbulk", {NULL}, 2510, "udp"},
-{"metastorm", {NULL}, 2511, "tcp"},
-{"metastorm", {NULL}, 2511, "udp"},
-{"citrixima", {NULL}, 2512, "tcp"},
-{"citrixima", {NULL}, 2512, "udp"},
-{"citrixadmin", {NULL}, 2513, "tcp"},
-{"citrixadmin", {NULL}, 2513, "udp"},
-{"facsys-ntp", {NULL}, 2514, "tcp"},
-{"facsys-ntp", {NULL}, 2514, "udp"},
-{"facsys-router", {NULL}, 2515, "tcp"},
-{"facsys-router", {NULL}, 2515, "udp"},
-{"maincontrol", {NULL}, 2516, "tcp"},
-{"maincontrol", {NULL}, 2516, "udp"},
-{"call-sig-trans", {NULL}, 2517, "tcp"},
-{"call-sig-trans", {NULL}, 2517, "udp"},
-{"willy", {NULL}, 2518, "tcp"},
-{"willy", {NULL}, 2518, "udp"},
-{"globmsgsvc", {NULL}, 2519, "tcp"},
-{"globmsgsvc", {NULL}, 2519, "udp"},
-{"pvsw", {NULL}, 2520, "tcp"},
-{"pvsw", {NULL}, 2520, "udp"},
-{"adaptecmgr", {NULL}, 2521, "tcp"},
-{"adaptecmgr", {NULL}, 2521, "udp"},
-{"windb", {NULL}, 2522, "tcp"},
-{"windb", {NULL}, 2522, "udp"},
-{"qke-llc-v3", {NULL}, 2523, "tcp"},
-{"qke-llc-v3", {NULL}, 2523, "udp"},
-{"optiwave-lm", {NULL}, 2524, "tcp"},
-{"optiwave-lm", {NULL}, 2524, "udp"},
-{"ms-v-worlds", {NULL}, 2525, "tcp"},
-{"ms-v-worlds", {NULL}, 2525, "udp"},
-{"ema-sent-lm", {NULL}, 2526, "tcp"},
-{"ema-sent-lm", {NULL}, 2526, "udp"},
-{"iqserver", {NULL}, 2527, "tcp"},
-{"iqserver", {NULL}, 2527, "udp"},
-{"ncr_ccl", {NULL}, 2528, "tcp"},
-{"ncr_ccl", {NULL}, 2528, "udp"},
-{"utsftp", {NULL}, 2529, "tcp"},
-{"utsftp", {NULL}, 2529, "udp"},
-{"vrcommerce", {NULL}, 2530, "tcp"},
-{"vrcommerce", {NULL}, 2530, "udp"},
-{"ito-e-gui", {NULL}, 2531, "tcp"},
-{"ito-e-gui", {NULL}, 2531, "udp"},
-{"ovtopmd", {NULL}, 2532, "tcp"},
-{"ovtopmd", {NULL}, 2532, "udp"},
-{"snifferserver", {NULL}, 2533, "tcp"},
-{"snifferserver", {NULL}, 2533, "udp"},
-{"combox-web-acc", {NULL}, 2534, "tcp"},
-{"combox-web-acc", {NULL}, 2534, "udp"},
-{"madcap", {NULL}, 2535, "tcp"},
-{"madcap", {NULL}, 2535, "udp"},
-{"btpp2audctr1", {NULL}, 2536, "tcp"},
-{"btpp2audctr1", {NULL}, 2536, "udp"},
-{"upgrade", {NULL}, 2537, "tcp"},
-{"upgrade", {NULL}, 2537, "udp"},
-{"vnwk-prapi", {NULL}, 2538, "tcp"},
-{"vnwk-prapi", {NULL}, 2538, "udp"},
-{"vsiadmin", {NULL}, 2539, "tcp"},
-{"vsiadmin", {NULL}, 2539, "udp"},
-{"lonworks", {NULL}, 2540, "tcp"},
-{"lonworks", {NULL}, 2540, "udp"},
-{"lonworks2", {NULL}, 2541, "tcp"},
-{"lonworks2", {NULL}, 2541, "udp"},
-{"udrawgraph", {NULL}, 2542, "tcp"},
-{"udrawgraph", {NULL}, 2542, "udp"},
-{"reftek", {NULL}, 2543, "tcp"},
-{"reftek", {NULL}, 2543, "udp"},
-{"novell-zen", {NULL}, 2544, "tcp"},
-{"novell-zen", {NULL}, 2544, "udp"},
-{"sis-emt", {NULL}, 2545, "tcp"},
-{"sis-emt", {NULL}, 2545, "udp"},
-{"vytalvaultbrtp", {NULL}, 2546, "tcp"},
-{"vytalvaultbrtp", {NULL}, 2546, "udp"},
-{"vytalvaultvsmp", {NULL}, 2547, "tcp"},
-{"vytalvaultvsmp", {NULL}, 2547, "udp"},
-{"vytalvaultpipe", {NULL}, 2548, "tcp"},
-{"vytalvaultpipe", {NULL}, 2548, "udp"},
-{"ipass", {NULL}, 2549, "tcp"},
-{"ipass", {NULL}, 2549, "udp"},
-{"ads", {NULL}, 2550, "tcp"},
-{"ads", {NULL}, 2550, "udp"},
-{"isg-uda-server", {NULL}, 2551, "tcp"},
-{"isg-uda-server", {NULL}, 2551, "udp"},
-{"call-logging", {NULL}, 2552, "tcp"},
-{"call-logging", {NULL}, 2552, "udp"},
-{"efidiningport", {NULL}, 2553, "tcp"},
-{"efidiningport", {NULL}, 2553, "udp"},
-{"vcnet-link-v10", {NULL}, 2554, "tcp"},
-{"vcnet-link-v10", {NULL}, 2554, "udp"},
-{"compaq-wcp", {NULL}, 2555, "tcp"},
-{"compaq-wcp", {NULL}, 2555, "udp"},
-{"nicetec-nmsvc", {NULL}, 2556, "tcp"},
-{"nicetec-nmsvc", {NULL}, 2556, "udp"},
-{"nicetec-mgmt", {NULL}, 2557, "tcp"},
-{"nicetec-mgmt", {NULL}, 2557, "udp"},
-{"pclemultimedia", {NULL}, 2558, "tcp"},
-{"pclemultimedia", {NULL}, 2558, "udp"},
-{"lstp", {NULL}, 2559, "tcp"},
-{"lstp", {NULL}, 2559, "udp"},
-{"labrat", {NULL}, 2560, "tcp"},
-{"labrat", {NULL}, 2560, "udp"},
-{"mosaixcc", {NULL}, 2561, "tcp"},
-{"mosaixcc", {NULL}, 2561, "udp"},
-{"delibo", {NULL}, 2562, "tcp"},
-{"delibo", {NULL}, 2562, "udp"},
-{"cti-redwood", {NULL}, 2563, "tcp"},
-{"cti-redwood", {NULL}, 2563, "udp"},
-{"hp-3000-telnet", {NULL}, 2564, "tcp"},
-{"coord-svr", {NULL}, 2565, "tcp"},
-{"coord-svr", {NULL}, 2565, "udp"},
-{"pcs-pcw", {NULL}, 2566, "tcp"},
-{"pcs-pcw", {NULL}, 2566, "udp"},
-{"clp", {NULL}, 2567, "tcp"},
-{"clp", {NULL}, 2567, "udp"},
-{"spamtrap", {NULL}, 2568, "tcp"},
-{"spamtrap", {NULL}, 2568, "udp"},
-{"sonuscallsig", {NULL}, 2569, "tcp"},
-{"sonuscallsig", {NULL}, 2569, "udp"},
-{"hs-port", {NULL}, 2570, "tcp"},
-{"hs-port", {NULL}, 2570, "udp"},
-{"cecsvc", {NULL}, 2571, "tcp"},
-{"cecsvc", {NULL}, 2571, "udp"},
-{"ibp", {NULL}, 2572, "tcp"},
-{"ibp", {NULL}, 2572, "udp"},
-{"trustestablish", {NULL}, 2573, "tcp"},
-{"trustestablish", {NULL}, 2573, "udp"},
-{"blockade-bpsp", {NULL}, 2574, "tcp"},
-{"blockade-bpsp", {NULL}, 2574, "udp"},
-{"hl7", {NULL}, 2575, "tcp"},
-{"hl7", {NULL}, 2575, "udp"},
-{"tclprodebugger", {NULL}, 2576, "tcp"},
-{"tclprodebugger", {NULL}, 2576, "udp"},
-{"scipticslsrvr", {NULL}, 2577, "tcp"},
-{"scipticslsrvr", {NULL}, 2577, "udp"},
-{"rvs-isdn-dcp", {NULL}, 2578, "tcp"},
-{"rvs-isdn-dcp", {NULL}, 2578, "udp"},
-{"mpfoncl", {NULL}, 2579, "tcp"},
-{"mpfoncl", {NULL}, 2579, "udp"},
-{"tributary", {NULL}, 2580, "tcp"},
-{"tributary", {NULL}, 2580, "udp"},
-{"argis-te", {NULL}, 2581, "tcp"},
-{"argis-te", {NULL}, 2581, "udp"},
-{"argis-ds", {NULL}, 2582, "tcp"},
-{"argis-ds", {NULL}, 2582, "udp"},
-{"mon", {NULL}, 2583, "tcp"},
-{"mon", {NULL}, 2583, "udp"},
-{"cyaserv", {NULL}, 2584, "tcp"},
-{"cyaserv", {NULL}, 2584, "udp"},
-{"netx-server", {NULL}, 2585, "tcp"},
-{"netx-server", {NULL}, 2585, "udp"},
-{"netx-agent", {NULL}, 2586, "tcp"},
-{"netx-agent", {NULL}, 2586, "udp"},
-{"masc", {NULL}, 2587, "tcp"},
-{"masc", {NULL}, 2587, "udp"},
-{"privilege", {NULL}, 2588, "tcp"},
-{"privilege", {NULL}, 2588, "udp"},
-{"quartus-tcl", {NULL}, 2589, "tcp"},
-{"quartus-tcl", {NULL}, 2589, "udp"},
-{"idotdist", {NULL}, 2590, "tcp"},
-{"idotdist", {NULL}, 2590, "udp"},
-{"maytagshuffle", {NULL}, 2591, "tcp"},
-{"maytagshuffle", {NULL}, 2591, "udp"},
-{"netrek", {NULL}, 2592, "tcp"},
-{"netrek", {NULL}, 2592, "udp"},
-{"mns-mail", {NULL}, 2593, "tcp"},
-{"mns-mail", {NULL}, 2593, "udp"},
-{"dts", {NULL}, 2594, "tcp"},
-{"dts", {NULL}, 2594, "udp"},
-{"worldfusion1", {NULL}, 2595, "tcp"},
-{"worldfusion1", {NULL}, 2595, "udp"},
-{"worldfusion2", {NULL}, 2596, "tcp"},
-{"worldfusion2", {NULL}, 2596, "udp"},
-{"homesteadglory", {NULL}, 2597, "tcp"},
-{"homesteadglory", {NULL}, 2597, "udp"},
-{"citriximaclient", {NULL}, 2598, "tcp"},
-{"citriximaclient", {NULL}, 2598, "udp"},
-{"snapd", {NULL}, 2599, "tcp"},
-{"snapd", {NULL}, 2599, "udp"},
-{"hpstgmgr", {NULL}, 2600, "tcp"},
-{"hpstgmgr", {NULL}, 2600, "udp"},
-{"discp-client", {NULL}, 2601, "tcp"},
-{"discp-client", {NULL}, 2601, "udp"},
-{"discp-server", {NULL}, 2602, "tcp"},
-{"discp-server", {NULL}, 2602, "udp"},
-{"servicemeter", {NULL}, 2603, "tcp"},
-{"servicemeter", {NULL}, 2603, "udp"},
-{"nsc-ccs", {NULL}, 2604, "tcp"},
-{"nsc-ccs", {NULL}, 2604, "udp"},
-{"nsc-posa", {NULL}, 2605, "tcp"},
-{"nsc-posa", {NULL}, 2605, "udp"},
-{"netmon", {NULL}, 2606, "tcp"},
-{"netmon", {NULL}, 2606, "udp"},
-{"connection", {NULL}, 2607, "tcp"},
-{"connection", {NULL}, 2607, "udp"},
-{"wag-service", {NULL}, 2608, "tcp"},
-{"wag-service", {NULL}, 2608, "udp"},
-{"system-monitor", {NULL}, 2609, "tcp"},
-{"system-monitor", {NULL}, 2609, "udp"},
-{"versa-tek", {NULL}, 2610, "tcp"},
-{"versa-tek", {NULL}, 2610, "udp"},
-{"lionhead", {NULL}, 2611, "tcp"},
-{"lionhead", {NULL}, 2611, "udp"},
-{"qpasa-agent", {NULL}, 2612, "tcp"},
-{"qpasa-agent", {NULL}, 2612, "udp"},
-{"smntubootstrap", {NULL}, 2613, "tcp"},
-{"smntubootstrap", {NULL}, 2613, "udp"},
-{"neveroffline", {NULL}, 2614, "tcp"},
-{"neveroffline", {NULL}, 2614, "udp"},
-{"firepower", {NULL}, 2615, "tcp"},
-{"firepower", {NULL}, 2615, "udp"},
-{"appswitch-emp", {NULL}, 2616, "tcp"},
-{"appswitch-emp", {NULL}, 2616, "udp"},
-{"cmadmin", {NULL}, 2617, "tcp"},
-{"cmadmin", {NULL}, 2617, "udp"},
-{"priority-e-com", {NULL}, 2618, "tcp"},
-{"priority-e-com", {NULL}, 2618, "udp"},
-{"bruce", {NULL}, 2619, "tcp"},
-{"bruce", {NULL}, 2619, "udp"},
-{"lpsrecommender", {NULL}, 2620, "tcp"},
-{"lpsrecommender", {NULL}, 2620, "udp"},
-{"miles-apart", {NULL}, 2621, "tcp"},
-{"miles-apart", {NULL}, 2621, "udp"},
-{"metricadbc", {NULL}, 2622, "tcp"},
-{"metricadbc", {NULL}, 2622, "udp"},
-{"lmdp", {NULL}, 2623, "tcp"},
-{"lmdp", {NULL}, 2623, "udp"},
-{"aria", {NULL}, 2624, "tcp"},
-{"aria", {NULL}, 2624, "udp"},
-{"blwnkl-port", {NULL}, 2625, "tcp"},
-{"blwnkl-port", {NULL}, 2625, "udp"},
-{"gbjd816", {NULL}, 2626, "tcp"},
-{"gbjd816", {NULL}, 2626, "udp"},
-{"moshebeeri", {NULL}, 2627, "tcp"},
-{"moshebeeri", {NULL}, 2627, "udp"},
-{"dict", {NULL}, 2628, "tcp"},
-{"dict", {NULL}, 2628, "udp"},
-{"sitaraserver", {NULL}, 2629, "tcp"},
-{"sitaraserver", {NULL}, 2629, "udp"},
-{"sitaramgmt", {NULL}, 2630, "tcp"},
-{"sitaramgmt", {NULL}, 2630, "udp"},
-{"sitaradir", {NULL}, 2631, "tcp"},
-{"sitaradir", {NULL}, 2631, "udp"},
-{"irdg-post", {NULL}, 2632, "tcp"},
-{"irdg-post", {NULL}, 2632, "udp"},
-{"interintelli", {NULL}, 2633, "tcp"},
-{"interintelli", {NULL}, 2633, "udp"},
-{"pk-electronics", {NULL}, 2634, "tcp"},
-{"pk-electronics", {NULL}, 2634, "udp"},
-{"backburner", {NULL}, 2635, "tcp"},
-{"backburner", {NULL}, 2635, "udp"},
-{"solve", {NULL}, 2636, "tcp"},
-{"solve", {NULL}, 2636, "udp"},
-{"imdocsvc", {NULL}, 2637, "tcp"},
-{"imdocsvc", {NULL}, 2637, "udp"},
-{"sybaseanywhere", {NULL}, 2638, "tcp"},
-{"sybaseanywhere", {NULL}, 2638, "udp"},
-{"aminet", {NULL}, 2639, "tcp"},
-{"aminet", {NULL}, 2639, "udp"},
-{"sai_sentlm", {NULL}, 2640, "tcp"},
-{"sai_sentlm", {NULL}, 2640, "udp"},
-{"hdl-srv", {NULL}, 2641, "tcp"},
-{"hdl-srv", {NULL}, 2641, "udp"},
-{"tragic", {NULL}, 2642, "tcp"},
-{"tragic", {NULL}, 2642, "udp"},
-{"gte-samp", {NULL}, 2643, "tcp"},
-{"gte-samp", {NULL}, 2643, "udp"},
-{"travsoft-ipx-t", {NULL}, 2644, "tcp"},
-{"travsoft-ipx-t", {NULL}, 2644, "udp"},
-{"novell-ipx-cmd", {NULL}, 2645, "tcp"},
-{"novell-ipx-cmd", {NULL}, 2645, "udp"},
-{"and-lm", {NULL}, 2646, "tcp"},
-{"and-lm", {NULL}, 2646, "udp"},
-{"syncserver", {NULL}, 2647, "tcp"},
-{"syncserver", {NULL}, 2647, "udp"},
-{"upsnotifyprot", {NULL}, 2648, "tcp"},
-{"upsnotifyprot", {NULL}, 2648, "udp"},
-{"vpsipport", {NULL}, 2649, "tcp"},
-{"vpsipport", {NULL}, 2649, "udp"},
-{"eristwoguns", {NULL}, 2650, "tcp"},
-{"eristwoguns", {NULL}, 2650, "udp"},
-{"ebinsite", {NULL}, 2651, "tcp"},
-{"ebinsite", {NULL}, 2651, "udp"},
-{"interpathpanel", {NULL}, 2652, "tcp"},
-{"interpathpanel", {NULL}, 2652, "udp"},
-{"sonus", {NULL}, 2653, "tcp"},
-{"sonus", {NULL}, 2653, "udp"},
-{"corel_vncadmin", {NULL}, 2654, "tcp"},
-{"corel_vncadmin", {NULL}, 2654, "udp"},
-{"unglue", {NULL}, 2655, "tcp"},
-{"unglue", {NULL}, 2655, "udp"},
-{"kana", {NULL}, 2656, "tcp"},
-{"kana", {NULL}, 2656, "udp"},
-{"sns-dispatcher", {NULL}, 2657, "tcp"},
-{"sns-dispatcher", {NULL}, 2657, "udp"},
-{"sns-admin", {NULL}, 2658, "tcp"},
-{"sns-admin", {NULL}, 2658, "udp"},
-{"sns-query", {NULL}, 2659, "tcp"},
-{"sns-query", {NULL}, 2659, "udp"},
-{"gcmonitor", {NULL}, 2660, "tcp"},
-{"gcmonitor", {NULL}, 2660, "udp"},
-{"olhost", {NULL}, 2661, "tcp"},
-{"olhost", {NULL}, 2661, "udp"},
-{"bintec-capi", {NULL}, 2662, "tcp"},
-{"bintec-capi", {NULL}, 2662, "udp"},
-{"bintec-tapi", {NULL}, 2663, "tcp"},
-{"bintec-tapi", {NULL}, 2663, "udp"},
-{"patrol-mq-gm", {NULL}, 2664, "tcp"},
-{"patrol-mq-gm", {NULL}, 2664, "udp"},
-{"patrol-mq-nm", {NULL}, 2665, "tcp"},
-{"patrol-mq-nm", {NULL}, 2665, "udp"},
-{"extensis", {NULL}, 2666, "tcp"},
-{"extensis", {NULL}, 2666, "udp"},
-{"alarm-clock-s", {NULL}, 2667, "tcp"},
-{"alarm-clock-s", {NULL}, 2667, "udp"},
-{"alarm-clock-c", {NULL}, 2668, "tcp"},
-{"alarm-clock-c", {NULL}, 2668, "udp"},
-{"toad", {NULL}, 2669, "tcp"},
-{"toad", {NULL}, 2669, "udp"},
-{"tve-announce", {NULL}, 2670, "tcp"},
-{"tve-announce", {NULL}, 2670, "udp"},
-{"newlixreg", {NULL}, 2671, "tcp"},
-{"newlixreg", {NULL}, 2671, "udp"},
-{"nhserver", {NULL}, 2672, "tcp"},
-{"nhserver", {NULL}, 2672, "udp"},
-{"firstcall42", {NULL}, 2673, "tcp"},
-{"firstcall42", {NULL}, 2673, "udp"},
-{"ewnn", {NULL}, 2674, "tcp"},
-{"ewnn", {NULL}, 2674, "udp"},
-{"ttc-etap", {NULL}, 2675, "tcp"},
-{"ttc-etap", {NULL}, 2675, "udp"},
-{"simslink", {NULL}, 2676, "tcp"},
-{"simslink", {NULL}, 2676, "udp"},
-{"gadgetgate1way", {NULL}, 2677, "tcp"},
-{"gadgetgate1way", {NULL}, 2677, "udp"},
-{"gadgetgate2way", {NULL}, 2678, "tcp"},
-{"gadgetgate2way", {NULL}, 2678, "udp"},
-{"syncserverssl", {NULL}, 2679, "tcp"},
-{"syncserverssl", {NULL}, 2679, "udp"},
-{"pxc-sapxom", {NULL}, 2680, "tcp"},
-{"pxc-sapxom", {NULL}, 2680, "udp"},
-{"mpnjsomb", {NULL}, 2681, "tcp"},
-{"mpnjsomb", {NULL}, 2681, "udp"},
-{"ncdloadbalance", {NULL}, 2683, "tcp"},
-{"ncdloadbalance", {NULL}, 2683, "udp"},
-{"mpnjsosv", {NULL}, 2684, "tcp"},
-{"mpnjsosv", {NULL}, 2684, "udp"},
-{"mpnjsocl", {NULL}, 2685, "tcp"},
-{"mpnjsocl", {NULL}, 2685, "udp"},
-{"mpnjsomg", {NULL}, 2686, "tcp"},
-{"mpnjsomg", {NULL}, 2686, "udp"},
-{"pq-lic-mgmt", {NULL}, 2687, "tcp"},
-{"pq-lic-mgmt", {NULL}, 2687, "udp"},
-{"md-cg-http", {NULL}, 2688, "tcp"},
-{"md-cg-http", {NULL}, 2688, "udp"},
-{"fastlynx", {NULL}, 2689, "tcp"},
-{"fastlynx", {NULL}, 2689, "udp"},
-{"hp-nnm-data", {NULL}, 2690, "tcp"},
-{"hp-nnm-data", {NULL}, 2690, "udp"},
-{"itinternet", {NULL}, 2691, "tcp"},
-{"itinternet", {NULL}, 2691, "udp"},
-{"admins-lms", {NULL}, 2692, "tcp"},
-{"admins-lms", {NULL}, 2692, "udp"},
-{"pwrsevent", {NULL}, 2694, "tcp"},
-{"pwrsevent", {NULL}, 2694, "udp"},
-{"vspread", {NULL}, 2695, "tcp"},
-{"vspread", {NULL}, 2695, "udp"},
-{"unifyadmin", {NULL}, 2696, "tcp"},
-{"unifyadmin", {NULL}, 2696, "udp"},
-{"oce-snmp-trap", {NULL}, 2697, "tcp"},
-{"oce-snmp-trap", {NULL}, 2697, "udp"},
-{"mck-ivpip", {NULL}, 2698, "tcp"},
-{"mck-ivpip", {NULL}, 2698, "udp"},
-{"csoft-plusclnt", {NULL}, 2699, "tcp"},
-{"csoft-plusclnt", {NULL}, 2699, "udp"},
-{"tqdata", {NULL}, 2700, "tcp"},
-{"tqdata", {NULL}, 2700, "udp"},
-{"sms-rcinfo", {NULL}, 2701, "tcp"},
-{"sms-rcinfo", {NULL}, 2701, "udp"},
-{"sms-xfer", {NULL}, 2702, "tcp"},
-{"sms-xfer", {NULL}, 2702, "udp"},
-{"sms-chat", {NULL}, 2703, "tcp"},
-{"sms-chat", {NULL}, 2703, "udp"},
-{"sms-remctrl", {NULL}, 2704, "tcp"},
-{"sms-remctrl", {NULL}, 2704, "udp"},
-{"sds-admin", {NULL}, 2705, "tcp"},
-{"sds-admin", {NULL}, 2705, "udp"},
-{"ncdmirroring", {NULL}, 2706, "tcp"},
-{"ncdmirroring", {NULL}, 2706, "udp"},
-{"emcsymapiport", {NULL}, 2707, "tcp"},
-{"emcsymapiport", {NULL}, 2707, "udp"},
-{"banyan-net", {NULL}, 2708, "tcp"},
-{"banyan-net", {NULL}, 2708, "udp"},
-{"supermon", {NULL}, 2709, "tcp"},
-{"supermon", {NULL}, 2709, "udp"},
-{"sso-service", {NULL}, 2710, "tcp"},
-{"sso-service", {NULL}, 2710, "udp"},
-{"sso-control", {NULL}, 2711, "tcp"},
-{"sso-control", {NULL}, 2711, "udp"},
-{"aocp", {NULL}, 2712, "tcp"},
-{"aocp", {NULL}, 2712, "udp"},
-{"raventbs", {NULL}, 2713, "tcp"},
-{"raventbs", {NULL}, 2713, "udp"},
-{"raventdm", {NULL}, 2714, "tcp"},
-{"raventdm", {NULL}, 2714, "udp"},
-{"hpstgmgr2", {NULL}, 2715, "tcp"},
-{"hpstgmgr2", {NULL}, 2715, "udp"},
-{"inova-ip-disco", {NULL}, 2716, "tcp"},
-{"inova-ip-disco", {NULL}, 2716, "udp"},
-{"pn-requester", {NULL}, 2717, "tcp"},
-{"pn-requester", {NULL}, 2717, "udp"},
-{"pn-requester2", {NULL}, 2718, "tcp"},
-{"pn-requester2", {NULL}, 2718, "udp"},
-{"scan-change", {NULL}, 2719, "tcp"},
-{"scan-change", {NULL}, 2719, "udp"},
-{"wkars", {NULL}, 2720, "tcp"},
-{"wkars", {NULL}, 2720, "udp"},
-{"smart-diagnose", {NULL}, 2721, "tcp"},
-{"smart-diagnose", {NULL}, 2721, "udp"},
-{"proactivesrvr", {NULL}, 2722, "tcp"},
-{"proactivesrvr", {NULL}, 2722, "udp"},
-{"watchdog-nt", {NULL}, 2723, "tcp"},
-{"watchdog-nt", {NULL}, 2723, "udp"},
-{"qotps", {NULL}, 2724, "tcp"},
-{"qotps", {NULL}, 2724, "udp"},
-{"msolap-ptp2", {NULL}, 2725, "tcp"},
-{"msolap-ptp2", {NULL}, 2725, "udp"},
-{"tams", {NULL}, 2726, "tcp"},
-{"tams", {NULL}, 2726, "udp"},
-{"mgcp-callagent", {NULL}, 2727, "tcp"},
-{"mgcp-callagent", {NULL}, 2727, "udp"},
-{"sqdr", {NULL}, 2728, "tcp"},
-{"sqdr", {NULL}, 2728, "udp"},
-{"tcim-control", {NULL}, 2729, "tcp"},
-{"tcim-control", {NULL}, 2729, "udp"},
-{"nec-raidplus", {NULL}, 2730, "tcp"},
-{"nec-raidplus", {NULL}, 2730, "udp"},
-{"fyre-messanger", {NULL}, 2731, "tcp"},
-{"fyre-messanger", {NULL}, 2731, "udp"},
-{"g5m", {NULL}, 2732, "tcp"},
-{"g5m", {NULL}, 2732, "udp"},
-{"signet-ctf", {NULL}, 2733, "tcp"},
-{"signet-ctf", {NULL}, 2733, "udp"},
-{"ccs-software", {NULL}, 2734, "tcp"},
-{"ccs-software", {NULL}, 2734, "udp"},
-{"netiq-mc", {NULL}, 2735, "tcp"},
-{"netiq-mc", {NULL}, 2735, "udp"},
-{"radwiz-nms-srv", {NULL}, 2736, "tcp"},
-{"radwiz-nms-srv", {NULL}, 2736, "udp"},
-{"srp-feedback", {NULL}, 2737, "tcp"},
-{"srp-feedback", {NULL}, 2737, "udp"},
-{"ndl-tcp-ois-gw", {NULL}, 2738, "tcp"},
-{"ndl-tcp-ois-gw", {NULL}, 2738, "udp"},
-{"tn-timing", {NULL}, 2739, "tcp"},
-{"tn-timing", {NULL}, 2739, "udp"},
-{"alarm", {NULL}, 2740, "tcp"},
-{"alarm", {NULL}, 2740, "udp"},
-{"tsb", {NULL}, 2741, "tcp"},
-{"tsb", {NULL}, 2741, "udp"},
-{"tsb2", {NULL}, 2742, "tcp"},
-{"tsb2", {NULL}, 2742, "udp"},
-{"murx", {NULL}, 2743, "tcp"},
-{"murx", {NULL}, 2743, "udp"},
-{"honyaku", {NULL}, 2744, "tcp"},
-{"honyaku", {NULL}, 2744, "udp"},
-{"urbisnet", {NULL}, 2745, "tcp"},
-{"urbisnet", {NULL}, 2745, "udp"},
-{"cpudpencap", {NULL}, 2746, "tcp"},
-{"cpudpencap", {NULL}, 2746, "udp"},
-{"fjippol-swrly", {NULL}, 2747, "tcp"},
-{"fjippol-swrly", {NULL}, 2747, "udp"},
-{"fjippol-polsvr", {NULL}, 2748, "tcp"},
-{"fjippol-polsvr", {NULL}, 2748, "udp"},
-{"fjippol-cnsl", {NULL}, 2749, "tcp"},
-{"fjippol-cnsl", {NULL}, 2749, "udp"},
-{"fjippol-port1", {NULL}, 2750, "tcp"},
-{"fjippol-port1", {NULL}, 2750, "udp"},
-{"fjippol-port2", {NULL}, 2751, "tcp"},
-{"fjippol-port2", {NULL}, 2751, "udp"},
-{"rsisysaccess", {NULL}, 2752, "tcp"},
-{"rsisysaccess", {NULL}, 2752, "udp"},
-{"de-spot", {NULL}, 2753, "tcp"},
-{"de-spot", {NULL}, 2753, "udp"},
-{"apollo-cc", {NULL}, 2754, "tcp"},
-{"apollo-cc", {NULL}, 2754, "udp"},
-{"expresspay", {NULL}, 2755, "tcp"},
-{"expresspay", {NULL}, 2755, "udp"},
-{"simplement-tie", {NULL}, 2756, "tcp"},
-{"simplement-tie", {NULL}, 2756, "udp"},
-{"cnrp", {NULL}, 2757, "tcp"},
-{"cnrp", {NULL}, 2757, "udp"},
-{"apollo-status", {NULL}, 2758, "tcp"},
-{"apollo-status", {NULL}, 2758, "udp"},
-{"apollo-gms", {NULL}, 2759, "tcp"},
-{"apollo-gms", {NULL}, 2759, "udp"},
-{"sabams", {NULL}, 2760, "tcp"},
-{"sabams", {NULL}, 2760, "udp"},
-{"dicom-iscl", {NULL}, 2761, "tcp"},
-{"dicom-iscl", {NULL}, 2761, "udp"},
-{"dicom-tls", {NULL}, 2762, "tcp"},
-{"dicom-tls", {NULL}, 2762, "udp"},
-{"desktop-dna", {NULL}, 2763, "tcp"},
-{"desktop-dna", {NULL}, 2763, "udp"},
-{"data-insurance", {NULL}, 2764, "tcp"},
-{"data-insurance", {NULL}, 2764, "udp"},
-{"qip-audup", {NULL}, 2765, "tcp"},
-{"qip-audup", {NULL}, 2765, "udp"},
-{"compaq-scp", {NULL}, 2766, "tcp"},
-{"compaq-scp", {NULL}, 2766, "udp"},
-{"uadtc", {NULL}, 2767, "tcp"},
-{"uadtc", {NULL}, 2767, "udp"},
-{"uacs", {NULL}, 2768, "tcp"},
-{"uacs", {NULL}, 2768, "udp"},
-{"exce", {NULL}, 2769, "tcp"},
-{"exce", {NULL}, 2769, "udp"},
-{"veronica", {NULL}, 2770, "tcp"},
-{"veronica", {NULL}, 2770, "udp"},
-{"vergencecm", {NULL}, 2771, "tcp"},
-{"vergencecm", {NULL}, 2771, "udp"},
-{"auris", {NULL}, 2772, "tcp"},
-{"auris", {NULL}, 2772, "udp"},
-{"rbakcup1", {NULL}, 2773, "tcp"},
-{"rbakcup1", {NULL}, 2773, "udp"},
-{"rbakcup2", {NULL}, 2774, "tcp"},
-{"rbakcup2", {NULL}, 2774, "udp"},
-{"smpp", {NULL}, 2775, "tcp"},
-{"smpp", {NULL}, 2775, "udp"},
-{"ridgeway1", {NULL}, 2776, "tcp"},
-{"ridgeway1", {NULL}, 2776, "udp"},
-{"ridgeway2", {NULL}, 2777, "tcp"},
-{"ridgeway2", {NULL}, 2777, "udp"},
-{"gwen-sonya", {NULL}, 2778, "tcp"},
-{"gwen-sonya", {NULL}, 2778, "udp"},
-{"lbc-sync", {NULL}, 2779, "tcp"},
-{"lbc-sync", {NULL}, 2779, "udp"},
-{"lbc-control", {NULL}, 2780, "tcp"},
-{"lbc-control", {NULL}, 2780, "udp"},
-{"whosells", {NULL}, 2781, "tcp"},
-{"whosells", {NULL}, 2781, "udp"},
-{"everydayrc", {NULL}, 2782, "tcp"},
-{"everydayrc", {NULL}, 2782, "udp"},
-{"aises", {NULL}, 2783, "tcp"},
-{"aises", {NULL}, 2783, "udp"},
-{"www-dev", {NULL}, 2784, "tcp"},
-{"www-dev", {NULL}, 2784, "udp"},
-{"aic-np", {NULL}, 2785, "tcp"},
-{"aic-np", {NULL}, 2785, "udp"},
-{"aic-oncrpc", {NULL}, 2786, "tcp"},
-{"aic-oncrpc", {NULL}, 2786, "udp"},
-{"piccolo", {NULL}, 2787, "tcp"},
-{"piccolo", {NULL}, 2787, "udp"},
-{"fryeserv", {NULL}, 2788, "tcp"},
-{"fryeserv", {NULL}, 2788, "udp"},
-{"media-agent", {NULL}, 2789, "tcp"},
-{"media-agent", {NULL}, 2789, "udp"},
-{"plgproxy", {NULL}, 2790, "tcp"},
-{"plgproxy", {NULL}, 2790, "udp"},
-{"mtport-regist", {NULL}, 2791, "tcp"},
-{"mtport-regist", {NULL}, 2791, "udp"},
-{"f5-globalsite", {NULL}, 2792, "tcp"},
-{"f5-globalsite", {NULL}, 2792, "udp"},
-{"initlsmsad", {NULL}, 2793, "tcp"},
-{"initlsmsad", {NULL}, 2793, "udp"},
-{"livestats", {NULL}, 2795, "tcp"},
-{"livestats", {NULL}, 2795, "udp"},
-{"ac-tech", {NULL}, 2796, "tcp"},
-{"ac-tech", {NULL}, 2796, "udp"},
-{"esp-encap", {NULL}, 2797, "tcp"},
-{"esp-encap", {NULL}, 2797, "udp"},
-{"tmesis-upshot", {NULL}, 2798, "tcp"},
-{"tmesis-upshot", {NULL}, 2798, "udp"},
-{"icon-discover", {NULL}, 2799, "tcp"},
-{"icon-discover", {NULL}, 2799, "udp"},
-{"acc-raid", {NULL}, 2800, "tcp"},
-{"acc-raid", {NULL}, 2800, "udp"},
-{"igcp", {NULL}, 2801, "tcp"},
-{"igcp", {NULL}, 2801, "udp"},
-{"veritas-tcp1", {NULL}, 2802, "tcp"},
-{"veritas-udp1", {NULL}, 2802, "udp"},
-{"btprjctrl", {NULL}, 2803, "tcp"},
-{"btprjctrl", {NULL}, 2803, "udp"},
-{"dvr-esm", {NULL}, 2804, "tcp"},
-{"dvr-esm", {NULL}, 2804, "udp"},
-{"wta-wsp-s", {NULL}, 2805, "tcp"},
-{"wta-wsp-s", {NULL}, 2805, "udp"},
-{"cspuni", {NULL}, 2806, "tcp"},
-{"cspuni", {NULL}, 2806, "udp"},
-{"cspmulti", {NULL}, 2807, "tcp"},
-{"cspmulti", {NULL}, 2807, "udp"},
-{"j-lan-p", {NULL}, 2808, "tcp"},
-{"j-lan-p", {NULL}, 2808, "udp"},
-{"corbaloc", {NULL}, 2809, "tcp"},
-{"corbaloc", {NULL}, 2809, "udp"},
-{"netsteward", {NULL}, 2810, "tcp"},
-{"netsteward", {NULL}, 2810, "udp"},
-{"gsiftp", {NULL}, 2811, "tcp"},
-{"gsiftp", {NULL}, 2811, "udp"},
-{"atmtcp", {NULL}, 2812, "tcp"},
-{"atmtcp", {NULL}, 2812, "udp"},
-{"llm-pass", {NULL}, 2813, "tcp"},
-{"llm-pass", {NULL}, 2813, "udp"},
-{"llm-csv", {NULL}, 2814, "tcp"},
-{"llm-csv", {NULL}, 2814, "udp"},
-{"lbc-measure", {NULL}, 2815, "tcp"},
-{"lbc-measure", {NULL}, 2815, "udp"},
-{"lbc-watchdog", {NULL}, 2816, "tcp"},
-{"lbc-watchdog", {NULL}, 2816, "udp"},
-{"nmsigport", {NULL}, 2817, "tcp"},
-{"nmsigport", {NULL}, 2817, "udp"},
-{"rmlnk", {NULL}, 2818, "tcp"},
-{"rmlnk", {NULL}, 2818, "udp"},
-{"fc-faultnotify", {NULL}, 2819, "tcp"},
-{"fc-faultnotify", {NULL}, 2819, "udp"},
-{"univision", {NULL}, 2820, "tcp"},
-{"univision", {NULL}, 2820, "udp"},
-{"vrts-at-port", {NULL}, 2821, "tcp"},
-{"vrts-at-port", {NULL}, 2821, "udp"},
-{"ka0wuc", {NULL}, 2822, "tcp"},
-{"ka0wuc", {NULL}, 2822, "udp"},
-{"cqg-netlan", {NULL}, 2823, "tcp"},
-{"cqg-netlan", {NULL}, 2823, "udp"},
-{"cqg-netlan-1", {NULL}, 2824, "tcp"},
-{"cqg-netlan-1", {NULL}, 2824, "udp"},
-{"slc-systemlog", {NULL}, 2826, "tcp"},
-{"slc-systemlog", {NULL}, 2826, "udp"},
-{"slc-ctrlrloops", {NULL}, 2827, "tcp"},
-{"slc-ctrlrloops", {NULL}, 2827, "udp"},
-{"itm-lm", {NULL}, 2828, "tcp"},
-{"itm-lm", {NULL}, 2828, "udp"},
-{"silkp1", {NULL}, 2829, "tcp"},
-{"silkp1", {NULL}, 2829, "udp"},
-{"silkp2", {NULL}, 2830, "tcp"},
-{"silkp2", {NULL}, 2830, "udp"},
-{"silkp3", {NULL}, 2831, "tcp"},
-{"silkp3", {NULL}, 2831, "udp"},
-{"silkp4", {NULL}, 2832, "tcp"},
-{"silkp4", {NULL}, 2832, "udp"},
-{"glishd", {NULL}, 2833, "tcp"},
-{"glishd", {NULL}, 2833, "udp"},
-{"evtp", {NULL}, 2834, "tcp"},
-{"evtp", {NULL}, 2834, "udp"},
-{"evtp-data", {NULL}, 2835, "tcp"},
-{"evtp-data", {NULL}, 2835, "udp"},
-{"catalyst", {NULL}, 2836, "tcp"},
-{"catalyst", {NULL}, 2836, "udp"},
-{"repliweb", {NULL}, 2837, "tcp"},
-{"repliweb", {NULL}, 2837, "udp"},
-{"starbot", {NULL}, 2838, "tcp"},
-{"starbot", {NULL}, 2838, "udp"},
-{"nmsigport", {NULL}, 2839, "tcp"},
-{"nmsigport", {NULL}, 2839, "udp"},
-{"l3-exprt", {NULL}, 2840, "tcp"},
-{"l3-exprt", {NULL}, 2840, "udp"},
-{"l3-ranger", {NULL}, 2841, "tcp"},
-{"l3-ranger", {NULL}, 2841, "udp"},
-{"l3-hawk", {NULL}, 2842, "tcp"},
-{"l3-hawk", {NULL}, 2842, "udp"},
-{"pdnet", {NULL}, 2843, "tcp"},
-{"pdnet", {NULL}, 2843, "udp"},
-{"bpcp-poll", {NULL}, 2844, "tcp"},
-{"bpcp-poll", {NULL}, 2844, "udp"},
-{"bpcp-trap", {NULL}, 2845, "tcp"},
-{"bpcp-trap", {NULL}, 2845, "udp"},
-{"aimpp-hello", {NULL}, 2846, "tcp"},
-{"aimpp-hello", {NULL}, 2846, "udp"},
-{"aimpp-port-req", {NULL}, 2847, "tcp"},
-{"aimpp-port-req", {NULL}, 2847, "udp"},
-{"amt-blc-port", {NULL}, 2848, "tcp"},
-{"amt-blc-port", {NULL}, 2848, "udp"},
-{"fxp", {NULL}, 2849, "tcp"},
-{"fxp", {NULL}, 2849, "udp"},
-{"metaconsole", {NULL}, 2850, "tcp"},
-{"metaconsole", {NULL}, 2850, "udp"},
-{"webemshttp", {NULL}, 2851, "tcp"},
-{"webemshttp", {NULL}, 2851, "udp"},
-{"bears-01", {NULL}, 2852, "tcp"},
-{"bears-01", {NULL}, 2852, "udp"},
-{"ispipes", {NULL}, 2853, "tcp"},
-{"ispipes", {NULL}, 2853, "udp"},
-{"infomover", {NULL}, 2854, "tcp"},
-{"infomover", {NULL}, 2854, "udp"},
-{"msrp", {NULL}, 2855, "tcp"},
-{"msrp", {NULL}, 2855, "udp"},
-{"cesdinv", {NULL}, 2856, "tcp"},
-{"cesdinv", {NULL}, 2856, "udp"},
-{"simctlp", {NULL}, 2857, "tcp"},
-{"simctlp", {NULL}, 2857, "udp"},
-{"ecnp", {NULL}, 2858, "tcp"},
-{"ecnp", {NULL}, 2858, "udp"},
-{"activememory", {NULL}, 2859, "tcp"},
-{"activememory", {NULL}, 2859, "udp"},
-{"dialpad-voice1", {NULL}, 2860, "tcp"},
-{"dialpad-voice1", {NULL}, 2860, "udp"},
-{"dialpad-voice2", {NULL}, 2861, "tcp"},
-{"dialpad-voice2", {NULL}, 2861, "udp"},
-{"ttg-protocol", {NULL}, 2862, "tcp"},
-{"ttg-protocol", {NULL}, 2862, "udp"},
-{"sonardata", {NULL}, 2863, "tcp"},
-{"sonardata", {NULL}, 2863, "udp"},
-{"astromed-main", {NULL}, 2864, "tcp"},
-{"astromed-main", {NULL}, 2864, "udp"},
-{"pit-vpn", {NULL}, 2865, "tcp"},
-{"pit-vpn", {NULL}, 2865, "udp"},
-{"iwlistener", {NULL}, 2866, "tcp"},
-{"iwlistener", {NULL}, 2866, "udp"},
-{"esps-portal", {NULL}, 2867, "tcp"},
-{"esps-portal", {NULL}, 2867, "udp"},
-{"npep-messaging", {NULL}, 2868, "tcp"},
-{"npep-messaging", {NULL}, 2868, "udp"},
-{"icslap", {NULL}, 2869, "tcp"},
-{"icslap", {NULL}, 2869, "udp"},
-{"daishi", {NULL}, 2870, "tcp"},
-{"daishi", {NULL}, 2870, "udp"},
-{"msi-selectplay", {NULL}, 2871, "tcp"},
-{"msi-selectplay", {NULL}, 2871, "udp"},
-{"radix", {NULL}, 2872, "tcp"},
-{"radix", {NULL}, 2872, "udp"},
-{"dxmessagebase1", {NULL}, 2874, "tcp"},
-{"dxmessagebase1", {NULL}, 2874, "udp"},
-{"dxmessagebase2", {NULL}, 2875, "tcp"},
-{"dxmessagebase2", {NULL}, 2875, "udp"},
-{"sps-tunnel", {NULL}, 2876, "tcp"},
-{"sps-tunnel", {NULL}, 2876, "udp"},
-{"bluelance", {NULL}, 2877, "tcp"},
-{"bluelance", {NULL}, 2877, "udp"},
-{"aap", {NULL}, 2878, "tcp"},
-{"aap", {NULL}, 2878, "udp"},
-{"ucentric-ds", {NULL}, 2879, "tcp"},
-{"ucentric-ds", {NULL}, 2879, "udp"},
-{"synapse", {NULL}, 2880, "tcp"},
-{"synapse", {NULL}, 2880, "udp"},
-{"ndsp", {NULL}, 2881, "tcp"},
-{"ndsp", {NULL}, 2881, "udp"},
-{"ndtp", {NULL}, 2882, "tcp"},
-{"ndtp", {NULL}, 2882, "udp"},
-{"ndnp", {NULL}, 2883, "tcp"},
-{"ndnp", {NULL}, 2883, "udp"},
-{"flashmsg", {NULL}, 2884, "tcp"},
-{"flashmsg", {NULL}, 2884, "udp"},
-{"topflow", {NULL}, 2885, "tcp"},
-{"topflow", {NULL}, 2885, "udp"},
-{"responselogic", {NULL}, 2886, "tcp"},
-{"responselogic", {NULL}, 2886, "udp"},
-{"aironetddp", {NULL}, 2887, "tcp"},
-{"aironetddp", {NULL}, 2887, "udp"},
-{"spcsdlobby", {NULL}, 2888, "tcp"},
-{"spcsdlobby", {NULL}, 2888, "udp"},
-{"rsom", {NULL}, 2889, "tcp"},
-{"rsom", {NULL}, 2889, "udp"},
-{"cspclmulti", {NULL}, 2890, "tcp"},
-{"cspclmulti", {NULL}, 2890, "udp"},
-{"cinegrfx-elmd", {NULL}, 2891, "tcp"},
-{"cinegrfx-elmd", {NULL}, 2891, "udp"},
-{"snifferdata", {NULL}, 2892, "tcp"},
-{"snifferdata", {NULL}, 2892, "udp"},
-{"vseconnector", {NULL}, 2893, "tcp"},
-{"vseconnector", {NULL}, 2893, "udp"},
-{"abacus-remote", {NULL}, 2894, "tcp"},
-{"abacus-remote", {NULL}, 2894, "udp"},
-{"natuslink", {NULL}, 2895, "tcp"},
-{"natuslink", {NULL}, 2895, "udp"},
-{"ecovisiong6-1", {NULL}, 2896, "tcp"},
-{"ecovisiong6-1", {NULL}, 2896, "udp"},
-{"citrix-rtmp", {NULL}, 2897, "tcp"},
-{"citrix-rtmp", {NULL}, 2897, "udp"},
-{"appliance-cfg", {NULL}, 2898, "tcp"},
-{"appliance-cfg", {NULL}, 2898, "udp"},
-{"powergemplus", {NULL}, 2899, "tcp"},
-{"powergemplus", {NULL}, 2899, "udp"},
-{"quicksuite", {NULL}, 2900, "tcp"},
-{"quicksuite", {NULL}, 2900, "udp"},
-{"allstorcns", {NULL}, 2901, "tcp"},
-{"allstorcns", {NULL}, 2901, "udp"},
-{"netaspi", {NULL}, 2902, "tcp"},
-{"netaspi", {NULL}, 2902, "udp"},
-{"suitcase", {NULL}, 2903, "tcp"},
-{"suitcase", {NULL}, 2903, "udp"},
-{"m2ua", {NULL}, 2904, "tcp"},
-{"m2ua", {NULL}, 2904, "udp"},
-{"m2ua", {NULL}, 2904, "sctp"},
-{"m3ua", {NULL}, 2905, "tcp"},
-{"m3ua", {NULL}, 2905, "sctp"},
-{"caller9", {NULL}, 2906, "tcp"},
-{"caller9", {NULL}, 2906, "udp"},
-{"webmethods-b2b", {NULL}, 2907, "tcp"},
-{"webmethods-b2b", {NULL}, 2907, "udp"},
-{"mao", {NULL}, 2908, "tcp"},
-{"mao", {NULL}, 2908, "udp"},
-{"funk-dialout", {NULL}, 2909, "tcp"},
-{"funk-dialout", {NULL}, 2909, "udp"},
-{"tdaccess", {NULL}, 2910, "tcp"},
-{"tdaccess", {NULL}, 2910, "udp"},
-{"blockade", {NULL}, 2911, "tcp"},
-{"blockade", {NULL}, 2911, "udp"},
-{"epicon", {NULL}, 2912, "tcp"},
-{"epicon", {NULL}, 2912, "udp"},
-{"boosterware", {NULL}, 2913, "tcp"},
-{"boosterware", {NULL}, 2913, "udp"},
-{"gamelobby", {NULL}, 2914, "tcp"},
-{"gamelobby", {NULL}, 2914, "udp"},
-{"tksocket", {NULL}, 2915, "tcp"},
-{"tksocket", {NULL}, 2915, "udp"},
-{"elvin_server", {NULL}, 2916, "tcp"},
-{"elvin_server", {NULL}, 2916, "udp"},
-{"elvin_client", {NULL}, 2917, "tcp"},
-{"elvin_client", {NULL}, 2917, "udp"},
-{"kastenchasepad", {NULL}, 2918, "tcp"},
-{"kastenchasepad", {NULL}, 2918, "udp"},
-{"roboer", {NULL}, 2919, "tcp"},
-{"roboer", {NULL}, 2919, "udp"},
-{"roboeda", {NULL}, 2920, "tcp"},
-{"roboeda", {NULL}, 2920, "udp"},
-{"cesdcdman", {NULL}, 2921, "tcp"},
-{"cesdcdman", {NULL}, 2921, "udp"},
-{"cesdcdtrn", {NULL}, 2922, "tcp"},
-{"cesdcdtrn", {NULL}, 2922, "udp"},
-{"wta-wsp-wtp-s", {NULL}, 2923, "tcp"},
-{"wta-wsp-wtp-s", {NULL}, 2923, "udp"},
-{"precise-vip", {NULL}, 2924, "tcp"},
-{"precise-vip", {NULL}, 2924, "udp"},
-{"mobile-file-dl", {NULL}, 2926, "tcp"},
-{"mobile-file-dl", {NULL}, 2926, "udp"},
-{"unimobilectrl", {NULL}, 2927, "tcp"},
-{"unimobilectrl", {NULL}, 2927, "udp"},
-{"redstone-cpss", {NULL}, 2928, "tcp"},
-{"redstone-cpss", {NULL}, 2928, "udp"},
-{"amx-webadmin", {NULL}, 2929, "tcp"},
-{"amx-webadmin", {NULL}, 2929, "udp"},
-{"amx-weblinx", {NULL}, 2930, "tcp"},
-{"amx-weblinx", {NULL}, 2930, "udp"},
-{"circle-x", {NULL}, 2931, "tcp"},
-{"circle-x", {NULL}, 2931, "udp"},
-{"incp", {NULL}, 2932, "tcp"},
-{"incp", {NULL}, 2932, "udp"},
-{"4-tieropmgw", {NULL}, 2933, "tcp"},
-{"4-tieropmgw", {NULL}, 2933, "udp"},
-{"4-tieropmcli", {NULL}, 2934, "tcp"},
-{"4-tieropmcli", {NULL}, 2934, "udp"},
-{"qtp", {NULL}, 2935, "tcp"},
-{"qtp", {NULL}, 2935, "udp"},
-{"otpatch", {NULL}, 2936, "tcp"},
-{"otpatch", {NULL}, 2936, "udp"},
-{"pnaconsult-lm", {NULL}, 2937, "tcp"},
-{"pnaconsult-lm", {NULL}, 2937, "udp"},
-{"sm-pas-1", {NULL}, 2938, "tcp"},
-{"sm-pas-1", {NULL}, 2938, "udp"},
-{"sm-pas-2", {NULL}, 2939, "tcp"},
-{"sm-pas-2", {NULL}, 2939, "udp"},
-{"sm-pas-3", {NULL}, 2940, "tcp"},
-{"sm-pas-3", {NULL}, 2940, "udp"},
-{"sm-pas-4", {NULL}, 2941, "tcp"},
-{"sm-pas-4", {NULL}, 2941, "udp"},
-{"sm-pas-5", {NULL}, 2942, "tcp"},
-{"sm-pas-5", {NULL}, 2942, "udp"},
-{"ttnrepository", {NULL}, 2943, "tcp"},
-{"ttnrepository", {NULL}, 2943, "udp"},
-{"megaco-h248", {NULL}, 2944, "tcp"},
-{"megaco-h248", {NULL}, 2944, "udp"},
-{"megaco-h248", {NULL}, 2944, "sctp"},
-{"h248-binary", {NULL}, 2945, "tcp"},
-{"h248-binary", {NULL}, 2945, "udp"},
-{"h248-binary", {NULL}, 2945, "sctp"},
-{"fjsvmpor", {NULL}, 2946, "tcp"},
-{"fjsvmpor", {NULL}, 2946, "udp"},
-{"gpsd", {NULL}, 2947, "tcp"},
-{"gpsd", {NULL}, 2947, "udp"},
-{"wap-push", {NULL}, 2948, "tcp"},
-{"wap-push", {NULL}, 2948, "udp"},
-{"wap-pushsecure", {NULL}, 2949, "tcp"},
-{"wap-pushsecure", {NULL}, 2949, "udp"},
-{"esip", {NULL}, 2950, "tcp"},
-{"esip", {NULL}, 2950, "udp"},
-{"ottp", {NULL}, 2951, "tcp"},
-{"ottp", {NULL}, 2951, "udp"},
-{"mpfwsas", {NULL}, 2952, "tcp"},
-{"mpfwsas", {NULL}, 2952, "udp"},
-{"ovalarmsrv", {NULL}, 2953, "tcp"},
-{"ovalarmsrv", {NULL}, 2953, "udp"},
-{"ovalarmsrv-cmd", {NULL}, 2954, "tcp"},
-{"ovalarmsrv-cmd", {NULL}, 2954, "udp"},
-{"csnotify", {NULL}, 2955, "tcp"},
-{"csnotify", {NULL}, 2955, "udp"},
-{"ovrimosdbman", {NULL}, 2956, "tcp"},
-{"ovrimosdbman", {NULL}, 2956, "udp"},
-{"jmact5", {NULL}, 2957, "tcp"},
-{"jmact5", {NULL}, 2957, "udp"},
-{"jmact6", {NULL}, 2958, "tcp"},
-{"jmact6", {NULL}, 2958, "udp"},
-{"rmopagt", {NULL}, 2959, "tcp"},
-{"rmopagt", {NULL}, 2959, "udp"},
-{"dfoxserver", {NULL}, 2960, "tcp"},
-{"dfoxserver", {NULL}, 2960, "udp"},
-{"boldsoft-lm", {NULL}, 2961, "tcp"},
-{"boldsoft-lm", {NULL}, 2961, "udp"},
-{"iph-policy-cli", {NULL}, 2962, "tcp"},
-{"iph-policy-cli", {NULL}, 2962, "udp"},
-{"iph-policy-adm", {NULL}, 2963, "tcp"},
-{"iph-policy-adm", {NULL}, 2963, "udp"},
-{"bullant-srap", {NULL}, 2964, "tcp"},
-{"bullant-srap", {NULL}, 2964, "udp"},
-{"bullant-rap", {NULL}, 2965, "tcp"},
-{"bullant-rap", {NULL}, 2965, "udp"},
-{"idp-infotrieve", {NULL}, 2966, "tcp"},
-{"idp-infotrieve", {NULL}, 2966, "udp"},
-{"ssc-agent", {NULL}, 2967, "tcp"},
-{"ssc-agent", {NULL}, 2967, "udp"},
-{"enpp", {NULL}, 2968, "tcp"},
-{"enpp", {NULL}, 2968, "udp"},
-{"essp", {NULL}, 2969, "tcp"},
-{"essp", {NULL}, 2969, "udp"},
-{"index-net", {NULL}, 2970, "tcp"},
-{"index-net", {NULL}, 2970, "udp"},
-{"netclip", {NULL}, 2971, "tcp"},
-{"netclip", {NULL}, 2971, "udp"},
-{"pmsm-webrctl", {NULL}, 2972, "tcp"},
-{"pmsm-webrctl", {NULL}, 2972, "udp"},
-{"svnetworks", {NULL}, 2973, "tcp"},
-{"svnetworks", {NULL}, 2973, "udp"},
-{"signal", {NULL}, 2974, "tcp"},
-{"signal", {NULL}, 2974, "udp"},
-{"fjmpcm", {NULL}, 2975, "tcp"},
-{"fjmpcm", {NULL}, 2975, "udp"},
-{"cns-srv-port", {NULL}, 2976, "tcp"},
-{"cns-srv-port", {NULL}, 2976, "udp"},
-{"ttc-etap-ns", {NULL}, 2977, "tcp"},
-{"ttc-etap-ns", {NULL}, 2977, "udp"},
-{"ttc-etap-ds", {NULL}, 2978, "tcp"},
-{"ttc-etap-ds", {NULL}, 2978, "udp"},
-{"h263-video", {NULL}, 2979, "tcp"},
-{"h263-video", {NULL}, 2979, "udp"},
-{"wimd", {NULL}, 2980, "tcp"},
-{"wimd", {NULL}, 2980, "udp"},
-{"mylxamport", {NULL}, 2981, "tcp"},
-{"mylxamport", {NULL}, 2981, "udp"},
-{"iwb-whiteboard", {NULL}, 2982, "tcp"},
-{"iwb-whiteboard", {NULL}, 2982, "udp"},
-{"netplan", {NULL}, 2983, "tcp"},
-{"netplan", {NULL}, 2983, "udp"},
-{"hpidsadmin", {NULL}, 2984, "tcp"},
-{"hpidsadmin", {NULL}, 2984, "udp"},
-{"hpidsagent", {NULL}, 2985, "tcp"},
-{"hpidsagent", {NULL}, 2985, "udp"},
-{"stonefalls", {NULL}, 2986, "tcp"},
-{"stonefalls", {NULL}, 2986, "udp"},
-{"identify", {NULL}, 2987, "tcp"},
-{"identify", {NULL}, 2987, "udp"},
-{"hippad", {NULL}, 2988, "tcp"},
-{"hippad", {NULL}, 2988, "udp"},
-{"zarkov", {NULL}, 2989, "tcp"},
-{"zarkov", {NULL}, 2989, "udp"},
-{"boscap", {NULL}, 2990, "tcp"},
-{"boscap", {NULL}, 2990, "udp"},
-{"wkstn-mon", {NULL}, 2991, "tcp"},
-{"wkstn-mon", {NULL}, 2991, "udp"},
-{"avenyo", {NULL}, 2992, "tcp"},
-{"avenyo", {NULL}, 2992, "udp"},
-{"veritas-vis1", {NULL}, 2993, "tcp"},
-{"veritas-vis1", {NULL}, 2993, "udp"},
-{"veritas-vis2", {NULL}, 2994, "tcp"},
-{"veritas-vis2", {NULL}, 2994, "udp"},
-{"idrs", {NULL}, 2995, "tcp"},
-{"idrs", {NULL}, 2995, "udp"},
-{"vsixml", {NULL}, 2996, "tcp"},
-{"vsixml", {NULL}, 2996, "udp"},
-{"rebol", {NULL}, 2997, "tcp"},
-{"rebol", {NULL}, 2997, "udp"},
-{"realsecure", {NULL}, 2998, "tcp"},
-{"realsecure", {NULL}, 2998, "udp"},
-{"remoteware-un", {NULL}, 2999, "tcp"},
-{"remoteware-un", {NULL}, 2999, "udp"},
-{"hbci", {NULL}, 3000, "tcp"},
-{"hbci", {NULL}, 3000, "udp"},
-{"remoteware-cl", {NULL}, 3000, "tcp"},
-{"remoteware-cl", {NULL}, 3000, "udp"},
-{"exlm-agent", {NULL}, 3002, "tcp"},
-{"exlm-agent", {NULL}, 3002, "udp"},
-{"remoteware-srv", {NULL}, 3002, "tcp"},
-{"remoteware-srv", {NULL}, 3002, "udp"},
-{"cgms", {NULL}, 3003, "tcp"},
-{"cgms", {NULL}, 3003, "udp"},
-{"csoftragent", {NULL}, 3004, "tcp"},
-{"csoftragent", {NULL}, 3004, "udp"},
-{"geniuslm", {NULL}, 3005, "tcp"},
-{"geniuslm", {NULL}, 3005, "udp"},
-{"ii-admin", {NULL}, 3006, "tcp"},
-{"ii-admin", {NULL}, 3006, "udp"},
-{"lotusmtap", {NULL}, 3007, "tcp"},
-{"lotusmtap", {NULL}, 3007, "udp"},
-{"midnight-tech", {NULL}, 3008, "tcp"},
-{"midnight-tech", {NULL}, 3008, "udp"},
-{"pxc-ntfy", {NULL}, 3009, "tcp"},
-{"pxc-ntfy", {NULL}, 3009, "udp"},
-{"gw", {NULL}, 3010, "tcp"},
-{"ping-pong", {NULL}, 3010, "udp"},
-{"trusted-web", {NULL}, 3011, "tcp"},
-{"trusted-web", {NULL}, 3011, "udp"},
-{"twsdss", {NULL}, 3012, "tcp"},
-{"twsdss", {NULL}, 3012, "udp"},
-{"gilatskysurfer", {NULL}, 3013, "tcp"},
-{"gilatskysurfer", {NULL}, 3013, "udp"},
-{"broker_service", {NULL}, 3014, "tcp"},
-{"broker_service", {NULL}, 3014, "udp"},
-{"nati-dstp", {NULL}, 3015, "tcp"},
-{"nati-dstp", {NULL}, 3015, "udp"},
-{"notify_srvr", {NULL}, 3016, "tcp"},
-{"notify_srvr", {NULL}, 3016, "udp"},
-{"event_listener", {NULL}, 3017, "tcp"},
-{"event_listener", {NULL}, 3017, "udp"},
-{"srvc_registry", {NULL}, 3018, "tcp"},
-{"srvc_registry", {NULL}, 3018, "udp"},
-{"resource_mgr", {NULL}, 3019, "tcp"},
-{"resource_mgr", {NULL}, 3019, "udp"},
-{"cifs", {NULL}, 3020, "tcp"},
-{"cifs", {NULL}, 3020, "udp"},
-{"agriserver", {NULL}, 3021, "tcp"},
-{"agriserver", {NULL}, 3021, "udp"},
-{"csregagent", {NULL}, 3022, "tcp"},
-{"csregagent", {NULL}, 3022, "udp"},
-{"magicnotes", {NULL}, 3023, "tcp"},
-{"magicnotes", {NULL}, 3023, "udp"},
-{"nds_sso", {NULL}, 3024, "tcp"},
-{"nds_sso", {NULL}, 3024, "udp"},
-{"arepa-raft", {NULL}, 3025, "tcp"},
-{"arepa-raft", {NULL}, 3025, "udp"},
-{"agri-gateway", {NULL}, 3026, "tcp"},
-{"agri-gateway", {NULL}, 3026, "udp"},
-{"LiebDevMgmt_C", {NULL}, 3027, "tcp"},
-{"LiebDevMgmt_C", {NULL}, 3027, "udp"},
-{"LiebDevMgmt_DM", {NULL}, 3028, "tcp"},
-{"LiebDevMgmt_DM", {NULL}, 3028, "udp"},
-{"LiebDevMgmt_A", {NULL}, 3029, "tcp"},
-{"LiebDevMgmt_A", {NULL}, 3029, "udp"},
-{"arepa-cas", {NULL}, 3030, "tcp"},
-{"arepa-cas", {NULL}, 3030, "udp"},
-{"eppc", {NULL}, 3031, "tcp"},
-{"eppc", {NULL}, 3031, "udp"},
-{"redwood-chat", {NULL}, 3032, "tcp"},
-{"redwood-chat", {NULL}, 3032, "udp"},
-{"pdb", {NULL}, 3033, "tcp"},
-{"pdb", {NULL}, 3033, "udp"},
-{"osmosis-aeea", {NULL}, 3034, "tcp"},
-{"osmosis-aeea", {NULL}, 3034, "udp"},
-{"fjsv-gssagt", {NULL}, 3035, "tcp"},
-{"fjsv-gssagt", {NULL}, 3035, "udp"},
-{"hagel-dump", {NULL}, 3036, "tcp"},
-{"hagel-dump", {NULL}, 3036, "udp"},
-{"hp-san-mgmt", {NULL}, 3037, "tcp"},
-{"hp-san-mgmt", {NULL}, 3037, "udp"},
-{"santak-ups", {NULL}, 3038, "tcp"},
-{"santak-ups", {NULL}, 3038, "udp"},
-{"cogitate", {NULL}, 3039, "tcp"},
-{"cogitate", {NULL}, 3039, "udp"},
-{"tomato-springs", {NULL}, 3040, "tcp"},
-{"tomato-springs", {NULL}, 3040, "udp"},
-{"di-traceware", {NULL}, 3041, "tcp"},
-{"di-traceware", {NULL}, 3041, "udp"},
-{"journee", {NULL}, 3042, "tcp"},
-{"journee", {NULL}, 3042, "udp"},
-{"brp", {NULL}, 3043, "tcp"},
-{"brp", {NULL}, 3043, "udp"},
-{"epp", {NULL}, 3044, "tcp"},
-{"epp", {NULL}, 3044, "udp"},
-{"responsenet", {NULL}, 3045, "tcp"},
-{"responsenet", {NULL}, 3045, "udp"},
-{"di-ase", {NULL}, 3046, "tcp"},
-{"di-ase", {NULL}, 3046, "udp"},
-{"hlserver", {NULL}, 3047, "tcp"},
-{"hlserver", {NULL}, 3047, "udp"},
-{"pctrader", {NULL}, 3048, "tcp"},
-{"pctrader", {NULL}, 3048, "udp"},
-{"nsws", {NULL}, 3049, "tcp"},
-{"nsws", {NULL}, 3049, "udp"},
-{"gds_db", {NULL}, 3050, "tcp"},
-{"gds_db", {NULL}, 3050, "udp"},
-{"galaxy-server", {NULL}, 3051, "tcp"},
-{"galaxy-server", {NULL}, 3051, "udp"},
-{"apc-3052", {NULL}, 3052, "tcp"},
-{"apc-3052", {NULL}, 3052, "udp"},
-{"dsom-server", {NULL}, 3053, "tcp"},
-{"dsom-server", {NULL}, 3053, "udp"},
-{"amt-cnf-prot", {NULL}, 3054, "tcp"},
-{"amt-cnf-prot", {NULL}, 3054, "udp"},
-{"policyserver", {NULL}, 3055, "tcp"},
-{"policyserver", {NULL}, 3055, "udp"},
-{"cdl-server", {NULL}, 3056, "tcp"},
-{"cdl-server", {NULL}, 3056, "udp"},
-{"goahead-fldup", {NULL}, 3057, "tcp"},
-{"goahead-fldup", {NULL}, 3057, "udp"},
-{"videobeans", {NULL}, 3058, "tcp"},
-{"videobeans", {NULL}, 3058, "udp"},
-{"qsoft", {NULL}, 3059, "tcp"},
-{"qsoft", {NULL}, 3059, "udp"},
-{"interserver", {NULL}, 3060, "tcp"},
-{"interserver", {NULL}, 3060, "udp"},
-{"cautcpd", {NULL}, 3061, "tcp"},
-{"cautcpd", {NULL}, 3061, "udp"},
-{"ncacn-ip-tcp", {NULL}, 3062, "tcp"},
-{"ncacn-ip-tcp", {NULL}, 3062, "udp"},
-{"ncadg-ip-udp", {NULL}, 3063, "tcp"},
-{"ncadg-ip-udp", {NULL}, 3063, "udp"},
-{"rprt", {NULL}, 3064, "tcp"},
-{"rprt", {NULL}, 3064, "udp"},
-{"slinterbase", {NULL}, 3065, "tcp"},
-{"slinterbase", {NULL}, 3065, "udp"},
-{"netattachsdmp", {NULL}, 3066, "tcp"},
-{"netattachsdmp", {NULL}, 3066, "udp"},
-{"fjhpjp", {NULL}, 3067, "tcp"},
-{"fjhpjp", {NULL}, 3067, "udp"},
-{"ls3bcast", {NULL}, 3068, "tcp"},
-{"ls3bcast", {NULL}, 3068, "udp"},
-{"ls3", {NULL}, 3069, "tcp"},
-{"ls3", {NULL}, 3069, "udp"},
-{"mgxswitch", {NULL}, 3070, "tcp"},
-{"mgxswitch", {NULL}, 3070, "udp"},
-{"csd-mgmt-port", {NULL}, 3071, "tcp"},
-{"csd-mgmt-port", {NULL}, 3071, "udp"},
-{"csd-monitor", {NULL}, 3072, "tcp"},
-{"csd-monitor", {NULL}, 3072, "udp"},
-{"vcrp", {NULL}, 3073, "tcp"},
-{"vcrp", {NULL}, 3073, "udp"},
-{"xbox", {NULL}, 3074, "tcp"},
-{"xbox", {NULL}, 3074, "udp"},
-{"orbix-locator", {NULL}, 3075, "tcp"},
-{"orbix-locator", {NULL}, 3075, "udp"},
-{"orbix-config", {NULL}, 3076, "tcp"},
-{"orbix-config", {NULL}, 3076, "udp"},
-{"orbix-loc-ssl", {NULL}, 3077, "tcp"},
-{"orbix-loc-ssl", {NULL}, 3077, "udp"},
-{"orbix-cfg-ssl", {NULL}, 3078, "tcp"},
-{"orbix-cfg-ssl", {NULL}, 3078, "udp"},
-{"lv-frontpanel", {NULL}, 3079, "tcp"},
-{"lv-frontpanel", {NULL}, 3079, "udp"},
-{"stm_pproc", {NULL}, 3080, "tcp"},
-{"stm_pproc", {NULL}, 3080, "udp"},
-{"tl1-lv", {NULL}, 3081, "tcp"},
-{"tl1-lv", {NULL}, 3081, "udp"},
-{"tl1-raw", {NULL}, 3082, "tcp"},
-{"tl1-raw", {NULL}, 3082, "udp"},
-{"tl1-telnet", {NULL}, 3083, "tcp"},
-{"tl1-telnet", {NULL}, 3083, "udp"},
-{"itm-mccs", {NULL}, 3084, "tcp"},
-{"itm-mccs", {NULL}, 3084, "udp"},
-{"pcihreq", {NULL}, 3085, "tcp"},
-{"pcihreq", {NULL}, 3085, "udp"},
-{"jdl-dbkitchen", {NULL}, 3086, "tcp"},
-{"jdl-dbkitchen", {NULL}, 3086, "udp"},
-{"asoki-sma", {NULL}, 3087, "tcp"},
-{"asoki-sma", {NULL}, 3087, "udp"},
-{"xdtp", {NULL}, 3088, "tcp"},
-{"xdtp", {NULL}, 3088, "udp"},
-{"ptk-alink", {NULL}, 3089, "tcp"},
-{"ptk-alink", {NULL}, 3089, "udp"},
-{"stss", {NULL}, 3090, "tcp"},
-{"stss", {NULL}, 3090, "udp"},
-{"1ci-smcs", {NULL}, 3091, "tcp"},
-{"1ci-smcs", {NULL}, 3091, "udp"},
-{"rapidmq-center", {NULL}, 3093, "tcp"},
-{"rapidmq-center", {NULL}, 3093, "udp"},
-{"rapidmq-reg", {NULL}, 3094, "tcp"},
-{"rapidmq-reg", {NULL}, 3094, "udp"},
-{"panasas", {NULL}, 3095, "tcp"},
-{"panasas", {NULL}, 3095, "udp"},
-{"ndl-aps", {NULL}, 3096, "tcp"},
-{"ndl-aps", {NULL}, 3096, "udp"},
-{"itu-bicc-stc", {NULL}, 3097, "sctp"},
-{"umm-port", {NULL}, 3098, "tcp"},
-{"umm-port", {NULL}, 3098, "udp"},
-{"chmd", {NULL}, 3099, "tcp"},
-{"chmd", {NULL}, 3099, "udp"},
-{"opcon-xps", {NULL}, 3100, "tcp"},
-{"opcon-xps", {NULL}, 3100, "udp"},
-{"hp-pxpib", {NULL}, 3101, "tcp"},
-{"hp-pxpib", {NULL}, 3101, "udp"},
-{"slslavemon", {NULL}, 3102, "tcp"},
-{"slslavemon", {NULL}, 3102, "udp"},
-{"autocuesmi", {NULL}, 3103, "tcp"},
-{"autocuesmi", {NULL}, 3103, "udp"},
-{"autocuelog", {NULL}, 3104, "tcp"},
-{"autocuetime", {NULL}, 3104, "udp"},
-{"cardbox", {NULL}, 3105, "tcp"},
-{"cardbox", {NULL}, 3105, "udp"},
-{"cardbox-http", {NULL}, 3106, "tcp"},
-{"cardbox-http", {NULL}, 3106, "udp"},
-{"business", {NULL}, 3107, "tcp"},
-{"business", {NULL}, 3107, "udp"},
-{"geolocate", {NULL}, 3108, "tcp"},
-{"geolocate", {NULL}, 3108, "udp"},
-{"personnel", {NULL}, 3109, "tcp"},
-{"personnel", {NULL}, 3109, "udp"},
-{"sim-control", {NULL}, 3110, "tcp"},
-{"sim-control", {NULL}, 3110, "udp"},
-{"wsynch", {NULL}, 3111, "tcp"},
-{"wsynch", {NULL}, 3111, "udp"},
-{"ksysguard", {NULL}, 3112, "tcp"},
-{"ksysguard", {NULL}, 3112, "udp"},
-{"cs-auth-svr", {NULL}, 3113, "tcp"},
-{"cs-auth-svr", {NULL}, 3113, "udp"},
-{"ccmad", {NULL}, 3114, "tcp"},
-{"ccmad", {NULL}, 3114, "udp"},
-{"mctet-master", {NULL}, 3115, "tcp"},
-{"mctet-master", {NULL}, 3115, "udp"},
-{"mctet-gateway", {NULL}, 3116, "tcp"},
-{"mctet-gateway", {NULL}, 3116, "udp"},
-{"mctet-jserv", {NULL}, 3117, "tcp"},
-{"mctet-jserv", {NULL}, 3117, "udp"},
-{"pkagent", {NULL}, 3118, "tcp"},
-{"pkagent", {NULL}, 3118, "udp"},
-{"d2000kernel", {NULL}, 3119, "tcp"},
-{"d2000kernel", {NULL}, 3119, "udp"},
-{"d2000webserver", {NULL}, 3120, "tcp"},
-{"d2000webserver", {NULL}, 3120, "udp"},
-{"vtr-emulator", {NULL}, 3122, "tcp"},
-{"vtr-emulator", {NULL}, 3122, "udp"},
-{"edix", {NULL}, 3123, "tcp"},
-{"edix", {NULL}, 3123, "udp"},
-{"beacon-port", {NULL}, 3124, "tcp"},
-{"beacon-port", {NULL}, 3124, "udp"},
-{"a13-an", {NULL}, 3125, "tcp"},
-{"a13-an", {NULL}, 3125, "udp"},
-{"ctx-bridge", {NULL}, 3127, "tcp"},
-{"ctx-bridge", {NULL}, 3127, "udp"},
-{"ndl-aas", {NULL}, 3128, "tcp"},
-{"ndl-aas", {NULL}, 3128, "udp"},
-{"netport-id", {NULL}, 3129, "tcp"},
-{"netport-id", {NULL}, 3129, "udp"},
-{"icpv2", {NULL}, 3130, "tcp"},
-{"icpv2", {NULL}, 3130, "udp"},
-{"netbookmark", {NULL}, 3131, "tcp"},
-{"netbookmark", {NULL}, 3131, "udp"},
-{"ms-rule-engine", {NULL}, 3132, "tcp"},
-{"ms-rule-engine", {NULL}, 3132, "udp"},
-{"prism-deploy", {NULL}, 3133, "tcp"},
-{"prism-deploy", {NULL}, 3133, "udp"},
-{"ecp", {NULL}, 3134, "tcp"},
-{"ecp", {NULL}, 3134, "udp"},
-{"peerbook-port", {NULL}, 3135, "tcp"},
-{"peerbook-port", {NULL}, 3135, "udp"},
-{"grubd", {NULL}, 3136, "tcp"},
-{"grubd", {NULL}, 3136, "udp"},
-{"rtnt-1", {NULL}, 3137, "tcp"},
-{"rtnt-1", {NULL}, 3137, "udp"},
-{"rtnt-2", {NULL}, 3138, "tcp"},
-{"rtnt-2", {NULL}, 3138, "udp"},
-{"incognitorv", {NULL}, 3139, "tcp"},
-{"incognitorv", {NULL}, 3139, "udp"},
-{"ariliamulti", {NULL}, 3140, "tcp"},
-{"ariliamulti", {NULL}, 3140, "udp"},
-{"vmodem", {NULL}, 3141, "tcp"},
-{"vmodem", {NULL}, 3141, "udp"},
-{"rdc-wh-eos", {NULL}, 3142, "tcp"},
-{"rdc-wh-eos", {NULL}, 3142, "udp"},
-{"seaview", {NULL}, 3143, "tcp"},
-{"seaview", {NULL}, 3143, "udp"},
-{"tarantella", {NULL}, 3144, "tcp"},
-{"tarantella", {NULL}, 3144, "udp"},
-{"csi-lfap", {NULL}, 3145, "tcp"},
-{"csi-lfap", {NULL}, 3145, "udp"},
-{"bears-02", {NULL}, 3146, "tcp"},
-{"bears-02", {NULL}, 3146, "udp"},
-{"rfio", {NULL}, 3147, "tcp"},
-{"rfio", {NULL}, 3147, "udp"},
-{"nm-game-admin", {NULL}, 3148, "tcp"},
-{"nm-game-admin", {NULL}, 3148, "udp"},
-{"nm-game-server", {NULL}, 3149, "tcp"},
-{"nm-game-server", {NULL}, 3149, "udp"},
-{"nm-asses-admin", {NULL}, 3150, "tcp"},
-{"nm-asses-admin", {NULL}, 3150, "udp"},
-{"nm-assessor", {NULL}, 3151, "tcp"},
-{"nm-assessor", {NULL}, 3151, "udp"},
-{"feitianrockey", {NULL}, 3152, "tcp"},
-{"feitianrockey", {NULL}, 3152, "udp"},
-{"s8-client-port", {NULL}, 3153, "tcp"},
-{"s8-client-port", {NULL}, 3153, "udp"},
-{"ccmrmi", {NULL}, 3154, "tcp"},
-{"ccmrmi", {NULL}, 3154, "udp"},
-{"jpegmpeg", {NULL}, 3155, "tcp"},
-{"jpegmpeg", {NULL}, 3155, "udp"},
-{"indura", {NULL}, 3156, "tcp"},
-{"indura", {NULL}, 3156, "udp"},
-{"e3consultants", {NULL}, 3157, "tcp"},
-{"e3consultants", {NULL}, 3157, "udp"},
-{"stvp", {NULL}, 3158, "tcp"},
-{"stvp", {NULL}, 3158, "udp"},
-{"navegaweb-port", {NULL}, 3159, "tcp"},
-{"navegaweb-port", {NULL}, 3159, "udp"},
-{"tip-app-server", {NULL}, 3160, "tcp"},
-{"tip-app-server", {NULL}, 3160, "udp"},
-{"doc1lm", {NULL}, 3161, "tcp"},
-{"doc1lm", {NULL}, 3161, "udp"},
-{"sflm", {NULL}, 3162, "tcp"},
-{"sflm", {NULL}, 3162, "udp"},
-{"res-sap", {NULL}, 3163, "tcp"},
-{"res-sap", {NULL}, 3163, "udp"},
-{"imprs", {NULL}, 3164, "tcp"},
-{"imprs", {NULL}, 3164, "udp"},
-{"newgenpay", {NULL}, 3165, "tcp"},
-{"newgenpay", {NULL}, 3165, "udp"},
-{"sossecollector", {NULL}, 3166, "tcp"},
-{"sossecollector", {NULL}, 3166, "udp"},
-{"nowcontact", {NULL}, 3167, "tcp"},
-{"nowcontact", {NULL}, 3167, "udp"},
-{"poweronnud", {NULL}, 3168, "tcp"},
-{"poweronnud", {NULL}, 3168, "udp"},
-{"serverview-as", {NULL}, 3169, "tcp"},
-{"serverview-as", {NULL}, 3169, "udp"},
-{"serverview-asn", {NULL}, 3170, "tcp"},
-{"serverview-asn", {NULL}, 3170, "udp"},
-{"serverview-gf", {NULL}, 3171, "tcp"},
-{"serverview-gf", {NULL}, 3171, "udp"},
-{"serverview-rm", {NULL}, 3172, "tcp"},
-{"serverview-rm", {NULL}, 3172, "udp"},
-{"serverview-icc", {NULL}, 3173, "tcp"},
-{"serverview-icc", {NULL}, 3173, "udp"},
-{"armi-server", {NULL}, 3174, "tcp"},
-{"armi-server", {NULL}, 3174, "udp"},
-{"t1-e1-over-ip", {NULL}, 3175, "tcp"},
-{"t1-e1-over-ip", {NULL}, 3175, "udp"},
-{"ars-master", {NULL}, 3176, "tcp"},
-{"ars-master", {NULL}, 3176, "udp"},
-{"phonex-port", {NULL}, 3177, "tcp"},
-{"phonex-port", {NULL}, 3177, "udp"},
-{"radclientport", {NULL}, 3178, "tcp"},
-{"radclientport", {NULL}, 3178, "udp"},
-{"h2gf-w-2m", {NULL}, 3179, "tcp"},
-{"h2gf-w-2m", {NULL}, 3179, "udp"},
-{"mc-brk-srv", {NULL}, 3180, "tcp"},
-{"mc-brk-srv", {NULL}, 3180, "udp"},
-{"bmcpatrolagent", {NULL}, 3181, "tcp"},
-{"bmcpatrolagent", {NULL}, 3181, "udp"},
-{"bmcpatrolrnvu", {NULL}, 3182, "tcp"},
-{"bmcpatrolrnvu", {NULL}, 3182, "udp"},
-{"cops-tls", {NULL}, 3183, "tcp"},
-{"cops-tls", {NULL}, 3183, "udp"},
-{"apogeex-port", {NULL}, 3184, "tcp"},
-{"apogeex-port", {NULL}, 3184, "udp"},
-{"smpppd", {NULL}, 3185, "tcp"},
-{"smpppd", {NULL}, 3185, "udp"},
-{"iiw-port", {NULL}, 3186, "tcp"},
-{"iiw-port", {NULL}, 3186, "udp"},
-{"odi-port", {NULL}, 3187, "tcp"},
-{"odi-port", {NULL}, 3187, "udp"},
-{"brcm-comm-port", {NULL}, 3188, "tcp"},
-{"brcm-comm-port", {NULL}, 3188, "udp"},
-{"pcle-infex", {NULL}, 3189, "tcp"},
-{"pcle-infex", {NULL}, 3189, "udp"},
-{"csvr-proxy", {NULL}, 3190, "tcp"},
-{"csvr-proxy", {NULL}, 3190, "udp"},
-{"csvr-sslproxy", {NULL}, 3191, "tcp"},
-{"csvr-sslproxy", {NULL}, 3191, "udp"},
-{"firemonrcc", {NULL}, 3192, "tcp"},
-{"firemonrcc", {NULL}, 3192, "udp"},
-{"spandataport", {NULL}, 3193, "tcp"},
-{"spandataport", {NULL}, 3193, "udp"},
-{"magbind", {NULL}, 3194, "tcp"},
-{"magbind", {NULL}, 3194, "udp"},
-{"ncu-1", {NULL}, 3195, "tcp"},
-{"ncu-1", {NULL}, 3195, "udp"},
-{"ncu-2", {NULL}, 3196, "tcp"},
-{"ncu-2", {NULL}, 3196, "udp"},
-{"embrace-dp-s", {NULL}, 3197, "tcp"},
-{"embrace-dp-s", {NULL}, 3197, "udp"},
-{"embrace-dp-c", {NULL}, 3198, "tcp"},
-{"embrace-dp-c", {NULL}, 3198, "udp"},
-{"dmod-workspace", {NULL}, 3199, "tcp"},
-{"dmod-workspace", {NULL}, 3199, "udp"},
-{"tick-port", {NULL}, 3200, "tcp"},
-{"tick-port", {NULL}, 3200, "udp"},
-{"cpq-tasksmart", {NULL}, 3201, "tcp"},
-{"cpq-tasksmart", {NULL}, 3201, "udp"},
-{"intraintra", {NULL}, 3202, "tcp"},
-{"intraintra", {NULL}, 3202, "udp"},
-{"netwatcher-mon", {NULL}, 3203, "tcp"},
-{"netwatcher-mon", {NULL}, 3203, "udp"},
-{"netwatcher-db", {NULL}, 3204, "tcp"},
-{"netwatcher-db", {NULL}, 3204, "udp"},
-{"isns", {NULL}, 3205, "tcp"},
-{"isns", {NULL}, 3205, "udp"},
-{"ironmail", {NULL}, 3206, "tcp"},
-{"ironmail", {NULL}, 3206, "udp"},
-{"vx-auth-port", {NULL}, 3207, "tcp"},
-{"vx-auth-port", {NULL}, 3207, "udp"},
-{"pfu-prcallback", {NULL}, 3208, "tcp"},
-{"pfu-prcallback", {NULL}, 3208, "udp"},
-{"netwkpathengine", {NULL}, 3209, "tcp"},
-{"netwkpathengine", {NULL}, 3209, "udp"},
-{"flamenco-proxy", {NULL}, 3210, "tcp"},
-{"flamenco-proxy", {NULL}, 3210, "udp"},
-{"avsecuremgmt", {NULL}, 3211, "tcp"},
-{"avsecuremgmt", {NULL}, 3211, "udp"},
-{"surveyinst", {NULL}, 3212, "tcp"},
-{"surveyinst", {NULL}, 3212, "udp"},
-{"neon24x7", {NULL}, 3213, "tcp"},
-{"neon24x7", {NULL}, 3213, "udp"},
-{"jmq-daemon-1", {NULL}, 3214, "tcp"},
-{"jmq-daemon-1", {NULL}, 3214, "udp"},
-{"jmq-daemon-2", {NULL}, 3215, "tcp"},
-{"jmq-daemon-2", {NULL}, 3215, "udp"},
-{"ferrari-foam", {NULL}, 3216, "tcp"},
-{"ferrari-foam", {NULL}, 3216, "udp"},
-{"unite", {NULL}, 3217, "tcp"},
-{"unite", {NULL}, 3217, "udp"},
-{"smartpackets", {NULL}, 3218, "tcp"},
-{"smartpackets", {NULL}, 3218, "udp"},
-{"wms-messenger", {NULL}, 3219, "tcp"},
-{"wms-messenger", {NULL}, 3219, "udp"},
-{"xnm-ssl", {NULL}, 3220, "tcp"},
-{"xnm-ssl", {NULL}, 3220, "udp"},
-{"xnm-clear-text", {NULL}, 3221, "tcp"},
-{"xnm-clear-text", {NULL}, 3221, "udp"},
-{"glbp", {NULL}, 3222, "tcp"},
-{"glbp", {NULL}, 3222, "udp"},
-{"digivote", {NULL}, 3223, "tcp"},
-{"digivote", {NULL}, 3223, "udp"},
-{"aes-discovery", {NULL}, 3224, "tcp"},
-{"aes-discovery", {NULL}, 3224, "udp"},
-{"fcip-port", {NULL}, 3225, "tcp"},
-{"fcip-port", {NULL}, 3225, "udp"},
-{"isi-irp", {NULL}, 3226, "tcp"},
-{"isi-irp", {NULL}, 3226, "udp"},
-{"dwnmshttp", {NULL}, 3227, "tcp"},
-{"dwnmshttp", {NULL}, 3227, "udp"},
-{"dwmsgserver", {NULL}, 3228, "tcp"},
-{"dwmsgserver", {NULL}, 3228, "udp"},
-{"global-cd-port", {NULL}, 3229, "tcp"},
-{"global-cd-port", {NULL}, 3229, "udp"},
-{"sftdst-port", {NULL}, 3230, "tcp"},
-{"sftdst-port", {NULL}, 3230, "udp"},
-{"vidigo", {NULL}, 3231, "tcp"},
-{"vidigo", {NULL}, 3231, "udp"},
-{"mdtp", {NULL}, 3232, "tcp"},
-{"mdtp", {NULL}, 3232, "udp"},
-{"whisker", {NULL}, 3233, "tcp"},
-{"whisker", {NULL}, 3233, "udp"},
-{"alchemy", {NULL}, 3234, "tcp"},
-{"alchemy", {NULL}, 3234, "udp"},
-{"mdap-port", {NULL}, 3235, "tcp"},
-{"mdap-port", {NULL}, 3235, "udp"},
-{"apparenet-ts", {NULL}, 3236, "tcp"},
-{"apparenet-ts", {NULL}, 3236, "udp"},
-{"apparenet-tps", {NULL}, 3237, "tcp"},
-{"apparenet-tps", {NULL}, 3237, "udp"},
-{"apparenet-as", {NULL}, 3238, "tcp"},
-{"apparenet-as", {NULL}, 3238, "udp"},
-{"apparenet-ui", {NULL}, 3239, "tcp"},
-{"apparenet-ui", {NULL}, 3239, "udp"},
-{"triomotion", {NULL}, 3240, "tcp"},
-{"triomotion", {NULL}, 3240, "udp"},
-{"sysorb", {NULL}, 3241, "tcp"},
-{"sysorb", {NULL}, 3241, "udp"},
-{"sdp-id-port", {NULL}, 3242, "tcp"},
-{"sdp-id-port", {NULL}, 3242, "udp"},
-{"timelot", {NULL}, 3243, "tcp"},
-{"timelot", {NULL}, 3243, "udp"},
-{"onesaf", {NULL}, 3244, "tcp"},
-{"onesaf", {NULL}, 3244, "udp"},
-{"vieo-fe", {NULL}, 3245, "tcp"},
-{"vieo-fe", {NULL}, 3245, "udp"},
-{"dvt-system", {NULL}, 3246, "tcp"},
-{"dvt-system", {NULL}, 3246, "udp"},
-{"dvt-data", {NULL}, 3247, "tcp"},
-{"dvt-data", {NULL}, 3247, "udp"},
-{"procos-lm", {NULL}, 3248, "tcp"},
-{"procos-lm", {NULL}, 3248, "udp"},
-{"ssp", {NULL}, 3249, "tcp"},
-{"ssp", {NULL}, 3249, "udp"},
-{"hicp", {NULL}, 3250, "tcp"},
-{"hicp", {NULL}, 3250, "udp"},
-{"sysscanner", {NULL}, 3251, "tcp"},
-{"sysscanner", {NULL}, 3251, "udp"},
-{"dhe", {NULL}, 3252, "tcp"},
-{"dhe", {NULL}, 3252, "udp"},
-{"pda-data", {NULL}, 3253, "tcp"},
-{"pda-data", {NULL}, 3253, "udp"},
-{"pda-sys", {NULL}, 3254, "tcp"},
-{"pda-sys", {NULL}, 3254, "udp"},
-{"semaphore", {NULL}, 3255, "tcp"},
-{"semaphore", {NULL}, 3255, "udp"},
-{"cpqrpm-agent", {NULL}, 3256, "tcp"},
-{"cpqrpm-agent", {NULL}, 3256, "udp"},
-{"cpqrpm-server", {NULL}, 3257, "tcp"},
-{"cpqrpm-server", {NULL}, 3257, "udp"},
-{"ivecon-port", {NULL}, 3258, "tcp"},
-{"ivecon-port", {NULL}, 3258, "udp"},
-{"epncdp2", {NULL}, 3259, "tcp"},
-{"epncdp2", {NULL}, 3259, "udp"},
-{"iscsi-target", {NULL}, 3260, "tcp"},
-{"iscsi-target", {NULL}, 3260, "udp"},
-{"winshadow", {NULL}, 3261, "tcp"},
-{"winshadow", {NULL}, 3261, "udp"},
-{"necp", {NULL}, 3262, "tcp"},
-{"necp", {NULL}, 3262, "udp"},
-{"ecolor-imager", {NULL}, 3263, "tcp"},
-{"ecolor-imager", {NULL}, 3263, "udp"},
-{"ccmail", {NULL}, 3264, "tcp"},
-{"ccmail", {NULL}, 3264, "udp"},
-{"altav-tunnel", {NULL}, 3265, "tcp"},
-{"altav-tunnel", {NULL}, 3265, "udp"},
-{"ns-cfg-server", {NULL}, 3266, "tcp"},
-{"ns-cfg-server", {NULL}, 3266, "udp"},
-{"ibm-dial-out", {NULL}, 3267, "tcp"},
-{"ibm-dial-out", {NULL}, 3267, "udp"},
-{"msft-gc", {NULL}, 3268, "tcp"},
-{"msft-gc", {NULL}, 3268, "udp"},
-{"msft-gc-ssl", {NULL}, 3269, "tcp"},
-{"msft-gc-ssl", {NULL}, 3269, "udp"},
-{"verismart", {NULL}, 3270, "tcp"},
-{"verismart", {NULL}, 3270, "udp"},
-{"csoft-prev", {NULL}, 3271, "tcp"},
-{"csoft-prev", {NULL}, 3271, "udp"},
-{"user-manager", {NULL}, 3272, "tcp"},
-{"user-manager", {NULL}, 3272, "udp"},
-{"sxmp", {NULL}, 3273, "tcp"},
-{"sxmp", {NULL}, 3273, "udp"},
-{"ordinox-server", {NULL}, 3274, "tcp"},
-{"ordinox-server", {NULL}, 3274, "udp"},
-{"samd", {NULL}, 3275, "tcp"},
-{"samd", {NULL}, 3275, "udp"},
-{"maxim-asics", {NULL}, 3276, "tcp"},
-{"maxim-asics", {NULL}, 3276, "udp"},
-{"awg-proxy", {NULL}, 3277, "tcp"},
-{"awg-proxy", {NULL}, 3277, "udp"},
-{"lkcmserver", {NULL}, 3278, "tcp"},
-{"lkcmserver", {NULL}, 3278, "udp"},
-{"admind", {NULL}, 3279, "tcp"},
-{"admind", {NULL}, 3279, "udp"},
-{"vs-server", {NULL}, 3280, "tcp"},
-{"vs-server", {NULL}, 3280, "udp"},
-{"sysopt", {NULL}, 3281, "tcp"},
-{"sysopt", {NULL}, 3281, "udp"},
-{"datusorb", {NULL}, 3282, "tcp"},
-{"datusorb", {NULL}, 3282, "udp"},
-{"net-assistant", {NULL}, 3283, "tcp"},
-{"net-assistant", {NULL}, 3283, "udp"},
-{"4talk", {NULL}, 3284, "tcp"},
-{"4talk", {NULL}, 3284, "udp"},
-{"plato", {NULL}, 3285, "tcp"},
-{"plato", {NULL}, 3285, "udp"},
-{"e-net", {NULL}, 3286, "tcp"},
-{"e-net", {NULL}, 3286, "udp"},
-{"directvdata", {NULL}, 3287, "tcp"},
-{"directvdata", {NULL}, 3287, "udp"},
-{"cops", {NULL}, 3288, "tcp"},
-{"cops", {NULL}, 3288, "udp"},
-{"enpc", {NULL}, 3289, "tcp"},
-{"enpc", {NULL}, 3289, "udp"},
-{"caps-lm", {NULL}, 3290, "tcp"},
-{"caps-lm", {NULL}, 3290, "udp"},
-{"sah-lm", {NULL}, 3291, "tcp"},
-{"sah-lm", {NULL}, 3291, "udp"},
-{"cart-o-rama", {NULL}, 3292, "tcp"},
-{"cart-o-rama", {NULL}, 3292, "udp"},
-{"fg-fps", {NULL}, 3293, "tcp"},
-{"fg-fps", {NULL}, 3293, "udp"},
-{"fg-gip", {NULL}, 3294, "tcp"},
-{"fg-gip", {NULL}, 3294, "udp"},
-{"dyniplookup", {NULL}, 3295, "tcp"},
-{"dyniplookup", {NULL}, 3295, "udp"},
-{"rib-slm", {NULL}, 3296, "tcp"},
-{"rib-slm", {NULL}, 3296, "udp"},
-{"cytel-lm", {NULL}, 3297, "tcp"},
-{"cytel-lm", {NULL}, 3297, "udp"},
-{"deskview", {NULL}, 3298, "tcp"},
-{"deskview", {NULL}, 3298, "udp"},
-{"pdrncs", {NULL}, 3299, "tcp"},
-{"pdrncs", {NULL}, 3299, "udp"},
-{"mcs-fastmail", {NULL}, 3302, "tcp"},
-{"mcs-fastmail", {NULL}, 3302, "udp"},
-{"opsession-clnt", {NULL}, 3303, "tcp"},
-{"opsession-clnt", {NULL}, 3303, "udp"},
-{"opsession-srvr", {NULL}, 3304, "tcp"},
-{"opsession-srvr", {NULL}, 3304, "udp"},
-{"odette-ftp", {NULL}, 3305, "tcp"},
-{"odette-ftp", {NULL}, 3305, "udp"},
-{"mysql", {NULL}, 3306, "tcp"},
-{"mysql", {NULL}, 3306, "udp"},
-{"opsession-prxy", {NULL}, 3307, "tcp"},
-{"opsession-prxy", {NULL}, 3307, "udp"},
-{"tns-server", {NULL}, 3308, "tcp"},
-{"tns-server", {NULL}, 3308, "udp"},
-{"tns-adv", {NULL}, 3309, "tcp"},
-{"tns-adv", {NULL}, 3309, "udp"},
-{"dyna-access", {NULL}, 3310, "tcp"},
-{"dyna-access", {NULL}, 3310, "udp"},
-{"mcns-tel-ret", {NULL}, 3311, "tcp"},
-{"mcns-tel-ret", {NULL}, 3311, "udp"},
-{"appman-server", {NULL}, 3312, "tcp"},
-{"appman-server", {NULL}, 3312, "udp"},
-{"uorb", {NULL}, 3313, "tcp"},
-{"uorb", {NULL}, 3313, "udp"},
-{"uohost", {NULL}, 3314, "tcp"},
-{"uohost", {NULL}, 3314, "udp"},
-{"cdid", {NULL}, 3315, "tcp"},
-{"cdid", {NULL}, 3315, "udp"},
-{"aicc-cmi", {NULL}, 3316, "tcp"},
-{"aicc-cmi", {NULL}, 3316, "udp"},
-{"vsaiport", {NULL}, 3317, "tcp"},
-{"vsaiport", {NULL}, 3317, "udp"},
-{"ssrip", {NULL}, 3318, "tcp"},
-{"ssrip", {NULL}, 3318, "udp"},
-{"sdt-lmd", {NULL}, 3319, "tcp"},
-{"sdt-lmd", {NULL}, 3319, "udp"},
-{"officelink2000", {NULL}, 3320, "tcp"},
-{"officelink2000", {NULL}, 3320, "udp"},
-{"vnsstr", {NULL}, 3321, "tcp"},
-{"vnsstr", {NULL}, 3321, "udp"},
-{"sftu", {NULL}, 3326, "tcp"},
-{"sftu", {NULL}, 3326, "udp"},
-{"bbars", {NULL}, 3327, "tcp"},
-{"bbars", {NULL}, 3327, "udp"},
-{"egptlm", {NULL}, 3328, "tcp"},
-{"egptlm", {NULL}, 3328, "udp"},
-{"hp-device-disc", {NULL}, 3329, "tcp"},
-{"hp-device-disc", {NULL}, 3329, "udp"},
-{"mcs-calypsoicf", {NULL}, 3330, "tcp"},
-{"mcs-calypsoicf", {NULL}, 3330, "udp"},
-{"mcs-messaging", {NULL}, 3331, "tcp"},
-{"mcs-messaging", {NULL}, 3331, "udp"},
-{"mcs-mailsvr", {NULL}, 3332, "tcp"},
-{"mcs-mailsvr", {NULL}, 3332, "udp"},
-{"dec-notes", {NULL}, 3333, "tcp"},
-{"dec-notes", {NULL}, 3333, "udp"},
-{"directv-web", {NULL}, 3334, "tcp"},
-{"directv-web", {NULL}, 3334, "udp"},
-{"directv-soft", {NULL}, 3335, "tcp"},
-{"directv-soft", {NULL}, 3335, "udp"},
-{"directv-tick", {NULL}, 3336, "tcp"},
-{"directv-tick", {NULL}, 3336, "udp"},
-{"directv-catlg", {NULL}, 3337, "tcp"},
-{"directv-catlg", {NULL}, 3337, "udp"},
-{"anet-b", {NULL}, 3338, "tcp"},
-{"anet-b", {NULL}, 3338, "udp"},
-{"anet-l", {NULL}, 3339, "tcp"},
-{"anet-l", {NULL}, 3339, "udp"},
-{"anet-m", {NULL}, 3340, "tcp"},
-{"anet-m", {NULL}, 3340, "udp"},
-{"anet-h", {NULL}, 3341, "tcp"},
-{"anet-h", {NULL}, 3341, "udp"},
-{"webtie", {NULL}, 3342, "tcp"},
-{"webtie", {NULL}, 3342, "udp"},
-{"ms-cluster-net", {NULL}, 3343, "tcp"},
-{"ms-cluster-net", {NULL}, 3343, "udp"},
-{"bnt-manager", {NULL}, 3344, "tcp"},
-{"bnt-manager", {NULL}, 3344, "udp"},
-{"influence", {NULL}, 3345, "tcp"},
-{"influence", {NULL}, 3345, "udp"},
-{"trnsprntproxy", {NULL}, 3346, "tcp"},
-{"trnsprntproxy", {NULL}, 3346, "udp"},
-{"phoenix-rpc", {NULL}, 3347, "tcp"},
-{"phoenix-rpc", {NULL}, 3347, "udp"},
-{"pangolin-laser", {NULL}, 3348, "tcp"},
-{"pangolin-laser", {NULL}, 3348, "udp"},
-{"chevinservices", {NULL}, 3349, "tcp"},
-{"chevinservices", {NULL}, 3349, "udp"},
-{"findviatv", {NULL}, 3350, "tcp"},
-{"findviatv", {NULL}, 3350, "udp"},
-{"btrieve", {NULL}, 3351, "tcp"},
-{"btrieve", {NULL}, 3351, "udp"},
-{"ssql", {NULL}, 3352, "tcp"},
-{"ssql", {NULL}, 3352, "udp"},
-{"fatpipe", {NULL}, 3353, "tcp"},
-{"fatpipe", {NULL}, 3353, "udp"},
-{"suitjd", {NULL}, 3354, "tcp"},
-{"suitjd", {NULL}, 3354, "udp"},
-{"ordinox-dbase", {NULL}, 3355, "tcp"},
-{"ordinox-dbase", {NULL}, 3355, "udp"},
-{"upnotifyps", {NULL}, 3356, "tcp"},
-{"upnotifyps", {NULL}, 3356, "udp"},
-{"adtech-test", {NULL}, 3357, "tcp"},
-{"adtech-test", {NULL}, 3357, "udp"},
-{"mpsysrmsvr", {NULL}, 3358, "tcp"},
-{"mpsysrmsvr", {NULL}, 3358, "udp"},
-{"wg-netforce", {NULL}, 3359, "tcp"},
-{"wg-netforce", {NULL}, 3359, "udp"},
-{"kv-server", {NULL}, 3360, "tcp"},
-{"kv-server", {NULL}, 3360, "udp"},
-{"kv-agent", {NULL}, 3361, "tcp"},
-{"kv-agent", {NULL}, 3361, "udp"},
-{"dj-ilm", {NULL}, 3362, "tcp"},
-{"dj-ilm", {NULL}, 3362, "udp"},
-{"nati-vi-server", {NULL}, 3363, "tcp"},
-{"nati-vi-server", {NULL}, 3363, "udp"},
-{"creativeserver", {NULL}, 3364, "tcp"},
-{"creativeserver", {NULL}, 3364, "udp"},
-{"contentserver", {NULL}, 3365, "tcp"},
-{"contentserver", {NULL}, 3365, "udp"},
-{"creativepartnr", {NULL}, 3366, "tcp"},
-{"creativepartnr", {NULL}, 3366, "udp"},
-{"tip2", {NULL}, 3372, "tcp"},
-{"tip2", {NULL}, 3372, "udp"},
-{"lavenir-lm", {NULL}, 3373, "tcp"},
-{"lavenir-lm", {NULL}, 3373, "udp"},
-{"cluster-disc", {NULL}, 3374, "tcp"},
-{"cluster-disc", {NULL}, 3374, "udp"},
-{"vsnm-agent", {NULL}, 3375, "tcp"},
-{"vsnm-agent", {NULL}, 3375, "udp"},
-{"cdbroker", {NULL}, 3376, "tcp"},
-{"cdbroker", {NULL}, 3376, "udp"},
-{"cogsys-lm", {NULL}, 3377, "tcp"},
-{"cogsys-lm", {NULL}, 3377, "udp"},
-{"wsicopy", {NULL}, 3378, "tcp"},
-{"wsicopy", {NULL}, 3378, "udp"},
-{"socorfs", {NULL}, 3379, "tcp"},
-{"socorfs", {NULL}, 3379, "udp"},
-{"sns-channels", {NULL}, 3380, "tcp"},
-{"sns-channels", {NULL}, 3380, "udp"},
-{"geneous", {NULL}, 3381, "tcp"},
-{"geneous", {NULL}, 3381, "udp"},
-{"fujitsu-neat", {NULL}, 3382, "tcp"},
-{"fujitsu-neat", {NULL}, 3382, "udp"},
-{"esp-lm", {NULL}, 3383, "tcp"},
-{"esp-lm", {NULL}, 3383, "udp"},
-{"hp-clic", {NULL}, 3384, "tcp"},
-{"hp-clic", {NULL}, 3384, "udp"},
-{"qnxnetman", {NULL}, 3385, "tcp"},
-{"qnxnetman", {NULL}, 3385, "udp"},
-{"gprs-data", {NULL}, 3386, "tcp"},
-{"gprs-sig", {NULL}, 3386, "udp"},
-{"backroomnet", {NULL}, 3387, "tcp"},
-{"backroomnet", {NULL}, 3387, "udp"},
-{"cbserver", {NULL}, 3388, "tcp"},
-{"cbserver", {NULL}, 3388, "udp"},
-{"ms-wbt-server", {NULL}, 3389, "tcp"},
-{"ms-wbt-server", {NULL}, 3389, "udp"},
-{"dsc", {NULL}, 3390, "tcp"},
-{"dsc", {NULL}, 3390, "udp"},
-{"savant", {NULL}, 3391, "tcp"},
-{"savant", {NULL}, 3391, "udp"},
-{"efi-lm", {NULL}, 3392, "tcp"},
-{"efi-lm", {NULL}, 3392, "udp"},
-{"d2k-tapestry1", {NULL}, 3393, "tcp"},
-{"d2k-tapestry1", {NULL}, 3393, "udp"},
-{"d2k-tapestry2", {NULL}, 3394, "tcp"},
-{"d2k-tapestry2", {NULL}, 3394, "udp"},
-{"dyna-lm", {NULL}, 3395, "tcp"},
-{"dyna-lm", {NULL}, 3395, "udp"},
-{"printer_agent", {NULL}, 3396, "tcp"},
-{"printer_agent", {NULL}, 3396, "udp"},
-{"cloanto-lm", {NULL}, 3397, "tcp"},
-{"cloanto-lm", {NULL}, 3397, "udp"},
-{"mercantile", {NULL}, 3398, "tcp"},
-{"mercantile", {NULL}, 3398, "udp"},
-{"csms", {NULL}, 3399, "tcp"},
-{"csms", {NULL}, 3399, "udp"},
-{"csms2", {NULL}, 3400, "tcp"},
-{"csms2", {NULL}, 3400, "udp"},
-{"filecast", {NULL}, 3401, "tcp"},
-{"filecast", {NULL}, 3401, "udp"},
-{"fxaengine-net", {NULL}, 3402, "tcp"},
-{"fxaengine-net", {NULL}, 3402, "udp"},
-{"nokia-ann-ch1", {NULL}, 3405, "tcp"},
-{"nokia-ann-ch1", {NULL}, 3405, "udp"},
-{"nokia-ann-ch2", {NULL}, 3406, "tcp"},
-{"nokia-ann-ch2", {NULL}, 3406, "udp"},
-{"ldap-admin", {NULL}, 3407, "tcp"},
-{"ldap-admin", {NULL}, 3407, "udp"},
-{"BESApi", {NULL}, 3408, "tcp"},
-{"BESApi", {NULL}, 3408, "udp"},
-{"networklens", {NULL}, 3409, "tcp"},
-{"networklens", {NULL}, 3409, "udp"},
-{"networklenss", {NULL}, 3410, "tcp"},
-{"networklenss", {NULL}, 3410, "udp"},
-{"biolink-auth", {NULL}, 3411, "tcp"},
-{"biolink-auth", {NULL}, 3411, "udp"},
-{"xmlblaster", {NULL}, 3412, "tcp"},
-{"xmlblaster", {NULL}, 3412, "udp"},
-{"svnet", {NULL}, 3413, "tcp"},
-{"svnet", {NULL}, 3413, "udp"},
-{"wip-port", {NULL}, 3414, "tcp"},
-{"wip-port", {NULL}, 3414, "udp"},
-{"bcinameservice", {NULL}, 3415, "tcp"},
-{"bcinameservice", {NULL}, 3415, "udp"},
-{"commandport", {NULL}, 3416, "tcp"},
-{"commandport", {NULL}, 3416, "udp"},
-{"csvr", {NULL}, 3417, "tcp"},
-{"csvr", {NULL}, 3417, "udp"},
-{"rnmap", {NULL}, 3418, "tcp"},
-{"rnmap", {NULL}, 3418, "udp"},
-{"softaudit", {NULL}, 3419, "tcp"},
-{"softaudit", {NULL}, 3419, "udp"},
-{"ifcp-port", {NULL}, 3420, "tcp"},
-{"ifcp-port", {NULL}, 3420, "udp"},
-{"bmap", {NULL}, 3421, "tcp"},
-{"bmap", {NULL}, 3421, "udp"},
-{"rusb-sys-port", {NULL}, 3422, "tcp"},
-{"rusb-sys-port", {NULL}, 3422, "udp"},
-{"xtrm", {NULL}, 3423, "tcp"},
-{"xtrm", {NULL}, 3423, "udp"},
-{"xtrms", {NULL}, 3424, "tcp"},
-{"xtrms", {NULL}, 3424, "udp"},
-{"agps-port", {NULL}, 3425, "tcp"},
-{"agps-port", {NULL}, 3425, "udp"},
-{"arkivio", {NULL}, 3426, "tcp"},
-{"arkivio", {NULL}, 3426, "udp"},
-{"websphere-snmp", {NULL}, 3427, "tcp"},
-{"websphere-snmp", {NULL}, 3427, "udp"},
-{"twcss", {NULL}, 3428, "tcp"},
-{"twcss", {NULL}, 3428, "udp"},
-{"gcsp", {NULL}, 3429, "tcp"},
-{"gcsp", {NULL}, 3429, "udp"},
-{"ssdispatch", {NULL}, 3430, "tcp"},
-{"ssdispatch", {NULL}, 3430, "udp"},
-{"ndl-als", {NULL}, 3431, "tcp"},
-{"ndl-als", {NULL}, 3431, "udp"},
-{"osdcp", {NULL}, 3432, "tcp"},
-{"osdcp", {NULL}, 3432, "udp"},
-{"alta-smp", {NULL}, 3433, "tcp"},
-{"alta-smp", {NULL}, 3433, "udp"},
-{"opencm", {NULL}, 3434, "tcp"},
-{"opencm", {NULL}, 3434, "udp"},
-{"pacom", {NULL}, 3435, "tcp"},
-{"pacom", {NULL}, 3435, "udp"},
-{"gc-config", {NULL}, 3436, "tcp"},
-{"gc-config", {NULL}, 3436, "udp"},
-{"autocueds", {NULL}, 3437, "tcp"},
-{"autocueds", {NULL}, 3437, "udp"},
-{"spiral-admin", {NULL}, 3438, "tcp"},
-{"spiral-admin", {NULL}, 3438, "udp"},
-{"hri-port", {NULL}, 3439, "tcp"},
-{"hri-port", {NULL}, 3439, "udp"},
-{"ans-console", {NULL}, 3440, "tcp"},
-{"ans-console", {NULL}, 3440, "udp"},
-{"connect-client", {NULL}, 3441, "tcp"},
-{"connect-client", {NULL}, 3441, "udp"},
-{"connect-server", {NULL}, 3442, "tcp"},
-{"connect-server", {NULL}, 3442, "udp"},
-{"ov-nnm-websrv", {NULL}, 3443, "tcp"},
-{"ov-nnm-websrv", {NULL}, 3443, "udp"},
-{"denali-server", {NULL}, 3444, "tcp"},
-{"denali-server", {NULL}, 3444, "udp"},
-{"monp", {NULL}, 3445, "tcp"},
-{"monp", {NULL}, 3445, "udp"},
-{"3comfaxrpc", {NULL}, 3446, "tcp"},
-{"3comfaxrpc", {NULL}, 3446, "udp"},
-{"directnet", {NULL}, 3447, "tcp"},
-{"directnet", {NULL}, 3447, "udp"},
-{"dnc-port", {NULL}, 3448, "tcp"},
-{"dnc-port", {NULL}, 3448, "udp"},
-{"hotu-chat", {NULL}, 3449, "tcp"},
-{"hotu-chat", {NULL}, 3449, "udp"},
-{"castorproxy", {NULL}, 3450, "tcp"},
-{"castorproxy", {NULL}, 3450, "udp"},
-{"asam", {NULL}, 3451, "tcp"},
-{"asam", {NULL}, 3451, "udp"},
-{"sabp-signal", {NULL}, 3452, "tcp"},
-{"sabp-signal", {NULL}, 3452, "udp"},
-{"pscupd", {NULL}, 3453, "tcp"},
-{"pscupd", {NULL}, 3453, "udp"},
-{"mira", {NULL}, 3454, "tcp"},
-{"prsvp", {NULL}, 3455, "tcp"},
-{"prsvp", {NULL}, 3455, "udp"},
-{"vat", {NULL}, 3456, "tcp"},
-{"vat", {NULL}, 3456, "udp"},
-{"vat-control", {NULL}, 3457, "tcp"},
-{"vat-control", {NULL}, 3457, "udp"},
-{"d3winosfi", {NULL}, 3458, "tcp"},
-{"d3winosfi", {NULL}, 3458, "udp"},
-{"integral", {NULL}, 3459, "tcp"},
-{"integral", {NULL}, 3459, "udp"},
-{"edm-manager", {NULL}, 3460, "tcp"},
-{"edm-manager", {NULL}, 3460, "udp"},
-{"edm-stager", {NULL}, 3461, "tcp"},
-{"edm-stager", {NULL}, 3461, "udp"},
-{"edm-std-notify", {NULL}, 3462, "tcp"},
-{"edm-std-notify", {NULL}, 3462, "udp"},
-{"edm-adm-notify", {NULL}, 3463, "tcp"},
-{"edm-adm-notify", {NULL}, 3463, "udp"},
-{"edm-mgr-sync", {NULL}, 3464, "tcp"},
-{"edm-mgr-sync", {NULL}, 3464, "udp"},
-{"edm-mgr-cntrl", {NULL}, 3465, "tcp"},
-{"edm-mgr-cntrl", {NULL}, 3465, "udp"},
-{"workflow", {NULL}, 3466, "tcp"},
-{"workflow", {NULL}, 3466, "udp"},
-{"rcst", {NULL}, 3467, "tcp"},
-{"rcst", {NULL}, 3467, "udp"},
-{"ttcmremotectrl", {NULL}, 3468, "tcp"},
-{"ttcmremotectrl", {NULL}, 3468, "udp"},
-{"pluribus", {NULL}, 3469, "tcp"},
-{"pluribus", {NULL}, 3469, "udp"},
-{"jt400", {NULL}, 3470, "tcp"},
-{"jt400", {NULL}, 3470, "udp"},
-{"jt400-ssl", {NULL}, 3471, "tcp"},
-{"jt400-ssl", {NULL}, 3471, "udp"},
-{"jaugsremotec-1", {NULL}, 3472, "tcp"},
-{"jaugsremotec-1", {NULL}, 3472, "udp"},
-{"jaugsremotec-2", {NULL}, 3473, "tcp"},
-{"jaugsremotec-2", {NULL}, 3473, "udp"},
-{"ttntspauto", {NULL}, 3474, "tcp"},
-{"ttntspauto", {NULL}, 3474, "udp"},
-{"genisar-port", {NULL}, 3475, "tcp"},
-{"genisar-port", {NULL}, 3475, "udp"},
-{"nppmp", {NULL}, 3476, "tcp"},
-{"nppmp", {NULL}, 3476, "udp"},
-{"ecomm", {NULL}, 3477, "tcp"},
-{"ecomm", {NULL}, 3477, "udp"},
-{"stun", {NULL}, 3478, "tcp"},
-{"stun", {NULL}, 3478, "udp"},
-{"turn", {NULL}, 3478, "tcp"},
-{"turn", {NULL}, 3478, "udp"},
-{"stun-behavior", {NULL}, 3478, "tcp"},
-{"stun-behavior", {NULL}, 3478, "udp"},
-{"twrpc", {NULL}, 3479, "tcp"},
-{"twrpc", {NULL}, 3479, "udp"},
-{"plethora", {NULL}, 3480, "tcp"},
-{"plethora", {NULL}, 3480, "udp"},
-{"cleanerliverc", {NULL}, 3481, "tcp"},
-{"cleanerliverc", {NULL}, 3481, "udp"},
-{"vulture", {NULL}, 3482, "tcp"},
-{"vulture", {NULL}, 3482, "udp"},
-{"slim-devices", {NULL}, 3483, "tcp"},
-{"slim-devices", {NULL}, 3483, "udp"},
-{"gbs-stp", {NULL}, 3484, "tcp"},
-{"gbs-stp", {NULL}, 3484, "udp"},
-{"celatalk", {NULL}, 3485, "tcp"},
-{"celatalk", {NULL}, 3485, "udp"},
-{"ifsf-hb-port", {NULL}, 3486, "tcp"},
-{"ifsf-hb-port", {NULL}, 3486, "udp"},
-{"ltctcp", {NULL}, 3487, "tcp"},
-{"ltcudp", {NULL}, 3487, "udp"},
-{"fs-rh-srv", {NULL}, 3488, "tcp"},
-{"fs-rh-srv", {NULL}, 3488, "udp"},
-{"dtp-dia", {NULL}, 3489, "tcp"},
-{"dtp-dia", {NULL}, 3489, "udp"},
-{"colubris", {NULL}, 3490, "tcp"},
-{"colubris", {NULL}, 3490, "udp"},
-{"swr-port", {NULL}, 3491, "tcp"},
-{"swr-port", {NULL}, 3491, "udp"},
-{"tvdumtray-port", {NULL}, 3492, "tcp"},
-{"tvdumtray-port", {NULL}, 3492, "udp"},
-{"nut", {NULL}, 3493, "tcp"},
-{"nut", {NULL}, 3493, "udp"},
-{"ibm3494", {NULL}, 3494, "tcp"},
-{"ibm3494", {NULL}, 3494, "udp"},
-{"seclayer-tcp", {NULL}, 3495, "tcp"},
-{"seclayer-tcp", {NULL}, 3495, "udp"},
-{"seclayer-tls", {NULL}, 3496, "tcp"},
-{"seclayer-tls", {NULL}, 3496, "udp"},
-{"ipether232port", {NULL}, 3497, "tcp"},
-{"ipether232port", {NULL}, 3497, "udp"},
-{"dashpas-port", {NULL}, 3498, "tcp"},
-{"dashpas-port", {NULL}, 3498, "udp"},
-{"sccip-media", {NULL}, 3499, "tcp"},
-{"sccip-media", {NULL}, 3499, "udp"},
-{"rtmp-port", {NULL}, 3500, "tcp"},
-{"rtmp-port", {NULL}, 3500, "udp"},
-{"isoft-p2p", {NULL}, 3501, "tcp"},
-{"isoft-p2p", {NULL}, 3501, "udp"},
-{"avinstalldisc", {NULL}, 3502, "tcp"},
-{"avinstalldisc", {NULL}, 3502, "udp"},
-{"lsp-ping", {NULL}, 3503, "tcp"},
-{"lsp-ping", {NULL}, 3503, "udp"},
-{"ironstorm", {NULL}, 3504, "tcp"},
-{"ironstorm", {NULL}, 3504, "udp"},
-{"ccmcomm", {NULL}, 3505, "tcp"},
-{"ccmcomm", {NULL}, 3505, "udp"},
-{"apc-3506", {NULL}, 3506, "tcp"},
-{"apc-3506", {NULL}, 3506, "udp"},
-{"nesh-broker", {NULL}, 3507, "tcp"},
-{"nesh-broker", {NULL}, 3507, "udp"},
-{"interactionweb", {NULL}, 3508, "tcp"},
-{"interactionweb", {NULL}, 3508, "udp"},
-{"vt-ssl", {NULL}, 3509, "tcp"},
-{"vt-ssl", {NULL}, 3509, "udp"},
-{"xss-port", {NULL}, 3510, "tcp"},
-{"xss-port", {NULL}, 3510, "udp"},
-{"webmail-2", {NULL}, 3511, "tcp"},
-{"webmail-2", {NULL}, 3511, "udp"},
-{"aztec", {NULL}, 3512, "tcp"},
-{"aztec", {NULL}, 3512, "udp"},
-{"arcpd", {NULL}, 3513, "tcp"},
-{"arcpd", {NULL}, 3513, "udp"},
-{"must-p2p", {NULL}, 3514, "tcp"},
-{"must-p2p", {NULL}, 3514, "udp"},
-{"must-backplane", {NULL}, 3515, "tcp"},
-{"must-backplane", {NULL}, 3515, "udp"},
-{"smartcard-port", {NULL}, 3516, "tcp"},
-{"smartcard-port", {NULL}, 3516, "udp"},
-{"802-11-iapp", {NULL}, 3517, "tcp"},
-{"802-11-iapp", {NULL}, 3517, "udp"},
-{"artifact-msg", {NULL}, 3518, "tcp"},
-{"artifact-msg", {NULL}, 3518, "udp"},
-{"nvmsgd", {NULL}, 3519, "tcp"},
-{"galileo", {NULL}, 3519, "udp"},
-{"galileolog", {NULL}, 3520, "tcp"},
-{"galileolog", {NULL}, 3520, "udp"},
-{"mc3ss", {NULL}, 3521, "tcp"},
-{"mc3ss", {NULL}, 3521, "udp"},
-{"nssocketport", {NULL}, 3522, "tcp"},
-{"nssocketport", {NULL}, 3522, "udp"},
-{"odeumservlink", {NULL}, 3523, "tcp"},
-{"odeumservlink", {NULL}, 3523, "udp"},
-{"ecmport", {NULL}, 3524, "tcp"},
-{"ecmport", {NULL}, 3524, "udp"},
-{"eisport", {NULL}, 3525, "tcp"},
-{"eisport", {NULL}, 3525, "udp"},
-{"starquiz-port", {NULL}, 3526, "tcp"},
-{"starquiz-port", {NULL}, 3526, "udp"},
-{"beserver-msg-q", {NULL}, 3527, "tcp"},
-{"beserver-msg-q", {NULL}, 3527, "udp"},
-{"jboss-iiop", {NULL}, 3528, "tcp"},
-{"jboss-iiop", {NULL}, 3528, "udp"},
-{"jboss-iiop-ssl", {NULL}, 3529, "tcp"},
-{"jboss-iiop-ssl", {NULL}, 3529, "udp"},
-{"gf", {NULL}, 3530, "tcp"},
-{"gf", {NULL}, 3530, "udp"},
-{"joltid", {NULL}, 3531, "tcp"},
-{"joltid", {NULL}, 3531, "udp"},
-{"raven-rmp", {NULL}, 3532, "tcp"},
-{"raven-rmp", {NULL}, 3532, "udp"},
-{"raven-rdp", {NULL}, 3533, "tcp"},
-{"raven-rdp", {NULL}, 3533, "udp"},
-{"urld-port", {NULL}, 3534, "tcp"},
-{"urld-port", {NULL}, 3534, "udp"},
-{"ms-la", {NULL}, 3535, "tcp"},
-{"ms-la", {NULL}, 3535, "udp"},
-{"snac", {NULL}, 3536, "tcp"},
-{"snac", {NULL}, 3536, "udp"},
-{"ni-visa-remote", {NULL}, 3537, "tcp"},
-{"ni-visa-remote", {NULL}, 3537, "udp"},
-{"ibm-diradm", {NULL}, 3538, "tcp"},
-{"ibm-diradm", {NULL}, 3538, "udp"},
-{"ibm-diradm-ssl", {NULL}, 3539, "tcp"},
-{"ibm-diradm-ssl", {NULL}, 3539, "udp"},
-{"pnrp-port", {NULL}, 3540, "tcp"},
-{"pnrp-port", {NULL}, 3540, "udp"},
-{"voispeed-port", {NULL}, 3541, "tcp"},
-{"voispeed-port", {NULL}, 3541, "udp"},
-{"hacl-monitor", {NULL}, 3542, "tcp"},
-{"hacl-monitor", {NULL}, 3542, "udp"},
-{"qftest-lookup", {NULL}, 3543, "tcp"},
-{"qftest-lookup", {NULL}, 3543, "udp"},
-{"teredo", {NULL}, 3544, "tcp"},
-{"teredo", {NULL}, 3544, "udp"},
-{"camac", {NULL}, 3545, "tcp"},
-{"camac", {NULL}, 3545, "udp"},
-{"symantec-sim", {NULL}, 3547, "tcp"},
-{"symantec-sim", {NULL}, 3547, "udp"},
-{"interworld", {NULL}, 3548, "tcp"},
-{"interworld", {NULL}, 3548, "udp"},
-{"tellumat-nms", {NULL}, 3549, "tcp"},
-{"tellumat-nms", {NULL}, 3549, "udp"},
-{"ssmpp", {NULL}, 3550, "tcp"},
-{"ssmpp", {NULL}, 3550, "udp"},
-{"apcupsd", {NULL}, 3551, "tcp"},
-{"apcupsd", {NULL}, 3551, "udp"},
-{"taserver", {NULL}, 3552, "tcp"},
-{"taserver", {NULL}, 3552, "udp"},
-{"rbr-discovery", {NULL}, 3553, "tcp"},
-{"rbr-discovery", {NULL}, 3553, "udp"},
-{"questnotify", {NULL}, 3554, "tcp"},
-{"questnotify", {NULL}, 3554, "udp"},
-{"razor", {NULL}, 3555, "tcp"},
-{"razor", {NULL}, 3555, "udp"},
-{"sky-transport", {NULL}, 3556, "tcp"},
-{"sky-transport", {NULL}, 3556, "udp"},
-{"personalos-001", {NULL}, 3557, "tcp"},
-{"personalos-001", {NULL}, 3557, "udp"},
-{"mcp-port", {NULL}, 3558, "tcp"},
-{"mcp-port", {NULL}, 3558, "udp"},
-{"cctv-port", {NULL}, 3559, "tcp"},
-{"cctv-port", {NULL}, 3559, "udp"},
-{"iniserve-port", {NULL}, 3560, "tcp"},
-{"iniserve-port", {NULL}, 3560, "udp"},
-{"bmc-onekey", {NULL}, 3561, "tcp"},
-{"bmc-onekey", {NULL}, 3561, "udp"},
-{"sdbproxy", {NULL}, 3562, "tcp"},
-{"sdbproxy", {NULL}, 3562, "udp"},
-{"watcomdebug", {NULL}, 3563, "tcp"},
-{"watcomdebug", {NULL}, 3563, "udp"},
-{"esimport", {NULL}, 3564, "tcp"},
-{"esimport", {NULL}, 3564, "udp"},
-{"m2pa", {NULL}, 3565, "tcp"},
-{"m2pa", {NULL}, 3565, "sctp"},
-{"quest-data-hub", {NULL}, 3566, "tcp"},
-{"oap", {NULL}, 3567, "tcp"},
-{"oap", {NULL}, 3567, "udp"},
-{"oap-s", {NULL}, 3568, "tcp"},
-{"oap-s", {NULL}, 3568, "udp"},
-{"mbg-ctrl", {NULL}, 3569, "tcp"},
-{"mbg-ctrl", {NULL}, 3569, "udp"},
-{"mccwebsvr-port", {NULL}, 3570, "tcp"},
-{"mccwebsvr-port", {NULL}, 3570, "udp"},
-{"megardsvr-port", {NULL}, 3571, "tcp"},
-{"megardsvr-port", {NULL}, 3571, "udp"},
-{"megaregsvrport", {NULL}, 3572, "tcp"},
-{"megaregsvrport", {NULL}, 3572, "udp"},
-{"tag-ups-1", {NULL}, 3573, "tcp"},
-{"tag-ups-1", {NULL}, 3573, "udp"},
-{"dmaf-server", {NULL}, 3574, "tcp"},
-{"dmaf-caster", {NULL}, 3574, "udp"},
-{"ccm-port", {NULL}, 3575, "tcp"},
-{"ccm-port", {NULL}, 3575, "udp"},
-{"cmc-port", {NULL}, 3576, "tcp"},
-{"cmc-port", {NULL}, 3576, "udp"},
-{"config-port", {NULL}, 3577, "tcp"},
-{"config-port", {NULL}, 3577, "udp"},
-{"data-port", {NULL}, 3578, "tcp"},
-{"data-port", {NULL}, 3578, "udp"},
-{"ttat3lb", {NULL}, 3579, "tcp"},
-{"ttat3lb", {NULL}, 3579, "udp"},
-{"nati-svrloc", {NULL}, 3580, "tcp"},
-{"nati-svrloc", {NULL}, 3580, "udp"},
-{"kfxaclicensing", {NULL}, 3581, "tcp"},
-{"kfxaclicensing", {NULL}, 3581, "udp"},
-{"press", {NULL}, 3582, "tcp"},
-{"press", {NULL}, 3582, "udp"},
-{"canex-watch", {NULL}, 3583, "tcp"},
-{"canex-watch", {NULL}, 3583, "udp"},
-{"u-dbap", {NULL}, 3584, "tcp"},
-{"u-dbap", {NULL}, 3584, "udp"},
-{"emprise-lls", {NULL}, 3585, "tcp"},
-{"emprise-lls", {NULL}, 3585, "udp"},
-{"emprise-lsc", {NULL}, 3586, "tcp"},
-{"emprise-lsc", {NULL}, 3586, "udp"},
-{"p2pgroup", {NULL}, 3587, "tcp"},
-{"p2pgroup", {NULL}, 3587, "udp"},
-{"sentinel", {NULL}, 3588, "tcp"},
-{"sentinel", {NULL}, 3588, "udp"},
-{"isomair", {NULL}, 3589, "tcp"},
-{"isomair", {NULL}, 3589, "udp"},
-{"wv-csp-sms", {NULL}, 3590, "tcp"},
-{"wv-csp-sms", {NULL}, 3590, "udp"},
-{"gtrack-server", {NULL}, 3591, "tcp"},
-{"gtrack-server", {NULL}, 3591, "udp"},
-{"gtrack-ne", {NULL}, 3592, "tcp"},
-{"gtrack-ne", {NULL}, 3592, "udp"},
-{"bpmd", {NULL}, 3593, "tcp"},
-{"bpmd", {NULL}, 3593, "udp"},
-{"mediaspace", {NULL}, 3594, "tcp"},
-{"mediaspace", {NULL}, 3594, "udp"},
-{"shareapp", {NULL}, 3595, "tcp"},
-{"shareapp", {NULL}, 3595, "udp"},
-{"iw-mmogame", {NULL}, 3596, "tcp"},
-{"iw-mmogame", {NULL}, 3596, "udp"},
-{"a14", {NULL}, 3597, "tcp"},
-{"a14", {NULL}, 3597, "udp"},
-{"a15", {NULL}, 3598, "tcp"},
-{"a15", {NULL}, 3598, "udp"},
-{"quasar-server", {NULL}, 3599, "tcp"},
-{"quasar-server", {NULL}, 3599, "udp"},
-{"trap-daemon", {NULL}, 3600, "tcp"},
-{"trap-daemon", {NULL}, 3600, "udp"},
-{"visinet-gui", {NULL}, 3601, "tcp"},
-{"visinet-gui", {NULL}, 3601, "udp"},
-{"infiniswitchcl", {NULL}, 3602, "tcp"},
-{"infiniswitchcl", {NULL}, 3602, "udp"},
-{"int-rcv-cntrl", {NULL}, 3603, "tcp"},
-{"int-rcv-cntrl", {NULL}, 3603, "udp"},
-{"bmc-jmx-port", {NULL}, 3604, "tcp"},
-{"bmc-jmx-port", {NULL}, 3604, "udp"},
-{"comcam-io", {NULL}, 3605, "tcp"},
-{"comcam-io", {NULL}, 3605, "udp"},
-{"splitlock", {NULL}, 3606, "tcp"},
-{"splitlock", {NULL}, 3606, "udp"},
-{"precise-i3", {NULL}, 3607, "tcp"},
-{"precise-i3", {NULL}, 3607, "udp"},
-{"trendchip-dcp", {NULL}, 3608, "tcp"},
-{"trendchip-dcp", {NULL}, 3608, "udp"},
-{"cpdi-pidas-cm", {NULL}, 3609, "tcp"},
-{"cpdi-pidas-cm", {NULL}, 3609, "udp"},
-{"echonet", {NULL}, 3610, "tcp"},
-{"echonet", {NULL}, 3610, "udp"},
-{"six-degrees", {NULL}, 3611, "tcp"},
-{"six-degrees", {NULL}, 3611, "udp"},
-{"hp-dataprotect", {NULL}, 3612, "tcp"},
-{"hp-dataprotect", {NULL}, 3612, "udp"},
-{"alaris-disc", {NULL}, 3613, "tcp"},
-{"alaris-disc", {NULL}, 3613, "udp"},
-{"sigma-port", {NULL}, 3614, "tcp"},
-{"sigma-port", {NULL}, 3614, "udp"},
-{"start-network", {NULL}, 3615, "tcp"},
-{"start-network", {NULL}, 3615, "udp"},
-{"cd3o-protocol", {NULL}, 3616, "tcp"},
-{"cd3o-protocol", {NULL}, 3616, "udp"},
-{"sharp-server", {NULL}, 3617, "tcp"},
-{"sharp-server", {NULL}, 3617, "udp"},
-{"aairnet-1", {NULL}, 3618, "tcp"},
-{"aairnet-1", {NULL}, 3618, "udp"},
-{"aairnet-2", {NULL}, 3619, "tcp"},
-{"aairnet-2", {NULL}, 3619, "udp"},
-{"ep-pcp", {NULL}, 3620, "tcp"},
-{"ep-pcp", {NULL}, 3620, "udp"},
-{"ep-nsp", {NULL}, 3621, "tcp"},
-{"ep-nsp", {NULL}, 3621, "udp"},
-{"ff-lr-port", {NULL}, 3622, "tcp"},
-{"ff-lr-port", {NULL}, 3622, "udp"},
-{"haipe-discover", {NULL}, 3623, "tcp"},
-{"haipe-discover", {NULL}, 3623, "udp"},
-{"dist-upgrade", {NULL}, 3624, "tcp"},
-{"dist-upgrade", {NULL}, 3624, "udp"},
-{"volley", {NULL}, 3625, "tcp"},
-{"volley", {NULL}, 3625, "udp"},
-{"bvcdaemon-port", {NULL}, 3626, "tcp"},
-{"bvcdaemon-port", {NULL}, 3626, "udp"},
-{"jamserverport", {NULL}, 3627, "tcp"},
-{"jamserverport", {NULL}, 3627, "udp"},
-{"ept-machine", {NULL}, 3628, "tcp"},
-{"ept-machine", {NULL}, 3628, "udp"},
-{"escvpnet", {NULL}, 3629, "tcp"},
-{"escvpnet", {NULL}, 3629, "udp"},
-{"cs-remote-db", {NULL}, 3630, "tcp"},
-{"cs-remote-db", {NULL}, 3630, "udp"},
-{"cs-services", {NULL}, 3631, "tcp"},
-{"cs-services", {NULL}, 3631, "udp"},
-{"distcc", {NULL}, 3632, "tcp"},
-{"distcc", {NULL}, 3632, "udp"},
-{"wacp", {NULL}, 3633, "tcp"},
-{"wacp", {NULL}, 3633, "udp"},
-{"hlibmgr", {NULL}, 3634, "tcp"},
-{"hlibmgr", {NULL}, 3634, "udp"},
-{"sdo", {NULL}, 3635, "tcp"},
-{"sdo", {NULL}, 3635, "udp"},
-{"servistaitsm", {NULL}, 3636, "tcp"},
-{"servistaitsm", {NULL}, 3636, "udp"},
-{"scservp", {NULL}, 3637, "tcp"},
-{"scservp", {NULL}, 3637, "udp"},
-{"ehp-backup", {NULL}, 3638, "tcp"},
-{"ehp-backup", {NULL}, 3638, "udp"},
-{"xap-ha", {NULL}, 3639, "tcp"},
-{"xap-ha", {NULL}, 3639, "udp"},
-{"netplay-port1", {NULL}, 3640, "tcp"},
-{"netplay-port1", {NULL}, 3640, "udp"},
-{"netplay-port2", {NULL}, 3641, "tcp"},
-{"netplay-port2", {NULL}, 3641, "udp"},
-{"juxml-port", {NULL}, 3642, "tcp"},
-{"juxml-port", {NULL}, 3642, "udp"},
-{"audiojuggler", {NULL}, 3643, "tcp"},
-{"audiojuggler", {NULL}, 3643, "udp"},
-{"ssowatch", {NULL}, 3644, "tcp"},
-{"ssowatch", {NULL}, 3644, "udp"},
-{"cyc", {NULL}, 3645, "tcp"},
-{"cyc", {NULL}, 3645, "udp"},
-{"xss-srv-port", {NULL}, 3646, "tcp"},
-{"xss-srv-port", {NULL}, 3646, "udp"},
-{"splitlock-gw", {NULL}, 3647, "tcp"},
-{"splitlock-gw", {NULL}, 3647, "udp"},
-{"fjcp", {NULL}, 3648, "tcp"},
-{"fjcp", {NULL}, 3648, "udp"},
-{"nmmp", {NULL}, 3649, "tcp"},
-{"nmmp", {NULL}, 3649, "udp"},
-{"prismiq-plugin", {NULL}, 3650, "tcp"},
-{"prismiq-plugin", {NULL}, 3650, "udp"},
-{"xrpc-registry", {NULL}, 3651, "tcp"},
-{"xrpc-registry", {NULL}, 3651, "udp"},
-{"vxcrnbuport", {NULL}, 3652, "tcp"},
-{"vxcrnbuport", {NULL}, 3652, "udp"},
-{"tsp", {NULL}, 3653, "tcp"},
-{"tsp", {NULL}, 3653, "udp"},
-{"vaprtm", {NULL}, 3654, "tcp"},
-{"vaprtm", {NULL}, 3654, "udp"},
-{"abatemgr", {NULL}, 3655, "tcp"},
-{"abatemgr", {NULL}, 3655, "udp"},
-{"abatjss", {NULL}, 3656, "tcp"},
-{"abatjss", {NULL}, 3656, "udp"},
-{"immedianet-bcn", {NULL}, 3657, "tcp"},
-{"immedianet-bcn", {NULL}, 3657, "udp"},
-{"ps-ams", {NULL}, 3658, "tcp"},
-{"ps-ams", {NULL}, 3658, "udp"},
-{"apple-sasl", {NULL}, 3659, "tcp"},
-{"apple-sasl", {NULL}, 3659, "udp"},
-{"can-nds-ssl", {NULL}, 3660, "tcp"},
-{"can-nds-ssl", {NULL}, 3660, "udp"},
-{"can-ferret-ssl", {NULL}, 3661, "tcp"},
-{"can-ferret-ssl", {NULL}, 3661, "udp"},
-{"pserver", {NULL}, 3662, "tcp"},
-{"pserver", {NULL}, 3662, "udp"},
-{"dtp", {NULL}, 3663, "tcp"},
-{"dtp", {NULL}, 3663, "udp"},
-{"ups-engine", {NULL}, 3664, "tcp"},
-{"ups-engine", {NULL}, 3664, "udp"},
-{"ent-engine", {NULL}, 3665, "tcp"},
-{"ent-engine", {NULL}, 3665, "udp"},
-{"eserver-pap", {NULL}, 3666, "tcp"},
-{"eserver-pap", {NULL}, 3666, "udp"},
-{"infoexch", {NULL}, 3667, "tcp"},
-{"infoexch", {NULL}, 3667, "udp"},
-{"dell-rm-port", {NULL}, 3668, "tcp"},
-{"dell-rm-port", {NULL}, 3668, "udp"},
-{"casanswmgmt", {NULL}, 3669, "tcp"},
-{"casanswmgmt", {NULL}, 3669, "udp"},
-{"smile", {NULL}, 3670, "tcp"},
-{"smile", {NULL}, 3670, "udp"},
-{"efcp", {NULL}, 3671, "tcp"},
-{"efcp", {NULL}, 3671, "udp"},
-{"lispworks-orb", {NULL}, 3672, "tcp"},
-{"lispworks-orb", {NULL}, 3672, "udp"},
-{"mediavault-gui", {NULL}, 3673, "tcp"},
-{"mediavault-gui", {NULL}, 3673, "udp"},
-{"wininstall-ipc", {NULL}, 3674, "tcp"},
-{"wininstall-ipc", {NULL}, 3674, "udp"},
-{"calltrax", {NULL}, 3675, "tcp"},
-{"calltrax", {NULL}, 3675, "udp"},
-{"va-pacbase", {NULL}, 3676, "tcp"},
-{"va-pacbase", {NULL}, 3676, "udp"},
-{"roverlog", {NULL}, 3677, "tcp"},
-{"roverlog", {NULL}, 3677, "udp"},
-{"ipr-dglt", {NULL}, 3678, "tcp"},
-{"ipr-dglt", {NULL}, 3678, "udp"},
-{"newton-dock", {NULL}, 3679, "tcp"},
-{"newton-dock", {NULL}, 3679, "udp"},
-{"npds-tracker", {NULL}, 3680, "tcp"},
-{"npds-tracker", {NULL}, 3680, "udp"},
-{"bts-x73", {NULL}, 3681, "tcp"},
-{"bts-x73", {NULL}, 3681, "udp"},
-{"cas-mapi", {NULL}, 3682, "tcp"},
-{"cas-mapi", {NULL}, 3682, "udp"},
-{"bmc-ea", {NULL}, 3683, "tcp"},
-{"bmc-ea", {NULL}, 3683, "udp"},
-{"faxstfx-port", {NULL}, 3684, "tcp"},
-{"faxstfx-port", {NULL}, 3684, "udp"},
-{"dsx-agent", {NULL}, 3685, "tcp"},
-{"dsx-agent", {NULL}, 3685, "udp"},
-{"tnmpv2", {NULL}, 3686, "tcp"},
-{"tnmpv2", {NULL}, 3686, "udp"},
-{"simple-push", {NULL}, 3687, "tcp"},
-{"simple-push", {NULL}, 3687, "udp"},
-{"simple-push-s", {NULL}, 3688, "tcp"},
-{"simple-push-s", {NULL}, 3688, "udp"},
-{"daap", {NULL}, 3689, "tcp"},
-{"daap", {NULL}, 3689, "udp"},
-{"svn", {NULL}, 3690, "tcp"},
-{"svn", {NULL}, 3690, "udp"},
-{"magaya-network", {NULL}, 3691, "tcp"},
-{"magaya-network", {NULL}, 3691, "udp"},
-{"intelsync", {NULL}, 3692, "tcp"},
-{"intelsync", {NULL}, 3692, "udp"},
-{"bmc-data-coll", {NULL}, 3695, "tcp"},
-{"bmc-data-coll", {NULL}, 3695, "udp"},
-{"telnetcpcd", {NULL}, 3696, "tcp"},
-{"telnetcpcd", {NULL}, 3696, "udp"},
-{"nw-license", {NULL}, 3697, "tcp"},
-{"nw-license", {NULL}, 3697, "udp"},
-{"sagectlpanel", {NULL}, 3698, "tcp"},
-{"sagectlpanel", {NULL}, 3698, "udp"},
-{"kpn-icw", {NULL}, 3699, "tcp"},
-{"kpn-icw", {NULL}, 3699, "udp"},
-{"lrs-paging", {NULL}, 3700, "tcp"},
-{"lrs-paging", {NULL}, 3700, "udp"},
-{"netcelera", {NULL}, 3701, "tcp"},
-{"netcelera", {NULL}, 3701, "udp"},
-{"ws-discovery", {NULL}, 3702, "tcp"},
-{"ws-discovery", {NULL}, 3702, "udp"},
-{"adobeserver-3", {NULL}, 3703, "tcp"},
-{"adobeserver-3", {NULL}, 3703, "udp"},
-{"adobeserver-4", {NULL}, 3704, "tcp"},
-{"adobeserver-4", {NULL}, 3704, "udp"},
-{"adobeserver-5", {NULL}, 3705, "tcp"},
-{"adobeserver-5", {NULL}, 3705, "udp"},
-{"rt-event", {NULL}, 3706, "tcp"},
-{"rt-event", {NULL}, 3706, "udp"},
-{"rt-event-s", {NULL}, 3707, "tcp"},
-{"rt-event-s", {NULL}, 3707, "udp"},
-{"sun-as-iiops", {NULL}, 3708, "tcp"},
-{"sun-as-iiops", {NULL}, 3708, "udp"},
-{"ca-idms", {NULL}, 3709, "tcp"},
-{"ca-idms", {NULL}, 3709, "udp"},
-{"portgate-auth", {NULL}, 3710, "tcp"},
-{"portgate-auth", {NULL}, 3710, "udp"},
-{"edb-server2", {NULL}, 3711, "tcp"},
-{"edb-server2", {NULL}, 3711, "udp"},
-{"sentinel-ent", {NULL}, 3712, "tcp"},
-{"sentinel-ent", {NULL}, 3712, "udp"},
-{"tftps", {NULL}, 3713, "tcp"},
-{"tftps", {NULL}, 3713, "udp"},
-{"delos-dms", {NULL}, 3714, "tcp"},
-{"delos-dms", {NULL}, 3714, "udp"},
-{"anoto-rendezv", {NULL}, 3715, "tcp"},
-{"anoto-rendezv", {NULL}, 3715, "udp"},
-{"wv-csp-sms-cir", {NULL}, 3716, "tcp"},
-{"wv-csp-sms-cir", {NULL}, 3716, "udp"},
-{"wv-csp-udp-cir", {NULL}, 3717, "tcp"},
-{"wv-csp-udp-cir", {NULL}, 3717, "udp"},
-{"opus-services", {NULL}, 3718, "tcp"},
-{"opus-services", {NULL}, 3718, "udp"},
-{"itelserverport", {NULL}, 3719, "tcp"},
-{"itelserverport", {NULL}, 3719, "udp"},
-{"ufastro-instr", {NULL}, 3720, "tcp"},
-{"ufastro-instr", {NULL}, 3720, "udp"},
-{"xsync", {NULL}, 3721, "tcp"},
-{"xsync", {NULL}, 3721, "udp"},
-{"xserveraid", {NULL}, 3722, "tcp"},
-{"xserveraid", {NULL}, 3722, "udp"},
-{"sychrond", {NULL}, 3723, "tcp"},
-{"sychrond", {NULL}, 3723, "udp"},
-{"blizwow", {NULL}, 3724, "tcp"},
-{"blizwow", {NULL}, 3724, "udp"},
-{"na-er-tip", {NULL}, 3725, "tcp"},
-{"na-er-tip", {NULL}, 3725, "udp"},
-{"array-manager", {NULL}, 3726, "tcp"},
-{"array-manager", {NULL}, 3726, "udp"},
-{"e-mdu", {NULL}, 3727, "tcp"},
-{"e-mdu", {NULL}, 3727, "udp"},
-{"e-woa", {NULL}, 3728, "tcp"},
-{"e-woa", {NULL}, 3728, "udp"},
-{"fksp-audit", {NULL}, 3729, "tcp"},
-{"fksp-audit", {NULL}, 3729, "udp"},
-{"client-ctrl", {NULL}, 3730, "tcp"},
-{"client-ctrl", {NULL}, 3730, "udp"},
-{"smap", {NULL}, 3731, "tcp"},
-{"smap", {NULL}, 3731, "udp"},
-{"m-wnn", {NULL}, 3732, "tcp"},
-{"m-wnn", {NULL}, 3732, "udp"},
-{"multip-msg", {NULL}, 3733, "tcp"},
-{"multip-msg", {NULL}, 3733, "udp"},
-{"synel-data", {NULL}, 3734, "tcp"},
-{"synel-data", {NULL}, 3734, "udp"},
-{"pwdis", {NULL}, 3735, "tcp"},
-{"pwdis", {NULL}, 3735, "udp"},
-{"rs-rmi", {NULL}, 3736, "tcp"},
-{"rs-rmi", {NULL}, 3736, "udp"},
-{"xpanel", {NULL}, 3737, "tcp"},
-{"versatalk", {NULL}, 3738, "tcp"},
-{"versatalk", {NULL}, 3738, "udp"},
-{"launchbird-lm", {NULL}, 3739, "tcp"},
-{"launchbird-lm", {NULL}, 3739, "udp"},
-{"heartbeat", {NULL}, 3740, "tcp"},
-{"heartbeat", {NULL}, 3740, "udp"},
-{"wysdma", {NULL}, 3741, "tcp"},
-{"wysdma", {NULL}, 3741, "udp"},
-{"cst-port", {NULL}, 3742, "tcp"},
-{"cst-port", {NULL}, 3742, "udp"},
-{"ipcs-command", {NULL}, 3743, "tcp"},
-{"ipcs-command", {NULL}, 3743, "udp"},
-{"sasg", {NULL}, 3744, "tcp"},
-{"sasg", {NULL}, 3744, "udp"},
-{"gw-call-port", {NULL}, 3745, "tcp"},
-{"gw-call-port", {NULL}, 3745, "udp"},
-{"linktest", {NULL}, 3746, "tcp"},
-{"linktest", {NULL}, 3746, "udp"},
-{"linktest-s", {NULL}, 3747, "tcp"},
-{"linktest-s", {NULL}, 3747, "udp"},
-{"webdata", {NULL}, 3748, "tcp"},
-{"webdata", {NULL}, 3748, "udp"},
-{"cimtrak", {NULL}, 3749, "tcp"},
-{"cimtrak", {NULL}, 3749, "udp"},
-{"cbos-ip-port", {NULL}, 3750, "tcp"},
-{"cbos-ip-port", {NULL}, 3750, "udp"},
-{"gprs-cube", {NULL}, 3751, "tcp"},
-{"gprs-cube", {NULL}, 3751, "udp"},
-{"vipremoteagent", {NULL}, 3752, "tcp"},
-{"vipremoteagent", {NULL}, 3752, "udp"},
-{"nattyserver", {NULL}, 3753, "tcp"},
-{"nattyserver", {NULL}, 3753, "udp"},
-{"timestenbroker", {NULL}, 3754, "tcp"},
-{"timestenbroker", {NULL}, 3754, "udp"},
-{"sas-remote-hlp", {NULL}, 3755, "tcp"},
-{"sas-remote-hlp", {NULL}, 3755, "udp"},
-{"canon-capt", {NULL}, 3756, "tcp"},
-{"canon-capt", {NULL}, 3756, "udp"},
-{"grf-port", {NULL}, 3757, "tcp"},
-{"grf-port", {NULL}, 3757, "udp"},
-{"apw-registry", {NULL}, 3758, "tcp"},
-{"apw-registry", {NULL}, 3758, "udp"},
-{"exapt-lmgr", {NULL}, 3759, "tcp"},
-{"exapt-lmgr", {NULL}, 3759, "udp"},
-{"adtempusclient", {NULL}, 3760, "tcp"},
-{"adtempusclient", {NULL}, 3760, "udp"},
-{"gsakmp", {NULL}, 3761, "tcp"},
-{"gsakmp", {NULL}, 3761, "udp"},
-{"gbs-smp", {NULL}, 3762, "tcp"},
-{"gbs-smp", {NULL}, 3762, "udp"},
-{"xo-wave", {NULL}, 3763, "tcp"},
-{"xo-wave", {NULL}, 3763, "udp"},
-{"mni-prot-rout", {NULL}, 3764, "tcp"},
-{"mni-prot-rout", {NULL}, 3764, "udp"},
-{"rtraceroute", {NULL}, 3765, "tcp"},
-{"rtraceroute", {NULL}, 3765, "udp"},
-{"listmgr-port", {NULL}, 3767, "tcp"},
-{"listmgr-port", {NULL}, 3767, "udp"},
-{"rblcheckd", {NULL}, 3768, "tcp"},
-{"rblcheckd", {NULL}, 3768, "udp"},
-{"haipe-otnk", {NULL}, 3769, "tcp"},
-{"haipe-otnk", {NULL}, 3769, "udp"},
-{"cindycollab", {NULL}, 3770, "tcp"},
-{"cindycollab", {NULL}, 3770, "udp"},
-{"paging-port", {NULL}, 3771, "tcp"},
-{"paging-port", {NULL}, 3771, "udp"},
-{"ctp", {NULL}, 3772, "tcp"},
-{"ctp", {NULL}, 3772, "udp"},
-{"ctdhercules", {NULL}, 3773, "tcp"},
-{"ctdhercules", {NULL}, 3773, "udp"},
-{"zicom", {NULL}, 3774, "tcp"},
-{"zicom", {NULL}, 3774, "udp"},
-{"ispmmgr", {NULL}, 3775, "tcp"},
-{"ispmmgr", {NULL}, 3775, "udp"},
-{"dvcprov-port", {NULL}, 3776, "tcp"},
-{"dvcprov-port", {NULL}, 3776, "udp"},
-{"jibe-eb", {NULL}, 3777, "tcp"},
-{"jibe-eb", {NULL}, 3777, "udp"},
-{"c-h-it-port", {NULL}, 3778, "tcp"},
-{"c-h-it-port", {NULL}, 3778, "udp"},
-{"cognima", {NULL}, 3779, "tcp"},
-{"cognima", {NULL}, 3779, "udp"},
-{"nnp", {NULL}, 3780, "tcp"},
-{"nnp", {NULL}, 3780, "udp"},
-{"abcvoice-port", {NULL}, 3781, "tcp"},
-{"abcvoice-port", {NULL}, 3781, "udp"},
-{"iso-tp0s", {NULL}, 3782, "tcp"},
-{"iso-tp0s", {NULL}, 3782, "udp"},
-{"bim-pem", {NULL}, 3783, "tcp"},
-{"bim-pem", {NULL}, 3783, "udp"},
-{"bfd-control", {NULL}, 3784, "tcp"},
-{"bfd-control", {NULL}, 3784, "udp"},
-{"bfd-echo", {NULL}, 3785, "tcp"},
-{"bfd-echo", {NULL}, 3785, "udp"},
-{"upstriggervsw", {NULL}, 3786, "tcp"},
-{"upstriggervsw", {NULL}, 3786, "udp"},
-{"fintrx", {NULL}, 3787, "tcp"},
-{"fintrx", {NULL}, 3787, "udp"},
-{"isrp-port", {NULL}, 3788, "tcp"},
-{"isrp-port", {NULL}, 3788, "udp"},
-{"remotedeploy", {NULL}, 3789, "tcp"},
-{"remotedeploy", {NULL}, 3789, "udp"},
-{"quickbooksrds", {NULL}, 3790, "tcp"},
-{"quickbooksrds", {NULL}, 3790, "udp"},
-{"tvnetworkvideo", {NULL}, 3791, "tcp"},
-{"tvnetworkvideo", {NULL}, 3791, "udp"},
-{"sitewatch", {NULL}, 3792, "tcp"},
-{"sitewatch", {NULL}, 3792, "udp"},
-{"dcsoftware", {NULL}, 3793, "tcp"},
-{"dcsoftware", {NULL}, 3793, "udp"},
-{"jaus", {NULL}, 3794, "tcp"},
-{"jaus", {NULL}, 3794, "udp"},
-{"myblast", {NULL}, 3795, "tcp"},
-{"myblast", {NULL}, 3795, "udp"},
-{"spw-dialer", {NULL}, 3796, "tcp"},
-{"spw-dialer", {NULL}, 3796, "udp"},
-{"idps", {NULL}, 3797, "tcp"},
-{"idps", {NULL}, 3797, "udp"},
-{"minilock", {NULL}, 3798, "tcp"},
-{"minilock", {NULL}, 3798, "udp"},
-{"radius-dynauth", {NULL}, 3799, "tcp"},
-{"radius-dynauth", {NULL}, 3799, "udp"},
-{"pwgpsi", {NULL}, 3800, "tcp"},
-{"pwgpsi", {NULL}, 3800, "udp"},
-{"ibm-mgr", {NULL}, 3801, "tcp"},
-{"ibm-mgr", {NULL}, 3801, "udp"},
-{"vhd", {NULL}, 3802, "tcp"},
-{"vhd", {NULL}, 3802, "udp"},
-{"soniqsync", {NULL}, 3803, "tcp"},
-{"soniqsync", {NULL}, 3803, "udp"},
-{"iqnet-port", {NULL}, 3804, "tcp"},
-{"iqnet-port", {NULL}, 3804, "udp"},
-{"tcpdataserver", {NULL}, 3805, "tcp"},
-{"tcpdataserver", {NULL}, 3805, "udp"},
-{"wsmlb", {NULL}, 3806, "tcp"},
-{"wsmlb", {NULL}, 3806, "udp"},
-{"spugna", {NULL}, 3807, "tcp"},
-{"spugna", {NULL}, 3807, "udp"},
-{"sun-as-iiops-ca", {NULL}, 3808, "tcp"},
-{"sun-as-iiops-ca", {NULL}, 3808, "udp"},
-{"apocd", {NULL}, 3809, "tcp"},
-{"apocd", {NULL}, 3809, "udp"},
-{"wlanauth", {NULL}, 3810, "tcp"},
-{"wlanauth", {NULL}, 3810, "udp"},
-{"amp", {NULL}, 3811, "tcp"},
-{"amp", {NULL}, 3811, "udp"},
-{"neto-wol-server", {NULL}, 3812, "tcp"},
-{"neto-wol-server", {NULL}, 3812, "udp"},
-{"rap-ip", {NULL}, 3813, "tcp"},
-{"rap-ip", {NULL}, 3813, "udp"},
-{"neto-dcs", {NULL}, 3814, "tcp"},
-{"neto-dcs", {NULL}, 3814, "udp"},
-{"lansurveyorxml", {NULL}, 3815, "tcp"},
-{"lansurveyorxml", {NULL}, 3815, "udp"},
-{"sunlps-http", {NULL}, 3816, "tcp"},
-{"sunlps-http", {NULL}, 3816, "udp"},
-{"tapeware", {NULL}, 3817, "tcp"},
-{"tapeware", {NULL}, 3817, "udp"},
-{"crinis-hb", {NULL}, 3818, "tcp"},
-{"crinis-hb", {NULL}, 3818, "udp"},
-{"epl-slp", {NULL}, 3819, "tcp"},
-{"epl-slp", {NULL}, 3819, "udp"},
-{"scp", {NULL}, 3820, "tcp"},
-{"scp", {NULL}, 3820, "udp"},
-{"pmcp", {NULL}, 3821, "tcp"},
-{"pmcp", {NULL}, 3821, "udp"},
-{"acp-discovery", {NULL}, 3822, "tcp"},
-{"acp-discovery", {NULL}, 3822, "udp"},
-{"acp-conduit", {NULL}, 3823, "tcp"},
-{"acp-conduit", {NULL}, 3823, "udp"},
-{"acp-policy", {NULL}, 3824, "tcp"},
-{"acp-policy", {NULL}, 3824, "udp"},
-{"ffserver", {NULL}, 3825, "tcp"},
-{"ffserver", {NULL}, 3825, "udp"},
-{"wormux", {NULL}, 3826, "tcp"},
-{"wormux", {NULL}, 3826, "udp"},
-{"netmpi", {NULL}, 3827, "tcp"},
-{"netmpi", {NULL}, 3827, "udp"},
-{"neteh", {NULL}, 3828, "tcp"},
-{"neteh", {NULL}, 3828, "udp"},
-{"neteh-ext", {NULL}, 3829, "tcp"},
-{"neteh-ext", {NULL}, 3829, "udp"},
-{"cernsysmgmtagt", {NULL}, 3830, "tcp"},
-{"cernsysmgmtagt", {NULL}, 3830, "udp"},
-{"dvapps", {NULL}, 3831, "tcp"},
-{"dvapps", {NULL}, 3831, "udp"},
-{"xxnetserver", {NULL}, 3832, "tcp"},
-{"xxnetserver", {NULL}, 3832, "udp"},
-{"aipn-auth", {NULL}, 3833, "tcp"},
-{"aipn-auth", {NULL}, 3833, "udp"},
-{"spectardata", {NULL}, 3834, "tcp"},
-{"spectardata", {NULL}, 3834, "udp"},
-{"spectardb", {NULL}, 3835, "tcp"},
-{"spectardb", {NULL}, 3835, "udp"},
-{"markem-dcp", {NULL}, 3836, "tcp"},
-{"markem-dcp", {NULL}, 3836, "udp"},
-{"mkm-discovery", {NULL}, 3837, "tcp"},
-{"mkm-discovery", {NULL}, 3837, "udp"},
-{"sos", {NULL}, 3838, "tcp"},
-{"sos", {NULL}, 3838, "udp"},
-{"amx-rms", {NULL}, 3839, "tcp"},
-{"amx-rms", {NULL}, 3839, "udp"},
-{"flirtmitmir", {NULL}, 3840, "tcp"},
-{"flirtmitmir", {NULL}, 3840, "udp"},
-{"zfirm-shiprush3", {NULL}, 3841, "tcp"},
-{"zfirm-shiprush3", {NULL}, 3841, "udp"},
-{"nhci", {NULL}, 3842, "tcp"},
-{"nhci", {NULL}, 3842, "udp"},
-{"quest-agent", {NULL}, 3843, "tcp"},
-{"quest-agent", {NULL}, 3843, "udp"},
-{"rnm", {NULL}, 3844, "tcp"},
-{"rnm", {NULL}, 3844, "udp"},
-{"v-one-spp", {NULL}, 3845, "tcp"},
-{"v-one-spp", {NULL}, 3845, "udp"},
-{"an-pcp", {NULL}, 3846, "tcp"},
-{"an-pcp", {NULL}, 3846, "udp"},
-{"msfw-control", {NULL}, 3847, "tcp"},
-{"msfw-control", {NULL}, 3847, "udp"},
-{"item", {NULL}, 3848, "tcp"},
-{"item", {NULL}, 3848, "udp"},
-{"spw-dnspreload", {NULL}, 3849, "tcp"},
-{"spw-dnspreload", {NULL}, 3849, "udp"},
-{"qtms-bootstrap", {NULL}, 3850, "tcp"},
-{"qtms-bootstrap", {NULL}, 3850, "udp"},
-{"spectraport", {NULL}, 3851, "tcp"},
-{"spectraport", {NULL}, 3851, "udp"},
-{"sse-app-config", {NULL}, 3852, "tcp"},
-{"sse-app-config", {NULL}, 3852, "udp"},
-{"sscan", {NULL}, 3853, "tcp"},
-{"sscan", {NULL}, 3853, "udp"},
-{"stryker-com", {NULL}, 3854, "tcp"},
-{"stryker-com", {NULL}, 3854, "udp"},
-{"opentrac", {NULL}, 3855, "tcp"},
-{"opentrac", {NULL}, 3855, "udp"},
-{"informer", {NULL}, 3856, "tcp"},
-{"informer", {NULL}, 3856, "udp"},
-{"trap-port", {NULL}, 3857, "tcp"},
-{"trap-port", {NULL}, 3857, "udp"},
-{"trap-port-mom", {NULL}, 3858, "tcp"},
-{"trap-port-mom", {NULL}, 3858, "udp"},
-{"nav-port", {NULL}, 3859, "tcp"},
-{"nav-port", {NULL}, 3859, "udp"},
-{"sasp", {NULL}, 3860, "tcp"},
-{"sasp", {NULL}, 3860, "udp"},
-{"winshadow-hd", {NULL}, 3861, "tcp"},
-{"winshadow-hd", {NULL}, 3861, "udp"},
-{"giga-pocket", {NULL}, 3862, "tcp"},
-{"giga-pocket", {NULL}, 3862, "udp"},
-{"asap-tcp", {NULL}, 3863, "tcp"},
-{"asap-udp", {NULL}, 3863, "udp"},
-{"asap-sctp", {NULL}, 3863, "sctp"},
-{"asap-tcp-tls", {NULL}, 3864, "tcp"},
-{"asap-sctp-tls", {NULL}, 3864, "sctp"},
-{"xpl", {NULL}, 3865, "tcp"},
-{"xpl", {NULL}, 3865, "udp"},
-{"dzdaemon", {NULL}, 3866, "tcp"},
-{"dzdaemon", {NULL}, 3866, "udp"},
-{"dzoglserver", {NULL}, 3867, "tcp"},
-{"dzoglserver", {NULL}, 3867, "udp"},
-{"diameter", {NULL}, 3868, "tcp"},
-{"diameter", {NULL}, 3868, "sctp"},
-{"ovsam-mgmt", {NULL}, 3869, "tcp"},
-{"ovsam-mgmt", {NULL}, 3869, "udp"},
-{"ovsam-d-agent", {NULL}, 3870, "tcp"},
-{"ovsam-d-agent", {NULL}, 3870, "udp"},
-{"avocent-adsap", {NULL}, 3871, "tcp"},
-{"avocent-adsap", {NULL}, 3871, "udp"},
-{"oem-agent", {NULL}, 3872, "tcp"},
-{"oem-agent", {NULL}, 3872, "udp"},
-{"fagordnc", {NULL}, 3873, "tcp"},
-{"fagordnc", {NULL}, 3873, "udp"},
-{"sixxsconfig", {NULL}, 3874, "tcp"},
-{"sixxsconfig", {NULL}, 3874, "udp"},
-{"pnbscada", {NULL}, 3875, "tcp"},
-{"pnbscada", {NULL}, 3875, "udp"},
-{"dl_agent", {NULL}, 3876, "tcp"},
-{"dl_agent", {NULL}, 3876, "udp"},
-{"xmpcr-interface", {NULL}, 3877, "tcp"},
-{"xmpcr-interface", {NULL}, 3877, "udp"},
-{"fotogcad", {NULL}, 3878, "tcp"},
-{"fotogcad", {NULL}, 3878, "udp"},
-{"appss-lm", {NULL}, 3879, "tcp"},
-{"appss-lm", {NULL}, 3879, "udp"},
-{"igrs", {NULL}, 3880, "tcp"},
-{"igrs", {NULL}, 3880, "udp"},
-{"idac", {NULL}, 3881, "tcp"},
-{"idac", {NULL}, 3881, "udp"},
-{"msdts1", {NULL}, 3882, "tcp"},
-{"msdts1", {NULL}, 3882, "udp"},
-{"vrpn", {NULL}, 3883, "tcp"},
-{"vrpn", {NULL}, 3883, "udp"},
-{"softrack-meter", {NULL}, 3884, "tcp"},
-{"softrack-meter", {NULL}, 3884, "udp"},
-{"topflow-ssl", {NULL}, 3885, "tcp"},
-{"topflow-ssl", {NULL}, 3885, "udp"},
-{"nei-management", {NULL}, 3886, "tcp"},
-{"nei-management", {NULL}, 3886, "udp"},
-{"ciphire-data", {NULL}, 3887, "tcp"},
-{"ciphire-data", {NULL}, 3887, "udp"},
-{"ciphire-serv", {NULL}, 3888, "tcp"},
-{"ciphire-serv", {NULL}, 3888, "udp"},
-{"dandv-tester", {NULL}, 3889, "tcp"},
-{"dandv-tester", {NULL}, 3889, "udp"},
-{"ndsconnect", {NULL}, 3890, "tcp"},
-{"ndsconnect", {NULL}, 3890, "udp"},
-{"rtc-pm-port", {NULL}, 3891, "tcp"},
-{"rtc-pm-port", {NULL}, 3891, "udp"},
-{"pcc-image-port", {NULL}, 3892, "tcp"},
-{"pcc-image-port", {NULL}, 3892, "udp"},
-{"cgi-starapi", {NULL}, 3893, "tcp"},
-{"cgi-starapi", {NULL}, 3893, "udp"},
-{"syam-agent", {NULL}, 3894, "tcp"},
-{"syam-agent", {NULL}, 3894, "udp"},
-{"syam-smc", {NULL}, 3895, "tcp"},
-{"syam-smc", {NULL}, 3895, "udp"},
-{"sdo-tls", {NULL}, 3896, "tcp"},
-{"sdo-tls", {NULL}, 3896, "udp"},
-{"sdo-ssh", {NULL}, 3897, "tcp"},
-{"sdo-ssh", {NULL}, 3897, "udp"},
-{"senip", {NULL}, 3898, "tcp"},
-{"senip", {NULL}, 3898, "udp"},
-{"itv-control", {NULL}, 3899, "tcp"},
-{"itv-control", {NULL}, 3899, "udp"},
-{"udt_os", {NULL}, 3900, "tcp"},
-{"udt_os", {NULL}, 3900, "udp"},
-{"nimsh", {NULL}, 3901, "tcp"},
-{"nimsh", {NULL}, 3901, "udp"},
-{"nimaux", {NULL}, 3902, "tcp"},
-{"nimaux", {NULL}, 3902, "udp"},
-{"charsetmgr", {NULL}, 3903, "tcp"},
-{"charsetmgr", {NULL}, 3903, "udp"},
-{"omnilink-port", {NULL}, 3904, "tcp"},
-{"omnilink-port", {NULL}, 3904, "udp"},
-{"mupdate", {NULL}, 3905, "tcp"},
-{"mupdate", {NULL}, 3905, "udp"},
-{"topovista-data", {NULL}, 3906, "tcp"},
-{"topovista-data", {NULL}, 3906, "udp"},
-{"imoguia-port", {NULL}, 3907, "tcp"},
-{"imoguia-port", {NULL}, 3907, "udp"},
-{"hppronetman", {NULL}, 3908, "tcp"},
-{"hppronetman", {NULL}, 3908, "udp"},
-{"surfcontrolcpa", {NULL}, 3909, "tcp"},
-{"surfcontrolcpa", {NULL}, 3909, "udp"},
-{"prnrequest", {NULL}, 3910, "tcp"},
-{"prnrequest", {NULL}, 3910, "udp"},
-{"prnstatus", {NULL}, 3911, "tcp"},
-{"prnstatus", {NULL}, 3911, "udp"},
-{"gbmt-stars", {NULL}, 3912, "tcp"},
-{"gbmt-stars", {NULL}, 3912, "udp"},
-{"listcrt-port", {NULL}, 3913, "tcp"},
-{"listcrt-port", {NULL}, 3913, "udp"},
-{"listcrt-port-2", {NULL}, 3914, "tcp"},
-{"listcrt-port-2", {NULL}, 3914, "udp"},
-{"agcat", {NULL}, 3915, "tcp"},
-{"agcat", {NULL}, 3915, "udp"},
-{"wysdmc", {NULL}, 3916, "tcp"},
-{"wysdmc", {NULL}, 3916, "udp"},
-{"aftmux", {NULL}, 3917, "tcp"},
-{"aftmux", {NULL}, 3917, "udp"},
-{"pktcablemmcops", {NULL}, 3918, "tcp"},
-{"pktcablemmcops", {NULL}, 3918, "udp"},
-{"hyperip", {NULL}, 3919, "tcp"},
-{"hyperip", {NULL}, 3919, "udp"},
-{"exasoftport1", {NULL}, 3920, "tcp"},
-{"exasoftport1", {NULL}, 3920, "udp"},
-{"herodotus-net", {NULL}, 3921, "tcp"},
-{"herodotus-net", {NULL}, 3921, "udp"},
-{"sor-update", {NULL}, 3922, "tcp"},
-{"sor-update", {NULL}, 3922, "udp"},
-{"symb-sb-port", {NULL}, 3923, "tcp"},
-{"symb-sb-port", {NULL}, 3923, "udp"},
-{"mpl-gprs-port", {NULL}, 3924, "tcp"},
-{"mpl-gprs-port", {NULL}, 3924, "udp"},
-{"zmp", {NULL}, 3925, "tcp"},
-{"zmp", {NULL}, 3925, "udp"},
-{"winport", {NULL}, 3926, "tcp"},
-{"winport", {NULL}, 3926, "udp"},
-{"natdataservice", {NULL}, 3927, "tcp"},
-{"natdataservice", {NULL}, 3927, "udp"},
-{"netboot-pxe", {NULL}, 3928, "tcp"},
-{"netboot-pxe", {NULL}, 3928, "udp"},
-{"smauth-port", {NULL}, 3929, "tcp"},
-{"smauth-port", {NULL}, 3929, "udp"},
-{"syam-webserver", {NULL}, 3930, "tcp"},
-{"syam-webserver", {NULL}, 3930, "udp"},
-{"msr-plugin-port", {NULL}, 3931, "tcp"},
-{"msr-plugin-port", {NULL}, 3931, "udp"},
-{"dyn-site", {NULL}, 3932, "tcp"},
-{"dyn-site", {NULL}, 3932, "udp"},
-{"plbserve-port", {NULL}, 3933, "tcp"},
-{"plbserve-port", {NULL}, 3933, "udp"},
-{"sunfm-port", {NULL}, 3934, "tcp"},
-{"sunfm-port", {NULL}, 3934, "udp"},
-{"sdp-portmapper", {NULL}, 3935, "tcp"},
-{"sdp-portmapper", {NULL}, 3935, "udp"},
-{"mailprox", {NULL}, 3936, "tcp"},
-{"mailprox", {NULL}, 3936, "udp"},
-{"dvbservdsc", {NULL}, 3937, "tcp"},
-{"dvbservdsc", {NULL}, 3937, "udp"},
-{"dbcontrol_agent", {NULL}, 3938, "tcp"},
-{"dbcontrol_agent", {NULL}, 3938, "udp"},
-{"aamp", {NULL}, 3939, "tcp"},
-{"aamp", {NULL}, 3939, "udp"},
-{"xecp-node", {NULL}, 3940, "tcp"},
-{"xecp-node", {NULL}, 3940, "udp"},
-{"homeportal-web", {NULL}, 3941, "tcp"},
-{"homeportal-web", {NULL}, 3941, "udp"},
-{"srdp", {NULL}, 3942, "tcp"},
-{"srdp", {NULL}, 3942, "udp"},
-{"tig", {NULL}, 3943, "tcp"},
-{"tig", {NULL}, 3943, "udp"},
-{"sops", {NULL}, 3944, "tcp"},
-{"sops", {NULL}, 3944, "udp"},
-{"emcads", {NULL}, 3945, "tcp"},
-{"emcads", {NULL}, 3945, "udp"},
-{"backupedge", {NULL}, 3946, "tcp"},
-{"backupedge", {NULL}, 3946, "udp"},
-{"ccp", {NULL}, 3947, "tcp"},
-{"ccp", {NULL}, 3947, "udp"},
-{"apdap", {NULL}, 3948, "tcp"},
-{"apdap", {NULL}, 3948, "udp"},
-{"drip", {NULL}, 3949, "tcp"},
-{"drip", {NULL}, 3949, "udp"},
-{"namemunge", {NULL}, 3950, "tcp"},
-{"namemunge", {NULL}, 3950, "udp"},
-{"pwgippfax", {NULL}, 3951, "tcp"},
-{"pwgippfax", {NULL}, 3951, "udp"},
-{"i3-sessionmgr", {NULL}, 3952, "tcp"},
-{"i3-sessionmgr", {NULL}, 3952, "udp"},
-{"xmlink-connect", {NULL}, 3953, "tcp"},
-{"xmlink-connect", {NULL}, 3953, "udp"},
-{"adrep", {NULL}, 3954, "tcp"},
-{"adrep", {NULL}, 3954, "udp"},
-{"p2pcommunity", {NULL}, 3955, "tcp"},
-{"p2pcommunity", {NULL}, 3955, "udp"},
-{"gvcp", {NULL}, 3956, "tcp"},
-{"gvcp", {NULL}, 3956, "udp"},
-{"mqe-broker", {NULL}, 3957, "tcp"},
-{"mqe-broker", {NULL}, 3957, "udp"},
-{"mqe-agent", {NULL}, 3958, "tcp"},
-{"mqe-agent", {NULL}, 3958, "udp"},
-{"treehopper", {NULL}, 3959, "tcp"},
-{"treehopper", {NULL}, 3959, "udp"},
-{"bess", {NULL}, 3960, "tcp"},
-{"bess", {NULL}, 3960, "udp"},
-{"proaxess", {NULL}, 3961, "tcp"},
-{"proaxess", {NULL}, 3961, "udp"},
-{"sbi-agent", {NULL}, 3962, "tcp"},
-{"sbi-agent", {NULL}, 3962, "udp"},
-{"thrp", {NULL}, 3963, "tcp"},
-{"thrp", {NULL}, 3963, "udp"},
-{"sasggprs", {NULL}, 3964, "tcp"},
-{"sasggprs", {NULL}, 3964, "udp"},
-{"ati-ip-to-ncpe", {NULL}, 3965, "tcp"},
-{"ati-ip-to-ncpe", {NULL}, 3965, "udp"},
-{"bflckmgr", {NULL}, 3966, "tcp"},
-{"bflckmgr", {NULL}, 3966, "udp"},
-{"ppsms", {NULL}, 3967, "tcp"},
-{"ppsms", {NULL}, 3967, "udp"},
-{"ianywhere-dbns", {NULL}, 3968, "tcp"},
-{"ianywhere-dbns", {NULL}, 3968, "udp"},
-{"landmarks", {NULL}, 3969, "tcp"},
-{"landmarks", {NULL}, 3969, "udp"},
-{"lanrevagent", {NULL}, 3970, "tcp"},
-{"lanrevagent", {NULL}, 3970, "udp"},
-{"lanrevserver", {NULL}, 3971, "tcp"},
-{"lanrevserver", {NULL}, 3971, "udp"},
-{"iconp", {NULL}, 3972, "tcp"},
-{"iconp", {NULL}, 3972, "udp"},
-{"progistics", {NULL}, 3973, "tcp"},
-{"progistics", {NULL}, 3973, "udp"},
-{"citysearch", {NULL}, 3974, "tcp"},
-{"citysearch", {NULL}, 3974, "udp"},
-{"airshot", {NULL}, 3975, "tcp"},
-{"airshot", {NULL}, 3975, "udp"},
-{"opswagent", {NULL}, 3976, "tcp"},
-{"opswagent", {NULL}, 3976, "udp"},
-{"opswmanager", {NULL}, 3977, "tcp"},
-{"opswmanager", {NULL}, 3977, "udp"},
-{"secure-cfg-svr", {NULL}, 3978, "tcp"},
-{"secure-cfg-svr", {NULL}, 3978, "udp"},
-{"smwan", {NULL}, 3979, "tcp"},
-{"smwan", {NULL}, 3979, "udp"},
-{"acms", {NULL}, 3980, "tcp"},
-{"acms", {NULL}, 3980, "udp"},
-{"starfish", {NULL}, 3981, "tcp"},
-{"starfish", {NULL}, 3981, "udp"},
-{"eis", {NULL}, 3982, "tcp"},
-{"eis", {NULL}, 3982, "udp"},
-{"eisp", {NULL}, 3983, "tcp"},
-{"eisp", {NULL}, 3983, "udp"},
-{"mapper-nodemgr", {NULL}, 3984, "tcp"},
-{"mapper-nodemgr", {NULL}, 3984, "udp"},
-{"mapper-mapethd", {NULL}, 3985, "tcp"},
-{"mapper-mapethd", {NULL}, 3985, "udp"},
-{"mapper-ws_ethd", {NULL}, 3986, "tcp"},
-{"mapper-ws_ethd", {NULL}, 3986, "udp"},
-{"centerline", {NULL}, 3987, "tcp"},
-{"centerline", {NULL}, 3987, "udp"},
-{"dcs-config", {NULL}, 3988, "tcp"},
-{"dcs-config", {NULL}, 3988, "udp"},
-{"bv-queryengine", {NULL}, 3989, "tcp"},
-{"bv-queryengine", {NULL}, 3989, "udp"},
-{"bv-is", {NULL}, 3990, "tcp"},
-{"bv-is", {NULL}, 3990, "udp"},
-{"bv-smcsrv", {NULL}, 3991, "tcp"},
-{"bv-smcsrv", {NULL}, 3991, "udp"},
-{"bv-ds", {NULL}, 3992, "tcp"},
-{"bv-ds", {NULL}, 3992, "udp"},
-{"bv-agent", {NULL}, 3993, "tcp"},
-{"bv-agent", {NULL}, 3993, "udp"},
-{"iss-mgmt-ssl", {NULL}, 3995, "tcp"},
-{"iss-mgmt-ssl", {NULL}, 3995, "udp"},
-{"abcsoftware", {NULL}, 3996, "tcp"},
-{"abcsoftware", {NULL}, 3996, "udp"},
-{"agentsease-db", {NULL}, 3997, "tcp"},
-{"agentsease-db", {NULL}, 3997, "udp"},
-{"dnx", {NULL}, 3998, "tcp"},
-{"dnx", {NULL}, 3998, "udp"},
-{"nvcnet", {NULL}, 3999, "tcp"},
-{"nvcnet", {NULL}, 3999, "udp"},
-{"terabase", {NULL}, 4000, "tcp"},
-{"terabase", {NULL}, 4000, "udp"},
-{"newoak", {NULL}, 4001, "tcp"},
-{"newoak", {NULL}, 4001, "udp"},
-{"pxc-spvr-ft", {NULL}, 4002, "tcp"},
-{"pxc-spvr-ft", {NULL}, 4002, "udp"},
-{"pxc-splr-ft", {NULL}, 4003, "tcp"},
-{"pxc-splr-ft", {NULL}, 4003, "udp"},
-{"pxc-roid", {NULL}, 4004, "tcp"},
-{"pxc-roid", {NULL}, 4004, "udp"},
-{"pxc-pin", {NULL}, 4005, "tcp"},
-{"pxc-pin", {NULL}, 4005, "udp"},
-{"pxc-spvr", {NULL}, 4006, "tcp"},
-{"pxc-spvr", {NULL}, 4006, "udp"},
-{"pxc-splr", {NULL}, 4007, "tcp"},
-{"pxc-splr", {NULL}, 4007, "udp"},
-{"netcheque", {NULL}, 4008, "tcp"},
-{"netcheque", {NULL}, 4008, "udp"},
-{"chimera-hwm", {NULL}, 4009, "tcp"},
-{"chimera-hwm", {NULL}, 4009, "udp"},
-{"samsung-unidex", {NULL}, 4010, "tcp"},
-{"samsung-unidex", {NULL}, 4010, "udp"},
-{"altserviceboot", {NULL}, 4011, "tcp"},
-{"altserviceboot", {NULL}, 4011, "udp"},
-{"pda-gate", {NULL}, 4012, "tcp"},
-{"pda-gate", {NULL}, 4012, "udp"},
-{"acl-manager", {NULL}, 4013, "tcp"},
-{"acl-manager", {NULL}, 4013, "udp"},
-{"taiclock", {NULL}, 4014, "tcp"},
-{"taiclock", {NULL}, 4014, "udp"},
-{"talarian-mcast1", {NULL}, 4015, "tcp"},
-{"talarian-mcast1", {NULL}, 4015, "udp"},
-{"talarian-mcast2", {NULL}, 4016, "tcp"},
-{"talarian-mcast2", {NULL}, 4016, "udp"},
-{"talarian-mcast3", {NULL}, 4017, "tcp"},
-{"talarian-mcast3", {NULL}, 4017, "udp"},
-{"talarian-mcast4", {NULL}, 4018, "tcp"},
-{"talarian-mcast4", {NULL}, 4018, "udp"},
-{"talarian-mcast5", {NULL}, 4019, "tcp"},
-{"talarian-mcast5", {NULL}, 4019, "udp"},
-{"trap", {NULL}, 4020, "tcp"},
-{"trap", {NULL}, 4020, "udp"},
-{"nexus-portal", {NULL}, 4021, "tcp"},
-{"nexus-portal", {NULL}, 4021, "udp"},
-{"dnox", {NULL}, 4022, "tcp"},
-{"dnox", {NULL}, 4022, "udp"},
-{"esnm-zoning", {NULL}, 4023, "tcp"},
-{"esnm-zoning", {NULL}, 4023, "udp"},
-{"tnp1-port", {NULL}, 4024, "tcp"},
-{"tnp1-port", {NULL}, 4024, "udp"},
-{"partimage", {NULL}, 4025, "tcp"},
-{"partimage", {NULL}, 4025, "udp"},
-{"as-debug", {NULL}, 4026, "tcp"},
-{"as-debug", {NULL}, 4026, "udp"},
-{"bxp", {NULL}, 4027, "tcp"},
-{"bxp", {NULL}, 4027, "udp"},
-{"dtserver-port", {NULL}, 4028, "tcp"},
-{"dtserver-port", {NULL}, 4028, "udp"},
-{"ip-qsig", {NULL}, 4029, "tcp"},
-{"ip-qsig", {NULL}, 4029, "udp"},
-{"jdmn-port", {NULL}, 4030, "tcp"},
-{"jdmn-port", {NULL}, 4030, "udp"},
-{"suucp", {NULL}, 4031, "tcp"},
-{"suucp", {NULL}, 4031, "udp"},
-{"vrts-auth-port", {NULL}, 4032, "tcp"},
-{"vrts-auth-port", {NULL}, 4032, "udp"},
-{"sanavigator", {NULL}, 4033, "tcp"},
-{"sanavigator", {NULL}, 4033, "udp"},
-{"ubxd", {NULL}, 4034, "tcp"},
-{"ubxd", {NULL}, 4034, "udp"},
-{"wap-push-http", {NULL}, 4035, "tcp"},
-{"wap-push-http", {NULL}, 4035, "udp"},
-{"wap-push-https", {NULL}, 4036, "tcp"},
-{"wap-push-https", {NULL}, 4036, "udp"},
-{"ravehd", {NULL}, 4037, "tcp"},
-{"ravehd", {NULL}, 4037, "udp"},
-{"fazzt-ptp", {NULL}, 4038, "tcp"},
-{"fazzt-ptp", {NULL}, 4038, "udp"},
-{"fazzt-admin", {NULL}, 4039, "tcp"},
-{"fazzt-admin", {NULL}, 4039, "udp"},
-{"yo-main", {NULL}, 4040, "tcp"},
-{"yo-main", {NULL}, 4040, "udp"},
-{"houston", {NULL}, 4041, "tcp"},
-{"houston", {NULL}, 4041, "udp"},
-{"ldxp", {NULL}, 4042, "tcp"},
-{"ldxp", {NULL}, 4042, "udp"},
-{"nirp", {NULL}, 4043, "tcp"},
-{"nirp", {NULL}, 4043, "udp"},
-{"ltp", {NULL}, 4044, "tcp"},
-{"ltp", {NULL}, 4044, "udp"},
-{"npp", {NULL}, 4045, "tcp"},
-{"npp", {NULL}, 4045, "udp"},
-{"acp-proto", {NULL}, 4046, "tcp"},
-{"acp-proto", {NULL}, 4046, "udp"},
-{"ctp-state", {NULL}, 4047, "tcp"},
-{"ctp-state", {NULL}, 4047, "udp"},
-{"wafs", {NULL}, 4049, "tcp"},
-{"wafs", {NULL}, 4049, "udp"},
-{"cisco-wafs", {NULL}, 4050, "tcp"},
-{"cisco-wafs", {NULL}, 4050, "udp"},
-{"cppdp", {NULL}, 4051, "tcp"},
-{"cppdp", {NULL}, 4051, "udp"},
-{"interact", {NULL}, 4052, "tcp"},
-{"interact", {NULL}, 4052, "udp"},
-{"ccu-comm-1", {NULL}, 4053, "tcp"},
-{"ccu-comm-1", {NULL}, 4053, "udp"},
-{"ccu-comm-2", {NULL}, 4054, "tcp"},
-{"ccu-comm-2", {NULL}, 4054, "udp"},
-{"ccu-comm-3", {NULL}, 4055, "tcp"},
-{"ccu-comm-3", {NULL}, 4055, "udp"},
-{"lms", {NULL}, 4056, "tcp"},
-{"lms", {NULL}, 4056, "udp"},
-{"wfm", {NULL}, 4057, "tcp"},
-{"wfm", {NULL}, 4057, "udp"},
-{"kingfisher", {NULL}, 4058, "tcp"},
-{"kingfisher", {NULL}, 4058, "udp"},
-{"dlms-cosem", {NULL}, 4059, "tcp"},
-{"dlms-cosem", {NULL}, 4059, "udp"},
-{"dsmeter_iatc", {NULL}, 4060, "tcp"},
-{"dsmeter_iatc", {NULL}, 4060, "udp"},
-{"ice-location", {NULL}, 4061, "tcp"},
-{"ice-location", {NULL}, 4061, "udp"},
-{"ice-slocation", {NULL}, 4062, "tcp"},
-{"ice-slocation", {NULL}, 4062, "udp"},
-{"ice-router", {NULL}, 4063, "tcp"},
-{"ice-router", {NULL}, 4063, "udp"},
-{"ice-srouter", {NULL}, 4064, "tcp"},
-{"ice-srouter", {NULL}, 4064, "udp"},
-{"avanti_cdp", {NULL}, 4065, "tcp"},
-{"avanti_cdp", {NULL}, 4065, "udp"},
-{"pmas", {NULL}, 4066, "tcp"},
-{"pmas", {NULL}, 4066, "udp"},
-{"idp", {NULL}, 4067, "tcp"},
-{"idp", {NULL}, 4067, "udp"},
-{"ipfltbcst", {NULL}, 4068, "tcp"},
-{"ipfltbcst", {NULL}, 4068, "udp"},
-{"minger", {NULL}, 4069, "tcp"},
-{"minger", {NULL}, 4069, "udp"},
-{"tripe", {NULL}, 4070, "tcp"},
-{"tripe", {NULL}, 4070, "udp"},
-{"aibkup", {NULL}, 4071, "tcp"},
-{"aibkup", {NULL}, 4071, "udp"},
-{"zieto-sock", {NULL}, 4072, "tcp"},
-{"zieto-sock", {NULL}, 4072, "udp"},
-{"iRAPP", {NULL}, 4073, "tcp"},
-{"iRAPP", {NULL}, 4073, "udp"},
-{"cequint-cityid", {NULL}, 4074, "tcp"},
-{"cequint-cityid", {NULL}, 4074, "udp"},
-{"perimlan", {NULL}, 4075, "tcp"},
-{"perimlan", {NULL}, 4075, "udp"},
-{"seraph", {NULL}, 4076, "tcp"},
-{"seraph", {NULL}, 4076, "udp"},
-{"ascomalarm", {NULL}, 4077, "udp"},
-{"cssp", {NULL}, 4078, "tcp"},
-{"santools", {NULL}, 4079, "tcp"},
-{"santools", {NULL}, 4079, "udp"},
-{"lorica-in", {NULL}, 4080, "tcp"},
-{"lorica-in", {NULL}, 4080, "udp"},
-{"lorica-in-sec", {NULL}, 4081, "tcp"},
-{"lorica-in-sec", {NULL}, 4081, "udp"},
-{"lorica-out", {NULL}, 4082, "tcp"},
-{"lorica-out", {NULL}, 4082, "udp"},
-{"lorica-out-sec", {NULL}, 4083, "tcp"},
-{"lorica-out-sec", {NULL}, 4083, "udp"},
-{"fortisphere-vm", {NULL}, 4084, "udp"},
-{"ezmessagesrv", {NULL}, 4085, "tcp"},
-{"ftsync", {NULL}, 4086, "udp"},
-{"applusservice", {NULL}, 4087, "tcp"},
-{"npsp", {NULL}, 4088, "tcp"},
-{"opencore", {NULL}, 4089, "tcp"},
-{"opencore", {NULL}, 4089, "udp"},
-{"omasgport", {NULL}, 4090, "tcp"},
-{"omasgport", {NULL}, 4090, "udp"},
-{"ewinstaller", {NULL}, 4091, "tcp"},
-{"ewinstaller", {NULL}, 4091, "udp"},
-{"ewdgs", {NULL}, 4092, "tcp"},
-{"ewdgs", {NULL}, 4092, "udp"},
-{"pvxpluscs", {NULL}, 4093, "tcp"},
-{"pvxpluscs", {NULL}, 4093, "udp"},
-{"sysrqd", {NULL}, 4094, "tcp"},
-{"sysrqd", {NULL}, 4094, "udp"},
-{"xtgui", {NULL}, 4095, "tcp"},
-{"xtgui", {NULL}, 4095, "udp"},
-{"bre", {NULL}, 4096, "tcp"},
-{"bre", {NULL}, 4096, "udp"},
-{"patrolview", {NULL}, 4097, "tcp"},
-{"patrolview", {NULL}, 4097, "udp"},
-{"drmsfsd", {NULL}, 4098, "tcp"},
-{"drmsfsd", {NULL}, 4098, "udp"},
-{"dpcp", {NULL}, 4099, "tcp"},
-{"dpcp", {NULL}, 4099, "udp"},
-{"igo-incognito", {NULL}, 4100, "tcp"},
-{"igo-incognito", {NULL}, 4100, "udp"},
-{"brlp-0", {NULL}, 4101, "tcp"},
-{"brlp-0", {NULL}, 4101, "udp"},
-{"brlp-1", {NULL}, 4102, "tcp"},
-{"brlp-1", {NULL}, 4102, "udp"},
-{"brlp-2", {NULL}, 4103, "tcp"},
-{"brlp-2", {NULL}, 4103, "udp"},
-{"brlp-3", {NULL}, 4104, "tcp"},
-{"brlp-3", {NULL}, 4104, "udp"},
-{"shofarplayer", {NULL}, 4105, "tcp"},
-{"shofarplayer", {NULL}, 4105, "udp"},
-{"synchronite", {NULL}, 4106, "tcp"},
-{"synchronite", {NULL}, 4106, "udp"},
-{"j-ac", {NULL}, 4107, "tcp"},
-{"j-ac", {NULL}, 4107, "udp"},
-{"accel", {NULL}, 4108, "tcp"},
-{"accel", {NULL}, 4108, "udp"},
-{"izm", {NULL}, 4109, "tcp"},
-{"izm", {NULL}, 4109, "udp"},
-{"g2tag", {NULL}, 4110, "tcp"},
-{"g2tag", {NULL}, 4110, "udp"},
-{"xgrid", {NULL}, 4111, "tcp"},
-{"xgrid", {NULL}, 4111, "udp"},
-{"apple-vpns-rp", {NULL}, 4112, "tcp"},
-{"apple-vpns-rp", {NULL}, 4112, "udp"},
-{"aipn-reg", {NULL}, 4113, "tcp"},
-{"aipn-reg", {NULL}, 4113, "udp"},
-{"jomamqmonitor", {NULL}, 4114, "tcp"},
-{"jomamqmonitor", {NULL}, 4114, "udp"},
-{"cds", {NULL}, 4115, "tcp"},
-{"cds", {NULL}, 4115, "udp"},
-{"smartcard-tls", {NULL}, 4116, "tcp"},
-{"smartcard-tls", {NULL}, 4116, "udp"},
-{"hillrserv", {NULL}, 4117, "tcp"},
-{"hillrserv", {NULL}, 4117, "udp"},
-{"netscript", {NULL}, 4118, "tcp"},
-{"netscript", {NULL}, 4118, "udp"},
-{"assuria-slm", {NULL}, 4119, "tcp"},
-{"assuria-slm", {NULL}, 4119, "udp"},
-{"e-builder", {NULL}, 4121, "tcp"},
-{"e-builder", {NULL}, 4121, "udp"},
-{"fprams", {NULL}, 4122, "tcp"},
-{"fprams", {NULL}, 4122, "udp"},
-{"z-wave", {NULL}, 4123, "tcp"},
-{"z-wave", {NULL}, 4123, "udp"},
-{"tigv2", {NULL}, 4124, "tcp"},
-{"tigv2", {NULL}, 4124, "udp"},
-{"opsview-envoy", {NULL}, 4125, "tcp"},
-{"opsview-envoy", {NULL}, 4125, "udp"},
-{"ddrepl", {NULL}, 4126, "tcp"},
-{"ddrepl", {NULL}, 4126, "udp"},
-{"unikeypro", {NULL}, 4127, "tcp"},
-{"unikeypro", {NULL}, 4127, "udp"},
-{"nufw", {NULL}, 4128, "tcp"},
-{"nufw", {NULL}, 4128, "udp"},
-{"nuauth", {NULL}, 4129, "tcp"},
-{"nuauth", {NULL}, 4129, "udp"},
-{"fronet", {NULL}, 4130, "tcp"},
-{"fronet", {NULL}, 4130, "udp"},
-{"stars", {NULL}, 4131, "tcp"},
-{"stars", {NULL}, 4131, "udp"},
-{"nuts_dem", {NULL}, 4132, "tcp"},
-{"nuts_dem", {NULL}, 4132, "udp"},
-{"nuts_bootp", {NULL}, 4133, "tcp"},
-{"nuts_bootp", {NULL}, 4133, "udp"},
-{"nifty-hmi", {NULL}, 4134, "tcp"},
-{"nifty-hmi", {NULL}, 4134, "udp"},
-{"cl-db-attach", {NULL}, 4135, "tcp"},
-{"cl-db-attach", {NULL}, 4135, "udp"},
-{"cl-db-request", {NULL}, 4136, "tcp"},
-{"cl-db-request", {NULL}, 4136, "udp"},
-{"cl-db-remote", {NULL}, 4137, "tcp"},
-{"cl-db-remote", {NULL}, 4137, "udp"},
-{"nettest", {NULL}, 4138, "tcp"},
-{"nettest", {NULL}, 4138, "udp"},
-{"thrtx", {NULL}, 4139, "tcp"},
-{"thrtx", {NULL}, 4139, "udp"},
-{"cedros_fds", {NULL}, 4140, "tcp"},
-{"cedros_fds", {NULL}, 4140, "udp"},
-{"oirtgsvc", {NULL}, 4141, "tcp"},
-{"oirtgsvc", {NULL}, 4141, "udp"},
-{"oidocsvc", {NULL}, 4142, "tcp"},
-{"oidocsvc", {NULL}, 4142, "udp"},
-{"oidsr", {NULL}, 4143, "tcp"},
-{"oidsr", {NULL}, 4143, "udp"},
-{"vvr-control", {NULL}, 4145, "tcp"},
-{"vvr-control", {NULL}, 4145, "udp"},
-{"tgcconnect", {NULL}, 4146, "tcp"},
-{"tgcconnect", {NULL}, 4146, "udp"},
-{"vrxpservman", {NULL}, 4147, "tcp"},
-{"vrxpservman", {NULL}, 4147, "udp"},
-{"hhb-handheld", {NULL}, 4148, "tcp"},
-{"hhb-handheld", {NULL}, 4148, "udp"},
-{"agslb", {NULL}, 4149, "tcp"},
-{"agslb", {NULL}, 4149, "udp"},
-{"PowerAlert-nsa", {NULL}, 4150, "tcp"},
-{"PowerAlert-nsa", {NULL}, 4150, "udp"},
-{"menandmice_noh", {NULL}, 4151, "tcp"},
-{"menandmice_noh", {NULL}, 4151, "udp"},
-{"idig_mux", {NULL}, 4152, "tcp"},
-{"idig_mux", {NULL}, 4152, "udp"},
-{"mbl-battd", {NULL}, 4153, "tcp"},
-{"mbl-battd", {NULL}, 4153, "udp"},
-{"atlinks", {NULL}, 4154, "tcp"},
-{"atlinks", {NULL}, 4154, "udp"},
-{"bzr", {NULL}, 4155, "tcp"},
-{"bzr", {NULL}, 4155, "udp"},
-{"stat-results", {NULL}, 4156, "tcp"},
-{"stat-results", {NULL}, 4156, "udp"},
-{"stat-scanner", {NULL}, 4157, "tcp"},
-{"stat-scanner", {NULL}, 4157, "udp"},
-{"stat-cc", {NULL}, 4158, "tcp"},
-{"stat-cc", {NULL}, 4158, "udp"},
-{"nss", {NULL}, 4159, "tcp"},
-{"nss", {NULL}, 4159, "udp"},
-{"jini-discovery", {NULL}, 4160, "tcp"},
-{"jini-discovery", {NULL}, 4160, "udp"},
-{"omscontact", {NULL}, 4161, "tcp"},
-{"omscontact", {NULL}, 4161, "udp"},
-{"omstopology", {NULL}, 4162, "tcp"},
-{"omstopology", {NULL}, 4162, "udp"},
-{"silverpeakpeer", {NULL}, 4163, "tcp"},
-{"silverpeakpeer", {NULL}, 4163, "udp"},
-{"silverpeakcomm", {NULL}, 4164, "tcp"},
-{"silverpeakcomm", {NULL}, 4164, "udp"},
-{"altcp", {NULL}, 4165, "tcp"},
-{"altcp", {NULL}, 4165, "udp"},
-{"joost", {NULL}, 4166, "tcp"},
-{"joost", {NULL}, 4166, "udp"},
-{"ddgn", {NULL}, 4167, "tcp"},
-{"ddgn", {NULL}, 4167, "udp"},
-{"pslicser", {NULL}, 4168, "tcp"},
-{"pslicser", {NULL}, 4168, "udp"},
-{"iadt", {NULL}, 4169, "tcp"},
-{"iadt-disc", {NULL}, 4169, "udp"},
-{"d-cinema-csp", {NULL}, 4170, "tcp"},
-{"ml-svnet", {NULL}, 4171, "tcp"},
-{"pcoip", {NULL}, 4172, "tcp"},
-{"pcoip", {NULL}, 4172, "udp"},
-{"smcluster", {NULL}, 4174, "tcp"},
-{"bccp", {NULL}, 4175, "tcp"},
-{"tl-ipcproxy", {NULL}, 4176, "tcp"},
-{"wello", {NULL}, 4177, "tcp"},
-{"wello", {NULL}, 4177, "udp"},
-{"storman", {NULL}, 4178, "tcp"},
-{"storman", {NULL}, 4178, "udp"},
-{"MaxumSP", {NULL}, 4179, "tcp"},
-{"MaxumSP", {NULL}, 4179, "udp"},
-{"httpx", {NULL}, 4180, "tcp"},
-{"httpx", {NULL}, 4180, "udp"},
-{"macbak", {NULL}, 4181, "tcp"},
-{"macbak", {NULL}, 4181, "udp"},
-{"pcptcpservice", {NULL}, 4182, "tcp"},
-{"pcptcpservice", {NULL}, 4182, "udp"},
-{"gmmp", {NULL}, 4183, "tcp"},
-{"gmmp", {NULL}, 4183, "udp"},
-{"universe_suite", {NULL}, 4184, "tcp"},
-{"universe_suite", {NULL}, 4184, "udp"},
-{"wcpp", {NULL}, 4185, "tcp"},
-{"wcpp", {NULL}, 4185, "udp"},
-{"boxbackupstore", {NULL}, 4186, "tcp"},
-{"csc_proxy", {NULL}, 4187, "tcp"},
-{"vatata", {NULL}, 4188, "tcp"},
-{"vatata", {NULL}, 4188, "udp"},
-{"pcep", {NULL}, 4189, "tcp"},
-{"sieve", {NULL}, 4190, "tcp"},
-{"dsmipv6", {NULL}, 4191, "udp"},
-{"azeti", {NULL}, 4192, "tcp"},
-{"azeti-bd", {NULL}, 4192, "udp"},
-{"pvxplusio", {NULL}, 4193, "tcp"},
-{"eims-admin", {NULL}, 4199, "tcp"},
-{"eims-admin", {NULL}, 4199, "udp"},
-{"corelccam", {NULL}, 4300, "tcp"},
-{"corelccam", {NULL}, 4300, "udp"},
-{"d-data", {NULL}, 4301, "tcp"},
-{"d-data", {NULL}, 4301, "udp"},
-{"d-data-control", {NULL}, 4302, "tcp"},
-{"d-data-control", {NULL}, 4302, "udp"},
-{"srcp", {NULL}, 4303, "tcp"},
-{"srcp", {NULL}, 4303, "udp"},
-{"owserver", {NULL}, 4304, "tcp"},
-{"owserver", {NULL}, 4304, "udp"},
-{"batman", {NULL}, 4305, "tcp"},
-{"batman", {NULL}, 4305, "udp"},
-{"pinghgl", {NULL}, 4306, "tcp"},
-{"pinghgl", {NULL}, 4306, "udp"},
-{"visicron-vs", {NULL}, 4307, "tcp"},
-{"visicron-vs", {NULL}, 4307, "udp"},
-{"compx-lockview", {NULL}, 4308, "tcp"},
-{"compx-lockview", {NULL}, 4308, "udp"},
-{"dserver", {NULL}, 4309, "tcp"},
-{"dserver", {NULL}, 4309, "udp"},
-{"mirrtex", {NULL}, 4310, "tcp"},
-{"mirrtex", {NULL}, 4310, "udp"},
-{"p6ssmc", {NULL}, 4311, "tcp"},
-{"pscl-mgt", {NULL}, 4312, "tcp"},
-{"perrla", {NULL}, 4313, "tcp"},
-{"fdt-rcatp", {NULL}, 4320, "tcp"},
-{"fdt-rcatp", {NULL}, 4320, "udp"},
-{"rwhois", {NULL}, 4321, "tcp"},
-{"rwhois", {NULL}, 4321, "udp"},
-{"trim-event", {NULL}, 4322, "tcp"},
-{"trim-event", {NULL}, 4322, "udp"},
-{"trim-ice", {NULL}, 4323, "tcp"},
-{"trim-ice", {NULL}, 4323, "udp"},
-{"balour", {NULL}, 4324, "tcp"},
-{"balour", {NULL}, 4324, "udp"},
-{"geognosisman", {NULL}, 4325, "tcp"},
-{"geognosisman", {NULL}, 4325, "udp"},
-{"geognosis", {NULL}, 4326, "tcp"},
-{"geognosis", {NULL}, 4326, "udp"},
-{"jaxer-web", {NULL}, 4327, "tcp"},
-{"jaxer-web", {NULL}, 4327, "udp"},
-{"jaxer-manager", {NULL}, 4328, "tcp"},
-{"jaxer-manager", {NULL}, 4328, "udp"},
-{"publiqare-sync", {NULL}, 4329, "tcp"},
-{"gaia", {NULL}, 4340, "tcp"},
-{"gaia", {NULL}, 4340, "udp"},
-{"lisp-data", {NULL}, 4341, "tcp"},
-{"lisp-data", {NULL}, 4341, "udp"},
-{"lisp-cons", {NULL}, 4342, "tcp"},
-{"lisp-control", {NULL}, 4342, "udp"},
-{"unicall", {NULL}, 4343, "tcp"},
-{"unicall", {NULL}, 4343, "udp"},
-{"vinainstall", {NULL}, 4344, "tcp"},
-{"vinainstall", {NULL}, 4344, "udp"},
-{"m4-network-as", {NULL}, 4345, "tcp"},
-{"m4-network-as", {NULL}, 4345, "udp"},
-{"elanlm", {NULL}, 4346, "tcp"},
-{"elanlm", {NULL}, 4346, "udp"},
-{"lansurveyor", {NULL}, 4347, "tcp"},
-{"lansurveyor", {NULL}, 4347, "udp"},
-{"itose", {NULL}, 4348, "tcp"},
-{"itose", {NULL}, 4348, "udp"},
-{"fsportmap", {NULL}, 4349, "tcp"},
-{"fsportmap", {NULL}, 4349, "udp"},
-{"net-device", {NULL}, 4350, "tcp"},
-{"net-device", {NULL}, 4350, "udp"},
-{"plcy-net-svcs", {NULL}, 4351, "tcp"},
-{"plcy-net-svcs", {NULL}, 4351, "udp"},
-{"pjlink", {NULL}, 4352, "tcp"},
-{"pjlink", {NULL}, 4352, "udp"},
-{"f5-iquery", {NULL}, 4353, "tcp"},
-{"f5-iquery", {NULL}, 4353, "udp"},
-{"qsnet-trans", {NULL}, 4354, "tcp"},
-{"qsnet-trans", {NULL}, 4354, "udp"},
-{"qsnet-workst", {NULL}, 4355, "tcp"},
-{"qsnet-workst", {NULL}, 4355, "udp"},
-{"qsnet-assist", {NULL}, 4356, "tcp"},
-{"qsnet-assist", {NULL}, 4356, "udp"},
-{"qsnet-cond", {NULL}, 4357, "tcp"},
-{"qsnet-cond", {NULL}, 4357, "udp"},
-{"qsnet-nucl", {NULL}, 4358, "tcp"},
-{"qsnet-nucl", {NULL}, 4358, "udp"},
-{"omabcastltkm", {NULL}, 4359, "tcp"},
-{"omabcastltkm", {NULL}, 4359, "udp"},
-{"matrix_vnet", {NULL}, 4360, "tcp"},
-{"nacnl", {NULL}, 4361, "udp"},
-{"afore-vdp-disc", {NULL}, 4362, "udp"},
-{"wxbrief", {NULL}, 4368, "tcp"},
-{"wxbrief", {NULL}, 4368, "udp"},
-{"epmd", {NULL}, 4369, "tcp"},
-{"epmd", {NULL}, 4369, "udp"},
-{"elpro_tunnel", {NULL}, 4370, "tcp"},
-{"elpro_tunnel", {NULL}, 4370, "udp"},
-{"l2c-control", {NULL}, 4371, "tcp"},
-{"l2c-disc", {NULL}, 4371, "udp"},
-{"l2c-data", {NULL}, 4372, "tcp"},
-{"l2c-data", {NULL}, 4372, "udp"},
-{"remctl", {NULL}, 4373, "tcp"},
-{"remctl", {NULL}, 4373, "udp"},
-{"psi-ptt", {NULL}, 4374, "tcp"},
-{"tolteces", {NULL}, 4375, "tcp"},
-{"tolteces", {NULL}, 4375, "udp"},
-{"bip", {NULL}, 4376, "tcp"},
-{"bip", {NULL}, 4376, "udp"},
-{"cp-spxsvr", {NULL}, 4377, "tcp"},
-{"cp-spxsvr", {NULL}, 4377, "udp"},
-{"cp-spxdpy", {NULL}, 4378, "tcp"},
-{"cp-spxdpy", {NULL}, 4378, "udp"},
-{"ctdb", {NULL}, 4379, "tcp"},
-{"ctdb", {NULL}, 4379, "udp"},
-{"xandros-cms", {NULL}, 4389, "tcp"},
-{"xandros-cms", {NULL}, 4389, "udp"},
-{"wiegand", {NULL}, 4390, "tcp"},
-{"wiegand", {NULL}, 4390, "udp"},
-{"apwi-imserver", {NULL}, 4391, "tcp"},
-{"apwi-rxserver", {NULL}, 4392, "tcp"},
-{"apwi-rxspooler", {NULL}, 4393, "tcp"},
-{"apwi-disc", {NULL}, 4394, "udp"},
-{"omnivisionesx", {NULL}, 4395, "tcp"},
-{"omnivisionesx", {NULL}, 4395, "udp"},
-{"fly", {NULL}, 4396, "tcp"},
-{"ds-srv", {NULL}, 4400, "tcp"},
-{"ds-srv", {NULL}, 4400, "udp"},
-{"ds-srvr", {NULL}, 4401, "tcp"},
-{"ds-srvr", {NULL}, 4401, "udp"},
-{"ds-clnt", {NULL}, 4402, "tcp"},
-{"ds-clnt", {NULL}, 4402, "udp"},
-{"ds-user", {NULL}, 4403, "tcp"},
-{"ds-user", {NULL}, 4403, "udp"},
-{"ds-admin", {NULL}, 4404, "tcp"},
-{"ds-admin", {NULL}, 4404, "udp"},
-{"ds-mail", {NULL}, 4405, "tcp"},
-{"ds-mail", {NULL}, 4405, "udp"},
-{"ds-slp", {NULL}, 4406, "tcp"},
-{"ds-slp", {NULL}, 4406, "udp"},
-{"nacagent", {NULL}, 4407, "tcp"},
-{"slscc", {NULL}, 4408, "tcp"},
-{"netcabinet-com", {NULL}, 4409, "tcp"},
-{"itwo-server", {NULL}, 4410, "tcp"},
-{"netrockey6", {NULL}, 4425, "tcp"},
-{"netrockey6", {NULL}, 4425, "udp"},
-{"beacon-port-2", {NULL}, 4426, "tcp"},
-{"beacon-port-2", {NULL}, 4426, "udp"},
-{"drizzle", {NULL}, 4427, "tcp"},
-{"omviserver", {NULL}, 4428, "tcp"},
-{"omviagent", {NULL}, 4429, "tcp"},
-{"rsqlserver", {NULL}, 4430, "tcp"},
-{"rsqlserver", {NULL}, 4430, "udp"},
-{"wspipe", {NULL}, 4431, "tcp"},
-{"netblox", {NULL}, 4441, "udp"},
-{"saris", {NULL}, 4442, "tcp"},
-{"saris", {NULL}, 4442, "udp"},
-{"pharos", {NULL}, 4443, "tcp"},
-{"pharos", {NULL}, 4443, "udp"},
-{"krb524", {NULL}, 4444, "tcp"},
-{"krb524", {NULL}, 4444, "udp"},
-{"nv-video", {NULL}, 4444, "tcp"},
-{"nv-video", {NULL}, 4444, "udp"},
-{"upnotifyp", {NULL}, 4445, "tcp"},
-{"upnotifyp", {NULL}, 4445, "udp"},
-{"n1-fwp", {NULL}, 4446, "tcp"},
-{"n1-fwp", {NULL}, 4446, "udp"},
-{"n1-rmgmt", {NULL}, 4447, "tcp"},
-{"n1-rmgmt", {NULL}, 4447, "udp"},
-{"asc-slmd", {NULL}, 4448, "tcp"},
-{"asc-slmd", {NULL}, 4448, "udp"},
-{"privatewire", {NULL}, 4449, "tcp"},
-{"privatewire", {NULL}, 4449, "udp"},
-{"camp", {NULL}, 4450, "tcp"},
-{"camp", {NULL}, 4450, "udp"},
-{"ctisystemmsg", {NULL}, 4451, "tcp"},
-{"ctisystemmsg", {NULL}, 4451, "udp"},
-{"ctiprogramload", {NULL}, 4452, "tcp"},
-{"ctiprogramload", {NULL}, 4452, "udp"},
-{"nssalertmgr", {NULL}, 4453, "tcp"},
-{"nssalertmgr", {NULL}, 4453, "udp"},
-{"nssagentmgr", {NULL}, 4454, "tcp"},
-{"nssagentmgr", {NULL}, 4454, "udp"},
-{"prchat-user", {NULL}, 4455, "tcp"},
-{"prchat-user", {NULL}, 4455, "udp"},
-{"prchat-server", {NULL}, 4456, "tcp"},
-{"prchat-server", {NULL}, 4456, "udp"},
-{"prRegister", {NULL}, 4457, "tcp"},
-{"prRegister", {NULL}, 4457, "udp"},
-{"mcp", {NULL}, 4458, "tcp"},
-{"mcp", {NULL}, 4458, "udp"},
-{"hpssmgmt", {NULL}, 4484, "tcp"},
-{"hpssmgmt", {NULL}, 4484, "udp"},
-{"assyst-dr", {NULL}, 4485, "tcp"},
-{"icms", {NULL}, 4486, "tcp"},
-{"icms", {NULL}, 4486, "udp"},
-{"prex-tcp", {NULL}, 4487, "tcp"},
-{"awacs-ice", {NULL}, 4488, "tcp"},
-{"awacs-ice", {NULL}, 4488, "udp"},
-{"ipsec-nat-t", {NULL}, 4500, "tcp"},
-{"ipsec-nat-t", {NULL}, 4500, "udp"},
-{"ehs", {NULL}, 4535, "tcp"},
-{"ehs", {NULL}, 4535, "udp"},
-{"ehs-ssl", {NULL}, 4536, "tcp"},
-{"ehs-ssl", {NULL}, 4536, "udp"},
-{"wssauthsvc", {NULL}, 4537, "tcp"},
-{"wssauthsvc", {NULL}, 4537, "udp"},
-{"swx-gate", {NULL}, 4538, "tcp"},
-{"swx-gate", {NULL}, 4538, "udp"},
-{"worldscores", {NULL}, 4545, "tcp"},
-{"worldscores", {NULL}, 4545, "udp"},
-{"sf-lm", {NULL}, 4546, "tcp"},
-{"sf-lm", {NULL}, 4546, "udp"},
-{"lanner-lm", {NULL}, 4547, "tcp"},
-{"lanner-lm", {NULL}, 4547, "udp"},
-{"synchromesh", {NULL}, 4548, "tcp"},
-{"synchromesh", {NULL}, 4548, "udp"},
-{"aegate", {NULL}, 4549, "tcp"},
-{"aegate", {NULL}, 4549, "udp"},
-{"gds-adppiw-db", {NULL}, 4550, "tcp"},
-{"gds-adppiw-db", {NULL}, 4550, "udp"},
-{"ieee-mih", {NULL}, 4551, "tcp"},
-{"ieee-mih", {NULL}, 4551, "udp"},
-{"menandmice-mon", {NULL}, 4552, "tcp"},
-{"menandmice-mon", {NULL}, 4552, "udp"},
-{"icshostsvc", {NULL}, 4553, "tcp"},
-{"msfrs", {NULL}, 4554, "tcp"},
-{"msfrs", {NULL}, 4554, "udp"},
-{"rsip", {NULL}, 4555, "tcp"},
-{"rsip", {NULL}, 4555, "udp"},
-{"dtn-bundle-tcp", {NULL}, 4556, "tcp"},
-{"dtn-bundle-udp", {NULL}, 4556, "udp"},
-{"mtcevrunqss", {NULL}, 4557, "udp"},
-{"mtcevrunqman", {NULL}, 4558, "udp"},
-{"hylafax", {NULL}, 4559, "tcp"},
-{"hylafax", {NULL}, 4559, "udp"},
-{"kwtc", {NULL}, 4566, "tcp"},
-{"kwtc", {NULL}, 4566, "udp"},
-{"tram", {NULL}, 4567, "tcp"},
-{"tram", {NULL}, 4567, "udp"},
-{"bmc-reporting", {NULL}, 4568, "tcp"},
-{"bmc-reporting", {NULL}, 4568, "udp"},
-{"iax", {NULL}, 4569, "tcp"},
-{"iax", {NULL}, 4569, "udp"},
-{"rid", {NULL}, 4590, "tcp"},
-{"l3t-at-an", {NULL}, 4591, "tcp"},
-{"l3t-at-an", {NULL}, 4591, "udp"},
-{"hrpd-ith-at-an", {NULL}, 4592, "udp"},
-{"ipt-anri-anri", {NULL}, 4593, "tcp"},
-{"ipt-anri-anri", {NULL}, 4593, "udp"},
-{"ias-session", {NULL}, 4594, "tcp"},
-{"ias-session", {NULL}, 4594, "udp"},
-{"ias-paging", {NULL}, 4595, "tcp"},
-{"ias-paging", {NULL}, 4595, "udp"},
-{"ias-neighbor", {NULL}, 4596, "tcp"},
-{"ias-neighbor", {NULL}, 4596, "udp"},
-{"a21-an-1xbs", {NULL}, 4597, "tcp"},
-{"a21-an-1xbs", {NULL}, 4597, "udp"},
-{"a16-an-an", {NULL}, 4598, "tcp"},
-{"a16-an-an", {NULL}, 4598, "udp"},
-{"a17-an-an", {NULL}, 4599, "tcp"},
-{"a17-an-an", {NULL}, 4599, "udp"},
-{"piranha1", {NULL}, 4600, "tcp"},
-{"piranha1", {NULL}, 4600, "udp"},
-{"piranha2", {NULL}, 4601, "tcp"},
-{"piranha2", {NULL}, 4601, "udp"},
-{"mtsserver", {NULL}, 4602, "tcp"},
-{"menandmice-upg", {NULL}, 4603, "tcp"},
-{"playsta2-app", {NULL}, 4658, "tcp"},
-{"playsta2-app", {NULL}, 4658, "udp"},
-{"playsta2-lob", {NULL}, 4659, "tcp"},
-{"playsta2-lob", {NULL}, 4659, "udp"},
-{"smaclmgr", {NULL}, 4660, "tcp"},
-{"smaclmgr", {NULL}, 4660, "udp"},
-{"kar2ouche", {NULL}, 4661, "tcp"},
-{"kar2ouche", {NULL}, 4661, "udp"},
-{"oms", {NULL}, 4662, "tcp"},
-{"oms", {NULL}, 4662, "udp"},
-{"noteit", {NULL}, 4663, "tcp"},
-{"noteit", {NULL}, 4663, "udp"},
-{"ems", {NULL}, 4664, "tcp"},
-{"ems", {NULL}, 4664, "udp"},
-{"contclientms", {NULL}, 4665, "tcp"},
-{"contclientms", {NULL}, 4665, "udp"},
-{"eportcomm", {NULL}, 4666, "tcp"},
-{"eportcomm", {NULL}, 4666, "udp"},
-{"mmacomm", {NULL}, 4667, "tcp"},
-{"mmacomm", {NULL}, 4667, "udp"},
-{"mmaeds", {NULL}, 4668, "tcp"},
-{"mmaeds", {NULL}, 4668, "udp"},
-{"eportcommdata", {NULL}, 4669, "tcp"},
-{"eportcommdata", {NULL}, 4669, "udp"},
-{"light", {NULL}, 4670, "tcp"},
-{"light", {NULL}, 4670, "udp"},
-{"acter", {NULL}, 4671, "tcp"},
-{"acter", {NULL}, 4671, "udp"},
-{"rfa", {NULL}, 4672, "tcp"},
-{"rfa", {NULL}, 4672, "udp"},
-{"cxws", {NULL}, 4673, "tcp"},
-{"cxws", {NULL}, 4673, "udp"},
-{"appiq-mgmt", {NULL}, 4674, "tcp"},
-{"appiq-mgmt", {NULL}, 4674, "udp"},
-{"dhct-status", {NULL}, 4675, "tcp"},
-{"dhct-status", {NULL}, 4675, "udp"},
-{"dhct-alerts", {NULL}, 4676, "tcp"},
-{"dhct-alerts", {NULL}, 4676, "udp"},
-{"bcs", {NULL}, 4677, "tcp"},
-{"bcs", {NULL}, 4677, "udp"},
-{"traversal", {NULL}, 4678, "tcp"},
-{"traversal", {NULL}, 4678, "udp"},
-{"mgesupervision", {NULL}, 4679, "tcp"},
-{"mgesupervision", {NULL}, 4679, "udp"},
-{"mgemanagement", {NULL}, 4680, "tcp"},
-{"mgemanagement", {NULL}, 4680, "udp"},
-{"parliant", {NULL}, 4681, "tcp"},
-{"parliant", {NULL}, 4681, "udp"},
-{"finisar", {NULL}, 4682, "tcp"},
-{"finisar", {NULL}, 4682, "udp"},
-{"spike", {NULL}, 4683, "tcp"},
-{"spike", {NULL}, 4683, "udp"},
-{"rfid-rp1", {NULL}, 4684, "tcp"},
-{"rfid-rp1", {NULL}, 4684, "udp"},
-{"autopac", {NULL}, 4685, "tcp"},
-{"autopac", {NULL}, 4685, "udp"},
-{"msp-os", {NULL}, 4686, "tcp"},
-{"msp-os", {NULL}, 4686, "udp"},
-{"nst", {NULL}, 4687, "tcp"},
-{"nst", {NULL}, 4687, "udp"},
-{"mobile-p2p", {NULL}, 4688, "tcp"},
-{"mobile-p2p", {NULL}, 4688, "udp"},
-{"altovacentral", {NULL}, 4689, "tcp"},
-{"altovacentral", {NULL}, 4689, "udp"},
-{"prelude", {NULL}, 4690, "tcp"},
-{"prelude", {NULL}, 4690, "udp"},
-{"mtn", {NULL}, 4691, "tcp"},
-{"mtn", {NULL}, 4691, "udp"},
-{"conspiracy", {NULL}, 4692, "tcp"},
-{"conspiracy", {NULL}, 4692, "udp"},
-{"netxms-agent", {NULL}, 4700, "tcp"},
-{"netxms-agent", {NULL}, 4700, "udp"},
-{"netxms-mgmt", {NULL}, 4701, "tcp"},
-{"netxms-mgmt", {NULL}, 4701, "udp"},
-{"netxms-sync", {NULL}, 4702, "tcp"},
-{"netxms-sync", {NULL}, 4702, "udp"},
-{"npqes-test", {NULL}, 4703, "tcp"},
-{"assuria-ins", {NULL}, 4704, "tcp"},
-{"truckstar", {NULL}, 4725, "tcp"},
-{"truckstar", {NULL}, 4725, "udp"},
-{"a26-fap-fgw", {NULL}, 4726, "udp"},
-{"fcis", {NULL}, 4727, "tcp"},
-{"fcis-disc", {NULL}, 4727, "udp"},
-{"capmux", {NULL}, 4728, "tcp"},
-{"capmux", {NULL}, 4728, "udp"},
-{"gsmtap", {NULL}, 4729, "udp"},
-{"gearman", {NULL}, 4730, "tcp"},
-{"gearman", {NULL}, 4730, "udp"},
-{"remcap", {NULL}, 4731, "tcp"},
-{"ohmtrigger", {NULL}, 4732, "udp"},
-{"resorcs", {NULL}, 4733, "tcp"},
-{"ipdr-sp", {NULL}, 4737, "tcp"},
-{"ipdr-sp", {NULL}, 4737, "udp"},
-{"solera-lpn", {NULL}, 4738, "tcp"},
-{"solera-lpn", {NULL}, 4738, "udp"},
-{"ipfix", {NULL}, 4739, "tcp"},
-{"ipfix", {NULL}, 4739, "udp"},
-{"ipfix", {NULL}, 4739, "sctp"},
-{"ipfixs", {NULL}, 4740, "tcp"},
-{"ipfixs", {NULL}, 4740, "sctp"},
-{"ipfixs", {NULL}, 4740, "udp"},
-{"lumimgrd", {NULL}, 4741, "tcp"},
-{"lumimgrd", {NULL}, 4741, "udp"},
-{"sicct", {NULL}, 4742, "tcp"},
-{"sicct-sdp", {NULL}, 4742, "udp"},
-{"openhpid", {NULL}, 4743, "tcp"},
-{"openhpid", {NULL}, 4743, "udp"},
-{"ifsp", {NULL}, 4744, "tcp"},
-{"ifsp", {NULL}, 4744, "udp"},
-{"fmp", {NULL}, 4745, "tcp"},
-{"fmp", {NULL}, 4745, "udp"},
-{"profilemac", {NULL}, 4749, "tcp"},
-{"profilemac", {NULL}, 4749, "udp"},
-{"ssad", {NULL}, 4750, "tcp"},
-{"ssad", {NULL}, 4750, "udp"},
-{"spocp", {NULL}, 4751, "tcp"},
-{"spocp", {NULL}, 4751, "udp"},
-{"snap", {NULL}, 4752, "tcp"},
-{"snap", {NULL}, 4752, "udp"},
-{"bfd-multi-ctl", {NULL}, 4784, "tcp"},
-{"bfd-multi-ctl", {NULL}, 4784, "udp"},
-{"cncp", {NULL}, 4785, "udp"},
-{"smart-install", {NULL}, 4786, "tcp"},
-{"sia-ctrl-plane", {NULL}, 4787, "tcp"},
-{"iims", {NULL}, 4800, "tcp"},
-{"iims", {NULL}, 4800, "udp"},
-{"iwec", {NULL}, 4801, "tcp"},
-{"iwec", {NULL}, 4801, "udp"},
-{"ilss", {NULL}, 4802, "tcp"},
-{"ilss", {NULL}, 4802, "udp"},
-{"notateit", {NULL}, 4803, "tcp"},
-{"notateit-disc", {NULL}, 4803, "udp"},
-{"aja-ntv4-disc", {NULL}, 4804, "udp"},
-{"htcp", {NULL}, 4827, "tcp"},
-{"htcp", {NULL}, 4827, "udp"},
-{"varadero-0", {NULL}, 4837, "tcp"},
-{"varadero-0", {NULL}, 4837, "udp"},
-{"varadero-1", {NULL}, 4838, "tcp"},
-{"varadero-1", {NULL}, 4838, "udp"},
-{"varadero-2", {NULL}, 4839, "tcp"},
-{"varadero-2", {NULL}, 4839, "udp"},
-{"opcua-tcp", {NULL}, 4840, "tcp"},
-{"opcua-udp", {NULL}, 4840, "udp"},
-{"quosa", {NULL}, 4841, "tcp"},
-{"quosa", {NULL}, 4841, "udp"},
-{"gw-asv", {NULL}, 4842, "tcp"},
-{"gw-asv", {NULL}, 4842, "udp"},
-{"opcua-tls", {NULL}, 4843, "tcp"},
-{"opcua-tls", {NULL}, 4843, "udp"},
-{"gw-log", {NULL}, 4844, "tcp"},
-{"gw-log", {NULL}, 4844, "udp"},
-{"wcr-remlib", {NULL}, 4845, "tcp"},
-{"wcr-remlib", {NULL}, 4845, "udp"},
-{"contamac_icm", {NULL}, 4846, "tcp"},
-{"contamac_icm", {NULL}, 4846, "udp"},
-{"wfc", {NULL}, 4847, "tcp"},
-{"wfc", {NULL}, 4847, "udp"},
-{"appserv-http", {NULL}, 4848, "tcp"},
-{"appserv-http", {NULL}, 4848, "udp"},
-{"appserv-https", {NULL}, 4849, "tcp"},
-{"appserv-https", {NULL}, 4849, "udp"},
-{"sun-as-nodeagt", {NULL}, 4850, "tcp"},
-{"sun-as-nodeagt", {NULL}, 4850, "udp"},
-{"derby-repli", {NULL}, 4851, "tcp"},
-{"derby-repli", {NULL}, 4851, "udp"},
-{"unify-debug", {NULL}, 4867, "tcp"},
-{"unify-debug", {NULL}, 4867, "udp"},
-{"phrelay", {NULL}, 4868, "tcp"},
-{"phrelay", {NULL}, 4868, "udp"},
-{"phrelaydbg", {NULL}, 4869, "tcp"},
-{"phrelaydbg", {NULL}, 4869, "udp"},
-{"cc-tracking", {NULL}, 4870, "tcp"},
-{"cc-tracking", {NULL}, 4870, "udp"},
-{"wired", {NULL}, 4871, "tcp"},
-{"wired", {NULL}, 4871, "udp"},
-{"tritium-can", {NULL}, 4876, "tcp"},
-{"tritium-can", {NULL}, 4876, "udp"},
-{"lmcs", {NULL}, 4877, "tcp"},
-{"lmcs", {NULL}, 4877, "udp"},
-{"inst-discovery", {NULL}, 4878, "udp"},
-{"wsdl-event", {NULL}, 4879, "tcp"},
-{"hislip", {NULL}, 4880, "tcp"},
-{"socp-t", {NULL}, 4881, "udp"},
-{"socp-c", {NULL}, 4882, "udp"},
-{"wmlserver", {NULL}, 4883, "tcp"},
-{"hivestor", {NULL}, 4884, "tcp"},
-{"hivestor", {NULL}, 4884, "udp"},
-{"abbs", {NULL}, 4885, "tcp"},
-{"abbs", {NULL}, 4885, "udp"},
-{"lyskom", {NULL}, 4894, "tcp"},
-{"lyskom", {NULL}, 4894, "udp"},
-{"radmin-port", {NULL}, 4899, "tcp"},
-{"radmin-port", {NULL}, 4899, "udp"},
-{"hfcs", {NULL}, 4900, "tcp"},
-{"hfcs", {NULL}, 4900, "udp"},
-{"flr_agent", {NULL}, 4901, "tcp"},
-{"magiccontrol", {NULL}, 4902, "tcp"},
-{"lutap", {NULL}, 4912, "tcp"},
-{"lutcp", {NULL}, 4913, "tcp"},
-{"bones", {NULL}, 4914, "tcp"},
-{"bones", {NULL}, 4914, "udp"},
-{"frcs", {NULL}, 4915, "tcp"},
-{"atsc-mh-ssc", {NULL}, 4937, "udp"},
-{"eq-office-4940", {NULL}, 4940, "tcp"},
-{"eq-office-4940", {NULL}, 4940, "udp"},
-{"eq-office-4941", {NULL}, 4941, "tcp"},
-{"eq-office-4941", {NULL}, 4941, "udp"},
-{"eq-office-4942", {NULL}, 4942, "tcp"},
-{"eq-office-4942", {NULL}, 4942, "udp"},
-{"munin", {NULL}, 4949, "tcp"},
-{"munin", {NULL}, 4949, "udp"},
-{"sybasesrvmon", {NULL}, 4950, "tcp"},
-{"sybasesrvmon", {NULL}, 4950, "udp"},
-{"pwgwims", {NULL}, 4951, "tcp"},
-{"pwgwims", {NULL}, 4951, "udp"},
-{"sagxtsds", {NULL}, 4952, "tcp"},
-{"sagxtsds", {NULL}, 4952, "udp"},
-{"dbsyncarbiter", {NULL}, 4953, "tcp"},
-{"ccss-qmm", {NULL}, 4969, "tcp"},
-{"ccss-qmm", {NULL}, 4969, "udp"},
-{"ccss-qsm", {NULL}, 4970, "tcp"},
-{"ccss-qsm", {NULL}, 4970, "udp"},
-{"webyast", {NULL}, 4984, "tcp"},
-{"gerhcs", {NULL}, 4985, "tcp"},
-{"mrip", {NULL}, 4986, "tcp"},
-{"mrip", {NULL}, 4986, "udp"},
-{"smar-se-port1", {NULL}, 4987, "tcp"},
-{"smar-se-port1", {NULL}, 4987, "udp"},
-{"smar-se-port2", {NULL}, 4988, "tcp"},
-{"smar-se-port2", {NULL}, 4988, "udp"},
-{"parallel", {NULL}, 4989, "tcp"},
-{"parallel", {NULL}, 4989, "udp"},
-{"busycal", {NULL}, 4990, "tcp"},
-{"busycal", {NULL}, 4990, "udp"},
-{"vrt", {NULL}, 4991, "tcp"},
-{"vrt", {NULL}, 4991, "udp"},
-{"hfcs-manager", {NULL}, 4999, "tcp"},
-{"hfcs-manager", {NULL}, 4999, "udp"},
-{"commplex-main", {NULL}, 5000, "tcp"},
-{"commplex-main", {NULL}, 5000, "udp"},
-{"commplex-link", {NULL}, 5001, "tcp"},
-{"commplex-link", {NULL}, 5001, "udp"},
-{"rfe", {NULL}, 5002, "tcp"},
-{"rfe", {NULL}, 5002, "udp"},
-{"fmpro-internal", {NULL}, 5003, "tcp"},
-{"fmpro-internal", {NULL}, 5003, "udp"},
-{"avt-profile-1", {NULL}, 5004, "tcp"},
-{"avt-profile-1", {NULL}, 5004, "udp"},
-{"avt-profile-1", {NULL}, 5004, "dccp"},
-{"avt-profile-2", {NULL}, 5005, "tcp"},
-{"avt-profile-2", {NULL}, 5005, "udp"},
-{"avt-profile-2", {NULL}, 5005, "dccp"},
-{"wsm-server", {NULL}, 5006, "tcp"},
-{"wsm-server", {NULL}, 5006, "udp"},
-{"wsm-server-ssl", {NULL}, 5007, "tcp"},
-{"wsm-server-ssl", {NULL}, 5007, "udp"},
-{"synapsis-edge", {NULL}, 5008, "tcp"},
-{"synapsis-edge", {NULL}, 5008, "udp"},
-{"winfs", {NULL}, 5009, "tcp"},
-{"winfs", {NULL}, 5009, "udp"},
-{"telelpathstart", {NULL}, 5010, "tcp"},
-{"telelpathstart", {NULL}, 5010, "udp"},
-{"telelpathattack", {NULL}, 5011, "tcp"},
-{"telelpathattack", {NULL}, 5011, "udp"},
-{"nsp", {NULL}, 5012, "tcp"},
-{"nsp", {NULL}, 5012, "udp"},
-{"fmpro-v6", {NULL}, 5013, "tcp"},
-{"fmpro-v6", {NULL}, 5013, "udp"},
-{"onpsocket", {NULL}, 5014, "udp"},
-{"fmwp", {NULL}, 5015, "tcp"},
-{"zenginkyo-1", {NULL}, 5020, "tcp"},
-{"zenginkyo-1", {NULL}, 5020, "udp"},
-{"zenginkyo-2", {NULL}, 5021, "tcp"},
-{"zenginkyo-2", {NULL}, 5021, "udp"},
-{"mice", {NULL}, 5022, "tcp"},
-{"mice", {NULL}, 5022, "udp"},
-{"htuilsrv", {NULL}, 5023, "tcp"},
-{"htuilsrv", {NULL}, 5023, "udp"},
-{"scpi-telnet", {NULL}, 5024, "tcp"},
-{"scpi-telnet", {NULL}, 5024, "udp"},
-{"scpi-raw", {NULL}, 5025, "tcp"},
-{"scpi-raw", {NULL}, 5025, "udp"},
-{"strexec-d", {NULL}, 5026, "tcp"},
-{"strexec-d", {NULL}, 5026, "udp"},
-{"strexec-s", {NULL}, 5027, "tcp"},
-{"strexec-s", {NULL}, 5027, "udp"},
-{"qvr", {NULL}, 5028, "tcp"},
-{"infobright", {NULL}, 5029, "tcp"},
-{"infobright", {NULL}, 5029, "udp"},
-{"surfpass", {NULL}, 5030, "tcp"},
-{"surfpass", {NULL}, 5030, "udp"},
-{"dmp", {NULL}, 5031, "udp"},
-{"asnaacceler8db", {NULL}, 5042, "tcp"},
-{"asnaacceler8db", {NULL}, 5042, "udp"},
-{"swxadmin", {NULL}, 5043, "tcp"},
-{"swxadmin", {NULL}, 5043, "udp"},
-{"lxi-evntsvc", {NULL}, 5044, "tcp"},
-{"lxi-evntsvc", {NULL}, 5044, "udp"},
-{"osp", {NULL}, 5045, "tcp"},
-{"vpm-udp", {NULL}, 5046, "udp"},
-{"iscape", {NULL}, 5047, "udp"},
-{"texai", {NULL}, 5048, "tcp"},
-{"ivocalize", {NULL}, 5049, "tcp"},
-{"ivocalize", {NULL}, 5049, "udp"},
-{"mmcc", {NULL}, 5050, "tcp"},
-{"mmcc", {NULL}, 5050, "udp"},
-{"ita-agent", {NULL}, 5051, "tcp"},
-{"ita-agent", {NULL}, 5051, "udp"},
-{"ita-manager", {NULL}, 5052, "tcp"},
-{"ita-manager", {NULL}, 5052, "udp"},
-{"rlm", {NULL}, 5053, "tcp"},
-{"rlm-admin", {NULL}, 5054, "tcp"},
-{"unot", {NULL}, 5055, "tcp"},
-{"unot", {NULL}, 5055, "udp"},
-{"intecom-ps1", {NULL}, 5056, "tcp"},
-{"intecom-ps1", {NULL}, 5056, "udp"},
-{"intecom-ps2", {NULL}, 5057, "tcp"},
-{"intecom-ps2", {NULL}, 5057, "udp"},
-{"locus-disc", {NULL}, 5058, "udp"},
-{"sds", {NULL}, 5059, "tcp"},
-{"sds", {NULL}, 5059, "udp"},
-{"sip", {NULL}, 5060, "tcp"},
-{"sip", {NULL}, 5060, "udp"},
-{"sip-tls", {NULL}, 5061, "tcp"},
-{"sip-tls", {NULL}, 5061, "udp"},
-{"na-localise", {NULL}, 5062, "tcp"},
-{"na-localise", {NULL}, 5062, "udp"},
-{"csrpc", {NULL}, 5063, "tcp"},
-{"ca-1", {NULL}, 5064, "tcp"},
-{"ca-1", {NULL}, 5064, "udp"},
-{"ca-2", {NULL}, 5065, "tcp"},
-{"ca-2", {NULL}, 5065, "udp"},
-{"stanag-5066", {NULL}, 5066, "tcp"},
-{"stanag-5066", {NULL}, 5066, "udp"},
-{"authentx", {NULL}, 5067, "tcp"},
-{"authentx", {NULL}, 5067, "udp"},
-{"bitforestsrv", {NULL}, 5068, "tcp"},
-{"i-net-2000-npr", {NULL}, 5069, "tcp"},
-{"i-net-2000-npr", {NULL}, 5069, "udp"},
-{"vtsas", {NULL}, 5070, "tcp"},
-{"vtsas", {NULL}, 5070, "udp"},
-{"powerschool", {NULL}, 5071, "tcp"},
-{"powerschool", {NULL}, 5071, "udp"},
-{"ayiya", {NULL}, 5072, "tcp"},
-{"ayiya", {NULL}, 5072, "udp"},
-{"tag-pm", {NULL}, 5073, "tcp"},
-{"tag-pm", {NULL}, 5073, "udp"},
-{"alesquery", {NULL}, 5074, "tcp"},
-{"alesquery", {NULL}, 5074, "udp"},
-{"cp-spxrpts", {NULL}, 5079, "udp"},
-{"onscreen", {NULL}, 5080, "tcp"},
-{"onscreen", {NULL}, 5080, "udp"},
-{"sdl-ets", {NULL}, 5081, "tcp"},
-{"sdl-ets", {NULL}, 5081, "udp"},
-{"qcp", {NULL}, 5082, "tcp"},
-{"qcp", {NULL}, 5082, "udp"},
-{"qfp", {NULL}, 5083, "tcp"},
-{"qfp", {NULL}, 5083, "udp"},
-{"llrp", {NULL}, 5084, "tcp"},
-{"llrp", {NULL}, 5084, "udp"},
-{"encrypted-llrp", {NULL}, 5085, "tcp"},
-{"encrypted-llrp", {NULL}, 5085, "udp"},
-{"aprigo-cs", {NULL}, 5086, "tcp"},
-{"car", {NULL}, 5090, "sctp"},
-{"cxtp", {NULL}, 5091, "sctp"},
-{"magpie", {NULL}, 5092, "udp"},
-{"sentinel-lm", {NULL}, 5093, "tcp"},
-{"sentinel-lm", {NULL}, 5093, "udp"},
-{"hart-ip", {NULL}, 5094, "tcp"},
-{"hart-ip", {NULL}, 5094, "udp"},
-{"sentlm-srv2srv", {NULL}, 5099, "tcp"},
-{"sentlm-srv2srv", {NULL}, 5099, "udp"},
-{"socalia", {NULL}, 5100, "tcp"},
-{"socalia", {NULL}, 5100, "udp"},
-{"talarian-tcp", {NULL}, 5101, "tcp"},
-{"talarian-udp", {NULL}, 5101, "udp"},
-{"oms-nonsecure", {NULL}, 5102, "tcp"},
-{"oms-nonsecure", {NULL}, 5102, "udp"},
-{"actifio-c2c", {NULL}, 5103, "tcp"},
-{"tinymessage", {NULL}, 5104, "udp"},
-{"hughes-ap", {NULL}, 5105, "udp"},
-{"taep-as-svc", {NULL}, 5111, "tcp"},
-{"taep-as-svc", {NULL}, 5111, "udp"},
-{"pm-cmdsvr", {NULL}, 5112, "tcp"},
-{"pm-cmdsvr", {NULL}, 5112, "udp"},
-{"ev-services", {NULL}, 5114, "tcp"},
-{"autobuild", {NULL}, 5115, "tcp"},
-{"emb-proj-cmd", {NULL}, 5116, "udp"},
-{"gradecam", {NULL}, 5117, "tcp"},
-{"nbt-pc", {NULL}, 5133, "tcp"},
-{"nbt-pc", {NULL}, 5133, "udp"},
-{"ppactivation", {NULL}, 5134, "tcp"},
-{"erp-scale", {NULL}, 5135, "tcp"},
-{"minotaur-sa", {NULL}, 5136, "udp"},
-{"ctsd", {NULL}, 5137, "tcp"},
-{"ctsd", {NULL}, 5137, "udp"},
-{"rmonitor_secure", {NULL}, 5145, "tcp"},
-{"rmonitor_secure", {NULL}, 5145, "udp"},
-{"social-alarm", {NULL}, 5146, "tcp"},
-{"atmp", {NULL}, 5150, "tcp"},
-{"atmp", {NULL}, 5150, "udp"},
-{"esri_sde", {NULL}, 5151, "tcp"},
-{"esri_sde", {NULL}, 5151, "udp"},
-{"sde-discovery", {NULL}, 5152, "tcp"},
-{"sde-discovery", {NULL}, 5152, "udp"},
-{"toruxserver", {NULL}, 5153, "tcp"},
-{"bzflag", {NULL}, 5154, "tcp"},
-{"bzflag", {NULL}, 5154, "udp"},
-{"asctrl-agent", {NULL}, 5155, "tcp"},
-{"asctrl-agent", {NULL}, 5155, "udp"},
-{"rugameonline", {NULL}, 5156, "tcp"},
-{"mediat", {NULL}, 5157, "tcp"},
-{"snmpssh", {NULL}, 5161, "tcp"},
-{"snmpssh-trap", {NULL}, 5162, "tcp"},
-{"sbackup", {NULL}, 5163, "tcp"},
-{"vpa", {NULL}, 5164, "tcp"},
-{"vpa-disc", {NULL}, 5164, "udp"},
-{"ife_icorp", {NULL}, 5165, "tcp"},
-{"ife_icorp", {NULL}, 5165, "udp"},
-{"winpcs", {NULL}, 5166, "tcp"},
-{"winpcs", {NULL}, 5166, "udp"},
-{"scte104", {NULL}, 5167, "tcp"},
-{"scte104", {NULL}, 5167, "udp"},
-{"scte30", {NULL}, 5168, "tcp"},
-{"scte30", {NULL}, 5168, "udp"},
-{"aol", {NULL}, 5190, "tcp"},
-{"aol", {NULL}, 5190, "udp"},
-{"aol-1", {NULL}, 5191, "tcp"},
-{"aol-1", {NULL}, 5191, "udp"},
-{"aol-2", {NULL}, 5192, "tcp"},
-{"aol-2", {NULL}, 5192, "udp"},
-{"aol-3", {NULL}, 5193, "tcp"},
-{"aol-3", {NULL}, 5193, "udp"},
-{"cpscomm", {NULL}, 5194, "tcp"},
-{"targus-getdata", {NULL}, 5200, "tcp"},
-{"targus-getdata", {NULL}, 5200, "udp"},
-{"targus-getdata1", {NULL}, 5201, "tcp"},
-{"targus-getdata1", {NULL}, 5201, "udp"},
-{"targus-getdata2", {NULL}, 5202, "tcp"},
-{"targus-getdata2", {NULL}, 5202, "udp"},
-{"targus-getdata3", {NULL}, 5203, "tcp"},
-{"targus-getdata3", {NULL}, 5203, "udp"},
-{"3exmp", {NULL}, 5221, "tcp"},
-{"xmpp-client", {NULL}, 5222, "tcp"},
-{"hpvirtgrp", {NULL}, 5223, "tcp"},
-{"hpvirtgrp", {NULL}, 5223, "udp"},
-{"hpvirtctrl", {NULL}, 5224, "tcp"},
-{"hpvirtctrl", {NULL}, 5224, "udp"},
-{"hp-server", {NULL}, 5225, "tcp"},
-{"hp-server", {NULL}, 5225, "udp"},
-{"hp-status", {NULL}, 5226, "tcp"},
-{"hp-status", {NULL}, 5226, "udp"},
-{"perfd", {NULL}, 5227, "tcp"},
-{"perfd", {NULL}, 5227, "udp"},
-{"hpvroom", {NULL}, 5228, "tcp"},
-{"csedaemon", {NULL}, 5232, "tcp"},
-{"enfs", {NULL}, 5233, "tcp"},
-{"eenet", {NULL}, 5234, "tcp"},
-{"eenet", {NULL}, 5234, "udp"},
-{"galaxy-network", {NULL}, 5235, "tcp"},
-{"galaxy-network", {NULL}, 5235, "udp"},
-{"padl2sim", {NULL}, 5236, "tcp"},
-{"padl2sim", {NULL}, 5236, "udp"},
-{"mnet-discovery", {NULL}, 5237, "tcp"},
-{"mnet-discovery", {NULL}, 5237, "udp"},
-{"downtools", {NULL}, 5245, "tcp"},
-{"downtools-disc", {NULL}, 5245, "udp"},
-{"capwap-control", {NULL}, 5246, "udp"},
-{"capwap-data", {NULL}, 5247, "udp"},
-{"caacws", {NULL}, 5248, "tcp"},
-{"caacws", {NULL}, 5248, "udp"},
-{"caaclang2", {NULL}, 5249, "tcp"},
-{"caaclang2", {NULL}, 5249, "udp"},
-{"soagateway", {NULL}, 5250, "tcp"},
-{"soagateway", {NULL}, 5250, "udp"},
-{"caevms", {NULL}, 5251, "tcp"},
-{"caevms", {NULL}, 5251, "udp"},
-{"movaz-ssc", {NULL}, 5252, "tcp"},
-{"movaz-ssc", {NULL}, 5252, "udp"},
-{"kpdp", {NULL}, 5253, "tcp"},
-{"3com-njack-1", {NULL}, 5264, "tcp"},
-{"3com-njack-1", {NULL}, 5264, "udp"},
-{"3com-njack-2", {NULL}, 5265, "tcp"},
-{"3com-njack-2", {NULL}, 5265, "udp"},
-{"xmpp-server", {NULL}, 5269, "tcp"},
-{"xmp", {NULL}, 5270, "tcp"},
-{"xmp", {NULL}, 5270, "udp"},
-{"cuelink", {NULL}, 5271, "tcp"},
-{"cuelink-disc", {NULL}, 5271, "udp"},
-{"pk", {NULL}, 5272, "tcp"},
-{"pk", {NULL}, 5272, "udp"},
-{"xmpp-bosh", {NULL}, 5280, "tcp"},
-{"undo-lm", {NULL}, 5281, "tcp"},
-{"transmit-port", {NULL}, 5282, "tcp"},
-{"transmit-port", {NULL}, 5282, "udp"},
-{"presence", {NULL}, 5298, "tcp"},
-{"presence", {NULL}, 5298, "udp"},
-{"nlg-data", {NULL}, 5299, "tcp"},
-{"nlg-data", {NULL}, 5299, "udp"},
-{"hacl-hb", {NULL}, 5300, "tcp"},
-{"hacl-hb", {NULL}, 5300, "udp"},
-{"hacl-gs", {NULL}, 5301, "tcp"},
-{"hacl-gs", {NULL}, 5301, "udp"},
-{"hacl-cfg", {NULL}, 5302, "tcp"},
-{"hacl-cfg", {NULL}, 5302, "udp"},
-{"hacl-probe", {NULL}, 5303, "tcp"},
-{"hacl-probe", {NULL}, 5303, "udp"},
-{"hacl-local", {NULL}, 5304, "tcp"},
-{"hacl-local", {NULL}, 5304, "udp"},
-{"hacl-test", {NULL}, 5305, "tcp"},
-{"hacl-test", {NULL}, 5305, "udp"},
-{"sun-mc-grp", {NULL}, 5306, "tcp"},
-{"sun-mc-grp", {NULL}, 5306, "udp"},
-{"sco-aip", {NULL}, 5307, "tcp"},
-{"sco-aip", {NULL}, 5307, "udp"},
-{"cfengine", {NULL}, 5308, "tcp"},
-{"cfengine", {NULL}, 5308, "udp"},
-{"jprinter", {NULL}, 5309, "tcp"},
-{"jprinter", {NULL}, 5309, "udp"},
-{"outlaws", {NULL}, 5310, "tcp"},
-{"outlaws", {NULL}, 5310, "udp"},
-{"permabit-cs", {NULL}, 5312, "tcp"},
-{"permabit-cs", {NULL}, 5312, "udp"},
-{"rrdp", {NULL}, 5313, "tcp"},
-{"rrdp", {NULL}, 5313, "udp"},
-{"opalis-rbt-ipc", {NULL}, 5314, "tcp"},
-{"opalis-rbt-ipc", {NULL}, 5314, "udp"},
-{"hacl-poll", {NULL}, 5315, "tcp"},
-{"hacl-poll", {NULL}, 5315, "udp"},
-{"hpdevms", {NULL}, 5316, "tcp"},
-{"hpdevms", {NULL}, 5316, "udp"},
-{"bsfserver-zn", {NULL}, 5320, "tcp"},
-{"bsfsvr-zn-ssl", {NULL}, 5321, "tcp"},
-{"kfserver", {NULL}, 5343, "tcp"},
-{"kfserver", {NULL}, 5343, "udp"},
-{"xkotodrcp", {NULL}, 5344, "tcp"},
-{"xkotodrcp", {NULL}, 5344, "udp"},
-{"stuns", {NULL}, 5349, "tcp"},
-{"stuns", {NULL}, 5349, "udp"},
-{"turns", {NULL}, 5349, "tcp"},
-{"turns", {NULL}, 5349, "udp"},
-{"stun-behaviors", {NULL}, 5349, "tcp"},
-{"stun-behaviors", {NULL}, 5349, "udp"},
-{"nat-pmp-status", {NULL}, 5350, "tcp"},
-{"nat-pmp-status", {NULL}, 5350, "udp"},
-{"nat-pmp", {NULL}, 5351, "tcp"},
-{"nat-pmp", {NULL}, 5351, "udp"},
-{"dns-llq", {NULL}, 5352, "tcp"},
-{"dns-llq", {NULL}, 5352, "udp"},
-{"mdns", {NULL}, 5353, "tcp"},
-{"mdns", {NULL}, 5353, "udp"},
-{"mdnsresponder", {NULL}, 5354, "tcp"},
-{"mdnsresponder", {NULL}, 5354, "udp"},
-{"llmnr", {NULL}, 5355, "tcp"},
-{"llmnr", {NULL}, 5355, "udp"},
-{"ms-smlbiz", {NULL}, 5356, "tcp"},
-{"ms-smlbiz", {NULL}, 5356, "udp"},
-{"wsdapi", {NULL}, 5357, "tcp"},
-{"wsdapi", {NULL}, 5357, "udp"},
-{"wsdapi-s", {NULL}, 5358, "tcp"},
-{"wsdapi-s", {NULL}, 5358, "udp"},
-{"ms-alerter", {NULL}, 5359, "tcp"},
-{"ms-alerter", {NULL}, 5359, "udp"},
-{"ms-sideshow", {NULL}, 5360, "tcp"},
-{"ms-sideshow", {NULL}, 5360, "udp"},
-{"ms-s-sideshow", {NULL}, 5361, "tcp"},
-{"ms-s-sideshow", {NULL}, 5361, "udp"},
-{"serverwsd2", {NULL}, 5362, "tcp"},
-{"serverwsd2", {NULL}, 5362, "udp"},
-{"net-projection", {NULL}, 5363, "tcp"},
-{"net-projection", {NULL}, 5363, "udp"},
-{"stresstester", {NULL}, 5397, "tcp"},
-{"stresstester", {NULL}, 5397, "udp"},
-{"elektron-admin", {NULL}, 5398, "tcp"},
-{"elektron-admin", {NULL}, 5398, "udp"},
-{"securitychase", {NULL}, 5399, "tcp"},
-{"securitychase", {NULL}, 5399, "udp"},
-{"excerpt", {NULL}, 5400, "tcp"},
-{"excerpt", {NULL}, 5400, "udp"},
-{"excerpts", {NULL}, 5401, "tcp"},
-{"excerpts", {NULL}, 5401, "udp"},
-{"mftp", {NULL}, 5402, "tcp"},
-{"mftp", {NULL}, 5402, "udp"},
-{"hpoms-ci-lstn", {NULL}, 5403, "tcp"},
-{"hpoms-ci-lstn", {NULL}, 5403, "udp"},
-{"hpoms-dps-lstn", {NULL}, 5404, "tcp"},
-{"hpoms-dps-lstn", {NULL}, 5404, "udp"},
-{"netsupport", {NULL}, 5405, "tcp"},
-{"netsupport", {NULL}, 5405, "udp"},
-{"systemics-sox", {NULL}, 5406, "tcp"},
-{"systemics-sox", {NULL}, 5406, "udp"},
-{"foresyte-clear", {NULL}, 5407, "tcp"},
-{"foresyte-clear", {NULL}, 5407, "udp"},
-{"foresyte-sec", {NULL}, 5408, "tcp"},
-{"foresyte-sec", {NULL}, 5408, "udp"},
-{"salient-dtasrv", {NULL}, 5409, "tcp"},
-{"salient-dtasrv", {NULL}, 5409, "udp"},
-{"salient-usrmgr", {NULL}, 5410, "tcp"},
-{"salient-usrmgr", {NULL}, 5410, "udp"},
-{"actnet", {NULL}, 5411, "tcp"},
-{"actnet", {NULL}, 5411, "udp"},
-{"continuus", {NULL}, 5412, "tcp"},
-{"continuus", {NULL}, 5412, "udp"},
-{"wwiotalk", {NULL}, 5413, "tcp"},
-{"wwiotalk", {NULL}, 5413, "udp"},
-{"statusd", {NULL}, 5414, "tcp"},
-{"statusd", {NULL}, 5414, "udp"},
-{"ns-server", {NULL}, 5415, "tcp"},
-{"ns-server", {NULL}, 5415, "udp"},
-{"sns-gateway", {NULL}, 5416, "tcp"},
-{"sns-gateway", {NULL}, 5416, "udp"},
-{"sns-agent", {NULL}, 5417, "tcp"},
-{"sns-agent", {NULL}, 5417, "udp"},
-{"mcntp", {NULL}, 5418, "tcp"},
-{"mcntp", {NULL}, 5418, "udp"},
-{"dj-ice", {NULL}, 5419, "tcp"},
-{"dj-ice", {NULL}, 5419, "udp"},
-{"cylink-c", {NULL}, 5420, "tcp"},
-{"cylink-c", {NULL}, 5420, "udp"},
-{"netsupport2", {NULL}, 5421, "tcp"},
-{"netsupport2", {NULL}, 5421, "udp"},
-{"salient-mux", {NULL}, 5422, "tcp"},
-{"salient-mux", {NULL}, 5422, "udp"},
-{"virtualuser", {NULL}, 5423, "tcp"},
-{"virtualuser", {NULL}, 5423, "udp"},
-{"beyond-remote", {NULL}, 5424, "tcp"},
-{"beyond-remote", {NULL}, 5424, "udp"},
-{"br-channel", {NULL}, 5425, "tcp"},
-{"br-channel", {NULL}, 5425, "udp"},
-{"devbasic", {NULL}, 5426, "tcp"},
-{"devbasic", {NULL}, 5426, "udp"},
-{"sco-peer-tta", {NULL}, 5427, "tcp"},
-{"sco-peer-tta", {NULL}, 5427, "udp"},
-{"telaconsole", {NULL}, 5428, "tcp"},
-{"telaconsole", {NULL}, 5428, "udp"},
-{"base", {NULL}, 5429, "tcp"},
-{"base", {NULL}, 5429, "udp"},
-{"radec-corp", {NULL}, 5430, "tcp"},
-{"radec-corp", {NULL}, 5430, "udp"},
-{"park-agent", {NULL}, 5431, "tcp"},
-{"park-agent", {NULL}, 5431, "udp"},
-{"postgresql", {NULL}, 5432, "tcp"},
-{"postgresql", {NULL}, 5432, "udp"},
-{"pyrrho", {NULL}, 5433, "tcp"},
-{"pyrrho", {NULL}, 5433, "udp"},
-{"sgi-arrayd", {NULL}, 5434, "tcp"},
-{"sgi-arrayd", {NULL}, 5434, "udp"},
-{"sceanics", {NULL}, 5435, "tcp"},
-{"sceanics", {NULL}, 5435, "udp"},
-{"pmip6-cntl", {NULL}, 5436, "udp"},
-{"pmip6-data", {NULL}, 5437, "udp"},
-{"spss", {NULL}, 5443, "tcp"},
-{"spss", {NULL}, 5443, "udp"},
-{"surebox", {NULL}, 5453, "tcp"},
-{"surebox", {NULL}, 5453, "udp"},
-{"apc-5454", {NULL}, 5454, "tcp"},
-{"apc-5454", {NULL}, 5454, "udp"},
-{"apc-5455", {NULL}, 5455, "tcp"},
-{"apc-5455", {NULL}, 5455, "udp"},
-{"apc-5456", {NULL}, 5456, "tcp"},
-{"apc-5456", {NULL}, 5456, "udp"},
-{"silkmeter", {NULL}, 5461, "tcp"},
-{"silkmeter", {NULL}, 5461, "udp"},
-{"ttl-publisher", {NULL}, 5462, "tcp"},
-{"ttl-publisher", {NULL}, 5462, "udp"},
-{"ttlpriceproxy", {NULL}, 5463, "tcp"},
-{"ttlpriceproxy", {NULL}, 5463, "udp"},
-{"quailnet", {NULL}, 5464, "tcp"},
-{"quailnet", {NULL}, 5464, "udp"},
-{"netops-broker", {NULL}, 5465, "tcp"},
-{"netops-broker", {NULL}, 5465, "udp"},
-{"fcp-addr-srvr1", {NULL}, 5500, "tcp"},
-{"fcp-addr-srvr1", {NULL}, 5500, "udp"},
-{"fcp-addr-srvr2", {NULL}, 5501, "tcp"},
-{"fcp-addr-srvr2", {NULL}, 5501, "udp"},
-{"fcp-srvr-inst1", {NULL}, 5502, "tcp"},
-{"fcp-srvr-inst1", {NULL}, 5502, "udp"},
-{"fcp-srvr-inst2", {NULL}, 5503, "tcp"},
-{"fcp-srvr-inst2", {NULL}, 5503, "udp"},
-{"fcp-cics-gw1", {NULL}, 5504, "tcp"},
-{"fcp-cics-gw1", {NULL}, 5504, "udp"},
-{"checkoutdb", {NULL}, 5505, "tcp"},
-{"checkoutdb", {NULL}, 5505, "udp"},
-{"amc", {NULL}, 5506, "tcp"},
-{"amc", {NULL}, 5506, "udp"},
-{"sgi-eventmond", {NULL}, 5553, "tcp"},
-{"sgi-eventmond", {NULL}, 5553, "udp"},
-{"sgi-esphttp", {NULL}, 5554, "tcp"},
-{"sgi-esphttp", {NULL}, 5554, "udp"},
-{"personal-agent", {NULL}, 5555, "tcp"},
-{"personal-agent", {NULL}, 5555, "udp"},
-{"freeciv", {NULL}, 5556, "tcp"},
-{"freeciv", {NULL}, 5556, "udp"},
-{"farenet", {NULL}, 5557, "tcp"},
-{"westec-connect", {NULL}, 5566, "tcp"},
-{"m-oap", {NULL}, 5567, "tcp"},
-{"m-oap", {NULL}, 5567, "udp"},
-{"sdt", {NULL}, 5568, "tcp"},
-{"sdt", {NULL}, 5568, "udp"},
-{"sdmmp", {NULL}, 5573, "tcp"},
-{"sdmmp", {NULL}, 5573, "udp"},
-{"lsi-bobcat", {NULL}, 5574, "tcp"},
-{"ora-oap", {NULL}, 5575, "tcp"},
-{"fdtracks", {NULL}, 5579, "tcp"},
-{"tmosms0", {NULL}, 5580, "tcp"},
-{"tmosms0", {NULL}, 5580, "udp"},
-{"tmosms1", {NULL}, 5581, "tcp"},
-{"tmosms1", {NULL}, 5581, "udp"},
-{"fac-restore", {NULL}, 5582, "tcp"},
-{"fac-restore", {NULL}, 5582, "udp"},
-{"tmo-icon-sync", {NULL}, 5583, "tcp"},
-{"tmo-icon-sync", {NULL}, 5583, "udp"},
-{"bis-web", {NULL}, 5584, "tcp"},
-{"bis-web", {NULL}, 5584, "udp"},
-{"bis-sync", {NULL}, 5585, "tcp"},
-{"bis-sync", {NULL}, 5585, "udp"},
-{"ininmessaging", {NULL}, 5597, "tcp"},
-{"ininmessaging", {NULL}, 5597, "udp"},
-{"mctfeed", {NULL}, 5598, "tcp"},
-{"mctfeed", {NULL}, 5598, "udp"},
-{"esinstall", {NULL}, 5599, "tcp"},
-{"esinstall", {NULL}, 5599, "udp"},
-{"esmmanager", {NULL}, 5600, "tcp"},
-{"esmmanager", {NULL}, 5600, "udp"},
-{"esmagent", {NULL}, 5601, "tcp"},
-{"esmagent", {NULL}, 5601, "udp"},
-{"a1-msc", {NULL}, 5602, "tcp"},
-{"a1-msc", {NULL}, 5602, "udp"},
-{"a1-bs", {NULL}, 5603, "tcp"},
-{"a1-bs", {NULL}, 5603, "udp"},
-{"a3-sdunode", {NULL}, 5604, "tcp"},
-{"a3-sdunode", {NULL}, 5604, "udp"},
-{"a4-sdunode", {NULL}, 5605, "tcp"},
-{"a4-sdunode", {NULL}, 5605, "udp"},
-{"ninaf", {NULL}, 5627, "tcp"},
-{"ninaf", {NULL}, 5627, "udp"},
-{"htrust", {NULL}, 5628, "tcp"},
-{"htrust", {NULL}, 5628, "udp"},
-{"symantec-sfdb", {NULL}, 5629, "tcp"},
-{"symantec-sfdb", {NULL}, 5629, "udp"},
-{"precise-comm", {NULL}, 5630, "tcp"},
-{"precise-comm", {NULL}, 5630, "udp"},
-{"pcanywheredata", {NULL}, 5631, "tcp"},
-{"pcanywheredata", {NULL}, 5631, "udp"},
-{"pcanywherestat", {NULL}, 5632, "tcp"},
-{"pcanywherestat", {NULL}, 5632, "udp"},
-{"beorl", {NULL}, 5633, "tcp"},
-{"beorl", {NULL}, 5633, "udp"},
-{"xprtld", {NULL}, 5634, "tcp"},
-{"xprtld", {NULL}, 5634, "udp"},
-{"sfmsso", {NULL}, 5635, "tcp"},
-{"sfm-db-server", {NULL}, 5636, "tcp"},
-{"cssc", {NULL}, 5637, "tcp"},
-{"amqps", {NULL}, 5671, "tcp"},
-{"amqps", {NULL}, 5671, "udp"},
-{"amqp", {NULL}, 5672, "tcp"},
-{"amqp", {NULL}, 5672, "udp"},
-{"amqp", {NULL}, 5672, "sctp"},
-{"jms", {NULL}, 5673, "tcp"},
-{"jms", {NULL}, 5673, "udp"},
-{"hyperscsi-port", {NULL}, 5674, "tcp"},
-{"hyperscsi-port", {NULL}, 5674, "udp"},
-{"v5ua", {NULL}, 5675, "tcp"},
-{"v5ua", {NULL}, 5675, "udp"},
-{"v5ua", {NULL}, 5675, "sctp"},
-{"raadmin", {NULL}, 5676, "tcp"},
-{"raadmin", {NULL}, 5676, "udp"},
-{"questdb2-lnchr", {NULL}, 5677, "tcp"},
-{"questdb2-lnchr", {NULL}, 5677, "udp"},
-{"rrac", {NULL}, 5678, "tcp"},
-{"rrac", {NULL}, 5678, "udp"},
-{"dccm", {NULL}, 5679, "tcp"},
-{"dccm", {NULL}, 5679, "udp"},
-{"auriga-router", {NULL}, 5680, "tcp"},
-{"auriga-router", {NULL}, 5680, "udp"},
-{"ncxcp", {NULL}, 5681, "tcp"},
-{"ncxcp", {NULL}, 5681, "udp"},
-{"brightcore", {NULL}, 5682, "udp"},
-{"ggz", {NULL}, 5688, "tcp"},
-{"ggz", {NULL}, 5688, "udp"},
-{"qmvideo", {NULL}, 5689, "tcp"},
-{"qmvideo", {NULL}, 5689, "udp"},
-{"proshareaudio", {NULL}, 5713, "tcp"},
-{"proshareaudio", {NULL}, 5713, "udp"},
-{"prosharevideo", {NULL}, 5714, "tcp"},
-{"prosharevideo", {NULL}, 5714, "udp"},
-{"prosharedata", {NULL}, 5715, "tcp"},
-{"prosharedata", {NULL}, 5715, "udp"},
-{"prosharerequest", {NULL}, 5716, "tcp"},
-{"prosharerequest", {NULL}, 5716, "udp"},
-{"prosharenotify", {NULL}, 5717, "tcp"},
-{"prosharenotify", {NULL}, 5717, "udp"},
-{"dpm", {NULL}, 5718, "tcp"},
-{"dpm", {NULL}, 5718, "udp"},
-{"dpm-agent", {NULL}, 5719, "tcp"},
-{"dpm-agent", {NULL}, 5719, "udp"},
-{"ms-licensing", {NULL}, 5720, "tcp"},
-{"ms-licensing", {NULL}, 5720, "udp"},
-{"dtpt", {NULL}, 5721, "tcp"},
-{"dtpt", {NULL}, 5721, "udp"},
-{"msdfsr", {NULL}, 5722, "tcp"},
-{"msdfsr", {NULL}, 5722, "udp"},
-{"omhs", {NULL}, 5723, "tcp"},
-{"omhs", {NULL}, 5723, "udp"},
-{"omsdk", {NULL}, 5724, "tcp"},
-{"omsdk", {NULL}, 5724, "udp"},
-{"ms-ilm", {NULL}, 5725, "tcp"},
-{"ms-ilm-sts", {NULL}, 5726, "tcp"},
-{"asgenf", {NULL}, 5727, "tcp"},
-{"io-dist-data", {NULL}, 5728, "tcp"},
-{"io-dist-group", {NULL}, 5728, "udp"},
-{"openmail", {NULL}, 5729, "tcp"},
-{"openmail", {NULL}, 5729, "udp"},
-{"unieng", {NULL}, 5730, "tcp"},
-{"unieng", {NULL}, 5730, "udp"},
-{"ida-discover1", {NULL}, 5741, "tcp"},
-{"ida-discover1", {NULL}, 5741, "udp"},
-{"ida-discover2", {NULL}, 5742, "tcp"},
-{"ida-discover2", {NULL}, 5742, "udp"},
-{"watchdoc-pod", {NULL}, 5743, "tcp"},
-{"watchdoc-pod", {NULL}, 5743, "udp"},
-{"watchdoc", {NULL}, 5744, "tcp"},
-{"watchdoc", {NULL}, 5744, "udp"},
-{"fcopy-server", {NULL}, 5745, "tcp"},
-{"fcopy-server", {NULL}, 5745, "udp"},
-{"fcopys-server", {NULL}, 5746, "tcp"},
-{"fcopys-server", {NULL}, 5746, "udp"},
-{"tunatic", {NULL}, 5747, "tcp"},
-{"tunatic", {NULL}, 5747, "udp"},
-{"tunalyzer", {NULL}, 5748, "tcp"},
-{"tunalyzer", {NULL}, 5748, "udp"},
-{"rscd", {NULL}, 5750, "tcp"},
-{"rscd", {NULL}, 5750, "udp"},
-{"openmailg", {NULL}, 5755, "tcp"},
-{"openmailg", {NULL}, 5755, "udp"},
-{"x500ms", {NULL}, 5757, "tcp"},
-{"x500ms", {NULL}, 5757, "udp"},
-{"openmailns", {NULL}, 5766, "tcp"},
-{"openmailns", {NULL}, 5766, "udp"},
-{"s-openmail", {NULL}, 5767, "tcp"},
-{"s-openmail", {NULL}, 5767, "udp"},
-{"openmailpxy", {NULL}, 5768, "tcp"},
-{"openmailpxy", {NULL}, 5768, "udp"},
-{"spramsca", {NULL}, 5769, "tcp"},
-{"spramsca", {NULL}, 5769, "udp"},
-{"spramsd", {NULL}, 5770, "tcp"},
-{"spramsd", {NULL}, 5770, "udp"},
-{"netagent", {NULL}, 5771, "tcp"},
-{"netagent", {NULL}, 5771, "udp"},
-{"dali-port", {NULL}, 5777, "tcp"},
-{"dali-port", {NULL}, 5777, "udp"},
-{"vts-rpc", {NULL}, 5780, "tcp"},
-{"3par-evts", {NULL}, 5781, "tcp"},
-{"3par-evts", {NULL}, 5781, "udp"},
-{"3par-mgmt", {NULL}, 5782, "tcp"},
-{"3par-mgmt", {NULL}, 5782, "udp"},
-{"3par-mgmt-ssl", {NULL}, 5783, "tcp"},
-{"3par-mgmt-ssl", {NULL}, 5783, "udp"},
-{"ibar", {NULL}, 5784, "udp"},
-{"3par-rcopy", {NULL}, 5785, "tcp"},
-{"3par-rcopy", {NULL}, 5785, "udp"},
-{"cisco-redu", {NULL}, 5786, "udp"},
-{"waascluster", {NULL}, 5787, "udp"},
-{"xtreamx", {NULL}, 5793, "tcp"},
-{"xtreamx", {NULL}, 5793, "udp"},
-{"spdp", {NULL}, 5794, "udp"},
-{"icmpd", {NULL}, 5813, "tcp"},
-{"icmpd", {NULL}, 5813, "udp"},
-{"spt-automation", {NULL}, 5814, "tcp"},
-{"spt-automation", {NULL}, 5814, "udp"},
-{"wherehoo", {NULL}, 5859, "tcp"},
-{"wherehoo", {NULL}, 5859, "udp"},
-{"ppsuitemsg", {NULL}, 5863, "tcp"},
-{"ppsuitemsg", {NULL}, 5863, "udp"},
-{"rfb", {NULL}, 5900, "tcp"},
-{"rfb", {NULL}, 5900, "udp"},
-{"cm", {NULL}, 5910, "tcp"},
-{"cm", {NULL}, 5910, "udp"},
-{"cpdlc", {NULL}, 5911, "tcp"},
-{"cpdlc", {NULL}, 5911, "udp"},
-{"fis", {NULL}, 5912, "tcp"},
-{"fis", {NULL}, 5912, "udp"},
-{"ads-c", {NULL}, 5913, "tcp"},
-{"ads-c", {NULL}, 5913, "udp"},
-{"indy", {NULL}, 5963, "tcp"},
-{"indy", {NULL}, 5963, "udp"},
-{"mppolicy-v5", {NULL}, 5968, "tcp"},
-{"mppolicy-v5", {NULL}, 5968, "udp"},
-{"mppolicy-mgr", {NULL}, 5969, "tcp"},
-{"mppolicy-mgr", {NULL}, 5969, "udp"},
-{"couchdb", {NULL}, 5984, "tcp"},
-{"couchdb", {NULL}, 5984, "udp"},
-{"wsman", {NULL}, 5985, "tcp"},
-{"wsman", {NULL}, 5985, "udp"},
-{"wsmans", {NULL}, 5986, "tcp"},
-{"wsmans", {NULL}, 5986, "udp"},
-{"wbem-rmi", {NULL}, 5987, "tcp"},
-{"wbem-rmi", {NULL}, 5987, "udp"},
-{"wbem-http", {NULL}, 5988, "tcp"},
-{"wbem-http", {NULL}, 5988, "udp"},
-{"wbem-https", {NULL}, 5989, "tcp"},
-{"wbem-https", {NULL}, 5989, "udp"},
-{"wbem-exp-https", {NULL}, 5990, "tcp"},
-{"wbem-exp-https", {NULL}, 5990, "udp"},
-{"nuxsl", {NULL}, 5991, "tcp"},
-{"nuxsl", {NULL}, 5991, "udp"},
-{"consul-insight", {NULL}, 5992, "tcp"},
-{"consul-insight", {NULL}, 5992, "udp"},
-{"cvsup", {NULL}, 5999, "tcp"},
-{"cvsup", {NULL}, 5999, "udp"},
-{"ndl-ahp-svc", {NULL}, 6064, "tcp"},
-{"ndl-ahp-svc", {NULL}, 6064, "udp"},
-{"winpharaoh", {NULL}, 6065, "tcp"},
-{"winpharaoh", {NULL}, 6065, "udp"},
-{"ewctsp", {NULL}, 6066, "tcp"},
-{"ewctsp", {NULL}, 6066, "udp"},
-{"gsmp", {NULL}, 6068, "tcp"},
-{"gsmp", {NULL}, 6068, "udp"},
-{"trip", {NULL}, 6069, "tcp"},
-{"trip", {NULL}, 6069, "udp"},
-{"messageasap", {NULL}, 6070, "tcp"},
-{"messageasap", {NULL}, 6070, "udp"},
-{"ssdtp", {NULL}, 6071, "tcp"},
-{"ssdtp", {NULL}, 6071, "udp"},
-{"diagnose-proc", {NULL}, 6072, "tcp"},
-{"diagnose-proc", {NULL}, 6072, "udp"},
-{"directplay8", {NULL}, 6073, "tcp"},
-{"directplay8", {NULL}, 6073, "udp"},
-{"max", {NULL}, 6074, "tcp"},
-{"max", {NULL}, 6074, "udp"},
-{"dpm-acm", {NULL}, 6075, "tcp"},
-{"miami-bcast", {NULL}, 6083, "udp"},
-{"p2p-sip", {NULL}, 6084, "tcp"},
-{"konspire2b", {NULL}, 6085, "tcp"},
-{"konspire2b", {NULL}, 6085, "udp"},
-{"pdtp", {NULL}, 6086, "tcp"},
-{"pdtp", {NULL}, 6086, "udp"},
-{"ldss", {NULL}, 6087, "tcp"},
-{"ldss", {NULL}, 6087, "udp"},
-{"raxa-mgmt", {NULL}, 6099, "tcp"},
-{"synchronet-db", {NULL}, 6100, "tcp"},
-{"synchronet-db", {NULL}, 6100, "udp"},
-{"synchronet-rtc", {NULL}, 6101, "tcp"},
-{"synchronet-rtc", {NULL}, 6101, "udp"},
-{"synchronet-upd", {NULL}, 6102, "tcp"},
-{"synchronet-upd", {NULL}, 6102, "udp"},
-{"rets", {NULL}, 6103, "tcp"},
-{"rets", {NULL}, 6103, "udp"},
-{"dbdb", {NULL}, 6104, "tcp"},
-{"dbdb", {NULL}, 6104, "udp"},
-{"primaserver", {NULL}, 6105, "tcp"},
-{"primaserver", {NULL}, 6105, "udp"},
-{"mpsserver", {NULL}, 6106, "tcp"},
-{"mpsserver", {NULL}, 6106, "udp"},
-{"etc-control", {NULL}, 6107, "tcp"},
-{"etc-control", {NULL}, 6107, "udp"},
-{"sercomm-scadmin", {NULL}, 6108, "tcp"},
-{"sercomm-scadmin", {NULL}, 6108, "udp"},
-{"globecast-id", {NULL}, 6109, "tcp"},
-{"globecast-id", {NULL}, 6109, "udp"},
-{"softcm", {NULL}, 6110, "tcp"},
-{"softcm", {NULL}, 6110, "udp"},
-{"spc", {NULL}, 6111, "tcp"},
-{"spc", {NULL}, 6111, "udp"},
-{"dtspcd", {NULL}, 6112, "tcp"},
-{"dtspcd", {NULL}, 6112, "udp"},
-{"dayliteserver", {NULL}, 6113, "tcp"},
-{"wrspice", {NULL}, 6114, "tcp"},
-{"xic", {NULL}, 6115, "tcp"},
-{"xtlserv", {NULL}, 6116, "tcp"},
-{"daylitetouch", {NULL}, 6117, "tcp"},
-{"spdy", {NULL}, 6121, "tcp"},
-{"bex-webadmin", {NULL}, 6122, "tcp"},
-{"bex-webadmin", {NULL}, 6122, "udp"},
-{"backup-express", {NULL}, 6123, "tcp"},
-{"backup-express", {NULL}, 6123, "udp"},
-{"pnbs", {NULL}, 6124, "tcp"},
-{"pnbs", {NULL}, 6124, "udp"},
-{"nbt-wol", {NULL}, 6133, "tcp"},
-{"nbt-wol", {NULL}, 6133, "udp"},
-{"pulsonixnls", {NULL}, 6140, "tcp"},
-{"pulsonixnls", {NULL}, 6140, "udp"},
-{"meta-corp", {NULL}, 6141, "tcp"},
-{"meta-corp", {NULL}, 6141, "udp"},
-{"aspentec-lm", {NULL}, 6142, "tcp"},
-{"aspentec-lm", {NULL}, 6142, "udp"},
-{"watershed-lm", {NULL}, 6143, "tcp"},
-{"watershed-lm", {NULL}, 6143, "udp"},
-{"statsci1-lm", {NULL}, 6144, "tcp"},
-{"statsci1-lm", {NULL}, 6144, "udp"},
-{"statsci2-lm", {NULL}, 6145, "tcp"},
-{"statsci2-lm", {NULL}, 6145, "udp"},
-{"lonewolf-lm", {NULL}, 6146, "tcp"},
-{"lonewolf-lm", {NULL}, 6146, "udp"},
-{"montage-lm", {NULL}, 6147, "tcp"},
-{"montage-lm", {NULL}, 6147, "udp"},
-{"ricardo-lm", {NULL}, 6148, "tcp"},
-{"ricardo-lm", {NULL}, 6148, "udp"},
-{"tal-pod", {NULL}, 6149, "tcp"},
-{"tal-pod", {NULL}, 6149, "udp"},
-{"efb-aci", {NULL}, 6159, "tcp"},
-{"patrol-ism", {NULL}, 6161, "tcp"},
-{"patrol-ism", {NULL}, 6161, "udp"},
-{"patrol-coll", {NULL}, 6162, "tcp"},
-{"patrol-coll", {NULL}, 6162, "udp"},
-{"pscribe", {NULL}, 6163, "tcp"},
-{"pscribe", {NULL}, 6163, "udp"},
-{"lm-x", {NULL}, 6200, "tcp"},
-{"lm-x", {NULL}, 6200, "udp"},
-{"radmind", {NULL}, 6222, "tcp"},
-{"radmind", {NULL}, 6222, "udp"},
-{"jeol-nsdtp-1", {NULL}, 6241, "tcp"},
-{"jeol-nsddp-1", {NULL}, 6241, "udp"},
-{"jeol-nsdtp-2", {NULL}, 6242, "tcp"},
-{"jeol-nsddp-2", {NULL}, 6242, "udp"},
-{"jeol-nsdtp-3", {NULL}, 6243, "tcp"},
-{"jeol-nsddp-3", {NULL}, 6243, "udp"},
-{"jeol-nsdtp-4", {NULL}, 6244, "tcp"},
-{"jeol-nsddp-4", {NULL}, 6244, "udp"},
-{"tl1-raw-ssl", {NULL}, 6251, "tcp"},
-{"tl1-raw-ssl", {NULL}, 6251, "udp"},
-{"tl1-ssh", {NULL}, 6252, "tcp"},
-{"tl1-ssh", {NULL}, 6252, "udp"},
-{"crip", {NULL}, 6253, "tcp"},
-{"crip", {NULL}, 6253, "udp"},
-{"gld", {NULL}, 6267, "tcp"},
-{"grid", {NULL}, 6268, "tcp"},
-{"grid", {NULL}, 6268, "udp"},
-{"grid-alt", {NULL}, 6269, "tcp"},
-{"grid-alt", {NULL}, 6269, "udp"},
-{"bmc-grx", {NULL}, 6300, "tcp"},
-{"bmc-grx", {NULL}, 6300, "udp"},
-{"bmc_ctd_ldap", {NULL}, 6301, "tcp"},
-{"bmc_ctd_ldap", {NULL}, 6301, "udp"},
-{"ufmp", {NULL}, 6306, "tcp"},
-{"ufmp", {NULL}, 6306, "udp"},
-{"scup", {NULL}, 6315, "tcp"},
-{"scup-disc", {NULL}, 6315, "udp"},
-{"abb-escp", {NULL}, 6316, "tcp"},
-{"abb-escp", {NULL}, 6316, "udp"},
-{"repsvc", {NULL}, 6320, "tcp"},
-{"repsvc", {NULL}, 6320, "udp"},
-{"emp-server1", {NULL}, 6321, "tcp"},
-{"emp-server1", {NULL}, 6321, "udp"},
-{"emp-server2", {NULL}, 6322, "tcp"},
-{"emp-server2", {NULL}, 6322, "udp"},
-{"sflow", {NULL}, 6343, "tcp"},
-{"sflow", {NULL}, 6343, "udp"},
-{"gnutella-svc", {NULL}, 6346, "tcp"},
-{"gnutella-svc", {NULL}, 6346, "udp"},
-{"gnutella-rtr", {NULL}, 6347, "tcp"},
-{"gnutella-rtr", {NULL}, 6347, "udp"},
-{"adap", {NULL}, 6350, "tcp"},
-{"adap", {NULL}, 6350, "udp"},
-{"pmcs", {NULL}, 6355, "tcp"},
-{"pmcs", {NULL}, 6355, "udp"},
-{"metaedit-mu", {NULL}, 6360, "tcp"},
-{"metaedit-mu", {NULL}, 6360, "udp"},
-{"metaedit-se", {NULL}, 6370, "tcp"},
-{"metaedit-se", {NULL}, 6370, "udp"},
-{"metatude-mds", {NULL}, 6382, "tcp"},
-{"metatude-mds", {NULL}, 6382, "udp"},
-{"clariion-evr01", {NULL}, 6389, "tcp"},
-{"clariion-evr01", {NULL}, 6389, "udp"},
-{"metaedit-ws", {NULL}, 6390, "tcp"},
-{"metaedit-ws", {NULL}, 6390, "udp"},
-{"faxcomservice", {NULL}, 6417, "tcp"},
-{"faxcomservice", {NULL}, 6417, "udp"},
-{"syserverremote", {NULL}, 6418, "tcp"},
-{"svdrp", {NULL}, 6419, "tcp"},
-{"nim-vdrshell", {NULL}, 6420, "tcp"},
-{"nim-vdrshell", {NULL}, 6420, "udp"},
-{"nim-wan", {NULL}, 6421, "tcp"},
-{"nim-wan", {NULL}, 6421, "udp"},
-{"pgbouncer", {NULL}, 6432, "tcp"},
-{"sun-sr-https", {NULL}, 6443, "tcp"},
-{"sun-sr-https", {NULL}, 6443, "udp"},
-{"sge_qmaster", {NULL}, 6444, "tcp"},
-{"sge_qmaster", {NULL}, 6444, "udp"},
-{"sge_execd", {NULL}, 6445, "tcp"},
-{"sge_execd", {NULL}, 6445, "udp"},
-{"mysql-proxy", {NULL}, 6446, "tcp"},
-{"mysql-proxy", {NULL}, 6446, "udp"},
-{"skip-cert-recv", {NULL}, 6455, "tcp"},
-{"skip-cert-send", {NULL}, 6456, "udp"},
-{"lvision-lm", {NULL}, 6471, "tcp"},
-{"lvision-lm", {NULL}, 6471, "udp"},
-{"sun-sr-http", {NULL}, 6480, "tcp"},
-{"sun-sr-http", {NULL}, 6480, "udp"},
-{"servicetags", {NULL}, 6481, "tcp"},
-{"servicetags", {NULL}, 6481, "udp"},
-{"ldoms-mgmt", {NULL}, 6482, "tcp"},
-{"ldoms-mgmt", {NULL}, 6482, "udp"},
-{"SunVTS-RMI", {NULL}, 6483, "tcp"},
-{"SunVTS-RMI", {NULL}, 6483, "udp"},
-{"sun-sr-jms", {NULL}, 6484, "tcp"},
-{"sun-sr-jms", {NULL}, 6484, "udp"},
-{"sun-sr-iiop", {NULL}, 6485, "tcp"},
-{"sun-sr-iiop", {NULL}, 6485, "udp"},
-{"sun-sr-iiops", {NULL}, 6486, "tcp"},
-{"sun-sr-iiops", {NULL}, 6486, "udp"},
-{"sun-sr-iiop-aut", {NULL}, 6487, "tcp"},
-{"sun-sr-iiop-aut", {NULL}, 6487, "udp"},
-{"sun-sr-jmx", {NULL}, 6488, "tcp"},
-{"sun-sr-jmx", {NULL}, 6488, "udp"},
-{"sun-sr-admin", {NULL}, 6489, "tcp"},
-{"sun-sr-admin", {NULL}, 6489, "udp"},
-{"boks", {NULL}, 6500, "tcp"},
-{"boks", {NULL}, 6500, "udp"},
-{"boks_servc", {NULL}, 6501, "tcp"},
-{"boks_servc", {NULL}, 6501, "udp"},
-{"boks_servm", {NULL}, 6502, "tcp"},
-{"boks_servm", {NULL}, 6502, "udp"},
-{"boks_clntd", {NULL}, 6503, "tcp"},
-{"boks_clntd", {NULL}, 6503, "udp"},
-{"badm_priv", {NULL}, 6505, "tcp"},
-{"badm_priv", {NULL}, 6505, "udp"},
-{"badm_pub", {NULL}, 6506, "tcp"},
-{"badm_pub", {NULL}, 6506, "udp"},
-{"bdir_priv", {NULL}, 6507, "tcp"},
-{"bdir_priv", {NULL}, 6507, "udp"},
-{"bdir_pub", {NULL}, 6508, "tcp"},
-{"bdir_pub", {NULL}, 6508, "udp"},
-{"mgcs-mfp-port", {NULL}, 6509, "tcp"},
-{"mgcs-mfp-port", {NULL}, 6509, "udp"},
-{"mcer-port", {NULL}, 6510, "tcp"},
-{"mcer-port", {NULL}, 6510, "udp"},
-{"netconf-tls", {NULL}, 6513, "tcp"},
-{"syslog-tls", {NULL}, 6514, "tcp"},
-{"syslog-tls", {NULL}, 6514, "udp"},
-{"syslog-tls", {NULL}, 6514, "dccp"},
-{"elipse-rec", {NULL}, 6515, "tcp"},
-{"elipse-rec", {NULL}, 6515, "udp"},
-{"lds-distrib", {NULL}, 6543, "tcp"},
-{"lds-distrib", {NULL}, 6543, "udp"},
-{"lds-dump", {NULL}, 6544, "tcp"},
-{"lds-dump", {NULL}, 6544, "udp"},
-{"apc-6547", {NULL}, 6547, "tcp"},
-{"apc-6547", {NULL}, 6547, "udp"},
-{"apc-6548", {NULL}, 6548, "tcp"},
-{"apc-6548", {NULL}, 6548, "udp"},
-{"apc-6549", {NULL}, 6549, "tcp"},
-{"apc-6549", {NULL}, 6549, "udp"},
-{"fg-sysupdate", {NULL}, 6550, "tcp"},
-{"fg-sysupdate", {NULL}, 6550, "udp"},
-{"sum", {NULL}, 6551, "tcp"},
-{"sum", {NULL}, 6551, "udp"},
-{"xdsxdm", {NULL}, 6558, "tcp"},
-{"xdsxdm", {NULL}, 6558, "udp"},
-{"sane-port", {NULL}, 6566, "tcp"},
-{"sane-port", {NULL}, 6566, "udp"},
-{"esp", {NULL}, 6567, "tcp"},
-{"esp", {NULL}, 6567, "udp"},
-{"canit_store", {NULL}, 6568, "tcp"},
-{"rp-reputation", {NULL}, 6568, "udp"},
-{"affiliate", {NULL}, 6579, "tcp"},
-{"affiliate", {NULL}, 6579, "udp"},
-{"parsec-master", {NULL}, 6580, "tcp"},
-{"parsec-master", {NULL}, 6580, "udp"},
-{"parsec-peer", {NULL}, 6581, "tcp"},
-{"parsec-peer", {NULL}, 6581, "udp"},
-{"parsec-game", {NULL}, 6582, "tcp"},
-{"parsec-game", {NULL}, 6582, "udp"},
-{"joaJewelSuite", {NULL}, 6583, "tcp"},
-{"joaJewelSuite", {NULL}, 6583, "udp"},
-{"mshvlm", {NULL}, 6600, "tcp"},
-{"mstmg-sstp", {NULL}, 6601, "tcp"},
-{"wsscomfrmwk", {NULL}, 6602, "tcp"},
-{"odette-ftps", {NULL}, 6619, "tcp"},
-{"odette-ftps", {NULL}, 6619, "udp"},
-{"kftp-data", {NULL}, 6620, "tcp"},
-{"kftp-data", {NULL}, 6620, "udp"},
-{"kftp", {NULL}, 6621, "tcp"},
-{"kftp", {NULL}, 6621, "udp"},
-{"mcftp", {NULL}, 6622, "tcp"},
-{"mcftp", {NULL}, 6622, "udp"},
-{"ktelnet", {NULL}, 6623, "tcp"},
-{"ktelnet", {NULL}, 6623, "udp"},
-{"datascaler-db", {NULL}, 6624, "tcp"},
-{"datascaler-ctl", {NULL}, 6625, "tcp"},
-{"wago-service", {NULL}, 6626, "tcp"},
-{"wago-service", {NULL}, 6626, "udp"},
-{"nexgen", {NULL}, 6627, "tcp"},
-{"nexgen", {NULL}, 6627, "udp"},
-{"afesc-mc", {NULL}, 6628, "tcp"},
-{"afesc-mc", {NULL}, 6628, "udp"},
-{"mxodbc-connect", {NULL}, 6632, "tcp"},
-{"pcs-sf-ui-man", {NULL}, 6655, "tcp"},
-{"emgmsg", {NULL}, 6656, "tcp"},
-{"palcom-disc", {NULL}, 6657, "udp"},
-{"vocaltec-gold", {NULL}, 6670, "tcp"},
-{"vocaltec-gold", {NULL}, 6670, "udp"},
-{"p4p-portal", {NULL}, 6671, "tcp"},
-{"p4p-portal", {NULL}, 6671, "udp"},
-{"vision_server", {NULL}, 6672, "tcp"},
-{"vision_server", {NULL}, 6672, "udp"},
-{"vision_elmd", {NULL}, 6673, "tcp"},
-{"vision_elmd", {NULL}, 6673, "udp"},
-{"vfbp", {NULL}, 6678, "tcp"},
-{"vfbp-disc", {NULL}, 6678, "udp"},
-{"osaut", {NULL}, 6679, "tcp"},
-{"osaut", {NULL}, 6679, "udp"},
-{"clever-ctrace", {NULL}, 6687, "tcp"},
-{"clever-tcpip", {NULL}, 6688, "tcp"},
-{"tsa", {NULL}, 6689, "tcp"},
-{"tsa", {NULL}, 6689, "udp"},
-{"babel", {NULL}, 6697, "udp"},
-{"kti-icad-srvr", {NULL}, 6701, "tcp"},
-{"kti-icad-srvr", {NULL}, 6701, "udp"},
-{"e-design-net", {NULL}, 6702, "tcp"},
-{"e-design-net", {NULL}, 6702, "udp"},
-{"e-design-web", {NULL}, 6703, "tcp"},
-{"e-design-web", {NULL}, 6703, "udp"},
-{"frc-hp", {NULL}, 6704, "sctp"},
-{"frc-mp", {NULL}, 6705, "sctp"},
-{"frc-lp", {NULL}, 6706, "sctp"},
-{"ibprotocol", {NULL}, 6714, "tcp"},
-{"ibprotocol", {NULL}, 6714, "udp"},
-{"fibotrader-com", {NULL}, 6715, "tcp"},
-{"fibotrader-com", {NULL}, 6715, "udp"},
-{"bmc-perf-agent", {NULL}, 6767, "tcp"},
-{"bmc-perf-agent", {NULL}, 6767, "udp"},
-{"bmc-perf-mgrd", {NULL}, 6768, "tcp"},
-{"bmc-perf-mgrd", {NULL}, 6768, "udp"},
-{"adi-gxp-srvprt", {NULL}, 6769, "tcp"},
-{"adi-gxp-srvprt", {NULL}, 6769, "udp"},
-{"plysrv-http", {NULL}, 6770, "tcp"},
-{"plysrv-http", {NULL}, 6770, "udp"},
-{"plysrv-https", {NULL}, 6771, "tcp"},
-{"plysrv-https", {NULL}, 6771, "udp"},
-{"dgpf-exchg", {NULL}, 6785, "tcp"},
-{"dgpf-exchg", {NULL}, 6785, "udp"},
-{"smc-jmx", {NULL}, 6786, "tcp"},
-{"smc-jmx", {NULL}, 6786, "udp"},
-{"smc-admin", {NULL}, 6787, "tcp"},
-{"smc-admin", {NULL}, 6787, "udp"},
-{"smc-http", {NULL}, 6788, "tcp"},
-{"smc-http", {NULL}, 6788, "udp"},
-{"smc-https", {NULL}, 6789, "tcp"},
-{"smc-https", {NULL}, 6789, "udp"},
-{"hnmp", {NULL}, 6790, "tcp"},
-{"hnmp", {NULL}, 6790, "udp"},
-{"hnm", {NULL}, 6791, "tcp"},
-{"hnm", {NULL}, 6791, "udp"},
-{"acnet", {NULL}, 6801, "tcp"},
-{"acnet", {NULL}, 6801, "udp"},
-{"pentbox-sim", {NULL}, 6817, "tcp"},
-{"ambit-lm", {NULL}, 6831, "tcp"},
-{"ambit-lm", {NULL}, 6831, "udp"},
-{"netmo-default", {NULL}, 6841, "tcp"},
-{"netmo-default", {NULL}, 6841, "udp"},
-{"netmo-http", {NULL}, 6842, "tcp"},
-{"netmo-http", {NULL}, 6842, "udp"},
-{"iccrushmore", {NULL}, 6850, "tcp"},
-{"iccrushmore", {NULL}, 6850, "udp"},
-{"acctopus-cc", {NULL}, 6868, "tcp"},
-{"acctopus-st", {NULL}, 6868, "udp"},
-{"muse", {NULL}, 6888, "tcp"},
-{"muse", {NULL}, 6888, "udp"},
-{"jetstream", {NULL}, 6901, "tcp"},
-{"xsmsvc", {NULL}, 6936, "tcp"},
-{"xsmsvc", {NULL}, 6936, "udp"},
-{"bioserver", {NULL}, 6946, "tcp"},
-{"bioserver", {NULL}, 6946, "udp"},
-{"otlp", {NULL}, 6951, "tcp"},
-{"otlp", {NULL}, 6951, "udp"},
-{"jmact3", {NULL}, 6961, "tcp"},
-{"jmact3", {NULL}, 6961, "udp"},
-{"jmevt2", {NULL}, 6962, "tcp"},
-{"jmevt2", {NULL}, 6962, "udp"},
-{"swismgr1", {NULL}, 6963, "tcp"},
-{"swismgr1", {NULL}, 6963, "udp"},
-{"swismgr2", {NULL}, 6964, "tcp"},
-{"swismgr2", {NULL}, 6964, "udp"},
-{"swistrap", {NULL}, 6965, "tcp"},
-{"swistrap", {NULL}, 6965, "udp"},
-{"swispol", {NULL}, 6966, "tcp"},
-{"swispol", {NULL}, 6966, "udp"},
-{"acmsoda", {NULL}, 6969, "tcp"},
-{"acmsoda", {NULL}, 6969, "udp"},
-{"MobilitySrv", {NULL}, 6997, "tcp"},
-{"MobilitySrv", {NULL}, 6997, "udp"},
-{"iatp-highpri", {NULL}, 6998, "tcp"},
-{"iatp-highpri", {NULL}, 6998, "udp"},
-{"iatp-normalpri", {NULL}, 6999, "tcp"},
-{"iatp-normalpri", {NULL}, 6999, "udp"},
-{"afs3-fileserver", {NULL}, 7000, "tcp"},
-{"afs3-fileserver", {NULL}, 7000, "udp"},
-{"afs3-callback", {NULL}, 7001, "tcp"},
-{"afs3-callback", {NULL}, 7001, "udp"},
-{"afs3-prserver", {NULL}, 7002, "tcp"},
-{"afs3-prserver", {NULL}, 7002, "udp"},
-{"afs3-vlserver", {NULL}, 7003, "tcp"},
-{"afs3-vlserver", {NULL}, 7003, "udp"},
-{"afs3-kaserver", {NULL}, 7004, "tcp"},
-{"afs3-kaserver", {NULL}, 7004, "udp"},
-{"afs3-volser", {NULL}, 7005, "tcp"},
-{"afs3-volser", {NULL}, 7005, "udp"},
-{"afs3-errors", {NULL}, 7006, "tcp"},
-{"afs3-errors", {NULL}, 7006, "udp"},
-{"afs3-bos", {NULL}, 7007, "tcp"},
-{"afs3-bos", {NULL}, 7007, "udp"},
-{"afs3-update", {NULL}, 7008, "tcp"},
-{"afs3-update", {NULL}, 7008, "udp"},
-{"afs3-rmtsys", {NULL}, 7009, "tcp"},
-{"afs3-rmtsys", {NULL}, 7009, "udp"},
-{"ups-onlinet", {NULL}, 7010, "tcp"},
-{"ups-onlinet", {NULL}, 7010, "udp"},
-{"talon-disc", {NULL}, 7011, "tcp"},
-{"talon-disc", {NULL}, 7011, "udp"},
-{"talon-engine", {NULL}, 7012, "tcp"},
-{"talon-engine", {NULL}, 7012, "udp"},
-{"microtalon-dis", {NULL}, 7013, "tcp"},
-{"microtalon-dis", {NULL}, 7013, "udp"},
-{"microtalon-com", {NULL}, 7014, "tcp"},
-{"microtalon-com", {NULL}, 7014, "udp"},
-{"talon-webserver", {NULL}, 7015, "tcp"},
-{"talon-webserver", {NULL}, 7015, "udp"},
-{"dpserve", {NULL}, 7020, "tcp"},
-{"dpserve", {NULL}, 7020, "udp"},
-{"dpserveadmin", {NULL}, 7021, "tcp"},
-{"dpserveadmin", {NULL}, 7021, "udp"},
-{"ctdp", {NULL}, 7022, "tcp"},
-{"ctdp", {NULL}, 7022, "udp"},
-{"ct2nmcs", {NULL}, 7023, "tcp"},
-{"ct2nmcs", {NULL}, 7023, "udp"},
-{"vmsvc", {NULL}, 7024, "tcp"},
-{"vmsvc", {NULL}, 7024, "udp"},
-{"vmsvc-2", {NULL}, 7025, "tcp"},
-{"vmsvc-2", {NULL}, 7025, "udp"},
-{"op-probe", {NULL}, 7030, "tcp"},
-{"op-probe", {NULL}, 7030, "udp"},
-{"arcp", {NULL}, 7070, "tcp"},
-{"arcp", {NULL}, 7070, "udp"},
-{"iwg1", {NULL}, 7071, "tcp"},
-{"iwg1", {NULL}, 7071, "udp"},
-{"empowerid", {NULL}, 7080, "tcp"},
-{"empowerid", {NULL}, 7080, "udp"},
-{"lazy-ptop", {NULL}, 7099, "tcp"},
-{"lazy-ptop", {NULL}, 7099, "udp"},
-{"font-service", {NULL}, 7100, "tcp"},
-{"font-service", {NULL}, 7100, "udp"},
-{"elcn", {NULL}, 7101, "tcp"},
-{"elcn", {NULL}, 7101, "udp"},
-{"aes-x170", {NULL}, 7107, "udp"},
-{"virprot-lm", {NULL}, 7121, "tcp"},
-{"virprot-lm", {NULL}, 7121, "udp"},
-{"scenidm", {NULL}, 7128, "tcp"},
-{"scenidm", {NULL}, 7128, "udp"},
-{"scenccs", {NULL}, 7129, "tcp"},
-{"scenccs", {NULL}, 7129, "udp"},
-{"cabsm-comm", {NULL}, 7161, "tcp"},
-{"cabsm-comm", {NULL}, 7161, "udp"},
-{"caistoragemgr", {NULL}, 7162, "tcp"},
-{"caistoragemgr", {NULL}, 7162, "udp"},
-{"cacsambroker", {NULL}, 7163, "tcp"},
-{"cacsambroker", {NULL}, 7163, "udp"},
-{"fsr", {NULL}, 7164, "tcp"},
-{"fsr", {NULL}, 7164, "udp"},
-{"doc-server", {NULL}, 7165, "tcp"},
-{"doc-server", {NULL}, 7165, "udp"},
-{"aruba-server", {NULL}, 7166, "tcp"},
-{"aruba-server", {NULL}, 7166, "udp"},
-{"casrmagent", {NULL}, 7167, "tcp"},
-{"cnckadserver", {NULL}, 7168, "tcp"},
-{"ccag-pib", {NULL}, 7169, "tcp"},
-{"ccag-pib", {NULL}, 7169, "udp"},
-{"nsrp", {NULL}, 7170, "tcp"},
-{"nsrp", {NULL}, 7170, "udp"},
-{"drm-production", {NULL}, 7171, "tcp"},
-{"drm-production", {NULL}, 7171, "udp"},
-{"zsecure", {NULL}, 7173, "tcp"},
-{"clutild", {NULL}, 7174, "tcp"},
-{"clutild", {NULL}, 7174, "udp"},
-{"fodms", {NULL}, 7200, "tcp"},
-{"fodms", {NULL}, 7200, "udp"},
-{"dlip", {NULL}, 7201, "tcp"},
-{"dlip", {NULL}, 7201, "udp"},
-{"ramp", {NULL}, 7227, "tcp"},
-{"ramp", {NULL}, 7227, "udp"},
-{"citrixupp", {NULL}, 7228, "tcp"},
-{"citrixuppg", {NULL}, 7229, "tcp"},
-{"pads", {NULL}, 7237, "tcp"},
-{"cnap", {NULL}, 7262, "tcp"},
-{"cnap", {NULL}, 7262, "udp"},
-{"watchme-7272", {NULL}, 7272, "tcp"},
-{"watchme-7272", {NULL}, 7272, "udp"},
-{"oma-rlp", {NULL}, 7273, "tcp"},
-{"oma-rlp", {NULL}, 7273, "udp"},
-{"oma-rlp-s", {NULL}, 7274, "tcp"},
-{"oma-rlp-s", {NULL}, 7274, "udp"},
-{"oma-ulp", {NULL}, 7275, "tcp"},
-{"oma-ulp", {NULL}, 7275, "udp"},
-{"oma-ilp", {NULL}, 7276, "tcp"},
-{"oma-ilp", {NULL}, 7276, "udp"},
-{"oma-ilp-s", {NULL}, 7277, "tcp"},
-{"oma-ilp-s", {NULL}, 7277, "udp"},
-{"oma-dcdocbs", {NULL}, 7278, "tcp"},
-{"oma-dcdocbs", {NULL}, 7278, "udp"},
-{"ctxlic", {NULL}, 7279, "tcp"},
-{"ctxlic", {NULL}, 7279, "udp"},
-{"itactionserver1", {NULL}, 7280, "tcp"},
-{"itactionserver1", {NULL}, 7280, "udp"},
-{"itactionserver2", {NULL}, 7281, "tcp"},
-{"itactionserver2", {NULL}, 7281, "udp"},
-{"mzca-action", {NULL}, 7282, "tcp"},
-{"mzca-alert", {NULL}, 7282, "udp"},
-{"lcm-server", {NULL}, 7365, "tcp"},
-{"lcm-server", {NULL}, 7365, "udp"},
-{"mindfilesys", {NULL}, 7391, "tcp"},
-{"mindfilesys", {NULL}, 7391, "udp"},
-{"mrssrendezvous", {NULL}, 7392, "tcp"},
-{"mrssrendezvous", {NULL}, 7392, "udp"},
-{"nfoldman", {NULL}, 7393, "tcp"},
-{"nfoldman", {NULL}, 7393, "udp"},
-{"fse", {NULL}, 7394, "tcp"},
-{"fse", {NULL}, 7394, "udp"},
-{"winqedit", {NULL}, 7395, "tcp"},
-{"winqedit", {NULL}, 7395, "udp"},
-{"hexarc", {NULL}, 7397, "tcp"},
-{"hexarc", {NULL}, 7397, "udp"},
-{"rtps-discovery", {NULL}, 7400, "tcp"},
-{"rtps-discovery", {NULL}, 7400, "udp"},
-{"rtps-dd-ut", {NULL}, 7401, "tcp"},
-{"rtps-dd-ut", {NULL}, 7401, "udp"},
-{"rtps-dd-mt", {NULL}, 7402, "tcp"},
-{"rtps-dd-mt", {NULL}, 7402, "udp"},
-{"ionixnetmon", {NULL}, 7410, "tcp"},
-{"ionixnetmon", {NULL}, 7410, "udp"},
-{"mtportmon", {NULL}, 7421, "tcp"},
-{"mtportmon", {NULL}, 7421, "udp"},
-{"pmdmgr", {NULL}, 7426, "tcp"},
-{"pmdmgr", {NULL}, 7426, "udp"},
-{"oveadmgr", {NULL}, 7427, "tcp"},
-{"oveadmgr", {NULL}, 7427, "udp"},
-{"ovladmgr", {NULL}, 7428, "tcp"},
-{"ovladmgr", {NULL}, 7428, "udp"},
-{"opi-sock", {NULL}, 7429, "tcp"},
-{"opi-sock", {NULL}, 7429, "udp"},
-{"xmpv7", {NULL}, 7430, "tcp"},
-{"xmpv7", {NULL}, 7430, "udp"},
-{"pmd", {NULL}, 7431, "tcp"},
-{"pmd", {NULL}, 7431, "udp"},
-{"faximum", {NULL}, 7437, "tcp"},
-{"faximum", {NULL}, 7437, "udp"},
-{"oracleas-https", {NULL}, 7443, "tcp"},
-{"oracleas-https", {NULL}, 7443, "udp"},
-{"rise", {NULL}, 7473, "tcp"},
-{"rise", {NULL}, 7473, "udp"},
-{"telops-lmd", {NULL}, 7491, "tcp"},
-{"telops-lmd", {NULL}, 7491, "udp"},
-{"silhouette", {NULL}, 7500, "tcp"},
-{"silhouette", {NULL}, 7500, "udp"},
-{"ovbus", {NULL}, 7501, "tcp"},
-{"ovbus", {NULL}, 7501, "udp"},
-{"acplt", {NULL}, 7509, "tcp"},
-{"ovhpas", {NULL}, 7510, "tcp"},
-{"ovhpas", {NULL}, 7510, "udp"},
-{"pafec-lm", {NULL}, 7511, "tcp"},
-{"pafec-lm", {NULL}, 7511, "udp"},
-{"saratoga", {NULL}, 7542, "tcp"},
-{"saratoga", {NULL}, 7542, "udp"},
-{"atul", {NULL}, 7543, "tcp"},
-{"atul", {NULL}, 7543, "udp"},
-{"nta-ds", {NULL}, 7544, "tcp"},
-{"nta-ds", {NULL}, 7544, "udp"},
-{"nta-us", {NULL}, 7545, "tcp"},
-{"nta-us", {NULL}, 7545, "udp"},
-{"cfs", {NULL}, 7546, "tcp"},
-{"cfs", {NULL}, 7546, "udp"},
-{"cwmp", {NULL}, 7547, "tcp"},
-{"cwmp", {NULL}, 7547, "udp"},
-{"tidp", {NULL}, 7548, "tcp"},
-{"tidp", {NULL}, 7548, "udp"},
-{"nls-tl", {NULL}, 7549, "tcp"},
-{"nls-tl", {NULL}, 7549, "udp"},
-{"sncp", {NULL}, 7560, "tcp"},
-{"sncp", {NULL}, 7560, "udp"},
-{"cfw", {NULL}, 7563, "tcp"},
-{"vsi-omega", {NULL}, 7566, "tcp"},
-{"vsi-omega", {NULL}, 7566, "udp"},
-{"dell-eql-asm", {NULL}, 7569, "tcp"},
-{"aries-kfinder", {NULL}, 7570, "tcp"},
-{"aries-kfinder", {NULL}, 7570, "udp"},
-{"sun-lm", {NULL}, 7588, "tcp"},
-{"sun-lm", {NULL}, 7588, "udp"},
-{"indi", {NULL}, 7624, "tcp"},
-{"indi", {NULL}, 7624, "udp"},
-{"simco", {NULL}, 7626, "tcp"},
-{"simco", {NULL}, 7626, "sctp"},
-{"soap-http", {NULL}, 7627, "tcp"},
-{"soap-http", {NULL}, 7627, "udp"},
-{"zen-pawn", {NULL}, 7628, "tcp"},
-{"zen-pawn", {NULL}, 7628, "udp"},
-{"xdas", {NULL}, 7629, "tcp"},
-{"xdas", {NULL}, 7629, "udp"},
-{"hawk", {NULL}, 7630, "tcp"},
-{"tesla-sys-msg", {NULL}, 7631, "tcp"},
-{"pmdfmgt", {NULL}, 7633, "tcp"},
-{"pmdfmgt", {NULL}, 7633, "udp"},
-{"cuseeme", {NULL}, 7648, "tcp"},
-{"cuseeme", {NULL}, 7648, "udp"},
-{"imqstomp", {NULL}, 7672, "tcp"},
-{"imqstomps", {NULL}, 7673, "tcp"},
-{"imqtunnels", {NULL}, 7674, "tcp"},
-{"imqtunnels", {NULL}, 7674, "udp"},
-{"imqtunnel", {NULL}, 7675, "tcp"},
-{"imqtunnel", {NULL}, 7675, "udp"},
-{"imqbrokerd", {NULL}, 7676, "tcp"},
-{"imqbrokerd", {NULL}, 7676, "udp"},
-{"sun-user-https", {NULL}, 7677, "tcp"},
-{"sun-user-https", {NULL}, 7677, "udp"},
-{"pando-pub", {NULL}, 7680, "tcp"},
-{"pando-pub", {NULL}, 7680, "udp"},
-{"collaber", {NULL}, 7689, "tcp"},
-{"collaber", {NULL}, 7689, "udp"},
-{"klio", {NULL}, 7697, "tcp"},
-{"klio", {NULL}, 7697, "udp"},
-{"em7-secom", {NULL}, 7700, "tcp"},
-{"sync-em7", {NULL}, 7707, "tcp"},
-{"sync-em7", {NULL}, 7707, "udp"},
-{"scinet", {NULL}, 7708, "tcp"},
-{"scinet", {NULL}, 7708, "udp"},
-{"medimageportal", {NULL}, 7720, "tcp"},
-{"medimageportal", {NULL}, 7720, "udp"},
-{"nsdeepfreezectl", {NULL}, 7724, "tcp"},
-{"nsdeepfreezectl", {NULL}, 7724, "udp"},
-{"nitrogen", {NULL}, 7725, "tcp"},
-{"nitrogen", {NULL}, 7725, "udp"},
-{"freezexservice", {NULL}, 7726, "tcp"},
-{"freezexservice", {NULL}, 7726, "udp"},
-{"trident-data", {NULL}, 7727, "tcp"},
-{"trident-data", {NULL}, 7727, "udp"},
-{"smip", {NULL}, 7734, "tcp"},
-{"smip", {NULL}, 7734, "udp"},
-{"aiagent", {NULL}, 7738, "tcp"},
-{"aiagent", {NULL}, 7738, "udp"},
-{"scriptview", {NULL}, 7741, "tcp"},
-{"scriptview", {NULL}, 7741, "udp"},
-{"msss", {NULL}, 7742, "tcp"},
-{"sstp-1", {NULL}, 7743, "tcp"},
-{"sstp-1", {NULL}, 7743, "udp"},
-{"raqmon-pdu", {NULL}, 7744, "tcp"},
-{"raqmon-pdu", {NULL}, 7744, "udp"},
-{"prgp", {NULL}, 7747, "tcp"},
-{"prgp", {NULL}, 7747, "udp"},
-{"cbt", {NULL}, 7777, "tcp"},
-{"cbt", {NULL}, 7777, "udp"},
-{"interwise", {NULL}, 7778, "tcp"},
-{"interwise", {NULL}, 7778, "udp"},
-{"vstat", {NULL}, 7779, "tcp"},
-{"vstat", {NULL}, 7779, "udp"},
-{"accu-lmgr", {NULL}, 7781, "tcp"},
-{"accu-lmgr", {NULL}, 7781, "udp"},
-{"minivend", {NULL}, 7786, "tcp"},
-{"minivend", {NULL}, 7786, "udp"},
-{"popup-reminders", {NULL}, 7787, "tcp"},
-{"popup-reminders", {NULL}, 7787, "udp"},
-{"office-tools", {NULL}, 7789, "tcp"},
-{"office-tools", {NULL}, 7789, "udp"},
-{"q3ade", {NULL}, 7794, "tcp"},
-{"q3ade", {NULL}, 7794, "udp"},
-{"pnet-conn", {NULL}, 7797, "tcp"},
-{"pnet-conn", {NULL}, 7797, "udp"},
-{"pnet-enc", {NULL}, 7798, "tcp"},
-{"pnet-enc", {NULL}, 7798, "udp"},
-{"altbsdp", {NULL}, 7799, "tcp"},
-{"altbsdp", {NULL}, 7799, "udp"},
-{"asr", {NULL}, 7800, "tcp"},
-{"asr", {NULL}, 7800, "udp"},
-{"ssp-client", {NULL}, 7801, "tcp"},
-{"ssp-client", {NULL}, 7801, "udp"},
-{"rbt-wanopt", {NULL}, 7810, "tcp"},
-{"rbt-wanopt", {NULL}, 7810, "udp"},
-{"apc-7845", {NULL}, 7845, "tcp"},
-{"apc-7845", {NULL}, 7845, "udp"},
-{"apc-7846", {NULL}, 7846, "tcp"},
-{"apc-7846", {NULL}, 7846, "udp"},
-{"mobileanalyzer", {NULL}, 7869, "tcp"},
-{"rbt-smc", {NULL}, 7870, "tcp"},
-{"pss", {NULL}, 7880, "tcp"},
-{"pss", {NULL}, 7880, "udp"},
-{"ubroker", {NULL}, 7887, "tcp"},
-{"ubroker", {NULL}, 7887, "udp"},
-{"mevent", {NULL}, 7900, "tcp"},
-{"mevent", {NULL}, 7900, "udp"},
-{"tnos-sp", {NULL}, 7901, "tcp"},
-{"tnos-sp", {NULL}, 7901, "udp"},
-{"tnos-dp", {NULL}, 7902, "tcp"},
-{"tnos-dp", {NULL}, 7902, "udp"},
-{"tnos-dps", {NULL}, 7903, "tcp"},
-{"tnos-dps", {NULL}, 7903, "udp"},
-{"qo-secure", {NULL}, 7913, "tcp"},
-{"qo-secure", {NULL}, 7913, "udp"},
-{"t2-drm", {NULL}, 7932, "tcp"},
-{"t2-drm", {NULL}, 7932, "udp"},
-{"t2-brm", {NULL}, 7933, "tcp"},
-{"t2-brm", {NULL}, 7933, "udp"},
-{"supercell", {NULL}, 7967, "tcp"},
-{"supercell", {NULL}, 7967, "udp"},
-{"micromuse-ncps", {NULL}, 7979, "tcp"},
-{"micromuse-ncps", {NULL}, 7979, "udp"},
-{"quest-vista", {NULL}, 7980, "tcp"},
-{"quest-vista", {NULL}, 7980, "udp"},
-{"sossd-collect", {NULL}, 7981, "tcp"},
-{"sossd-agent", {NULL}, 7982, "tcp"},
-{"sossd-disc", {NULL}, 7982, "udp"},
-{"pushns", {NULL}, 7997, "tcp"},
-{"usicontentpush", {NULL}, 7998, "udp"},
-{"irdmi2", {NULL}, 7999, "tcp"},
-{"irdmi2", {NULL}, 7999, "udp"},
-{"irdmi", {NULL}, 8000, "tcp"},
-{"irdmi", {NULL}, 8000, "udp"},
-{"vcom-tunnel", {NULL}, 8001, "tcp"},
-{"vcom-tunnel", {NULL}, 8001, "udp"},
-{"teradataordbms", {NULL}, 8002, "tcp"},
-{"teradataordbms", {NULL}, 8002, "udp"},
-{"mcreport", {NULL}, 8003, "tcp"},
-{"mcreport", {NULL}, 8003, "udp"},
-{"mxi", {NULL}, 8005, "tcp"},
-{"mxi", {NULL}, 8005, "udp"},
-{"http-alt", {NULL}, 8008, "tcp"},
-{"http-alt", {NULL}, 8008, "udp"},
-{"qbdb", {NULL}, 8019, "tcp"},
-{"qbdb", {NULL}, 8019, "udp"},
-{"intu-ec-svcdisc", {NULL}, 8020, "tcp"},
-{"intu-ec-svcdisc", {NULL}, 8020, "udp"},
-{"intu-ec-client", {NULL}, 8021, "tcp"},
-{"intu-ec-client", {NULL}, 8021, "udp"},
-{"oa-system", {NULL}, 8022, "tcp"},
-{"oa-system", {NULL}, 8022, "udp"},
-{"ca-audit-da", {NULL}, 8025, "tcp"},
-{"ca-audit-da", {NULL}, 8025, "udp"},
-{"ca-audit-ds", {NULL}, 8026, "tcp"},
-{"ca-audit-ds", {NULL}, 8026, "udp"},
-{"pro-ed", {NULL}, 8032, "tcp"},
-{"pro-ed", {NULL}, 8032, "udp"},
-{"mindprint", {NULL}, 8033, "tcp"},
-{"mindprint", {NULL}, 8033, "udp"},
-{"vantronix-mgmt", {NULL}, 8034, "tcp"},
-{"vantronix-mgmt", {NULL}, 8034, "udp"},
-{"ampify", {NULL}, 8040, "tcp"},
-{"ampify", {NULL}, 8040, "udp"},
-{"fs-agent", {NULL}, 8042, "tcp"},
-{"fs-server", {NULL}, 8043, "tcp"},
-{"fs-mgmt", {NULL}, 8044, "tcp"},
-{"senomix01", {NULL}, 8052, "tcp"},
-{"senomix01", {NULL}, 8052, "udp"},
-{"senomix02", {NULL}, 8053, "tcp"},
-{"senomix02", {NULL}, 8053, "udp"},
-{"senomix03", {NULL}, 8054, "tcp"},
-{"senomix03", {NULL}, 8054, "udp"},
-{"senomix04", {NULL}, 8055, "tcp"},
-{"senomix04", {NULL}, 8055, "udp"},
-{"senomix05", {NULL}, 8056, "tcp"},
-{"senomix05", {NULL}, 8056, "udp"},
-{"senomix06", {NULL}, 8057, "tcp"},
-{"senomix06", {NULL}, 8057, "udp"},
-{"senomix07", {NULL}, 8058, "tcp"},
-{"senomix07", {NULL}, 8058, "udp"},
-{"senomix08", {NULL}, 8059, "tcp"},
-{"senomix08", {NULL}, 8059, "udp"},
-{"gadugadu", {NULL}, 8074, "tcp"},
-{"gadugadu", {NULL}, 8074, "udp"},
-{"http-alt", {NULL}, 8080, "tcp"},
-{"http-alt", {NULL}, 8080, "udp"},
-{"sunproxyadmin", {NULL}, 8081, "tcp"},
-{"sunproxyadmin", {NULL}, 8081, "udp"},
-{"us-cli", {NULL}, 8082, "tcp"},
-{"us-cli", {NULL}, 8082, "udp"},
-{"us-srv", {NULL}, 8083, "tcp"},
-{"us-srv", {NULL}, 8083, "udp"},
-{"d-s-n", {NULL}, 8086, "tcp"},
-{"d-s-n", {NULL}, 8086, "udp"},
-{"simplifymedia", {NULL}, 8087, "tcp"},
-{"simplifymedia", {NULL}, 8087, "udp"},
-{"radan-http", {NULL}, 8088, "tcp"},
-{"radan-http", {NULL}, 8088, "udp"},
-{"jamlink", {NULL}, 8091, "tcp"},
-{"sac", {NULL}, 8097, "tcp"},
-{"sac", {NULL}, 8097, "udp"},
-{"xprint-server", {NULL}, 8100, "tcp"},
-{"xprint-server", {NULL}, 8100, "udp"},
-{"ldoms-migr", {NULL}, 8101, "tcp"},
-{"mtl8000-matrix", {NULL}, 8115, "tcp"},
-{"mtl8000-matrix", {NULL}, 8115, "udp"},
-{"cp-cluster", {NULL}, 8116, "tcp"},
-{"cp-cluster", {NULL}, 8116, "udp"},
-{"privoxy", {NULL}, 8118, "tcp"},
-{"privoxy", {NULL}, 8118, "udp"},
-{"apollo-data", {NULL}, 8121, "tcp"},
-{"apollo-data", {NULL}, 8121, "udp"},
-{"apollo-admin", {NULL}, 8122, "tcp"},
-{"apollo-admin", {NULL}, 8122, "udp"},
-{"paycash-online", {NULL}, 8128, "tcp"},
-{"paycash-online", {NULL}, 8128, "udp"},
-{"paycash-wbp", {NULL}, 8129, "tcp"},
-{"paycash-wbp", {NULL}, 8129, "udp"},
-{"indigo-vrmi", {NULL}, 8130, "tcp"},
-{"indigo-vrmi", {NULL}, 8130, "udp"},
-{"indigo-vbcp", {NULL}, 8131, "tcp"},
-{"indigo-vbcp", {NULL}, 8131, "udp"},
-{"dbabble", {NULL}, 8132, "tcp"},
-{"dbabble", {NULL}, 8132, "udp"},
-{"isdd", {NULL}, 8148, "tcp"},
-{"isdd", {NULL}, 8148, "udp"},
-{"patrol", {NULL}, 8160, "tcp"},
-{"patrol", {NULL}, 8160, "udp"},
-{"patrol-snmp", {NULL}, 8161, "tcp"},
-{"patrol-snmp", {NULL}, 8161, "udp"},
-{"vmware-fdm", {NULL}, 8182, "tcp"},
-{"vmware-fdm", {NULL}, 8182, "udp"},
-{"proremote", {NULL}, 8183, "tcp"},
-{"itach", {NULL}, 8184, "tcp"},
-{"itach", {NULL}, 8184, "udp"},
-{"spytechphone", {NULL}, 8192, "tcp"},
-{"spytechphone", {NULL}, 8192, "udp"},
-{"blp1", {NULL}, 8194, "tcp"},
-{"blp1", {NULL}, 8194, "udp"},
-{"blp2", {NULL}, 8195, "tcp"},
-{"blp2", {NULL}, 8195, "udp"},
-{"vvr-data", {NULL}, 8199, "tcp"},
-{"vvr-data", {NULL}, 8199, "udp"},
-{"trivnet1", {NULL}, 8200, "tcp"},
-{"trivnet1", {NULL}, 8200, "udp"},
-{"trivnet2", {NULL}, 8201, "tcp"},
-{"trivnet2", {NULL}, 8201, "udp"},
-{"lm-perfworks", {NULL}, 8204, "tcp"},
-{"lm-perfworks", {NULL}, 8204, "udp"},
-{"lm-instmgr", {NULL}, 8205, "tcp"},
-{"lm-instmgr", {NULL}, 8205, "udp"},
-{"lm-dta", {NULL}, 8206, "tcp"},
-{"lm-dta", {NULL}, 8206, "udp"},
-{"lm-sserver", {NULL}, 8207, "tcp"},
-{"lm-sserver", {NULL}, 8207, "udp"},
-{"lm-webwatcher", {NULL}, 8208, "tcp"},
-{"lm-webwatcher", {NULL}, 8208, "udp"},
-{"rexecj", {NULL}, 8230, "tcp"},
-{"rexecj", {NULL}, 8230, "udp"},
-{"synapse-nhttps", {NULL}, 8243, "tcp"},
-{"synapse-nhttps", {NULL}, 8243, "udp"},
-{"pando-sec", {NULL}, 8276, "tcp"},
-{"pando-sec", {NULL}, 8276, "udp"},
-{"synapse-nhttp", {NULL}, 8280, "tcp"},
-{"synapse-nhttp", {NULL}, 8280, "udp"},
-{"blp3", {NULL}, 8292, "tcp"},
-{"blp3", {NULL}, 8292, "udp"},
-{"hiperscan-id", {NULL}, 8293, "tcp"},
-{"blp4", {NULL}, 8294, "tcp"},
-{"blp4", {NULL}, 8294, "udp"},
-{"tmi", {NULL}, 8300, "tcp"},
-{"tmi", {NULL}, 8300, "udp"},
-{"amberon", {NULL}, 8301, "tcp"},
-{"amberon", {NULL}, 8301, "udp"},
-{"tnp-discover", {NULL}, 8320, "tcp"},
-{"tnp-discover", {NULL}, 8320, "udp"},
-{"tnp", {NULL}, 8321, "tcp"},
-{"tnp", {NULL}, 8321, "udp"},
-{"server-find", {NULL}, 8351, "tcp"},
-{"server-find", {NULL}, 8351, "udp"},
-{"cruise-enum", {NULL}, 8376, "tcp"},
-{"cruise-enum", {NULL}, 8376, "udp"},
-{"cruise-swroute", {NULL}, 8377, "tcp"},
-{"cruise-swroute", {NULL}, 8377, "udp"},
-{"cruise-config", {NULL}, 8378, "tcp"},
-{"cruise-config", {NULL}, 8378, "udp"},
-{"cruise-diags", {NULL}, 8379, "tcp"},
-{"cruise-diags", {NULL}, 8379, "udp"},
-{"cruise-update", {NULL}, 8380, "tcp"},
-{"cruise-update", {NULL}, 8380, "udp"},
-{"m2mservices", {NULL}, 8383, "tcp"},
-{"m2mservices", {NULL}, 8383, "udp"},
-{"cvd", {NULL}, 8400, "tcp"},
-{"cvd", {NULL}, 8400, "udp"},
-{"sabarsd", {NULL}, 8401, "tcp"},
-{"sabarsd", {NULL}, 8401, "udp"},
-{"abarsd", {NULL}, 8402, "tcp"},
-{"abarsd", {NULL}, 8402, "udp"},
-{"admind", {NULL}, 8403, "tcp"},
-{"admind", {NULL}, 8403, "udp"},
-{"svcloud", {NULL}, 8404, "tcp"},
-{"svbackup", {NULL}, 8405, "tcp"},
-{"espeech", {NULL}, 8416, "tcp"},
-{"espeech", {NULL}, 8416, "udp"},
-{"espeech-rtp", {NULL}, 8417, "tcp"},
-{"espeech-rtp", {NULL}, 8417, "udp"},
-{"cybro-a-bus", {NULL}, 8442, "tcp"},
-{"cybro-a-bus", {NULL}, 8442, "udp"},
-{"pcsync-https", {NULL}, 8443, "tcp"},
-{"pcsync-https", {NULL}, 8443, "udp"},
-{"pcsync-http", {NULL}, 8444, "tcp"},
-{"pcsync-http", {NULL}, 8444, "udp"},
-{"npmp", {NULL}, 8450, "tcp"},
-{"npmp", {NULL}, 8450, "udp"},
-{"cisco-avp", {NULL}, 8470, "tcp"},
-{"pim-port", {NULL}, 8471, "tcp"},
-{"pim-port", {NULL}, 8471, "sctp"},
-{"otv", {NULL}, 8472, "tcp"},
-{"otv", {NULL}, 8472, "udp"},
-{"vp2p", {NULL}, 8473, "tcp"},
-{"vp2p", {NULL}, 8473, "udp"},
-{"noteshare", {NULL}, 8474, "tcp"},
-{"noteshare", {NULL}, 8474, "udp"},
-{"fmtp", {NULL}, 8500, "tcp"},
-{"fmtp", {NULL}, 8500, "udp"},
-{"rtsp-alt", {NULL}, 8554, "tcp"},
-{"rtsp-alt", {NULL}, 8554, "udp"},
-{"d-fence", {NULL}, 8555, "tcp"},
-{"d-fence", {NULL}, 8555, "udp"},
-{"oap-admin", {NULL}, 8567, "tcp"},
-{"oap-admin", {NULL}, 8567, "udp"},
-{"asterix", {NULL}, 8600, "tcp"},
-{"asterix", {NULL}, 8600, "udp"},
-{"canon-mfnp", {NULL}, 8610, "tcp"},
-{"canon-mfnp", {NULL}, 8610, "udp"},
-{"canon-bjnp1", {NULL}, 8611, "tcp"},
-{"canon-bjnp1", {NULL}, 8611, "udp"},
-{"canon-bjnp2", {NULL}, 8612, "tcp"},
-{"canon-bjnp2", {NULL}, 8612, "udp"},
-{"canon-bjnp3", {NULL}, 8613, "tcp"},
-{"canon-bjnp3", {NULL}, 8613, "udp"},
-{"canon-bjnp4", {NULL}, 8614, "tcp"},
-{"canon-bjnp4", {NULL}, 8614, "udp"},
-{"sun-as-jmxrmi", {NULL}, 8686, "tcp"},
-{"sun-as-jmxrmi", {NULL}, 8686, "udp"},
-{"vnyx", {NULL}, 8699, "tcp"},
-{"vnyx", {NULL}, 8699, "udp"},
-{"dtp-net", {NULL}, 8732, "udp"},
-{"ibus", {NULL}, 8733, "tcp"},
-{"ibus", {NULL}, 8733, "udp"},
-{"mc-appserver", {NULL}, 8763, "tcp"},
-{"mc-appserver", {NULL}, 8763, "udp"},
-{"openqueue", {NULL}, 8764, "tcp"},
-{"openqueue", {NULL}, 8764, "udp"},
-{"ultraseek-http", {NULL}, 8765, "tcp"},
-{"ultraseek-http", {NULL}, 8765, "udp"},
-{"dpap", {NULL}, 8770, "tcp"},
-{"dpap", {NULL}, 8770, "udp"},
-{"msgclnt", {NULL}, 8786, "tcp"},
-{"msgclnt", {NULL}, 8786, "udp"},
-{"msgsrvr", {NULL}, 8787, "tcp"},
-{"msgsrvr", {NULL}, 8787, "udp"},
-{"sunwebadmin", {NULL}, 8800, "tcp"},
-{"sunwebadmin", {NULL}, 8800, "udp"},
-{"truecm", {NULL}, 8804, "tcp"},
-{"truecm", {NULL}, 8804, "udp"},
-{"dxspider", {NULL}, 8873, "tcp"},
-{"dxspider", {NULL}, 8873, "udp"},
-{"cddbp-alt", {NULL}, 8880, "tcp"},
-{"cddbp-alt", {NULL}, 8880, "udp"},
-{"secure-mqtt", {NULL}, 8883, "tcp"},
-{"secure-mqtt", {NULL}, 8883, "udp"},
-{"ddi-tcp-1", {NULL}, 8888, "tcp"},
-{"ddi-udp-1", {NULL}, 8888, "udp"},
-{"ddi-tcp-2", {NULL}, 8889, "tcp"},
-{"ddi-udp-2", {NULL}, 8889, "udp"},
-{"ddi-tcp-3", {NULL}, 8890, "tcp"},
-{"ddi-udp-3", {NULL}, 8890, "udp"},
-{"ddi-tcp-4", {NULL}, 8891, "tcp"},
-{"ddi-udp-4", {NULL}, 8891, "udp"},
-{"ddi-tcp-5", {NULL}, 8892, "tcp"},
-{"ddi-udp-5", {NULL}, 8892, "udp"},
-{"ddi-tcp-6", {NULL}, 8893, "tcp"},
-{"ddi-udp-6", {NULL}, 8893, "udp"},
-{"ddi-tcp-7", {NULL}, 8894, "tcp"},
-{"ddi-udp-7", {NULL}, 8894, "udp"},
-{"ospf-lite", {NULL}, 8899, "tcp"},
-{"ospf-lite", {NULL}, 8899, "udp"},
-{"jmb-cds1", {NULL}, 8900, "tcp"},
-{"jmb-cds1", {NULL}, 8900, "udp"},
-{"jmb-cds2", {NULL}, 8901, "tcp"},
-{"jmb-cds2", {NULL}, 8901, "udp"},
-{"manyone-http", {NULL}, 8910, "tcp"},
-{"manyone-http", {NULL}, 8910, "udp"},
-{"manyone-xml", {NULL}, 8911, "tcp"},
-{"manyone-xml", {NULL}, 8911, "udp"},
-{"wcbackup", {NULL}, 8912, "tcp"},
-{"wcbackup", {NULL}, 8912, "udp"},
-{"dragonfly", {NULL}, 8913, "tcp"},
-{"dragonfly", {NULL}, 8913, "udp"},
-{"twds", {NULL}, 8937, "tcp"},
-{"cumulus-admin", {NULL}, 8954, "tcp"},
-{"cumulus-admin", {NULL}, 8954, "udp"},
-{"sunwebadmins", {NULL}, 8989, "tcp"},
-{"sunwebadmins", {NULL}, 8989, "udp"},
-{"http-wmap", {NULL}, 8990, "tcp"},
-{"http-wmap", {NULL}, 8990, "udp"},
-{"https-wmap", {NULL}, 8991, "tcp"},
-{"https-wmap", {NULL}, 8991, "udp"},
-{"bctp", {NULL}, 8999, "tcp"},
-{"bctp", {NULL}, 8999, "udp"},
-{"cslistener", {NULL}, 9000, "tcp"},
-{"cslistener", {NULL}, 9000, "udp"},
-{"etlservicemgr", {NULL}, 9001, "tcp"},
-{"etlservicemgr", {NULL}, 9001, "udp"},
-{"dynamid", {NULL}, 9002, "tcp"},
-{"dynamid", {NULL}, 9002, "udp"},
-{"ogs-client", {NULL}, 9007, "udp"},
-{"ogs-server", {NULL}, 9008, "tcp"},
-{"pichat", {NULL}, 9009, "tcp"},
-{"pichat", {NULL}, 9009, "udp"},
-{"sdr", {NULL}, 9010, "tcp"},
-{"tambora", {NULL}, 9020, "tcp"},
-{"tambora", {NULL}, 9020, "udp"},
-{"panagolin-ident", {NULL}, 9021, "tcp"},
-{"panagolin-ident", {NULL}, 9021, "udp"},
-{"paragent", {NULL}, 9022, "tcp"},
-{"paragent", {NULL}, 9022, "udp"},
-{"swa-1", {NULL}, 9023, "tcp"},
-{"swa-1", {NULL}, 9023, "udp"},
-{"swa-2", {NULL}, 9024, "tcp"},
-{"swa-2", {NULL}, 9024, "udp"},
-{"swa-3", {NULL}, 9025, "tcp"},
-{"swa-3", {NULL}, 9025, "udp"},
-{"swa-4", {NULL}, 9026, "tcp"},
-{"swa-4", {NULL}, 9026, "udp"},
-{"versiera", {NULL}, 9050, "tcp"},
-{"fio-cmgmt", {NULL}, 9051, "tcp"},
-{"glrpc", {NULL}, 9080, "tcp"},
-{"glrpc", {NULL}, 9080, "udp"},
-{"lcs-ap", {NULL}, 9082, "sctp"},
-{"emc-pp-mgmtsvc", {NULL}, 9083, "tcp"},
-{"aurora", {NULL}, 9084, "tcp"},
-{"aurora", {NULL}, 9084, "udp"},
-{"aurora", {NULL}, 9084, "sctp"},
-{"ibm-rsyscon", {NULL}, 9085, "tcp"},
-{"ibm-rsyscon", {NULL}, 9085, "udp"},
-{"net2display", {NULL}, 9086, "tcp"},
-{"net2display", {NULL}, 9086, "udp"},
-{"classic", {NULL}, 9087, "tcp"},
-{"classic", {NULL}, 9087, "udp"},
-{"sqlexec", {NULL}, 9088, "tcp"},
-{"sqlexec", {NULL}, 9088, "udp"},
-{"sqlexec-ssl", {NULL}, 9089, "tcp"},
-{"sqlexec-ssl", {NULL}, 9089, "udp"},
-{"websm", {NULL}, 9090, "tcp"},
-{"websm", {NULL}, 9090, "udp"},
-{"xmltec-xmlmail", {NULL}, 9091, "tcp"},
-{"xmltec-xmlmail", {NULL}, 9091, "udp"},
-{"XmlIpcRegSvc", {NULL}, 9092, "tcp"},
-{"XmlIpcRegSvc", {NULL}, 9092, "udp"},
-{"hp-pdl-datastr", {NULL}, 9100, "tcp"},
-{"hp-pdl-datastr", {NULL}, 9100, "udp"},
-{"pdl-datastream", {NULL}, 9100, "tcp"},
-{"pdl-datastream", {NULL}, 9100, "udp"},
-{"bacula-dir", {NULL}, 9101, "tcp"},
-{"bacula-dir", {NULL}, 9101, "udp"},
-{"bacula-fd", {NULL}, 9102, "tcp"},
-{"bacula-fd", {NULL}, 9102, "udp"},
-{"bacula-sd", {NULL}, 9103, "tcp"},
-{"bacula-sd", {NULL}, 9103, "udp"},
-{"peerwire", {NULL}, 9104, "tcp"},
-{"peerwire", {NULL}, 9104, "udp"},
-{"xadmin", {NULL}, 9105, "tcp"},
-{"xadmin", {NULL}, 9105, "udp"},
-{"astergate", {NULL}, 9106, "tcp"},
-{"astergate-disc", {NULL}, 9106, "udp"},
-{"astergatefax", {NULL}, 9107, "tcp"},
-{"mxit", {NULL}, 9119, "tcp"},
-{"mxit", {NULL}, 9119, "udp"},
-{"dddp", {NULL}, 9131, "tcp"},
-{"dddp", {NULL}, 9131, "udp"},
-{"apani1", {NULL}, 9160, "tcp"},
-{"apani1", {NULL}, 9160, "udp"},
-{"apani2", {NULL}, 9161, "tcp"},
-{"apani2", {NULL}, 9161, "udp"},
-{"apani3", {NULL}, 9162, "tcp"},
-{"apani3", {NULL}, 9162, "udp"},
-{"apani4", {NULL}, 9163, "tcp"},
-{"apani4", {NULL}, 9163, "udp"},
-{"apani5", {NULL}, 9164, "tcp"},
-{"apani5", {NULL}, 9164, "udp"},
-{"sun-as-jpda", {NULL}, 9191, "tcp"},
-{"sun-as-jpda", {NULL}, 9191, "udp"},
-{"wap-wsp", {NULL}, 9200, "tcp"},
-{"wap-wsp", {NULL}, 9200, "udp"},
-{"wap-wsp-wtp", {NULL}, 9201, "tcp"},
-{"wap-wsp-wtp", {NULL}, 9201, "udp"},
-{"wap-wsp-s", {NULL}, 9202, "tcp"},
-{"wap-wsp-s", {NULL}, 9202, "udp"},
-{"wap-wsp-wtp-s", {NULL}, 9203, "tcp"},
-{"wap-wsp-wtp-s", {NULL}, 9203, "udp"},
-{"wap-vcard", {NULL}, 9204, "tcp"},
-{"wap-vcard", {NULL}, 9204, "udp"},
-{"wap-vcal", {NULL}, 9205, "tcp"},
-{"wap-vcal", {NULL}, 9205, "udp"},
-{"wap-vcard-s", {NULL}, 9206, "tcp"},
-{"wap-vcard-s", {NULL}, 9206, "udp"},
-{"wap-vcal-s", {NULL}, 9207, "tcp"},
-{"wap-vcal-s", {NULL}, 9207, "udp"},
-{"rjcdb-vcards", {NULL}, 9208, "tcp"},
-{"rjcdb-vcards", {NULL}, 9208, "udp"},
-{"almobile-system", {NULL}, 9209, "tcp"},
-{"almobile-system", {NULL}, 9209, "udp"},
-{"oma-mlp", {NULL}, 9210, "tcp"},
-{"oma-mlp", {NULL}, 9210, "udp"},
-{"oma-mlp-s", {NULL}, 9211, "tcp"},
-{"oma-mlp-s", {NULL}, 9211, "udp"},
-{"serverviewdbms", {NULL}, 9212, "tcp"},
-{"serverviewdbms", {NULL}, 9212, "udp"},
-{"serverstart", {NULL}, 9213, "tcp"},
-{"serverstart", {NULL}, 9213, "udp"},
-{"ipdcesgbs", {NULL}, 9214, "tcp"},
-{"ipdcesgbs", {NULL}, 9214, "udp"},
-{"insis", {NULL}, 9215, "tcp"},
-{"insis", {NULL}, 9215, "udp"},
-{"acme", {NULL}, 9216, "tcp"},
-{"acme", {NULL}, 9216, "udp"},
-{"fsc-port", {NULL}, 9217, "tcp"},
-{"fsc-port", {NULL}, 9217, "udp"},
-{"teamcoherence", {NULL}, 9222, "tcp"},
-{"teamcoherence", {NULL}, 9222, "udp"},
-{"mon", {NULL}, 9255, "tcp"},
-{"mon", {NULL}, 9255, "udp"},
-{"pegasus", {NULL}, 9278, "tcp"},
-{"pegasus", {NULL}, 9278, "udp"},
-{"pegasus-ctl", {NULL}, 9279, "tcp"},
-{"pegasus-ctl", {NULL}, 9279, "udp"},
-{"pgps", {NULL}, 9280, "tcp"},
-{"pgps", {NULL}, 9280, "udp"},
-{"swtp-port1", {NULL}, 9281, "tcp"},
-{"swtp-port1", {NULL}, 9281, "udp"},
-{"swtp-port2", {NULL}, 9282, "tcp"},
-{"swtp-port2", {NULL}, 9282, "udp"},
-{"callwaveiam", {NULL}, 9283, "tcp"},
-{"callwaveiam", {NULL}, 9283, "udp"},
-{"visd", {NULL}, 9284, "tcp"},
-{"visd", {NULL}, 9284, "udp"},
-{"n2h2server", {NULL}, 9285, "tcp"},
-{"n2h2server", {NULL}, 9285, "udp"},
-{"n2receive", {NULL}, 9286, "udp"},
-{"cumulus", {NULL}, 9287, "tcp"},
-{"cumulus", {NULL}, 9287, "udp"},
-{"armtechdaemon", {NULL}, 9292, "tcp"},
-{"armtechdaemon", {NULL}, 9292, "udp"},
-{"storview", {NULL}, 9293, "tcp"},
-{"storview", {NULL}, 9293, "udp"},
-{"armcenterhttp", {NULL}, 9294, "tcp"},
-{"armcenterhttp", {NULL}, 9294, "udp"},
-{"armcenterhttps", {NULL}, 9295, "tcp"},
-{"armcenterhttps", {NULL}, 9295, "udp"},
-{"vrace", {NULL}, 9300, "tcp"},
-{"vrace", {NULL}, 9300, "udp"},
-{"sphinxql", {NULL}, 9306, "tcp"},
-{"sphinxapi", {NULL}, 9312, "tcp"},
-{"secure-ts", {NULL}, 9318, "tcp"},
-{"secure-ts", {NULL}, 9318, "udp"},
-{"guibase", {NULL}, 9321, "tcp"},
-{"guibase", {NULL}, 9321, "udp"},
-{"mpidcmgr", {NULL}, 9343, "tcp"},
-{"mpidcmgr", {NULL}, 9343, "udp"},
-{"mphlpdmc", {NULL}, 9344, "tcp"},
-{"mphlpdmc", {NULL}, 9344, "udp"},
-{"ctechlicensing", {NULL}, 9346, "tcp"},
-{"ctechlicensing", {NULL}, 9346, "udp"},
-{"fjdmimgr", {NULL}, 9374, "tcp"},
-{"fjdmimgr", {NULL}, 9374, "udp"},
-{"boxp", {NULL}, 9380, "tcp"},
-{"boxp", {NULL}, 9380, "udp"},
-{"d2dconfig", {NULL}, 9387, "tcp"},
-{"d2ddatatrans", {NULL}, 9388, "tcp"},
-{"adws", {NULL}, 9389, "tcp"},
-{"otp", {NULL}, 9390, "tcp"},
-{"fjinvmgr", {NULL}, 9396, "tcp"},
-{"fjinvmgr", {NULL}, 9396, "udp"},
-{"mpidcagt", {NULL}, 9397, "tcp"},
-{"mpidcagt", {NULL}, 9397, "udp"},
-{"sec-t4net-srv", {NULL}, 9400, "tcp"},
-{"sec-t4net-srv", {NULL}, 9400, "udp"},
-{"sec-t4net-clt", {NULL}, 9401, "tcp"},
-{"sec-t4net-clt", {NULL}, 9401, "udp"},
-{"sec-pc2fax-srv", {NULL}, 9402, "tcp"},
-{"sec-pc2fax-srv", {NULL}, 9402, "udp"},
-{"git", {NULL}, 9418, "tcp"},
-{"git", {NULL}, 9418, "udp"},
-{"tungsten-https", {NULL}, 9443, "tcp"},
-{"tungsten-https", {NULL}, 9443, "udp"},
-{"wso2esb-console", {NULL}, 9444, "tcp"},
-{"wso2esb-console", {NULL}, 9444, "udp"},
-{"sntlkeyssrvr", {NULL}, 9450, "tcp"},
-{"sntlkeyssrvr", {NULL}, 9450, "udp"},
-{"ismserver", {NULL}, 9500, "tcp"},
-{"ismserver", {NULL}, 9500, "udp"},
-{"sma-spw", {NULL}, 9522, "udp"},
-{"mngsuite", {NULL}, 9535, "tcp"},
-{"mngsuite", {NULL}, 9535, "udp"},
-{"laes-bf", {NULL}, 9536, "tcp"},
-{"laes-bf", {NULL}, 9536, "udp"},
-{"trispen-sra", {NULL}, 9555, "tcp"},
-{"trispen-sra", {NULL}, 9555, "udp"},
-{"ldgateway", {NULL}, 9592, "tcp"},
-{"ldgateway", {NULL}, 9592, "udp"},
-{"cba8", {NULL}, 9593, "tcp"},
-{"cba8", {NULL}, 9593, "udp"},
-{"msgsys", {NULL}, 9594, "tcp"},
-{"msgsys", {NULL}, 9594, "udp"},
-{"pds", {NULL}, 9595, "tcp"},
-{"pds", {NULL}, 9595, "udp"},
-{"mercury-disc", {NULL}, 9596, "tcp"},
-{"mercury-disc", {NULL}, 9596, "udp"},
-{"pd-admin", {NULL}, 9597, "tcp"},
-{"pd-admin", {NULL}, 9597, "udp"},
-{"vscp", {NULL}, 9598, "tcp"},
-{"vscp", {NULL}, 9598, "udp"},
-{"robix", {NULL}, 9599, "tcp"},
-{"robix", {NULL}, 9599, "udp"},
-{"micromuse-ncpw", {NULL}, 9600, "tcp"},
-{"micromuse-ncpw", {NULL}, 9600, "udp"},
-{"streamcomm-ds", {NULL}, 9612, "tcp"},
-{"streamcomm-ds", {NULL}, 9612, "udp"},
-{"iadt-tls", {NULL}, 9614, "tcp"},
-{"erunbook_agent", {NULL}, 9616, "tcp"},
-{"erunbook_server", {NULL}, 9617, "tcp"},
-{"condor", {NULL}, 9618, "tcp"},
-{"condor", {NULL}, 9618, "udp"},
-{"odbcpathway", {NULL}, 9628, "tcp"},
-{"odbcpathway", {NULL}, 9628, "udp"},
-{"uniport", {NULL}, 9629, "tcp"},
-{"uniport", {NULL}, 9629, "udp"},
-{"peoctlr", {NULL}, 9630, "tcp"},
-{"peocoll", {NULL}, 9631, "tcp"},
-{"mc-comm", {NULL}, 9632, "udp"},
-{"pqsflows", {NULL}, 9640, "tcp"},
-{"xmms2", {NULL}, 9667, "tcp"},
-{"xmms2", {NULL}, 9667, "udp"},
-{"tec5-sdctp", {NULL}, 9668, "tcp"},
-{"tec5-sdctp", {NULL}, 9668, "udp"},
-{"client-wakeup", {NULL}, 9694, "tcp"},
-{"client-wakeup", {NULL}, 9694, "udp"},
-{"ccnx", {NULL}, 9695, "tcp"},
-{"ccnx", {NULL}, 9695, "udp"},
-{"board-roar", {NULL}, 9700, "tcp"},
-{"board-roar", {NULL}, 9700, "udp"},
-{"l5nas-parchan", {NULL}, 9747, "tcp"},
-{"l5nas-parchan", {NULL}, 9747, "udp"},
-{"board-voip", {NULL}, 9750, "tcp"},
-{"board-voip", {NULL}, 9750, "udp"},
-{"rasadv", {NULL}, 9753, "tcp"},
-{"rasadv", {NULL}, 9753, "udp"},
-{"tungsten-http", {NULL}, 9762, "tcp"},
-{"tungsten-http", {NULL}, 9762, "udp"},
-{"davsrc", {NULL}, 9800, "tcp"},
-{"davsrc", {NULL}, 9800, "udp"},
-{"sstp-2", {NULL}, 9801, "tcp"},
-{"sstp-2", {NULL}, 9801, "udp"},
-{"davsrcs", {NULL}, 9802, "tcp"},
-{"davsrcs", {NULL}, 9802, "udp"},
-{"sapv1", {NULL}, 9875, "tcp"},
-{"sapv1", {NULL}, 9875, "udp"},
-{"sd", {NULL}, 9876, "tcp"},
-{"sd", {NULL}, 9876, "udp"},
-{"cyborg-systems", {NULL}, 9888, "tcp"},
-{"cyborg-systems", {NULL}, 9888, "udp"},
-{"gt-proxy", {NULL}, 9889, "tcp"},
-{"gt-proxy", {NULL}, 9889, "udp"},
-{"monkeycom", {NULL}, 9898, "tcp"},
-{"monkeycom", {NULL}, 9898, "udp"},
-{"sctp-tunneling", {NULL}, 9899, "tcp"},
-{"sctp-tunneling", {NULL}, 9899, "udp"},
-{"iua", {NULL}, 9900, "tcp"},
-{"iua", {NULL}, 9900, "udp"},
-{"iua", {NULL}, 9900, "sctp"},
-{"enrp", {NULL}, 9901, "udp"},
-{"enrp-sctp", {NULL}, 9901, "sctp"},
-{"enrp-sctp-tls", {NULL}, 9902, "sctp"},
-{"domaintime", {NULL}, 9909, "tcp"},
-{"domaintime", {NULL}, 9909, "udp"},
-{"sype-transport", {NULL}, 9911, "tcp"},
-{"sype-transport", {NULL}, 9911, "udp"},
-{"apc-9950", {NULL}, 9950, "tcp"},
-{"apc-9950", {NULL}, 9950, "udp"},
-{"apc-9951", {NULL}, 9951, "tcp"},
-{"apc-9951", {NULL}, 9951, "udp"},
-{"apc-9952", {NULL}, 9952, "tcp"},
-{"apc-9952", {NULL}, 9952, "udp"},
-{"acis", {NULL}, 9953, "tcp"},
-{"acis", {NULL}, 9953, "udp"},
-{"odnsp", {NULL}, 9966, "tcp"},
-{"odnsp", {NULL}, 9966, "udp"},
-{"dsm-scm-target", {NULL}, 9987, "tcp"},
-{"dsm-scm-target", {NULL}, 9987, "udp"},
-{"nsesrvr", {NULL}, 9988, "tcp"},
-{"osm-appsrvr", {NULL}, 9990, "tcp"},
-{"osm-appsrvr", {NULL}, 9990, "udp"},
-{"osm-oev", {NULL}, 9991, "tcp"},
-{"osm-oev", {NULL}, 9991, "udp"},
-{"palace-1", {NULL}, 9992, "tcp"},
-{"palace-1", {NULL}, 9992, "udp"},
-{"palace-2", {NULL}, 9993, "tcp"},
-{"palace-2", {NULL}, 9993, "udp"},
-{"palace-3", {NULL}, 9994, "tcp"},
-{"palace-3", {NULL}, 9994, "udp"},
-{"palace-4", {NULL}, 9995, "tcp"},
-{"palace-4", {NULL}, 9995, "udp"},
-{"palace-5", {NULL}, 9996, "tcp"},
-{"palace-5", {NULL}, 9996, "udp"},
-{"palace-6", {NULL}, 9997, "tcp"},
-{"palace-6", {NULL}, 9997, "udp"},
-{"distinct32", {NULL}, 9998, "tcp"},
-{"distinct32", {NULL}, 9998, "udp"},
-{"distinct", {NULL}, 9999, "tcp"},
-{"distinct", {NULL}, 9999, "udp"},
-{"ndmp", {NULL}, 10000, "tcp"},
-{"ndmp", {NULL}, 10000, "udp"},
-{"scp-config", {NULL}, 10001, "tcp"},
-{"scp-config", {NULL}, 10001, "udp"},
-{"documentum", {NULL}, 10002, "tcp"},
-{"documentum", {NULL}, 10002, "udp"},
-{"documentum_s", {NULL}, 10003, "tcp"},
-{"documentum_s", {NULL}, 10003, "udp"},
-{"emcrmirccd", {NULL}, 10004, "tcp"},
-{"emcrmird", {NULL}, 10005, "tcp"},
-{"mvs-capacity", {NULL}, 10007, "tcp"},
-{"mvs-capacity", {NULL}, 10007, "udp"},
-{"octopus", {NULL}, 10008, "tcp"},
-{"octopus", {NULL}, 10008, "udp"},
-{"swdtp-sv", {NULL}, 10009, "tcp"},
-{"swdtp-sv", {NULL}, 10009, "udp"},
-{"rxapi", {NULL}, 10010, "tcp"},
-{"zabbix-agent", {NULL}, 10050, "tcp"},
-{"zabbix-agent", {NULL}, 10050, "udp"},
-{"zabbix-trapper", {NULL}, 10051, "tcp"},
-{"zabbix-trapper", {NULL}, 10051, "udp"},
-{"qptlmd", {NULL}, 10055, "tcp"},
-{"amanda", {NULL}, 10080, "tcp"},
-{"amanda", {NULL}, 10080, "udp"},
-{"famdc", {NULL}, 10081, "tcp"},
-{"famdc", {NULL}, 10081, "udp"},
-{"itap-ddtp", {NULL}, 10100, "tcp"},
-{"itap-ddtp", {NULL}, 10100, "udp"},
-{"ezmeeting-2", {NULL}, 10101, "tcp"},
-{"ezmeeting-2", {NULL}, 10101, "udp"},
-{"ezproxy-2", {NULL}, 10102, "tcp"},
-{"ezproxy-2", {NULL}, 10102, "udp"},
-{"ezrelay", {NULL}, 10103, "tcp"},
-{"ezrelay", {NULL}, 10103, "udp"},
-{"swdtp", {NULL}, 10104, "tcp"},
-{"swdtp", {NULL}, 10104, "udp"},
-{"bctp-server", {NULL}, 10107, "tcp"},
-{"bctp-server", {NULL}, 10107, "udp"},
-{"nmea-0183", {NULL}, 10110, "tcp"},
-{"nmea-0183", {NULL}, 10110, "udp"},
-{"netiq-endpoint", {NULL}, 10113, "tcp"},
-{"netiq-endpoint", {NULL}, 10113, "udp"},
-{"netiq-qcheck", {NULL}, 10114, "tcp"},
-{"netiq-qcheck", {NULL}, 10114, "udp"},
-{"netiq-endpt", {NULL}, 10115, "tcp"},
-{"netiq-endpt", {NULL}, 10115, "udp"},
-{"netiq-voipa", {NULL}, 10116, "tcp"},
-{"netiq-voipa", {NULL}, 10116, "udp"},
-{"iqrm", {NULL}, 10117, "tcp"},
-{"iqrm", {NULL}, 10117, "udp"},
-{"bmc-perf-sd", {NULL}, 10128, "tcp"},
-{"bmc-perf-sd", {NULL}, 10128, "udp"},
-{"bmc-gms", {NULL}, 10129, "tcp"},
-{"qb-db-server", {NULL}, 10160, "tcp"},
-{"qb-db-server", {NULL}, 10160, "udp"},
-{"snmptls", {NULL}, 10161, "tcp"},
-{"snmpdtls", {NULL}, 10161, "udp"},
-{"snmptls-trap", {NULL}, 10162, "tcp"},
-{"snmpdtls-trap", {NULL}, 10162, "udp"},
-{"trisoap", {NULL}, 10200, "tcp"},
-{"trisoap", {NULL}, 10200, "udp"},
-{"rsms", {NULL}, 10201, "tcp"},
-{"rscs", {NULL}, 10201, "udp"},
-{"apollo-relay", {NULL}, 10252, "tcp"},
-{"apollo-relay", {NULL}, 10252, "udp"},
-{"axis-wimp-port", {NULL}, 10260, "tcp"},
-{"axis-wimp-port", {NULL}, 10260, "udp"},
-{"blocks", {NULL}, 10288, "tcp"},
-{"blocks", {NULL}, 10288, "udp"},
-{"cosir", {NULL}, 10321, "tcp"},
-{"hip-nat-t", {NULL}, 10500, "udp"},
-{"MOS-lower", {NULL}, 10540, "tcp"},
-{"MOS-lower", {NULL}, 10540, "udp"},
-{"MOS-upper", {NULL}, 10541, "tcp"},
-{"MOS-upper", {NULL}, 10541, "udp"},
-{"MOS-aux", {NULL}, 10542, "tcp"},
-{"MOS-aux", {NULL}, 10542, "udp"},
-{"MOS-soap", {NULL}, 10543, "tcp"},
-{"MOS-soap", {NULL}, 10543, "udp"},
-{"MOS-soap-opt", {NULL}, 10544, "tcp"},
-{"MOS-soap-opt", {NULL}, 10544, "udp"},
-{"gap", {NULL}, 10800, "tcp"},
-{"gap", {NULL}, 10800, "udp"},
-{"lpdg", {NULL}, 10805, "tcp"},
-{"lpdg", {NULL}, 10805, "udp"},
-{"nbd", {NULL}, 10809, "tcp"},
-{"nmc-disc", {NULL}, 10810, "udp"},
-{"helix", {NULL}, 10860, "tcp"},
-{"helix", {NULL}, 10860, "udp"},
-{"rmiaux", {NULL}, 10990, "tcp"},
-{"rmiaux", {NULL}, 10990, "udp"},
-{"irisa", {NULL}, 11000, "tcp"},
-{"irisa", {NULL}, 11000, "udp"},
-{"metasys", {NULL}, 11001, "tcp"},
-{"metasys", {NULL}, 11001, "udp"},
-{"netapp-icmgmt", {NULL}, 11104, "tcp"},
-{"netapp-icdata", {NULL}, 11105, "tcp"},
-{"sgi-lk", {NULL}, 11106, "tcp"},
-{"sgi-lk", {NULL}, 11106, "udp"},
-{"vce", {NULL}, 11111, "tcp"},
-{"vce", {NULL}, 11111, "udp"},
-{"dicom", {NULL}, 11112, "tcp"},
-{"dicom", {NULL}, 11112, "udp"},
-{"suncacao-snmp", {NULL}, 11161, "tcp"},
-{"suncacao-snmp", {NULL}, 11161, "udp"},
-{"suncacao-jmxmp", {NULL}, 11162, "tcp"},
-{"suncacao-jmxmp", {NULL}, 11162, "udp"},
-{"suncacao-rmi", {NULL}, 11163, "tcp"},
-{"suncacao-rmi", {NULL}, 11163, "udp"},
-{"suncacao-csa", {NULL}, 11164, "tcp"},
-{"suncacao-csa", {NULL}, 11164, "udp"},
-{"suncacao-websvc", {NULL}, 11165, "tcp"},
-{"suncacao-websvc", {NULL}, 11165, "udp"},
-{"snss", {NULL}, 11171, "udp"},
-{"oemcacao-jmxmp", {NULL}, 11172, "tcp"},
-{"oemcacao-rmi", {NULL}, 11174, "tcp"},
-{"oemcacao-websvc", {NULL}, 11175, "tcp"},
-{"smsqp", {NULL}, 11201, "tcp"},
-{"smsqp", {NULL}, 11201, "udp"},
-{"wifree", {NULL}, 11208, "tcp"},
-{"wifree", {NULL}, 11208, "udp"},
-{"memcache", {NULL}, 11211, "tcp"},
-{"memcache", {NULL}, 11211, "udp"},
-{"imip", {NULL}, 11319, "tcp"},
-{"imip", {NULL}, 11319, "udp"},
-{"imip-channels", {NULL}, 11320, "tcp"},
-{"imip-channels", {NULL}, 11320, "udp"},
-{"arena-server", {NULL}, 11321, "tcp"},
-{"arena-server", {NULL}, 11321, "udp"},
-{"atm-uhas", {NULL}, 11367, "tcp"},
-{"atm-uhas", {NULL}, 11367, "udp"},
-{"hkp", {NULL}, 11371, "tcp"},
-{"hkp", {NULL}, 11371, "udp"},
-{"asgcypresstcps", {NULL}, 11489, "tcp"},
-{"tempest-port", {NULL}, 11600, "tcp"},
-{"tempest-port", {NULL}, 11600, "udp"},
-{"h323callsigalt", {NULL}, 11720, "tcp"},
-{"h323callsigalt", {NULL}, 11720, "udp"},
-{"intrepid-ssl", {NULL}, 11751, "tcp"},
-{"intrepid-ssl", {NULL}, 11751, "udp"},
-{"xoraya", {NULL}, 11876, "tcp"},
-{"xoraya", {NULL}, 11876, "udp"},
-{"x2e-disc", {NULL}, 11877, "udp"},
-{"sysinfo-sp", {NULL}, 11967, "tcp"},
-{"sysinfo-sp", {NULL}, 11967, "udp"},
-{"wmereceiving", {NULL}, 11997, "sctp"},
-{"wmedistribution", {NULL}, 11998, "sctp"},
-{"wmereporting", {NULL}, 11999, "sctp"},
-{"entextxid", {NULL}, 12000, "tcp"},
-{"entextxid", {NULL}, 12000, "udp"},
-{"entextnetwk", {NULL}, 12001, "tcp"},
-{"entextnetwk", {NULL}, 12001, "udp"},
-{"entexthigh", {NULL}, 12002, "tcp"},
-{"entexthigh", {NULL}, 12002, "udp"},
-{"entextmed", {NULL}, 12003, "tcp"},
-{"entextmed", {NULL}, 12003, "udp"},
-{"entextlow", {NULL}, 12004, "tcp"},
-{"entextlow", {NULL}, 12004, "udp"},
-{"dbisamserver1", {NULL}, 12005, "tcp"},
-{"dbisamserver1", {NULL}, 12005, "udp"},
-{"dbisamserver2", {NULL}, 12006, "tcp"},
-{"dbisamserver2", {NULL}, 12006, "udp"},
-{"accuracer", {NULL}, 12007, "tcp"},
-{"accuracer", {NULL}, 12007, "udp"},
-{"accuracer-dbms", {NULL}, 12008, "tcp"},
-{"accuracer-dbms", {NULL}, 12008, "udp"},
-{"edbsrvr", {NULL}, 12010, "tcp"},
-{"vipera", {NULL}, 12012, "tcp"},
-{"vipera", {NULL}, 12012, "udp"},
-{"vipera-ssl", {NULL}, 12013, "tcp"},
-{"vipera-ssl", {NULL}, 12013, "udp"},
-{"rets-ssl", {NULL}, 12109, "tcp"},
-{"rets-ssl", {NULL}, 12109, "udp"},
-{"nupaper-ss", {NULL}, 12121, "tcp"},
-{"nupaper-ss", {NULL}, 12121, "udp"},
-{"cawas", {NULL}, 12168, "tcp"},
-{"cawas", {NULL}, 12168, "udp"},
-{"hivep", {NULL}, 12172, "tcp"},
-{"hivep", {NULL}, 12172, "udp"},
-{"linogridengine", {NULL}, 12300, "tcp"},
-{"linogridengine", {NULL}, 12300, "udp"},
-{"warehouse-sss", {NULL}, 12321, "tcp"},
-{"warehouse-sss", {NULL}, 12321, "udp"},
-{"warehouse", {NULL}, 12322, "tcp"},
-{"warehouse", {NULL}, 12322, "udp"},
-{"italk", {NULL}, 12345, "tcp"},
-{"italk", {NULL}, 12345, "udp"},
-{"tsaf", {NULL}, 12753, "tcp"},
-{"tsaf", {NULL}, 12753, "udp"},
-{"i-zipqd", {NULL}, 13160, "tcp"},
-{"i-zipqd", {NULL}, 13160, "udp"},
-{"bcslogc", {NULL}, 13216, "tcp"},
-{"bcslogc", {NULL}, 13216, "udp"},
-{"rs-pias", {NULL}, 13217, "tcp"},
-{"rs-pias", {NULL}, 13217, "udp"},
-{"emc-vcas-tcp", {NULL}, 13218, "tcp"},
-{"emc-vcas-udp", {NULL}, 13218, "udp"},
-{"powwow-client", {NULL}, 13223, "tcp"},
-{"powwow-client", {NULL}, 13223, "udp"},
-{"powwow-server", {NULL}, 13224, "tcp"},
-{"powwow-server", {NULL}, 13224, "udp"},
-{"doip-data", {NULL}, 13400, "tcp"},
-{"doip-disc", {NULL}, 13400, "udp"},
-{"bprd", {NULL}, 13720, "tcp"},
-{"bprd", {NULL}, 13720, "udp"},
-{"bpdbm", {NULL}, 13721, "tcp"},
-{"bpdbm", {NULL}, 13721, "udp"},
-{"bpjava-msvc", {NULL}, 13722, "tcp"},
-{"bpjava-msvc", {NULL}, 13722, "udp"},
-{"vnetd", {NULL}, 13724, "tcp"},
-{"vnetd", {NULL}, 13724, "udp"},
-{"bpcd", {NULL}, 13782, "tcp"},
-{"bpcd", {NULL}, 13782, "udp"},
-{"vopied", {NULL}, 13783, "tcp"},
-{"vopied", {NULL}, 13783, "udp"},
-{"nbdb", {NULL}, 13785, "tcp"},
-{"nbdb", {NULL}, 13785, "udp"},
-{"nomdb", {NULL}, 13786, "tcp"},
-{"nomdb", {NULL}, 13786, "udp"},
-{"dsmcc-config", {NULL}, 13818, "tcp"},
-{"dsmcc-config", {NULL}, 13818, "udp"},
-{"dsmcc-session", {NULL}, 13819, "tcp"},
-{"dsmcc-session", {NULL}, 13819, "udp"},
-{"dsmcc-passthru", {NULL}, 13820, "tcp"},
-{"dsmcc-passthru", {NULL}, 13820, "udp"},
-{"dsmcc-download", {NULL}, 13821, "tcp"},
-{"dsmcc-download", {NULL}, 13821, "udp"},
-{"dsmcc-ccp", {NULL}, 13822, "tcp"},
-{"dsmcc-ccp", {NULL}, 13822, "udp"},
-{"bmdss", {NULL}, 13823, "tcp"},
-{"dta-systems", {NULL}, 13929, "tcp"},
-{"dta-systems", {NULL}, 13929, "udp"},
-{"medevolve", {NULL}, 13930, "tcp"},
-{"scotty-ft", {NULL}, 14000, "tcp"},
-{"scotty-ft", {NULL}, 14000, "udp"},
-{"sua", {NULL}, 14001, "tcp"},
-{"sua", {NULL}, 14001, "udp"},
-{"sua", {NULL}, 14001, "sctp"},
-{"sage-best-com1", {NULL}, 14033, "tcp"},
-{"sage-best-com1", {NULL}, 14033, "udp"},
-{"sage-best-com2", {NULL}, 14034, "tcp"},
-{"sage-best-com2", {NULL}, 14034, "udp"},
-{"vcs-app", {NULL}, 14141, "tcp"},
-{"vcs-app", {NULL}, 14141, "udp"},
-{"icpp", {NULL}, 14142, "tcp"},
-{"icpp", {NULL}, 14142, "udp"},
-{"gcm-app", {NULL}, 14145, "tcp"},
-{"gcm-app", {NULL}, 14145, "udp"},
-{"vrts-tdd", {NULL}, 14149, "tcp"},
-{"vrts-tdd", {NULL}, 14149, "udp"},
-{"vcscmd", {NULL}, 14150, "tcp"},
-{"vad", {NULL}, 14154, "tcp"},
-{"vad", {NULL}, 14154, "udp"},
-{"cps", {NULL}, 14250, "tcp"},
-{"cps", {NULL}, 14250, "udp"},
-{"ca-web-update", {NULL}, 14414, "tcp"},
-{"ca-web-update", {NULL}, 14414, "udp"},
-{"hde-lcesrvr-1", {NULL}, 14936, "tcp"},
-{"hde-lcesrvr-1", {NULL}, 14936, "udp"},
-{"hde-lcesrvr-2", {NULL}, 14937, "tcp"},
-{"hde-lcesrvr-2", {NULL}, 14937, "udp"},
-{"hydap", {NULL}, 15000, "tcp"},
-{"hydap", {NULL}, 15000, "udp"},
-{"xpilot", {NULL}, 15345, "tcp"},
-{"xpilot", {NULL}, 15345, "udp"},
-{"3link", {NULL}, 15363, "tcp"},
-{"3link", {NULL}, 15363, "udp"},
-{"cisco-snat", {NULL}, 15555, "tcp"},
-{"cisco-snat", {NULL}, 15555, "udp"},
-{"bex-xr", {NULL}, 15660, "tcp"},
-{"bex-xr", {NULL}, 15660, "udp"},
-{"ptp", {NULL}, 15740, "tcp"},
-{"ptp", {NULL}, 15740, "udp"},
-{"2ping", {NULL}, 15998, "udp"},
-{"programmar", {NULL}, 15999, "tcp"},
-{"fmsas", {NULL}, 16000, "tcp"},
-{"fmsascon", {NULL}, 16001, "tcp"},
-{"gsms", {NULL}, 16002, "tcp"},
-{"alfin", {NULL}, 16003, "udp"},
-{"jwpc", {NULL}, 16020, "tcp"},
-{"jwpc-bin", {NULL}, 16021, "tcp"},
-{"sun-sea-port", {NULL}, 16161, "tcp"},
-{"sun-sea-port", {NULL}, 16161, "udp"},
-{"solaris-audit", {NULL}, 16162, "tcp"},
-{"etb4j", {NULL}, 16309, "tcp"},
-{"etb4j", {NULL}, 16309, "udp"},
-{"pduncs", {NULL}, 16310, "tcp"},
-{"pduncs", {NULL}, 16310, "udp"},
-{"pdefmns", {NULL}, 16311, "tcp"},
-{"pdefmns", {NULL}, 16311, "udp"},
-{"netserialext1", {NULL}, 16360, "tcp"},
-{"netserialext1", {NULL}, 16360, "udp"},
-{"netserialext2", {NULL}, 16361, "tcp"},
-{"netserialext2", {NULL}, 16361, "udp"},
-{"netserialext3", {NULL}, 16367, "tcp"},
-{"netserialext3", {NULL}, 16367, "udp"},
-{"netserialext4", {NULL}, 16368, "tcp"},
-{"netserialext4", {NULL}, 16368, "udp"},
-{"connected", {NULL}, 16384, "tcp"},
-{"connected", {NULL}, 16384, "udp"},
-{"xoms", {NULL}, 16619, "tcp"},
-{"newbay-snc-mc", {NULL}, 16900, "tcp"},
-{"newbay-snc-mc", {NULL}, 16900, "udp"},
-{"sgcip", {NULL}, 16950, "tcp"},
-{"sgcip", {NULL}, 16950, "udp"},
-{"intel-rci-mp", {NULL}, 16991, "tcp"},
-{"intel-rci-mp", {NULL}, 16991, "udp"},
-{"amt-soap-http", {NULL}, 16992, "tcp"},
-{"amt-soap-http", {NULL}, 16992, "udp"},
-{"amt-soap-https", {NULL}, 16993, "tcp"},
-{"amt-soap-https", {NULL}, 16993, "udp"},
-{"amt-redir-tcp", {NULL}, 16994, "tcp"},
-{"amt-redir-tcp", {NULL}, 16994, "udp"},
-{"amt-redir-tls", {NULL}, 16995, "tcp"},
-{"amt-redir-tls", {NULL}, 16995, "udp"},
-{"isode-dua", {NULL}, 17007, "tcp"},
-{"isode-dua", {NULL}, 17007, "udp"},
-{"soundsvirtual", {NULL}, 17185, "tcp"},
-{"soundsvirtual", {NULL}, 17185, "udp"},
-{"chipper", {NULL}, 17219, "tcp"},
-{"chipper", {NULL}, 17219, "udp"},
-{"integrius-stp", {NULL}, 17234, "tcp"},
-{"integrius-stp", {NULL}, 17234, "udp"},
-{"ssh-mgmt", {NULL}, 17235, "tcp"},
-{"ssh-mgmt", {NULL}, 17235, "udp"},
-{"db-lsp", {NULL}, 17500, "tcp"},
-{"db-lsp-disc", {NULL}, 17500, "udp"},
-{"ea", {NULL}, 17729, "tcp"},
-{"ea", {NULL}, 17729, "udp"},
-{"zep", {NULL}, 17754, "tcp"},
-{"zep", {NULL}, 17754, "udp"},
-{"zigbee-ip", {NULL}, 17755, "tcp"},
-{"zigbee-ip", {NULL}, 17755, "udp"},
-{"zigbee-ips", {NULL}, 17756, "tcp"},
-{"zigbee-ips", {NULL}, 17756, "udp"},
-{"sw-orion", {NULL}, 17777, "tcp"},
-{"biimenu", {NULL}, 18000, "tcp"},
-{"biimenu", {NULL}, 18000, "udp"},
-{"radpdf", {NULL}, 18104, "tcp"},
-{"racf", {NULL}, 18136, "tcp"},
-{"opsec-cvp", {NULL}, 18181, "tcp"},
-{"opsec-cvp", {NULL}, 18181, "udp"},
-{"opsec-ufp", {NULL}, 18182, "tcp"},
-{"opsec-ufp", {NULL}, 18182, "udp"},
-{"opsec-sam", {NULL}, 18183, "tcp"},
-{"opsec-sam", {NULL}, 18183, "udp"},
-{"opsec-lea", {NULL}, 18184, "tcp"},
-{"opsec-lea", {NULL}, 18184, "udp"},
-{"opsec-omi", {NULL}, 18185, "tcp"},
-{"opsec-omi", {NULL}, 18185, "udp"},
-{"ohsc", {NULL}, 18186, "tcp"},
-{"ohsc", {NULL}, 18186, "udp"},
-{"opsec-ela", {NULL}, 18187, "tcp"},
-{"opsec-ela", {NULL}, 18187, "udp"},
-{"checkpoint-rtm", {NULL}, 18241, "tcp"},
-{"checkpoint-rtm", {NULL}, 18241, "udp"},
-{"gv-pf", {NULL}, 18262, "tcp"},
-{"gv-pf", {NULL}, 18262, "udp"},
-{"ac-cluster", {NULL}, 18463, "tcp"},
-{"ac-cluster", {NULL}, 18463, "udp"},
-{"rds-ib", {NULL}, 18634, "tcp"},
-{"rds-ib", {NULL}, 18634, "udp"},
-{"rds-ip", {NULL}, 18635, "tcp"},
-{"rds-ip", {NULL}, 18635, "udp"},
-{"ique", {NULL}, 18769, "tcp"},
-{"ique", {NULL}, 18769, "udp"},
-{"infotos", {NULL}, 18881, "tcp"},
-{"infotos", {NULL}, 18881, "udp"},
-{"apc-necmp", {NULL}, 18888, "tcp"},
-{"apc-necmp", {NULL}, 18888, "udp"},
-{"igrid", {NULL}, 19000, "tcp"},
-{"igrid", {NULL}, 19000, "udp"},
-{"j-link", {NULL}, 19020, "tcp"},
-{"opsec-uaa", {NULL}, 19191, "tcp"},
-{"opsec-uaa", {NULL}, 19191, "udp"},
-{"ua-secureagent", {NULL}, 19194, "tcp"},
-{"ua-secureagent", {NULL}, 19194, "udp"},
-{"keysrvr", {NULL}, 19283, "tcp"},
-{"keysrvr", {NULL}, 19283, "udp"},
-{"keyshadow", {NULL}, 19315, "tcp"},
-{"keyshadow", {NULL}, 19315, "udp"},
-{"mtrgtrans", {NULL}, 19398, "tcp"},
-{"mtrgtrans", {NULL}, 19398, "udp"},
-{"hp-sco", {NULL}, 19410, "tcp"},
-{"hp-sco", {NULL}, 19410, "udp"},
-{"hp-sca", {NULL}, 19411, "tcp"},
-{"hp-sca", {NULL}, 19411, "udp"},
-{"hp-sessmon", {NULL}, 19412, "tcp"},
-{"hp-sessmon", {NULL}, 19412, "udp"},
-{"fxuptp", {NULL}, 19539, "tcp"},
-{"fxuptp", {NULL}, 19539, "udp"},
-{"sxuptp", {NULL}, 19540, "tcp"},
-{"sxuptp", {NULL}, 19540, "udp"},
-{"jcp", {NULL}, 19541, "tcp"},
-{"jcp", {NULL}, 19541, "udp"},
-{"iec-104-sec", {NULL}, 19998, "tcp"},
-{"dnp-sec", {NULL}, 19999, "tcp"},
-{"dnp-sec", {NULL}, 19999, "udp"},
-{"dnp", {NULL}, 20000, "tcp"},
-{"dnp", {NULL}, 20000, "udp"},
-{"microsan", {NULL}, 20001, "tcp"},
-{"microsan", {NULL}, 20001, "udp"},
-{"commtact-http", {NULL}, 20002, "tcp"},
-{"commtact-http", {NULL}, 20002, "udp"},
-{"commtact-https", {NULL}, 20003, "tcp"},
-{"commtact-https", {NULL}, 20003, "udp"},
-{"openwebnet", {NULL}, 20005, "tcp"},
-{"openwebnet", {NULL}, 20005, "udp"},
-{"ss-idi-disc", {NULL}, 20012, "udp"},
-{"ss-idi", {NULL}, 20013, "tcp"},
-{"opendeploy", {NULL}, 20014, "tcp"},
-{"opendeploy", {NULL}, 20014, "udp"},
-{"nburn_id", {NULL}, 20034, "tcp"},
-{"nburn_id", {NULL}, 20034, "udp"},
-{"tmophl7mts", {NULL}, 20046, "tcp"},
-{"tmophl7mts", {NULL}, 20046, "udp"},
-{"mountd", {NULL}, 20048, "tcp"},
-{"mountd", {NULL}, 20048, "udp"},
-{"nfsrdma", {NULL}, 20049, "tcp"},
-{"nfsrdma", {NULL}, 20049, "udp"},
-{"nfsrdma", {NULL}, 20049, "sctp"},
-{"tolfab", {NULL}, 20167, "tcp"},
-{"tolfab", {NULL}, 20167, "udp"},
-{"ipdtp-port", {NULL}, 20202, "tcp"},
-{"ipdtp-port", {NULL}, 20202, "udp"},
-{"ipulse-ics", {NULL}, 20222, "tcp"},
-{"ipulse-ics", {NULL}, 20222, "udp"},
-{"emwavemsg", {NULL}, 20480, "tcp"},
-{"emwavemsg", {NULL}, 20480, "udp"},
-{"track", {NULL}, 20670, "tcp"},
-{"track", {NULL}, 20670, "udp"},
-{"athand-mmp", {NULL}, 20999, "tcp"},
-{"athand-mmp", {NULL}, 20999, "udp"},
-{"irtrans", {NULL}, 21000, "tcp"},
-{"irtrans", {NULL}, 21000, "udp"},
-{"dfserver", {NULL}, 21554, "tcp"},
-{"dfserver", {NULL}, 21554, "udp"},
-{"vofr-gateway", {NULL}, 21590, "tcp"},
-{"vofr-gateway", {NULL}, 21590, "udp"},
-{"tvpm", {NULL}, 21800, "tcp"},
-{"tvpm", {NULL}, 21800, "udp"},
-{"webphone", {NULL}, 21845, "tcp"},
-{"webphone", {NULL}, 21845, "udp"},
-{"netspeak-is", {NULL}, 21846, "tcp"},
-{"netspeak-is", {NULL}, 21846, "udp"},
-{"netspeak-cs", {NULL}, 21847, "tcp"},
-{"netspeak-cs", {NULL}, 21847, "udp"},
-{"netspeak-acd", {NULL}, 21848, "tcp"},
-{"netspeak-acd", {NULL}, 21848, "udp"},
-{"netspeak-cps", {NULL}, 21849, "tcp"},
-{"netspeak-cps", {NULL}, 21849, "udp"},
-{"snapenetio", {NULL}, 22000, "tcp"},
-{"snapenetio", {NULL}, 22000, "udp"},
-{"optocontrol", {NULL}, 22001, "tcp"},
-{"optocontrol", {NULL}, 22001, "udp"},
-{"optohost002", {NULL}, 22002, "tcp"},
-{"optohost002", {NULL}, 22002, "udp"},
-{"optohost003", {NULL}, 22003, "tcp"},
-{"optohost003", {NULL}, 22003, "udp"},
-{"optohost004", {NULL}, 22004, "tcp"},
-{"optohost004", {NULL}, 22004, "udp"},
-{"optohost004", {NULL}, 22005, "tcp"},
-{"optohost004", {NULL}, 22005, "udp"},
-{"dcap", {NULL}, 22125, "tcp"},
-{"gsidcap", {NULL}, 22128, "tcp"},
-{"wnn6", {NULL}, 22273, "tcp"},
-{"wnn6", {NULL}, 22273, "udp"},
-{"cis", {NULL}, 22305, "tcp"},
-{"cis", {NULL}, 22305, "udp"},
-{"cis-secure", {NULL}, 22343, "tcp"},
-{"cis-secure", {NULL}, 22343, "udp"},
-{"WibuKey", {NULL}, 22347, "tcp"},
-{"WibuKey", {NULL}, 22347, "udp"},
-{"CodeMeter", {NULL}, 22350, "tcp"},
-{"CodeMeter", {NULL}, 22350, "udp"},
-{"vocaltec-wconf", {NULL}, 22555, "tcp"},
-{"vocaltec-phone", {NULL}, 22555, "udp"},
-{"talikaserver", {NULL}, 22763, "tcp"},
-{"talikaserver", {NULL}, 22763, "udp"},
-{"aws-brf", {NULL}, 22800, "tcp"},
-{"aws-brf", {NULL}, 22800, "udp"},
-{"brf-gw", {NULL}, 22951, "tcp"},
-{"brf-gw", {NULL}, 22951, "udp"},
-{"inovaport1", {NULL}, 23000, "tcp"},
-{"inovaport1", {NULL}, 23000, "udp"},
-{"inovaport2", {NULL}, 23001, "tcp"},
-{"inovaport2", {NULL}, 23001, "udp"},
-{"inovaport3", {NULL}, 23002, "tcp"},
-{"inovaport3", {NULL}, 23002, "udp"},
-{"inovaport4", {NULL}, 23003, "tcp"},
-{"inovaport4", {NULL}, 23003, "udp"},
-{"inovaport5", {NULL}, 23004, "tcp"},
-{"inovaport5", {NULL}, 23004, "udp"},
-{"inovaport6", {NULL}, 23005, "tcp"},
-{"inovaport6", {NULL}, 23005, "udp"},
-{"s102", {NULL}, 23272, "udp"},
-{"elxmgmt", {NULL}, 23333, "tcp"},
-{"elxmgmt", {NULL}, 23333, "udp"},
-{"novar-dbase", {NULL}, 23400, "tcp"},
-{"novar-dbase", {NULL}, 23400, "udp"},
-{"novar-alarm", {NULL}, 23401, "tcp"},
-{"novar-alarm", {NULL}, 23401, "udp"},
-{"novar-global", {NULL}, 23402, "tcp"},
-{"novar-global", {NULL}, 23402, "udp"},
-{"aequus", {NULL}, 23456, "tcp"},
-{"aequus-alt", {NULL}, 23457, "tcp"},
-{"med-ltp", {NULL}, 24000, "tcp"},
-{"med-ltp", {NULL}, 24000, "udp"},
-{"med-fsp-rx", {NULL}, 24001, "tcp"},
-{"med-fsp-rx", {NULL}, 24001, "udp"},
-{"med-fsp-tx", {NULL}, 24002, "tcp"},
-{"med-fsp-tx", {NULL}, 24002, "udp"},
-{"med-supp", {NULL}, 24003, "tcp"},
-{"med-supp", {NULL}, 24003, "udp"},
-{"med-ovw", {NULL}, 24004, "tcp"},
-{"med-ovw", {NULL}, 24004, "udp"},
-{"med-ci", {NULL}, 24005, "tcp"},
-{"med-ci", {NULL}, 24005, "udp"},
-{"med-net-svc", {NULL}, 24006, "tcp"},
-{"med-net-svc", {NULL}, 24006, "udp"},
-{"filesphere", {NULL}, 24242, "tcp"},
-{"filesphere", {NULL}, 24242, "udp"},
-{"vista-4gl", {NULL}, 24249, "tcp"},
-{"vista-4gl", {NULL}, 24249, "udp"},
-{"ild", {NULL}, 24321, "tcp"},
-{"ild", {NULL}, 24321, "udp"},
-{"intel_rci", {NULL}, 24386, "tcp"},
-{"intel_rci", {NULL}, 24386, "udp"},
-{"tonidods", {NULL}, 24465, "tcp"},
-{"tonidods", {NULL}, 24465, "udp"},
-{"binkp", {NULL}, 24554, "tcp"},
-{"binkp", {NULL}, 24554, "udp"},
-{"canditv", {NULL}, 24676, "tcp"},
-{"canditv", {NULL}, 24676, "udp"},
-{"flashfiler", {NULL}, 24677, "tcp"},
-{"flashfiler", {NULL}, 24677, "udp"},
-{"proactivate", {NULL}, 24678, "tcp"},
-{"proactivate", {NULL}, 24678, "udp"},
-{"tcc-http", {NULL}, 24680, "tcp"},
-{"tcc-http", {NULL}, 24680, "udp"},
-{"cslg", {NULL}, 24754, "tcp"},
-{"find", {NULL}, 24922, "tcp"},
-{"find", {NULL}, 24922, "udp"},
-{"icl-twobase1", {NULL}, 25000, "tcp"},
-{"icl-twobase1", {NULL}, 25000, "udp"},
-{"icl-twobase2", {NULL}, 25001, "tcp"},
-{"icl-twobase2", {NULL}, 25001, "udp"},
-{"icl-twobase3", {NULL}, 25002, "tcp"},
-{"icl-twobase3", {NULL}, 25002, "udp"},
-{"icl-twobase4", {NULL}, 25003, "tcp"},
-{"icl-twobase4", {NULL}, 25003, "udp"},
-{"icl-twobase5", {NULL}, 25004, "tcp"},
-{"icl-twobase5", {NULL}, 25004, "udp"},
-{"icl-twobase6", {NULL}, 25005, "tcp"},
-{"icl-twobase6", {NULL}, 25005, "udp"},
-{"icl-twobase7", {NULL}, 25006, "tcp"},
-{"icl-twobase7", {NULL}, 25006, "udp"},
-{"icl-twobase8", {NULL}, 25007, "tcp"},
-{"icl-twobase8", {NULL}, 25007, "udp"},
-{"icl-twobase9", {NULL}, 25008, "tcp"},
-{"icl-twobase9", {NULL}, 25008, "udp"},
-{"icl-twobase10", {NULL}, 25009, "tcp"},
-{"icl-twobase10", {NULL}, 25009, "udp"},
-{"rna", {NULL}, 25471, "sctp"},
-{"sauterdongle", {NULL}, 25576, "tcp"},
-{"vocaltec-hos", {NULL}, 25793, "tcp"},
-{"vocaltec-hos", {NULL}, 25793, "udp"},
-{"tasp-net", {NULL}, 25900, "tcp"},
-{"tasp-net", {NULL}, 25900, "udp"},
-{"niobserver", {NULL}, 25901, "tcp"},
-{"niobserver", {NULL}, 25901, "udp"},
-{"nilinkanalyst", {NULL}, 25902, "tcp"},
-{"nilinkanalyst", {NULL}, 25902, "udp"},
-{"niprobe", {NULL}, 25903, "tcp"},
-{"niprobe", {NULL}, 25903, "udp"},
-{"quake", {NULL}, 26000, "tcp"},
-{"quake", {NULL}, 26000, "udp"},
-{"scscp", {NULL}, 26133, "tcp"},
-{"scscp", {NULL}, 26133, "udp"},
-{"wnn6-ds", {NULL}, 26208, "tcp"},
-{"wnn6-ds", {NULL}, 26208, "udp"},
-{"ezproxy", {NULL}, 26260, "tcp"},
-{"ezproxy", {NULL}, 26260, "udp"},
-{"ezmeeting", {NULL}, 26261, "tcp"},
-{"ezmeeting", {NULL}, 26261, "udp"},
-{"k3software-svr", {NULL}, 26262, "tcp"},
-{"k3software-svr", {NULL}, 26262, "udp"},
-{"k3software-cli", {NULL}, 26263, "tcp"},
-{"k3software-cli", {NULL}, 26263, "udp"},
-{"exoline-tcp", {NULL}, 26486, "tcp"},
-{"exoline-udp", {NULL}, 26486, "udp"},
-{"exoconfig", {NULL}, 26487, "tcp"},
-{"exoconfig", {NULL}, 26487, "udp"},
-{"exonet", {NULL}, 26489, "tcp"},
-{"exonet", {NULL}, 26489, "udp"},
-{"imagepump", {NULL}, 27345, "tcp"},
-{"imagepump", {NULL}, 27345, "udp"},
-{"jesmsjc", {NULL}, 27442, "tcp"},
-{"jesmsjc", {NULL}, 27442, "udp"},
-{"kopek-httphead", {NULL}, 27504, "tcp"},
-{"kopek-httphead", {NULL}, 27504, "udp"},
-{"ars-vista", {NULL}, 27782, "tcp"},
-{"ars-vista", {NULL}, 27782, "udp"},
-{"tw-auth-key", {NULL}, 27999, "tcp"},
-{"tw-auth-key", {NULL}, 27999, "udp"},
-{"nxlmd", {NULL}, 28000, "tcp"},
-{"nxlmd", {NULL}, 28000, "udp"},
-{"pqsp", {NULL}, 28001, "tcp"},
-{"siemensgsm", {NULL}, 28240, "tcp"},
-{"siemensgsm", {NULL}, 28240, "udp"},
-{"sgsap", {NULL}, 29118, "sctp"},
-{"otmp", {NULL}, 29167, "tcp"},
-{"otmp", {NULL}, 29167, "udp"},
-{"sbcap", {NULL}, 29168, "sctp"},
-{"iuhsctpassoc", {NULL}, 29169, "sctp"},
-{"pago-services1", {NULL}, 30001, "tcp"},
-{"pago-services1", {NULL}, 30001, "udp"},
-{"pago-services2", {NULL}, 30002, "tcp"},
-{"pago-services2", {NULL}, 30002, "udp"},
-{"kingdomsonline", {NULL}, 30260, "tcp"},
-{"kingdomsonline", {NULL}, 30260, "udp"},
-{"ovobs", {NULL}, 30999, "tcp"},
-{"ovobs", {NULL}, 30999, "udp"},
-{"autotrac-acp", {NULL}, 31020, "tcp"},
-{"yawn", {NULL}, 31029, "udp"},
-{"xqosd", {NULL}, 31416, "tcp"},
-{"xqosd", {NULL}, 31416, "udp"},
-{"tetrinet", {NULL}, 31457, "tcp"},
-{"tetrinet", {NULL}, 31457, "udp"},
-{"lm-mon", {NULL}, 31620, "tcp"},
-{"lm-mon", {NULL}, 31620, "udp"},
-{"dsx_monitor", {NULL}, 31685, "tcp"},
-{"gamesmith-port", {NULL}, 31765, "tcp"},
-{"gamesmith-port", {NULL}, 31765, "udp"},
-{"iceedcp_tx", {NULL}, 31948, "tcp"},
-{"iceedcp_tx", {NULL}, 31948, "udp"},
-{"iceedcp_rx", {NULL}, 31949, "tcp"},
-{"iceedcp_rx", {NULL}, 31949, "udp"},
-{"iracinghelper", {NULL}, 32034, "tcp"},
-{"iracinghelper", {NULL}, 32034, "udp"},
-{"t1distproc60", {NULL}, 32249, "tcp"},
-{"t1distproc60", {NULL}, 32249, "udp"},
-{"apm-link", {NULL}, 32483, "tcp"},
-{"apm-link", {NULL}, 32483, "udp"},
-{"sec-ntb-clnt", {NULL}, 32635, "tcp"},
-{"sec-ntb-clnt", {NULL}, 32635, "udp"},
-{"DMExpress", {NULL}, 32636, "tcp"},
-{"DMExpress", {NULL}, 32636, "udp"},
-{"filenet-powsrm", {NULL}, 32767, "tcp"},
-{"filenet-powsrm", {NULL}, 32767, "udp"},
-{"filenet-tms", {NULL}, 32768, "tcp"},
-{"filenet-tms", {NULL}, 32768, "udp"},
-{"filenet-rpc", {NULL}, 32769, "tcp"},
-{"filenet-rpc", {NULL}, 32769, "udp"},
-{"filenet-nch", {NULL}, 32770, "tcp"},
-{"filenet-nch", {NULL}, 32770, "udp"},
-{"filenet-rmi", {NULL}, 32771, "tcp"},
-{"filenet-rmi", {NULL}, 32771, "udp"},
-{"filenet-pa", {NULL}, 32772, "tcp"},
-{"filenet-pa", {NULL}, 32772, "udp"},
-{"filenet-cm", {NULL}, 32773, "tcp"},
-{"filenet-cm", {NULL}, 32773, "udp"},
-{"filenet-re", {NULL}, 32774, "tcp"},
-{"filenet-re", {NULL}, 32774, "udp"},
-{"filenet-pch", {NULL}, 32775, "tcp"},
-{"filenet-pch", {NULL}, 32775, "udp"},
-{"filenet-peior", {NULL}, 32776, "tcp"},
-{"filenet-peior", {NULL}, 32776, "udp"},
-{"filenet-obrok", {NULL}, 32777, "tcp"},
-{"filenet-obrok", {NULL}, 32777, "udp"},
-{"mlsn", {NULL}, 32801, "tcp"},
-{"mlsn", {NULL}, 32801, "udp"},
-{"retp", {NULL}, 32811, "tcp"},
-{"idmgratm", {NULL}, 32896, "tcp"},
-{"idmgratm", {NULL}, 32896, "udp"},
-{"aurora-balaena", {NULL}, 33123, "tcp"},
-{"aurora-balaena", {NULL}, 33123, "udp"},
-{"diamondport", {NULL}, 33331, "tcp"},
-{"diamondport", {NULL}, 33331, "udp"},
-{"dgi-serv", {NULL}, 33333, "tcp"},
-{"traceroute", {NULL}, 33434, "tcp"},
-{"traceroute", {NULL}, 33434, "udp"},
-{"snip-slave", {NULL}, 33656, "tcp"},
-{"snip-slave", {NULL}, 33656, "udp"},
-{"turbonote-2", {NULL}, 34249, "tcp"},
-{"turbonote-2", {NULL}, 34249, "udp"},
-{"p-net-local", {NULL}, 34378, "tcp"},
-{"p-net-local", {NULL}, 34378, "udp"},
-{"p-net-remote", {NULL}, 34379, "tcp"},
-{"p-net-remote", {NULL}, 34379, "udp"},
-{"dhanalakshmi", {NULL}, 34567, "tcp"},
-{"profinet-rt", {NULL}, 34962, "tcp"},
-{"profinet-rt", {NULL}, 34962, "udp"},
-{"profinet-rtm", {NULL}, 34963, "tcp"},
-{"profinet-rtm", {NULL}, 34963, "udp"},
-{"profinet-cm", {NULL}, 34964, "tcp"},
-{"profinet-cm", {NULL}, 34964, "udp"},
-{"ethercat", {NULL}, 34980, "tcp"},
-{"ethercat", {NULL}, 34980, "udp"},
-{"allpeers", {NULL}, 36001, "tcp"},
-{"allpeers", {NULL}, 36001, "udp"},
-{"s1-control", {NULL}, 36412, "sctp"},
-{"x2-control", {NULL}, 36422, "sctp"},
-{"m2ap", {NULL}, 36443, "sctp"},
-{"m3ap", {NULL}, 36444, "sctp"},
-{"kastenxpipe", {NULL}, 36865, "tcp"},
-{"kastenxpipe", {NULL}, 36865, "udp"},
-{"neckar", {NULL}, 37475, "tcp"},
-{"neckar", {NULL}, 37475, "udp"},
-{"unisys-eportal", {NULL}, 37654, "tcp"},
-{"unisys-eportal", {NULL}, 37654, "udp"},
-{"galaxy7-data", {NULL}, 38201, "tcp"},
-{"galaxy7-data", {NULL}, 38201, "udp"},
-{"fairview", {NULL}, 38202, "tcp"},
-{"fairview", {NULL}, 38202, "udp"},
-{"agpolicy", {NULL}, 38203, "tcp"},
-{"agpolicy", {NULL}, 38203, "udp"},
-{"turbonote-1", {NULL}, 39681, "tcp"},
-{"turbonote-1", {NULL}, 39681, "udp"},
-{"safetynetp", {NULL}, 40000, "tcp"},
-{"safetynetp", {NULL}, 40000, "udp"},
-{"cscp", {NULL}, 40841, "tcp"},
-{"cscp", {NULL}, 40841, "udp"},
-{"csccredir", {NULL}, 40842, "tcp"},
-{"csccredir", {NULL}, 40842, "udp"},
-{"csccfirewall", {NULL}, 40843, "tcp"},
-{"csccfirewall", {NULL}, 40843, "udp"},
-{"ortec-disc", {NULL}, 40853, "udp"},
-{"fs-qos", {NULL}, 41111, "tcp"},
-{"fs-qos", {NULL}, 41111, "udp"},
-{"tentacle", {NULL}, 41121, "tcp"},
-{"crestron-cip", {NULL}, 41794, "tcp"},
-{"crestron-cip", {NULL}, 41794, "udp"},
-{"crestron-ctp", {NULL}, 41795, "tcp"},
-{"crestron-ctp", {NULL}, 41795, "udp"},
-{"candp", {NULL}, 42508, "tcp"},
-{"candp", {NULL}, 42508, "udp"},
-{"candrp", {NULL}, 42509, "tcp"},
-{"candrp", {NULL}, 42509, "udp"},
-{"caerpc", {NULL}, 42510, "tcp"},
-{"caerpc", {NULL}, 42510, "udp"},
-{"reachout", {NULL}, 43188, "tcp"},
-{"reachout", {NULL}, 43188, "udp"},
-{"ndm-agent-port", {NULL}, 43189, "tcp"},
-{"ndm-agent-port", {NULL}, 43189, "udp"},
-{"ip-provision", {NULL}, 43190, "tcp"},
-{"ip-provision", {NULL}, 43190, "udp"},
-{"noit-transport", {NULL}, 43191, "tcp"},
-{"ew-mgmt", {NULL}, 43440, "tcp"},
-{"ew-disc-cmd", {NULL}, 43440, "udp"},
-{"ciscocsdb", {NULL}, 43441, "tcp"},
-{"ciscocsdb", {NULL}, 43441, "udp"},
-{"pmcd", {NULL}, 44321, "tcp"},
-{"pmcd", {NULL}, 44321, "udp"},
-{"pmcdproxy", {NULL}, 44322, "tcp"},
-{"pmcdproxy", {NULL}, 44322, "udp"},
-{"pcp", {NULL}, 44323, "udp"},
-{"rbr-debug", {NULL}, 44553, "tcp"},
-{"rbr-debug", {NULL}, 44553, "udp"},
-{"EtherNet/IP-2", {NULL}, 44818, "tcp"},
-{"EtherNet/IP-2", {NULL}, 44818, "udp"},
-{"invision-ag", {NULL}, 45054, "tcp"},
-{"invision-ag", {NULL}, 45054, "udp"},
-{"eba", {NULL}, 45678, "tcp"},
-{"eba", {NULL}, 45678, "udp"},
-{"qdb2service", {NULL}, 45825, "tcp"},
-{"qdb2service", {NULL}, 45825, "udp"},
-{"ssr-servermgr", {NULL}, 45966, "tcp"},
-{"ssr-servermgr", {NULL}, 45966, "udp"},
-{"mediabox", {NULL}, 46999, "tcp"},
-{"mediabox", {NULL}, 46999, "udp"},
-{"mbus", {NULL}, 47000, "tcp"},
-{"mbus", {NULL}, 47000, "udp"},
-{"winrm", {NULL}, 47001, "tcp"},
-{"dbbrowse", {NULL}, 47557, "tcp"},
-{"dbbrowse", {NULL}, 47557, "udp"},
-{"directplaysrvr", {NULL}, 47624, "tcp"},
-{"directplaysrvr", {NULL}, 47624, "udp"},
-{"ap", {NULL}, 47806, "tcp"},
-{"ap", {NULL}, 47806, "udp"},
-{"bacnet", {NULL}, 47808, "tcp"},
-{"bacnet", {NULL}, 47808, "udp"},
-{"nimcontroller", {NULL}, 48000, "tcp"},
-{"nimcontroller", {NULL}, 48000, "udp"},
-{"nimspooler", {NULL}, 48001, "tcp"},
-{"nimspooler", {NULL}, 48001, "udp"},
-{"nimhub", {NULL}, 48002, "tcp"},
-{"nimhub", {NULL}, 48002, "udp"},
-{"nimgtw", {NULL}, 48003, "tcp"},
-{"nimgtw", {NULL}, 48003, "udp"},
-{"nimbusdb", {NULL}, 48004, "tcp"},
-{"nimbusdbctrl", {NULL}, 48005, "tcp"},
-{"3gpp-cbsp", {NULL}, 48049, "tcp"},
-{"isnetserv", {NULL}, 48128, "tcp"},
-{"isnetserv", {NULL}, 48128, "udp"},
-{"blp5", {NULL}, 48129, "tcp"},
-{"blp5", {NULL}, 48129, "udp"},
-{"com-bardac-dw", {NULL}, 48556, "tcp"},
-{"com-bardac-dw", {NULL}, 48556, "udp"},
-{"iqobject", {NULL}, 48619, "tcp"},
-{"iqobject", {NULL}, 48619, "udp"},
-#endif /* USE_IANA_REGISTERED_PORTS */
-{ NULL, {NULL}, 0, NULL }
+# ifdef USE_IANA_WELL_KNOWN_PORTS
+ {"tcpmux", { NULL }, 1, "tcp" },
+ { "tcpmux", { NULL }, 1, "udp" },
+ { "compressnet", { NULL }, 2, "tcp" },
+ { "compressnet", { NULL }, 2, "udp" },
+ { "compressnet", { NULL }, 3, "tcp" },
+ { "compressnet", { NULL }, 3, "udp" },
+ { "rje", { NULL }, 5, "tcp" },
+ { "rje", { NULL }, 5, "udp" },
+ { "echo", { NULL }, 7, "tcp" },
+ { "echo", { NULL }, 7, "udp" },
+ { "discard", { NULL }, 9, "tcp" },
+ { "discard", { NULL }, 9, "udp" },
+ { "discard", { NULL }, 9, "sctp"},
+ { "discard", { NULL }, 9, "dccp"},
+ { "systat", { NULL }, 11, "tcp" },
+ { "systat", { NULL }, 11, "udp" },
+ { "daytime", { NULL }, 13, "tcp" },
+ { "daytime", { NULL }, 13, "udp" },
+ { "qotd", { NULL }, 17, "tcp" },
+ { "qotd", { NULL }, 17, "udp" },
+ { "msp", { NULL }, 18, "tcp" },
+ { "msp", { NULL }, 18, "udp" },
+ { "chargen", { NULL }, 19, "tcp" },
+ { "chargen", { NULL }, 19, "udp" },
+ { "ftp-data", { NULL }, 20, "tcp" },
+ { "ftp-data", { NULL }, 20, "udp" },
+ { "ftp-data", { NULL }, 20, "sctp"},
+ { "ftp", { NULL }, 21, "tcp" },
+ { "ftp", { NULL }, 21, "udp" },
+ { "ftp", { NULL }, 21, "sctp"},
+ { "ssh", { NULL }, 22, "tcp" },
+ { "ssh", { NULL }, 22, "udp" },
+ { "ssh", { NULL }, 22, "sctp"},
+ { "telnet", { NULL }, 23, "tcp" },
+ { "telnet", { NULL }, 23, "udp" },
+ { "smtp", { NULL }, 25, "tcp" },
+ { "smtp", { NULL }, 25, "udp" },
+ { "nsw-fe", { NULL }, 27, "tcp" },
+ { "nsw-fe", { NULL }, 27, "udp" },
+ { "msg-icp", { NULL }, 29, "tcp" },
+ { "msg-icp", { NULL }, 29, "udp" },
+ { "msg-auth", { NULL }, 31, "tcp" },
+ { "msg-auth", { NULL }, 31, "udp" },
+ { "dsp", { NULL }, 33, "tcp" },
+ { "dsp", { NULL }, 33, "udp" },
+ { "time", { NULL }, 37, "tcp" },
+ { "time", { NULL }, 37, "udp" },
+ { "rap", { NULL }, 38, "tcp" },
+ { "rap", { NULL }, 38, "udp" },
+ { "rlp", { NULL }, 39, "tcp" },
+ { "rlp", { NULL }, 39, "udp" },
+ { "graphics", { NULL }, 41, "tcp" },
+ { "graphics", { NULL }, 41, "udp" },
+ { "name", { NULL }, 42, "tcp" },
+ { "name", { NULL }, 42, "udp" },
+ { "nameserver", { NULL }, 42, "tcp" },
+ { "nameserver", { NULL }, 42, "udp" },
+ { "nicname", { NULL }, 43, "tcp" },
+ { "nicname", { NULL }, 43, "udp" },
+ { "mpm-flags", { NULL }, 44, "tcp" },
+ { "mpm-flags", { NULL }, 44, "udp" },
+ { "mpm", { NULL }, 45, "tcp" },
+ { "mpm", { NULL }, 45, "udp" },
+ { "mpm-snd", { NULL }, 46, "tcp" },
+ { "mpm-snd", { NULL }, 46, "udp" },
+ { "ni-ftp", { NULL }, 47, "tcp" },
+ { "ni-ftp", { NULL }, 47, "udp" },
+ { "auditd", { NULL }, 48, "tcp" },
+ { "auditd", { NULL }, 48, "udp" },
+ { "tacacs", { NULL }, 49, "tcp" },
+ { "tacacs", { NULL }, 49, "udp" },
+ { "re-mail-ck", { NULL }, 50, "tcp" },
+ { "re-mail-ck", { NULL }, 50, "udp" },
+ { "la-maint", { NULL }, 51, "tcp" },
+ { "la-maint", { NULL }, 51, "udp" },
+ { "xns-time", { NULL }, 52, "tcp" },
+ { "xns-time", { NULL }, 52, "udp" },
+ { "domain", { NULL }, 53, "tcp" },
+ { "domain", { NULL }, 53, "udp" },
+ { "xns-ch", { NULL }, 54, "tcp" },
+ { "xns-ch", { NULL }, 54, "udp" },
+ { "isi-gl", { NULL }, 55, "tcp" },
+ { "isi-gl", { NULL }, 55, "udp" },
+ { "xns-auth", { NULL }, 56, "tcp" },
+ { "xns-auth", { NULL }, 56, "udp" },
+ { "xns-mail", { NULL }, 58, "tcp" },
+ { "xns-mail", { NULL }, 58, "udp" },
+ { "ni-mail", { NULL }, 61, "tcp" },
+ { "ni-mail", { NULL }, 61, "udp" },
+ { "acas", { NULL }, 62, "tcp" },
+ { "acas", { NULL }, 62, "udp" },
+ { "whois++", { NULL }, 63, "tcp" },
+ { "whois++", { NULL }, 63, "udp" },
+ { "covia", { NULL }, 64, "tcp" },
+ { "covia", { NULL }, 64, "udp" },
+ { "tacacs-ds", { NULL }, 65, "tcp" },
+ { "tacacs-ds", { NULL }, 65, "udp" },
+ { "sql*net", { NULL }, 66, "tcp" },
+ { "sql*net", { NULL }, 66, "udp" },
+ { "bootps", { NULL }, 67, "tcp" },
+ { "bootps", { NULL }, 67, "udp" },
+ { "bootpc", { NULL }, 68, "tcp" },
+ { "bootpc", { NULL }, 68, "udp" },
+ { "tftp", { NULL }, 69, "tcp" },
+ { "tftp", { NULL }, 69, "udp" },
+ { "gopher", { NULL }, 70, "tcp" },
+ { "gopher", { NULL }, 70, "udp" },
+ { "netrjs-1", { NULL }, 71, "tcp" },
+ { "netrjs-1", { NULL }, 71, "udp" },
+ { "netrjs-2", { NULL }, 72, "tcp" },
+ { "netrjs-2", { NULL }, 72, "udp" },
+ { "netrjs-3", { NULL }, 73, "tcp" },
+ { "netrjs-3", { NULL }, 73, "udp" },
+ { "netrjs-4", { NULL }, 74, "tcp" },
+ { "netrjs-4", { NULL }, 74, "udp" },
+ { "deos", { NULL }, 76, "tcp" },
+ { "deos", { NULL }, 76, "udp" },
+ { "vettcp", { NULL }, 78, "tcp" },
+ { "vettcp", { NULL }, 78, "udp" },
+ { "finger", { NULL }, 79, "tcp" },
+ { "finger", { NULL }, 79, "udp" },
+ { "http", { NULL }, 80, "tcp" },
+ { "http", { NULL }, 80, "udp" },
+ { "www", { NULL }, 80, "tcp" },
+ { "www", { NULL }, 80, "udp" },
+ { "www-http", { NULL }, 80, "tcp" },
+ { "www-http", { NULL }, 80, "udp" },
+ { "http", { NULL }, 80, "sctp"},
+ { "xfer", { NULL }, 82, "tcp" },
+ { "xfer", { NULL }, 82, "udp" },
+ { "mit-ml-dev", { NULL }, 83, "tcp" },
+ { "mit-ml-dev", { NULL }, 83, "udp" },
+ { "ctf", { NULL }, 84, "tcp" },
+ { "ctf", { NULL }, 84, "udp" },
+ { "mit-ml-dev", { NULL }, 85, "tcp" },
+ { "mit-ml-dev", { NULL }, 85, "udp" },
+ { "mfcobol", { NULL }, 86, "tcp" },
+ { "mfcobol", { NULL }, 86, "udp" },
+ { "kerberos", { NULL }, 88, "tcp" },
+ { "kerberos", { NULL }, 88, "udp" },
+ { "su-mit-tg", { NULL }, 89, "tcp" },
+ { "su-mit-tg", { NULL }, 89, "udp" },
+ { "dnsix", { NULL }, 90, "tcp" },
+ { "dnsix", { NULL }, 90, "udp" },
+ { "mit-dov", { NULL }, 91, "tcp" },
+ { "mit-dov", { NULL }, 91, "udp" },
+ { "npp", { NULL }, 92, "tcp" },
+ { "npp", { NULL }, 92, "udp" },
+ { "dcp", { NULL }, 93, "tcp" },
+ { "dcp", { NULL }, 93, "udp" },
+ { "objcall", { NULL }, 94, "tcp" },
+ { "objcall", { NULL }, 94, "udp" },
+ { "supdup", { NULL }, 95, "tcp" },
+ { "supdup", { NULL }, 95, "udp" },
+ { "dixie", { NULL }, 96, "tcp" },
+ { "dixie", { NULL }, 96, "udp" },
+ { "swift-rvf", { NULL }, 97, "tcp" },
+ { "swift-rvf", { NULL }, 97, "udp" },
+ { "tacnews", { NULL }, 98, "tcp" },
+ { "tacnews", { NULL }, 98, "udp" },
+ { "metagram", { NULL }, 99, "tcp" },
+ { "metagram", { NULL }, 99, "udp" },
+ { "newacct", { NULL }, 100, "tcp" },
+ { "hostname", { NULL }, 101, "tcp" },
+ { "hostname", { NULL }, 101, "udp" },
+ { "iso-tsap", { NULL }, 102, "tcp" },
+ { "iso-tsap", { NULL }, 102, "udp" },
+ { "gppitnp", { NULL }, 103, "tcp" },
+ { "gppitnp", { NULL }, 103, "udp" },
+ { "acr-nema", { NULL }, 104, "tcp" },
+ { "acr-nema", { NULL }, 104, "udp" },
+ { "cso", { NULL }, 105, "tcp" },
+ { "cso", { NULL }, 105, "udp" },
+ { "csnet-ns", { NULL }, 105, "tcp" },
+ { "csnet-ns", { NULL }, 105, "udp" },
+ { "3com-tsmux", { NULL }, 106, "tcp" },
+ { "3com-tsmux", { NULL }, 106, "udp" },
+ { "rtelnet", { NULL }, 107, "tcp" },
+ { "rtelnet", { NULL }, 107, "udp" },
+ { "snagas", { NULL }, 108, "tcp" },
+ { "snagas", { NULL }, 108, "udp" },
+ { "pop2", { NULL }, 109, "tcp" },
+ { "pop2", { NULL }, 109, "udp" },
+ { "pop3", { NULL }, 110, "tcp" },
+ { "pop3", { NULL }, 110, "udp" },
+ { "sunrpc", { NULL }, 111, "tcp" },
+ { "sunrpc", { NULL }, 111, "udp" },
+ { "mcidas", { NULL }, 112, "tcp" },
+ { "mcidas", { NULL }, 112, "udp" },
+ { "ident", { NULL }, 113, "tcp" },
+ { "auth", { NULL }, 113, "tcp" },
+ { "auth", { NULL }, 113, "udp" },
+ { "sftp", { NULL }, 115, "tcp" },
+ { "sftp", { NULL }, 115, "udp" },
+ { "ansanotify", { NULL }, 116, "tcp" },
+ { "ansanotify", { NULL }, 116, "udp" },
+ { "uucp-path", { NULL }, 117, "tcp" },
+ { "uucp-path", { NULL }, 117, "udp" },
+ { "sqlserv", { NULL }, 118, "tcp" },
+ { "sqlserv", { NULL }, 118, "udp" },
+ { "nntp", { NULL }, 119, "tcp" },
+ { "nntp", { NULL }, 119, "udp" },
+ { "cfdptkt", { NULL }, 120, "tcp" },
+ { "cfdptkt", { NULL }, 120, "udp" },
+ { "erpc", { NULL }, 121, "tcp" },
+ { "erpc", { NULL }, 121, "udp" },
+ { "smakynet", { NULL }, 122, "tcp" },
+ { "smakynet", { NULL }, 122, "udp" },
+ { "ntp", { NULL }, 123, "tcp" },
+ { "ntp", { NULL }, 123, "udp" },
+ { "ansatrader", { NULL }, 124, "tcp" },
+ { "ansatrader", { NULL }, 124, "udp" },
+ { "locus-map", { NULL }, 125, "tcp" },
+ { "locus-map", { NULL }, 125, "udp" },
+ { "nxedit", { NULL }, 126, "tcp" },
+ { "nxedit", { NULL }, 126, "udp" },
+ { "locus-con", { NULL }, 127, "tcp" },
+ { "locus-con", { NULL }, 127, "udp" },
+ { "gss-xlicen", { NULL }, 128, "tcp" },
+ { "gss-xlicen", { NULL }, 128, "udp" },
+ { "pwdgen", { NULL }, 129, "tcp" },
+ { "pwdgen", { NULL }, 129, "udp" },
+ { "cisco-fna", { NULL }, 130, "tcp" },
+ { "cisco-fna", { NULL }, 130, "udp" },
+ { "cisco-tna", { NULL }, 131, "tcp" },
+ { "cisco-tna", { NULL }, 131, "udp" },
+ { "cisco-sys", { NULL }, 132, "tcp" },
+ { "cisco-sys", { NULL }, 132, "udp" },
+ { "statsrv", { NULL }, 133, "tcp" },
+ { "statsrv", { NULL }, 133, "udp" },
+ { "ingres-net", { NULL }, 134, "tcp" },
+ { "ingres-net", { NULL }, 134, "udp" },
+ { "epmap", { NULL }, 135, "tcp" },
+ { "epmap", { NULL }, 135, "udp" },
+ { "profile", { NULL }, 136, "tcp" },
+ { "profile", { NULL }, 136, "udp" },
+ { "netbios-ns", { NULL }, 137, "tcp" },
+ { "netbios-ns", { NULL }, 137, "udp" },
+ { "netbios-dgm", { NULL }, 138, "tcp" },
+ { "netbios-dgm", { NULL }, 138, "udp" },
+ { "netbios-ssn", { NULL }, 139, "tcp" },
+ { "netbios-ssn", { NULL }, 139, "udp" },
+ { "emfis-data", { NULL }, 140, "tcp" },
+ { "emfis-data", { NULL }, 140, "udp" },
+ { "emfis-cntl", { NULL }, 141, "tcp" },
+ { "emfis-cntl", { NULL }, 141, "udp" },
+ { "bl-idm", { NULL }, 142, "tcp" },
+ { "bl-idm", { NULL }, 142, "udp" },
+ { "imap", { NULL }, 143, "tcp" },
+ { "imap", { NULL }, 143, "udp" },
+ { "uma", { NULL }, 144, "tcp" },
+ { "uma", { NULL }, 144, "udp" },
+ { "uaac", { NULL }, 145, "tcp" },
+ { "uaac", { NULL }, 145, "udp" },
+ { "iso-tp0", { NULL }, 146, "tcp" },
+ { "iso-tp0", { NULL }, 146, "udp" },
+ { "iso-ip", { NULL }, 147, "tcp" },
+ { "iso-ip", { NULL }, 147, "udp" },
+ { "jargon", { NULL }, 148, "tcp" },
+ { "jargon", { NULL }, 148, "udp" },
+ { "aed-512", { NULL }, 149, "tcp" },
+ { "aed-512", { NULL }, 149, "udp" },
+ { "sql-net", { NULL }, 150, "tcp" },
+ { "sql-net", { NULL }, 150, "udp" },
+ { "hems", { NULL }, 151, "tcp" },
+ { "hems", { NULL }, 151, "udp" },
+ { "bftp", { NULL }, 152, "tcp" },
+ { "bftp", { NULL }, 152, "udp" },
+ { "sgmp", { NULL }, 153, "tcp" },
+ { "sgmp", { NULL }, 153, "udp" },
+ { "netsc-prod", { NULL }, 154, "tcp" },
+ { "netsc-prod", { NULL }, 154, "udp" },
+ { "netsc-dev", { NULL }, 155, "tcp" },
+ { "netsc-dev", { NULL }, 155, "udp" },
+ { "sqlsrv", { NULL }, 156, "tcp" },
+ { "sqlsrv", { NULL }, 156, "udp" },
+ { "knet-cmp", { NULL }, 157, "tcp" },
+ { "knet-cmp", { NULL }, 157, "udp" },
+ { "pcmail-srv", { NULL }, 158, "tcp" },
+ { "pcmail-srv", { NULL }, 158, "udp" },
+ { "nss-routing", { NULL }, 159, "tcp" },
+ { "nss-routing", { NULL }, 159, "udp" },
+ { "sgmp-traps", { NULL }, 160, "tcp" },
+ { "sgmp-traps", { NULL }, 160, "udp" },
+ { "snmp", { NULL }, 161, "tcp" },
+ { "snmp", { NULL }, 161, "udp" },
+ { "snmptrap", { NULL }, 162, "tcp" },
+ { "snmptrap", { NULL }, 162, "udp" },
+ { "cmip-man", { NULL }, 163, "tcp" },
+ { "cmip-man", { NULL }, 163, "udp" },
+ { "cmip-agent", { NULL }, 164, "tcp" },
+ { "cmip-agent", { NULL }, 164, "udp" },
+ { "xns-courier", { NULL }, 165, "tcp" },
+ { "xns-courier", { NULL }, 165, "udp" },
+ { "s-net", { NULL }, 166, "tcp" },
+ { "s-net", { NULL }, 166, "udp" },
+ { "namp", { NULL }, 167, "tcp" },
+ { "namp", { NULL }, 167, "udp" },
+ { "rsvd", { NULL }, 168, "tcp" },
+ { "rsvd", { NULL }, 168, "udp" },
+ { "send", { NULL }, 169, "tcp" },
+ { "send", { NULL }, 169, "udp" },
+ { "print-srv", { NULL }, 170, "tcp" },
+ { "print-srv", { NULL }, 170, "udp" },
+ { "multiplex", { NULL }, 171, "tcp" },
+ { "multiplex", { NULL }, 171, "udp" },
+ { "cl/1", { NULL }, 172, "tcp" },
+ { "cl/1", { NULL }, 172, "udp" },
+ { "xyplex-mux", { NULL }, 173, "tcp" },
+ { "xyplex-mux", { NULL }, 173, "udp" },
+ { "mailq", { NULL }, 174, "tcp" },
+ { "mailq", { NULL }, 174, "udp" },
+ { "vmnet", { NULL }, 175, "tcp" },
+ { "vmnet", { NULL }, 175, "udp" },
+ { "genrad-mux", { NULL }, 176, "tcp" },
+ { "genrad-mux", { NULL }, 176, "udp" },
+ { "xdmcp", { NULL }, 177, "tcp" },
+ { "xdmcp", { NULL }, 177, "udp" },
+ { "nextstep", { NULL }, 178, "tcp" },
+ { "nextstep", { NULL }, 178, "udp" },
+ { "bgp", { NULL }, 179, "tcp" },
+ { "bgp", { NULL }, 179, "udp" },
+ { "bgp", { NULL }, 179, "sctp"},
+ { "ris", { NULL }, 180, "tcp" },
+ { "ris", { NULL }, 180, "udp" },
+ { "unify", { NULL }, 181, "tcp" },
+ { "unify", { NULL }, 181, "udp" },
+ { "audit", { NULL }, 182, "tcp" },
+ { "audit", { NULL }, 182, "udp" },
+ { "ocbinder", { NULL }, 183, "tcp" },
+ { "ocbinder", { NULL }, 183, "udp" },
+ { "ocserver", { NULL }, 184, "tcp" },
+ { "ocserver", { NULL }, 184, "udp" },
+ { "remote-kis", { NULL }, 185, "tcp" },
+ { "remote-kis", { NULL }, 185, "udp" },
+ { "kis", { NULL }, 186, "tcp" },
+ { "kis", { NULL }, 186, "udp" },
+ { "aci", { NULL }, 187, "tcp" },
+ { "aci", { NULL }, 187, "udp" },
+ { "mumps", { NULL }, 188, "tcp" },
+ { "mumps", { NULL }, 188, "udp" },
+ { "qft", { NULL }, 189, "tcp" },
+ { "qft", { NULL }, 189, "udp" },
+ { "gacp", { NULL }, 190, "tcp" },
+ { "gacp", { NULL }, 190, "udp" },
+ { "prospero", { NULL }, 191, "tcp" },
+ { "prospero", { NULL }, 191, "udp" },
+ { "osu-nms", { NULL }, 192, "tcp" },
+ { "osu-nms", { NULL }, 192, "udp" },
+ { "srmp", { NULL }, 193, "tcp" },
+ { "srmp", { NULL }, 193, "udp" },
+ { "irc", { NULL }, 194, "tcp" },
+ { "irc", { NULL }, 194, "udp" },
+ { "dn6-nlm-aud", { NULL }, 195, "tcp" },
+ { "dn6-nlm-aud", { NULL }, 195, "udp" },
+ { "dn6-smm-red", { NULL }, 196, "tcp" },
+ { "dn6-smm-red", { NULL }, 196, "udp" },
+ { "dls", { NULL }, 197, "tcp" },
+ { "dls", { NULL }, 197, "udp" },
+ { "dls-mon", { NULL }, 198, "tcp" },
+ { "dls-mon", { NULL }, 198, "udp" },
+ { "smux", { NULL }, 199, "tcp" },
+ { "smux", { NULL }, 199, "udp" },
+ { "src", { NULL }, 200, "tcp" },
+ { "src", { NULL }, 200, "udp" },
+ { "at-rtmp", { NULL }, 201, "tcp" },
+ { "at-rtmp", { NULL }, 201, "udp" },
+ { "at-nbp", { NULL }, 202, "tcp" },
+ { "at-nbp", { NULL }, 202, "udp" },
+ { "at-3", { NULL }, 203, "tcp" },
+ { "at-3", { NULL }, 203, "udp" },
+ { "at-echo", { NULL }, 204, "tcp" },
+ { "at-echo", { NULL }, 204, "udp" },
+ { "at-5", { NULL }, 205, "tcp" },
+ { "at-5", { NULL }, 205, "udp" },
+ { "at-zis", { NULL }, 206, "tcp" },
+ { "at-zis", { NULL }, 206, "udp" },
+ { "at-7", { NULL }, 207, "tcp" },
+ { "at-7", { NULL }, 207, "udp" },
+ { "at-8", { NULL }, 208, "tcp" },
+ { "at-8", { NULL }, 208, "udp" },
+ { "qmtp", { NULL }, 209, "tcp" },
+ { "qmtp", { NULL }, 209, "udp" },
+ { "z39.50", { NULL }, 210, "tcp" },
+ { "z39.50", { NULL }, 210, "udp" },
+ { "914c/g", { NULL }, 211, "tcp" },
+ { "914c/g", { NULL }, 211, "udp" },
+ { "anet", { NULL }, 212, "tcp" },
+ { "anet", { NULL }, 212, "udp" },
+ { "ipx", { NULL }, 213, "tcp" },
+ { "ipx", { NULL }, 213, "udp" },
+ { "vmpwscs", { NULL }, 214, "tcp" },
+ { "vmpwscs", { NULL }, 214, "udp" },
+ { "softpc", { NULL }, 215, "tcp" },
+ { "softpc", { NULL }, 215, "udp" },
+ { "CAIlic", { NULL }, 216, "tcp" },
+ { "CAIlic", { NULL }, 216, "udp" },
+ { "dbase", { NULL }, 217, "tcp" },
+ { "dbase", { NULL }, 217, "udp" },
+ { "mpp", { NULL }, 218, "tcp" },
+ { "mpp", { NULL }, 218, "udp" },
+ { "uarps", { NULL }, 219, "tcp" },
+ { "uarps", { NULL }, 219, "udp" },
+ { "imap3", { NULL }, 220, "tcp" },
+ { "imap3", { NULL }, 220, "udp" },
+ { "fln-spx", { NULL }, 221, "tcp" },
+ { "fln-spx", { NULL }, 221, "udp" },
+ { "rsh-spx", { NULL }, 222, "tcp" },
+ { "rsh-spx", { NULL }, 222, "udp" },
+ { "cdc", { NULL }, 223, "tcp" },
+ { "cdc", { NULL }, 223, "udp" },
+ { "masqdialer", { NULL }, 224, "tcp" },
+ { "masqdialer", { NULL }, 224, "udp" },
+ { "direct", { NULL }, 242, "tcp" },
+ { "direct", { NULL }, 242, "udp" },
+ { "sur-meas", { NULL }, 243, "tcp" },
+ { "sur-meas", { NULL }, 243, "udp" },
+ { "inbusiness", { NULL }, 244, "tcp" },
+ { "inbusiness", { NULL }, 244, "udp" },
+ { "link", { NULL }, 245, "tcp" },
+ { "link", { NULL }, 245, "udp" },
+ { "dsp3270", { NULL }, 246, "tcp" },
+ { "dsp3270", { NULL }, 246, "udp" },
+ { "subntbcst_tftp", { NULL }, 247, "tcp" },
+ { "subntbcst_tftp", { NULL }, 247, "udp" },
+ { "bhfhs", { NULL }, 248, "tcp" },
+ { "bhfhs", { NULL }, 248, "udp" },
+ { "rap", { NULL }, 256, "tcp" },
+ { "rap", { NULL }, 256, "udp" },
+ { "set", { NULL }, 257, "tcp" },
+ { "set", { NULL }, 257, "udp" },
+ { "esro-gen", { NULL }, 259, "tcp" },
+ { "esro-gen", { NULL }, 259, "udp" },
+ { "openport", { NULL }, 260, "tcp" },
+ { "openport", { NULL }, 260, "udp" },
+ { "nsiiops", { NULL }, 261, "tcp" },
+ { "nsiiops", { NULL }, 261, "udp" },
+ { "arcisdms", { NULL }, 262, "tcp" },
+ { "arcisdms", { NULL }, 262, "udp" },
+ { "hdap", { NULL }, 263, "tcp" },
+ { "hdap", { NULL }, 263, "udp" },
+ { "bgmp", { NULL }, 264, "tcp" },
+ { "bgmp", { NULL }, 264, "udp" },
+ { "x-bone-ctl", { NULL }, 265, "tcp" },
+ { "x-bone-ctl", { NULL }, 265, "udp" },
+ { "sst", { NULL }, 266, "tcp" },
+ { "sst", { NULL }, 266, "udp" },
+ { "td-service", { NULL }, 267, "tcp" },
+ { "td-service", { NULL }, 267, "udp" },
+ { "td-replica", { NULL }, 268, "tcp" },
+ { "td-replica", { NULL }, 268, "udp" },
+ { "manet", { NULL }, 269, "tcp" },
+ { "manet", { NULL }, 269, "udp" },
+ { "gist", { NULL }, 270, "udp" },
+ { "http-mgmt", { NULL }, 280, "tcp" },
+ { "http-mgmt", { NULL }, 280, "udp" },
+ { "personal-link", { NULL }, 281, "tcp" },
+ { "personal-link", { NULL }, 281, "udp" },
+ { "cableport-ax", { NULL }, 282, "tcp" },
+ { "cableport-ax", { NULL }, 282, "udp" },
+ { "rescap", { NULL }, 283, "tcp" },
+ { "rescap", { NULL }, 283, "udp" },
+ { "corerjd", { NULL }, 284, "tcp" },
+ { "corerjd", { NULL }, 284, "udp" },
+ { "fxp", { NULL }, 286, "tcp" },
+ { "fxp", { NULL }, 286, "udp" },
+ { "k-block", { NULL }, 287, "tcp" },
+ { "k-block", { NULL }, 287, "udp" },
+ { "novastorbakcup", { NULL }, 308, "tcp" },
+ { "novastorbakcup", { NULL }, 308, "udp" },
+ { "entrusttime", { NULL }, 309, "tcp" },
+ { "entrusttime", { NULL }, 309, "udp" },
+ { "bhmds", { NULL }, 310, "tcp" },
+ { "bhmds", { NULL }, 310, "udp" },
+ { "asip-webadmin", { NULL }, 311, "tcp" },
+ { "asip-webadmin", { NULL }, 311, "udp" },
+ { "vslmp", { NULL }, 312, "tcp" },
+ { "vslmp", { NULL }, 312, "udp" },
+ { "magenta-logic", { NULL }, 313, "tcp" },
+ { "magenta-logic", { NULL }, 313, "udp" },
+ { "opalis-robot", { NULL }, 314, "tcp" },
+ { "opalis-robot", { NULL }, 314, "udp" },
+ { "dpsi", { NULL }, 315, "tcp" },
+ { "dpsi", { NULL }, 315, "udp" },
+ { "decauth", { NULL }, 316, "tcp" },
+ { "decauth", { NULL }, 316, "udp" },
+ { "zannet", { NULL }, 317, "tcp" },
+ { "zannet", { NULL }, 317, "udp" },
+ { "pkix-timestamp", { NULL }, 318, "tcp" },
+ { "pkix-timestamp", { NULL }, 318, "udp" },
+ { "ptp-event", { NULL }, 319, "tcp" },
+ { "ptp-event", { NULL }, 319, "udp" },
+ { "ptp-general", { NULL }, 320, "tcp" },
+ { "ptp-general", { NULL }, 320, "udp" },
+ { "pip", { NULL }, 321, "tcp" },
+ { "pip", { NULL }, 321, "udp" },
+ { "rtsps", { NULL }, 322, "tcp" },
+ { "rtsps", { NULL }, 322, "udp" },
+ { "texar", { NULL }, 333, "tcp" },
+ { "texar", { NULL }, 333, "udp" },
+ { "pdap", { NULL }, 344, "tcp" },
+ { "pdap", { NULL }, 344, "udp" },
+ { "pawserv", { NULL }, 345, "tcp" },
+ { "pawserv", { NULL }, 345, "udp" },
+ { "zserv", { NULL }, 346, "tcp" },
+ { "zserv", { NULL }, 346, "udp" },
+ { "fatserv", { NULL }, 347, "tcp" },
+ { "fatserv", { NULL }, 347, "udp" },
+ { "csi-sgwp", { NULL }, 348, "tcp" },
+ { "csi-sgwp", { NULL }, 348, "udp" },
+ { "mftp", { NULL }, 349, "tcp" },
+ { "mftp", { NULL }, 349, "udp" },
+ { "matip-type-a", { NULL }, 350, "tcp" },
+ { "matip-type-a", { NULL }, 350, "udp" },
+ { "matip-type-b", { NULL }, 351, "tcp" },
+ { "matip-type-b", { NULL }, 351, "udp" },
+ { "bhoetty", { NULL }, 351, "tcp" },
+ { "bhoetty", { NULL }, 351, "udp" },
+ { "dtag-ste-sb", { NULL }, 352, "tcp" },
+ { "dtag-ste-sb", { NULL }, 352, "udp" },
+ { "bhoedap4", { NULL }, 352, "tcp" },
+ { "bhoedap4", { NULL }, 352, "udp" },
+ { "ndsauth", { NULL }, 353, "tcp" },
+ { "ndsauth", { NULL }, 353, "udp" },
+ { "bh611", { NULL }, 354, "tcp" },
+ { "bh611", { NULL }, 354, "udp" },
+ { "datex-asn", { NULL }, 355, "tcp" },
+ { "datex-asn", { NULL }, 355, "udp" },
+ { "cloanto-net-1", { NULL }, 356, "tcp" },
+ { "cloanto-net-1", { NULL }, 356, "udp" },
+ { "bhevent", { NULL }, 357, "tcp" },
+ { "bhevent", { NULL }, 357, "udp" },
+ { "shrinkwrap", { NULL }, 358, "tcp" },
+ { "shrinkwrap", { NULL }, 358, "udp" },
+ { "nsrmp", { NULL }, 359, "tcp" },
+ { "nsrmp", { NULL }, 359, "udp" },
+ { "scoi2odialog", { NULL }, 360, "tcp" },
+ { "scoi2odialog", { NULL }, 360, "udp" },
+ { "semantix", { NULL }, 361, "tcp" },
+ { "semantix", { NULL }, 361, "udp" },
+ { "srssend", { NULL }, 362, "tcp" },
+ { "srssend", { NULL }, 362, "udp" },
+ { "rsvp_tunnel", { NULL }, 363, "tcp" },
+ { "rsvp_tunnel", { NULL }, 363, "udp" },
+ { "aurora-cmgr", { NULL }, 364, "tcp" },
+ { "aurora-cmgr", { NULL }, 364, "udp" },
+ { "dtk", { NULL }, 365, "tcp" },
+ { "dtk", { NULL }, 365, "udp" },
+ { "odmr", { NULL }, 366, "tcp" },
+ { "odmr", { NULL }, 366, "udp" },
+ { "mortgageware", { NULL }, 367, "tcp" },
+ { "mortgageware", { NULL }, 367, "udp" },
+ { "qbikgdp", { NULL }, 368, "tcp" },
+ { "qbikgdp", { NULL }, 368, "udp" },
+ { "rpc2portmap", { NULL }, 369, "tcp" },
+ { "rpc2portmap", { NULL }, 369, "udp" },
+ { "codaauth2", { NULL }, 370, "tcp" },
+ { "codaauth2", { NULL }, 370, "udp" },
+ { "clearcase", { NULL }, 371, "tcp" },
+ { "clearcase", { NULL }, 371, "udp" },
+ { "ulistproc", { NULL }, 372, "tcp" },
+ { "ulistproc", { NULL }, 372, "udp" },
+ { "legent-1", { NULL }, 373, "tcp" },
+ { "legent-1", { NULL }, 373, "udp" },
+ { "legent-2", { NULL }, 374, "tcp" },
+ { "legent-2", { NULL }, 374, "udp" },
+ { "hassle", { NULL }, 375, "tcp" },
+ { "hassle", { NULL }, 375, "udp" },
+ { "nip", { NULL }, 376, "tcp" },
+ { "nip", { NULL }, 376, "udp" },
+ { "tnETOS", { NULL }, 377, "tcp" },
+ { "tnETOS", { NULL }, 377, "udp" },
+ { "dsETOS", { NULL }, 378, "tcp" },
+ { "dsETOS", { NULL }, 378, "udp" },
+ { "is99c", { NULL }, 379, "tcp" },
+ { "is99c", { NULL }, 379, "udp" },
+ { "is99s", { NULL }, 380, "tcp" },
+ { "is99s", { NULL }, 380, "udp" },
+ { "hp-collector", { NULL }, 381, "tcp" },
+ { "hp-collector", { NULL }, 381, "udp" },
+ { "hp-managed-node", { NULL }, 382, "tcp" },
+ { "hp-managed-node", { NULL }, 382, "udp" },
+ { "hp-alarm-mgr", { NULL }, 383, "tcp" },
+ { "hp-alarm-mgr", { NULL }, 383, "udp" },
+ { "arns", { NULL }, 384, "tcp" },
+ { "arns", { NULL }, 384, "udp" },
+ { "ibm-app", { NULL }, 385, "tcp" },
+ { "ibm-app", { NULL }, 385, "udp" },
+ { "asa", { NULL }, 386, "tcp" },
+ { "asa", { NULL }, 386, "udp" },
+ { "aurp", { NULL }, 387, "tcp" },
+ { "aurp", { NULL }, 387, "udp" },
+ { "unidata-ldm", { NULL }, 388, "tcp" },
+ { "unidata-ldm", { NULL }, 388, "udp" },
+ { "ldap", { NULL }, 389, "tcp" },
+ { "ldap", { NULL }, 389, "udp" },
+ { "uis", { NULL }, 390, "tcp" },
+ { "uis", { NULL }, 390, "udp" },
+ { "synotics-relay", { NULL }, 391, "tcp" },
+ { "synotics-relay", { NULL }, 391, "udp" },
+ { "synotics-broker", { NULL }, 392, "tcp" },
+ { "synotics-broker", { NULL }, 392, "udp" },
+ { "meta5", { NULL }, 393, "tcp" },
+ { "meta5", { NULL }, 393, "udp" },
+ { "embl-ndt", { NULL }, 394, "tcp" },
+ { "embl-ndt", { NULL }, 394, "udp" },
+ { "netcp", { NULL }, 395, "tcp" },
+ { "netcp", { NULL }, 395, "udp" },
+ { "netware-ip", { NULL }, 396, "tcp" },
+ { "netware-ip", { NULL }, 396, "udp" },
+ { "mptn", { NULL }, 397, "tcp" },
+ { "mptn", { NULL }, 397, "udp" },
+ { "kryptolan", { NULL }, 398, "tcp" },
+ { "kryptolan", { NULL }, 398, "udp" },
+ { "iso-tsap-c2", { NULL }, 399, "tcp" },
+ { "iso-tsap-c2", { NULL }, 399, "udp" },
+ { "osb-sd", { NULL }, 400, "tcp" },
+ { "osb-sd", { NULL }, 400, "udp" },
+ { "ups", { NULL }, 401, "tcp" },
+ { "ups", { NULL }, 401, "udp" },
+ { "genie", { NULL }, 402, "tcp" },
+ { "genie", { NULL }, 402, "udp" },
+ { "decap", { NULL }, 403, "tcp" },
+ { "decap", { NULL }, 403, "udp" },
+ { "nced", { NULL }, 404, "tcp" },
+ { "nced", { NULL }, 404, "udp" },
+ { "ncld", { NULL }, 405, "tcp" },
+ { "ncld", { NULL }, 405, "udp" },
+ { "imsp", { NULL }, 406, "tcp" },
+ { "imsp", { NULL }, 406, "udp" },
+ { "timbuktu", { NULL }, 407, "tcp" },
+ { "timbuktu", { NULL }, 407, "udp" },
+ { "prm-sm", { NULL }, 408, "tcp" },
+ { "prm-sm", { NULL }, 408, "udp" },
+ { "prm-nm", { NULL }, 409, "tcp" },
+ { "prm-nm", { NULL }, 409, "udp" },
+ { "decladebug", { NULL }, 410, "tcp" },
+ { "decladebug", { NULL }, 410, "udp" },
+ { "rmt", { NULL }, 411, "tcp" },
+ { "rmt", { NULL }, 411, "udp" },
+ { "synoptics-trap", { NULL }, 412, "tcp" },
+ { "synoptics-trap", { NULL }, 412, "udp" },
+ { "smsp", { NULL }, 413, "tcp" },
+ { "smsp", { NULL }, 413, "udp" },
+ { "infoseek", { NULL }, 414, "tcp" },
+ { "infoseek", { NULL }, 414, "udp" },
+ { "bnet", { NULL }, 415, "tcp" },
+ { "bnet", { NULL }, 415, "udp" },
+ { "silverplatter", { NULL }, 416, "tcp" },
+ { "silverplatter", { NULL }, 416, "udp" },
+ { "onmux", { NULL }, 417, "tcp" },
+ { "onmux", { NULL }, 417, "udp" },
+ { "hyper-g", { NULL }, 418, "tcp" },
+ { "hyper-g", { NULL }, 418, "udp" },
+ { "ariel1", { NULL }, 419, "tcp" },
+ { "ariel1", { NULL }, 419, "udp" },
+ { "smpte", { NULL }, 420, "tcp" },
+ { "smpte", { NULL }, 420, "udp" },
+ { "ariel2", { NULL }, 421, "tcp" },
+ { "ariel2", { NULL }, 421, "udp" },
+ { "ariel3", { NULL }, 422, "tcp" },
+ { "ariel3", { NULL }, 422, "udp" },
+ { "opc-job-start", { NULL }, 423, "tcp" },
+ { "opc-job-start", { NULL }, 423, "udp" },
+ { "opc-job-track", { NULL }, 424, "tcp" },
+ { "opc-job-track", { NULL }, 424, "udp" },
+ { "icad-el", { NULL }, 425, "tcp" },
+ { "icad-el", { NULL }, 425, "udp" },
+ { "smartsdp", { NULL }, 426, "tcp" },
+ { "smartsdp", { NULL }, 426, "udp" },
+ { "svrloc", { NULL }, 427, "tcp" },
+ { "svrloc", { NULL }, 427, "udp" },
+ { "ocs_cmu", { NULL }, 428, "tcp" },
+ { "ocs_cmu", { NULL }, 428, "udp" },
+ { "ocs_amu", { NULL }, 429, "tcp" },
+ { "ocs_amu", { NULL }, 429, "udp" },
+ { "utmpsd", { NULL }, 430, "tcp" },
+ { "utmpsd", { NULL }, 430, "udp" },
+ { "utmpcd", { NULL }, 431, "tcp" },
+ { "utmpcd", { NULL }, 431, "udp" },
+ { "iasd", { NULL }, 432, "tcp" },
+ { "iasd", { NULL }, 432, "udp" },
+ { "nnsp", { NULL }, 433, "tcp" },
+ { "nnsp", { NULL }, 433, "udp" },
+ { "mobileip-agent", { NULL }, 434, "tcp" },
+ { "mobileip-agent", { NULL }, 434, "udp" },
+ { "mobilip-mn", { NULL }, 435, "tcp" },
+ { "mobilip-mn", { NULL }, 435, "udp" },
+ { "dna-cml", { NULL }, 436, "tcp" },
+ { "dna-cml", { NULL }, 436, "udp" },
+ { "comscm", { NULL }, 437, "tcp" },
+ { "comscm", { NULL }, 437, "udp" },
+ { "dsfgw", { NULL }, 438, "tcp" },
+ { "dsfgw", { NULL }, 438, "udp" },
+ { "dasp", { NULL }, 439, "tcp" },
+ { "dasp", { NULL }, 439, "udp" },
+ { "sgcp", { NULL }, 440, "tcp" },
+ { "sgcp", { NULL }, 440, "udp" },
+ { "decvms-sysmgt", { NULL }, 441, "tcp" },
+ { "decvms-sysmgt", { NULL }, 441, "udp" },
+ { "cvc_hostd", { NULL }, 442, "tcp" },
+ { "cvc_hostd", { NULL }, 442, "udp" },
+ { "https", { NULL }, 443, "tcp" },
+ { "https", { NULL }, 443, "udp" },
+ { "https", { NULL }, 443, "sctp"},
+ { "snpp", { NULL }, 444, "tcp" },
+ { "snpp", { NULL }, 444, "udp" },
+ { "microsoft-ds", { NULL }, 445, "tcp" },
+ { "microsoft-ds", { NULL }, 445, "udp" },
+ { "ddm-rdb", { NULL }, 446, "tcp" },
+ { "ddm-rdb", { NULL }, 446, "udp" },
+ { "ddm-dfm", { NULL }, 447, "tcp" },
+ { "ddm-dfm", { NULL }, 447, "udp" },
+ { "ddm-ssl", { NULL }, 448, "tcp" },
+ { "ddm-ssl", { NULL }, 448, "udp" },
+ { "as-servermap", { NULL }, 449, "tcp" },
+ { "as-servermap", { NULL }, 449, "udp" },
+ { "tserver", { NULL }, 450, "tcp" },
+ { "tserver", { NULL }, 450, "udp" },
+ { "sfs-smp-net", { NULL }, 451, "tcp" },
+ { "sfs-smp-net", { NULL }, 451, "udp" },
+ { "sfs-config", { NULL }, 452, "tcp" },
+ { "sfs-config", { NULL }, 452, "udp" },
+ { "creativeserver", { NULL }, 453, "tcp" },
+ { "creativeserver", { NULL }, 453, "udp" },
+ { "contentserver", { NULL }, 454, "tcp" },
+ { "contentserver", { NULL }, 454, "udp" },
+ { "creativepartnr", { NULL }, 455, "tcp" },
+ { "creativepartnr", { NULL }, 455, "udp" },
+ { "macon-tcp", { NULL }, 456, "tcp" },
+ { "macon-udp", { NULL }, 456, "udp" },
+ { "scohelp", { NULL }, 457, "tcp" },
+ { "scohelp", { NULL }, 457, "udp" },
+ { "appleqtc", { NULL }, 458, "tcp" },
+ { "appleqtc", { NULL }, 458, "udp" },
+ { "ampr-rcmd", { NULL }, 459, "tcp" },
+ { "ampr-rcmd", { NULL }, 459, "udp" },
+ { "skronk", { NULL }, 460, "tcp" },
+ { "skronk", { NULL }, 460, "udp" },
+ { "datasurfsrv", { NULL }, 461, "tcp" },
+ { "datasurfsrv", { NULL }, 461, "udp" },
+ { "datasurfsrvsec", { NULL }, 462, "tcp" },
+ { "datasurfsrvsec", { NULL }, 462, "udp" },
+ { "alpes", { NULL }, 463, "tcp" },
+ { "alpes", { NULL }, 463, "udp" },
+ { "kpasswd", { NULL }, 464, "tcp" },
+ { "kpasswd", { NULL }, 464, "udp" },
+ { "urd", { NULL }, 465, "tcp" },
+ { "igmpv3lite", { NULL }, 465, "udp" },
+ { "digital-vrc", { NULL }, 466, "tcp" },
+ { "digital-vrc", { NULL }, 466, "udp" },
+ { "mylex-mapd", { NULL }, 467, "tcp" },
+ { "mylex-mapd", { NULL }, 467, "udp" },
+ { "photuris", { NULL }, 468, "tcp" },
+ { "photuris", { NULL }, 468, "udp" },
+ { "rcp", { NULL }, 469, "tcp" },
+ { "rcp", { NULL }, 469, "udp" },
+ { "scx-proxy", { NULL }, 470, "tcp" },
+ { "scx-proxy", { NULL }, 470, "udp" },
+ { "mondex", { NULL }, 471, "tcp" },
+ { "mondex", { NULL }, 471, "udp" },
+ { "ljk-login", { NULL }, 472, "tcp" },
+ { "ljk-login", { NULL }, 472, "udp" },
+ { "hybrid-pop", { NULL }, 473, "tcp" },
+ { "hybrid-pop", { NULL }, 473, "udp" },
+ { "tn-tl-w1", { NULL }, 474, "tcp" },
+ { "tn-tl-w2", { NULL }, 474, "udp" },
+ { "tcpnethaspsrv", { NULL }, 475, "tcp" },
+ { "tcpnethaspsrv", { NULL }, 475, "udp" },
+ { "tn-tl-fd1", { NULL }, 476, "tcp" },
+ { "tn-tl-fd1", { NULL }, 476, "udp" },
+ { "ss7ns", { NULL }, 477, "tcp" },
+ { "ss7ns", { NULL }, 477, "udp" },
+ { "spsc", { NULL }, 478, "tcp" },
+ { "spsc", { NULL }, 478, "udp" },
+ { "iafserver", { NULL }, 479, "tcp" },
+ { "iafserver", { NULL }, 479, "udp" },
+ { "iafdbase", { NULL }, 480, "tcp" },
+ { "iafdbase", { NULL }, 480, "udp" },
+ { "ph", { NULL }, 481, "tcp" },
+ { "ph", { NULL }, 481, "udp" },
+ { "bgs-nsi", { NULL }, 482, "tcp" },
+ { "bgs-nsi", { NULL }, 482, "udp" },
+ { "ulpnet", { NULL }, 483, "tcp" },
+ { "ulpnet", { NULL }, 483, "udp" },
+ { "integra-sme", { NULL }, 484, "tcp" },
+ { "integra-sme", { NULL }, 484, "udp" },
+ { "powerburst", { NULL }, 485, "tcp" },
+ { "powerburst", { NULL }, 485, "udp" },
+ { "avian", { NULL }, 486, "tcp" },
+ { "avian", { NULL }, 486, "udp" },
+ { "saft", { NULL }, 487, "tcp" },
+ { "saft", { NULL }, 487, "udp" },
+ { "gss-http", { NULL }, 488, "tcp" },
+ { "gss-http", { NULL }, 488, "udp" },
+ { "nest-protocol", { NULL }, 489, "tcp" },
+ { "nest-protocol", { NULL }, 489, "udp" },
+ { "micom-pfs", { NULL }, 490, "tcp" },
+ { "micom-pfs", { NULL }, 490, "udp" },
+ { "go-login", { NULL }, 491, "tcp" },
+ { "go-login", { NULL }, 491, "udp" },
+ { "ticf-1", { NULL }, 492, "tcp" },
+ { "ticf-1", { NULL }, 492, "udp" },
+ { "ticf-2", { NULL }, 493, "tcp" },
+ { "ticf-2", { NULL }, 493, "udp" },
+ { "pov-ray", { NULL }, 494, "tcp" },
+ { "pov-ray", { NULL }, 494, "udp" },
+ { "intecourier", { NULL }, 495, "tcp" },
+ { "intecourier", { NULL }, 495, "udp" },
+ { "pim-rp-disc", { NULL }, 496, "tcp" },
+ { "pim-rp-disc", { NULL }, 496, "udp" },
+ { "dantz", { NULL }, 497, "tcp" },
+ { "dantz", { NULL }, 497, "udp" },
+ { "siam", { NULL }, 498, "tcp" },
+ { "siam", { NULL }, 498, "udp" },
+ { "iso-ill", { NULL }, 499, "tcp" },
+ { "iso-ill", { NULL }, 499, "udp" },
+ { "isakmp", { NULL }, 500, "tcp" },
+ { "isakmp", { NULL }, 500, "udp" },
+ { "stmf", { NULL }, 501, "tcp" },
+ { "stmf", { NULL }, 501, "udp" },
+ { "asa-appl-proto", { NULL }, 502, "tcp" },
+ { "asa-appl-proto", { NULL }, 502, "udp" },
+ { "intrinsa", { NULL }, 503, "tcp" },
+ { "intrinsa", { NULL }, 503, "udp" },
+ { "citadel", { NULL }, 504, "tcp" },
+ { "citadel", { NULL }, 504, "udp" },
+ { "mailbox-lm", { NULL }, 505, "tcp" },
+ { "mailbox-lm", { NULL }, 505, "udp" },
+ { "ohimsrv", { NULL }, 506, "tcp" },
+ { "ohimsrv", { NULL }, 506, "udp" },
+ { "crs", { NULL }, 507, "tcp" },
+ { "crs", { NULL }, 507, "udp" },
+ { "xvttp", { NULL }, 508, "tcp" },
+ { "xvttp", { NULL }, 508, "udp" },
+ { "snare", { NULL }, 509, "tcp" },
+ { "snare", { NULL }, 509, "udp" },
+ { "fcp", { NULL }, 510, "tcp" },
+ { "fcp", { NULL }, 510, "udp" },
+ { "passgo", { NULL }, 511, "tcp" },
+ { "passgo", { NULL }, 511, "udp" },
+ { "exec", { NULL }, 512, "tcp" },
+ { "comsat", { NULL }, 512, "udp" },
+ { "biff", { NULL }, 512, "udp" },
+ { "login", { NULL }, 513, "tcp" },
+ { "who", { NULL }, 513, "udp" },
+ { "shell", { NULL }, 514, "tcp" },
+ { "syslog", { NULL }, 514, "udp" },
+ { "printer", { NULL }, 515, "tcp" },
+ { "printer", { NULL }, 515, "udp" },
+ { "videotex", { NULL }, 516, "tcp" },
+ { "videotex", { NULL }, 516, "udp" },
+ { "talk", { NULL }, 517, "tcp" },
+ { "talk", { NULL }, 517, "udp" },
+ { "ntalk", { NULL }, 518, "tcp" },
+ { "ntalk", { NULL }, 518, "udp" },
+ { "utime", { NULL }, 519, "tcp" },
+ { "utime", { NULL }, 519, "udp" },
+ { "efs", { NULL }, 520, "tcp" },
+ { "router", { NULL }, 520, "udp" },
+ { "ripng", { NULL }, 521, "tcp" },
+ { "ripng", { NULL }, 521, "udp" },
+ { "ulp", { NULL }, 522, "tcp" },
+ { "ulp", { NULL }, 522, "udp" },
+ { "ibm-db2", { NULL }, 523, "tcp" },
+ { "ibm-db2", { NULL }, 523, "udp" },
+ { "ncp", { NULL }, 524, "tcp" },
+ { "ncp", { NULL }, 524, "udp" },
+ { "timed", { NULL }, 525, "tcp" },
+ { "timed", { NULL }, 525, "udp" },
+ { "tempo", { NULL }, 526, "tcp" },
+ { "tempo", { NULL }, 526, "udp" },
+ { "stx", { NULL }, 527, "tcp" },
+ { "stx", { NULL }, 527, "udp" },
+ { "custix", { NULL }, 528, "tcp" },
+ { "custix", { NULL }, 528, "udp" },
+ { "irc-serv", { NULL }, 529, "tcp" },
+ { "irc-serv", { NULL }, 529, "udp" },
+ { "courier", { NULL }, 530, "tcp" },
+ { "courier", { NULL }, 530, "udp" },
+ { "conference", { NULL }, 531, "tcp" },
+ { "conference", { NULL }, 531, "udp" },
+ { "netnews", { NULL }, 532, "tcp" },
+ { "netnews", { NULL }, 532, "udp" },
+ { "netwall", { NULL }, 533, "tcp" },
+ { "netwall", { NULL }, 533, "udp" },
+ { "windream", { NULL }, 534, "tcp" },
+ { "windream", { NULL }, 534, "udp" },
+ { "iiop", { NULL }, 535, "tcp" },
+ { "iiop", { NULL }, 535, "udp" },
+ { "opalis-rdv", { NULL }, 536, "tcp" },
+ { "opalis-rdv", { NULL }, 536, "udp" },
+ { "nmsp", { NULL }, 537, "tcp" },
+ { "nmsp", { NULL }, 537, "udp" },
+ { "gdomap", { NULL }, 538, "tcp" },
+ { "gdomap", { NULL }, 538, "udp" },
+ { "apertus-ldp", { NULL }, 539, "tcp" },
+ { "apertus-ldp", { NULL }, 539, "udp" },
+ { "uucp", { NULL }, 540, "tcp" },
+ { "uucp", { NULL }, 540, "udp" },
+ { "uucp-rlogin", { NULL }, 541, "tcp" },
+ { "uucp-rlogin", { NULL }, 541, "udp" },
+ { "commerce", { NULL }, 542, "tcp" },
+ { "commerce", { NULL }, 542, "udp" },
+ { "klogin", { NULL }, 543, "tcp" },
+ { "klogin", { NULL }, 543, "udp" },
+ { "kshell", { NULL }, 544, "tcp" },
+ { "kshell", { NULL }, 544, "udp" },
+ { "appleqtcsrvr", { NULL }, 545, "tcp" },
+ { "appleqtcsrvr", { NULL }, 545, "udp" },
+ { "dhcpv6-client", { NULL }, 546, "tcp" },
+ { "dhcpv6-client", { NULL }, 546, "udp" },
+ { "dhcpv6-server", { NULL }, 547, "tcp" },
+ { "dhcpv6-server", { NULL }, 547, "udp" },
+ { "afpovertcp", { NULL }, 548, "tcp" },
+ { "afpovertcp", { NULL }, 548, "udp" },
+ { "idfp", { NULL }, 549, "tcp" },
+ { "idfp", { NULL }, 549, "udp" },
+ { "new-rwho", { NULL }, 550, "tcp" },
+ { "new-rwho", { NULL }, 550, "udp" },
+ { "cybercash", { NULL }, 551, "tcp" },
+ { "cybercash", { NULL }, 551, "udp" },
+ { "devshr-nts", { NULL }, 552, "tcp" },
+ { "devshr-nts", { NULL }, 552, "udp" },
+ { "pirp", { NULL }, 553, "tcp" },
+ { "pirp", { NULL }, 553, "udp" },
+ { "rtsp", { NULL }, 554, "tcp" },
+ { "rtsp", { NULL }, 554, "udp" },
+ { "dsf", { NULL }, 555, "tcp" },
+ { "dsf", { NULL }, 555, "udp" },
+ { "remotefs", { NULL }, 556, "tcp" },
+ { "remotefs", { NULL }, 556, "udp" },
+ { "openvms-sysipc", { NULL }, 557, "tcp" },
+ { "openvms-sysipc", { NULL }, 557, "udp" },
+ { "sdnskmp", { NULL }, 558, "tcp" },
+ { "sdnskmp", { NULL }, 558, "udp" },
+ { "teedtap", { NULL }, 559, "tcp" },
+ { "teedtap", { NULL }, 559, "udp" },
+ { "rmonitor", { NULL }, 560, "tcp" },
+ { "rmonitor", { NULL }, 560, "udp" },
+ { "monitor", { NULL }, 561, "tcp" },
+ { "monitor", { NULL }, 561, "udp" },
+ { "chshell", { NULL }, 562, "tcp" },
+ { "chshell", { NULL }, 562, "udp" },
+ { "nntps", { NULL }, 563, "tcp" },
+ { "nntps", { NULL }, 563, "udp" },
+ { "9pfs", { NULL }, 564, "tcp" },
+ { "9pfs", { NULL }, 564, "udp" },
+ { "whoami", { NULL }, 565, "tcp" },
+ { "whoami", { NULL }, 565, "udp" },
+ { "streettalk", { NULL }, 566, "tcp" },
+ { "streettalk", { NULL }, 566, "udp" },
+ { "banyan-rpc", { NULL }, 567, "tcp" },
+ { "banyan-rpc", { NULL }, 567, "udp" },
+ { "ms-shuttle", { NULL }, 568, "tcp" },
+ { "ms-shuttle", { NULL }, 568, "udp" },
+ { "ms-rome", { NULL }, 569, "tcp" },
+ { "ms-rome", { NULL }, 569, "udp" },
+ { "meter", { NULL }, 570, "tcp" },
+ { "meter", { NULL }, 570, "udp" },
+ { "meter", { NULL }, 571, "tcp" },
+ { "meter", { NULL }, 571, "udp" },
+ { "sonar", { NULL }, 572, "tcp" },
+ { "sonar", { NULL }, 572, "udp" },
+ { "banyan-vip", { NULL }, 573, "tcp" },
+ { "banyan-vip", { NULL }, 573, "udp" },
+ { "ftp-agent", { NULL }, 574, "tcp" },
+ { "ftp-agent", { NULL }, 574, "udp" },
+ { "vemmi", { NULL }, 575, "tcp" },
+ { "vemmi", { NULL }, 575, "udp" },
+ { "ipcd", { NULL }, 576, "tcp" },
+ { "ipcd", { NULL }, 576, "udp" },
+ { "vnas", { NULL }, 577, "tcp" },
+ { "vnas", { NULL }, 577, "udp" },
+ { "ipdd", { NULL }, 578, "tcp" },
+ { "ipdd", { NULL }, 578, "udp" },
+ { "decbsrv", { NULL }, 579, "tcp" },
+ { "decbsrv", { NULL }, 579, "udp" },
+ { "sntp-heartbeat", { NULL }, 580, "tcp" },
+ { "sntp-heartbeat", { NULL }, 580, "udp" },
+ { "bdp", { NULL }, 581, "tcp" },
+ { "bdp", { NULL }, 581, "udp" },
+ { "scc-security", { NULL }, 582, "tcp" },
+ { "scc-security", { NULL }, 582, "udp" },
+ { "philips-vc", { NULL }, 583, "tcp" },
+ { "philips-vc", { NULL }, 583, "udp" },
+ { "keyserver", { NULL }, 584, "tcp" },
+ { "keyserver", { NULL }, 584, "udp" },
+ { "password-chg", { NULL }, 586, "tcp" },
+ { "password-chg", { NULL }, 586, "udp" },
+ { "submission", { NULL }, 587, "tcp" },
+ { "submission", { NULL }, 587, "udp" },
+ { "cal", { NULL }, 588, "tcp" },
+ { "cal", { NULL }, 588, "udp" },
+ { "eyelink", { NULL }, 589, "tcp" },
+ { "eyelink", { NULL }, 589, "udp" },
+ { "tns-cml", { NULL }, 590, "tcp" },
+ { "tns-cml", { NULL }, 590, "udp" },
+ { "http-alt", { NULL }, 591, "tcp" },
+ { "http-alt", { NULL }, 591, "udp" },
+ { "eudora-set", { NULL }, 592, "tcp" },
+ { "eudora-set", { NULL }, 592, "udp" },
+ { "http-rpc-epmap", { NULL }, 593, "tcp" },
+ { "http-rpc-epmap", { NULL }, 593, "udp" },
+ { "tpip", { NULL }, 594, "tcp" },
+ { "tpip", { NULL }, 594, "udp" },
+ { "cab-protocol", { NULL }, 595, "tcp" },
+ { "cab-protocol", { NULL }, 595, "udp" },
+ { "smsd", { NULL }, 596, "tcp" },
+ { "smsd", { NULL }, 596, "udp" },
+ { "ptcnameservice", { NULL }, 597, "tcp" },
+ { "ptcnameservice", { NULL }, 597, "udp" },
+ { "sco-websrvrmg3", { NULL }, 598, "tcp" },
+ { "sco-websrvrmg3", { NULL }, 598, "udp" },
+ { "acp", { NULL }, 599, "tcp" },
+ { "acp", { NULL }, 599, "udp" },
+ { "ipcserver", { NULL }, 600, "tcp" },
+ { "ipcserver", { NULL }, 600, "udp" },
+ { "syslog-conn", { NULL }, 601, "tcp" },
+ { "syslog-conn", { NULL }, 601, "udp" },
+ { "xmlrpc-beep", { NULL }, 602, "tcp" },
+ { "xmlrpc-beep", { NULL }, 602, "udp" },
+ { "idxp", { NULL }, 603, "tcp" },
+ { "idxp", { NULL }, 603, "udp" },
+ { "tunnel", { NULL }, 604, "tcp" },
+ { "tunnel", { NULL }, 604, "udp" },
+ { "soap-beep", { NULL }, 605, "tcp" },
+ { "soap-beep", { NULL }, 605, "udp" },
+ { "urm", { NULL }, 606, "tcp" },
+ { "urm", { NULL }, 606, "udp" },
+ { "nqs", { NULL }, 607, "tcp" },
+ { "nqs", { NULL }, 607, "udp" },
+ { "sift-uft", { NULL }, 608, "tcp" },
+ { "sift-uft", { NULL }, 608, "udp" },
+ { "npmp-trap", { NULL }, 609, "tcp" },
+ { "npmp-trap", { NULL }, 609, "udp" },
+ { "npmp-local", { NULL }, 610, "tcp" },
+ { "npmp-local", { NULL }, 610, "udp" },
+ { "npmp-gui", { NULL }, 611, "tcp" },
+ { "npmp-gui", { NULL }, 611, "udp" },
+ { "hmmp-ind", { NULL }, 612, "tcp" },
+ { "hmmp-ind", { NULL }, 612, "udp" },
+ { "hmmp-op", { NULL }, 613, "tcp" },
+ { "hmmp-op", { NULL }, 613, "udp" },
+ { "sshell", { NULL }, 614, "tcp" },
+ { "sshell", { NULL }, 614, "udp" },
+ { "sco-inetmgr", { NULL }, 615, "tcp" },
+ { "sco-inetmgr", { NULL }, 615, "udp" },
+ { "sco-sysmgr", { NULL }, 616, "tcp" },
+ { "sco-sysmgr", { NULL }, 616, "udp" },
+ { "sco-dtmgr", { NULL }, 617, "tcp" },
+ { "sco-dtmgr", { NULL }, 617, "udp" },
+ { "dei-icda", { NULL }, 618, "tcp" },
+ { "dei-icda", { NULL }, 618, "udp" },
+ { "compaq-evm", { NULL }, 619, "tcp" },
+ { "compaq-evm", { NULL }, 619, "udp" },
+ { "sco-websrvrmgr", { NULL }, 620, "tcp" },
+ { "sco-websrvrmgr", { NULL }, 620, "udp" },
+ { "escp-ip", { NULL }, 621, "tcp" },
+ { "escp-ip", { NULL }, 621, "udp" },
+ { "collaborator", { NULL }, 622, "tcp" },
+ { "collaborator", { NULL }, 622, "udp" },
+ { "oob-ws-http", { NULL }, 623, "tcp" },
+ { "asf-rmcp", { NULL }, 623, "udp" },
+ { "cryptoadmin", { NULL }, 624, "tcp" },
+ { "cryptoadmin", { NULL }, 624, "udp" },
+ { "dec_dlm", { NULL }, 625, "tcp" },
+ { "dec_dlm", { NULL }, 625, "udp" },
+ { "asia", { NULL }, 626, "tcp" },
+ { "asia", { NULL }, 626, "udp" },
+ { "passgo-tivoli", { NULL }, 627, "tcp" },
+ { "passgo-tivoli", { NULL }, 627, "udp" },
+ { "qmqp", { NULL }, 628, "tcp" },
+ { "qmqp", { NULL }, 628, "udp" },
+ { "3com-amp3", { NULL }, 629, "tcp" },
+ { "3com-amp3", { NULL }, 629, "udp" },
+ { "rda", { NULL }, 630, "tcp" },
+ { "rda", { NULL }, 630, "udp" },
+ { "ipp", { NULL }, 631, "tcp" },
+ { "ipp", { NULL }, 631, "udp" },
+ { "bmpp", { NULL }, 632, "tcp" },
+ { "bmpp", { NULL }, 632, "udp" },
+ { "servstat", { NULL }, 633, "tcp" },
+ { "servstat", { NULL }, 633, "udp" },
+ { "ginad", { NULL }, 634, "tcp" },
+ { "ginad", { NULL }, 634, "udp" },
+ { "rlzdbase", { NULL }, 635, "tcp" },
+ { "rlzdbase", { NULL }, 635, "udp" },
+ { "ldaps", { NULL }, 636, "tcp" },
+ { "ldaps", { NULL }, 636, "udp" },
+ { "lanserver", { NULL }, 637, "tcp" },
+ { "lanserver", { NULL }, 637, "udp" },
+ { "mcns-sec", { NULL }, 638, "tcp" },
+ { "mcns-sec", { NULL }, 638, "udp" },
+ { "msdp", { NULL }, 639, "tcp" },
+ { "msdp", { NULL }, 639, "udp" },
+ { "entrust-sps", { NULL }, 640, "tcp" },
+ { "entrust-sps", { NULL }, 640, "udp" },
+ { "repcmd", { NULL }, 641, "tcp" },
+ { "repcmd", { NULL }, 641, "udp" },
+ { "esro-emsdp", { NULL }, 642, "tcp" },
+ { "esro-emsdp", { NULL }, 642, "udp" },
+ { "sanity", { NULL }, 643, "tcp" },
+ { "sanity", { NULL }, 643, "udp" },
+ { "dwr", { NULL }, 644, "tcp" },
+ { "dwr", { NULL }, 644, "udp" },
+ { "pssc", { NULL }, 645, "tcp" },
+ { "pssc", { NULL }, 645, "udp" },
+ { "ldp", { NULL }, 646, "tcp" },
+ { "ldp", { NULL }, 646, "udp" },
+ { "dhcp-failover", { NULL }, 647, "tcp" },
+ { "dhcp-failover", { NULL }, 647, "udp" },
+ { "rrp", { NULL }, 648, "tcp" },
+ { "rrp", { NULL }, 648, "udp" },
+ { "cadview-3d", { NULL }, 649, "tcp" },
+ { "cadview-3d", { NULL }, 649, "udp" },
+ { "obex", { NULL }, 650, "tcp" },
+ { "obex", { NULL }, 650, "udp" },
+ { "ieee-mms", { NULL }, 651, "tcp" },
+ { "ieee-mms", { NULL }, 651, "udp" },
+ { "hello-port", { NULL }, 652, "tcp" },
+ { "hello-port", { NULL }, 652, "udp" },
+ { "repscmd", { NULL }, 653, "tcp" },
+ { "repscmd", { NULL }, 653, "udp" },
+ { "aodv", { NULL }, 654, "tcp" },
+ { "aodv", { NULL }, 654, "udp" },
+ { "tinc", { NULL }, 655, "tcp" },
+ { "tinc", { NULL }, 655, "udp" },
+ { "spmp", { NULL }, 656, "tcp" },
+ { "spmp", { NULL }, 656, "udp" },
+ { "rmc", { NULL }, 657, "tcp" },
+ { "rmc", { NULL }, 657, "udp" },
+ { "tenfold", { NULL }, 658, "tcp" },
+ { "tenfold", { NULL }, 658, "udp" },
+ { "mac-srvr-admin", { NULL }, 660, "tcp" },
+ { "mac-srvr-admin", { NULL }, 660, "udp" },
+ { "hap", { NULL }, 661, "tcp" },
+ { "hap", { NULL }, 661, "udp" },
+ { "pftp", { NULL }, 662, "tcp" },
+ { "pftp", { NULL }, 662, "udp" },
+ { "purenoise", { NULL }, 663, "tcp" },
+ { "purenoise", { NULL }, 663, "udp" },
+ { "oob-ws-https", { NULL }, 664, "tcp" },
+ { "asf-secure-rmcp", { NULL }, 664, "udp" },
+ { "sun-dr", { NULL }, 665, "tcp" },
+ { "sun-dr", { NULL }, 665, "udp" },
+ { "mdqs", { NULL }, 666, "tcp" },
+ { "mdqs", { NULL }, 666, "udp" },
+ { "doom", { NULL }, 666, "tcp" },
+ { "doom", { NULL }, 666, "udp" },
+ { "disclose", { NULL }, 667, "tcp" },
+ { "disclose", { NULL }, 667, "udp" },
+ { "mecomm", { NULL }, 668, "tcp" },
+ { "mecomm", { NULL }, 668, "udp" },
+ { "meregister", { NULL }, 669, "tcp" },
+ { "meregister", { NULL }, 669, "udp" },
+ { "vacdsm-sws", { NULL }, 670, "tcp" },
+ { "vacdsm-sws", { NULL }, 670, "udp" },
+ { "vacdsm-app", { NULL }, 671, "tcp" },
+ { "vacdsm-app", { NULL }, 671, "udp" },
+ { "vpps-qua", { NULL }, 672, "tcp" },
+ { "vpps-qua", { NULL }, 672, "udp" },
+ { "cimplex", { NULL }, 673, "tcp" },
+ { "cimplex", { NULL }, 673, "udp" },
+ { "acap", { NULL }, 674, "tcp" },
+ { "acap", { NULL }, 674, "udp" },
+ { "dctp", { NULL }, 675, "tcp" },
+ { "dctp", { NULL }, 675, "udp" },
+ { "vpps-via", { NULL }, 676, "tcp" },
+ { "vpps-via", { NULL }, 676, "udp" },
+ { "vpp", { NULL }, 677, "tcp" },
+ { "vpp", { NULL }, 677, "udp" },
+ { "ggf-ncp", { NULL }, 678, "tcp" },
+ { "ggf-ncp", { NULL }, 678, "udp" },
+ { "mrm", { NULL }, 679, "tcp" },
+ { "mrm", { NULL }, 679, "udp" },
+ { "entrust-aaas", { NULL }, 680, "tcp" },
+ { "entrust-aaas", { NULL }, 680, "udp" },
+ { "entrust-aams", { NULL }, 681, "tcp" },
+ { "entrust-aams", { NULL }, 681, "udp" },
+ { "xfr", { NULL }, 682, "tcp" },
+ { "xfr", { NULL }, 682, "udp" },
+ { "corba-iiop", { NULL }, 683, "tcp" },
+ { "corba-iiop", { NULL }, 683, "udp" },
+ { "corba-iiop-ssl", { NULL }, 684, "tcp" },
+ { "corba-iiop-ssl", { NULL }, 684, "udp" },
+ { "mdc-portmapper", { NULL }, 685, "tcp" },
+ { "mdc-portmapper", { NULL }, 685, "udp" },
+ { "hcp-wismar", { NULL }, 686, "tcp" },
+ { "hcp-wismar", { NULL }, 686, "udp" },
+ { "asipregistry", { NULL }, 687, "tcp" },
+ { "asipregistry", { NULL }, 687, "udp" },
+ { "realm-rusd", { NULL }, 688, "tcp" },
+ { "realm-rusd", { NULL }, 688, "udp" },
+ { "nmap", { NULL }, 689, "tcp" },
+ { "nmap", { NULL }, 689, "udp" },
+ { "vatp", { NULL }, 690, "tcp" },
+ { "vatp", { NULL }, 690, "udp" },
+ { "msexch-routing", { NULL }, 691, "tcp" },
+ { "msexch-routing", { NULL }, 691, "udp" },
+ { "hyperwave-isp", { NULL }, 692, "tcp" },
+ { "hyperwave-isp", { NULL }, 692, "udp" },
+ { "connendp", { NULL }, 693, "tcp" },
+ { "connendp", { NULL }, 693, "udp" },
+ { "ha-cluster", { NULL }, 694, "tcp" },
+ { "ha-cluster", { NULL }, 694, "udp" },
+ { "ieee-mms-ssl", { NULL }, 695, "tcp" },
+ { "ieee-mms-ssl", { NULL }, 695, "udp" },
+ { "rushd", { NULL }, 696, "tcp" },
+ { "rushd", { NULL }, 696, "udp" },
+ { "uuidgen", { NULL }, 697, "tcp" },
+ { "uuidgen", { NULL }, 697, "udp" },
+ { "olsr", { NULL }, 698, "tcp" },
+ { "olsr", { NULL }, 698, "udp" },
+ { "accessnetwork", { NULL }, 699, "tcp" },
+ { "accessnetwork", { NULL }, 699, "udp" },
+ { "epp", { NULL }, 700, "tcp" },
+ { "epp", { NULL }, 700, "udp" },
+ { "lmp", { NULL }, 701, "tcp" },
+ { "lmp", { NULL }, 701, "udp" },
+ { "iris-beep", { NULL }, 702, "tcp" },
+ { "iris-beep", { NULL }, 702, "udp" },
+ { "elcsd", { NULL }, 704, "tcp" },
+ { "elcsd", { NULL }, 704, "udp" },
+ { "agentx", { NULL }, 705, "tcp" },
+ { "agentx", { NULL }, 705, "udp" },
+ { "silc", { NULL }, 706, "tcp" },
+ { "silc", { NULL }, 706, "udp" },
+ { "borland-dsj", { NULL }, 707, "tcp" },
+ { "borland-dsj", { NULL }, 707, "udp" },
+ { "entrust-kmsh", { NULL }, 709, "tcp" },
+ { "entrust-kmsh", { NULL }, 709, "udp" },
+ { "entrust-ash", { NULL }, 710, "tcp" },
+ { "entrust-ash", { NULL }, 710, "udp" },
+ { "cisco-tdp", { NULL }, 711, "tcp" },
+ { "cisco-tdp", { NULL }, 711, "udp" },
+ { "tbrpf", { NULL }, 712, "tcp" },
+ { "tbrpf", { NULL }, 712, "udp" },
+ { "iris-xpc", { NULL }, 713, "tcp" },
+ { "iris-xpc", { NULL }, 713, "udp" },
+ { "iris-xpcs", { NULL }, 714, "tcp" },
+ { "iris-xpcs", { NULL }, 714, "udp" },
+ { "iris-lwz", { NULL }, 715, "tcp" },
+ { "iris-lwz", { NULL }, 715, "udp" },
+ { "pana", { NULL }, 716, "udp" },
+ { "netviewdm1", { NULL }, 729, "tcp" },
+ { "netviewdm1", { NULL }, 729, "udp" },
+ { "netviewdm2", { NULL }, 730, "tcp" },
+ { "netviewdm2", { NULL }, 730, "udp" },
+ { "netviewdm3", { NULL }, 731, "tcp" },
+ { "netviewdm3", { NULL }, 731, "udp" },
+ { "netgw", { NULL }, 741, "tcp" },
+ { "netgw", { NULL }, 741, "udp" },
+ { "netrcs", { NULL }, 742, "tcp" },
+ { "netrcs", { NULL }, 742, "udp" },
+ { "flexlm", { NULL }, 744, "tcp" },
+ { "flexlm", { NULL }, 744, "udp" },
+ { "fujitsu-dev", { NULL }, 747, "tcp" },
+ { "fujitsu-dev", { NULL }, 747, "udp" },
+ { "ris-cm", { NULL }, 748, "tcp" },
+ { "ris-cm", { NULL }, 748, "udp" },
+ { "kerberos-adm", { NULL }, 749, "tcp" },
+ { "kerberos-adm", { NULL }, 749, "udp" },
+ { "rfile", { NULL }, 750, "tcp" },
+ { "loadav", { NULL }, 750, "udp" },
+ { "kerberos-iv", { NULL }, 750, "udp" },
+ { "pump", { NULL }, 751, "tcp" },
+ { "pump", { NULL }, 751, "udp" },
+ { "qrh", { NULL }, 752, "tcp" },
+ { "qrh", { NULL }, 752, "udp" },
+ { "rrh", { NULL }, 753, "tcp" },
+ { "rrh", { NULL }, 753, "udp" },
+ { "tell", { NULL }, 754, "tcp" },
+ { "tell", { NULL }, 754, "udp" },
+ { "nlogin", { NULL }, 758, "tcp" },
+ { "nlogin", { NULL }, 758, "udp" },
+ { "con", { NULL }, 759, "tcp" },
+ { "con", { NULL }, 759, "udp" },
+ { "ns", { NULL }, 760, "tcp" },
+ { "ns", { NULL }, 760, "udp" },
+ { "rxe", { NULL }, 761, "tcp" },
+ { "rxe", { NULL }, 761, "udp" },
+ { "quotad", { NULL }, 762, "tcp" },
+ { "quotad", { NULL }, 762, "udp" },
+ { "cycleserv", { NULL }, 763, "tcp" },
+ { "cycleserv", { NULL }, 763, "udp" },
+ { "omserv", { NULL }, 764, "tcp" },
+ { "omserv", { NULL }, 764, "udp" },
+ { "webster", { NULL }, 765, "tcp" },
+ { "webster", { NULL }, 765, "udp" },
+ { "phonebook", { NULL }, 767, "tcp" },
+ { "phonebook", { NULL }, 767, "udp" },
+ { "vid", { NULL }, 769, "tcp" },
+ { "vid", { NULL }, 769, "udp" },
+ { "cadlock", { NULL }, 770, "tcp" },
+ { "cadlock", { NULL }, 770, "udp" },
+ { "rtip", { NULL }, 771, "tcp" },
+ { "rtip", { NULL }, 771, "udp" },
+ { "cycleserv2", { NULL }, 772, "tcp" },
+ { "cycleserv2", { NULL }, 772, "udp" },
+ { "submit", { NULL }, 773, "tcp" },
+ { "notify", { NULL }, 773, "udp" },
+ { "rpasswd", { NULL }, 774, "tcp" },
+ { "acmaint_dbd", { NULL }, 774, "udp" },
+ { "entomb", { NULL }, 775, "tcp" },
+ { "acmaint_transd", { NULL }, 775, "udp" },
+ { "wpages", { NULL }, 776, "tcp" },
+ { "wpages", { NULL }, 776, "udp" },
+ { "multiling-http", { NULL }, 777, "tcp" },
+ { "multiling-http", { NULL }, 777, "udp" },
+ { "wpgs", { NULL }, 780, "tcp" },
+ { "wpgs", { NULL }, 780, "udp" },
+ { "mdbs_daemon", { NULL }, 800, "tcp" },
+ { "mdbs_daemon", { NULL }, 800, "udp" },
+ { "device", { NULL }, 801, "tcp" },
+ { "device", { NULL }, 801, "udp" },
+ { "fcp-udp", { NULL }, 810, "tcp" },
+ { "fcp-udp", { NULL }, 810, "udp" },
+ { "itm-mcell-s", { NULL }, 828, "tcp" },
+ { "itm-mcell-s", { NULL }, 828, "udp" },
+ { "pkix-3-ca-ra", { NULL }, 829, "tcp" },
+ { "pkix-3-ca-ra", { NULL }, 829, "udp" },
+ { "netconf-ssh", { NULL }, 830, "tcp" },
+ { "netconf-ssh", { NULL }, 830, "udp" },
+ { "netconf-beep", { NULL }, 831, "tcp" },
+ { "netconf-beep", { NULL }, 831, "udp" },
+ { "netconfsoaphttp", { NULL }, 832, "tcp" },
+ { "netconfsoaphttp", { NULL }, 832, "udp" },
+ { "netconfsoapbeep", { NULL }, 833, "tcp" },
+ { "netconfsoapbeep", { NULL }, 833, "udp" },
+ { "dhcp-failover2", { NULL }, 847, "tcp" },
+ { "dhcp-failover2", { NULL }, 847, "udp" },
+ { "gdoi", { NULL }, 848, "tcp" },
+ { "gdoi", { NULL }, 848, "udp" },
+ { "iscsi", { NULL }, 860, "tcp" },
+ { "iscsi", { NULL }, 860, "udp" },
+ { "owamp-control", { NULL }, 861, "tcp" },
+ { "owamp-control", { NULL }, 861, "udp" },
+ { "twamp-control", { NULL }, 862, "tcp" },
+ { "twamp-control", { NULL }, 862, "udp" },
+ { "rsync", { NULL }, 873, "tcp" },
+ { "rsync", { NULL }, 873, "udp" },
+ { "iclcnet-locate", { NULL }, 886, "tcp" },
+ { "iclcnet-locate", { NULL }, 886, "udp" },
+ { "iclcnet_svinfo", { NULL }, 887, "tcp" },
+ { "iclcnet_svinfo", { NULL }, 887, "udp" },
+ { "accessbuilder", { NULL }, 888, "tcp" },
+ { "accessbuilder", { NULL }, 888, "udp" },
+ { "cddbp", { NULL }, 888, "tcp" },
+ { "omginitialrefs", { NULL }, 900, "tcp" },
+ { "omginitialrefs", { NULL }, 900, "udp" },
+ { "smpnameres", { NULL }, 901, "tcp" },
+ { "smpnameres", { NULL }, 901, "udp" },
+ { "ideafarm-door", { NULL }, 902, "tcp" },
+ { "ideafarm-door", { NULL }, 902, "udp" },
+ { "ideafarm-panic", { NULL }, 903, "tcp" },
+ { "ideafarm-panic", { NULL }, 903, "udp" },
+ { "kink", { NULL }, 910, "tcp" },
+ { "kink", { NULL }, 910, "udp" },
+ { "xact-backup", { NULL }, 911, "tcp" },
+ { "xact-backup", { NULL }, 911, "udp" },
+ { "apex-mesh", { NULL }, 912, "tcp" },
+ { "apex-mesh", { NULL }, 912, "udp" },
+ { "apex-edge", { NULL }, 913, "tcp" },
+ { "apex-edge", { NULL }, 913, "udp" },
+ { "ftps-data", { NULL }, 989, "tcp" },
+ { "ftps-data", { NULL }, 989, "udp" },
+ { "ftps", { NULL }, 990, "tcp" },
+ { "ftps", { NULL }, 990, "udp" },
+ { "nas", { NULL }, 991, "tcp" },
+ { "nas", { NULL }, 991, "udp" },
+ { "telnets", { NULL }, 992, "tcp" },
+ { "telnets", { NULL }, 992, "udp" },
+ { "imaps", { NULL }, 993, "tcp" },
+ { "imaps", { NULL }, 993, "udp" },
+ { "ircs", { NULL }, 994, "tcp" },
+ { "ircs", { NULL }, 994, "udp" },
+ { "pop3s", { NULL }, 995, "tcp" },
+ { "pop3s", { NULL }, 995, "udp" },
+ { "vsinet", { NULL }, 996, "tcp" },
+ { "vsinet", { NULL }, 996, "udp" },
+ { "maitrd", { NULL }, 997, "tcp" },
+ { "maitrd", { NULL }, 997, "udp" },
+ { "busboy", { NULL }, 998, "tcp" },
+ { "puparp", { NULL }, 998, "udp" },
+ { "garcon", { NULL }, 999, "tcp" },
+ { "applix", { NULL }, 999, "udp" },
+ { "puprouter", { NULL }, 999, "tcp" },
+ { "puprouter", { NULL }, 999, "udp" },
+ { "cadlock2", { NULL }, 1000, "tcp" },
+ { "cadlock2", { NULL }, 1000, "udp" },
+ { "surf", { NULL }, 1010, "tcp" },
+ { "surf", { NULL }, 1010, "udp" },
+ { "exp1", { NULL }, 1021, "tcp" },
+ { "exp1", { NULL }, 1021, "udp" },
+ { "exp2", { NULL }, 1022, "tcp" },
+ { "exp2", { NULL }, 1022, "udp" },
+# endif /* USE_IANA_WELL_KNOWN_PORTS */
+# ifdef USE_IANA_REGISTERED_PORTS
+ { "blackjack", { NULL }, 1025, "tcp" },
+ { "blackjack", { NULL }, 1025, "udp" },
+ { "cap", { NULL }, 1026, "tcp" },
+ { "cap", { NULL }, 1026, "udp" },
+ { "solid-mux", { NULL }, 1029, "tcp" },
+ { "solid-mux", { NULL }, 1029, "udp" },
+ { "iad1", { NULL }, 1030, "tcp" },
+ { "iad1", { NULL }, 1030, "udp" },
+ { "iad2", { NULL }, 1031, "tcp" },
+ { "iad2", { NULL }, 1031, "udp" },
+ { "iad3", { NULL }, 1032, "tcp" },
+ { "iad3", { NULL }, 1032, "udp" },
+ { "netinfo-local", { NULL }, 1033, "tcp" },
+ { "netinfo-local", { NULL }, 1033, "udp" },
+ { "activesync", { NULL }, 1034, "tcp" },
+ { "activesync", { NULL }, 1034, "udp" },
+ { "mxxrlogin", { NULL }, 1035, "tcp" },
+ { "mxxrlogin", { NULL }, 1035, "udp" },
+ { "nsstp", { NULL }, 1036, "tcp" },
+ { "nsstp", { NULL }, 1036, "udp" },
+ { "ams", { NULL }, 1037, "tcp" },
+ { "ams", { NULL }, 1037, "udp" },
+ { "mtqp", { NULL }, 1038, "tcp" },
+ { "mtqp", { NULL }, 1038, "udp" },
+ { "sbl", { NULL }, 1039, "tcp" },
+ { "sbl", { NULL }, 1039, "udp" },
+ { "netarx", { NULL }, 1040, "tcp" },
+ { "netarx", { NULL }, 1040, "udp" },
+ { "danf-ak2", { NULL }, 1041, "tcp" },
+ { "danf-ak2", { NULL }, 1041, "udp" },
+ { "afrog", { NULL }, 1042, "tcp" },
+ { "afrog", { NULL }, 1042, "udp" },
+ { "boinc-client", { NULL }, 1043, "tcp" },
+ { "boinc-client", { NULL }, 1043, "udp" },
+ { "dcutility", { NULL }, 1044, "tcp" },
+ { "dcutility", { NULL }, 1044, "udp" },
+ { "fpitp", { NULL }, 1045, "tcp" },
+ { "fpitp", { NULL }, 1045, "udp" },
+ { "wfremotertm", { NULL }, 1046, "tcp" },
+ { "wfremotertm", { NULL }, 1046, "udp" },
+ { "neod1", { NULL }, 1047, "tcp" },
+ { "neod1", { NULL }, 1047, "udp" },
+ { "neod2", { NULL }, 1048, "tcp" },
+ { "neod2", { NULL }, 1048, "udp" },
+ { "td-postman", { NULL }, 1049, "tcp" },
+ { "td-postman", { NULL }, 1049, "udp" },
+ { "cma", { NULL }, 1050, "tcp" },
+ { "cma", { NULL }, 1050, "udp" },
+ { "optima-vnet", { NULL }, 1051, "tcp" },
+ { "optima-vnet", { NULL }, 1051, "udp" },
+ { "ddt", { NULL }, 1052, "tcp" },
+ { "ddt", { NULL }, 1052, "udp" },
+ { "remote-as", { NULL }, 1053, "tcp" },
+ { "remote-as", { NULL }, 1053, "udp" },
+ { "brvread", { NULL }, 1054, "tcp" },
+ { "brvread", { NULL }, 1054, "udp" },
+ { "ansyslmd", { NULL }, 1055, "tcp" },
+ { "ansyslmd", { NULL }, 1055, "udp" },
+ { "vfo", { NULL }, 1056, "tcp" },
+ { "vfo", { NULL }, 1056, "udp" },
+ { "startron", { NULL }, 1057, "tcp" },
+ { "startron", { NULL }, 1057, "udp" },
+ { "nim", { NULL }, 1058, "tcp" },
+ { "nim", { NULL }, 1058, "udp" },
+ { "nimreg", { NULL }, 1059, "tcp" },
+ { "nimreg", { NULL }, 1059, "udp" },
+ { "polestar", { NULL }, 1060, "tcp" },
+ { "polestar", { NULL }, 1060, "udp" },
+ { "kiosk", { NULL }, 1061, "tcp" },
+ { "kiosk", { NULL }, 1061, "udp" },
+ { "veracity", { NULL }, 1062, "tcp" },
+ { "veracity", { NULL }, 1062, "udp" },
+ { "kyoceranetdev", { NULL }, 1063, "tcp" },
+ { "kyoceranetdev", { NULL }, 1063, "udp" },
+ { "jstel", { NULL }, 1064, "tcp" },
+ { "jstel", { NULL }, 1064, "udp" },
+ { "syscomlan", { NULL }, 1065, "tcp" },
+ { "syscomlan", { NULL }, 1065, "udp" },
+ { "fpo-fns", { NULL }, 1066, "tcp" },
+ { "fpo-fns", { NULL }, 1066, "udp" },
+ { "instl_boots", { NULL }, 1067, "tcp" },
+ { "instl_boots", { NULL }, 1067, "udp" },
+ { "instl_bootc", { NULL }, 1068, "tcp" },
+ { "instl_bootc", { NULL }, 1068, "udp" },
+ { "cognex-insight", { NULL }, 1069, "tcp" },
+ { "cognex-insight", { NULL }, 1069, "udp" },
+ { "gmrupdateserv", { NULL }, 1070, "tcp" },
+ { "gmrupdateserv", { NULL }, 1070, "udp" },
+ { "bsquare-voip", { NULL }, 1071, "tcp" },
+ { "bsquare-voip", { NULL }, 1071, "udp" },
+ { "cardax", { NULL }, 1072, "tcp" },
+ { "cardax", { NULL }, 1072, "udp" },
+ { "bridgecontrol", { NULL }, 1073, "tcp" },
+ { "bridgecontrol", { NULL }, 1073, "udp" },
+ { "warmspotMgmt", { NULL }, 1074, "tcp" },
+ { "warmspotMgmt", { NULL }, 1074, "udp" },
+ { "rdrmshc", { NULL }, 1075, "tcp" },
+ { "rdrmshc", { NULL }, 1075, "udp" },
+ { "dab-sti-c", { NULL }, 1076, "tcp" },
+ { "dab-sti-c", { NULL }, 1076, "udp" },
+ { "imgames", { NULL }, 1077, "tcp" },
+ { "imgames", { NULL }, 1077, "udp" },
+ { "avocent-proxy", { NULL }, 1078, "tcp" },
+ { "avocent-proxy", { NULL }, 1078, "udp" },
+ { "asprovatalk", { NULL }, 1079, "tcp" },
+ { "asprovatalk", { NULL }, 1079, "udp" },
+ { "socks", { NULL }, 1080, "tcp" },
+ { "socks", { NULL }, 1080, "udp" },
+ { "pvuniwien", { NULL }, 1081, "tcp" },
+ { "pvuniwien", { NULL }, 1081, "udp" },
+ { "amt-esd-prot", { NULL }, 1082, "tcp" },
+ { "amt-esd-prot", { NULL }, 1082, "udp" },
+ { "ansoft-lm-1", { NULL }, 1083, "tcp" },
+ { "ansoft-lm-1", { NULL }, 1083, "udp" },
+ { "ansoft-lm-2", { NULL }, 1084, "tcp" },
+ { "ansoft-lm-2", { NULL }, 1084, "udp" },
+ { "webobjects", { NULL }, 1085, "tcp" },
+ { "webobjects", { NULL }, 1085, "udp" },
+ { "cplscrambler-lg", { NULL }, 1086, "tcp" },
+ { "cplscrambler-lg", { NULL }, 1086, "udp" },
+ { "cplscrambler-in", { NULL }, 1087, "tcp" },
+ { "cplscrambler-in", { NULL }, 1087, "udp" },
+ { "cplscrambler-al", { NULL }, 1088, "tcp" },
+ { "cplscrambler-al", { NULL }, 1088, "udp" },
+ { "ff-annunc", { NULL }, 1089, "tcp" },
+ { "ff-annunc", { NULL }, 1089, "udp" },
+ { "ff-fms", { NULL }, 1090, "tcp" },
+ { "ff-fms", { NULL }, 1090, "udp" },
+ { "ff-sm", { NULL }, 1091, "tcp" },
+ { "ff-sm", { NULL }, 1091, "udp" },
+ { "obrpd", { NULL }, 1092, "tcp" },
+ { "obrpd", { NULL }, 1092, "udp" },
+ { "proofd", { NULL }, 1093, "tcp" },
+ { "proofd", { NULL }, 1093, "udp" },
+ { "rootd", { NULL }, 1094, "tcp" },
+ { "rootd", { NULL }, 1094, "udp" },
+ { "nicelink", { NULL }, 1095, "tcp" },
+ { "nicelink", { NULL }, 1095, "udp" },
+ { "cnrprotocol", { NULL }, 1096, "tcp" },
+ { "cnrprotocol", { NULL }, 1096, "udp" },
+ { "sunclustermgr", { NULL }, 1097, "tcp" },
+ { "sunclustermgr", { NULL }, 1097, "udp" },
+ { "rmiactivation", { NULL }, 1098, "tcp" },
+ { "rmiactivation", { NULL }, 1098, "udp" },
+ { "rmiregistry", { NULL }, 1099, "tcp" },
+ { "rmiregistry", { NULL }, 1099, "udp" },
+ { "mctp", { NULL }, 1100, "tcp" },
+ { "mctp", { NULL }, 1100, "udp" },
+ { "pt2-discover", { NULL }, 1101, "tcp" },
+ { "pt2-discover", { NULL }, 1101, "udp" },
+ { "adobeserver-1", { NULL }, 1102, "tcp" },
+ { "adobeserver-1", { NULL }, 1102, "udp" },
+ { "adobeserver-2", { NULL }, 1103, "tcp" },
+ { "adobeserver-2", { NULL }, 1103, "udp" },
+ { "xrl", { NULL }, 1104, "tcp" },
+ { "xrl", { NULL }, 1104, "udp" },
+ { "ftranhc", { NULL }, 1105, "tcp" },
+ { "ftranhc", { NULL }, 1105, "udp" },
+ { "isoipsigport-1", { NULL }, 1106, "tcp" },
+ { "isoipsigport-1", { NULL }, 1106, "udp" },
+ { "isoipsigport-2", { NULL }, 1107, "tcp" },
+ { "isoipsigport-2", { NULL }, 1107, "udp" },
+ { "ratio-adp", { NULL }, 1108, "tcp" },
+ { "ratio-adp", { NULL }, 1108, "udp" },
+ { "webadmstart", { NULL }, 1110, "tcp" },
+ { "nfsd-keepalive", { NULL }, 1110, "udp" },
+ { "lmsocialserver", { NULL }, 1111, "tcp" },
+ { "lmsocialserver", { NULL }, 1111, "udp" },
+ { "icp", { NULL }, 1112, "tcp" },
+ { "icp", { NULL }, 1112, "udp" },
+ { "ltp-deepspace", { NULL }, 1113, "tcp" },
+ { "ltp-deepspace", { NULL }, 1113, "udp" },
+ { "mini-sql", { NULL }, 1114, "tcp" },
+ { "mini-sql", { NULL }, 1114, "udp" },
+ { "ardus-trns", { NULL }, 1115, "tcp" },
+ { "ardus-trns", { NULL }, 1115, "udp" },
+ { "ardus-cntl", { NULL }, 1116, "tcp" },
+ { "ardus-cntl", { NULL }, 1116, "udp" },
+ { "ardus-mtrns", { NULL }, 1117, "tcp" },
+ { "ardus-mtrns", { NULL }, 1117, "udp" },
+ { "sacred", { NULL }, 1118, "tcp" },
+ { "sacred", { NULL }, 1118, "udp" },
+ { "bnetgame", { NULL }, 1119, "tcp" },
+ { "bnetgame", { NULL }, 1119, "udp" },
+ { "bnetfile", { NULL }, 1120, "tcp" },
+ { "bnetfile", { NULL }, 1120, "udp" },
+ { "rmpp", { NULL }, 1121, "tcp" },
+ { "rmpp", { NULL }, 1121, "udp" },
+ { "availant-mgr", { NULL }, 1122, "tcp" },
+ { "availant-mgr", { NULL }, 1122, "udp" },
+ { "murray", { NULL }, 1123, "tcp" },
+ { "murray", { NULL }, 1123, "udp" },
+ { "hpvmmcontrol", { NULL }, 1124, "tcp" },
+ { "hpvmmcontrol", { NULL }, 1124, "udp" },
+ { "hpvmmagent", { NULL }, 1125, "tcp" },
+ { "hpvmmagent", { NULL }, 1125, "udp" },
+ { "hpvmmdata", { NULL }, 1126, "tcp" },
+ { "hpvmmdata", { NULL }, 1126, "udp" },
+ { "kwdb-commn", { NULL }, 1127, "tcp" },
+ { "kwdb-commn", { NULL }, 1127, "udp" },
+ { "saphostctrl", { NULL }, 1128, "tcp" },
+ { "saphostctrl", { NULL }, 1128, "udp" },
+ { "saphostctrls", { NULL }, 1129, "tcp" },
+ { "saphostctrls", { NULL }, 1129, "udp" },
+ { "casp", { NULL }, 1130, "tcp" },
+ { "casp", { NULL }, 1130, "udp" },
+ { "caspssl", { NULL }, 1131, "tcp" },
+ { "caspssl", { NULL }, 1131, "udp" },
+ { "kvm-via-ip", { NULL }, 1132, "tcp" },
+ { "kvm-via-ip", { NULL }, 1132, "udp" },
+ { "dfn", { NULL }, 1133, "tcp" },
+ { "dfn", { NULL }, 1133, "udp" },
+ { "aplx", { NULL }, 1134, "tcp" },
+ { "aplx", { NULL }, 1134, "udp" },
+ { "omnivision", { NULL }, 1135, "tcp" },
+ { "omnivision", { NULL }, 1135, "udp" },
+ { "hhb-gateway", { NULL }, 1136, "tcp" },
+ { "hhb-gateway", { NULL }, 1136, "udp" },
+ { "trim", { NULL }, 1137, "tcp" },
+ { "trim", { NULL }, 1137, "udp" },
+ { "encrypted_admin", { NULL }, 1138, "tcp" },
+ { "encrypted_admin", { NULL }, 1138, "udp" },
+ { "evm", { NULL }, 1139, "tcp" },
+ { "evm", { NULL }, 1139, "udp" },
+ { "autonoc", { NULL }, 1140, "tcp" },
+ { "autonoc", { NULL }, 1140, "udp" },
+ { "mxomss", { NULL }, 1141, "tcp" },
+ { "mxomss", { NULL }, 1141, "udp" },
+ { "edtools", { NULL }, 1142, "tcp" },
+ { "edtools", { NULL }, 1142, "udp" },
+ { "imyx", { NULL }, 1143, "tcp" },
+ { "imyx", { NULL }, 1143, "udp" },
+ { "fuscript", { NULL }, 1144, "tcp" },
+ { "fuscript", { NULL }, 1144, "udp" },
+ { "x9-icue", { NULL }, 1145, "tcp" },
+ { "x9-icue", { NULL }, 1145, "udp" },
+ { "audit-transfer", { NULL }, 1146, "tcp" },
+ { "audit-transfer", { NULL }, 1146, "udp" },
+ { "capioverlan", { NULL }, 1147, "tcp" },
+ { "capioverlan", { NULL }, 1147, "udp" },
+ { "elfiq-repl", { NULL }, 1148, "tcp" },
+ { "elfiq-repl", { NULL }, 1148, "udp" },
+ { "bvtsonar", { NULL }, 1149, "tcp" },
+ { "bvtsonar", { NULL }, 1149, "udp" },
+ { "blaze", { NULL }, 1150, "tcp" },
+ { "blaze", { NULL }, 1150, "udp" },
+ { "unizensus", { NULL }, 1151, "tcp" },
+ { "unizensus", { NULL }, 1151, "udp" },
+ { "winpoplanmess", { NULL }, 1152, "tcp" },
+ { "winpoplanmess", { NULL }, 1152, "udp" },
+ { "c1222-acse", { NULL }, 1153, "tcp" },
+ { "c1222-acse", { NULL }, 1153, "udp" },
+ { "resacommunity", { NULL }, 1154, "tcp" },
+ { "resacommunity", { NULL }, 1154, "udp" },
+ { "nfa", { NULL }, 1155, "tcp" },
+ { "nfa", { NULL }, 1155, "udp" },
+ { "iascontrol-oms", { NULL }, 1156, "tcp" },
+ { "iascontrol-oms", { NULL }, 1156, "udp" },
+ { "iascontrol", { NULL }, 1157, "tcp" },
+ { "iascontrol", { NULL }, 1157, "udp" },
+ { "dbcontrol-oms", { NULL }, 1158, "tcp" },
+ { "dbcontrol-oms", { NULL }, 1158, "udp" },
+ { "oracle-oms", { NULL }, 1159, "tcp" },
+ { "oracle-oms", { NULL }, 1159, "udp" },
+ { "olsv", { NULL }, 1160, "tcp" },
+ { "olsv", { NULL }, 1160, "udp" },
+ { "health-polling", { NULL }, 1161, "tcp" },
+ { "health-polling", { NULL }, 1161, "udp" },
+ { "health-trap", { NULL }, 1162, "tcp" },
+ { "health-trap", { NULL }, 1162, "udp" },
+ { "sddp", { NULL }, 1163, "tcp" },
+ { "sddp", { NULL }, 1163, "udp" },
+ { "qsm-proxy", { NULL }, 1164, "tcp" },
+ { "qsm-proxy", { NULL }, 1164, "udp" },
+ { "qsm-gui", { NULL }, 1165, "tcp" },
+ { "qsm-gui", { NULL }, 1165, "udp" },
+ { "qsm-remote", { NULL }, 1166, "tcp" },
+ { "qsm-remote", { NULL }, 1166, "udp" },
+ { "cisco-ipsla", { NULL }, 1167, "tcp" },
+ { "cisco-ipsla", { NULL }, 1167, "udp" },
+ { "cisco-ipsla", { NULL }, 1167, "sctp"},
+ { "vchat", { NULL }, 1168, "tcp" },
+ { "vchat", { NULL }, 1168, "udp" },
+ { "tripwire", { NULL }, 1169, "tcp" },
+ { "tripwire", { NULL }, 1169, "udp" },
+ { "atc-lm", { NULL }, 1170, "tcp" },
+ { "atc-lm", { NULL }, 1170, "udp" },
+ { "atc-appserver", { NULL }, 1171, "tcp" },
+ { "atc-appserver", { NULL }, 1171, "udp" },
+ { "dnap", { NULL }, 1172, "tcp" },
+ { "dnap", { NULL }, 1172, "udp" },
+ { "d-cinema-rrp", { NULL }, 1173, "tcp" },
+ { "d-cinema-rrp", { NULL }, 1173, "udp" },
+ { "fnet-remote-ui", { NULL }, 1174, "tcp" },
+ { "fnet-remote-ui", { NULL }, 1174, "udp" },
+ { "dossier", { NULL }, 1175, "tcp" },
+ { "dossier", { NULL }, 1175, "udp" },
+ { "indigo-server", { NULL }, 1176, "tcp" },
+ { "indigo-server", { NULL }, 1176, "udp" },
+ { "dkmessenger", { NULL }, 1177, "tcp" },
+ { "dkmessenger", { NULL }, 1177, "udp" },
+ { "sgi-storman", { NULL }, 1178, "tcp" },
+ { "sgi-storman", { NULL }, 1178, "udp" },
+ { "b2n", { NULL }, 1179, "tcp" },
+ { "b2n", { NULL }, 1179, "udp" },
+ { "mc-client", { NULL }, 1180, "tcp" },
+ { "mc-client", { NULL }, 1180, "udp" },
+ { "3comnetman", { NULL }, 1181, "tcp" },
+ { "3comnetman", { NULL }, 1181, "udp" },
+ { "accelenet", { NULL }, 1182, "tcp" },
+ { "accelenet-data", { NULL }, 1182, "udp" },
+ { "llsurfup-http", { NULL }, 1183, "tcp" },
+ { "llsurfup-http", { NULL }, 1183, "udp" },
+ { "llsurfup-https", { NULL }, 1184, "tcp" },
+ { "llsurfup-https", { NULL }, 1184, "udp" },
+ { "catchpole", { NULL }, 1185, "tcp" },
+ { "catchpole", { NULL }, 1185, "udp" },
+ { "mysql-cluster", { NULL }, 1186, "tcp" },
+ { "mysql-cluster", { NULL }, 1186, "udp" },
+ { "alias", { NULL }, 1187, "tcp" },
+ { "alias", { NULL }, 1187, "udp" },
+ { "hp-webadmin", { NULL }, 1188, "tcp" },
+ { "hp-webadmin", { NULL }, 1188, "udp" },
+ { "unet", { NULL }, 1189, "tcp" },
+ { "unet", { NULL }, 1189, "udp" },
+ { "commlinx-avl", { NULL }, 1190, "tcp" },
+ { "commlinx-avl", { NULL }, 1190, "udp" },
+ { "gpfs", { NULL }, 1191, "tcp" },
+ { "gpfs", { NULL }, 1191, "udp" },
+ { "caids-sensor", { NULL }, 1192, "tcp" },
+ { "caids-sensor", { NULL }, 1192, "udp" },
+ { "fiveacross", { NULL }, 1193, "tcp" },
+ { "fiveacross", { NULL }, 1193, "udp" },
+ { "openvpn", { NULL }, 1194, "tcp" },
+ { "openvpn", { NULL }, 1194, "udp" },
+ { "rsf-1", { NULL }, 1195, "tcp" },
+ { "rsf-1", { NULL }, 1195, "udp" },
+ { "netmagic", { NULL }, 1196, "tcp" },
+ { "netmagic", { NULL }, 1196, "udp" },
+ { "carrius-rshell", { NULL }, 1197, "tcp" },
+ { "carrius-rshell", { NULL }, 1197, "udp" },
+ { "cajo-discovery", { NULL }, 1198, "tcp" },
+ { "cajo-discovery", { NULL }, 1198, "udp" },
+ { "dmidi", { NULL }, 1199, "tcp" },
+ { "dmidi", { NULL }, 1199, "udp" },
+ { "scol", { NULL }, 1200, "tcp" },
+ { "scol", { NULL }, 1200, "udp" },
+ { "nucleus-sand", { NULL }, 1201, "tcp" },
+ { "nucleus-sand", { NULL }, 1201, "udp" },
+ { "caiccipc", { NULL }, 1202, "tcp" },
+ { "caiccipc", { NULL }, 1202, "udp" },
+ { "ssslic-mgr", { NULL }, 1203, "tcp" },
+ { "ssslic-mgr", { NULL }, 1203, "udp" },
+ { "ssslog-mgr", { NULL }, 1204, "tcp" },
+ { "ssslog-mgr", { NULL }, 1204, "udp" },
+ { "accord-mgc", { NULL }, 1205, "tcp" },
+ { "accord-mgc", { NULL }, 1205, "udp" },
+ { "anthony-data", { NULL }, 1206, "tcp" },
+ { "anthony-data", { NULL }, 1206, "udp" },
+ { "metasage", { NULL }, 1207, "tcp" },
+ { "metasage", { NULL }, 1207, "udp" },
+ { "seagull-ais", { NULL }, 1208, "tcp" },
+ { "seagull-ais", { NULL }, 1208, "udp" },
+ { "ipcd3", { NULL }, 1209, "tcp" },
+ { "ipcd3", { NULL }, 1209, "udp" },
+ { "eoss", { NULL }, 1210, "tcp" },
+ { "eoss", { NULL }, 1210, "udp" },
+ { "groove-dpp", { NULL }, 1211, "tcp" },
+ { "groove-dpp", { NULL }, 1211, "udp" },
+ { "lupa", { NULL }, 1212, "tcp" },
+ { "lupa", { NULL }, 1212, "udp" },
+ { "mpc-lifenet", { NULL }, 1213, "tcp" },
+ { "mpc-lifenet", { NULL }, 1213, "udp" },
+ { "kazaa", { NULL }, 1214, "tcp" },
+ { "kazaa", { NULL }, 1214, "udp" },
+ { "scanstat-1", { NULL }, 1215, "tcp" },
+ { "scanstat-1", { NULL }, 1215, "udp" },
+ { "etebac5", { NULL }, 1216, "tcp" },
+ { "etebac5", { NULL }, 1216, "udp" },
+ { "hpss-ndapi", { NULL }, 1217, "tcp" },
+ { "hpss-ndapi", { NULL }, 1217, "udp" },
+ { "aeroflight-ads", { NULL }, 1218, "tcp" },
+ { "aeroflight-ads", { NULL }, 1218, "udp" },
+ { "aeroflight-ret", { NULL }, 1219, "tcp" },
+ { "aeroflight-ret", { NULL }, 1219, "udp" },
+ { "qt-serveradmin", { NULL }, 1220, "tcp" },
+ { "qt-serveradmin", { NULL }, 1220, "udp" },
+ { "sweetware-apps", { NULL }, 1221, "tcp" },
+ { "sweetware-apps", { NULL }, 1221, "udp" },
+ { "nerv", { NULL }, 1222, "tcp" },
+ { "nerv", { NULL }, 1222, "udp" },
+ { "tgp", { NULL }, 1223, "tcp" },
+ { "tgp", { NULL }, 1223, "udp" },
+ { "vpnz", { NULL }, 1224, "tcp" },
+ { "vpnz", { NULL }, 1224, "udp" },
+ { "slinkysearch", { NULL }, 1225, "tcp" },
+ { "slinkysearch", { NULL }, 1225, "udp" },
+ { "stgxfws", { NULL }, 1226, "tcp" },
+ { "stgxfws", { NULL }, 1226, "udp" },
+ { "dns2go", { NULL }, 1227, "tcp" },
+ { "dns2go", { NULL }, 1227, "udp" },
+ { "florence", { NULL }, 1228, "tcp" },
+ { "florence", { NULL }, 1228, "udp" },
+ { "zented", { NULL }, 1229, "tcp" },
+ { "zented", { NULL }, 1229, "udp" },
+ { "periscope", { NULL }, 1230, "tcp" },
+ { "periscope", { NULL }, 1230, "udp" },
+ { "menandmice-lpm", { NULL }, 1231, "tcp" },
+ { "menandmice-lpm", { NULL }, 1231, "udp" },
+ { "univ-appserver", { NULL }, 1233, "tcp" },
+ { "univ-appserver", { NULL }, 1233, "udp" },
+ { "search-agent", { NULL }, 1234, "tcp" },
+ { "search-agent", { NULL }, 1234, "udp" },
+ { "mosaicsyssvc1", { NULL }, 1235, "tcp" },
+ { "mosaicsyssvc1", { NULL }, 1235, "udp" },
+ { "bvcontrol", { NULL }, 1236, "tcp" },
+ { "bvcontrol", { NULL }, 1236, "udp" },
+ { "tsdos390", { NULL }, 1237, "tcp" },
+ { "tsdos390", { NULL }, 1237, "udp" },
+ { "hacl-qs", { NULL }, 1238, "tcp" },
+ { "hacl-qs", { NULL }, 1238, "udp" },
+ { "nmsd", { NULL }, 1239, "tcp" },
+ { "nmsd", { NULL }, 1239, "udp" },
+ { "instantia", { NULL }, 1240, "tcp" },
+ { "instantia", { NULL }, 1240, "udp" },
+ { "nessus", { NULL }, 1241, "tcp" },
+ { "nessus", { NULL }, 1241, "udp" },
+ { "nmasoverip", { NULL }, 1242, "tcp" },
+ { "nmasoverip", { NULL }, 1242, "udp" },
+ { "serialgateway", { NULL }, 1243, "tcp" },
+ { "serialgateway", { NULL }, 1243, "udp" },
+ { "isbconference1", { NULL }, 1244, "tcp" },
+ { "isbconference1", { NULL }, 1244, "udp" },
+ { "isbconference2", { NULL }, 1245, "tcp" },
+ { "isbconference2", { NULL }, 1245, "udp" },
+ { "payrouter", { NULL }, 1246, "tcp" },
+ { "payrouter", { NULL }, 1246, "udp" },
+ { "visionpyramid", { NULL }, 1247, "tcp" },
+ { "visionpyramid", { NULL }, 1247, "udp" },
+ { "hermes", { NULL }, 1248, "tcp" },
+ { "hermes", { NULL }, 1248, "udp" },
+ { "mesavistaco", { NULL }, 1249, "tcp" },
+ { "mesavistaco", { NULL }, 1249, "udp" },
+ { "swldy-sias", { NULL }, 1250, "tcp" },
+ { "swldy-sias", { NULL }, 1250, "udp" },
+ { "servergraph", { NULL }, 1251, "tcp" },
+ { "servergraph", { NULL }, 1251, "udp" },
+ { "bspne-pcc", { NULL }, 1252, "tcp" },
+ { "bspne-pcc", { NULL }, 1252, "udp" },
+ { "q55-pcc", { NULL }, 1253, "tcp" },
+ { "q55-pcc", { NULL }, 1253, "udp" },
+ { "de-noc", { NULL }, 1254, "tcp" },
+ { "de-noc", { NULL }, 1254, "udp" },
+ { "de-cache-query", { NULL }, 1255, "tcp" },
+ { "de-cache-query", { NULL }, 1255, "udp" },
+ { "de-server", { NULL }, 1256, "tcp" },
+ { "de-server", { NULL }, 1256, "udp" },
+ { "shockwave2", { NULL }, 1257, "tcp" },
+ { "shockwave2", { NULL }, 1257, "udp" },
+ { "opennl", { NULL }, 1258, "tcp" },
+ { "opennl", { NULL }, 1258, "udp" },
+ { "opennl-voice", { NULL }, 1259, "tcp" },
+ { "opennl-voice", { NULL }, 1259, "udp" },
+ { "ibm-ssd", { NULL }, 1260, "tcp" },
+ { "ibm-ssd", { NULL }, 1260, "udp" },
+ { "mpshrsv", { NULL }, 1261, "tcp" },
+ { "mpshrsv", { NULL }, 1261, "udp" },
+ { "qnts-orb", { NULL }, 1262, "tcp" },
+ { "qnts-orb", { NULL }, 1262, "udp" },
+ { "dka", { NULL }, 1263, "tcp" },
+ { "dka", { NULL }, 1263, "udp" },
+ { "prat", { NULL }, 1264, "tcp" },
+ { "prat", { NULL }, 1264, "udp" },
+ { "dssiapi", { NULL }, 1265, "tcp" },
+ { "dssiapi", { NULL }, 1265, "udp" },
+ { "dellpwrappks", { NULL }, 1266, "tcp" },
+ { "dellpwrappks", { NULL }, 1266, "udp" },
+ { "epc", { NULL }, 1267, "tcp" },
+ { "epc", { NULL }, 1267, "udp" },
+ { "propel-msgsys", { NULL }, 1268, "tcp" },
+ { "propel-msgsys", { NULL }, 1268, "udp" },
+ { "watilapp", { NULL }, 1269, "tcp" },
+ { "watilapp", { NULL }, 1269, "udp" },
+ { "opsmgr", { NULL }, 1270, "tcp" },
+ { "opsmgr", { NULL }, 1270, "udp" },
+ { "excw", { NULL }, 1271, "tcp" },
+ { "excw", { NULL }, 1271, "udp" },
+ { "cspmlockmgr", { NULL }, 1272, "tcp" },
+ { "cspmlockmgr", { NULL }, 1272, "udp" },
+ { "emc-gateway", { NULL }, 1273, "tcp" },
+ { "emc-gateway", { NULL }, 1273, "udp" },
+ { "t1distproc", { NULL }, 1274, "tcp" },
+ { "t1distproc", { NULL }, 1274, "udp" },
+ { "ivcollector", { NULL }, 1275, "tcp" },
+ { "ivcollector", { NULL }, 1275, "udp" },
+ { "ivmanager", { NULL }, 1276, "tcp" },
+ { "ivmanager", { NULL }, 1276, "udp" },
+ { "miva-mqs", { NULL }, 1277, "tcp" },
+ { "miva-mqs", { NULL }, 1277, "udp" },
+ { "dellwebadmin-1", { NULL }, 1278, "tcp" },
+ { "dellwebadmin-1", { NULL }, 1278, "udp" },
+ { "dellwebadmin-2", { NULL }, 1279, "tcp" },
+ { "dellwebadmin-2", { NULL }, 1279, "udp" },
+ { "pictrography", { NULL }, 1280, "tcp" },
+ { "pictrography", { NULL }, 1280, "udp" },
+ { "healthd", { NULL }, 1281, "tcp" },
+ { "healthd", { NULL }, 1281, "udp" },
+ { "emperion", { NULL }, 1282, "tcp" },
+ { "emperion", { NULL }, 1282, "udp" },
+ { "productinfo", { NULL }, 1283, "tcp" },
+ { "productinfo", { NULL }, 1283, "udp" },
+ { "iee-qfx", { NULL }, 1284, "tcp" },
+ { "iee-qfx", { NULL }, 1284, "udp" },
+ { "neoiface", { NULL }, 1285, "tcp" },
+ { "neoiface", { NULL }, 1285, "udp" },
+ { "netuitive", { NULL }, 1286, "tcp" },
+ { "netuitive", { NULL }, 1286, "udp" },
+ { "routematch", { NULL }, 1287, "tcp" },
+ { "routematch", { NULL }, 1287, "udp" },
+ { "navbuddy", { NULL }, 1288, "tcp" },
+ { "navbuddy", { NULL }, 1288, "udp" },
+ { "jwalkserver", { NULL }, 1289, "tcp" },
+ { "jwalkserver", { NULL }, 1289, "udp" },
+ { "winjaserver", { NULL }, 1290, "tcp" },
+ { "winjaserver", { NULL }, 1290, "udp" },
+ { "seagulllms", { NULL }, 1291, "tcp" },
+ { "seagulllms", { NULL }, 1291, "udp" },
+ { "dsdn", { NULL }, 1292, "tcp" },
+ { "dsdn", { NULL }, 1292, "udp" },
+ { "pkt-krb-ipsec", { NULL }, 1293, "tcp" },
+ { "pkt-krb-ipsec", { NULL }, 1293, "udp" },
+ { "cmmdriver", { NULL }, 1294, "tcp" },
+ { "cmmdriver", { NULL }, 1294, "udp" },
+ { "ehtp", { NULL }, 1295, "tcp" },
+ { "ehtp", { NULL }, 1295, "udp" },
+ { "dproxy", { NULL }, 1296, "tcp" },
+ { "dproxy", { NULL }, 1296, "udp" },
+ { "sdproxy", { NULL }, 1297, "tcp" },
+ { "sdproxy", { NULL }, 1297, "udp" },
+ { "lpcp", { NULL }, 1298, "tcp" },
+ { "lpcp", { NULL }, 1298, "udp" },
+ { "hp-sci", { NULL }, 1299, "tcp" },
+ { "hp-sci", { NULL }, 1299, "udp" },
+ { "h323hostcallsc", { NULL }, 1300, "tcp" },
+ { "h323hostcallsc", { NULL }, 1300, "udp" },
+ { "ci3-software-1", { NULL }, 1301, "tcp" },
+ { "ci3-software-1", { NULL }, 1301, "udp" },
+ { "ci3-software-2", { NULL }, 1302, "tcp" },
+ { "ci3-software-2", { NULL }, 1302, "udp" },
+ { "sftsrv", { NULL }, 1303, "tcp" },
+ { "sftsrv", { NULL }, 1303, "udp" },
+ { "boomerang", { NULL }, 1304, "tcp" },
+ { "boomerang", { NULL }, 1304, "udp" },
+ { "pe-mike", { NULL }, 1305, "tcp" },
+ { "pe-mike", { NULL }, 1305, "udp" },
+ { "re-conn-proto", { NULL }, 1306, "tcp" },
+ { "re-conn-proto", { NULL }, 1306, "udp" },
+ { "pacmand", { NULL }, 1307, "tcp" },
+ { "pacmand", { NULL }, 1307, "udp" },
+ { "odsi", { NULL }, 1308, "tcp" },
+ { "odsi", { NULL }, 1308, "udp" },
+ { "jtag-server", { NULL }, 1309, "tcp" },
+ { "jtag-server", { NULL }, 1309, "udp" },
+ { "husky", { NULL }, 1310, "tcp" },
+ { "husky", { NULL }, 1310, "udp" },
+ { "rxmon", { NULL }, 1311, "tcp" },
+ { "rxmon", { NULL }, 1311, "udp" },
+ { "sti-envision", { NULL }, 1312, "tcp" },
+ { "sti-envision", { NULL }, 1312, "udp" },
+ { "bmc_patroldb", { NULL }, 1313, "tcp" },
+ { "bmc_patroldb", { NULL }, 1313, "udp" },
+ { "pdps", { NULL }, 1314, "tcp" },
+ { "pdps", { NULL }, 1314, "udp" },
+ { "els", { NULL }, 1315, "tcp" },
+ { "els", { NULL }, 1315, "udp" },
+ { "exbit-escp", { NULL }, 1316, "tcp" },
+ { "exbit-escp", { NULL }, 1316, "udp" },
+ { "vrts-ipcserver", { NULL }, 1317, "tcp" },
+ { "vrts-ipcserver", { NULL }, 1317, "udp" },
+ { "krb5gatekeeper", { NULL }, 1318, "tcp" },
+ { "krb5gatekeeper", { NULL }, 1318, "udp" },
+ { "amx-icsp", { NULL }, 1319, "tcp" },
+ { "amx-icsp", { NULL }, 1319, "udp" },
+ { "amx-axbnet", { NULL }, 1320, "tcp" },
+ { "amx-axbnet", { NULL }, 1320, "udp" },
+ { "pip", { NULL }, 1321, "tcp" },
+ { "pip", { NULL }, 1321, "udp" },
+ { "novation", { NULL }, 1322, "tcp" },
+ { "novation", { NULL }, 1322, "udp" },
+ { "brcd", { NULL }, 1323, "tcp" },
+ { "brcd", { NULL }, 1323, "udp" },
+ { "delta-mcp", { NULL }, 1324, "tcp" },
+ { "delta-mcp", { NULL }, 1324, "udp" },
+ { "dx-instrument", { NULL }, 1325, "tcp" },
+ { "dx-instrument", { NULL }, 1325, "udp" },
+ { "wimsic", { NULL }, 1326, "tcp" },
+ { "wimsic", { NULL }, 1326, "udp" },
+ { "ultrex", { NULL }, 1327, "tcp" },
+ { "ultrex", { NULL }, 1327, "udp" },
+ { "ewall", { NULL }, 1328, "tcp" },
+ { "ewall", { NULL }, 1328, "udp" },
+ { "netdb-export", { NULL }, 1329, "tcp" },
+ { "netdb-export", { NULL }, 1329, "udp" },
+ { "streetperfect", { NULL }, 1330, "tcp" },
+ { "streetperfect", { NULL }, 1330, "udp" },
+ { "intersan", { NULL }, 1331, "tcp" },
+ { "intersan", { NULL }, 1331, "udp" },
+ { "pcia-rxp-b", { NULL }, 1332, "tcp" },
+ { "pcia-rxp-b", { NULL }, 1332, "udp" },
+ { "passwrd-policy", { NULL }, 1333, "tcp" },
+ { "passwrd-policy", { NULL }, 1333, "udp" },
+ { "writesrv", { NULL }, 1334, "tcp" },
+ { "writesrv", { NULL }, 1334, "udp" },
+ { "digital-notary", { NULL }, 1335, "tcp" },
+ { "digital-notary", { NULL }, 1335, "udp" },
+ { "ischat", { NULL }, 1336, "tcp" },
+ { "ischat", { NULL }, 1336, "udp" },
+ { "menandmice-dns", { NULL }, 1337, "tcp" },
+ { "menandmice-dns", { NULL }, 1337, "udp" },
+ { "wmc-log-svc", { NULL }, 1338, "tcp" },
+ { "wmc-log-svc", { NULL }, 1338, "udp" },
+ { "kjtsiteserver", { NULL }, 1339, "tcp" },
+ { "kjtsiteserver", { NULL }, 1339, "udp" },
+ { "naap", { NULL }, 1340, "tcp" },
+ { "naap", { NULL }, 1340, "udp" },
+ { "qubes", { NULL }, 1341, "tcp" },
+ { "qubes", { NULL }, 1341, "udp" },
+ { "esbroker", { NULL }, 1342, "tcp" },
+ { "esbroker", { NULL }, 1342, "udp" },
+ { "re101", { NULL }, 1343, "tcp" },
+ { "re101", { NULL }, 1343, "udp" },
+ { "icap", { NULL }, 1344, "tcp" },
+ { "icap", { NULL }, 1344, "udp" },
+ { "vpjp", { NULL }, 1345, "tcp" },
+ { "vpjp", { NULL }, 1345, "udp" },
+ { "alta-ana-lm", { NULL }, 1346, "tcp" },
+ { "alta-ana-lm", { NULL }, 1346, "udp" },
+ { "bbn-mmc", { NULL }, 1347, "tcp" },
+ { "bbn-mmc", { NULL }, 1347, "udp" },
+ { "bbn-mmx", { NULL }, 1348, "tcp" },
+ { "bbn-mmx", { NULL }, 1348, "udp" },
+ { "sbook", { NULL }, 1349, "tcp" },
+ { "sbook", { NULL }, 1349, "udp" },
+ { "editbench", { NULL }, 1350, "tcp" },
+ { "editbench", { NULL }, 1350, "udp" },
+ { "equationbuilder", { NULL }, 1351, "tcp" },
+ { "equationbuilder", { NULL }, 1351, "udp" },
+ { "lotusnote", { NULL }, 1352, "tcp" },
+ { "lotusnote", { NULL }, 1352, "udp" },
+ { "relief", { NULL }, 1353, "tcp" },
+ { "relief", { NULL }, 1353, "udp" },
+ { "XSIP-network", { NULL }, 1354, "tcp" },
+ { "XSIP-network", { NULL }, 1354, "udp" },
+ { "intuitive-edge", { NULL }, 1355, "tcp" },
+ { "intuitive-edge", { NULL }, 1355, "udp" },
+ { "cuillamartin", { NULL }, 1356, "tcp" },
+ { "cuillamartin", { NULL }, 1356, "udp" },
+ { "pegboard", { NULL }, 1357, "tcp" },
+ { "pegboard", { NULL }, 1357, "udp" },
+ { "connlcli", { NULL }, 1358, "tcp" },
+ { "connlcli", { NULL }, 1358, "udp" },
+ { "ftsrv", { NULL }, 1359, "tcp" },
+ { "ftsrv", { NULL }, 1359, "udp" },
+ { "mimer", { NULL }, 1360, "tcp" },
+ { "mimer", { NULL }, 1360, "udp" },
+ { "linx", { NULL }, 1361, "tcp" },
+ { "linx", { NULL }, 1361, "udp" },
+ { "timeflies", { NULL }, 1362, "tcp" },
+ { "timeflies", { NULL }, 1362, "udp" },
+ { "ndm-requester", { NULL }, 1363, "tcp" },
+ { "ndm-requester", { NULL }, 1363, "udp" },
+ { "ndm-server", { NULL }, 1364, "tcp" },
+ { "ndm-server", { NULL }, 1364, "udp" },
+ { "adapt-sna", { NULL }, 1365, "tcp" },
+ { "adapt-sna", { NULL }, 1365, "udp" },
+ { "netware-csp", { NULL }, 1366, "tcp" },
+ { "netware-csp", { NULL }, 1366, "udp" },
+ { "dcs", { NULL }, 1367, "tcp" },
+ { "dcs", { NULL }, 1367, "udp" },
+ { "screencast", { NULL }, 1368, "tcp" },
+ { "screencast", { NULL }, 1368, "udp" },
+ { "gv-us", { NULL }, 1369, "tcp" },
+ { "gv-us", { NULL }, 1369, "udp" },
+ { "us-gv", { NULL }, 1370, "tcp" },
+ { "us-gv", { NULL }, 1370, "udp" },
+ { "fc-cli", { NULL }, 1371, "tcp" },
+ { "fc-cli", { NULL }, 1371, "udp" },
+ { "fc-ser", { NULL }, 1372, "tcp" },
+ { "fc-ser", { NULL }, 1372, "udp" },
+ { "chromagrafx", { NULL }, 1373, "tcp" },
+ { "chromagrafx", { NULL }, 1373, "udp" },
+ { "molly", { NULL }, 1374, "tcp" },
+ { "molly", { NULL }, 1374, "udp" },
+ { "bytex", { NULL }, 1375, "tcp" },
+ { "bytex", { NULL }, 1375, "udp" },
+ { "ibm-pps", { NULL }, 1376, "tcp" },
+ { "ibm-pps", { NULL }, 1376, "udp" },
+ { "cichlid", { NULL }, 1377, "tcp" },
+ { "cichlid", { NULL }, 1377, "udp" },
+ { "elan", { NULL }, 1378, "tcp" },
+ { "elan", { NULL }, 1378, "udp" },
+ { "dbreporter", { NULL }, 1379, "tcp" },
+ { "dbreporter", { NULL }, 1379, "udp" },
+ { "telesis-licman", { NULL }, 1380, "tcp" },
+ { "telesis-licman", { NULL }, 1380, "udp" },
+ { "apple-licman", { NULL }, 1381, "tcp" },
+ { "apple-licman", { NULL }, 1381, "udp" },
+ { "udt_os", { NULL }, 1382, "tcp" },
+ { "udt_os", { NULL }, 1382, "udp" },
+ { "gwha", { NULL }, 1383, "tcp" },
+ { "gwha", { NULL }, 1383, "udp" },
+ { "os-licman", { NULL }, 1384, "tcp" },
+ { "os-licman", { NULL }, 1384, "udp" },
+ { "atex_elmd", { NULL }, 1385, "tcp" },
+ { "atex_elmd", { NULL }, 1385, "udp" },
+ { "checksum", { NULL }, 1386, "tcp" },
+ { "checksum", { NULL }, 1386, "udp" },
+ { "cadsi-lm", { NULL }, 1387, "tcp" },
+ { "cadsi-lm", { NULL }, 1387, "udp" },
+ { "objective-dbc", { NULL }, 1388, "tcp" },
+ { "objective-dbc", { NULL }, 1388, "udp" },
+ { "iclpv-dm", { NULL }, 1389, "tcp" },
+ { "iclpv-dm", { NULL }, 1389, "udp" },
+ { "iclpv-sc", { NULL }, 1390, "tcp" },
+ { "iclpv-sc", { NULL }, 1390, "udp" },
+ { "iclpv-sas", { NULL }, 1391, "tcp" },
+ { "iclpv-sas", { NULL }, 1391, "udp" },
+ { "iclpv-pm", { NULL }, 1392, "tcp" },
+ { "iclpv-pm", { NULL }, 1392, "udp" },
+ { "iclpv-nls", { NULL }, 1393, "tcp" },
+ { "iclpv-nls", { NULL }, 1393, "udp" },
+ { "iclpv-nlc", { NULL }, 1394, "tcp" },
+ { "iclpv-nlc", { NULL }, 1394, "udp" },
+ { "iclpv-wsm", { NULL }, 1395, "tcp" },
+ { "iclpv-wsm", { NULL }, 1395, "udp" },
+ { "dvl-activemail", { NULL }, 1396, "tcp" },
+ { "dvl-activemail", { NULL }, 1396, "udp" },
+ { "audio-activmail", { NULL }, 1397, "tcp" },
+ { "audio-activmail", { NULL }, 1397, "udp" },
+ { "video-activmail", { NULL }, 1398, "tcp" },
+ { "video-activmail", { NULL }, 1398, "udp" },
+ { "cadkey-licman", { NULL }, 1399, "tcp" },
+ { "cadkey-licman", { NULL }, 1399, "udp" },
+ { "cadkey-tablet", { NULL }, 1400, "tcp" },
+ { "cadkey-tablet", { NULL }, 1400, "udp" },
+ { "goldleaf-licman", { NULL }, 1401, "tcp" },
+ { "goldleaf-licman", { NULL }, 1401, "udp" },
+ { "prm-sm-np", { NULL }, 1402, "tcp" },
+ { "prm-sm-np", { NULL }, 1402, "udp" },
+ { "prm-nm-np", { NULL }, 1403, "tcp" },
+ { "prm-nm-np", { NULL }, 1403, "udp" },
+ { "igi-lm", { NULL }, 1404, "tcp" },
+ { "igi-lm", { NULL }, 1404, "udp" },
+ { "ibm-res", { NULL }, 1405, "tcp" },
+ { "ibm-res", { NULL }, 1405, "udp" },
+ { "netlabs-lm", { NULL }, 1406, "tcp" },
+ { "netlabs-lm", { NULL }, 1406, "udp" },
+ { "dbsa-lm", { NULL }, 1407, "tcp" },
+ { "dbsa-lm", { NULL }, 1407, "udp" },
+ { "sophia-lm", { NULL }, 1408, "tcp" },
+ { "sophia-lm", { NULL }, 1408, "udp" },
+ { "here-lm", { NULL }, 1409, "tcp" },
+ { "here-lm", { NULL }, 1409, "udp" },
+ { "hiq", { NULL }, 1410, "tcp" },
+ { "hiq", { NULL }, 1410, "udp" },
+ { "af", { NULL }, 1411, "tcp" },
+ { "af", { NULL }, 1411, "udp" },
+ { "innosys", { NULL }, 1412, "tcp" },
+ { "innosys", { NULL }, 1412, "udp" },
+ { "innosys-acl", { NULL }, 1413, "tcp" },
+ { "innosys-acl", { NULL }, 1413, "udp" },
+ { "ibm-mqseries", { NULL }, 1414, "tcp" },
+ { "ibm-mqseries", { NULL }, 1414, "udp" },
+ { "dbstar", { NULL }, 1415, "tcp" },
+ { "dbstar", { NULL }, 1415, "udp" },
+ { "novell-lu6.2", { NULL }, 1416, "tcp" },
+ { "novell-lu6.2", { NULL }, 1416, "udp" },
+ { "timbuktu-srv1", { NULL }, 1417, "tcp" },
+ { "timbuktu-srv1", { NULL }, 1417, "udp" },
+ { "timbuktu-srv2", { NULL }, 1418, "tcp" },
+ { "timbuktu-srv2", { NULL }, 1418, "udp" },
+ { "timbuktu-srv3", { NULL }, 1419, "tcp" },
+ { "timbuktu-srv3", { NULL }, 1419, "udp" },
+ { "timbuktu-srv4", { NULL }, 1420, "tcp" },
+ { "timbuktu-srv4", { NULL }, 1420, "udp" },
+ { "gandalf-lm", { NULL }, 1421, "tcp" },
+ { "gandalf-lm", { NULL }, 1421, "udp" },
+ { "autodesk-lm", { NULL }, 1422, "tcp" },
+ { "autodesk-lm", { NULL }, 1422, "udp" },
+ { "essbase", { NULL }, 1423, "tcp" },
+ { "essbase", { NULL }, 1423, "udp" },
+ { "hybrid", { NULL }, 1424, "tcp" },
+ { "hybrid", { NULL }, 1424, "udp" },
+ { "zion-lm", { NULL }, 1425, "tcp" },
+ { "zion-lm", { NULL }, 1425, "udp" },
+ { "sais", { NULL }, 1426, "tcp" },
+ { "sais", { NULL }, 1426, "udp" },
+ { "mloadd", { NULL }, 1427, "tcp" },
+ { "mloadd", { NULL }, 1427, "udp" },
+ { "informatik-lm", { NULL }, 1428, "tcp" },
+ { "informatik-lm", { NULL }, 1428, "udp" },
+ { "nms", { NULL }, 1429, "tcp" },
+ { "nms", { NULL }, 1429, "udp" },
+ { "tpdu", { NULL }, 1430, "tcp" },
+ { "tpdu", { NULL }, 1430, "udp" },
+ { "rgtp", { NULL }, 1431, "tcp" },
+ { "rgtp", { NULL }, 1431, "udp" },
+ { "blueberry-lm", { NULL }, 1432, "tcp" },
+ { "blueberry-lm", { NULL }, 1432, "udp" },
+ { "ms-sql-s", { NULL }, 1433, "tcp" },
+ { "ms-sql-s", { NULL }, 1433, "udp" },
+ { "ms-sql-m", { NULL }, 1434, "tcp" },
+ { "ms-sql-m", { NULL }, 1434, "udp" },
+ { "ibm-cics", { NULL }, 1435, "tcp" },
+ { "ibm-cics", { NULL }, 1435, "udp" },
+ { "saism", { NULL }, 1436, "tcp" },
+ { "saism", { NULL }, 1436, "udp" },
+ { "tabula", { NULL }, 1437, "tcp" },
+ { "tabula", { NULL }, 1437, "udp" },
+ { "eicon-server", { NULL }, 1438, "tcp" },
+ { "eicon-server", { NULL }, 1438, "udp" },
+ { "eicon-x25", { NULL }, 1439, "tcp" },
+ { "eicon-x25", { NULL }, 1439, "udp" },
+ { "eicon-slp", { NULL }, 1440, "tcp" },
+ { "eicon-slp", { NULL }, 1440, "udp" },
+ { "cadis-1", { NULL }, 1441, "tcp" },
+ { "cadis-1", { NULL }, 1441, "udp" },
+ { "cadis-2", { NULL }, 1442, "tcp" },
+ { "cadis-2", { NULL }, 1442, "udp" },
+ { "ies-lm", { NULL }, 1443, "tcp" },
+ { "ies-lm", { NULL }, 1443, "udp" },
+ { "marcam-lm", { NULL }, 1444, "tcp" },
+ { "marcam-lm", { NULL }, 1444, "udp" },
+ { "proxima-lm", { NULL }, 1445, "tcp" },
+ { "proxima-lm", { NULL }, 1445, "udp" },
+ { "ora-lm", { NULL }, 1446, "tcp" },
+ { "ora-lm", { NULL }, 1446, "udp" },
+ { "apri-lm", { NULL }, 1447, "tcp" },
+ { "apri-lm", { NULL }, 1447, "udp" },
+ { "oc-lm", { NULL }, 1448, "tcp" },
+ { "oc-lm", { NULL }, 1448, "udp" },
+ { "peport", { NULL }, 1449, "tcp" },
+ { "peport", { NULL }, 1449, "udp" },
+ { "dwf", { NULL }, 1450, "tcp" },
+ { "dwf", { NULL }, 1450, "udp" },
+ { "infoman", { NULL }, 1451, "tcp" },
+ { "infoman", { NULL }, 1451, "udp" },
+ { "gtegsc-lm", { NULL }, 1452, "tcp" },
+ { "gtegsc-lm", { NULL }, 1452, "udp" },
+ { "genie-lm", { NULL }, 1453, "tcp" },
+ { "genie-lm", { NULL }, 1453, "udp" },
+ { "interhdl_elmd", { NULL }, 1454, "tcp" },
+ { "interhdl_elmd", { NULL }, 1454, "udp" },
+ { "esl-lm", { NULL }, 1455, "tcp" },
+ { "esl-lm", { NULL }, 1455, "udp" },
+ { "dca", { NULL }, 1456, "tcp" },
+ { "dca", { NULL }, 1456, "udp" },
+ { "valisys-lm", { NULL }, 1457, "tcp" },
+ { "valisys-lm", { NULL }, 1457, "udp" },
+ { "nrcabq-lm", { NULL }, 1458, "tcp" },
+ { "nrcabq-lm", { NULL }, 1458, "udp" },
+ { "proshare1", { NULL }, 1459, "tcp" },
+ { "proshare1", { NULL }, 1459, "udp" },
+ { "proshare2", { NULL }, 1460, "tcp" },
+ { "proshare2", { NULL }, 1460, "udp" },
+ { "ibm_wrless_lan", { NULL }, 1461, "tcp" },
+ { "ibm_wrless_lan", { NULL }, 1461, "udp" },
+ { "world-lm", { NULL }, 1462, "tcp" },
+ { "world-lm", { NULL }, 1462, "udp" },
+ { "nucleus", { NULL }, 1463, "tcp" },
+ { "nucleus", { NULL }, 1463, "udp" },
+ { "msl_lmd", { NULL }, 1464, "tcp" },
+ { "msl_lmd", { NULL }, 1464, "udp" },
+ { "pipes", { NULL }, 1465, "tcp" },
+ { "pipes", { NULL }, 1465, "udp" },
+ { "oceansoft-lm", { NULL }, 1466, "tcp" },
+ { "oceansoft-lm", { NULL }, 1466, "udp" },
+ { "csdmbase", { NULL }, 1467, "tcp" },
+ { "csdmbase", { NULL }, 1467, "udp" },
+ { "csdm", { NULL }, 1468, "tcp" },
+ { "csdm", { NULL }, 1468, "udp" },
+ { "aal-lm", { NULL }, 1469, "tcp" },
+ { "aal-lm", { NULL }, 1469, "udp" },
+ { "uaiact", { NULL }, 1470, "tcp" },
+ { "uaiact", { NULL }, 1470, "udp" },
+ { "csdmbase", { NULL }, 1471, "tcp" },
+ { "csdmbase", { NULL }, 1471, "udp" },
+ { "csdm", { NULL }, 1472, "tcp" },
+ { "csdm", { NULL }, 1472, "udp" },
+ { "openmath", { NULL }, 1473, "tcp" },
+ { "openmath", { NULL }, 1473, "udp" },
+ { "telefinder", { NULL }, 1474, "tcp" },
+ { "telefinder", { NULL }, 1474, "udp" },
+ { "taligent-lm", { NULL }, 1475, "tcp" },
+ { "taligent-lm", { NULL }, 1475, "udp" },
+ { "clvm-cfg", { NULL }, 1476, "tcp" },
+ { "clvm-cfg", { NULL }, 1476, "udp" },
+ { "ms-sna-server", { NULL }, 1477, "tcp" },
+ { "ms-sna-server", { NULL }, 1477, "udp" },
+ { "ms-sna-base", { NULL }, 1478, "tcp" },
+ { "ms-sna-base", { NULL }, 1478, "udp" },
+ { "dberegister", { NULL }, 1479, "tcp" },
+ { "dberegister", { NULL }, 1479, "udp" },
+ { "pacerforum", { NULL }, 1480, "tcp" },
+ { "pacerforum", { NULL }, 1480, "udp" },
+ { "airs", { NULL }, 1481, "tcp" },
+ { "airs", { NULL }, 1481, "udp" },
+ { "miteksys-lm", { NULL }, 1482, "tcp" },
+ { "miteksys-lm", { NULL }, 1482, "udp" },
+ { "afs", { NULL }, 1483, "tcp" },
+ { "afs", { NULL }, 1483, "udp" },
+ { "confluent", { NULL }, 1484, "tcp" },
+ { "confluent", { NULL }, 1484, "udp" },
+ { "lansource", { NULL }, 1485, "tcp" },
+ { "lansource", { NULL }, 1485, "udp" },
+ { "nms_topo_serv", { NULL }, 1486, "tcp" },
+ { "nms_topo_serv", { NULL }, 1486, "udp" },
+ { "localinfosrvr", { NULL }, 1487, "tcp" },
+ { "localinfosrvr", { NULL }, 1487, "udp" },
+ { "docstor", { NULL }, 1488, "tcp" },
+ { "docstor", { NULL }, 1488, "udp" },
+ { "dmdocbroker", { NULL }, 1489, "tcp" },
+ { "dmdocbroker", { NULL }, 1489, "udp" },
+ { "insitu-conf", { NULL }, 1490, "tcp" },
+ { "insitu-conf", { NULL }, 1490, "udp" },
+ { "stone-design-1", { NULL }, 1492, "tcp" },
+ { "stone-design-1", { NULL }, 1492, "udp" },
+ { "netmap_lm", { NULL }, 1493, "tcp" },
+ { "netmap_lm", { NULL }, 1493, "udp" },
+ { "ica", { NULL }, 1494, "tcp" },
+ { "ica", { NULL }, 1494, "udp" },
+ { "cvc", { NULL }, 1495, "tcp" },
+ { "cvc", { NULL }, 1495, "udp" },
+ { "liberty-lm", { NULL }, 1496, "tcp" },
+ { "liberty-lm", { NULL }, 1496, "udp" },
+ { "rfx-lm", { NULL }, 1497, "tcp" },
+ { "rfx-lm", { NULL }, 1497, "udp" },
+ { "sybase-sqlany", { NULL }, 1498, "tcp" },
+ { "sybase-sqlany", { NULL }, 1498, "udp" },
+ { "fhc", { NULL }, 1499, "tcp" },
+ { "fhc", { NULL }, 1499, "udp" },
+ { "vlsi-lm", { NULL }, 1500, "tcp" },
+ { "vlsi-lm", { NULL }, 1500, "udp" },
+ { "saiscm", { NULL }, 1501, "tcp" },
+ { "saiscm", { NULL }, 1501, "udp" },
+ { "shivadiscovery", { NULL }, 1502, "tcp" },
+ { "shivadiscovery", { NULL }, 1502, "udp" },
+ { "imtc-mcs", { NULL }, 1503, "tcp" },
+ { "imtc-mcs", { NULL }, 1503, "udp" },
+ { "evb-elm", { NULL }, 1504, "tcp" },
+ { "evb-elm", { NULL }, 1504, "udp" },
+ { "funkproxy", { NULL }, 1505, "tcp" },
+ { "funkproxy", { NULL }, 1505, "udp" },
+ { "utcd", { NULL }, 1506, "tcp" },
+ { "utcd", { NULL }, 1506, "udp" },
+ { "symplex", { NULL }, 1507, "tcp" },
+ { "symplex", { NULL }, 1507, "udp" },
+ { "diagmond", { NULL }, 1508, "tcp" },
+ { "diagmond", { NULL }, 1508, "udp" },
+ { "robcad-lm", { NULL }, 1509, "tcp" },
+ { "robcad-lm", { NULL }, 1509, "udp" },
+ { "mvx-lm", { NULL }, 1510, "tcp" },
+ { "mvx-lm", { NULL }, 1510, "udp" },
+ { "3l-l1", { NULL }, 1511, "tcp" },
+ { "3l-l1", { NULL }, 1511, "udp" },
+ { "wins", { NULL }, 1512, "tcp" },
+ { "wins", { NULL }, 1512, "udp" },
+ { "fujitsu-dtc", { NULL }, 1513, "tcp" },
+ { "fujitsu-dtc", { NULL }, 1513, "udp" },
+ { "fujitsu-dtcns", { NULL }, 1514, "tcp" },
+ { "fujitsu-dtcns", { NULL }, 1514, "udp" },
+ { "ifor-protocol", { NULL }, 1515, "tcp" },
+ { "ifor-protocol", { NULL }, 1515, "udp" },
+ { "vpad", { NULL }, 1516, "tcp" },
+ { "vpad", { NULL }, 1516, "udp" },
+ { "vpac", { NULL }, 1517, "tcp" },
+ { "vpac", { NULL }, 1517, "udp" },
+ { "vpvd", { NULL }, 1518, "tcp" },
+ { "vpvd", { NULL }, 1518, "udp" },
+ { "vpvc", { NULL }, 1519, "tcp" },
+ { "vpvc", { NULL }, 1519, "udp" },
+ { "atm-zip-office", { NULL }, 1520, "tcp" },
+ { "atm-zip-office", { NULL }, 1520, "udp" },
+ { "ncube-lm", { NULL }, 1521, "tcp" },
+ { "ncube-lm", { NULL }, 1521, "udp" },
+ { "ricardo-lm", { NULL }, 1522, "tcp" },
+ { "ricardo-lm", { NULL }, 1522, "udp" },
+ { "cichild-lm", { NULL }, 1523, "tcp" },
+ { "cichild-lm", { NULL }, 1523, "udp" },
+ { "ingreslock", { NULL }, 1524, "tcp" },
+ { "ingreslock", { NULL }, 1524, "udp" },
+ { "orasrv", { NULL }, 1525, "tcp" },
+ { "orasrv", { NULL }, 1525, "udp" },
+ { "prospero-np", { NULL }, 1525, "tcp" },
+ { "prospero-np", { NULL }, 1525, "udp" },
+ { "pdap-np", { NULL }, 1526, "tcp" },
+ { "pdap-np", { NULL }, 1526, "udp" },
+ { "tlisrv", { NULL }, 1527, "tcp" },
+ { "tlisrv", { NULL }, 1527, "udp" },
+ { "coauthor", { NULL }, 1529, "tcp" },
+ { "coauthor", { NULL }, 1529, "udp" },
+ { "rap-service", { NULL }, 1530, "tcp" },
+ { "rap-service", { NULL }, 1530, "udp" },
+ { "rap-listen", { NULL }, 1531, "tcp" },
+ { "rap-listen", { NULL }, 1531, "udp" },
+ { "miroconnect", { NULL }, 1532, "tcp" },
+ { "miroconnect", { NULL }, 1532, "udp" },
+ { "virtual-places", { NULL }, 1533, "tcp" },
+ { "virtual-places", { NULL }, 1533, "udp" },
+ { "micromuse-lm", { NULL }, 1534, "tcp" },
+ { "micromuse-lm", { NULL }, 1534, "udp" },
+ { "ampr-info", { NULL }, 1535, "tcp" },
+ { "ampr-info", { NULL }, 1535, "udp" },
+ { "ampr-inter", { NULL }, 1536, "tcp" },
+ { "ampr-inter", { NULL }, 1536, "udp" },
+ { "sdsc-lm", { NULL }, 1537, "tcp" },
+ { "sdsc-lm", { NULL }, 1537, "udp" },
+ { "3ds-lm", { NULL }, 1538, "tcp" },
+ { "3ds-lm", { NULL }, 1538, "udp" },
+ { "intellistor-lm", { NULL }, 1539, "tcp" },
+ { "intellistor-lm", { NULL }, 1539, "udp" },
+ { "rds", { NULL }, 1540, "tcp" },
+ { "rds", { NULL }, 1540, "udp" },
+ { "rds2", { NULL }, 1541, "tcp" },
+ { "rds2", { NULL }, 1541, "udp" },
+ { "gridgen-elmd", { NULL }, 1542, "tcp" },
+ { "gridgen-elmd", { NULL }, 1542, "udp" },
+ { "simba-cs", { NULL }, 1543, "tcp" },
+ { "simba-cs", { NULL }, 1543, "udp" },
+ { "aspeclmd", { NULL }, 1544, "tcp" },
+ { "aspeclmd", { NULL }, 1544, "udp" },
+ { "vistium-share", { NULL }, 1545, "tcp" },
+ { "vistium-share", { NULL }, 1545, "udp" },
+ { "abbaccuray", { NULL }, 1546, "tcp" },
+ { "abbaccuray", { NULL }, 1546, "udp" },
+ { "laplink", { NULL }, 1547, "tcp" },
+ { "laplink", { NULL }, 1547, "udp" },
+ { "axon-lm", { NULL }, 1548, "tcp" },
+ { "axon-lm", { NULL }, 1548, "udp" },
+ { "shivahose", { NULL }, 1549, "tcp" },
+ { "shivasound", { NULL }, 1549, "udp" },
+ { "3m-image-lm", { NULL }, 1550, "tcp" },
+ { "3m-image-lm", { NULL }, 1550, "udp" },
+ { "hecmtl-db", { NULL }, 1551, "tcp" },
+ { "hecmtl-db", { NULL }, 1551, "udp" },
+ { "pciarray", { NULL }, 1552, "tcp" },
+ { "pciarray", { NULL }, 1552, "udp" },
+ { "sna-cs", { NULL }, 1553, "tcp" },
+ { "sna-cs", { NULL }, 1553, "udp" },
+ { "caci-lm", { NULL }, 1554, "tcp" },
+ { "caci-lm", { NULL }, 1554, "udp" },
+ { "livelan", { NULL }, 1555, "tcp" },
+ { "livelan", { NULL }, 1555, "udp" },
+ { "veritas_pbx", { NULL }, 1556, "tcp" },
+ { "veritas_pbx", { NULL }, 1556, "udp" },
+ { "arbortext-lm", { NULL }, 1557, "tcp" },
+ { "arbortext-lm", { NULL }, 1557, "udp" },
+ { "xingmpeg", { NULL }, 1558, "tcp" },
+ { "xingmpeg", { NULL }, 1558, "udp" },
+ { "web2host", { NULL }, 1559, "tcp" },
+ { "web2host", { NULL }, 1559, "udp" },
+ { "asci-val", { NULL }, 1560, "tcp" },
+ { "asci-val", { NULL }, 1560, "udp" },
+ { "facilityview", { NULL }, 1561, "tcp" },
+ { "facilityview", { NULL }, 1561, "udp" },
+ { "pconnectmgr", { NULL }, 1562, "tcp" },
+ { "pconnectmgr", { NULL }, 1562, "udp" },
+ { "cadabra-lm", { NULL }, 1563, "tcp" },
+ { "cadabra-lm", { NULL }, 1563, "udp" },
+ { "pay-per-view", { NULL }, 1564, "tcp" },
+ { "pay-per-view", { NULL }, 1564, "udp" },
+ { "winddlb", { NULL }, 1565, "tcp" },
+ { "winddlb", { NULL }, 1565, "udp" },
+ { "corelvideo", { NULL }, 1566, "tcp" },
+ { "corelvideo", { NULL }, 1566, "udp" },
+ { "jlicelmd", { NULL }, 1567, "tcp" },
+ { "jlicelmd", { NULL }, 1567, "udp" },
+ { "tsspmap", { NULL }, 1568, "tcp" },
+ { "tsspmap", { NULL }, 1568, "udp" },
+ { "ets", { NULL }, 1569, "tcp" },
+ { "ets", { NULL }, 1569, "udp" },
+ { "orbixd", { NULL }, 1570, "tcp" },
+ { "orbixd", { NULL }, 1570, "udp" },
+ { "rdb-dbs-disp", { NULL }, 1571, "tcp" },
+ { "rdb-dbs-disp", { NULL }, 1571, "udp" },
+ { "chip-lm", { NULL }, 1572, "tcp" },
+ { "chip-lm", { NULL }, 1572, "udp" },
+ { "itscomm-ns", { NULL }, 1573, "tcp" },
+ { "itscomm-ns", { NULL }, 1573, "udp" },
+ { "mvel-lm", { NULL }, 1574, "tcp" },
+ { "mvel-lm", { NULL }, 1574, "udp" },
+ { "oraclenames", { NULL }, 1575, "tcp" },
+ { "oraclenames", { NULL }, 1575, "udp" },
+ { "moldflow-lm", { NULL }, 1576, "tcp" },
+ { "moldflow-lm", { NULL }, 1576, "udp" },
+ { "hypercube-lm", { NULL }, 1577, "tcp" },
+ { "hypercube-lm", { NULL }, 1577, "udp" },
+ { "jacobus-lm", { NULL }, 1578, "tcp" },
+ { "jacobus-lm", { NULL }, 1578, "udp" },
+ { "ioc-sea-lm", { NULL }, 1579, "tcp" },
+ { "ioc-sea-lm", { NULL }, 1579, "udp" },
+ { "tn-tl-r1", { NULL }, 1580, "tcp" },
+ { "tn-tl-r2", { NULL }, 1580, "udp" },
+ { "mil-2045-47001", { NULL }, 1581, "tcp" },
+ { "mil-2045-47001", { NULL }, 1581, "udp" },
+ { "msims", { NULL }, 1582, "tcp" },
+ { "msims", { NULL }, 1582, "udp" },
+ { "simbaexpress", { NULL }, 1583, "tcp" },
+ { "simbaexpress", { NULL }, 1583, "udp" },
+ { "tn-tl-fd2", { NULL }, 1584, "tcp" },
+ { "tn-tl-fd2", { NULL }, 1584, "udp" },
+ { "intv", { NULL }, 1585, "tcp" },
+ { "intv", { NULL }, 1585, "udp" },
+ { "ibm-abtact", { NULL }, 1586, "tcp" },
+ { "ibm-abtact", { NULL }, 1586, "udp" },
+ { "pra_elmd", { NULL }, 1587, "tcp" },
+ { "pra_elmd", { NULL }, 1587, "udp" },
+ { "triquest-lm", { NULL }, 1588, "tcp" },
+ { "triquest-lm", { NULL }, 1588, "udp" },
+ { "vqp", { NULL }, 1589, "tcp" },
+ { "vqp", { NULL }, 1589, "udp" },
+ { "gemini-lm", { NULL }, 1590, "tcp" },
+ { "gemini-lm", { NULL }, 1590, "udp" },
+ { "ncpm-pm", { NULL }, 1591, "tcp" },
+ { "ncpm-pm", { NULL }, 1591, "udp" },
+ { "commonspace", { NULL }, 1592, "tcp" },
+ { "commonspace", { NULL }, 1592, "udp" },
+ { "mainsoft-lm", { NULL }, 1593, "tcp" },
+ { "mainsoft-lm", { NULL }, 1593, "udp" },
+ { "sixtrak", { NULL }, 1594, "tcp" },
+ { "sixtrak", { NULL }, 1594, "udp" },
+ { "radio", { NULL }, 1595, "tcp" },
+ { "radio", { NULL }, 1595, "udp" },
+ { "radio-sm", { NULL }, 1596, "tcp" },
+ { "radio-bc", { NULL }, 1596, "udp" },
+ { "orbplus-iiop", { NULL }, 1597, "tcp" },
+ { "orbplus-iiop", { NULL }, 1597, "udp" },
+ { "picknfs", { NULL }, 1598, "tcp" },
+ { "picknfs", { NULL }, 1598, "udp" },
+ { "simbaservices", { NULL }, 1599, "tcp" },
+ { "simbaservices", { NULL }, 1599, "udp" },
+ { "issd", { NULL }, 1600, "tcp" },
+ { "issd", { NULL }, 1600, "udp" },
+ { "aas", { NULL }, 1601, "tcp" },
+ { "aas", { NULL }, 1601, "udp" },
+ { "inspect", { NULL }, 1602, "tcp" },
+ { "inspect", { NULL }, 1602, "udp" },
+ { "picodbc", { NULL }, 1603, "tcp" },
+ { "picodbc", { NULL }, 1603, "udp" },
+ { "icabrowser", { NULL }, 1604, "tcp" },
+ { "icabrowser", { NULL }, 1604, "udp" },
+ { "slp", { NULL }, 1605, "tcp" },
+ { "slp", { NULL }, 1605, "udp" },
+ { "slm-api", { NULL }, 1606, "tcp" },
+ { "slm-api", { NULL }, 1606, "udp" },
+ { "stt", { NULL }, 1607, "tcp" },
+ { "stt", { NULL }, 1607, "udp" },
+ { "smart-lm", { NULL }, 1608, "tcp" },
+ { "smart-lm", { NULL }, 1608, "udp" },
+ { "isysg-lm", { NULL }, 1609, "tcp" },
+ { "isysg-lm", { NULL }, 1609, "udp" },
+ { "taurus-wh", { NULL }, 1610, "tcp" },
+ { "taurus-wh", { NULL }, 1610, "udp" },
+ { "ill", { NULL }, 1611, "tcp" },
+ { "ill", { NULL }, 1611, "udp" },
+ { "netbill-trans", { NULL }, 1612, "tcp" },
+ { "netbill-trans", { NULL }, 1612, "udp" },
+ { "netbill-keyrep", { NULL }, 1613, "tcp" },
+ { "netbill-keyrep", { NULL }, 1613, "udp" },
+ { "netbill-cred", { NULL }, 1614, "tcp" },
+ { "netbill-cred", { NULL }, 1614, "udp" },
+ { "netbill-auth", { NULL }, 1615, "tcp" },
+ { "netbill-auth", { NULL }, 1615, "udp" },
+ { "netbill-prod", { NULL }, 1616, "tcp" },
+ { "netbill-prod", { NULL }, 1616, "udp" },
+ { "nimrod-agent", { NULL }, 1617, "tcp" },
+ { "nimrod-agent", { NULL }, 1617, "udp" },
+ { "skytelnet", { NULL }, 1618, "tcp" },
+ { "skytelnet", { NULL }, 1618, "udp" },
+ { "xs-openstorage", { NULL }, 1619, "tcp" },
+ { "xs-openstorage", { NULL }, 1619, "udp" },
+ { "faxportwinport", { NULL }, 1620, "tcp" },
+ { "faxportwinport", { NULL }, 1620, "udp" },
+ { "softdataphone", { NULL }, 1621, "tcp" },
+ { "softdataphone", { NULL }, 1621, "udp" },
+ { "ontime", { NULL }, 1622, "tcp" },
+ { "ontime", { NULL }, 1622, "udp" },
+ { "jaleosnd", { NULL }, 1623, "tcp" },
+ { "jaleosnd", { NULL }, 1623, "udp" },
+ { "udp-sr-port", { NULL }, 1624, "tcp" },
+ { "udp-sr-port", { NULL }, 1624, "udp" },
+ { "svs-omagent", { NULL }, 1625, "tcp" },
+ { "svs-omagent", { NULL }, 1625, "udp" },
+ { "shockwave", { NULL }, 1626, "tcp" },
+ { "shockwave", { NULL }, 1626, "udp" },
+ { "t128-gateway", { NULL }, 1627, "tcp" },
+ { "t128-gateway", { NULL }, 1627, "udp" },
+ { "lontalk-norm", { NULL }, 1628, "tcp" },
+ { "lontalk-norm", { NULL }, 1628, "udp" },
+ { "lontalk-urgnt", { NULL }, 1629, "tcp" },
+ { "lontalk-urgnt", { NULL }, 1629, "udp" },
+ { "oraclenet8cman", { NULL }, 1630, "tcp" },
+ { "oraclenet8cman", { NULL }, 1630, "udp" },
+ { "visitview", { NULL }, 1631, "tcp" },
+ { "visitview", { NULL }, 1631, "udp" },
+ { "pammratc", { NULL }, 1632, "tcp" },
+ { "pammratc", { NULL }, 1632, "udp" },
+ { "pammrpc", { NULL }, 1633, "tcp" },
+ { "pammrpc", { NULL }, 1633, "udp" },
+ { "loaprobe", { NULL }, 1634, "tcp" },
+ { "loaprobe", { NULL }, 1634, "udp" },
+ { "edb-server1", { NULL }, 1635, "tcp" },
+ { "edb-server1", { NULL }, 1635, "udp" },
+ { "isdc", { NULL }, 1636, "tcp" },
+ { "isdc", { NULL }, 1636, "udp" },
+ { "islc", { NULL }, 1637, "tcp" },
+ { "islc", { NULL }, 1637, "udp" },
+ { "ismc", { NULL }, 1638, "tcp" },
+ { "ismc", { NULL }, 1638, "udp" },
+ { "cert-initiator", { NULL }, 1639, "tcp" },
+ { "cert-initiator", { NULL }, 1639, "udp" },
+ { "cert-responder", { NULL }, 1640, "tcp" },
+ { "cert-responder", { NULL }, 1640, "udp" },
+ { "invision", { NULL }, 1641, "tcp" },
+ { "invision", { NULL }, 1641, "udp" },
+ { "isis-am", { NULL }, 1642, "tcp" },
+ { "isis-am", { NULL }, 1642, "udp" },
+ { "isis-ambc", { NULL }, 1643, "tcp" },
+ { "isis-ambc", { NULL }, 1643, "udp" },
+ { "saiseh", { NULL }, 1644, "tcp" },
+ { "sightline", { NULL }, 1645, "tcp" },
+ { "sightline", { NULL }, 1645, "udp" },
+ { "sa-msg-port", { NULL }, 1646, "tcp" },
+ { "sa-msg-port", { NULL }, 1646, "udp" },
+ { "rsap", { NULL }, 1647, "tcp" },
+ { "rsap", { NULL }, 1647, "udp" },
+ { "concurrent-lm", { NULL }, 1648, "tcp" },
+ { "concurrent-lm", { NULL }, 1648, "udp" },
+ { "kermit", { NULL }, 1649, "tcp" },
+ { "kermit", { NULL }, 1649, "udp" },
+ { "nkd", { NULL }, 1650, "tcp" },
+ { "nkd", { NULL }, 1650, "udp" },
+ { "shiva_confsrvr", { NULL }, 1651, "tcp" },
+ { "shiva_confsrvr", { NULL }, 1651, "udp" },
+ { "xnmp", { NULL }, 1652, "tcp" },
+ { "xnmp", { NULL }, 1652, "udp" },
+ { "alphatech-lm", { NULL }, 1653, "tcp" },
+ { "alphatech-lm", { NULL }, 1653, "udp" },
+ { "stargatealerts", { NULL }, 1654, "tcp" },
+ { "stargatealerts", { NULL }, 1654, "udp" },
+ { "dec-mbadmin", { NULL }, 1655, "tcp" },
+ { "dec-mbadmin", { NULL }, 1655, "udp" },
+ { "dec-mbadmin-h", { NULL }, 1656, "tcp" },
+ { "dec-mbadmin-h", { NULL }, 1656, "udp" },
+ { "fujitsu-mmpdc", { NULL }, 1657, "tcp" },
+ { "fujitsu-mmpdc", { NULL }, 1657, "udp" },
+ { "sixnetudr", { NULL }, 1658, "tcp" },
+ { "sixnetudr", { NULL }, 1658, "udp" },
+ { "sg-lm", { NULL }, 1659, "tcp" },
+ { "sg-lm", { NULL }, 1659, "udp" },
+ { "skip-mc-gikreq", { NULL }, 1660, "tcp" },
+ { "skip-mc-gikreq", { NULL }, 1660, "udp" },
+ { "netview-aix-1", { NULL }, 1661, "tcp" },
+ { "netview-aix-1", { NULL }, 1661, "udp" },
+ { "netview-aix-2", { NULL }, 1662, "tcp" },
+ { "netview-aix-2", { NULL }, 1662, "udp" },
+ { "netview-aix-3", { NULL }, 1663, "tcp" },
+ { "netview-aix-3", { NULL }, 1663, "udp" },
+ { "netview-aix-4", { NULL }, 1664, "tcp" },
+ { "netview-aix-4", { NULL }, 1664, "udp" },
+ { "netview-aix-5", { NULL }, 1665, "tcp" },
+ { "netview-aix-5", { NULL }, 1665, "udp" },
+ { "netview-aix-6", { NULL }, 1666, "tcp" },
+ { "netview-aix-6", { NULL }, 1666, "udp" },
+ { "netview-aix-7", { NULL }, 1667, "tcp" },
+ { "netview-aix-7", { NULL }, 1667, "udp" },
+ { "netview-aix-8", { NULL }, 1668, "tcp" },
+ { "netview-aix-8", { NULL }, 1668, "udp" },
+ { "netview-aix-9", { NULL }, 1669, "tcp" },
+ { "netview-aix-9", { NULL }, 1669, "udp" },
+ { "netview-aix-10", { NULL }, 1670, "tcp" },
+ { "netview-aix-10", { NULL }, 1670, "udp" },
+ { "netview-aix-11", { NULL }, 1671, "tcp" },
+ { "netview-aix-11", { NULL }, 1671, "udp" },
+ { "netview-aix-12", { NULL }, 1672, "tcp" },
+ { "netview-aix-12", { NULL }, 1672, "udp" },
+ { "proshare-mc-1", { NULL }, 1673, "tcp" },
+ { "proshare-mc-1", { NULL }, 1673, "udp" },
+ { "proshare-mc-2", { NULL }, 1674, "tcp" },
+ { "proshare-mc-2", { NULL }, 1674, "udp" },
+ { "pdp", { NULL }, 1675, "tcp" },
+ { "pdp", { NULL }, 1675, "udp" },
+ { "netcomm1", { NULL }, 1676, "tcp" },
+ { "netcomm2", { NULL }, 1676, "udp" },
+ { "groupwise", { NULL }, 1677, "tcp" },
+ { "groupwise", { NULL }, 1677, "udp" },
+ { "prolink", { NULL }, 1678, "tcp" },
+ { "prolink", { NULL }, 1678, "udp" },
+ { "darcorp-lm", { NULL }, 1679, "tcp" },
+ { "darcorp-lm", { NULL }, 1679, "udp" },
+ { "microcom-sbp", { NULL }, 1680, "tcp" },
+ { "microcom-sbp", { NULL }, 1680, "udp" },
+ { "sd-elmd", { NULL }, 1681, "tcp" },
+ { "sd-elmd", { NULL }, 1681, "udp" },
+ { "lanyon-lantern", { NULL }, 1682, "tcp" },
+ { "lanyon-lantern", { NULL }, 1682, "udp" },
+ { "ncpm-hip", { NULL }, 1683, "tcp" },
+ { "ncpm-hip", { NULL }, 1683, "udp" },
+ { "snaresecure", { NULL }, 1684, "tcp" },
+ { "snaresecure", { NULL }, 1684, "udp" },
+ { "n2nremote", { NULL }, 1685, "tcp" },
+ { "n2nremote", { NULL }, 1685, "udp" },
+ { "cvmon", { NULL }, 1686, "tcp" },
+ { "cvmon", { NULL }, 1686, "udp" },
+ { "nsjtp-ctrl", { NULL }, 1687, "tcp" },
+ { "nsjtp-ctrl", { NULL }, 1687, "udp" },
+ { "nsjtp-data", { NULL }, 1688, "tcp" },
+ { "nsjtp-data", { NULL }, 1688, "udp" },
+ { "firefox", { NULL }, 1689, "tcp" },
+ { "firefox", { NULL }, 1689, "udp" },
+ { "ng-umds", { NULL }, 1690, "tcp" },
+ { "ng-umds", { NULL }, 1690, "udp" },
+ { "empire-empuma", { NULL }, 1691, "tcp" },
+ { "empire-empuma", { NULL }, 1691, "udp" },
+ { "sstsys-lm", { NULL }, 1692, "tcp" },
+ { "sstsys-lm", { NULL }, 1692, "udp" },
+ { "rrirtr", { NULL }, 1693, "tcp" },
+ { "rrirtr", { NULL }, 1693, "udp" },
+ { "rrimwm", { NULL }, 1694, "tcp" },
+ { "rrimwm", { NULL }, 1694, "udp" },
+ { "rrilwm", { NULL }, 1695, "tcp" },
+ { "rrilwm", { NULL }, 1695, "udp" },
+ { "rrifmm", { NULL }, 1696, "tcp" },
+ { "rrifmm", { NULL }, 1696, "udp" },
+ { "rrisat", { NULL }, 1697, "tcp" },
+ { "rrisat", { NULL }, 1697, "udp" },
+ { "rsvp-encap-1", { NULL }, 1698, "tcp" },
+ { "rsvp-encap-1", { NULL }, 1698, "udp" },
+ { "rsvp-encap-2", { NULL }, 1699, "tcp" },
+ { "rsvp-encap-2", { NULL }, 1699, "udp" },
+ { "mps-raft", { NULL }, 1700, "tcp" },
+ { "mps-raft", { NULL }, 1700, "udp" },
+ { "l2f", { NULL }, 1701, "tcp" },
+ { "l2f", { NULL }, 1701, "udp" },
+ { "l2tp", { NULL }, 1701, "tcp" },
+ { "l2tp", { NULL }, 1701, "udp" },
+ { "deskshare", { NULL }, 1702, "tcp" },
+ { "deskshare", { NULL }, 1702, "udp" },
+ { "hb-engine", { NULL }, 1703, "tcp" },
+ { "hb-engine", { NULL }, 1703, "udp" },
+ { "bcs-broker", { NULL }, 1704, "tcp" },
+ { "bcs-broker", { NULL }, 1704, "udp" },
+ { "slingshot", { NULL }, 1705, "tcp" },
+ { "slingshot", { NULL }, 1705, "udp" },
+ { "jetform", { NULL }, 1706, "tcp" },
+ { "jetform", { NULL }, 1706, "udp" },
+ { "vdmplay", { NULL }, 1707, "tcp" },
+ { "vdmplay", { NULL }, 1707, "udp" },
+ { "gat-lmd", { NULL }, 1708, "tcp" },
+ { "gat-lmd", { NULL }, 1708, "udp" },
+ { "centra", { NULL }, 1709, "tcp" },
+ { "centra", { NULL }, 1709, "udp" },
+ { "impera", { NULL }, 1710, "tcp" },
+ { "impera", { NULL }, 1710, "udp" },
+ { "pptconference", { NULL }, 1711, "tcp" },
+ { "pptconference", { NULL }, 1711, "udp" },
+ { "registrar", { NULL }, 1712, "tcp" },
+ { "registrar", { NULL }, 1712, "udp" },
+ { "conferencetalk", { NULL }, 1713, "tcp" },
+ { "conferencetalk", { NULL }, 1713, "udp" },
+ { "sesi-lm", { NULL }, 1714, "tcp" },
+ { "sesi-lm", { NULL }, 1714, "udp" },
+ { "houdini-lm", { NULL }, 1715, "tcp" },
+ { "houdini-lm", { NULL }, 1715, "udp" },
+ { "xmsg", { NULL }, 1716, "tcp" },
+ { "xmsg", { NULL }, 1716, "udp" },
+ { "fj-hdnet", { NULL }, 1717, "tcp" },
+ { "fj-hdnet", { NULL }, 1717, "udp" },
+ { "h323gatedisc", { NULL }, 1718, "tcp" },
+ { "h323gatedisc", { NULL }, 1718, "udp" },
+ { "h323gatestat", { NULL }, 1719, "tcp" },
+ { "h323gatestat", { NULL }, 1719, "udp" },
+ { "h323hostcall", { NULL }, 1720, "tcp" },
+ { "h323hostcall", { NULL }, 1720, "udp" },
+ { "caicci", { NULL }, 1721, "tcp" },
+ { "caicci", { NULL }, 1721, "udp" },
+ { "hks-lm", { NULL }, 1722, "tcp" },
+ { "hks-lm", { NULL }, 1722, "udp" },
+ { "pptp", { NULL }, 1723, "tcp" },
+ { "pptp", { NULL }, 1723, "udp" },
+ { "csbphonemaster", { NULL }, 1724, "tcp" },
+ { "csbphonemaster", { NULL }, 1724, "udp" },
+ { "iden-ralp", { NULL }, 1725, "tcp" },
+ { "iden-ralp", { NULL }, 1725, "udp" },
+ { "iberiagames", { NULL }, 1726, "tcp" },
+ { "iberiagames", { NULL }, 1726, "udp" },
+ { "winddx", { NULL }, 1727, "tcp" },
+ { "winddx", { NULL }, 1727, "udp" },
+ { "telindus", { NULL }, 1728, "tcp" },
+ { "telindus", { NULL }, 1728, "udp" },
+ { "citynl", { NULL }, 1729, "tcp" },
+ { "citynl", { NULL }, 1729, "udp" },
+ { "roketz", { NULL }, 1730, "tcp" },
+ { "roketz", { NULL }, 1730, "udp" },
+ { "msiccp", { NULL }, 1731, "tcp" },
+ { "msiccp", { NULL }, 1731, "udp" },
+ { "proxim", { NULL }, 1732, "tcp" },
+ { "proxim", { NULL }, 1732, "udp" },
+ { "siipat", { NULL }, 1733, "tcp" },
+ { "siipat", { NULL }, 1733, "udp" },
+ { "cambertx-lm", { NULL }, 1734, "tcp" },
+ { "cambertx-lm", { NULL }, 1734, "udp" },
+ { "privatechat", { NULL }, 1735, "tcp" },
+ { "privatechat", { NULL }, 1735, "udp" },
+ { "street-stream", { NULL }, 1736, "tcp" },
+ { "street-stream", { NULL }, 1736, "udp" },
+ { "ultimad", { NULL }, 1737, "tcp" },
+ { "ultimad", { NULL }, 1737, "udp" },
+ { "gamegen1", { NULL }, 1738, "tcp" },
+ { "gamegen1", { NULL }, 1738, "udp" },
+ { "webaccess", { NULL }, 1739, "tcp" },
+ { "webaccess", { NULL }, 1739, "udp" },
+ { "encore", { NULL }, 1740, "tcp" },
+ { "encore", { NULL }, 1740, "udp" },
+ { "cisco-net-mgmt", { NULL }, 1741, "tcp" },
+ { "cisco-net-mgmt", { NULL }, 1741, "udp" },
+ { "3Com-nsd", { NULL }, 1742, "tcp" },
+ { "3Com-nsd", { NULL }, 1742, "udp" },
+ { "cinegrfx-lm", { NULL }, 1743, "tcp" },
+ { "cinegrfx-lm", { NULL }, 1743, "udp" },
+ { "ncpm-ft", { NULL }, 1744, "tcp" },
+ { "ncpm-ft", { NULL }, 1744, "udp" },
+ { "remote-winsock", { NULL }, 1745, "tcp" },
+ { "remote-winsock", { NULL }, 1745, "udp" },
+ { "ftrapid-1", { NULL }, 1746, "tcp" },
+ { "ftrapid-1", { NULL }, 1746, "udp" },
+ { "ftrapid-2", { NULL }, 1747, "tcp" },
+ { "ftrapid-2", { NULL }, 1747, "udp" },
+ { "oracle-em1", { NULL }, 1748, "tcp" },
+ { "oracle-em1", { NULL }, 1748, "udp" },
+ { "aspen-services", { NULL }, 1749, "tcp" },
+ { "aspen-services", { NULL }, 1749, "udp" },
+ { "sslp", { NULL }, 1750, "tcp" },
+ { "sslp", { NULL }, 1750, "udp" },
+ { "swiftnet", { NULL }, 1751, "tcp" },
+ { "swiftnet", { NULL }, 1751, "udp" },
+ { "lofr-lm", { NULL }, 1752, "tcp" },
+ { "lofr-lm", { NULL }, 1752, "udp" },
+ { "oracle-em2", { NULL }, 1754, "tcp" },
+ { "oracle-em2", { NULL }, 1754, "udp" },
+ { "ms-streaming", { NULL }, 1755, "tcp" },
+ { "ms-streaming", { NULL }, 1755, "udp" },
+ { "capfast-lmd", { NULL }, 1756, "tcp" },
+ { "capfast-lmd", { NULL }, 1756, "udp" },
+ { "cnhrp", { NULL }, 1757, "tcp" },
+ { "cnhrp", { NULL }, 1757, "udp" },
+ { "tftp-mcast", { NULL }, 1758, "tcp" },
+ { "tftp-mcast", { NULL }, 1758, "udp" },
+ { "spss-lm", { NULL }, 1759, "tcp" },
+ { "spss-lm", { NULL }, 1759, "udp" },
+ { "www-ldap-gw", { NULL }, 1760, "tcp" },
+ { "www-ldap-gw", { NULL }, 1760, "udp" },
+ { "cft-0", { NULL }, 1761, "tcp" },
+ { "cft-0", { NULL }, 1761, "udp" },
+ { "cft-1", { NULL }, 1762, "tcp" },
+ { "cft-1", { NULL }, 1762, "udp" },
+ { "cft-2", { NULL }, 1763, "tcp" },
+ { "cft-2", { NULL }, 1763, "udp" },
+ { "cft-3", { NULL }, 1764, "tcp" },
+ { "cft-3", { NULL }, 1764, "udp" },
+ { "cft-4", { NULL }, 1765, "tcp" },
+ { "cft-4", { NULL }, 1765, "udp" },
+ { "cft-5", { NULL }, 1766, "tcp" },
+ { "cft-5", { NULL }, 1766, "udp" },
+ { "cft-6", { NULL }, 1767, "tcp" },
+ { "cft-6", { NULL }, 1767, "udp" },
+ { "cft-7", { NULL }, 1768, "tcp" },
+ { "cft-7", { NULL }, 1768, "udp" },
+ { "bmc-net-adm", { NULL }, 1769, "tcp" },
+ { "bmc-net-adm", { NULL }, 1769, "udp" },
+ { "bmc-net-svc", { NULL }, 1770, "tcp" },
+ { "bmc-net-svc", { NULL }, 1770, "udp" },
+ { "vaultbase", { NULL }, 1771, "tcp" },
+ { "vaultbase", { NULL }, 1771, "udp" },
+ { "essweb-gw", { NULL }, 1772, "tcp" },
+ { "essweb-gw", { NULL }, 1772, "udp" },
+ { "kmscontrol", { NULL }, 1773, "tcp" },
+ { "kmscontrol", { NULL }, 1773, "udp" },
+ { "global-dtserv", { NULL }, 1774, "tcp" },
+ { "global-dtserv", { NULL }, 1774, "udp" },
+ { "femis", { NULL }, 1776, "tcp" },
+ { "femis", { NULL }, 1776, "udp" },
+ { "powerguardian", { NULL }, 1777, "tcp" },
+ { "powerguardian", { NULL }, 1777, "udp" },
+ { "prodigy-intrnet", { NULL }, 1778, "tcp" },
+ { "prodigy-intrnet", { NULL }, 1778, "udp" },
+ { "pharmasoft", { NULL }, 1779, "tcp" },
+ { "pharmasoft", { NULL }, 1779, "udp" },
+ { "dpkeyserv", { NULL }, 1780, "tcp" },
+ { "dpkeyserv", { NULL }, 1780, "udp" },
+ { "answersoft-lm", { NULL }, 1781, "tcp" },
+ { "answersoft-lm", { NULL }, 1781, "udp" },
+ { "hp-hcip", { NULL }, 1782, "tcp" },
+ { "hp-hcip", { NULL }, 1782, "udp" },
+ { "finle-lm", { NULL }, 1784, "tcp" },
+ { "finle-lm", { NULL }, 1784, "udp" },
+ { "windlm", { NULL }, 1785, "tcp" },
+ { "windlm", { NULL }, 1785, "udp" },
+ { "funk-logger", { NULL }, 1786, "tcp" },
+ { "funk-logger", { NULL }, 1786, "udp" },
+ { "funk-license", { NULL }, 1787, "tcp" },
+ { "funk-license", { NULL }, 1787, "udp" },
+ { "psmond", { NULL }, 1788, "tcp" },
+ { "psmond", { NULL }, 1788, "udp" },
+ { "hello", { NULL }, 1789, "tcp" },
+ { "hello", { NULL }, 1789, "udp" },
+ { "nmsp", { NULL }, 1790, "tcp" },
+ { "nmsp", { NULL }, 1790, "udp" },
+ { "ea1", { NULL }, 1791, "tcp" },
+ { "ea1", { NULL }, 1791, "udp" },
+ { "ibm-dt-2", { NULL }, 1792, "tcp" },
+ { "ibm-dt-2", { NULL }, 1792, "udp" },
+ { "rsc-robot", { NULL }, 1793, "tcp" },
+ { "rsc-robot", { NULL }, 1793, "udp" },
+ { "cera-bcm", { NULL }, 1794, "tcp" },
+ { "cera-bcm", { NULL }, 1794, "udp" },
+ { "dpi-proxy", { NULL }, 1795, "tcp" },
+ { "dpi-proxy", { NULL }, 1795, "udp" },
+ { "vocaltec-admin", { NULL }, 1796, "tcp" },
+ { "vocaltec-admin", { NULL }, 1796, "udp" },
+ { "uma", { NULL }, 1797, "tcp" },
+ { "uma", { NULL }, 1797, "udp" },
+ { "etp", { NULL }, 1798, "tcp" },
+ { "etp", { NULL }, 1798, "udp" },
+ { "netrisk", { NULL }, 1799, "tcp" },
+ { "netrisk", { NULL }, 1799, "udp" },
+ { "ansys-lm", { NULL }, 1800, "tcp" },
+ { "ansys-lm", { NULL }, 1800, "udp" },
+ { "msmq", { NULL }, 1801, "tcp" },
+ { "msmq", { NULL }, 1801, "udp" },
+ { "concomp1", { NULL }, 1802, "tcp" },
+ { "concomp1", { NULL }, 1802, "udp" },
+ { "hp-hcip-gwy", { NULL }, 1803, "tcp" },
+ { "hp-hcip-gwy", { NULL }, 1803, "udp" },
+ { "enl", { NULL }, 1804, "tcp" },
+ { "enl", { NULL }, 1804, "udp" },
+ { "enl-name", { NULL }, 1805, "tcp" },
+ { "enl-name", { NULL }, 1805, "udp" },
+ { "musiconline", { NULL }, 1806, "tcp" },
+ { "musiconline", { NULL }, 1806, "udp" },
+ { "fhsp", { NULL }, 1807, "tcp" },
+ { "fhsp", { NULL }, 1807, "udp" },
+ { "oracle-vp2", { NULL }, 1808, "tcp" },
+ { "oracle-vp2", { NULL }, 1808, "udp" },
+ { "oracle-vp1", { NULL }, 1809, "tcp" },
+ { "oracle-vp1", { NULL }, 1809, "udp" },
+ { "jerand-lm", { NULL }, 1810, "tcp" },
+ { "jerand-lm", { NULL }, 1810, "udp" },
+ { "scientia-sdb", { NULL }, 1811, "tcp" },
+ { "scientia-sdb", { NULL }, 1811, "udp" },
+ { "radius", { NULL }, 1812, "tcp" },
+ { "radius", { NULL }, 1812, "udp" },
+ { "radius-acct", { NULL }, 1813, "tcp" },
+ { "radius-acct", { NULL }, 1813, "udp" },
+ { "tdp-suite", { NULL }, 1814, "tcp" },
+ { "tdp-suite", { NULL }, 1814, "udp" },
+ { "mmpft", { NULL }, 1815, "tcp" },
+ { "mmpft", { NULL }, 1815, "udp" },
+ { "harp", { NULL }, 1816, "tcp" },
+ { "harp", { NULL }, 1816, "udp" },
+ { "rkb-oscs", { NULL }, 1817, "tcp" },
+ { "rkb-oscs", { NULL }, 1817, "udp" },
+ { "etftp", { NULL }, 1818, "tcp" },
+ { "etftp", { NULL }, 1818, "udp" },
+ { "plato-lm", { NULL }, 1819, "tcp" },
+ { "plato-lm", { NULL }, 1819, "udp" },
+ { "mcagent", { NULL }, 1820, "tcp" },
+ { "mcagent", { NULL }, 1820, "udp" },
+ { "donnyworld", { NULL }, 1821, "tcp" },
+ { "donnyworld", { NULL }, 1821, "udp" },
+ { "es-elmd", { NULL }, 1822, "tcp" },
+ { "es-elmd", { NULL }, 1822, "udp" },
+ { "unisys-lm", { NULL }, 1823, "tcp" },
+ { "unisys-lm", { NULL }, 1823, "udp" },
+ { "metrics-pas", { NULL }, 1824, "tcp" },
+ { "metrics-pas", { NULL }, 1824, "udp" },
+ { "direcpc-video", { NULL }, 1825, "tcp" },
+ { "direcpc-video", { NULL }, 1825, "udp" },
+ { "ardt", { NULL }, 1826, "tcp" },
+ { "ardt", { NULL }, 1826, "udp" },
+ { "asi", { NULL }, 1827, "tcp" },
+ { "asi", { NULL }, 1827, "udp" },
+ { "itm-mcell-u", { NULL }, 1828, "tcp" },
+ { "itm-mcell-u", { NULL }, 1828, "udp" },
+ { "optika-emedia", { NULL }, 1829, "tcp" },
+ { "optika-emedia", { NULL }, 1829, "udp" },
+ { "net8-cman", { NULL }, 1830, "tcp" },
+ { "net8-cman", { NULL }, 1830, "udp" },
+ { "myrtle", { NULL }, 1831, "tcp" },
+ { "myrtle", { NULL }, 1831, "udp" },
+ { "tht-treasure", { NULL }, 1832, "tcp" },
+ { "tht-treasure", { NULL }, 1832, "udp" },
+ { "udpradio", { NULL }, 1833, "tcp" },
+ { "udpradio", { NULL }, 1833, "udp" },
+ { "ardusuni", { NULL }, 1834, "tcp" },
+ { "ardusuni", { NULL }, 1834, "udp" },
+ { "ardusmul", { NULL }, 1835, "tcp" },
+ { "ardusmul", { NULL }, 1835, "udp" },
+ { "ste-smsc", { NULL }, 1836, "tcp" },
+ { "ste-smsc", { NULL }, 1836, "udp" },
+ { "csoft1", { NULL }, 1837, "tcp" },
+ { "csoft1", { NULL }, 1837, "udp" },
+ { "talnet", { NULL }, 1838, "tcp" },
+ { "talnet", { NULL }, 1838, "udp" },
+ { "netopia-vo1", { NULL }, 1839, "tcp" },
+ { "netopia-vo1", { NULL }, 1839, "udp" },
+ { "netopia-vo2", { NULL }, 1840, "tcp" },
+ { "netopia-vo2", { NULL }, 1840, "udp" },
+ { "netopia-vo3", { NULL }, 1841, "tcp" },
+ { "netopia-vo3", { NULL }, 1841, "udp" },
+ { "netopia-vo4", { NULL }, 1842, "tcp" },
+ { "netopia-vo4", { NULL }, 1842, "udp" },
+ { "netopia-vo5", { NULL }, 1843, "tcp" },
+ { "netopia-vo5", { NULL }, 1843, "udp" },
+ { "direcpc-dll", { NULL }, 1844, "tcp" },
+ { "direcpc-dll", { NULL }, 1844, "udp" },
+ { "altalink", { NULL }, 1845, "tcp" },
+ { "altalink", { NULL }, 1845, "udp" },
+ { "tunstall-pnc", { NULL }, 1846, "tcp" },
+ { "tunstall-pnc", { NULL }, 1846, "udp" },
+ { "slp-notify", { NULL }, 1847, "tcp" },
+ { "slp-notify", { NULL }, 1847, "udp" },
+ { "fjdocdist", { NULL }, 1848, "tcp" },
+ { "fjdocdist", { NULL }, 1848, "udp" },
+ { "alpha-sms", { NULL }, 1849, "tcp" },
+ { "alpha-sms", { NULL }, 1849, "udp" },
+ { "gsi", { NULL }, 1850, "tcp" },
+ { "gsi", { NULL }, 1850, "udp" },
+ { "ctcd", { NULL }, 1851, "tcp" },
+ { "ctcd", { NULL }, 1851, "udp" },
+ { "virtual-time", { NULL }, 1852, "tcp" },
+ { "virtual-time", { NULL }, 1852, "udp" },
+ { "vids-avtp", { NULL }, 1853, "tcp" },
+ { "vids-avtp", { NULL }, 1853, "udp" },
+ { "buddy-draw", { NULL }, 1854, "tcp" },
+ { "buddy-draw", { NULL }, 1854, "udp" },
+ { "fiorano-rtrsvc", { NULL }, 1855, "tcp" },
+ { "fiorano-rtrsvc", { NULL }, 1855, "udp" },
+ { "fiorano-msgsvc", { NULL }, 1856, "tcp" },
+ { "fiorano-msgsvc", { NULL }, 1856, "udp" },
+ { "datacaptor", { NULL }, 1857, "tcp" },
+ { "datacaptor", { NULL }, 1857, "udp" },
+ { "privateark", { NULL }, 1858, "tcp" },
+ { "privateark", { NULL }, 1858, "udp" },
+ { "gammafetchsvr", { NULL }, 1859, "tcp" },
+ { "gammafetchsvr", { NULL }, 1859, "udp" },
+ { "sunscalar-svc", { NULL }, 1860, "tcp" },
+ { "sunscalar-svc", { NULL }, 1860, "udp" },
+ { "lecroy-vicp", { NULL }, 1861, "tcp" },
+ { "lecroy-vicp", { NULL }, 1861, "udp" },
+ { "mysql-cm-agent", { NULL }, 1862, "tcp" },
+ { "mysql-cm-agent", { NULL }, 1862, "udp" },
+ { "msnp", { NULL }, 1863, "tcp" },
+ { "msnp", { NULL }, 1863, "udp" },
+ { "paradym-31port", { NULL }, 1864, "tcp" },
+ { "paradym-31port", { NULL }, 1864, "udp" },
+ { "entp", { NULL }, 1865, "tcp" },
+ { "entp", { NULL }, 1865, "udp" },
+ { "swrmi", { NULL }, 1866, "tcp" },
+ { "swrmi", { NULL }, 1866, "udp" },
+ { "udrive", { NULL }, 1867, "tcp" },
+ { "udrive", { NULL }, 1867, "udp" },
+ { "viziblebrowser", { NULL }, 1868, "tcp" },
+ { "viziblebrowser", { NULL }, 1868, "udp" },
+ { "transact", { NULL }, 1869, "tcp" },
+ { "transact", { NULL }, 1869, "udp" },
+ { "sunscalar-dns", { NULL }, 1870, "tcp" },
+ { "sunscalar-dns", { NULL }, 1870, "udp" },
+ { "canocentral0", { NULL }, 1871, "tcp" },
+ { "canocentral0", { NULL }, 1871, "udp" },
+ { "canocentral1", { NULL }, 1872, "tcp" },
+ { "canocentral1", { NULL }, 1872, "udp" },
+ { "fjmpjps", { NULL }, 1873, "tcp" },
+ { "fjmpjps", { NULL }, 1873, "udp" },
+ { "fjswapsnp", { NULL }, 1874, "tcp" },
+ { "fjswapsnp", { NULL }, 1874, "udp" },
+ { "westell-stats", { NULL }, 1875, "tcp" },
+ { "westell-stats", { NULL }, 1875, "udp" },
+ { "ewcappsrv", { NULL }, 1876, "tcp" },
+ { "ewcappsrv", { NULL }, 1876, "udp" },
+ { "hp-webqosdb", { NULL }, 1877, "tcp" },
+ { "hp-webqosdb", { NULL }, 1877, "udp" },
+ { "drmsmc", { NULL }, 1878, "tcp" },
+ { "drmsmc", { NULL }, 1878, "udp" },
+ { "nettgain-nms", { NULL }, 1879, "tcp" },
+ { "nettgain-nms", { NULL }, 1879, "udp" },
+ { "vsat-control", { NULL }, 1880, "tcp" },
+ { "vsat-control", { NULL }, 1880, "udp" },
+ { "ibm-mqseries2", { NULL }, 1881, "tcp" },
+ { "ibm-mqseries2", { NULL }, 1881, "udp" },
+ { "ecsqdmn", { NULL }, 1882, "tcp" },
+ { "ecsqdmn", { NULL }, 1882, "udp" },
+ { "ibm-mqisdp", { NULL }, 1883, "tcp" },
+ { "ibm-mqisdp", { NULL }, 1883, "udp" },
+ { "idmaps", { NULL }, 1884, "tcp" },
+ { "idmaps", { NULL }, 1884, "udp" },
+ { "vrtstrapserver", { NULL }, 1885, "tcp" },
+ { "vrtstrapserver", { NULL }, 1885, "udp" },
+ { "leoip", { NULL }, 1886, "tcp" },
+ { "leoip", { NULL }, 1886, "udp" },
+ { "filex-lport", { NULL }, 1887, "tcp" },
+ { "filex-lport", { NULL }, 1887, "udp" },
+ { "ncconfig", { NULL }, 1888, "tcp" },
+ { "ncconfig", { NULL }, 1888, "udp" },
+ { "unify-adapter", { NULL }, 1889, "tcp" },
+ { "unify-adapter", { NULL }, 1889, "udp" },
+ { "wilkenlistener", { NULL }, 1890, "tcp" },
+ { "wilkenlistener", { NULL }, 1890, "udp" },
+ { "childkey-notif", { NULL }, 1891, "tcp" },
+ { "childkey-notif", { NULL }, 1891, "udp" },
+ { "childkey-ctrl", { NULL }, 1892, "tcp" },
+ { "childkey-ctrl", { NULL }, 1892, "udp" },
+ { "elad", { NULL }, 1893, "tcp" },
+ { "elad", { NULL }, 1893, "udp" },
+ { "o2server-port", { NULL }, 1894, "tcp" },
+ { "o2server-port", { NULL }, 1894, "udp" },
+ { "b-novative-ls", { NULL }, 1896, "tcp" },
+ { "b-novative-ls", { NULL }, 1896, "udp" },
+ { "metaagent", { NULL }, 1897, "tcp" },
+ { "metaagent", { NULL }, 1897, "udp" },
+ { "cymtec-port", { NULL }, 1898, "tcp" },
+ { "cymtec-port", { NULL }, 1898, "udp" },
+ { "mc2studios", { NULL }, 1899, "tcp" },
+ { "mc2studios", { NULL }, 1899, "udp" },
+ { "ssdp", { NULL }, 1900, "tcp" },
+ { "ssdp", { NULL }, 1900, "udp" },
+ { "fjicl-tep-a", { NULL }, 1901, "tcp" },
+ { "fjicl-tep-a", { NULL }, 1901, "udp" },
+ { "fjicl-tep-b", { NULL }, 1902, "tcp" },
+ { "fjicl-tep-b", { NULL }, 1902, "udp" },
+ { "linkname", { NULL }, 1903, "tcp" },
+ { "linkname", { NULL }, 1903, "udp" },
+ { "fjicl-tep-c", { NULL }, 1904, "tcp" },
+ { "fjicl-tep-c", { NULL }, 1904, "udp" },
+ { "sugp", { NULL }, 1905, "tcp" },
+ { "sugp", { NULL }, 1905, "udp" },
+ { "tpmd", { NULL }, 1906, "tcp" },
+ { "tpmd", { NULL }, 1906, "udp" },
+ { "intrastar", { NULL }, 1907, "tcp" },
+ { "intrastar", { NULL }, 1907, "udp" },
+ { "dawn", { NULL }, 1908, "tcp" },
+ { "dawn", { NULL }, 1908, "udp" },
+ { "global-wlink", { NULL }, 1909, "tcp" },
+ { "global-wlink", { NULL }, 1909, "udp" },
+ { "ultrabac", { NULL }, 1910, "tcp" },
+ { "ultrabac", { NULL }, 1910, "udp" },
+ { "mtp", { NULL }, 1911, "tcp" },
+ { "mtp", { NULL }, 1911, "udp" },
+ { "rhp-iibp", { NULL }, 1912, "tcp" },
+ { "rhp-iibp", { NULL }, 1912, "udp" },
+ { "armadp", { NULL }, 1913, "tcp" },
+ { "armadp", { NULL }, 1913, "udp" },
+ { "elm-momentum", { NULL }, 1914, "tcp" },
+ { "elm-momentum", { NULL }, 1914, "udp" },
+ { "facelink", { NULL }, 1915, "tcp" },
+ { "facelink", { NULL }, 1915, "udp" },
+ { "persona", { NULL }, 1916, "tcp" },
+ { "persona", { NULL }, 1916, "udp" },
+ { "noagent", { NULL }, 1917, "tcp" },
+ { "noagent", { NULL }, 1917, "udp" },
+ { "can-nds", { NULL }, 1918, "tcp" },
+ { "can-nds", { NULL }, 1918, "udp" },
+ { "can-dch", { NULL }, 1919, "tcp" },
+ { "can-dch", { NULL }, 1919, "udp" },
+ { "can-ferret", { NULL }, 1920, "tcp" },
+ { "can-ferret", { NULL }, 1920, "udp" },
+ { "noadmin", { NULL }, 1921, "tcp" },
+ { "noadmin", { NULL }, 1921, "udp" },
+ { "tapestry", { NULL }, 1922, "tcp" },
+ { "tapestry", { NULL }, 1922, "udp" },
+ { "spice", { NULL }, 1923, "tcp" },
+ { "spice", { NULL }, 1923, "udp" },
+ { "xiip", { NULL }, 1924, "tcp" },
+ { "xiip", { NULL }, 1924, "udp" },
+ { "discovery-port", { NULL }, 1925, "tcp" },
+ { "discovery-port", { NULL }, 1925, "udp" },
+ { "egs", { NULL }, 1926, "tcp" },
+ { "egs", { NULL }, 1926, "udp" },
+ { "videte-cipc", { NULL }, 1927, "tcp" },
+ { "videte-cipc", { NULL }, 1927, "udp" },
+ { "emsd-port", { NULL }, 1928, "tcp" },
+ { "emsd-port", { NULL }, 1928, "udp" },
+ { "bandwiz-system", { NULL }, 1929, "tcp" },
+ { "bandwiz-system", { NULL }, 1929, "udp" },
+ { "driveappserver", { NULL }, 1930, "tcp" },
+ { "driveappserver", { NULL }, 1930, "udp" },
+ { "amdsched", { NULL }, 1931, "tcp" },
+ { "amdsched", { NULL }, 1931, "udp" },
+ { "ctt-broker", { NULL }, 1932, "tcp" },
+ { "ctt-broker", { NULL }, 1932, "udp" },
+ { "xmapi", { NULL }, 1933, "tcp" },
+ { "xmapi", { NULL }, 1933, "udp" },
+ { "xaapi", { NULL }, 1934, "tcp" },
+ { "xaapi", { NULL }, 1934, "udp" },
+ { "macromedia-fcs", { NULL }, 1935, "tcp" },
+ { "macromedia-fcs", { NULL }, 1935, "udp" },
+ { "jetcmeserver", { NULL }, 1936, "tcp" },
+ { "jetcmeserver", { NULL }, 1936, "udp" },
+ { "jwserver", { NULL }, 1937, "tcp" },
+ { "jwserver", { NULL }, 1937, "udp" },
+ { "jwclient", { NULL }, 1938, "tcp" },
+ { "jwclient", { NULL }, 1938, "udp" },
+ { "jvserver", { NULL }, 1939, "tcp" },
+ { "jvserver", { NULL }, 1939, "udp" },
+ { "jvclient", { NULL }, 1940, "tcp" },
+ { "jvclient", { NULL }, 1940, "udp" },
+ { "dic-aida", { NULL }, 1941, "tcp" },
+ { "dic-aida", { NULL }, 1941, "udp" },
+ { "res", { NULL }, 1942, "tcp" },
+ { "res", { NULL }, 1942, "udp" },
+ { "beeyond-media", { NULL }, 1943, "tcp" },
+ { "beeyond-media", { NULL }, 1943, "udp" },
+ { "close-combat", { NULL }, 1944, "tcp" },
+ { "close-combat", { NULL }, 1944, "udp" },
+ { "dialogic-elmd", { NULL }, 1945, "tcp" },
+ { "dialogic-elmd", { NULL }, 1945, "udp" },
+ { "tekpls", { NULL }, 1946, "tcp" },
+ { "tekpls", { NULL }, 1946, "udp" },
+ { "sentinelsrm", { NULL }, 1947, "tcp" },
+ { "sentinelsrm", { NULL }, 1947, "udp" },
+ { "eye2eye", { NULL }, 1948, "tcp" },
+ { "eye2eye", { NULL }, 1948, "udp" },
+ { "ismaeasdaqlive", { NULL }, 1949, "tcp" },
+ { "ismaeasdaqlive", { NULL }, 1949, "udp" },
+ { "ismaeasdaqtest", { NULL }, 1950, "tcp" },
+ { "ismaeasdaqtest", { NULL }, 1950, "udp" },
+ { "bcs-lmserver", { NULL }, 1951, "tcp" },
+ { "bcs-lmserver", { NULL }, 1951, "udp" },
+ { "mpnjsc", { NULL }, 1952, "tcp" },
+ { "mpnjsc", { NULL }, 1952, "udp" },
+ { "rapidbase", { NULL }, 1953, "tcp" },
+ { "rapidbase", { NULL }, 1953, "udp" },
+ { "abr-api", { NULL }, 1954, "tcp" },
+ { "abr-api", { NULL }, 1954, "udp" },
+ { "abr-secure", { NULL }, 1955, "tcp" },
+ { "abr-secure", { NULL }, 1955, "udp" },
+ { "vrtl-vmf-ds", { NULL }, 1956, "tcp" },
+ { "vrtl-vmf-ds", { NULL }, 1956, "udp" },
+ { "unix-status", { NULL }, 1957, "tcp" },
+ { "unix-status", { NULL }, 1957, "udp" },
+ { "dxadmind", { NULL }, 1958, "tcp" },
+ { "dxadmind", { NULL }, 1958, "udp" },
+ { "simp-all", { NULL }, 1959, "tcp" },
+ { "simp-all", { NULL }, 1959, "udp" },
+ { "nasmanager", { NULL }, 1960, "tcp" },
+ { "nasmanager", { NULL }, 1960, "udp" },
+ { "bts-appserver", { NULL }, 1961, "tcp" },
+ { "bts-appserver", { NULL }, 1961, "udp" },
+ { "biap-mp", { NULL }, 1962, "tcp" },
+ { "biap-mp", { NULL }, 1962, "udp" },
+ { "webmachine", { NULL }, 1963, "tcp" },
+ { "webmachine", { NULL }, 1963, "udp" },
+ { "solid-e-engine", { NULL }, 1964, "tcp" },
+ { "solid-e-engine", { NULL }, 1964, "udp" },
+ { "tivoli-npm", { NULL }, 1965, "tcp" },
+ { "tivoli-npm", { NULL }, 1965, "udp" },
+ { "slush", { NULL }, 1966, "tcp" },
+ { "slush", { NULL }, 1966, "udp" },
+ { "sns-quote", { NULL }, 1967, "tcp" },
+ { "sns-quote", { NULL }, 1967, "udp" },
+ { "lipsinc", { NULL }, 1968, "tcp" },
+ { "lipsinc", { NULL }, 1968, "udp" },
+ { "lipsinc1", { NULL }, 1969, "tcp" },
+ { "lipsinc1", { NULL }, 1969, "udp" },
+ { "netop-rc", { NULL }, 1970, "tcp" },
+ { "netop-rc", { NULL }, 1970, "udp" },
+ { "netop-school", { NULL }, 1971, "tcp" },
+ { "netop-school", { NULL }, 1971, "udp" },
+ { "intersys-cache", { NULL }, 1972, "tcp" },
+ { "intersys-cache", { NULL }, 1972, "udp" },
+ { "dlsrap", { NULL }, 1973, "tcp" },
+ { "dlsrap", { NULL }, 1973, "udp" },
+ { "drp", { NULL }, 1974, "tcp" },
+ { "drp", { NULL }, 1974, "udp" },
+ { "tcoflashagent", { NULL }, 1975, "tcp" },
+ { "tcoflashagent", { NULL }, 1975, "udp" },
+ { "tcoregagent", { NULL }, 1976, "tcp" },
+ { "tcoregagent", { NULL }, 1976, "udp" },
+ { "tcoaddressbook", { NULL }, 1977, "tcp" },
+ { "tcoaddressbook", { NULL }, 1977, "udp" },
+ { "unisql", { NULL }, 1978, "tcp" },
+ { "unisql", { NULL }, 1978, "udp" },
+ { "unisql-java", { NULL }, 1979, "tcp" },
+ { "unisql-java", { NULL }, 1979, "udp" },
+ { "pearldoc-xact", { NULL }, 1980, "tcp" },
+ { "pearldoc-xact", { NULL }, 1980, "udp" },
+ { "p2pq", { NULL }, 1981, "tcp" },
+ { "p2pq", { NULL }, 1981, "udp" },
+ { "estamp", { NULL }, 1982, "tcp" },
+ { "estamp", { NULL }, 1982, "udp" },
+ { "lhtp", { NULL }, 1983, "tcp" },
+ { "lhtp", { NULL }, 1983, "udp" },
+ { "bb", { NULL }, 1984, "tcp" },
+ { "bb", { NULL }, 1984, "udp" },
+ { "hsrp", { NULL }, 1985, "tcp" },
+ { "hsrp", { NULL }, 1985, "udp" },
+ { "licensedaemon", { NULL }, 1986, "tcp" },
+ { "licensedaemon", { NULL }, 1986, "udp" },
+ { "tr-rsrb-p1", { NULL }, 1987, "tcp" },
+ { "tr-rsrb-p1", { NULL }, 1987, "udp" },
+ { "tr-rsrb-p2", { NULL }, 1988, "tcp" },
+ { "tr-rsrb-p2", { NULL }, 1988, "udp" },
+ { "tr-rsrb-p3", { NULL }, 1989, "tcp" },
+ { "tr-rsrb-p3", { NULL }, 1989, "udp" },
+ { "mshnet", { NULL }, 1989, "tcp" },
+ { "mshnet", { NULL }, 1989, "udp" },
+ { "stun-p1", { NULL }, 1990, "tcp" },
+ { "stun-p1", { NULL }, 1990, "udp" },
+ { "stun-p2", { NULL }, 1991, "tcp" },
+ { "stun-p2", { NULL }, 1991, "udp" },
+ { "stun-p3", { NULL }, 1992, "tcp" },
+ { "stun-p3", { NULL }, 1992, "udp" },
+ { "ipsendmsg", { NULL }, 1992, "tcp" },
+ { "ipsendmsg", { NULL }, 1992, "udp" },
+ { "snmp-tcp-port", { NULL }, 1993, "tcp" },
+ { "snmp-tcp-port", { NULL }, 1993, "udp" },
+ { "stun-port", { NULL }, 1994, "tcp" },
+ { "stun-port", { NULL }, 1994, "udp" },
+ { "perf-port", { NULL }, 1995, "tcp" },
+ { "perf-port", { NULL }, 1995, "udp" },
+ { "tr-rsrb-port", { NULL }, 1996, "tcp" },
+ { "tr-rsrb-port", { NULL }, 1996, "udp" },
+ { "gdp-port", { NULL }, 1997, "tcp" },
+ { "gdp-port", { NULL }, 1997, "udp" },
+ { "x25-svc-port", { NULL }, 1998, "tcp" },
+ { "x25-svc-port", { NULL }, 1998, "udp" },
+ { "tcp-id-port", { NULL }, 1999, "tcp" },
+ { "tcp-id-port", { NULL }, 1999, "udp" },
+ { "cisco-sccp", { NULL }, 2000, "tcp" },
+ { "cisco-sccp", { NULL }, 2000, "udp" },
+ { "dc", { NULL }, 2001, "tcp" },
+ { "wizard", { NULL }, 2001, "udp" },
+ { "globe", { NULL }, 2002, "tcp" },
+ { "globe", { NULL }, 2002, "udp" },
+ { "brutus", { NULL }, 2003, "tcp" },
+ { "brutus", { NULL }, 2003, "udp" },
+ { "mailbox", { NULL }, 2004, "tcp" },
+ { "emce", { NULL }, 2004, "udp" },
+ { "berknet", { NULL }, 2005, "tcp" },
+ { "oracle", { NULL }, 2005, "udp" },
+ { "invokator", { NULL }, 2006, "tcp" },
+ { "raid-cd", { NULL }, 2006, "udp" },
+ { "dectalk", { NULL }, 2007, "tcp" },
+ { "raid-am", { NULL }, 2007, "udp" },
+ { "conf", { NULL }, 2008, "tcp" },
+ { "terminaldb", { NULL }, 2008, "udp" },
+ { "news", { NULL }, 2009, "tcp" },
+ { "whosockami", { NULL }, 2009, "udp" },
+ { "search", { NULL }, 2010, "tcp" },
+ { "pipe_server", { NULL }, 2010, "udp" },
+ { "raid-cc", { NULL }, 2011, "tcp" },
+ { "servserv", { NULL }, 2011, "udp" },
+ { "ttyinfo", { NULL }, 2012, "tcp" },
+ { "raid-ac", { NULL }, 2012, "udp" },
+ { "raid-am", { NULL }, 2013, "tcp" },
+ { "raid-cd", { NULL }, 2013, "udp" },
+ { "troff", { NULL }, 2014, "tcp" },
+ { "raid-sf", { NULL }, 2014, "udp" },
+ { "cypress", { NULL }, 2015, "tcp" },
+ { "raid-cs", { NULL }, 2015, "udp" },
+ { "bootserver", { NULL }, 2016, "tcp" },
+ { "bootserver", { NULL }, 2016, "udp" },
+ { "cypress-stat", { NULL }, 2017, "tcp" },
+ { "bootclient", { NULL }, 2017, "udp" },
+ { "terminaldb", { NULL }, 2018, "tcp" },
+ { "rellpack", { NULL }, 2018, "udp" },
+ { "whosockami", { NULL }, 2019, "tcp" },
+ { "about", { NULL }, 2019, "udp" },
+ { "xinupageserver", { NULL }, 2020, "tcp" },
+ { "xinupageserver", { NULL }, 2020, "udp" },
+ { "servexec", { NULL }, 2021, "tcp" },
+ { "xinuexpansion1", { NULL }, 2021, "udp" },
+ { "down", { NULL }, 2022, "tcp" },
+ { "xinuexpansion2", { NULL }, 2022, "udp" },
+ { "xinuexpansion3", { NULL }, 2023, "tcp" },
+ { "xinuexpansion3", { NULL }, 2023, "udp" },
+ { "xinuexpansion4", { NULL }, 2024, "tcp" },
+ { "xinuexpansion4", { NULL }, 2024, "udp" },
+ { "ellpack", { NULL }, 2025, "tcp" },
+ { "xribs", { NULL }, 2025, "udp" },
+ { "scrabble", { NULL }, 2026, "tcp" },
+ { "scrabble", { NULL }, 2026, "udp" },
+ { "shadowserver", { NULL }, 2027, "tcp" },
+ { "shadowserver", { NULL }, 2027, "udp" },
+ { "submitserver", { NULL }, 2028, "tcp" },
+ { "submitserver", { NULL }, 2028, "udp" },
+ { "hsrpv6", { NULL }, 2029, "tcp" },
+ { "hsrpv6", { NULL }, 2029, "udp" },
+ { "device2", { NULL }, 2030, "tcp" },
+ { "device2", { NULL }, 2030, "udp" },
+ { "mobrien-chat", { NULL }, 2031, "tcp" },
+ { "mobrien-chat", { NULL }, 2031, "udp" },
+ { "blackboard", { NULL }, 2032, "tcp" },
+ { "blackboard", { NULL }, 2032, "udp" },
+ { "glogger", { NULL }, 2033, "tcp" },
+ { "glogger", { NULL }, 2033, "udp" },
+ { "scoremgr", { NULL }, 2034, "tcp" },
+ { "scoremgr", { NULL }, 2034, "udp" },
+ { "imsldoc", { NULL }, 2035, "tcp" },
+ { "imsldoc", { NULL }, 2035, "udp" },
+ { "e-dpnet", { NULL }, 2036, "tcp" },
+ { "e-dpnet", { NULL }, 2036, "udp" },
+ { "applus", { NULL }, 2037, "tcp" },
+ { "applus", { NULL }, 2037, "udp" },
+ { "objectmanager", { NULL }, 2038, "tcp" },
+ { "objectmanager", { NULL }, 2038, "udp" },
+ { "prizma", { NULL }, 2039, "tcp" },
+ { "prizma", { NULL }, 2039, "udp" },
+ { "lam", { NULL }, 2040, "tcp" },
+ { "lam", { NULL }, 2040, "udp" },
+ { "interbase", { NULL }, 2041, "tcp" },
+ { "interbase", { NULL }, 2041, "udp" },
+ { "isis", { NULL }, 2042, "tcp" },
+ { "isis", { NULL }, 2042, "udp" },
+ { "isis-bcast", { NULL }, 2043, "tcp" },
+ { "isis-bcast", { NULL }, 2043, "udp" },
+ { "rimsl", { NULL }, 2044, "tcp" },
+ { "rimsl", { NULL }, 2044, "udp" },
+ { "cdfunc", { NULL }, 2045, "tcp" },
+ { "cdfunc", { NULL }, 2045, "udp" },
+ { "sdfunc", { NULL }, 2046, "tcp" },
+ { "sdfunc", { NULL }, 2046, "udp" },
+ { "dls", { NULL }, 2047, "tcp" },
+ { "dls", { NULL }, 2047, "udp" },
+ { "dls-monitor", { NULL }, 2048, "tcp" },
+ { "dls-monitor", { NULL }, 2048, "udp" },
+ { "shilp", { NULL }, 2049, "tcp" },
+ { "shilp", { NULL }, 2049, "udp" },
+ { "nfs", { NULL }, 2049, "tcp" },
+ { "nfs", { NULL }, 2049, "udp" },
+ { "nfs", { NULL }, 2049, "sctp"},
+ { "av-emb-config", { NULL }, 2050, "tcp" },
+ { "av-emb-config", { NULL }, 2050, "udp" },
+ { "epnsdp", { NULL }, 2051, "tcp" },
+ { "epnsdp", { NULL }, 2051, "udp" },
+ { "clearvisn", { NULL }, 2052, "tcp" },
+ { "clearvisn", { NULL }, 2052, "udp" },
+ { "lot105-ds-upd", { NULL }, 2053, "tcp" },
+ { "lot105-ds-upd", { NULL }, 2053, "udp" },
+ { "weblogin", { NULL }, 2054, "tcp" },
+ { "weblogin", { NULL }, 2054, "udp" },
+ { "iop", { NULL }, 2055, "tcp" },
+ { "iop", { NULL }, 2055, "udp" },
+ { "omnisky", { NULL }, 2056, "tcp" },
+ { "omnisky", { NULL }, 2056, "udp" },
+ { "rich-cp", { NULL }, 2057, "tcp" },
+ { "rich-cp", { NULL }, 2057, "udp" },
+ { "newwavesearch", { NULL }, 2058, "tcp" },
+ { "newwavesearch", { NULL }, 2058, "udp" },
+ { "bmc-messaging", { NULL }, 2059, "tcp" },
+ { "bmc-messaging", { NULL }, 2059, "udp" },
+ { "teleniumdaemon", { NULL }, 2060, "tcp" },
+ { "teleniumdaemon", { NULL }, 2060, "udp" },
+ { "netmount", { NULL }, 2061, "tcp" },
+ { "netmount", { NULL }, 2061, "udp" },
+ { "icg-swp", { NULL }, 2062, "tcp" },
+ { "icg-swp", { NULL }, 2062, "udp" },
+ { "icg-bridge", { NULL }, 2063, "tcp" },
+ { "icg-bridge", { NULL }, 2063, "udp" },
+ { "icg-iprelay", { NULL }, 2064, "tcp" },
+ { "icg-iprelay", { NULL }, 2064, "udp" },
+ { "dlsrpn", { NULL }, 2065, "tcp" },
+ { "dlsrpn", { NULL }, 2065, "udp" },
+ { "aura", { NULL }, 2066, "tcp" },
+ { "aura", { NULL }, 2066, "udp" },
+ { "dlswpn", { NULL }, 2067, "tcp" },
+ { "dlswpn", { NULL }, 2067, "udp" },
+ { "avauthsrvprtcl", { NULL }, 2068, "tcp" },
+ { "avauthsrvprtcl", { NULL }, 2068, "udp" },
+ { "event-port", { NULL }, 2069, "tcp" },
+ { "event-port", { NULL }, 2069, "udp" },
+ { "ah-esp-encap", { NULL }, 2070, "tcp" },
+ { "ah-esp-encap", { NULL }, 2070, "udp" },
+ { "acp-port", { NULL }, 2071, "tcp" },
+ { "acp-port", { NULL }, 2071, "udp" },
+ { "msync", { NULL }, 2072, "tcp" },
+ { "msync", { NULL }, 2072, "udp" },
+ { "gxs-data-port", { NULL }, 2073, "tcp" },
+ { "gxs-data-port", { NULL }, 2073, "udp" },
+ { "vrtl-vmf-sa", { NULL }, 2074, "tcp" },
+ { "vrtl-vmf-sa", { NULL }, 2074, "udp" },
+ { "newlixengine", { NULL }, 2075, "tcp" },
+ { "newlixengine", { NULL }, 2075, "udp" },
+ { "newlixconfig", { NULL }, 2076, "tcp" },
+ { "newlixconfig", { NULL }, 2076, "udp" },
+ { "tsrmagt", { NULL }, 2077, "tcp" },
+ { "tsrmagt", { NULL }, 2077, "udp" },
+ { "tpcsrvr", { NULL }, 2078, "tcp" },
+ { "tpcsrvr", { NULL }, 2078, "udp" },
+ { "idware-router", { NULL }, 2079, "tcp" },
+ { "idware-router", { NULL }, 2079, "udp" },
+ { "autodesk-nlm", { NULL }, 2080, "tcp" },
+ { "autodesk-nlm", { NULL }, 2080, "udp" },
+ { "kme-trap-port", { NULL }, 2081, "tcp" },
+ { "kme-trap-port", { NULL }, 2081, "udp" },
+ { "infowave", { NULL }, 2082, "tcp" },
+ { "infowave", { NULL }, 2082, "udp" },
+ { "radsec", { NULL }, 2083, "tcp" },
+ { "radsec", { NULL }, 2083, "udp" },
+ { "sunclustergeo", { NULL }, 2084, "tcp" },
+ { "sunclustergeo", { NULL }, 2084, "udp" },
+ { "ada-cip", { NULL }, 2085, "tcp" },
+ { "ada-cip", { NULL }, 2085, "udp" },
+ { "gnunet", { NULL }, 2086, "tcp" },
+ { "gnunet", { NULL }, 2086, "udp" },
+ { "eli", { NULL }, 2087, "tcp" },
+ { "eli", { NULL }, 2087, "udp" },
+ { "ip-blf", { NULL }, 2088, "tcp" },
+ { "ip-blf", { NULL }, 2088, "udp" },
+ { "sep", { NULL }, 2089, "tcp" },
+ { "sep", { NULL }, 2089, "udp" },
+ { "lrp", { NULL }, 2090, "tcp" },
+ { "lrp", { NULL }, 2090, "udp" },
+ { "prp", { NULL }, 2091, "tcp" },
+ { "prp", { NULL }, 2091, "udp" },
+ { "descent3", { NULL }, 2092, "tcp" },
+ { "descent3", { NULL }, 2092, "udp" },
+ { "nbx-cc", { NULL }, 2093, "tcp" },
+ { "nbx-cc", { NULL }, 2093, "udp" },
+ { "nbx-au", { NULL }, 2094, "tcp" },
+ { "nbx-au", { NULL }, 2094, "udp" },
+ { "nbx-ser", { NULL }, 2095, "tcp" },
+ { "nbx-ser", { NULL }, 2095, "udp" },
+ { "nbx-dir", { NULL }, 2096, "tcp" },
+ { "nbx-dir", { NULL }, 2096, "udp" },
+ { "jetformpreview", { NULL }, 2097, "tcp" },
+ { "jetformpreview", { NULL }, 2097, "udp" },
+ { "dialog-port", { NULL }, 2098, "tcp" },
+ { "dialog-port", { NULL }, 2098, "udp" },
+ { "h2250-annex-g", { NULL }, 2099, "tcp" },
+ { "h2250-annex-g", { NULL }, 2099, "udp" },
+ { "amiganetfs", { NULL }, 2100, "tcp" },
+ { "amiganetfs", { NULL }, 2100, "udp" },
+ { "rtcm-sc104", { NULL }, 2101, "tcp" },
+ { "rtcm-sc104", { NULL }, 2101, "udp" },
+ { "zephyr-srv", { NULL }, 2102, "tcp" },
+ { "zephyr-srv", { NULL }, 2102, "udp" },
+ { "zephyr-clt", { NULL }, 2103, "tcp" },
+ { "zephyr-clt", { NULL }, 2103, "udp" },
+ { "zephyr-hm", { NULL }, 2104, "tcp" },
+ { "zephyr-hm", { NULL }, 2104, "udp" },
+ { "minipay", { NULL }, 2105, "tcp" },
+ { "minipay", { NULL }, 2105, "udp" },
+ { "mzap", { NULL }, 2106, "tcp" },
+ { "mzap", { NULL }, 2106, "udp" },
+ { "bintec-admin", { NULL }, 2107, "tcp" },
+ { "bintec-admin", { NULL }, 2107, "udp" },
+ { "comcam", { NULL }, 2108, "tcp" },
+ { "comcam", { NULL }, 2108, "udp" },
+ { "ergolight", { NULL }, 2109, "tcp" },
+ { "ergolight", { NULL }, 2109, "udp" },
+ { "umsp", { NULL }, 2110, "tcp" },
+ { "umsp", { NULL }, 2110, "udp" },
+ { "dsatp", { NULL }, 2111, "tcp" },
+ { "dsatp", { NULL }, 2111, "udp" },
+ { "idonix-metanet", { NULL }, 2112, "tcp" },
+ { "idonix-metanet", { NULL }, 2112, "udp" },
+ { "hsl-storm", { NULL }, 2113, "tcp" },
+ { "hsl-storm", { NULL }, 2113, "udp" },
+ { "newheights", { NULL }, 2114, "tcp" },
+ { "newheights", { NULL }, 2114, "udp" },
+ { "kdm", { NULL }, 2115, "tcp" },
+ { "kdm", { NULL }, 2115, "udp" },
+ { "ccowcmr", { NULL }, 2116, "tcp" },
+ { "ccowcmr", { NULL }, 2116, "udp" },
+ { "mentaclient", { NULL }, 2117, "tcp" },
+ { "mentaclient", { NULL }, 2117, "udp" },
+ { "mentaserver", { NULL }, 2118, "tcp" },
+ { "mentaserver", { NULL }, 2118, "udp" },
+ { "gsigatekeeper", { NULL }, 2119, "tcp" },
+ { "gsigatekeeper", { NULL }, 2119, "udp" },
+ { "qencp", { NULL }, 2120, "tcp" },
+ { "qencp", { NULL }, 2120, "udp" },
+ { "scientia-ssdb", { NULL }, 2121, "tcp" },
+ { "scientia-ssdb", { NULL }, 2121, "udp" },
+ { "caupc-remote", { NULL }, 2122, "tcp" },
+ { "caupc-remote", { NULL }, 2122, "udp" },
+ { "gtp-control", { NULL }, 2123, "tcp" },
+ { "gtp-control", { NULL }, 2123, "udp" },
+ { "elatelink", { NULL }, 2124, "tcp" },
+ { "elatelink", { NULL }, 2124, "udp" },
+ { "lockstep", { NULL }, 2125, "tcp" },
+ { "lockstep", { NULL }, 2125, "udp" },
+ { "pktcable-cops", { NULL }, 2126, "tcp" },
+ { "pktcable-cops", { NULL }, 2126, "udp" },
+ { "index-pc-wb", { NULL }, 2127, "tcp" },
+ { "index-pc-wb", { NULL }, 2127, "udp" },
+ { "net-steward", { NULL }, 2128, "tcp" },
+ { "net-steward", { NULL }, 2128, "udp" },
+ { "cs-live", { NULL }, 2129, "tcp" },
+ { "cs-live", { NULL }, 2129, "udp" },
+ { "xds", { NULL }, 2130, "tcp" },
+ { "xds", { NULL }, 2130, "udp" },
+ { "avantageb2b", { NULL }, 2131, "tcp" },
+ { "avantageb2b", { NULL }, 2131, "udp" },
+ { "solera-epmap", { NULL }, 2132, "tcp" },
+ { "solera-epmap", { NULL }, 2132, "udp" },
+ { "zymed-zpp", { NULL }, 2133, "tcp" },
+ { "zymed-zpp", { NULL }, 2133, "udp" },
+ { "avenue", { NULL }, 2134, "tcp" },
+ { "avenue", { NULL }, 2134, "udp" },
+ { "gris", { NULL }, 2135, "tcp" },
+ { "gris", { NULL }, 2135, "udp" },
+ { "appworxsrv", { NULL }, 2136, "tcp" },
+ { "appworxsrv", { NULL }, 2136, "udp" },
+ { "connect", { NULL }, 2137, "tcp" },
+ { "connect", { NULL }, 2137, "udp" },
+ { "unbind-cluster", { NULL }, 2138, "tcp" },
+ { "unbind-cluster", { NULL }, 2138, "udp" },
+ { "ias-auth", { NULL }, 2139, "tcp" },
+ { "ias-auth", { NULL }, 2139, "udp" },
+ { "ias-reg", { NULL }, 2140, "tcp" },
+ { "ias-reg", { NULL }, 2140, "udp" },
+ { "ias-admind", { NULL }, 2141, "tcp" },
+ { "ias-admind", { NULL }, 2141, "udp" },
+ { "tdmoip", { NULL }, 2142, "tcp" },
+ { "tdmoip", { NULL }, 2142, "udp" },
+ { "lv-jc", { NULL }, 2143, "tcp" },
+ { "lv-jc", { NULL }, 2143, "udp" },
+ { "lv-ffx", { NULL }, 2144, "tcp" },
+ { "lv-ffx", { NULL }, 2144, "udp" },
+ { "lv-pici", { NULL }, 2145, "tcp" },
+ { "lv-pici", { NULL }, 2145, "udp" },
+ { "lv-not", { NULL }, 2146, "tcp" },
+ { "lv-not", { NULL }, 2146, "udp" },
+ { "lv-auth", { NULL }, 2147, "tcp" },
+ { "lv-auth", { NULL }, 2147, "udp" },
+ { "veritas-ucl", { NULL }, 2148, "tcp" },
+ { "veritas-ucl", { NULL }, 2148, "udp" },
+ { "acptsys", { NULL }, 2149, "tcp" },
+ { "acptsys", { NULL }, 2149, "udp" },
+ { "dynamic3d", { NULL }, 2150, "tcp" },
+ { "dynamic3d", { NULL }, 2150, "udp" },
+ { "docent", { NULL }, 2151, "tcp" },
+ { "docent", { NULL }, 2151, "udp" },
+ { "gtp-user", { NULL }, 2152, "tcp" },
+ { "gtp-user", { NULL }, 2152, "udp" },
+ { "ctlptc", { NULL }, 2153, "tcp" },
+ { "ctlptc", { NULL }, 2153, "udp" },
+ { "stdptc", { NULL }, 2154, "tcp" },
+ { "stdptc", { NULL }, 2154, "udp" },
+ { "brdptc", { NULL }, 2155, "tcp" },
+ { "brdptc", { NULL }, 2155, "udp" },
+ { "trp", { NULL }, 2156, "tcp" },
+ { "trp", { NULL }, 2156, "udp" },
+ { "xnds", { NULL }, 2157, "tcp" },
+ { "xnds", { NULL }, 2157, "udp" },
+ { "touchnetplus", { NULL }, 2158, "tcp" },
+ { "touchnetplus", { NULL }, 2158, "udp" },
+ { "gdbremote", { NULL }, 2159, "tcp" },
+ { "gdbremote", { NULL }, 2159, "udp" },
+ { "apc-2160", { NULL }, 2160, "tcp" },
+ { "apc-2160", { NULL }, 2160, "udp" },
+ { "apc-2161", { NULL }, 2161, "tcp" },
+ { "apc-2161", { NULL }, 2161, "udp" },
+ { "navisphere", { NULL }, 2162, "tcp" },
+ { "navisphere", { NULL }, 2162, "udp" },
+ { "navisphere-sec", { NULL }, 2163, "tcp" },
+ { "navisphere-sec", { NULL }, 2163, "udp" },
+ { "ddns-v3", { NULL }, 2164, "tcp" },
+ { "ddns-v3", { NULL }, 2164, "udp" },
+ { "x-bone-api", { NULL }, 2165, "tcp" },
+ { "x-bone-api", { NULL }, 2165, "udp" },
+ { "iwserver", { NULL }, 2166, "tcp" },
+ { "iwserver", { NULL }, 2166, "udp" },
+ { "raw-serial", { NULL }, 2167, "tcp" },
+ { "raw-serial", { NULL }, 2167, "udp" },
+ { "easy-soft-mux", { NULL }, 2168, "tcp" },
+ { "easy-soft-mux", { NULL }, 2168, "udp" },
+ { "brain", { NULL }, 2169, "tcp" },
+ { "brain", { NULL }, 2169, "udp" },
+ { "eyetv", { NULL }, 2170, "tcp" },
+ { "eyetv", { NULL }, 2170, "udp" },
+ { "msfw-storage", { NULL }, 2171, "tcp" },
+ { "msfw-storage", { NULL }, 2171, "udp" },
+ { "msfw-s-storage", { NULL }, 2172, "tcp" },
+ { "msfw-s-storage", { NULL }, 2172, "udp" },
+ { "msfw-replica", { NULL }, 2173, "tcp" },
+ { "msfw-replica", { NULL }, 2173, "udp" },
+ { "msfw-array", { NULL }, 2174, "tcp" },
+ { "msfw-array", { NULL }, 2174, "udp" },
+ { "airsync", { NULL }, 2175, "tcp" },
+ { "airsync", { NULL }, 2175, "udp" },
+ { "rapi", { NULL }, 2176, "tcp" },
+ { "rapi", { NULL }, 2176, "udp" },
+ { "qwave", { NULL }, 2177, "tcp" },
+ { "qwave", { NULL }, 2177, "udp" },
+ { "bitspeer", { NULL }, 2178, "tcp" },
+ { "bitspeer", { NULL }, 2178, "udp" },
+ { "vmrdp", { NULL }, 2179, "tcp" },
+ { "vmrdp", { NULL }, 2179, "udp" },
+ { "mc-gt-srv", { NULL }, 2180, "tcp" },
+ { "mc-gt-srv", { NULL }, 2180, "udp" },
+ { "eforward", { NULL }, 2181, "tcp" },
+ { "eforward", { NULL }, 2181, "udp" },
+ { "cgn-stat", { NULL }, 2182, "tcp" },
+ { "cgn-stat", { NULL }, 2182, "udp" },
+ { "cgn-config", { NULL }, 2183, "tcp" },
+ { "cgn-config", { NULL }, 2183, "udp" },
+ { "nvd", { NULL }, 2184, "tcp" },
+ { "nvd", { NULL }, 2184, "udp" },
+ { "onbase-dds", { NULL }, 2185, "tcp" },
+ { "onbase-dds", { NULL }, 2185, "udp" },
+ { "gtaua", { NULL }, 2186, "tcp" },
+ { "gtaua", { NULL }, 2186, "udp" },
+ { "ssmc", { NULL }, 2187, "tcp" },
+ { "ssmd", { NULL }, 2187, "udp" },
+ { "tivoconnect", { NULL }, 2190, "tcp" },
+ { "tivoconnect", { NULL }, 2190, "udp" },
+ { "tvbus", { NULL }, 2191, "tcp" },
+ { "tvbus", { NULL }, 2191, "udp" },
+ { "asdis", { NULL }, 2192, "tcp" },
+ { "asdis", { NULL }, 2192, "udp" },
+ { "drwcs", { NULL }, 2193, "tcp" },
+ { "drwcs", { NULL }, 2193, "udp" },
+ { "mnp-exchange", { NULL }, 2197, "tcp" },
+ { "mnp-exchange", { NULL }, 2197, "udp" },
+ { "onehome-remote", { NULL }, 2198, "tcp" },
+ { "onehome-remote", { NULL }, 2198, "udp" },
+ { "onehome-help", { NULL }, 2199, "tcp" },
+ { "onehome-help", { NULL }, 2199, "udp" },
+ { "ici", { NULL }, 2200, "tcp" },
+ { "ici", { NULL }, 2200, "udp" },
+ { "ats", { NULL }, 2201, "tcp" },
+ { "ats", { NULL }, 2201, "udp" },
+ { "imtc-map", { NULL }, 2202, "tcp" },
+ { "imtc-map", { NULL }, 2202, "udp" },
+ { "b2-runtime", { NULL }, 2203, "tcp" },
+ { "b2-runtime", { NULL }, 2203, "udp" },
+ { "b2-license", { NULL }, 2204, "tcp" },
+ { "b2-license", { NULL }, 2204, "udp" },
+ { "jps", { NULL }, 2205, "tcp" },
+ { "jps", { NULL }, 2205, "udp" },
+ { "hpocbus", { NULL }, 2206, "tcp" },
+ { "hpocbus", { NULL }, 2206, "udp" },
+ { "hpssd", { NULL }, 2207, "tcp" },
+ { "hpssd", { NULL }, 2207, "udp" },
+ { "hpiod", { NULL }, 2208, "tcp" },
+ { "hpiod", { NULL }, 2208, "udp" },
+ { "rimf-ps", { NULL }, 2209, "tcp" },
+ { "rimf-ps", { NULL }, 2209, "udp" },
+ { "noaaport", { NULL }, 2210, "tcp" },
+ { "noaaport", { NULL }, 2210, "udp" },
+ { "emwin", { NULL }, 2211, "tcp" },
+ { "emwin", { NULL }, 2211, "udp" },
+ { "leecoposserver", { NULL }, 2212, "tcp" },
+ { "leecoposserver", { NULL }, 2212, "udp" },
+ { "kali", { NULL }, 2213, "tcp" },
+ { "kali", { NULL }, 2213, "udp" },
+ { "rpi", { NULL }, 2214, "tcp" },
+ { "rpi", { NULL }, 2214, "udp" },
+ { "ipcore", { NULL }, 2215, "tcp" },
+ { "ipcore", { NULL }, 2215, "udp" },
+ { "vtu-comms", { NULL }, 2216, "tcp" },
+ { "vtu-comms", { NULL }, 2216, "udp" },
+ { "gotodevice", { NULL }, 2217, "tcp" },
+ { "gotodevice", { NULL }, 2217, "udp" },
+ { "bounzza", { NULL }, 2218, "tcp" },
+ { "bounzza", { NULL }, 2218, "udp" },
+ { "netiq-ncap", { NULL }, 2219, "tcp" },
+ { "netiq-ncap", { NULL }, 2219, "udp" },
+ { "netiq", { NULL }, 2220, "tcp" },
+ { "netiq", { NULL }, 2220, "udp" },
+ { "rockwell-csp1", { NULL }, 2221, "tcp" },
+ { "rockwell-csp1", { NULL }, 2221, "udp" },
+ { "EtherNet/IP-1", { NULL }, 2222, "tcp" },
+ { "EtherNet/IP-1", { NULL }, 2222, "udp" },
+ { "rockwell-csp2", { NULL }, 2223, "tcp" },
+ { "rockwell-csp2", { NULL }, 2223, "udp" },
+ { "efi-mg", { NULL }, 2224, "tcp" },
+ { "efi-mg", { NULL }, 2224, "udp" },
+ { "rcip-itu", { NULL }, 2225, "tcp" },
+ { "rcip-itu", { NULL }, 2225, "sctp"},
+ { "di-drm", { NULL }, 2226, "tcp" },
+ { "di-drm", { NULL }, 2226, "udp" },
+ { "di-msg", { NULL }, 2227, "tcp" },
+ { "di-msg", { NULL }, 2227, "udp" },
+ { "ehome-ms", { NULL }, 2228, "tcp" },
+ { "ehome-ms", { NULL }, 2228, "udp" },
+ { "datalens", { NULL }, 2229, "tcp" },
+ { "datalens", { NULL }, 2229, "udp" },
+ { "queueadm", { NULL }, 2230, "tcp" },
+ { "queueadm", { NULL }, 2230, "udp" },
+ { "wimaxasncp", { NULL }, 2231, "tcp" },
+ { "wimaxasncp", { NULL }, 2231, "udp" },
+ { "ivs-video", { NULL }, 2232, "tcp" },
+ { "ivs-video", { NULL }, 2232, "udp" },
+ { "infocrypt", { NULL }, 2233, "tcp" },
+ { "infocrypt", { NULL }, 2233, "udp" },
+ { "directplay", { NULL }, 2234, "tcp" },
+ { "directplay", { NULL }, 2234, "udp" },
+ { "sercomm-wlink", { NULL }, 2235, "tcp" },
+ { "sercomm-wlink", { NULL }, 2235, "udp" },
+ { "nani", { NULL }, 2236, "tcp" },
+ { "nani", { NULL }, 2236, "udp" },
+ { "optech-port1-lm", { NULL }, 2237, "tcp" },
+ { "optech-port1-lm", { NULL }, 2237, "udp" },
+ { "aviva-sna", { NULL }, 2238, "tcp" },
+ { "aviva-sna", { NULL }, 2238, "udp" },
+ { "imagequery", { NULL }, 2239, "tcp" },
+ { "imagequery", { NULL }, 2239, "udp" },
+ { "recipe", { NULL }, 2240, "tcp" },
+ { "recipe", { NULL }, 2240, "udp" },
+ { "ivsd", { NULL }, 2241, "tcp" },
+ { "ivsd", { NULL }, 2241, "udp" },
+ { "foliocorp", { NULL }, 2242, "tcp" },
+ { "foliocorp", { NULL }, 2242, "udp" },
+ { "magicom", { NULL }, 2243, "tcp" },
+ { "magicom", { NULL }, 2243, "udp" },
+ { "nmsserver", { NULL }, 2244, "tcp" },
+ { "nmsserver", { NULL }, 2244, "udp" },
+ { "hao", { NULL }, 2245, "tcp" },
+ { "hao", { NULL }, 2245, "udp" },
+ { "pc-mta-addrmap", { NULL }, 2246, "tcp" },
+ { "pc-mta-addrmap", { NULL }, 2246, "udp" },
+ { "antidotemgrsvr", { NULL }, 2247, "tcp" },
+ { "antidotemgrsvr", { NULL }, 2247, "udp" },
+ { "ums", { NULL }, 2248, "tcp" },
+ { "ums", { NULL }, 2248, "udp" },
+ { "rfmp", { NULL }, 2249, "tcp" },
+ { "rfmp", { NULL }, 2249, "udp" },
+ { "remote-collab", { NULL }, 2250, "tcp" },
+ { "remote-collab", { NULL }, 2250, "udp" },
+ { "dif-port", { NULL }, 2251, "tcp" },
+ { "dif-port", { NULL }, 2251, "udp" },
+ { "njenet-ssl", { NULL }, 2252, "tcp" },
+ { "njenet-ssl", { NULL }, 2252, "udp" },
+ { "dtv-chan-req", { NULL }, 2253, "tcp" },
+ { "dtv-chan-req", { NULL }, 2253, "udp" },
+ { "seispoc", { NULL }, 2254, "tcp" },
+ { "seispoc", { NULL }, 2254, "udp" },
+ { "vrtp", { NULL }, 2255, "tcp" },
+ { "vrtp", { NULL }, 2255, "udp" },
+ { "pcc-mfp", { NULL }, 2256, "tcp" },
+ { "pcc-mfp", { NULL }, 2256, "udp" },
+ { "simple-tx-rx", { NULL }, 2257, "tcp" },
+ { "simple-tx-rx", { NULL }, 2257, "udp" },
+ { "rcts", { NULL }, 2258, "tcp" },
+ { "rcts", { NULL }, 2258, "udp" },
+ { "acd-pm", { NULL }, 2259, "tcp" },
+ { "acd-pm", { NULL }, 2259, "udp" },
+ { "apc-2260", { NULL }, 2260, "tcp" },
+ { "apc-2260", { NULL }, 2260, "udp" },
+ { "comotionmaster", { NULL }, 2261, "tcp" },
+ { "comotionmaster", { NULL }, 2261, "udp" },
+ { "comotionback", { NULL }, 2262, "tcp" },
+ { "comotionback", { NULL }, 2262, "udp" },
+ { "ecwcfg", { NULL }, 2263, "tcp" },
+ { "ecwcfg", { NULL }, 2263, "udp" },
+ { "apx500api-1", { NULL }, 2264, "tcp" },
+ { "apx500api-1", { NULL }, 2264, "udp" },
+ { "apx500api-2", { NULL }, 2265, "tcp" },
+ { "apx500api-2", { NULL }, 2265, "udp" },
+ { "mfserver", { NULL }, 2266, "tcp" },
+ { "mfserver", { NULL }, 2266, "udp" },
+ { "ontobroker", { NULL }, 2267, "tcp" },
+ { "ontobroker", { NULL }, 2267, "udp" },
+ { "amt", { NULL }, 2268, "tcp" },
+ { "amt", { NULL }, 2268, "udp" },
+ { "mikey", { NULL }, 2269, "tcp" },
+ { "mikey", { NULL }, 2269, "udp" },
+ { "starschool", { NULL }, 2270, "tcp" },
+ { "starschool", { NULL }, 2270, "udp" },
+ { "mmcals", { NULL }, 2271, "tcp" },
+ { "mmcals", { NULL }, 2271, "udp" },
+ { "mmcal", { NULL }, 2272, "tcp" },
+ { "mmcal", { NULL }, 2272, "udp" },
+ { "mysql-im", { NULL }, 2273, "tcp" },
+ { "mysql-im", { NULL }, 2273, "udp" },
+ { "pcttunnell", { NULL }, 2274, "tcp" },
+ { "pcttunnell", { NULL }, 2274, "udp" },
+ { "ibridge-data", { NULL }, 2275, "tcp" },
+ { "ibridge-data", { NULL }, 2275, "udp" },
+ { "ibridge-mgmt", { NULL }, 2276, "tcp" },
+ { "ibridge-mgmt", { NULL }, 2276, "udp" },
+ { "bluectrlproxy", { NULL }, 2277, "tcp" },
+ { "bluectrlproxy", { NULL }, 2277, "udp" },
+ { "s3db", { NULL }, 2278, "tcp" },
+ { "s3db", { NULL }, 2278, "udp" },
+ { "xmquery", { NULL }, 2279, "tcp" },
+ { "xmquery", { NULL }, 2279, "udp" },
+ { "lnvpoller", { NULL }, 2280, "tcp" },
+ { "lnvpoller", { NULL }, 2280, "udp" },
+ { "lnvconsole", { NULL }, 2281, "tcp" },
+ { "lnvconsole", { NULL }, 2281, "udp" },
+ { "lnvalarm", { NULL }, 2282, "tcp" },
+ { "lnvalarm", { NULL }, 2282, "udp" },
+ { "lnvstatus", { NULL }, 2283, "tcp" },
+ { "lnvstatus", { NULL }, 2283, "udp" },
+ { "lnvmaps", { NULL }, 2284, "tcp" },
+ { "lnvmaps", { NULL }, 2284, "udp" },
+ { "lnvmailmon", { NULL }, 2285, "tcp" },
+ { "lnvmailmon", { NULL }, 2285, "udp" },
+ { "nas-metering", { NULL }, 2286, "tcp" },
+ { "nas-metering", { NULL }, 2286, "udp" },
+ { "dna", { NULL }, 2287, "tcp" },
+ { "dna", { NULL }, 2287, "udp" },
+ { "netml", { NULL }, 2288, "tcp" },
+ { "netml", { NULL }, 2288, "udp" },
+ { "dict-lookup", { NULL }, 2289, "tcp" },
+ { "dict-lookup", { NULL }, 2289, "udp" },
+ { "sonus-logging", { NULL }, 2290, "tcp" },
+ { "sonus-logging", { NULL }, 2290, "udp" },
+ { "eapsp", { NULL }, 2291, "tcp" },
+ { "eapsp", { NULL }, 2291, "udp" },
+ { "mib-streaming", { NULL }, 2292, "tcp" },
+ { "mib-streaming", { NULL }, 2292, "udp" },
+ { "npdbgmngr", { NULL }, 2293, "tcp" },
+ { "npdbgmngr", { NULL }, 2293, "udp" },
+ { "konshus-lm", { NULL }, 2294, "tcp" },
+ { "konshus-lm", { NULL }, 2294, "udp" },
+ { "advant-lm", { NULL }, 2295, "tcp" },
+ { "advant-lm", { NULL }, 2295, "udp" },
+ { "theta-lm", { NULL }, 2296, "tcp" },
+ { "theta-lm", { NULL }, 2296, "udp" },
+ { "d2k-datamover1", { NULL }, 2297, "tcp" },
+ { "d2k-datamover1", { NULL }, 2297, "udp" },
+ { "d2k-datamover2", { NULL }, 2298, "tcp" },
+ { "d2k-datamover2", { NULL }, 2298, "udp" },
+ { "pc-telecommute", { NULL }, 2299, "tcp" },
+ { "pc-telecommute", { NULL }, 2299, "udp" },
+ { "cvmmon", { NULL }, 2300, "tcp" },
+ { "cvmmon", { NULL }, 2300, "udp" },
+ { "cpq-wbem", { NULL }, 2301, "tcp" },
+ { "cpq-wbem", { NULL }, 2301, "udp" },
+ { "binderysupport", { NULL }, 2302, "tcp" },
+ { "binderysupport", { NULL }, 2302, "udp" },
+ { "proxy-gateway", { NULL }, 2303, "tcp" },
+ { "proxy-gateway", { NULL }, 2303, "udp" },
+ { "attachmate-uts", { NULL }, 2304, "tcp" },
+ { "attachmate-uts", { NULL }, 2304, "udp" },
+ { "mt-scaleserver", { NULL }, 2305, "tcp" },
+ { "mt-scaleserver", { NULL }, 2305, "udp" },
+ { "tappi-boxnet", { NULL }, 2306, "tcp" },
+ { "tappi-boxnet", { NULL }, 2306, "udp" },
+ { "pehelp", { NULL }, 2307, "tcp" },
+ { "pehelp", { NULL }, 2307, "udp" },
+ { "sdhelp", { NULL }, 2308, "tcp" },
+ { "sdhelp", { NULL }, 2308, "udp" },
+ { "sdserver", { NULL }, 2309, "tcp" },
+ { "sdserver", { NULL }, 2309, "udp" },
+ { "sdclient", { NULL }, 2310, "tcp" },
+ { "sdclient", { NULL }, 2310, "udp" },
+ { "messageservice", { NULL }, 2311, "tcp" },
+ { "messageservice", { NULL }, 2311, "udp" },
+ { "wanscaler", { NULL }, 2312, "tcp" },
+ { "wanscaler", { NULL }, 2312, "udp" },
+ { "iapp", { NULL }, 2313, "tcp" },
+ { "iapp", { NULL }, 2313, "udp" },
+ { "cr-websystems", { NULL }, 2314, "tcp" },
+ { "cr-websystems", { NULL }, 2314, "udp" },
+ { "precise-sft", { NULL }, 2315, "tcp" },
+ { "precise-sft", { NULL }, 2315, "udp" },
+ { "sent-lm", { NULL }, 2316, "tcp" },
+ { "sent-lm", { NULL }, 2316, "udp" },
+ { "attachmate-g32", { NULL }, 2317, "tcp" },
+ { "attachmate-g32", { NULL }, 2317, "udp" },
+ { "cadencecontrol", { NULL }, 2318, "tcp" },
+ { "cadencecontrol", { NULL }, 2318, "udp" },
+ { "infolibria", { NULL }, 2319, "tcp" },
+ { "infolibria", { NULL }, 2319, "udp" },
+ { "siebel-ns", { NULL }, 2320, "tcp" },
+ { "siebel-ns", { NULL }, 2320, "udp" },
+ { "rdlap", { NULL }, 2321, "tcp" },
+ { "rdlap", { NULL }, 2321, "udp" },
+ { "ofsd", { NULL }, 2322, "tcp" },
+ { "ofsd", { NULL }, 2322, "udp" },
+ { "3d-nfsd", { NULL }, 2323, "tcp" },
+ { "3d-nfsd", { NULL }, 2323, "udp" },
+ { "cosmocall", { NULL }, 2324, "tcp" },
+ { "cosmocall", { NULL }, 2324, "udp" },
+ { "ansysli", { NULL }, 2325, "tcp" },
+ { "ansysli", { NULL }, 2325, "udp" },
+ { "idcp", { NULL }, 2326, "tcp" },
+ { "idcp", { NULL }, 2326, "udp" },
+ { "xingcsm", { NULL }, 2327, "tcp" },
+ { "xingcsm", { NULL }, 2327, "udp" },
+ { "netrix-sftm", { NULL }, 2328, "tcp" },
+ { "netrix-sftm", { NULL }, 2328, "udp" },
+ { "nvd", { NULL }, 2329, "tcp" },
+ { "nvd", { NULL }, 2329, "udp" },
+ { "tscchat", { NULL }, 2330, "tcp" },
+ { "tscchat", { NULL }, 2330, "udp" },
+ { "agentview", { NULL }, 2331, "tcp" },
+ { "agentview", { NULL }, 2331, "udp" },
+ { "rcc-host", { NULL }, 2332, "tcp" },
+ { "rcc-host", { NULL }, 2332, "udp" },
+ { "snapp", { NULL }, 2333, "tcp" },
+ { "snapp", { NULL }, 2333, "udp" },
+ { "ace-client", { NULL }, 2334, "tcp" },
+ { "ace-client", { NULL }, 2334, "udp" },
+ { "ace-proxy", { NULL }, 2335, "tcp" },
+ { "ace-proxy", { NULL }, 2335, "udp" },
+ { "appleugcontrol", { NULL }, 2336, "tcp" },
+ { "appleugcontrol", { NULL }, 2336, "udp" },
+ { "ideesrv", { NULL }, 2337, "tcp" },
+ { "ideesrv", { NULL }, 2337, "udp" },
+ { "norton-lambert", { NULL }, 2338, "tcp" },
+ { "norton-lambert", { NULL }, 2338, "udp" },
+ { "3com-webview", { NULL }, 2339, "tcp" },
+ { "3com-webview", { NULL }, 2339, "udp" },
+ { "wrs_registry", { NULL }, 2340, "tcp" },
+ { "wrs_registry", { NULL }, 2340, "udp" },
+ { "xiostatus", { NULL }, 2341, "tcp" },
+ { "xiostatus", { NULL }, 2341, "udp" },
+ { "manage-exec", { NULL }, 2342, "tcp" },
+ { "manage-exec", { NULL }, 2342, "udp" },
+ { "nati-logos", { NULL }, 2343, "tcp" },
+ { "nati-logos", { NULL }, 2343, "udp" },
+ { "fcmsys", { NULL }, 2344, "tcp" },
+ { "fcmsys", { NULL }, 2344, "udp" },
+ { "dbm", { NULL }, 2345, "tcp" },
+ { "dbm", { NULL }, 2345, "udp" },
+ { "redstorm_join", { NULL }, 2346, "tcp" },
+ { "redstorm_join", { NULL }, 2346, "udp" },
+ { "redstorm_find", { NULL }, 2347, "tcp" },
+ { "redstorm_find", { NULL }, 2347, "udp" },
+ { "redstorm_info", { NULL }, 2348, "tcp" },
+ { "redstorm_info", { NULL }, 2348, "udp" },
+ { "redstorm_diag", { NULL }, 2349, "tcp" },
+ { "redstorm_diag", { NULL }, 2349, "udp" },
+ { "psbserver", { NULL }, 2350, "tcp" },
+ { "psbserver", { NULL }, 2350, "udp" },
+ { "psrserver", { NULL }, 2351, "tcp" },
+ { "psrserver", { NULL }, 2351, "udp" },
+ { "pslserver", { NULL }, 2352, "tcp" },
+ { "pslserver", { NULL }, 2352, "udp" },
+ { "pspserver", { NULL }, 2353, "tcp" },
+ { "pspserver", { NULL }, 2353, "udp" },
+ { "psprserver", { NULL }, 2354, "tcp" },
+ { "psprserver", { NULL }, 2354, "udp" },
+ { "psdbserver", { NULL }, 2355, "tcp" },
+ { "psdbserver", { NULL }, 2355, "udp" },
+ { "gxtelmd", { NULL }, 2356, "tcp" },
+ { "gxtelmd", { NULL }, 2356, "udp" },
+ { "unihub-server", { NULL }, 2357, "tcp" },
+ { "unihub-server", { NULL }, 2357, "udp" },
+ { "futrix", { NULL }, 2358, "tcp" },
+ { "futrix", { NULL }, 2358, "udp" },
+ { "flukeserver", { NULL }, 2359, "tcp" },
+ { "flukeserver", { NULL }, 2359, "udp" },
+ { "nexstorindltd", { NULL }, 2360, "tcp" },
+ { "nexstorindltd", { NULL }, 2360, "udp" },
+ { "tl1", { NULL }, 2361, "tcp" },
+ { "tl1", { NULL }, 2361, "udp" },
+ { "digiman", { NULL }, 2362, "tcp" },
+ { "digiman", { NULL }, 2362, "udp" },
+ { "mediacntrlnfsd", { NULL }, 2363, "tcp" },
+ { "mediacntrlnfsd", { NULL }, 2363, "udp" },
+ { "oi-2000", { NULL }, 2364, "tcp" },
+ { "oi-2000", { NULL }, 2364, "udp" },
+ { "dbref", { NULL }, 2365, "tcp" },
+ { "dbref", { NULL }, 2365, "udp" },
+ { "qip-login", { NULL }, 2366, "tcp" },
+ { "qip-login", { NULL }, 2366, "udp" },
+ { "service-ctrl", { NULL }, 2367, "tcp" },
+ { "service-ctrl", { NULL }, 2367, "udp" },
+ { "opentable", { NULL }, 2368, "tcp" },
+ { "opentable", { NULL }, 2368, "udp" },
+ { "l3-hbmon", { NULL }, 2370, "tcp" },
+ { "l3-hbmon", { NULL }, 2370, "udp" },
+ { "worldwire", { NULL }, 2371, "tcp" },
+ { "worldwire", { NULL }, 2371, "udp" },
+ { "lanmessenger", { NULL }, 2372, "tcp" },
+ { "lanmessenger", { NULL }, 2372, "udp" },
+ { "remographlm", { NULL }, 2373, "tcp" },
+ { "hydra", { NULL }, 2374, "tcp" },
+ { "compaq-https", { NULL }, 2381, "tcp" },
+ { "compaq-https", { NULL }, 2381, "udp" },
+ { "ms-olap3", { NULL }, 2382, "tcp" },
+ { "ms-olap3", { NULL }, 2382, "udp" },
+ { "ms-olap4", { NULL }, 2383, "tcp" },
+ { "ms-olap4", { NULL }, 2383, "udp" },
+ { "sd-request", { NULL }, 2384, "tcp" },
+ { "sd-capacity", { NULL }, 2384, "udp" },
+ { "sd-data", { NULL }, 2385, "tcp" },
+ { "sd-data", { NULL }, 2385, "udp" },
+ { "virtualtape", { NULL }, 2386, "tcp" },
+ { "virtualtape", { NULL }, 2386, "udp" },
+ { "vsamredirector", { NULL }, 2387, "tcp" },
+ { "vsamredirector", { NULL }, 2387, "udp" },
+ { "mynahautostart", { NULL }, 2388, "tcp" },
+ { "mynahautostart", { NULL }, 2388, "udp" },
+ { "ovsessionmgr", { NULL }, 2389, "tcp" },
+ { "ovsessionmgr", { NULL }, 2389, "udp" },
+ { "rsmtp", { NULL }, 2390, "tcp" },
+ { "rsmtp", { NULL }, 2390, "udp" },
+ { "3com-net-mgmt", { NULL }, 2391, "tcp" },
+ { "3com-net-mgmt", { NULL }, 2391, "udp" },
+ { "tacticalauth", { NULL }, 2392, "tcp" },
+ { "tacticalauth", { NULL }, 2392, "udp" },
+ { "ms-olap1", { NULL }, 2393, "tcp" },
+ { "ms-olap1", { NULL }, 2393, "udp" },
+ { "ms-olap2", { NULL }, 2394, "tcp" },
+ { "ms-olap2", { NULL }, 2394, "udp" },
+ { "lan900_remote", { NULL }, 2395, "tcp" },
+ { "lan900_remote", { NULL }, 2395, "udp" },
+ { "wusage", { NULL }, 2396, "tcp" },
+ { "wusage", { NULL }, 2396, "udp" },
+ { "ncl", { NULL }, 2397, "tcp" },
+ { "ncl", { NULL }, 2397, "udp" },
+ { "orbiter", { NULL }, 2398, "tcp" },
+ { "orbiter", { NULL }, 2398, "udp" },
+ { "fmpro-fdal", { NULL }, 2399, "tcp" },
+ { "fmpro-fdal", { NULL }, 2399, "udp" },
+ { "opequus-server", { NULL }, 2400, "tcp" },
+ { "opequus-server", { NULL }, 2400, "udp" },
+ { "cvspserver", { NULL }, 2401, "tcp" },
+ { "cvspserver", { NULL }, 2401, "udp" },
+ { "taskmaster2000", { NULL }, 2402, "tcp" },
+ { "taskmaster2000", { NULL }, 2402, "udp" },
+ { "taskmaster2000", { NULL }, 2403, "tcp" },
+ { "taskmaster2000", { NULL }, 2403, "udp" },
+ { "iec-104", { NULL }, 2404, "tcp" },
+ { "iec-104", { NULL }, 2404, "udp" },
+ { "trc-netpoll", { NULL }, 2405, "tcp" },
+ { "trc-netpoll", { NULL }, 2405, "udp" },
+ { "jediserver", { NULL }, 2406, "tcp" },
+ { "jediserver", { NULL }, 2406, "udp" },
+ { "orion", { NULL }, 2407, "tcp" },
+ { "orion", { NULL }, 2407, "udp" },
+ { "optimanet", { NULL }, 2408, "tcp" },
+ { "optimanet", { NULL }, 2408, "udp" },
+ { "sns-protocol", { NULL }, 2409, "tcp" },
+ { "sns-protocol", { NULL }, 2409, "udp" },
+ { "vrts-registry", { NULL }, 2410, "tcp" },
+ { "vrts-registry", { NULL }, 2410, "udp" },
+ { "netwave-ap-mgmt", { NULL }, 2411, "tcp" },
+ { "netwave-ap-mgmt", { NULL }, 2411, "udp" },
+ { "cdn", { NULL }, 2412, "tcp" },
+ { "cdn", { NULL }, 2412, "udp" },
+ { "orion-rmi-reg", { NULL }, 2413, "tcp" },
+ { "orion-rmi-reg", { NULL }, 2413, "udp" },
+ { "beeyond", { NULL }, 2414, "tcp" },
+ { "beeyond", { NULL }, 2414, "udp" },
+ { "codima-rtp", { NULL }, 2415, "tcp" },
+ { "codima-rtp", { NULL }, 2415, "udp" },
+ { "rmtserver", { NULL }, 2416, "tcp" },
+ { "rmtserver", { NULL }, 2416, "udp" },
+ { "composit-server", { NULL }, 2417, "tcp" },
+ { "composit-server", { NULL }, 2417, "udp" },
+ { "cas", { NULL }, 2418, "tcp" },
+ { "cas", { NULL }, 2418, "udp" },
+ { "attachmate-s2s", { NULL }, 2419, "tcp" },
+ { "attachmate-s2s", { NULL }, 2419, "udp" },
+ { "dslremote-mgmt", { NULL }, 2420, "tcp" },
+ { "dslremote-mgmt", { NULL }, 2420, "udp" },
+ { "g-talk", { NULL }, 2421, "tcp" },
+ { "g-talk", { NULL }, 2421, "udp" },
+ { "crmsbits", { NULL }, 2422, "tcp" },
+ { "crmsbits", { NULL }, 2422, "udp" },
+ { "rnrp", { NULL }, 2423, "tcp" },
+ { "rnrp", { NULL }, 2423, "udp" },
+ { "kofax-svr", { NULL }, 2424, "tcp" },
+ { "kofax-svr", { NULL }, 2424, "udp" },
+ { "fjitsuappmgr", { NULL }, 2425, "tcp" },
+ { "fjitsuappmgr", { NULL }, 2425, "udp" },
+ { "mgcp-gateway", { NULL }, 2427, "tcp" },
+ { "mgcp-gateway", { NULL }, 2427, "udp" },
+ { "ott", { NULL }, 2428, "tcp" },
+ { "ott", { NULL }, 2428, "udp" },
+ { "ft-role", { NULL }, 2429, "tcp" },
+ { "ft-role", { NULL }, 2429, "udp" },
+ { "venus", { NULL }, 2430, "tcp" },
+ { "venus", { NULL }, 2430, "udp" },
+ { "venus-se", { NULL }, 2431, "tcp" },
+ { "venus-se", { NULL }, 2431, "udp" },
+ { "codasrv", { NULL }, 2432, "tcp" },
+ { "codasrv", { NULL }, 2432, "udp" },
+ { "codasrv-se", { NULL }, 2433, "tcp" },
+ { "codasrv-se", { NULL }, 2433, "udp" },
+ { "pxc-epmap", { NULL }, 2434, "tcp" },
+ { "pxc-epmap", { NULL }, 2434, "udp" },
+ { "optilogic", { NULL }, 2435, "tcp" },
+ { "optilogic", { NULL }, 2435, "udp" },
+ { "topx", { NULL }, 2436, "tcp" },
+ { "topx", { NULL }, 2436, "udp" },
+ { "unicontrol", { NULL }, 2437, "tcp" },
+ { "unicontrol", { NULL }, 2437, "udp" },
+ { "msp", { NULL }, 2438, "tcp" },
+ { "msp", { NULL }, 2438, "udp" },
+ { "sybasedbsynch", { NULL }, 2439, "tcp" },
+ { "sybasedbsynch", { NULL }, 2439, "udp" },
+ { "spearway", { NULL }, 2440, "tcp" },
+ { "spearway", { NULL }, 2440, "udp" },
+ { "pvsw-inet", { NULL }, 2441, "tcp" },
+ { "pvsw-inet", { NULL }, 2441, "udp" },
+ { "netangel", { NULL }, 2442, "tcp" },
+ { "netangel", { NULL }, 2442, "udp" },
+ { "powerclientcsf", { NULL }, 2443, "tcp" },
+ { "powerclientcsf", { NULL }, 2443, "udp" },
+ { "btpp2sectrans", { NULL }, 2444, "tcp" },
+ { "btpp2sectrans", { NULL }, 2444, "udp" },
+ { "dtn1", { NULL }, 2445, "tcp" },
+ { "dtn1", { NULL }, 2445, "udp" },
+ { "bues_service", { NULL }, 2446, "tcp" },
+ { "bues_service", { NULL }, 2446, "udp" },
+ { "ovwdb", { NULL }, 2447, "tcp" },
+ { "ovwdb", { NULL }, 2447, "udp" },
+ { "hpppssvr", { NULL }, 2448, "tcp" },
+ { "hpppssvr", { NULL }, 2448, "udp" },
+ { "ratl", { NULL }, 2449, "tcp" },
+ { "ratl", { NULL }, 2449, "udp" },
+ { "netadmin", { NULL }, 2450, "tcp" },
+ { "netadmin", { NULL }, 2450, "udp" },
+ { "netchat", { NULL }, 2451, "tcp" },
+ { "netchat", { NULL }, 2451, "udp" },
+ { "snifferclient", { NULL }, 2452, "tcp" },
+ { "snifferclient", { NULL }, 2452, "udp" },
+ { "madge-ltd", { NULL }, 2453, "tcp" },
+ { "madge-ltd", { NULL }, 2453, "udp" },
+ { "indx-dds", { NULL }, 2454, "tcp" },
+ { "indx-dds", { NULL }, 2454, "udp" },
+ { "wago-io-system", { NULL }, 2455, "tcp" },
+ { "wago-io-system", { NULL }, 2455, "udp" },
+ { "altav-remmgt", { NULL }, 2456, "tcp" },
+ { "altav-remmgt", { NULL }, 2456, "udp" },
+ { "rapido-ip", { NULL }, 2457, "tcp" },
+ { "rapido-ip", { NULL }, 2457, "udp" },
+ { "griffin", { NULL }, 2458, "tcp" },
+ { "griffin", { NULL }, 2458, "udp" },
+ { "community", { NULL }, 2459, "tcp" },
+ { "community", { NULL }, 2459, "udp" },
+ { "ms-theater", { NULL }, 2460, "tcp" },
+ { "ms-theater", { NULL }, 2460, "udp" },
+ { "qadmifoper", { NULL }, 2461, "tcp" },
+ { "qadmifoper", { NULL }, 2461, "udp" },
+ { "qadmifevent", { NULL }, 2462, "tcp" },
+ { "qadmifevent", { NULL }, 2462, "udp" },
+ { "lsi-raid-mgmt", { NULL }, 2463, "tcp" },
+ { "lsi-raid-mgmt", { NULL }, 2463, "udp" },
+ { "direcpc-si", { NULL }, 2464, "tcp" },
+ { "direcpc-si", { NULL }, 2464, "udp" },
+ { "lbm", { NULL }, 2465, "tcp" },
+ { "lbm", { NULL }, 2465, "udp" },
+ { "lbf", { NULL }, 2466, "tcp" },
+ { "lbf", { NULL }, 2466, "udp" },
+ { "high-criteria", { NULL }, 2467, "tcp" },
+ { "high-criteria", { NULL }, 2467, "udp" },
+ { "qip-msgd", { NULL }, 2468, "tcp" },
+ { "qip-msgd", { NULL }, 2468, "udp" },
+ { "mti-tcs-comm", { NULL }, 2469, "tcp" },
+ { "mti-tcs-comm", { NULL }, 2469, "udp" },
+ { "taskman-port", { NULL }, 2470, "tcp" },
+ { "taskman-port", { NULL }, 2470, "udp" },
+ { "seaodbc", { NULL }, 2471, "tcp" },
+ { "seaodbc", { NULL }, 2471, "udp" },
+ { "c3", { NULL }, 2472, "tcp" },
+ { "c3", { NULL }, 2472, "udp" },
+ { "aker-cdp", { NULL }, 2473, "tcp" },
+ { "aker-cdp", { NULL }, 2473, "udp" },
+ { "vitalanalysis", { NULL }, 2474, "tcp" },
+ { "vitalanalysis", { NULL }, 2474, "udp" },
+ { "ace-server", { NULL }, 2475, "tcp" },
+ { "ace-server", { NULL }, 2475, "udp" },
+ { "ace-svr-prop", { NULL }, 2476, "tcp" },
+ { "ace-svr-prop", { NULL }, 2476, "udp" },
+ { "ssm-cvs", { NULL }, 2477, "tcp" },
+ { "ssm-cvs", { NULL }, 2477, "udp" },
+ { "ssm-cssps", { NULL }, 2478, "tcp" },
+ { "ssm-cssps", { NULL }, 2478, "udp" },
+ { "ssm-els", { NULL }, 2479, "tcp" },
+ { "ssm-els", { NULL }, 2479, "udp" },
+ { "powerexchange", { NULL }, 2480, "tcp" },
+ { "powerexchange", { NULL }, 2480, "udp" },
+ { "giop", { NULL }, 2481, "tcp" },
+ { "giop", { NULL }, 2481, "udp" },
+ { "giop-ssl", { NULL }, 2482, "tcp" },
+ { "giop-ssl", { NULL }, 2482, "udp" },
+ { "ttc", { NULL }, 2483, "tcp" },
+ { "ttc", { NULL }, 2483, "udp" },
+ { "ttc-ssl", { NULL }, 2484, "tcp" },
+ { "ttc-ssl", { NULL }, 2484, "udp" },
+ { "netobjects1", { NULL }, 2485, "tcp" },
+ { "netobjects1", { NULL }, 2485, "udp" },
+ { "netobjects2", { NULL }, 2486, "tcp" },
+ { "netobjects2", { NULL }, 2486, "udp" },
+ { "pns", { NULL }, 2487, "tcp" },
+ { "pns", { NULL }, 2487, "udp" },
+ { "moy-corp", { NULL }, 2488, "tcp" },
+ { "moy-corp", { NULL }, 2488, "udp" },
+ { "tsilb", { NULL }, 2489, "tcp" },
+ { "tsilb", { NULL }, 2489, "udp" },
+ { "qip-qdhcp", { NULL }, 2490, "tcp" },
+ { "qip-qdhcp", { NULL }, 2490, "udp" },
+ { "conclave-cpp", { NULL }, 2491, "tcp" },
+ { "conclave-cpp", { NULL }, 2491, "udp" },
+ { "groove", { NULL }, 2492, "tcp" },
+ { "groove", { NULL }, 2492, "udp" },
+ { "talarian-mqs", { NULL }, 2493, "tcp" },
+ { "talarian-mqs", { NULL }, 2493, "udp" },
+ { "bmc-ar", { NULL }, 2494, "tcp" },
+ { "bmc-ar", { NULL }, 2494, "udp" },
+ { "fast-rem-serv", { NULL }, 2495, "tcp" },
+ { "fast-rem-serv", { NULL }, 2495, "udp" },
+ { "dirgis", { NULL }, 2496, "tcp" },
+ { "dirgis", { NULL }, 2496, "udp" },
+ { "quaddb", { NULL }, 2497, "tcp" },
+ { "quaddb", { NULL }, 2497, "udp" },
+ { "odn-castraq", { NULL }, 2498, "tcp" },
+ { "odn-castraq", { NULL }, 2498, "udp" },
+ { "unicontrol", { NULL }, 2499, "tcp" },
+ { "unicontrol", { NULL }, 2499, "udp" },
+ { "rtsserv", { NULL }, 2500, "tcp" },
+ { "rtsserv", { NULL }, 2500, "udp" },
+ { "rtsclient", { NULL }, 2501, "tcp" },
+ { "rtsclient", { NULL }, 2501, "udp" },
+ { "kentrox-prot", { NULL }, 2502, "tcp" },
+ { "kentrox-prot", { NULL }, 2502, "udp" },
+ { "nms-dpnss", { NULL }, 2503, "tcp" },
+ { "nms-dpnss", { NULL }, 2503, "udp" },
+ { "wlbs", { NULL }, 2504, "tcp" },
+ { "wlbs", { NULL }, 2504, "udp" },
+ { "ppcontrol", { NULL }, 2505, "tcp" },
+ { "ppcontrol", { NULL }, 2505, "udp" },
+ { "jbroker", { NULL }, 2506, "tcp" },
+ { "jbroker", { NULL }, 2506, "udp" },
+ { "spock", { NULL }, 2507, "tcp" },
+ { "spock", { NULL }, 2507, "udp" },
+ { "jdatastore", { NULL }, 2508, "tcp" },
+ { "jdatastore", { NULL }, 2508, "udp" },
+ { "fjmpss", { NULL }, 2509, "tcp" },
+ { "fjmpss", { NULL }, 2509, "udp" },
+ { "fjappmgrbulk", { NULL }, 2510, "tcp" },
+ { "fjappmgrbulk", { NULL }, 2510, "udp" },
+ { "metastorm", { NULL }, 2511, "tcp" },
+ { "metastorm", { NULL }, 2511, "udp" },
+ { "citrixima", { NULL }, 2512, "tcp" },
+ { "citrixima", { NULL }, 2512, "udp" },
+ { "citrixadmin", { NULL }, 2513, "tcp" },
+ { "citrixadmin", { NULL }, 2513, "udp" },
+ { "facsys-ntp", { NULL }, 2514, "tcp" },
+ { "facsys-ntp", { NULL }, 2514, "udp" },
+ { "facsys-router", { NULL }, 2515, "tcp" },
+ { "facsys-router", { NULL }, 2515, "udp" },
+ { "maincontrol", { NULL }, 2516, "tcp" },
+ { "maincontrol", { NULL }, 2516, "udp" },
+ { "call-sig-trans", { NULL }, 2517, "tcp" },
+ { "call-sig-trans", { NULL }, 2517, "udp" },
+ { "willy", { NULL }, 2518, "tcp" },
+ { "willy", { NULL }, 2518, "udp" },
+ { "globmsgsvc", { NULL }, 2519, "tcp" },
+ { "globmsgsvc", { NULL }, 2519, "udp" },
+ { "pvsw", { NULL }, 2520, "tcp" },
+ { "pvsw", { NULL }, 2520, "udp" },
+ { "adaptecmgr", { NULL }, 2521, "tcp" },
+ { "adaptecmgr", { NULL }, 2521, "udp" },
+ { "windb", { NULL }, 2522, "tcp" },
+ { "windb", { NULL }, 2522, "udp" },
+ { "qke-llc-v3", { NULL }, 2523, "tcp" },
+ { "qke-llc-v3", { NULL }, 2523, "udp" },
+ { "optiwave-lm", { NULL }, 2524, "tcp" },
+ { "optiwave-lm", { NULL }, 2524, "udp" },
+ { "ms-v-worlds", { NULL }, 2525, "tcp" },
+ { "ms-v-worlds", { NULL }, 2525, "udp" },
+ { "ema-sent-lm", { NULL }, 2526, "tcp" },
+ { "ema-sent-lm", { NULL }, 2526, "udp" },
+ { "iqserver", { NULL }, 2527, "tcp" },
+ { "iqserver", { NULL }, 2527, "udp" },
+ { "ncr_ccl", { NULL }, 2528, "tcp" },
+ { "ncr_ccl", { NULL }, 2528, "udp" },
+ { "utsftp", { NULL }, 2529, "tcp" },
+ { "utsftp", { NULL }, 2529, "udp" },
+ { "vrcommerce", { NULL }, 2530, "tcp" },
+ { "vrcommerce", { NULL }, 2530, "udp" },
+ { "ito-e-gui", { NULL }, 2531, "tcp" },
+ { "ito-e-gui", { NULL }, 2531, "udp" },
+ { "ovtopmd", { NULL }, 2532, "tcp" },
+ { "ovtopmd", { NULL }, 2532, "udp" },
+ { "snifferserver", { NULL }, 2533, "tcp" },
+ { "snifferserver", { NULL }, 2533, "udp" },
+ { "combox-web-acc", { NULL }, 2534, "tcp" },
+ { "combox-web-acc", { NULL }, 2534, "udp" },
+ { "madcap", { NULL }, 2535, "tcp" },
+ { "madcap", { NULL }, 2535, "udp" },
+ { "btpp2audctr1", { NULL }, 2536, "tcp" },
+ { "btpp2audctr1", { NULL }, 2536, "udp" },
+ { "upgrade", { NULL }, 2537, "tcp" },
+ { "upgrade", { NULL }, 2537, "udp" },
+ { "vnwk-prapi", { NULL }, 2538, "tcp" },
+ { "vnwk-prapi", { NULL }, 2538, "udp" },
+ { "vsiadmin", { NULL }, 2539, "tcp" },
+ { "vsiadmin", { NULL }, 2539, "udp" },
+ { "lonworks", { NULL }, 2540, "tcp" },
+ { "lonworks", { NULL }, 2540, "udp" },
+ { "lonworks2", { NULL }, 2541, "tcp" },
+ { "lonworks2", { NULL }, 2541, "udp" },
+ { "udrawgraph", { NULL }, 2542, "tcp" },
+ { "udrawgraph", { NULL }, 2542, "udp" },
+ { "reftek", { NULL }, 2543, "tcp" },
+ { "reftek", { NULL }, 2543, "udp" },
+ { "novell-zen", { NULL }, 2544, "tcp" },
+ { "novell-zen", { NULL }, 2544, "udp" },
+ { "sis-emt", { NULL }, 2545, "tcp" },
+ { "sis-emt", { NULL }, 2545, "udp" },
+ { "vytalvaultbrtp", { NULL }, 2546, "tcp" },
+ { "vytalvaultbrtp", { NULL }, 2546, "udp" },
+ { "vytalvaultvsmp", { NULL }, 2547, "tcp" },
+ { "vytalvaultvsmp", { NULL }, 2547, "udp" },
+ { "vytalvaultpipe", { NULL }, 2548, "tcp" },
+ { "vytalvaultpipe", { NULL }, 2548, "udp" },
+ { "ipass", { NULL }, 2549, "tcp" },
+ { "ipass", { NULL }, 2549, "udp" },
+ { "ads", { NULL }, 2550, "tcp" },
+ { "ads", { NULL }, 2550, "udp" },
+ { "isg-uda-server", { NULL }, 2551, "tcp" },
+ { "isg-uda-server", { NULL }, 2551, "udp" },
+ { "call-logging", { NULL }, 2552, "tcp" },
+ { "call-logging", { NULL }, 2552, "udp" },
+ { "efidiningport", { NULL }, 2553, "tcp" },
+ { "efidiningport", { NULL }, 2553, "udp" },
+ { "vcnet-link-v10", { NULL }, 2554, "tcp" },
+ { "vcnet-link-v10", { NULL }, 2554, "udp" },
+ { "compaq-wcp", { NULL }, 2555, "tcp" },
+ { "compaq-wcp", { NULL }, 2555, "udp" },
+ { "nicetec-nmsvc", { NULL }, 2556, "tcp" },
+ { "nicetec-nmsvc", { NULL }, 2556, "udp" },
+ { "nicetec-mgmt", { NULL }, 2557, "tcp" },
+ { "nicetec-mgmt", { NULL }, 2557, "udp" },
+ { "pclemultimedia", { NULL }, 2558, "tcp" },
+ { "pclemultimedia", { NULL }, 2558, "udp" },
+ { "lstp", { NULL }, 2559, "tcp" },
+ { "lstp", { NULL }, 2559, "udp" },
+ { "labrat", { NULL }, 2560, "tcp" },
+ { "labrat", { NULL }, 2560, "udp" },
+ { "mosaixcc", { NULL }, 2561, "tcp" },
+ { "mosaixcc", { NULL }, 2561, "udp" },
+ { "delibo", { NULL }, 2562, "tcp" },
+ { "delibo", { NULL }, 2562, "udp" },
+ { "cti-redwood", { NULL }, 2563, "tcp" },
+ { "cti-redwood", { NULL }, 2563, "udp" },
+ { "hp-3000-telnet", { NULL }, 2564, "tcp" },
+ { "coord-svr", { NULL }, 2565, "tcp" },
+ { "coord-svr", { NULL }, 2565, "udp" },
+ { "pcs-pcw", { NULL }, 2566, "tcp" },
+ { "pcs-pcw", { NULL }, 2566, "udp" },
+ { "clp", { NULL }, 2567, "tcp" },
+ { "clp", { NULL }, 2567, "udp" },
+ { "spamtrap", { NULL }, 2568, "tcp" },
+ { "spamtrap", { NULL }, 2568, "udp" },
+ { "sonuscallsig", { NULL }, 2569, "tcp" },
+ { "sonuscallsig", { NULL }, 2569, "udp" },
+ { "hs-port", { NULL }, 2570, "tcp" },
+ { "hs-port", { NULL }, 2570, "udp" },
+ { "cecsvc", { NULL }, 2571, "tcp" },
+ { "cecsvc", { NULL }, 2571, "udp" },
+ { "ibp", { NULL }, 2572, "tcp" },
+ { "ibp", { NULL }, 2572, "udp" },
+ { "trustestablish", { NULL }, 2573, "tcp" },
+ { "trustestablish", { NULL }, 2573, "udp" },
+ { "blockade-bpsp", { NULL }, 2574, "tcp" },
+ { "blockade-bpsp", { NULL }, 2574, "udp" },
+ { "hl7", { NULL }, 2575, "tcp" },
+ { "hl7", { NULL }, 2575, "udp" },
+ { "tclprodebugger", { NULL }, 2576, "tcp" },
+ { "tclprodebugger", { NULL }, 2576, "udp" },
+ { "scipticslsrvr", { NULL }, 2577, "tcp" },
+ { "scipticslsrvr", { NULL }, 2577, "udp" },
+ { "rvs-isdn-dcp", { NULL }, 2578, "tcp" },
+ { "rvs-isdn-dcp", { NULL }, 2578, "udp" },
+ { "mpfoncl", { NULL }, 2579, "tcp" },
+ { "mpfoncl", { NULL }, 2579, "udp" },
+ { "tributary", { NULL }, 2580, "tcp" },
+ { "tributary", { NULL }, 2580, "udp" },
+ { "argis-te", { NULL }, 2581, "tcp" },
+ { "argis-te", { NULL }, 2581, "udp" },
+ { "argis-ds", { NULL }, 2582, "tcp" },
+ { "argis-ds", { NULL }, 2582, "udp" },
+ { "mon", { NULL }, 2583, "tcp" },
+ { "mon", { NULL }, 2583, "udp" },
+ { "cyaserv", { NULL }, 2584, "tcp" },
+ { "cyaserv", { NULL }, 2584, "udp" },
+ { "netx-server", { NULL }, 2585, "tcp" },
+ { "netx-server", { NULL }, 2585, "udp" },
+ { "netx-agent", { NULL }, 2586, "tcp" },
+ { "netx-agent", { NULL }, 2586, "udp" },
+ { "masc", { NULL }, 2587, "tcp" },
+ { "masc", { NULL }, 2587, "udp" },
+ { "privilege", { NULL }, 2588, "tcp" },
+ { "privilege", { NULL }, 2588, "udp" },
+ { "quartus-tcl", { NULL }, 2589, "tcp" },
+ { "quartus-tcl", { NULL }, 2589, "udp" },
+ { "idotdist", { NULL }, 2590, "tcp" },
+ { "idotdist", { NULL }, 2590, "udp" },
+ { "maytagshuffle", { NULL }, 2591, "tcp" },
+ { "maytagshuffle", { NULL }, 2591, "udp" },
+ { "netrek", { NULL }, 2592, "tcp" },
+ { "netrek", { NULL }, 2592, "udp" },
+ { "mns-mail", { NULL }, 2593, "tcp" },
+ { "mns-mail", { NULL }, 2593, "udp" },
+ { "dts", { NULL }, 2594, "tcp" },
+ { "dts", { NULL }, 2594, "udp" },
+ { "worldfusion1", { NULL }, 2595, "tcp" },
+ { "worldfusion1", { NULL }, 2595, "udp" },
+ { "worldfusion2", { NULL }, 2596, "tcp" },
+ { "worldfusion2", { NULL }, 2596, "udp" },
+ { "homesteadglory", { NULL }, 2597, "tcp" },
+ { "homesteadglory", { NULL }, 2597, "udp" },
+ { "citriximaclient", { NULL }, 2598, "tcp" },
+ { "citriximaclient", { NULL }, 2598, "udp" },
+ { "snapd", { NULL }, 2599, "tcp" },
+ { "snapd", { NULL }, 2599, "udp" },
+ { "hpstgmgr", { NULL }, 2600, "tcp" },
+ { "hpstgmgr", { NULL }, 2600, "udp" },
+ { "discp-client", { NULL }, 2601, "tcp" },
+ { "discp-client", { NULL }, 2601, "udp" },
+ { "discp-server", { NULL }, 2602, "tcp" },
+ { "discp-server", { NULL }, 2602, "udp" },
+ { "servicemeter", { NULL }, 2603, "tcp" },
+ { "servicemeter", { NULL }, 2603, "udp" },
+ { "nsc-ccs", { NULL }, 2604, "tcp" },
+ { "nsc-ccs", { NULL }, 2604, "udp" },
+ { "nsc-posa", { NULL }, 2605, "tcp" },
+ { "nsc-posa", { NULL }, 2605, "udp" },
+ { "netmon", { NULL }, 2606, "tcp" },
+ { "netmon", { NULL }, 2606, "udp" },
+ { "connection", { NULL }, 2607, "tcp" },
+ { "connection", { NULL }, 2607, "udp" },
+ { "wag-service", { NULL }, 2608, "tcp" },
+ { "wag-service", { NULL }, 2608, "udp" },
+ { "system-monitor", { NULL }, 2609, "tcp" },
+ { "system-monitor", { NULL }, 2609, "udp" },
+ { "versa-tek", { NULL }, 2610, "tcp" },
+ { "versa-tek", { NULL }, 2610, "udp" },
+ { "lionhead", { NULL }, 2611, "tcp" },
+ { "lionhead", { NULL }, 2611, "udp" },
+ { "qpasa-agent", { NULL }, 2612, "tcp" },
+ { "qpasa-agent", { NULL }, 2612, "udp" },
+ { "smntubootstrap", { NULL }, 2613, "tcp" },
+ { "smntubootstrap", { NULL }, 2613, "udp" },
+ { "neveroffline", { NULL }, 2614, "tcp" },
+ { "neveroffline", { NULL }, 2614, "udp" },
+ { "firepower", { NULL }, 2615, "tcp" },
+ { "firepower", { NULL }, 2615, "udp" },
+ { "appswitch-emp", { NULL }, 2616, "tcp" },
+ { "appswitch-emp", { NULL }, 2616, "udp" },
+ { "cmadmin", { NULL }, 2617, "tcp" },
+ { "cmadmin", { NULL }, 2617, "udp" },
+ { "priority-e-com", { NULL }, 2618, "tcp" },
+ { "priority-e-com", { NULL }, 2618, "udp" },
+ { "bruce", { NULL }, 2619, "tcp" },
+ { "bruce", { NULL }, 2619, "udp" },
+ { "lpsrecommender", { NULL }, 2620, "tcp" },
+ { "lpsrecommender", { NULL }, 2620, "udp" },
+ { "miles-apart", { NULL }, 2621, "tcp" },
+ { "miles-apart", { NULL }, 2621, "udp" },
+ { "metricadbc", { NULL }, 2622, "tcp" },
+ { "metricadbc", { NULL }, 2622, "udp" },
+ { "lmdp", { NULL }, 2623, "tcp" },
+ { "lmdp", { NULL }, 2623, "udp" },
+ { "aria", { NULL }, 2624, "tcp" },
+ { "aria", { NULL }, 2624, "udp" },
+ { "blwnkl-port", { NULL }, 2625, "tcp" },
+ { "blwnkl-port", { NULL }, 2625, "udp" },
+ { "gbjd816", { NULL }, 2626, "tcp" },
+ { "gbjd816", { NULL }, 2626, "udp" },
+ { "moshebeeri", { NULL }, 2627, "tcp" },
+ { "moshebeeri", { NULL }, 2627, "udp" },
+ { "dict", { NULL }, 2628, "tcp" },
+ { "dict", { NULL }, 2628, "udp" },
+ { "sitaraserver", { NULL }, 2629, "tcp" },
+ { "sitaraserver", { NULL }, 2629, "udp" },
+ { "sitaramgmt", { NULL }, 2630, "tcp" },
+ { "sitaramgmt", { NULL }, 2630, "udp" },
+ { "sitaradir", { NULL }, 2631, "tcp" },
+ { "sitaradir", { NULL }, 2631, "udp" },
+ { "irdg-post", { NULL }, 2632, "tcp" },
+ { "irdg-post", { NULL }, 2632, "udp" },
+ { "interintelli", { NULL }, 2633, "tcp" },
+ { "interintelli", { NULL }, 2633, "udp" },
+ { "pk-electronics", { NULL }, 2634, "tcp" },
+ { "pk-electronics", { NULL }, 2634, "udp" },
+ { "backburner", { NULL }, 2635, "tcp" },
+ { "backburner", { NULL }, 2635, "udp" },
+ { "solve", { NULL }, 2636, "tcp" },
+ { "solve", { NULL }, 2636, "udp" },
+ { "imdocsvc", { NULL }, 2637, "tcp" },
+ { "imdocsvc", { NULL }, 2637, "udp" },
+ { "sybaseanywhere", { NULL }, 2638, "tcp" },
+ { "sybaseanywhere", { NULL }, 2638, "udp" },
+ { "aminet", { NULL }, 2639, "tcp" },
+ { "aminet", { NULL }, 2639, "udp" },
+ { "sai_sentlm", { NULL }, 2640, "tcp" },
+ { "sai_sentlm", { NULL }, 2640, "udp" },
+ { "hdl-srv", { NULL }, 2641, "tcp" },
+ { "hdl-srv", { NULL }, 2641, "udp" },
+ { "tragic", { NULL }, 2642, "tcp" },
+ { "tragic", { NULL }, 2642, "udp" },
+ { "gte-samp", { NULL }, 2643, "tcp" },
+ { "gte-samp", { NULL }, 2643, "udp" },
+ { "travsoft-ipx-t", { NULL }, 2644, "tcp" },
+ { "travsoft-ipx-t", { NULL }, 2644, "udp" },
+ { "novell-ipx-cmd", { NULL }, 2645, "tcp" },
+ { "novell-ipx-cmd", { NULL }, 2645, "udp" },
+ { "and-lm", { NULL }, 2646, "tcp" },
+ { "and-lm", { NULL }, 2646, "udp" },
+ { "syncserver", { NULL }, 2647, "tcp" },
+ { "syncserver", { NULL }, 2647, "udp" },
+ { "upsnotifyprot", { NULL }, 2648, "tcp" },
+ { "upsnotifyprot", { NULL }, 2648, "udp" },
+ { "vpsipport", { NULL }, 2649, "tcp" },
+ { "vpsipport", { NULL }, 2649, "udp" },
+ { "eristwoguns", { NULL }, 2650, "tcp" },
+ { "eristwoguns", { NULL }, 2650, "udp" },
+ { "ebinsite", { NULL }, 2651, "tcp" },
+ { "ebinsite", { NULL }, 2651, "udp" },
+ { "interpathpanel", { NULL }, 2652, "tcp" },
+ { "interpathpanel", { NULL }, 2652, "udp" },
+ { "sonus", { NULL }, 2653, "tcp" },
+ { "sonus", { NULL }, 2653, "udp" },
+ { "corel_vncadmin", { NULL }, 2654, "tcp" },
+ { "corel_vncadmin", { NULL }, 2654, "udp" },
+ { "unglue", { NULL }, 2655, "tcp" },
+ { "unglue", { NULL }, 2655, "udp" },
+ { "kana", { NULL }, 2656, "tcp" },
+ { "kana", { NULL }, 2656, "udp" },
+ { "sns-dispatcher", { NULL }, 2657, "tcp" },
+ { "sns-dispatcher", { NULL }, 2657, "udp" },
+ { "sns-admin", { NULL }, 2658, "tcp" },
+ { "sns-admin", { NULL }, 2658, "udp" },
+ { "sns-query", { NULL }, 2659, "tcp" },
+ { "sns-query", { NULL }, 2659, "udp" },
+ { "gcmonitor", { NULL }, 2660, "tcp" },
+ { "gcmonitor", { NULL }, 2660, "udp" },
+ { "olhost", { NULL }, 2661, "tcp" },
+ { "olhost", { NULL }, 2661, "udp" },
+ { "bintec-capi", { NULL }, 2662, "tcp" },
+ { "bintec-capi", { NULL }, 2662, "udp" },
+ { "bintec-tapi", { NULL }, 2663, "tcp" },
+ { "bintec-tapi", { NULL }, 2663, "udp" },
+ { "patrol-mq-gm", { NULL }, 2664, "tcp" },
+ { "patrol-mq-gm", { NULL }, 2664, "udp" },
+ { "patrol-mq-nm", { NULL }, 2665, "tcp" },
+ { "patrol-mq-nm", { NULL }, 2665, "udp" },
+ { "extensis", { NULL }, 2666, "tcp" },
+ { "extensis", { NULL }, 2666, "udp" },
+ { "alarm-clock-s", { NULL }, 2667, "tcp" },
+ { "alarm-clock-s", { NULL }, 2667, "udp" },
+ { "alarm-clock-c", { NULL }, 2668, "tcp" },
+ { "alarm-clock-c", { NULL }, 2668, "udp" },
+ { "toad", { NULL }, 2669, "tcp" },
+ { "toad", { NULL }, 2669, "udp" },
+ { "tve-announce", { NULL }, 2670, "tcp" },
+ { "tve-announce", { NULL }, 2670, "udp" },
+ { "newlixreg", { NULL }, 2671, "tcp" },
+ { "newlixreg", { NULL }, 2671, "udp" },
+ { "nhserver", { NULL }, 2672, "tcp" },
+ { "nhserver", { NULL }, 2672, "udp" },
+ { "firstcall42", { NULL }, 2673, "tcp" },
+ { "firstcall42", { NULL }, 2673, "udp" },
+ { "ewnn", { NULL }, 2674, "tcp" },
+ { "ewnn", { NULL }, 2674, "udp" },
+ { "ttc-etap", { NULL }, 2675, "tcp" },
+ { "ttc-etap", { NULL }, 2675, "udp" },
+ { "simslink", { NULL }, 2676, "tcp" },
+ { "simslink", { NULL }, 2676, "udp" },
+ { "gadgetgate1way", { NULL }, 2677, "tcp" },
+ { "gadgetgate1way", { NULL }, 2677, "udp" },
+ { "gadgetgate2way", { NULL }, 2678, "tcp" },
+ { "gadgetgate2way", { NULL }, 2678, "udp" },
+ { "syncserverssl", { NULL }, 2679, "tcp" },
+ { "syncserverssl", { NULL }, 2679, "udp" },
+ { "pxc-sapxom", { NULL }, 2680, "tcp" },
+ { "pxc-sapxom", { NULL }, 2680, "udp" },
+ { "mpnjsomb", { NULL }, 2681, "tcp" },
+ { "mpnjsomb", { NULL }, 2681, "udp" },
+ { "ncdloadbalance", { NULL }, 2683, "tcp" },
+ { "ncdloadbalance", { NULL }, 2683, "udp" },
+ { "mpnjsosv", { NULL }, 2684, "tcp" },
+ { "mpnjsosv", { NULL }, 2684, "udp" },
+ { "mpnjsocl", { NULL }, 2685, "tcp" },
+ { "mpnjsocl", { NULL }, 2685, "udp" },
+ { "mpnjsomg", { NULL }, 2686, "tcp" },
+ { "mpnjsomg", { NULL }, 2686, "udp" },
+ { "pq-lic-mgmt", { NULL }, 2687, "tcp" },
+ { "pq-lic-mgmt", { NULL }, 2687, "udp" },
+ { "md-cg-http", { NULL }, 2688, "tcp" },
+ { "md-cg-http", { NULL }, 2688, "udp" },
+ { "fastlynx", { NULL }, 2689, "tcp" },
+ { "fastlynx", { NULL }, 2689, "udp" },
+ { "hp-nnm-data", { NULL }, 2690, "tcp" },
+ { "hp-nnm-data", { NULL }, 2690, "udp" },
+ { "itinternet", { NULL }, 2691, "tcp" },
+ { "itinternet", { NULL }, 2691, "udp" },
+ { "admins-lms", { NULL }, 2692, "tcp" },
+ { "admins-lms", { NULL }, 2692, "udp" },
+ { "pwrsevent", { NULL }, 2694, "tcp" },
+ { "pwrsevent", { NULL }, 2694, "udp" },
+ { "vspread", { NULL }, 2695, "tcp" },
+ { "vspread", { NULL }, 2695, "udp" },
+ { "unifyadmin", { NULL }, 2696, "tcp" },
+ { "unifyadmin", { NULL }, 2696, "udp" },
+ { "oce-snmp-trap", { NULL }, 2697, "tcp" },
+ { "oce-snmp-trap", { NULL }, 2697, "udp" },
+ { "mck-ivpip", { NULL }, 2698, "tcp" },
+ { "mck-ivpip", { NULL }, 2698, "udp" },
+ { "csoft-plusclnt", { NULL }, 2699, "tcp" },
+ { "csoft-plusclnt", { NULL }, 2699, "udp" },
+ { "tqdata", { NULL }, 2700, "tcp" },
+ { "tqdata", { NULL }, 2700, "udp" },
+ { "sms-rcinfo", { NULL }, 2701, "tcp" },
+ { "sms-rcinfo", { NULL }, 2701, "udp" },
+ { "sms-xfer", { NULL }, 2702, "tcp" },
+ { "sms-xfer", { NULL }, 2702, "udp" },
+ { "sms-chat", { NULL }, 2703, "tcp" },
+ { "sms-chat", { NULL }, 2703, "udp" },
+ { "sms-remctrl", { NULL }, 2704, "tcp" },
+ { "sms-remctrl", { NULL }, 2704, "udp" },
+ { "sds-admin", { NULL }, 2705, "tcp" },
+ { "sds-admin", { NULL }, 2705, "udp" },
+ { "ncdmirroring", { NULL }, 2706, "tcp" },
+ { "ncdmirroring", { NULL }, 2706, "udp" },
+ { "emcsymapiport", { NULL }, 2707, "tcp" },
+ { "emcsymapiport", { NULL }, 2707, "udp" },
+ { "banyan-net", { NULL }, 2708, "tcp" },
+ { "banyan-net", { NULL }, 2708, "udp" },
+ { "supermon", { NULL }, 2709, "tcp" },
+ { "supermon", { NULL }, 2709, "udp" },
+ { "sso-service", { NULL }, 2710, "tcp" },
+ { "sso-service", { NULL }, 2710, "udp" },
+ { "sso-control", { NULL }, 2711, "tcp" },
+ { "sso-control", { NULL }, 2711, "udp" },
+ { "aocp", { NULL }, 2712, "tcp" },
+ { "aocp", { NULL }, 2712, "udp" },
+ { "raventbs", { NULL }, 2713, "tcp" },
+ { "raventbs", { NULL }, 2713, "udp" },
+ { "raventdm", { NULL }, 2714, "tcp" },
+ { "raventdm", { NULL }, 2714, "udp" },
+ { "hpstgmgr2", { NULL }, 2715, "tcp" },
+ { "hpstgmgr2", { NULL }, 2715, "udp" },
+ { "inova-ip-disco", { NULL }, 2716, "tcp" },
+ { "inova-ip-disco", { NULL }, 2716, "udp" },
+ { "pn-requester", { NULL }, 2717, "tcp" },
+ { "pn-requester", { NULL }, 2717, "udp" },
+ { "pn-requester2", { NULL }, 2718, "tcp" },
+ { "pn-requester2", { NULL }, 2718, "udp" },
+ { "scan-change", { NULL }, 2719, "tcp" },
+ { "scan-change", { NULL }, 2719, "udp" },
+ { "wkars", { NULL }, 2720, "tcp" },
+ { "wkars", { NULL }, 2720, "udp" },
+ { "smart-diagnose", { NULL }, 2721, "tcp" },
+ { "smart-diagnose", { NULL }, 2721, "udp" },
+ { "proactivesrvr", { NULL }, 2722, "tcp" },
+ { "proactivesrvr", { NULL }, 2722, "udp" },
+ { "watchdog-nt", { NULL }, 2723, "tcp" },
+ { "watchdog-nt", { NULL }, 2723, "udp" },
+ { "qotps", { NULL }, 2724, "tcp" },
+ { "qotps", { NULL }, 2724, "udp" },
+ { "msolap-ptp2", { NULL }, 2725, "tcp" },
+ { "msolap-ptp2", { NULL }, 2725, "udp" },
+ { "tams", { NULL }, 2726, "tcp" },
+ { "tams", { NULL }, 2726, "udp" },
+ { "mgcp-callagent", { NULL }, 2727, "tcp" },
+ { "mgcp-callagent", { NULL }, 2727, "udp" },
+ { "sqdr", { NULL }, 2728, "tcp" },
+ { "sqdr", { NULL }, 2728, "udp" },
+ { "tcim-control", { NULL }, 2729, "tcp" },
+ { "tcim-control", { NULL }, 2729, "udp" },
+ { "nec-raidplus", { NULL }, 2730, "tcp" },
+ { "nec-raidplus", { NULL }, 2730, "udp" },
+ { "fyre-messanger", { NULL }, 2731, "tcp" },
+ { "fyre-messanger", { NULL }, 2731, "udp" },
+ { "g5m", { NULL }, 2732, "tcp" },
+ { "g5m", { NULL }, 2732, "udp" },
+ { "signet-ctf", { NULL }, 2733, "tcp" },
+ { "signet-ctf", { NULL }, 2733, "udp" },
+ { "ccs-software", { NULL }, 2734, "tcp" },
+ { "ccs-software", { NULL }, 2734, "udp" },
+ { "netiq-mc", { NULL }, 2735, "tcp" },
+ { "netiq-mc", { NULL }, 2735, "udp" },
+ { "radwiz-nms-srv", { NULL }, 2736, "tcp" },
+ { "radwiz-nms-srv", { NULL }, 2736, "udp" },
+ { "srp-feedback", { NULL }, 2737, "tcp" },
+ { "srp-feedback", { NULL }, 2737, "udp" },
+ { "ndl-tcp-ois-gw", { NULL }, 2738, "tcp" },
+ { "ndl-tcp-ois-gw", { NULL }, 2738, "udp" },
+ { "tn-timing", { NULL }, 2739, "tcp" },
+ { "tn-timing", { NULL }, 2739, "udp" },
+ { "alarm", { NULL }, 2740, "tcp" },
+ { "alarm", { NULL }, 2740, "udp" },
+ { "tsb", { NULL }, 2741, "tcp" },
+ { "tsb", { NULL }, 2741, "udp" },
+ { "tsb2", { NULL }, 2742, "tcp" },
+ { "tsb2", { NULL }, 2742, "udp" },
+ { "murx", { NULL }, 2743, "tcp" },
+ { "murx", { NULL }, 2743, "udp" },
+ { "honyaku", { NULL }, 2744, "tcp" },
+ { "honyaku", { NULL }, 2744, "udp" },
+ { "urbisnet", { NULL }, 2745, "tcp" },
+ { "urbisnet", { NULL }, 2745, "udp" },
+ { "cpudpencap", { NULL }, 2746, "tcp" },
+ { "cpudpencap", { NULL }, 2746, "udp" },
+ { "fjippol-swrly", { NULL }, 2747, "tcp" },
+ { "fjippol-swrly", { NULL }, 2747, "udp" },
+ { "fjippol-polsvr", { NULL }, 2748, "tcp" },
+ { "fjippol-polsvr", { NULL }, 2748, "udp" },
+ { "fjippol-cnsl", { NULL }, 2749, "tcp" },
+ { "fjippol-cnsl", { NULL }, 2749, "udp" },
+ { "fjippol-port1", { NULL }, 2750, "tcp" },
+ { "fjippol-port1", { NULL }, 2750, "udp" },
+ { "fjippol-port2", { NULL }, 2751, "tcp" },
+ { "fjippol-port2", { NULL }, 2751, "udp" },
+ { "rsisysaccess", { NULL }, 2752, "tcp" },
+ { "rsisysaccess", { NULL }, 2752, "udp" },
+ { "de-spot", { NULL }, 2753, "tcp" },
+ { "de-spot", { NULL }, 2753, "udp" },
+ { "apollo-cc", { NULL }, 2754, "tcp" },
+ { "apollo-cc", { NULL }, 2754, "udp" },
+ { "expresspay", { NULL }, 2755, "tcp" },
+ { "expresspay", { NULL }, 2755, "udp" },
+ { "simplement-tie", { NULL }, 2756, "tcp" },
+ { "simplement-tie", { NULL }, 2756, "udp" },
+ { "cnrp", { NULL }, 2757, "tcp" },
+ { "cnrp", { NULL }, 2757, "udp" },
+ { "apollo-status", { NULL }, 2758, "tcp" },
+ { "apollo-status", { NULL }, 2758, "udp" },
+ { "apollo-gms", { NULL }, 2759, "tcp" },
+ { "apollo-gms", { NULL }, 2759, "udp" },
+ { "sabams", { NULL }, 2760, "tcp" },
+ { "sabams", { NULL }, 2760, "udp" },
+ { "dicom-iscl", { NULL }, 2761, "tcp" },
+ { "dicom-iscl", { NULL }, 2761, "udp" },
+ { "dicom-tls", { NULL }, 2762, "tcp" },
+ { "dicom-tls", { NULL }, 2762, "udp" },
+ { "desktop-dna", { NULL }, 2763, "tcp" },
+ { "desktop-dna", { NULL }, 2763, "udp" },
+ { "data-insurance", { NULL }, 2764, "tcp" },
+ { "data-insurance", { NULL }, 2764, "udp" },
+ { "qip-audup", { NULL }, 2765, "tcp" },
+ { "qip-audup", { NULL }, 2765, "udp" },
+ { "compaq-scp", { NULL }, 2766, "tcp" },
+ { "compaq-scp", { NULL }, 2766, "udp" },
+ { "uadtc", { NULL }, 2767, "tcp" },
+ { "uadtc", { NULL }, 2767, "udp" },
+ { "uacs", { NULL }, 2768, "tcp" },
+ { "uacs", { NULL }, 2768, "udp" },
+ { "exce", { NULL }, 2769, "tcp" },
+ { "exce", { NULL }, 2769, "udp" },
+ { "veronica", { NULL }, 2770, "tcp" },
+ { "veronica", { NULL }, 2770, "udp" },
+ { "vergencecm", { NULL }, 2771, "tcp" },
+ { "vergencecm", { NULL }, 2771, "udp" },
+ { "auris", { NULL }, 2772, "tcp" },
+ { "auris", { NULL }, 2772, "udp" },
+ { "rbakcup1", { NULL }, 2773, "tcp" },
+ { "rbakcup1", { NULL }, 2773, "udp" },
+ { "rbakcup2", { NULL }, 2774, "tcp" },
+ { "rbakcup2", { NULL }, 2774, "udp" },
+ { "smpp", { NULL }, 2775, "tcp" },
+ { "smpp", { NULL }, 2775, "udp" },
+ { "ridgeway1", { NULL }, 2776, "tcp" },
+ { "ridgeway1", { NULL }, 2776, "udp" },
+ { "ridgeway2", { NULL }, 2777, "tcp" },
+ { "ridgeway2", { NULL }, 2777, "udp" },
+ { "gwen-sonya", { NULL }, 2778, "tcp" },
+ { "gwen-sonya", { NULL }, 2778, "udp" },
+ { "lbc-sync", { NULL }, 2779, "tcp" },
+ { "lbc-sync", { NULL }, 2779, "udp" },
+ { "lbc-control", { NULL }, 2780, "tcp" },
+ { "lbc-control", { NULL }, 2780, "udp" },
+ { "whosells", { NULL }, 2781, "tcp" },
+ { "whosells", { NULL }, 2781, "udp" },
+ { "everydayrc", { NULL }, 2782, "tcp" },
+ { "everydayrc", { NULL }, 2782, "udp" },
+ { "aises", { NULL }, 2783, "tcp" },
+ { "aises", { NULL }, 2783, "udp" },
+ { "www-dev", { NULL }, 2784, "tcp" },
+ { "www-dev", { NULL }, 2784, "udp" },
+ { "aic-np", { NULL }, 2785, "tcp" },
+ { "aic-np", { NULL }, 2785, "udp" },
+ { "aic-oncrpc", { NULL }, 2786, "tcp" },
+ { "aic-oncrpc", { NULL }, 2786, "udp" },
+ { "piccolo", { NULL }, 2787, "tcp" },
+ { "piccolo", { NULL }, 2787, "udp" },
+ { "fryeserv", { NULL }, 2788, "tcp" },
+ { "fryeserv", { NULL }, 2788, "udp" },
+ { "media-agent", { NULL }, 2789, "tcp" },
+ { "media-agent", { NULL }, 2789, "udp" },
+ { "plgproxy", { NULL }, 2790, "tcp" },
+ { "plgproxy", { NULL }, 2790, "udp" },
+ { "mtport-regist", { NULL }, 2791, "tcp" },
+ { "mtport-regist", { NULL }, 2791, "udp" },
+ { "f5-globalsite", { NULL }, 2792, "tcp" },
+ { "f5-globalsite", { NULL }, 2792, "udp" },
+ { "initlsmsad", { NULL }, 2793, "tcp" },
+ { "initlsmsad", { NULL }, 2793, "udp" },
+ { "livestats", { NULL }, 2795, "tcp" },
+ { "livestats", { NULL }, 2795, "udp" },
+ { "ac-tech", { NULL }, 2796, "tcp" },
+ { "ac-tech", { NULL }, 2796, "udp" },
+ { "esp-encap", { NULL }, 2797, "tcp" },
+ { "esp-encap", { NULL }, 2797, "udp" },
+ { "tmesis-upshot", { NULL }, 2798, "tcp" },
+ { "tmesis-upshot", { NULL }, 2798, "udp" },
+ { "icon-discover", { NULL }, 2799, "tcp" },
+ { "icon-discover", { NULL }, 2799, "udp" },
+ { "acc-raid", { NULL }, 2800, "tcp" },
+ { "acc-raid", { NULL }, 2800, "udp" },
+ { "igcp", { NULL }, 2801, "tcp" },
+ { "igcp", { NULL }, 2801, "udp" },
+ { "veritas-tcp1", { NULL }, 2802, "tcp" },
+ { "veritas-udp1", { NULL }, 2802, "udp" },
+ { "btprjctrl", { NULL }, 2803, "tcp" },
+ { "btprjctrl", { NULL }, 2803, "udp" },
+ { "dvr-esm", { NULL }, 2804, "tcp" },
+ { "dvr-esm", { NULL }, 2804, "udp" },
+ { "wta-wsp-s", { NULL }, 2805, "tcp" },
+ { "wta-wsp-s", { NULL }, 2805, "udp" },
+ { "cspuni", { NULL }, 2806, "tcp" },
+ { "cspuni", { NULL }, 2806, "udp" },
+ { "cspmulti", { NULL }, 2807, "tcp" },
+ { "cspmulti", { NULL }, 2807, "udp" },
+ { "j-lan-p", { NULL }, 2808, "tcp" },
+ { "j-lan-p", { NULL }, 2808, "udp" },
+ { "corbaloc", { NULL }, 2809, "tcp" },
+ { "corbaloc", { NULL }, 2809, "udp" },
+ { "netsteward", { NULL }, 2810, "tcp" },
+ { "netsteward", { NULL }, 2810, "udp" },
+ { "gsiftp", { NULL }, 2811, "tcp" },
+ { "gsiftp", { NULL }, 2811, "udp" },
+ { "atmtcp", { NULL }, 2812, "tcp" },
+ { "atmtcp", { NULL }, 2812, "udp" },
+ { "llm-pass", { NULL }, 2813, "tcp" },
+ { "llm-pass", { NULL }, 2813, "udp" },
+ { "llm-csv", { NULL }, 2814, "tcp" },
+ { "llm-csv", { NULL }, 2814, "udp" },
+ { "lbc-measure", { NULL }, 2815, "tcp" },
+ { "lbc-measure", { NULL }, 2815, "udp" },
+ { "lbc-watchdog", { NULL }, 2816, "tcp" },
+ { "lbc-watchdog", { NULL }, 2816, "udp" },
+ { "nmsigport", { NULL }, 2817, "tcp" },
+ { "nmsigport", { NULL }, 2817, "udp" },
+ { "rmlnk", { NULL }, 2818, "tcp" },
+ { "rmlnk", { NULL }, 2818, "udp" },
+ { "fc-faultnotify", { NULL }, 2819, "tcp" },
+ { "fc-faultnotify", { NULL }, 2819, "udp" },
+ { "univision", { NULL }, 2820, "tcp" },
+ { "univision", { NULL }, 2820, "udp" },
+ { "vrts-at-port", { NULL }, 2821, "tcp" },
+ { "vrts-at-port", { NULL }, 2821, "udp" },
+ { "ka0wuc", { NULL }, 2822, "tcp" },
+ { "ka0wuc", { NULL }, 2822, "udp" },
+ { "cqg-netlan", { NULL }, 2823, "tcp" },
+ { "cqg-netlan", { NULL }, 2823, "udp" },
+ { "cqg-netlan-1", { NULL }, 2824, "tcp" },
+ { "cqg-netlan-1", { NULL }, 2824, "udp" },
+ { "slc-systemlog", { NULL }, 2826, "tcp" },
+ { "slc-systemlog", { NULL }, 2826, "udp" },
+ { "slc-ctrlrloops", { NULL }, 2827, "tcp" },
+ { "slc-ctrlrloops", { NULL }, 2827, "udp" },
+ { "itm-lm", { NULL }, 2828, "tcp" },
+ { "itm-lm", { NULL }, 2828, "udp" },
+ { "silkp1", { NULL }, 2829, "tcp" },
+ { "silkp1", { NULL }, 2829, "udp" },
+ { "silkp2", { NULL }, 2830, "tcp" },
+ { "silkp2", { NULL }, 2830, "udp" },
+ { "silkp3", { NULL }, 2831, "tcp" },
+ { "silkp3", { NULL }, 2831, "udp" },
+ { "silkp4", { NULL }, 2832, "tcp" },
+ { "silkp4", { NULL }, 2832, "udp" },
+ { "glishd", { NULL }, 2833, "tcp" },
+ { "glishd", { NULL }, 2833, "udp" },
+ { "evtp", { NULL }, 2834, "tcp" },
+ { "evtp", { NULL }, 2834, "udp" },
+ { "evtp-data", { NULL }, 2835, "tcp" },
+ { "evtp-data", { NULL }, 2835, "udp" },
+ { "catalyst", { NULL }, 2836, "tcp" },
+ { "catalyst", { NULL }, 2836, "udp" },
+ { "repliweb", { NULL }, 2837, "tcp" },
+ { "repliweb", { NULL }, 2837, "udp" },
+ { "starbot", { NULL }, 2838, "tcp" },
+ { "starbot", { NULL }, 2838, "udp" },
+ { "nmsigport", { NULL }, 2839, "tcp" },
+ { "nmsigport", { NULL }, 2839, "udp" },
+ { "l3-exprt", { NULL }, 2840, "tcp" },
+ { "l3-exprt", { NULL }, 2840, "udp" },
+ { "l3-ranger", { NULL }, 2841, "tcp" },
+ { "l3-ranger", { NULL }, 2841, "udp" },
+ { "l3-hawk", { NULL }, 2842, "tcp" },
+ { "l3-hawk", { NULL }, 2842, "udp" },
+ { "pdnet", { NULL }, 2843, "tcp" },
+ { "pdnet", { NULL }, 2843, "udp" },
+ { "bpcp-poll", { NULL }, 2844, "tcp" },
+ { "bpcp-poll", { NULL }, 2844, "udp" },
+ { "bpcp-trap", { NULL }, 2845, "tcp" },
+ { "bpcp-trap", { NULL }, 2845, "udp" },
+ { "aimpp-hello", { NULL }, 2846, "tcp" },
+ { "aimpp-hello", { NULL }, 2846, "udp" },
+ { "aimpp-port-req", { NULL }, 2847, "tcp" },
+ { "aimpp-port-req", { NULL }, 2847, "udp" },
+ { "amt-blc-port", { NULL }, 2848, "tcp" },
+ { "amt-blc-port", { NULL }, 2848, "udp" },
+ { "fxp", { NULL }, 2849, "tcp" },
+ { "fxp", { NULL }, 2849, "udp" },
+ { "metaconsole", { NULL }, 2850, "tcp" },
+ { "metaconsole", { NULL }, 2850, "udp" },
+ { "webemshttp", { NULL }, 2851, "tcp" },
+ { "webemshttp", { NULL }, 2851, "udp" },
+ { "bears-01", { NULL }, 2852, "tcp" },
+ { "bears-01", { NULL }, 2852, "udp" },
+ { "ispipes", { NULL }, 2853, "tcp" },
+ { "ispipes", { NULL }, 2853, "udp" },
+ { "infomover", { NULL }, 2854, "tcp" },
+ { "infomover", { NULL }, 2854, "udp" },
+ { "msrp", { NULL }, 2855, "tcp" },
+ { "msrp", { NULL }, 2855, "udp" },
+ { "cesdinv", { NULL }, 2856, "tcp" },
+ { "cesdinv", { NULL }, 2856, "udp" },
+ { "simctlp", { NULL }, 2857, "tcp" },
+ { "simctlp", { NULL }, 2857, "udp" },
+ { "ecnp", { NULL }, 2858, "tcp" },
+ { "ecnp", { NULL }, 2858, "udp" },
+ { "activememory", { NULL }, 2859, "tcp" },
+ { "activememory", { NULL }, 2859, "udp" },
+ { "dialpad-voice1", { NULL }, 2860, "tcp" },
+ { "dialpad-voice1", { NULL }, 2860, "udp" },
+ { "dialpad-voice2", { NULL }, 2861, "tcp" },
+ { "dialpad-voice2", { NULL }, 2861, "udp" },
+ { "ttg-protocol", { NULL }, 2862, "tcp" },
+ { "ttg-protocol", { NULL }, 2862, "udp" },
+ { "sonardata", { NULL }, 2863, "tcp" },
+ { "sonardata", { NULL }, 2863, "udp" },
+ { "astromed-main", { NULL }, 2864, "tcp" },
+ { "astromed-main", { NULL }, 2864, "udp" },
+ { "pit-vpn", { NULL }, 2865, "tcp" },
+ { "pit-vpn", { NULL }, 2865, "udp" },
+ { "iwlistener", { NULL }, 2866, "tcp" },
+ { "iwlistener", { NULL }, 2866, "udp" },
+ { "esps-portal", { NULL }, 2867, "tcp" },
+ { "esps-portal", { NULL }, 2867, "udp" },
+ { "npep-messaging", { NULL }, 2868, "tcp" },
+ { "npep-messaging", { NULL }, 2868, "udp" },
+ { "icslap", { NULL }, 2869, "tcp" },
+ { "icslap", { NULL }, 2869, "udp" },
+ { "daishi", { NULL }, 2870, "tcp" },
+ { "daishi", { NULL }, 2870, "udp" },
+ { "msi-selectplay", { NULL }, 2871, "tcp" },
+ { "msi-selectplay", { NULL }, 2871, "udp" },
+ { "radix", { NULL }, 2872, "tcp" },
+ { "radix", { NULL }, 2872, "udp" },
+ { "dxmessagebase1", { NULL }, 2874, "tcp" },
+ { "dxmessagebase1", { NULL }, 2874, "udp" },
+ { "dxmessagebase2", { NULL }, 2875, "tcp" },
+ { "dxmessagebase2", { NULL }, 2875, "udp" },
+ { "sps-tunnel", { NULL }, 2876, "tcp" },
+ { "sps-tunnel", { NULL }, 2876, "udp" },
+ { "bluelance", { NULL }, 2877, "tcp" },
+ { "bluelance", { NULL }, 2877, "udp" },
+ { "aap", { NULL }, 2878, "tcp" },
+ { "aap", { NULL }, 2878, "udp" },
+ { "ucentric-ds", { NULL }, 2879, "tcp" },
+ { "ucentric-ds", { NULL }, 2879, "udp" },
+ { "synapse", { NULL }, 2880, "tcp" },
+ { "synapse", { NULL }, 2880, "udp" },
+ { "ndsp", { NULL }, 2881, "tcp" },
+ { "ndsp", { NULL }, 2881, "udp" },
+ { "ndtp", { NULL }, 2882, "tcp" },
+ { "ndtp", { NULL }, 2882, "udp" },
+ { "ndnp", { NULL }, 2883, "tcp" },
+ { "ndnp", { NULL }, 2883, "udp" },
+ { "flashmsg", { NULL }, 2884, "tcp" },
+ { "flashmsg", { NULL }, 2884, "udp" },
+ { "topflow", { NULL }, 2885, "tcp" },
+ { "topflow", { NULL }, 2885, "udp" },
+ { "responselogic", { NULL }, 2886, "tcp" },
+ { "responselogic", { NULL }, 2886, "udp" },
+ { "aironetddp", { NULL }, 2887, "tcp" },
+ { "aironetddp", { NULL }, 2887, "udp" },
+ { "spcsdlobby", { NULL }, 2888, "tcp" },
+ { "spcsdlobby", { NULL }, 2888, "udp" },
+ { "rsom", { NULL }, 2889, "tcp" },
+ { "rsom", { NULL }, 2889, "udp" },
+ { "cspclmulti", { NULL }, 2890, "tcp" },
+ { "cspclmulti", { NULL }, 2890, "udp" },
+ { "cinegrfx-elmd", { NULL }, 2891, "tcp" },
+ { "cinegrfx-elmd", { NULL }, 2891, "udp" },
+ { "snifferdata", { NULL }, 2892, "tcp" },
+ { "snifferdata", { NULL }, 2892, "udp" },
+ { "vseconnector", { NULL }, 2893, "tcp" },
+ { "vseconnector", { NULL }, 2893, "udp" },
+ { "abacus-remote", { NULL }, 2894, "tcp" },
+ { "abacus-remote", { NULL }, 2894, "udp" },
+ { "natuslink", { NULL }, 2895, "tcp" },
+ { "natuslink", { NULL }, 2895, "udp" },
+ { "ecovisiong6-1", { NULL }, 2896, "tcp" },
+ { "ecovisiong6-1", { NULL }, 2896, "udp" },
+ { "citrix-rtmp", { NULL }, 2897, "tcp" },
+ { "citrix-rtmp", { NULL }, 2897, "udp" },
+ { "appliance-cfg", { NULL }, 2898, "tcp" },
+ { "appliance-cfg", { NULL }, 2898, "udp" },
+ { "powergemplus", { NULL }, 2899, "tcp" },
+ { "powergemplus", { NULL }, 2899, "udp" },
+ { "quicksuite", { NULL }, 2900, "tcp" },
+ { "quicksuite", { NULL }, 2900, "udp" },
+ { "allstorcns", { NULL }, 2901, "tcp" },
+ { "allstorcns", { NULL }, 2901, "udp" },
+ { "netaspi", { NULL }, 2902, "tcp" },
+ { "netaspi", { NULL }, 2902, "udp" },
+ { "suitcase", { NULL }, 2903, "tcp" },
+ { "suitcase", { NULL }, 2903, "udp" },
+ { "m2ua", { NULL }, 2904, "tcp" },
+ { "m2ua", { NULL }, 2904, "udp" },
+ { "m2ua", { NULL }, 2904, "sctp"},
+ { "m3ua", { NULL }, 2905, "tcp" },
+ { "m3ua", { NULL }, 2905, "sctp"},
+ { "caller9", { NULL }, 2906, "tcp" },
+ { "caller9", { NULL }, 2906, "udp" },
+ { "webmethods-b2b", { NULL }, 2907, "tcp" },
+ { "webmethods-b2b", { NULL }, 2907, "udp" },
+ { "mao", { NULL }, 2908, "tcp" },
+ { "mao", { NULL }, 2908, "udp" },
+ { "funk-dialout", { NULL }, 2909, "tcp" },
+ { "funk-dialout", { NULL }, 2909, "udp" },
+ { "tdaccess", { NULL }, 2910, "tcp" },
+ { "tdaccess", { NULL }, 2910, "udp" },
+ { "blockade", { NULL }, 2911, "tcp" },
+ { "blockade", { NULL }, 2911, "udp" },
+ { "epicon", { NULL }, 2912, "tcp" },
+ { "epicon", { NULL }, 2912, "udp" },
+ { "boosterware", { NULL }, 2913, "tcp" },
+ { "boosterware", { NULL }, 2913, "udp" },
+ { "gamelobby", { NULL }, 2914, "tcp" },
+ { "gamelobby", { NULL }, 2914, "udp" },
+ { "tksocket", { NULL }, 2915, "tcp" },
+ { "tksocket", { NULL }, 2915, "udp" },
+ { "elvin_server", { NULL }, 2916, "tcp" },
+ { "elvin_server", { NULL }, 2916, "udp" },
+ { "elvin_client", { NULL }, 2917, "tcp" },
+ { "elvin_client", { NULL }, 2917, "udp" },
+ { "kastenchasepad", { NULL }, 2918, "tcp" },
+ { "kastenchasepad", { NULL }, 2918, "udp" },
+ { "roboer", { NULL }, 2919, "tcp" },
+ { "roboer", { NULL }, 2919, "udp" },
+ { "roboeda", { NULL }, 2920, "tcp" },
+ { "roboeda", { NULL }, 2920, "udp" },
+ { "cesdcdman", { NULL }, 2921, "tcp" },
+ { "cesdcdman", { NULL }, 2921, "udp" },
+ { "cesdcdtrn", { NULL }, 2922, "tcp" },
+ { "cesdcdtrn", { NULL }, 2922, "udp" },
+ { "wta-wsp-wtp-s", { NULL }, 2923, "tcp" },
+ { "wta-wsp-wtp-s", { NULL }, 2923, "udp" },
+ { "precise-vip", { NULL }, 2924, "tcp" },
+ { "precise-vip", { NULL }, 2924, "udp" },
+ { "mobile-file-dl", { NULL }, 2926, "tcp" },
+ { "mobile-file-dl", { NULL }, 2926, "udp" },
+ { "unimobilectrl", { NULL }, 2927, "tcp" },
+ { "unimobilectrl", { NULL }, 2927, "udp" },
+ { "redstone-cpss", { NULL }, 2928, "tcp" },
+ { "redstone-cpss", { NULL }, 2928, "udp" },
+ { "amx-webadmin", { NULL }, 2929, "tcp" },
+ { "amx-webadmin", { NULL }, 2929, "udp" },
+ { "amx-weblinx", { NULL }, 2930, "tcp" },
+ { "amx-weblinx", { NULL }, 2930, "udp" },
+ { "circle-x", { NULL }, 2931, "tcp" },
+ { "circle-x", { NULL }, 2931, "udp" },
+ { "incp", { NULL }, 2932, "tcp" },
+ { "incp", { NULL }, 2932, "udp" },
+ { "4-tieropmgw", { NULL }, 2933, "tcp" },
+ { "4-tieropmgw", { NULL }, 2933, "udp" },
+ { "4-tieropmcli", { NULL }, 2934, "tcp" },
+ { "4-tieropmcli", { NULL }, 2934, "udp" },
+ { "qtp", { NULL }, 2935, "tcp" },
+ { "qtp", { NULL }, 2935, "udp" },
+ { "otpatch", { NULL }, 2936, "tcp" },
+ { "otpatch", { NULL }, 2936, "udp" },
+ { "pnaconsult-lm", { NULL }, 2937, "tcp" },
+ { "pnaconsult-lm", { NULL }, 2937, "udp" },
+ { "sm-pas-1", { NULL }, 2938, "tcp" },
+ { "sm-pas-1", { NULL }, 2938, "udp" },
+ { "sm-pas-2", { NULL }, 2939, "tcp" },
+ { "sm-pas-2", { NULL }, 2939, "udp" },
+ { "sm-pas-3", { NULL }, 2940, "tcp" },
+ { "sm-pas-3", { NULL }, 2940, "udp" },
+ { "sm-pas-4", { NULL }, 2941, "tcp" },
+ { "sm-pas-4", { NULL }, 2941, "udp" },
+ { "sm-pas-5", { NULL }, 2942, "tcp" },
+ { "sm-pas-5", { NULL }, 2942, "udp" },
+ { "ttnrepository", { NULL }, 2943, "tcp" },
+ { "ttnrepository", { NULL }, 2943, "udp" },
+ { "megaco-h248", { NULL }, 2944, "tcp" },
+ { "megaco-h248", { NULL }, 2944, "udp" },
+ { "megaco-h248", { NULL }, 2944, "sctp"},
+ { "h248-binary", { NULL }, 2945, "tcp" },
+ { "h248-binary", { NULL }, 2945, "udp" },
+ { "h248-binary", { NULL }, 2945, "sctp"},
+ { "fjsvmpor", { NULL }, 2946, "tcp" },
+ { "fjsvmpor", { NULL }, 2946, "udp" },
+ { "gpsd", { NULL }, 2947, "tcp" },
+ { "gpsd", { NULL }, 2947, "udp" },
+ { "wap-push", { NULL }, 2948, "tcp" },
+ { "wap-push", { NULL }, 2948, "udp" },
+ { "wap-pushsecure", { NULL }, 2949, "tcp" },
+ { "wap-pushsecure", { NULL }, 2949, "udp" },
+ { "esip", { NULL }, 2950, "tcp" },
+ { "esip", { NULL }, 2950, "udp" },
+ { "ottp", { NULL }, 2951, "tcp" },
+ { "ottp", { NULL }, 2951, "udp" },
+ { "mpfwsas", { NULL }, 2952, "tcp" },
+ { "mpfwsas", { NULL }, 2952, "udp" },
+ { "ovalarmsrv", { NULL }, 2953, "tcp" },
+ { "ovalarmsrv", { NULL }, 2953, "udp" },
+ { "ovalarmsrv-cmd", { NULL }, 2954, "tcp" },
+ { "ovalarmsrv-cmd", { NULL }, 2954, "udp" },
+ { "csnotify", { NULL }, 2955, "tcp" },
+ { "csnotify", { NULL }, 2955, "udp" },
+ { "ovrimosdbman", { NULL }, 2956, "tcp" },
+ { "ovrimosdbman", { NULL }, 2956, "udp" },
+ { "jmact5", { NULL }, 2957, "tcp" },
+ { "jmact5", { NULL }, 2957, "udp" },
+ { "jmact6", { NULL }, 2958, "tcp" },
+ { "jmact6", { NULL }, 2958, "udp" },
+ { "rmopagt", { NULL }, 2959, "tcp" },
+ { "rmopagt", { NULL }, 2959, "udp" },
+ { "dfoxserver", { NULL }, 2960, "tcp" },
+ { "dfoxserver", { NULL }, 2960, "udp" },
+ { "boldsoft-lm", { NULL }, 2961, "tcp" },
+ { "boldsoft-lm", { NULL }, 2961, "udp" },
+ { "iph-policy-cli", { NULL }, 2962, "tcp" },
+ { "iph-policy-cli", { NULL }, 2962, "udp" },
+ { "iph-policy-adm", { NULL }, 2963, "tcp" },
+ { "iph-policy-adm", { NULL }, 2963, "udp" },
+ { "bullant-srap", { NULL }, 2964, "tcp" },
+ { "bullant-srap", { NULL }, 2964, "udp" },
+ { "bullant-rap", { NULL }, 2965, "tcp" },
+ { "bullant-rap", { NULL }, 2965, "udp" },
+ { "idp-infotrieve", { NULL }, 2966, "tcp" },
+ { "idp-infotrieve", { NULL }, 2966, "udp" },
+ { "ssc-agent", { NULL }, 2967, "tcp" },
+ { "ssc-agent", { NULL }, 2967, "udp" },
+ { "enpp", { NULL }, 2968, "tcp" },
+ { "enpp", { NULL }, 2968, "udp" },
+ { "essp", { NULL }, 2969, "tcp" },
+ { "essp", { NULL }, 2969, "udp" },
+ { "index-net", { NULL }, 2970, "tcp" },
+ { "index-net", { NULL }, 2970, "udp" },
+ { "netclip", { NULL }, 2971, "tcp" },
+ { "netclip", { NULL }, 2971, "udp" },
+ { "pmsm-webrctl", { NULL }, 2972, "tcp" },
+ { "pmsm-webrctl", { NULL }, 2972, "udp" },
+ { "svnetworks", { NULL }, 2973, "tcp" },
+ { "svnetworks", { NULL }, 2973, "udp" },
+ { "signal", { NULL }, 2974, "tcp" },
+ { "signal", { NULL }, 2974, "udp" },
+ { "fjmpcm", { NULL }, 2975, "tcp" },
+ { "fjmpcm", { NULL }, 2975, "udp" },
+ { "cns-srv-port", { NULL }, 2976, "tcp" },
+ { "cns-srv-port", { NULL }, 2976, "udp" },
+ { "ttc-etap-ns", { NULL }, 2977, "tcp" },
+ { "ttc-etap-ns", { NULL }, 2977, "udp" },
+ { "ttc-etap-ds", { NULL }, 2978, "tcp" },
+ { "ttc-etap-ds", { NULL }, 2978, "udp" },
+ { "h263-video", { NULL }, 2979, "tcp" },
+ { "h263-video", { NULL }, 2979, "udp" },
+ { "wimd", { NULL }, 2980, "tcp" },
+ { "wimd", { NULL }, 2980, "udp" },
+ { "mylxamport", { NULL }, 2981, "tcp" },
+ { "mylxamport", { NULL }, 2981, "udp" },
+ { "iwb-whiteboard", { NULL }, 2982, "tcp" },
+ { "iwb-whiteboard", { NULL }, 2982, "udp" },
+ { "netplan", { NULL }, 2983, "tcp" },
+ { "netplan", { NULL }, 2983, "udp" },
+ { "hpidsadmin", { NULL }, 2984, "tcp" },
+ { "hpidsadmin", { NULL }, 2984, "udp" },
+ { "hpidsagent", { NULL }, 2985, "tcp" },
+ { "hpidsagent", { NULL }, 2985, "udp" },
+ { "stonefalls", { NULL }, 2986, "tcp" },
+ { "stonefalls", { NULL }, 2986, "udp" },
+ { "identify", { NULL }, 2987, "tcp" },
+ { "identify", { NULL }, 2987, "udp" },
+ { "hippad", { NULL }, 2988, "tcp" },
+ { "hippad", { NULL }, 2988, "udp" },
+ { "zarkov", { NULL }, 2989, "tcp" },
+ { "zarkov", { NULL }, 2989, "udp" },
+ { "boscap", { NULL }, 2990, "tcp" },
+ { "boscap", { NULL }, 2990, "udp" },
+ { "wkstn-mon", { NULL }, 2991, "tcp" },
+ { "wkstn-mon", { NULL }, 2991, "udp" },
+ { "avenyo", { NULL }, 2992, "tcp" },
+ { "avenyo", { NULL }, 2992, "udp" },
+ { "veritas-vis1", { NULL }, 2993, "tcp" },
+ { "veritas-vis1", { NULL }, 2993, "udp" },
+ { "veritas-vis2", { NULL }, 2994, "tcp" },
+ { "veritas-vis2", { NULL }, 2994, "udp" },
+ { "idrs", { NULL }, 2995, "tcp" },
+ { "idrs", { NULL }, 2995, "udp" },
+ { "vsixml", { NULL }, 2996, "tcp" },
+ { "vsixml", { NULL }, 2996, "udp" },
+ { "rebol", { NULL }, 2997, "tcp" },
+ { "rebol", { NULL }, 2997, "udp" },
+ { "realsecure", { NULL }, 2998, "tcp" },
+ { "realsecure", { NULL }, 2998, "udp" },
+ { "remoteware-un", { NULL }, 2999, "tcp" },
+ { "remoteware-un", { NULL }, 2999, "udp" },
+ { "hbci", { NULL }, 3000, "tcp" },
+ { "hbci", { NULL }, 3000, "udp" },
+ { "remoteware-cl", { NULL }, 3000, "tcp" },
+ { "remoteware-cl", { NULL }, 3000, "udp" },
+ { "exlm-agent", { NULL }, 3002, "tcp" },
+ { "exlm-agent", { NULL }, 3002, "udp" },
+ { "remoteware-srv", { NULL }, 3002, "tcp" },
+ { "remoteware-srv", { NULL }, 3002, "udp" },
+ { "cgms", { NULL }, 3003, "tcp" },
+ { "cgms", { NULL }, 3003, "udp" },
+ { "csoftragent", { NULL }, 3004, "tcp" },
+ { "csoftragent", { NULL }, 3004, "udp" },
+ { "geniuslm", { NULL }, 3005, "tcp" },
+ { "geniuslm", { NULL }, 3005, "udp" },
+ { "ii-admin", { NULL }, 3006, "tcp" },
+ { "ii-admin", { NULL }, 3006, "udp" },
+ { "lotusmtap", { NULL }, 3007, "tcp" },
+ { "lotusmtap", { NULL }, 3007, "udp" },
+ { "midnight-tech", { NULL }, 3008, "tcp" },
+ { "midnight-tech", { NULL }, 3008, "udp" },
+ { "pxc-ntfy", { NULL }, 3009, "tcp" },
+ { "pxc-ntfy", { NULL }, 3009, "udp" },
+ { "gw", { NULL }, 3010, "tcp" },
+ { "ping-pong", { NULL }, 3010, "udp" },
+ { "trusted-web", { NULL }, 3011, "tcp" },
+ { "trusted-web", { NULL }, 3011, "udp" },
+ { "twsdss", { NULL }, 3012, "tcp" },
+ { "twsdss", { NULL }, 3012, "udp" },
+ { "gilatskysurfer", { NULL }, 3013, "tcp" },
+ { "gilatskysurfer", { NULL }, 3013, "udp" },
+ { "broker_service", { NULL }, 3014, "tcp" },
+ { "broker_service", { NULL }, 3014, "udp" },
+ { "nati-dstp", { NULL }, 3015, "tcp" },
+ { "nati-dstp", { NULL }, 3015, "udp" },
+ { "notify_srvr", { NULL }, 3016, "tcp" },
+ { "notify_srvr", { NULL }, 3016, "udp" },
+ { "event_listener", { NULL }, 3017, "tcp" },
+ { "event_listener", { NULL }, 3017, "udp" },
+ { "srvc_registry", { NULL }, 3018, "tcp" },
+ { "srvc_registry", { NULL }, 3018, "udp" },
+ { "resource_mgr", { NULL }, 3019, "tcp" },
+ { "resource_mgr", { NULL }, 3019, "udp" },
+ { "cifs", { NULL }, 3020, "tcp" },
+ { "cifs", { NULL }, 3020, "udp" },
+ { "agriserver", { NULL }, 3021, "tcp" },
+ { "agriserver", { NULL }, 3021, "udp" },
+ { "csregagent", { NULL }, 3022, "tcp" },
+ { "csregagent", { NULL }, 3022, "udp" },
+ { "magicnotes", { NULL }, 3023, "tcp" },
+ { "magicnotes", { NULL }, 3023, "udp" },
+ { "nds_sso", { NULL }, 3024, "tcp" },
+ { "nds_sso", { NULL }, 3024, "udp" },
+ { "arepa-raft", { NULL }, 3025, "tcp" },
+ { "arepa-raft", { NULL }, 3025, "udp" },
+ { "agri-gateway", { NULL }, 3026, "tcp" },
+ { "agri-gateway", { NULL }, 3026, "udp" },
+ { "LiebDevMgmt_C", { NULL }, 3027, "tcp" },
+ { "LiebDevMgmt_C", { NULL }, 3027, "udp" },
+ { "LiebDevMgmt_DM", { NULL }, 3028, "tcp" },
+ { "LiebDevMgmt_DM", { NULL }, 3028, "udp" },
+ { "LiebDevMgmt_A", { NULL }, 3029, "tcp" },
+ { "LiebDevMgmt_A", { NULL }, 3029, "udp" },
+ { "arepa-cas", { NULL }, 3030, "tcp" },
+ { "arepa-cas", { NULL }, 3030, "udp" },
+ { "eppc", { NULL }, 3031, "tcp" },
+ { "eppc", { NULL }, 3031, "udp" },
+ { "redwood-chat", { NULL }, 3032, "tcp" },
+ { "redwood-chat", { NULL }, 3032, "udp" },
+ { "pdb", { NULL }, 3033, "tcp" },
+ { "pdb", { NULL }, 3033, "udp" },
+ { "osmosis-aeea", { NULL }, 3034, "tcp" },
+ { "osmosis-aeea", { NULL }, 3034, "udp" },
+ { "fjsv-gssagt", { NULL }, 3035, "tcp" },
+ { "fjsv-gssagt", { NULL }, 3035, "udp" },
+ { "hagel-dump", { NULL }, 3036, "tcp" },
+ { "hagel-dump", { NULL }, 3036, "udp" },
+ { "hp-san-mgmt", { NULL }, 3037, "tcp" },
+ { "hp-san-mgmt", { NULL }, 3037, "udp" },
+ { "santak-ups", { NULL }, 3038, "tcp" },
+ { "santak-ups", { NULL }, 3038, "udp" },
+ { "cogitate", { NULL }, 3039, "tcp" },
+ { "cogitate", { NULL }, 3039, "udp" },
+ { "tomato-springs", { NULL }, 3040, "tcp" },
+ { "tomato-springs", { NULL }, 3040, "udp" },
+ { "di-traceware", { NULL }, 3041, "tcp" },
+ { "di-traceware", { NULL }, 3041, "udp" },
+ { "journee", { NULL }, 3042, "tcp" },
+ { "journee", { NULL }, 3042, "udp" },
+ { "brp", { NULL }, 3043, "tcp" },
+ { "brp", { NULL }, 3043, "udp" },
+ { "epp", { NULL }, 3044, "tcp" },
+ { "epp", { NULL }, 3044, "udp" },
+ { "responsenet", { NULL }, 3045, "tcp" },
+ { "responsenet", { NULL }, 3045, "udp" },
+ { "di-ase", { NULL }, 3046, "tcp" },
+ { "di-ase", { NULL }, 3046, "udp" },
+ { "hlserver", { NULL }, 3047, "tcp" },
+ { "hlserver", { NULL }, 3047, "udp" },
+ { "pctrader", { NULL }, 3048, "tcp" },
+ { "pctrader", { NULL }, 3048, "udp" },
+ { "nsws", { NULL }, 3049, "tcp" },
+ { "nsws", { NULL }, 3049, "udp" },
+ { "gds_db", { NULL }, 3050, "tcp" },
+ { "gds_db", { NULL }, 3050, "udp" },
+ { "galaxy-server", { NULL }, 3051, "tcp" },
+ { "galaxy-server", { NULL }, 3051, "udp" },
+ { "apc-3052", { NULL }, 3052, "tcp" },
+ { "apc-3052", { NULL }, 3052, "udp" },
+ { "dsom-server", { NULL }, 3053, "tcp" },
+ { "dsom-server", { NULL }, 3053, "udp" },
+ { "amt-cnf-prot", { NULL }, 3054, "tcp" },
+ { "amt-cnf-prot", { NULL }, 3054, "udp" },
+ { "policyserver", { NULL }, 3055, "tcp" },
+ { "policyserver", { NULL }, 3055, "udp" },
+ { "cdl-server", { NULL }, 3056, "tcp" },
+ { "cdl-server", { NULL }, 3056, "udp" },
+ { "goahead-fldup", { NULL }, 3057, "tcp" },
+ { "goahead-fldup", { NULL }, 3057, "udp" },
+ { "videobeans", { NULL }, 3058, "tcp" },
+ { "videobeans", { NULL }, 3058, "udp" },
+ { "qsoft", { NULL }, 3059, "tcp" },
+ { "qsoft", { NULL }, 3059, "udp" },
+ { "interserver", { NULL }, 3060, "tcp" },
+ { "interserver", { NULL }, 3060, "udp" },
+ { "cautcpd", { NULL }, 3061, "tcp" },
+ { "cautcpd", { NULL }, 3061, "udp" },
+ { "ncacn-ip-tcp", { NULL }, 3062, "tcp" },
+ { "ncacn-ip-tcp", { NULL }, 3062, "udp" },
+ { "ncadg-ip-udp", { NULL }, 3063, "tcp" },
+ { "ncadg-ip-udp", { NULL }, 3063, "udp" },
+ { "rprt", { NULL }, 3064, "tcp" },
+ { "rprt", { NULL }, 3064, "udp" },
+ { "slinterbase", { NULL }, 3065, "tcp" },
+ { "slinterbase", { NULL }, 3065, "udp" },
+ { "netattachsdmp", { NULL }, 3066, "tcp" },
+ { "netattachsdmp", { NULL }, 3066, "udp" },
+ { "fjhpjp", { NULL }, 3067, "tcp" },
+ { "fjhpjp", { NULL }, 3067, "udp" },
+ { "ls3bcast", { NULL }, 3068, "tcp" },
+ { "ls3bcast", { NULL }, 3068, "udp" },
+ { "ls3", { NULL }, 3069, "tcp" },
+ { "ls3", { NULL }, 3069, "udp" },
+ { "mgxswitch", { NULL }, 3070, "tcp" },
+ { "mgxswitch", { NULL }, 3070, "udp" },
+ { "csd-mgmt-port", { NULL }, 3071, "tcp" },
+ { "csd-mgmt-port", { NULL }, 3071, "udp" },
+ { "csd-monitor", { NULL }, 3072, "tcp" },
+ { "csd-monitor", { NULL }, 3072, "udp" },
+ { "vcrp", { NULL }, 3073, "tcp" },
+ { "vcrp", { NULL }, 3073, "udp" },
+ { "xbox", { NULL }, 3074, "tcp" },
+ { "xbox", { NULL }, 3074, "udp" },
+ { "orbix-locator", { NULL }, 3075, "tcp" },
+ { "orbix-locator", { NULL }, 3075, "udp" },
+ { "orbix-config", { NULL }, 3076, "tcp" },
+ { "orbix-config", { NULL }, 3076, "udp" },
+ { "orbix-loc-ssl", { NULL }, 3077, "tcp" },
+ { "orbix-loc-ssl", { NULL }, 3077, "udp" },
+ { "orbix-cfg-ssl", { NULL }, 3078, "tcp" },
+ { "orbix-cfg-ssl", { NULL }, 3078, "udp" },
+ { "lv-frontpanel", { NULL }, 3079, "tcp" },
+ { "lv-frontpanel", { NULL }, 3079, "udp" },
+ { "stm_pproc", { NULL }, 3080, "tcp" },
+ { "stm_pproc", { NULL }, 3080, "udp" },
+ { "tl1-lv", { NULL }, 3081, "tcp" },
+ { "tl1-lv", { NULL }, 3081, "udp" },
+ { "tl1-raw", { NULL }, 3082, "tcp" },
+ { "tl1-raw", { NULL }, 3082, "udp" },
+ { "tl1-telnet", { NULL }, 3083, "tcp" },
+ { "tl1-telnet", { NULL }, 3083, "udp" },
+ { "itm-mccs", { NULL }, 3084, "tcp" },
+ { "itm-mccs", { NULL }, 3084, "udp" },
+ { "pcihreq", { NULL }, 3085, "tcp" },
+ { "pcihreq", { NULL }, 3085, "udp" },
+ { "jdl-dbkitchen", { NULL }, 3086, "tcp" },
+ { "jdl-dbkitchen", { NULL }, 3086, "udp" },
+ { "asoki-sma", { NULL }, 3087, "tcp" },
+ { "asoki-sma", { NULL }, 3087, "udp" },
+ { "xdtp", { NULL }, 3088, "tcp" },
+ { "xdtp", { NULL }, 3088, "udp" },
+ { "ptk-alink", { NULL }, 3089, "tcp" },
+ { "ptk-alink", { NULL }, 3089, "udp" },
+ { "stss", { NULL }, 3090, "tcp" },
+ { "stss", { NULL }, 3090, "udp" },
+ { "1ci-smcs", { NULL }, 3091, "tcp" },
+ { "1ci-smcs", { NULL }, 3091, "udp" },
+ { "rapidmq-center", { NULL }, 3093, "tcp" },
+ { "rapidmq-center", { NULL }, 3093, "udp" },
+ { "rapidmq-reg", { NULL }, 3094, "tcp" },
+ { "rapidmq-reg", { NULL }, 3094, "udp" },
+ { "panasas", { NULL }, 3095, "tcp" },
+ { "panasas", { NULL }, 3095, "udp" },
+ { "ndl-aps", { NULL }, 3096, "tcp" },
+ { "ndl-aps", { NULL }, 3096, "udp" },
+ { "itu-bicc-stc", { NULL }, 3097, "sctp"},
+ { "umm-port", { NULL }, 3098, "tcp" },
+ { "umm-port", { NULL }, 3098, "udp" },
+ { "chmd", { NULL }, 3099, "tcp" },
+ { "chmd", { NULL }, 3099, "udp" },
+ { "opcon-xps", { NULL }, 3100, "tcp" },
+ { "opcon-xps", { NULL }, 3100, "udp" },
+ { "hp-pxpib", { NULL }, 3101, "tcp" },
+ { "hp-pxpib", { NULL }, 3101, "udp" },
+ { "slslavemon", { NULL }, 3102, "tcp" },
+ { "slslavemon", { NULL }, 3102, "udp" },
+ { "autocuesmi", { NULL }, 3103, "tcp" },
+ { "autocuesmi", { NULL }, 3103, "udp" },
+ { "autocuelog", { NULL }, 3104, "tcp" },
+ { "autocuetime", { NULL }, 3104, "udp" },
+ { "cardbox", { NULL }, 3105, "tcp" },
+ { "cardbox", { NULL }, 3105, "udp" },
+ { "cardbox-http", { NULL }, 3106, "tcp" },
+ { "cardbox-http", { NULL }, 3106, "udp" },
+ { "business", { NULL }, 3107, "tcp" },
+ { "business", { NULL }, 3107, "udp" },
+ { "geolocate", { NULL }, 3108, "tcp" },
+ { "geolocate", { NULL }, 3108, "udp" },
+ { "personnel", { NULL }, 3109, "tcp" },
+ { "personnel", { NULL }, 3109, "udp" },
+ { "sim-control", { NULL }, 3110, "tcp" },
+ { "sim-control", { NULL }, 3110, "udp" },
+ { "wsynch", { NULL }, 3111, "tcp" },
+ { "wsynch", { NULL }, 3111, "udp" },
+ { "ksysguard", { NULL }, 3112, "tcp" },
+ { "ksysguard", { NULL }, 3112, "udp" },
+ { "cs-auth-svr", { NULL }, 3113, "tcp" },
+ { "cs-auth-svr", { NULL }, 3113, "udp" },
+ { "ccmad", { NULL }, 3114, "tcp" },
+ { "ccmad", { NULL }, 3114, "udp" },
+ { "mctet-master", { NULL }, 3115, "tcp" },
+ { "mctet-master", { NULL }, 3115, "udp" },
+ { "mctet-gateway", { NULL }, 3116, "tcp" },
+ { "mctet-gateway", { NULL }, 3116, "udp" },
+ { "mctet-jserv", { NULL }, 3117, "tcp" },
+ { "mctet-jserv", { NULL }, 3117, "udp" },
+ { "pkagent", { NULL }, 3118, "tcp" },
+ { "pkagent", { NULL }, 3118, "udp" },
+ { "d2000kernel", { NULL }, 3119, "tcp" },
+ { "d2000kernel", { NULL }, 3119, "udp" },
+ { "d2000webserver", { NULL }, 3120, "tcp" },
+ { "d2000webserver", { NULL }, 3120, "udp" },
+ { "vtr-emulator", { NULL }, 3122, "tcp" },
+ { "vtr-emulator", { NULL }, 3122, "udp" },
+ { "edix", { NULL }, 3123, "tcp" },
+ { "edix", { NULL }, 3123, "udp" },
+ { "beacon-port", { NULL }, 3124, "tcp" },
+ { "beacon-port", { NULL }, 3124, "udp" },
+ { "a13-an", { NULL }, 3125, "tcp" },
+ { "a13-an", { NULL }, 3125, "udp" },
+ { "ctx-bridge", { NULL }, 3127, "tcp" },
+ { "ctx-bridge", { NULL }, 3127, "udp" },
+ { "ndl-aas", { NULL }, 3128, "tcp" },
+ { "ndl-aas", { NULL }, 3128, "udp" },
+ { "netport-id", { NULL }, 3129, "tcp" },
+ { "netport-id", { NULL }, 3129, "udp" },
+ { "icpv2", { NULL }, 3130, "tcp" },
+ { "icpv2", { NULL }, 3130, "udp" },
+ { "netbookmark", { NULL }, 3131, "tcp" },
+ { "netbookmark", { NULL }, 3131, "udp" },
+ { "ms-rule-engine", { NULL }, 3132, "tcp" },
+ { "ms-rule-engine", { NULL }, 3132, "udp" },
+ { "prism-deploy", { NULL }, 3133, "tcp" },
+ { "prism-deploy", { NULL }, 3133, "udp" },
+ { "ecp", { NULL }, 3134, "tcp" },
+ { "ecp", { NULL }, 3134, "udp" },
+ { "peerbook-port", { NULL }, 3135, "tcp" },
+ { "peerbook-port", { NULL }, 3135, "udp" },
+ { "grubd", { NULL }, 3136, "tcp" },
+ { "grubd", { NULL }, 3136, "udp" },
+ { "rtnt-1", { NULL }, 3137, "tcp" },
+ { "rtnt-1", { NULL }, 3137, "udp" },
+ { "rtnt-2", { NULL }, 3138, "tcp" },
+ { "rtnt-2", { NULL }, 3138, "udp" },
+ { "incognitorv", { NULL }, 3139, "tcp" },
+ { "incognitorv", { NULL }, 3139, "udp" },
+ { "ariliamulti", { NULL }, 3140, "tcp" },
+ { "ariliamulti", { NULL }, 3140, "udp" },
+ { "vmodem", { NULL }, 3141, "tcp" },
+ { "vmodem", { NULL }, 3141, "udp" },
+ { "rdc-wh-eos", { NULL }, 3142, "tcp" },
+ { "rdc-wh-eos", { NULL }, 3142, "udp" },
+ { "seaview", { NULL }, 3143, "tcp" },
+ { "seaview", { NULL }, 3143, "udp" },
+ { "tarantella", { NULL }, 3144, "tcp" },
+ { "tarantella", { NULL }, 3144, "udp" },
+ { "csi-lfap", { NULL }, 3145, "tcp" },
+ { "csi-lfap", { NULL }, 3145, "udp" },
+ { "bears-02", { NULL }, 3146, "tcp" },
+ { "bears-02", { NULL }, 3146, "udp" },
+ { "rfio", { NULL }, 3147, "tcp" },
+ { "rfio", { NULL }, 3147, "udp" },
+ { "nm-game-admin", { NULL }, 3148, "tcp" },
+ { "nm-game-admin", { NULL }, 3148, "udp" },
+ { "nm-game-server", { NULL }, 3149, "tcp" },
+ { "nm-game-server", { NULL }, 3149, "udp" },
+ { "nm-asses-admin", { NULL }, 3150, "tcp" },
+ { "nm-asses-admin", { NULL }, 3150, "udp" },
+ { "nm-assessor", { NULL }, 3151, "tcp" },
+ { "nm-assessor", { NULL }, 3151, "udp" },
+ { "feitianrockey", { NULL }, 3152, "tcp" },
+ { "feitianrockey", { NULL }, 3152, "udp" },
+ { "s8-client-port", { NULL }, 3153, "tcp" },
+ { "s8-client-port", { NULL }, 3153, "udp" },
+ { "ccmrmi", { NULL }, 3154, "tcp" },
+ { "ccmrmi", { NULL }, 3154, "udp" },
+ { "jpegmpeg", { NULL }, 3155, "tcp" },
+ { "jpegmpeg", { NULL }, 3155, "udp" },
+ { "indura", { NULL }, 3156, "tcp" },
+ { "indura", { NULL }, 3156, "udp" },
+ { "e3consultants", { NULL }, 3157, "tcp" },
+ { "e3consultants", { NULL }, 3157, "udp" },
+ { "stvp", { NULL }, 3158, "tcp" },
+ { "stvp", { NULL }, 3158, "udp" },
+ { "navegaweb-port", { NULL }, 3159, "tcp" },
+ { "navegaweb-port", { NULL }, 3159, "udp" },
+ { "tip-app-server", { NULL }, 3160, "tcp" },
+ { "tip-app-server", { NULL }, 3160, "udp" },
+ { "doc1lm", { NULL }, 3161, "tcp" },
+ { "doc1lm", { NULL }, 3161, "udp" },
+ { "sflm", { NULL }, 3162, "tcp" },
+ { "sflm", { NULL }, 3162, "udp" },
+ { "res-sap", { NULL }, 3163, "tcp" },
+ { "res-sap", { NULL }, 3163, "udp" },
+ { "imprs", { NULL }, 3164, "tcp" },
+ { "imprs", { NULL }, 3164, "udp" },
+ { "newgenpay", { NULL }, 3165, "tcp" },
+ { "newgenpay", { NULL }, 3165, "udp" },
+ { "sossecollector", { NULL }, 3166, "tcp" },
+ { "sossecollector", { NULL }, 3166, "udp" },
+ { "nowcontact", { NULL }, 3167, "tcp" },
+ { "nowcontact", { NULL }, 3167, "udp" },
+ { "poweronnud", { NULL }, 3168, "tcp" },
+ { "poweronnud", { NULL }, 3168, "udp" },
+ { "serverview-as", { NULL }, 3169, "tcp" },
+ { "serverview-as", { NULL }, 3169, "udp" },
+ { "serverview-asn", { NULL }, 3170, "tcp" },
+ { "serverview-asn", { NULL }, 3170, "udp" },
+ { "serverview-gf", { NULL }, 3171, "tcp" },
+ { "serverview-gf", { NULL }, 3171, "udp" },
+ { "serverview-rm", { NULL }, 3172, "tcp" },
+ { "serverview-rm", { NULL }, 3172, "udp" },
+ { "serverview-icc", { NULL }, 3173, "tcp" },
+ { "serverview-icc", { NULL }, 3173, "udp" },
+ { "armi-server", { NULL }, 3174, "tcp" },
+ { "armi-server", { NULL }, 3174, "udp" },
+ { "t1-e1-over-ip", { NULL }, 3175, "tcp" },
+ { "t1-e1-over-ip", { NULL }, 3175, "udp" },
+ { "ars-master", { NULL }, 3176, "tcp" },
+ { "ars-master", { NULL }, 3176, "udp" },
+ { "phonex-port", { NULL }, 3177, "tcp" },
+ { "phonex-port", { NULL }, 3177, "udp" },
+ { "radclientport", { NULL }, 3178, "tcp" },
+ { "radclientport", { NULL }, 3178, "udp" },
+ { "h2gf-w-2m", { NULL }, 3179, "tcp" },
+ { "h2gf-w-2m", { NULL }, 3179, "udp" },
+ { "mc-brk-srv", { NULL }, 3180, "tcp" },
+ { "mc-brk-srv", { NULL }, 3180, "udp" },
+ { "bmcpatrolagent", { NULL }, 3181, "tcp" },
+ { "bmcpatrolagent", { NULL }, 3181, "udp" },
+ { "bmcpatrolrnvu", { NULL }, 3182, "tcp" },
+ { "bmcpatrolrnvu", { NULL }, 3182, "udp" },
+ { "cops-tls", { NULL }, 3183, "tcp" },
+ { "cops-tls", { NULL }, 3183, "udp" },
+ { "apogeex-port", { NULL }, 3184, "tcp" },
+ { "apogeex-port", { NULL }, 3184, "udp" },
+ { "smpppd", { NULL }, 3185, "tcp" },
+ { "smpppd", { NULL }, 3185, "udp" },
+ { "iiw-port", { NULL }, 3186, "tcp" },
+ { "iiw-port", { NULL }, 3186, "udp" },
+ { "odi-port", { NULL }, 3187, "tcp" },
+ { "odi-port", { NULL }, 3187, "udp" },
+ { "brcm-comm-port", { NULL }, 3188, "tcp" },
+ { "brcm-comm-port", { NULL }, 3188, "udp" },
+ { "pcle-infex", { NULL }, 3189, "tcp" },
+ { "pcle-infex", { NULL }, 3189, "udp" },
+ { "csvr-proxy", { NULL }, 3190, "tcp" },
+ { "csvr-proxy", { NULL }, 3190, "udp" },
+ { "csvr-sslproxy", { NULL }, 3191, "tcp" },
+ { "csvr-sslproxy", { NULL }, 3191, "udp" },
+ { "firemonrcc", { NULL }, 3192, "tcp" },
+ { "firemonrcc", { NULL }, 3192, "udp" },
+ { "spandataport", { NULL }, 3193, "tcp" },
+ { "spandataport", { NULL }, 3193, "udp" },
+ { "magbind", { NULL }, 3194, "tcp" },
+ { "magbind", { NULL }, 3194, "udp" },
+ { "ncu-1", { NULL }, 3195, "tcp" },
+ { "ncu-1", { NULL }, 3195, "udp" },
+ { "ncu-2", { NULL }, 3196, "tcp" },
+ { "ncu-2", { NULL }, 3196, "udp" },
+ { "embrace-dp-s", { NULL }, 3197, "tcp" },
+ { "embrace-dp-s", { NULL }, 3197, "udp" },
+ { "embrace-dp-c", { NULL }, 3198, "tcp" },
+ { "embrace-dp-c", { NULL }, 3198, "udp" },
+ { "dmod-workspace", { NULL }, 3199, "tcp" },
+ { "dmod-workspace", { NULL }, 3199, "udp" },
+ { "tick-port", { NULL }, 3200, "tcp" },
+ { "tick-port", { NULL }, 3200, "udp" },
+ { "cpq-tasksmart", { NULL }, 3201, "tcp" },
+ { "cpq-tasksmart", { NULL }, 3201, "udp" },
+ { "intraintra", { NULL }, 3202, "tcp" },
+ { "intraintra", { NULL }, 3202, "udp" },
+ { "netwatcher-mon", { NULL }, 3203, "tcp" },
+ { "netwatcher-mon", { NULL }, 3203, "udp" },
+ { "netwatcher-db", { NULL }, 3204, "tcp" },
+ { "netwatcher-db", { NULL }, 3204, "udp" },
+ { "isns", { NULL }, 3205, "tcp" },
+ { "isns", { NULL }, 3205, "udp" },
+ { "ironmail", { NULL }, 3206, "tcp" },
+ { "ironmail", { NULL }, 3206, "udp" },
+ { "vx-auth-port", { NULL }, 3207, "tcp" },
+ { "vx-auth-port", { NULL }, 3207, "udp" },
+ { "pfu-prcallback", { NULL }, 3208, "tcp" },
+ { "pfu-prcallback", { NULL }, 3208, "udp" },
+ { "netwkpathengine", { NULL }, 3209, "tcp" },
+ { "netwkpathengine", { NULL }, 3209, "udp" },
+ { "flamenco-proxy", { NULL }, 3210, "tcp" },
+ { "flamenco-proxy", { NULL }, 3210, "udp" },
+ { "avsecuremgmt", { NULL }, 3211, "tcp" },
+ { "avsecuremgmt", { NULL }, 3211, "udp" },
+ { "surveyinst", { NULL }, 3212, "tcp" },
+ { "surveyinst", { NULL }, 3212, "udp" },
+ { "neon24x7", { NULL }, 3213, "tcp" },
+ { "neon24x7", { NULL }, 3213, "udp" },
+ { "jmq-daemon-1", { NULL }, 3214, "tcp" },
+ { "jmq-daemon-1", { NULL }, 3214, "udp" },
+ { "jmq-daemon-2", { NULL }, 3215, "tcp" },
+ { "jmq-daemon-2", { NULL }, 3215, "udp" },
+ { "ferrari-foam", { NULL }, 3216, "tcp" },
+ { "ferrari-foam", { NULL }, 3216, "udp" },
+ { "unite", { NULL }, 3217, "tcp" },
+ { "unite", { NULL }, 3217, "udp" },
+ { "smartpackets", { NULL }, 3218, "tcp" },
+ { "smartpackets", { NULL }, 3218, "udp" },
+ { "wms-messenger", { NULL }, 3219, "tcp" },
+ { "wms-messenger", { NULL }, 3219, "udp" },
+ { "xnm-ssl", { NULL }, 3220, "tcp" },
+ { "xnm-ssl", { NULL }, 3220, "udp" },
+ { "xnm-clear-text", { NULL }, 3221, "tcp" },
+ { "xnm-clear-text", { NULL }, 3221, "udp" },
+ { "glbp", { NULL }, 3222, "tcp" },
+ { "glbp", { NULL }, 3222, "udp" },
+ { "digivote", { NULL }, 3223, "tcp" },
+ { "digivote", { NULL }, 3223, "udp" },
+ { "aes-discovery", { NULL }, 3224, "tcp" },
+ { "aes-discovery", { NULL }, 3224, "udp" },
+ { "fcip-port", { NULL }, 3225, "tcp" },
+ { "fcip-port", { NULL }, 3225, "udp" },
+ { "isi-irp", { NULL }, 3226, "tcp" },
+ { "isi-irp", { NULL }, 3226, "udp" },
+ { "dwnmshttp", { NULL }, 3227, "tcp" },
+ { "dwnmshttp", { NULL }, 3227, "udp" },
+ { "dwmsgserver", { NULL }, 3228, "tcp" },
+ { "dwmsgserver", { NULL }, 3228, "udp" },
+ { "global-cd-port", { NULL }, 3229, "tcp" },
+ { "global-cd-port", { NULL }, 3229, "udp" },
+ { "sftdst-port", { NULL }, 3230, "tcp" },
+ { "sftdst-port", { NULL }, 3230, "udp" },
+ { "vidigo", { NULL }, 3231, "tcp" },
+ { "vidigo", { NULL }, 3231, "udp" },
+ { "mdtp", { NULL }, 3232, "tcp" },
+ { "mdtp", { NULL }, 3232, "udp" },
+ { "whisker", { NULL }, 3233, "tcp" },
+ { "whisker", { NULL }, 3233, "udp" },
+ { "alchemy", { NULL }, 3234, "tcp" },
+ { "alchemy", { NULL }, 3234, "udp" },
+ { "mdap-port", { NULL }, 3235, "tcp" },
+ { "mdap-port", { NULL }, 3235, "udp" },
+ { "apparenet-ts", { NULL }, 3236, "tcp" },
+ { "apparenet-ts", { NULL }, 3236, "udp" },
+ { "apparenet-tps", { NULL }, 3237, "tcp" },
+ { "apparenet-tps", { NULL }, 3237, "udp" },
+ { "apparenet-as", { NULL }, 3238, "tcp" },
+ { "apparenet-as", { NULL }, 3238, "udp" },
+ { "apparenet-ui", { NULL }, 3239, "tcp" },
+ { "apparenet-ui", { NULL }, 3239, "udp" },
+ { "triomotion", { NULL }, 3240, "tcp" },
+ { "triomotion", { NULL }, 3240, "udp" },
+ { "sysorb", { NULL }, 3241, "tcp" },
+ { "sysorb", { NULL }, 3241, "udp" },
+ { "sdp-id-port", { NULL }, 3242, "tcp" },
+ { "sdp-id-port", { NULL }, 3242, "udp" },
+ { "timelot", { NULL }, 3243, "tcp" },
+ { "timelot", { NULL }, 3243, "udp" },
+ { "onesaf", { NULL }, 3244, "tcp" },
+ { "onesaf", { NULL }, 3244, "udp" },
+ { "vieo-fe", { NULL }, 3245, "tcp" },
+ { "vieo-fe", { NULL }, 3245, "udp" },
+ { "dvt-system", { NULL }, 3246, "tcp" },
+ { "dvt-system", { NULL }, 3246, "udp" },
+ { "dvt-data", { NULL }, 3247, "tcp" },
+ { "dvt-data", { NULL }, 3247, "udp" },
+ { "procos-lm", { NULL }, 3248, "tcp" },
+ { "procos-lm", { NULL }, 3248, "udp" },
+ { "ssp", { NULL }, 3249, "tcp" },
+ { "ssp", { NULL }, 3249, "udp" },
+ { "hicp", { NULL }, 3250, "tcp" },
+ { "hicp", { NULL }, 3250, "udp" },
+ { "sysscanner", { NULL }, 3251, "tcp" },
+ { "sysscanner", { NULL }, 3251, "udp" },
+ { "dhe", { NULL }, 3252, "tcp" },
+ { "dhe", { NULL }, 3252, "udp" },
+ { "pda-data", { NULL }, 3253, "tcp" },
+ { "pda-data", { NULL }, 3253, "udp" },
+ { "pda-sys", { NULL }, 3254, "tcp" },
+ { "pda-sys", { NULL }, 3254, "udp" },
+ { "semaphore", { NULL }, 3255, "tcp" },
+ { "semaphore", { NULL }, 3255, "udp" },
+ { "cpqrpm-agent", { NULL }, 3256, "tcp" },
+ { "cpqrpm-agent", { NULL }, 3256, "udp" },
+ { "cpqrpm-server", { NULL }, 3257, "tcp" },
+ { "cpqrpm-server", { NULL }, 3257, "udp" },
+ { "ivecon-port", { NULL }, 3258, "tcp" },
+ { "ivecon-port", { NULL }, 3258, "udp" },
+ { "epncdp2", { NULL }, 3259, "tcp" },
+ { "epncdp2", { NULL }, 3259, "udp" },
+ { "iscsi-target", { NULL }, 3260, "tcp" },
+ { "iscsi-target", { NULL }, 3260, "udp" },
+ { "winshadow", { NULL }, 3261, "tcp" },
+ { "winshadow", { NULL }, 3261, "udp" },
+ { "necp", { NULL }, 3262, "tcp" },
+ { "necp", { NULL }, 3262, "udp" },
+ { "ecolor-imager", { NULL }, 3263, "tcp" },
+ { "ecolor-imager", { NULL }, 3263, "udp" },
+ { "ccmail", { NULL }, 3264, "tcp" },
+ { "ccmail", { NULL }, 3264, "udp" },
+ { "altav-tunnel", { NULL }, 3265, "tcp" },
+ { "altav-tunnel", { NULL }, 3265, "udp" },
+ { "ns-cfg-server", { NULL }, 3266, "tcp" },
+ { "ns-cfg-server", { NULL }, 3266, "udp" },
+ { "ibm-dial-out", { NULL }, 3267, "tcp" },
+ { "ibm-dial-out", { NULL }, 3267, "udp" },
+ { "msft-gc", { NULL }, 3268, "tcp" },
+ { "msft-gc", { NULL }, 3268, "udp" },
+ { "msft-gc-ssl", { NULL }, 3269, "tcp" },
+ { "msft-gc-ssl", { NULL }, 3269, "udp" },
+ { "verismart", { NULL }, 3270, "tcp" },
+ { "verismart", { NULL }, 3270, "udp" },
+ { "csoft-prev", { NULL }, 3271, "tcp" },
+ { "csoft-prev", { NULL }, 3271, "udp" },
+ { "user-manager", { NULL }, 3272, "tcp" },
+ { "user-manager", { NULL }, 3272, "udp" },
+ { "sxmp", { NULL }, 3273, "tcp" },
+ { "sxmp", { NULL }, 3273, "udp" },
+ { "ordinox-server", { NULL }, 3274, "tcp" },
+ { "ordinox-server", { NULL }, 3274, "udp" },
+ { "samd", { NULL }, 3275, "tcp" },
+ { "samd", { NULL }, 3275, "udp" },
+ { "maxim-asics", { NULL }, 3276, "tcp" },
+ { "maxim-asics", { NULL }, 3276, "udp" },
+ { "awg-proxy", { NULL }, 3277, "tcp" },
+ { "awg-proxy", { NULL }, 3277, "udp" },
+ { "lkcmserver", { NULL }, 3278, "tcp" },
+ { "lkcmserver", { NULL }, 3278, "udp" },
+ { "admind", { NULL }, 3279, "tcp" },
+ { "admind", { NULL }, 3279, "udp" },
+ { "vs-server", { NULL }, 3280, "tcp" },
+ { "vs-server", { NULL }, 3280, "udp" },
+ { "sysopt", { NULL }, 3281, "tcp" },
+ { "sysopt", { NULL }, 3281, "udp" },
+ { "datusorb", { NULL }, 3282, "tcp" },
+ { "datusorb", { NULL }, 3282, "udp" },
+ { "net-assistant", { NULL }, 3283, "tcp" },
+ { "net-assistant", { NULL }, 3283, "udp" },
+ { "4talk", { NULL }, 3284, "tcp" },
+ { "4talk", { NULL }, 3284, "udp" },
+ { "plato", { NULL }, 3285, "tcp" },
+ { "plato", { NULL }, 3285, "udp" },
+ { "e-net", { NULL }, 3286, "tcp" },
+ { "e-net", { NULL }, 3286, "udp" },
+ { "directvdata", { NULL }, 3287, "tcp" },
+ { "directvdata", { NULL }, 3287, "udp" },
+ { "cops", { NULL }, 3288, "tcp" },
+ { "cops", { NULL }, 3288, "udp" },
+ { "enpc", { NULL }, 3289, "tcp" },
+ { "enpc", { NULL }, 3289, "udp" },
+ { "caps-lm", { NULL }, 3290, "tcp" },
+ { "caps-lm", { NULL }, 3290, "udp" },
+ { "sah-lm", { NULL }, 3291, "tcp" },
+ { "sah-lm", { NULL }, 3291, "udp" },
+ { "cart-o-rama", { NULL }, 3292, "tcp" },
+ { "cart-o-rama", { NULL }, 3292, "udp" },
+ { "fg-fps", { NULL }, 3293, "tcp" },
+ { "fg-fps", { NULL }, 3293, "udp" },
+ { "fg-gip", { NULL }, 3294, "tcp" },
+ { "fg-gip", { NULL }, 3294, "udp" },
+ { "dyniplookup", { NULL }, 3295, "tcp" },
+ { "dyniplookup", { NULL }, 3295, "udp" },
+ { "rib-slm", { NULL }, 3296, "tcp" },
+ { "rib-slm", { NULL }, 3296, "udp" },
+ { "cytel-lm", { NULL }, 3297, "tcp" },
+ { "cytel-lm", { NULL }, 3297, "udp" },
+ { "deskview", { NULL }, 3298, "tcp" },
+ { "deskview", { NULL }, 3298, "udp" },
+ { "pdrncs", { NULL }, 3299, "tcp" },
+ { "pdrncs", { NULL }, 3299, "udp" },
+ { "mcs-fastmail", { NULL }, 3302, "tcp" },
+ { "mcs-fastmail", { NULL }, 3302, "udp" },
+ { "opsession-clnt", { NULL }, 3303, "tcp" },
+ { "opsession-clnt", { NULL }, 3303, "udp" },
+ { "opsession-srvr", { NULL }, 3304, "tcp" },
+ { "opsession-srvr", { NULL }, 3304, "udp" },
+ { "odette-ftp", { NULL }, 3305, "tcp" },
+ { "odette-ftp", { NULL }, 3305, "udp" },
+ { "mysql", { NULL }, 3306, "tcp" },
+ { "mysql", { NULL }, 3306, "udp" },
+ { "opsession-prxy", { NULL }, 3307, "tcp" },
+ { "opsession-prxy", { NULL }, 3307, "udp" },
+ { "tns-server", { NULL }, 3308, "tcp" },
+ { "tns-server", { NULL }, 3308, "udp" },
+ { "tns-adv", { NULL }, 3309, "tcp" },
+ { "tns-adv", { NULL }, 3309, "udp" },
+ { "dyna-access", { NULL }, 3310, "tcp" },
+ { "dyna-access", { NULL }, 3310, "udp" },
+ { "mcns-tel-ret", { NULL }, 3311, "tcp" },
+ { "mcns-tel-ret", { NULL }, 3311, "udp" },
+ { "appman-server", { NULL }, 3312, "tcp" },
+ { "appman-server", { NULL }, 3312, "udp" },
+ { "uorb", { NULL }, 3313, "tcp" },
+ { "uorb", { NULL }, 3313, "udp" },
+ { "uohost", { NULL }, 3314, "tcp" },
+ { "uohost", { NULL }, 3314, "udp" },
+ { "cdid", { NULL }, 3315, "tcp" },
+ { "cdid", { NULL }, 3315, "udp" },
+ { "aicc-cmi", { NULL }, 3316, "tcp" },
+ { "aicc-cmi", { NULL }, 3316, "udp" },
+ { "vsaiport", { NULL }, 3317, "tcp" },
+ { "vsaiport", { NULL }, 3317, "udp" },
+ { "ssrip", { NULL }, 3318, "tcp" },
+ { "ssrip", { NULL }, 3318, "udp" },
+ { "sdt-lmd", { NULL }, 3319, "tcp" },
+ { "sdt-lmd", { NULL }, 3319, "udp" },
+ { "officelink2000", { NULL }, 3320, "tcp" },
+ { "officelink2000", { NULL }, 3320, "udp" },
+ { "vnsstr", { NULL }, 3321, "tcp" },
+ { "vnsstr", { NULL }, 3321, "udp" },
+ { "sftu", { NULL }, 3326, "tcp" },
+ { "sftu", { NULL }, 3326, "udp" },
+ { "bbars", { NULL }, 3327, "tcp" },
+ { "bbars", { NULL }, 3327, "udp" },
+ { "egptlm", { NULL }, 3328, "tcp" },
+ { "egptlm", { NULL }, 3328, "udp" },
+ { "hp-device-disc", { NULL }, 3329, "tcp" },
+ { "hp-device-disc", { NULL }, 3329, "udp" },
+ { "mcs-calypsoicf", { NULL }, 3330, "tcp" },
+ { "mcs-calypsoicf", { NULL }, 3330, "udp" },
+ { "mcs-messaging", { NULL }, 3331, "tcp" },
+ { "mcs-messaging", { NULL }, 3331, "udp" },
+ { "mcs-mailsvr", { NULL }, 3332, "tcp" },
+ { "mcs-mailsvr", { NULL }, 3332, "udp" },
+ { "dec-notes", { NULL }, 3333, "tcp" },
+ { "dec-notes", { NULL }, 3333, "udp" },
+ { "directv-web", { NULL }, 3334, "tcp" },
+ { "directv-web", { NULL }, 3334, "udp" },
+ { "directv-soft", { NULL }, 3335, "tcp" },
+ { "directv-soft", { NULL }, 3335, "udp" },
+ { "directv-tick", { NULL }, 3336, "tcp" },
+ { "directv-tick", { NULL }, 3336, "udp" },
+ { "directv-catlg", { NULL }, 3337, "tcp" },
+ { "directv-catlg", { NULL }, 3337, "udp" },
+ { "anet-b", { NULL }, 3338, "tcp" },
+ { "anet-b", { NULL }, 3338, "udp" },
+ { "anet-l", { NULL }, 3339, "tcp" },
+ { "anet-l", { NULL }, 3339, "udp" },
+ { "anet-m", { NULL }, 3340, "tcp" },
+ { "anet-m", { NULL }, 3340, "udp" },
+ { "anet-h", { NULL }, 3341, "tcp" },
+ { "anet-h", { NULL }, 3341, "udp" },
+ { "webtie", { NULL }, 3342, "tcp" },
+ { "webtie", { NULL }, 3342, "udp" },
+ { "ms-cluster-net", { NULL }, 3343, "tcp" },
+ { "ms-cluster-net", { NULL }, 3343, "udp" },
+ { "bnt-manager", { NULL }, 3344, "tcp" },
+ { "bnt-manager", { NULL }, 3344, "udp" },
+ { "influence", { NULL }, 3345, "tcp" },
+ { "influence", { NULL }, 3345, "udp" },
+ { "trnsprntproxy", { NULL }, 3346, "tcp" },
+ { "trnsprntproxy", { NULL }, 3346, "udp" },
+ { "phoenix-rpc", { NULL }, 3347, "tcp" },
+ { "phoenix-rpc", { NULL }, 3347, "udp" },
+ { "pangolin-laser", { NULL }, 3348, "tcp" },
+ { "pangolin-laser", { NULL }, 3348, "udp" },
+ { "chevinservices", { NULL }, 3349, "tcp" },
+ { "chevinservices", { NULL }, 3349, "udp" },
+ { "findviatv", { NULL }, 3350, "tcp" },
+ { "findviatv", { NULL }, 3350, "udp" },
+ { "btrieve", { NULL }, 3351, "tcp" },
+ { "btrieve", { NULL }, 3351, "udp" },
+ { "ssql", { NULL }, 3352, "tcp" },
+ { "ssql", { NULL }, 3352, "udp" },
+ { "fatpipe", { NULL }, 3353, "tcp" },
+ { "fatpipe", { NULL }, 3353, "udp" },
+ { "suitjd", { NULL }, 3354, "tcp" },
+ { "suitjd", { NULL }, 3354, "udp" },
+ { "ordinox-dbase", { NULL }, 3355, "tcp" },
+ { "ordinox-dbase", { NULL }, 3355, "udp" },
+ { "upnotifyps", { NULL }, 3356, "tcp" },
+ { "upnotifyps", { NULL }, 3356, "udp" },
+ { "adtech-test", { NULL }, 3357, "tcp" },
+ { "adtech-test", { NULL }, 3357, "udp" },
+ { "mpsysrmsvr", { NULL }, 3358, "tcp" },
+ { "mpsysrmsvr", { NULL }, 3358, "udp" },
+ { "wg-netforce", { NULL }, 3359, "tcp" },
+ { "wg-netforce", { NULL }, 3359, "udp" },
+ { "kv-server", { NULL }, 3360, "tcp" },
+ { "kv-server", { NULL }, 3360, "udp" },
+ { "kv-agent", { NULL }, 3361, "tcp" },
+ { "kv-agent", { NULL }, 3361, "udp" },
+ { "dj-ilm", { NULL }, 3362, "tcp" },
+ { "dj-ilm", { NULL }, 3362, "udp" },
+ { "nati-vi-server", { NULL }, 3363, "tcp" },
+ { "nati-vi-server", { NULL }, 3363, "udp" },
+ { "creativeserver", { NULL }, 3364, "tcp" },
+ { "creativeserver", { NULL }, 3364, "udp" },
+ { "contentserver", { NULL }, 3365, "tcp" },
+ { "contentserver", { NULL }, 3365, "udp" },
+ { "creativepartnr", { NULL }, 3366, "tcp" },
+ { "creativepartnr", { NULL }, 3366, "udp" },
+ { "tip2", { NULL }, 3372, "tcp" },
+ { "tip2", { NULL }, 3372, "udp" },
+ { "lavenir-lm", { NULL }, 3373, "tcp" },
+ { "lavenir-lm", { NULL }, 3373, "udp" },
+ { "cluster-disc", { NULL }, 3374, "tcp" },
+ { "cluster-disc", { NULL }, 3374, "udp" },
+ { "vsnm-agent", { NULL }, 3375, "tcp" },
+ { "vsnm-agent", { NULL }, 3375, "udp" },
+ { "cdbroker", { NULL }, 3376, "tcp" },
+ { "cdbroker", { NULL }, 3376, "udp" },
+ { "cogsys-lm", { NULL }, 3377, "tcp" },
+ { "cogsys-lm", { NULL }, 3377, "udp" },
+ { "wsicopy", { NULL }, 3378, "tcp" },
+ { "wsicopy", { NULL }, 3378, "udp" },
+ { "socorfs", { NULL }, 3379, "tcp" },
+ { "socorfs", { NULL }, 3379, "udp" },
+ { "sns-channels", { NULL }, 3380, "tcp" },
+ { "sns-channels", { NULL }, 3380, "udp" },
+ { "geneous", { NULL }, 3381, "tcp" },
+ { "geneous", { NULL }, 3381, "udp" },
+ { "fujitsu-neat", { NULL }, 3382, "tcp" },
+ { "fujitsu-neat", { NULL }, 3382, "udp" },
+ { "esp-lm", { NULL }, 3383, "tcp" },
+ { "esp-lm", { NULL }, 3383, "udp" },
+ { "hp-clic", { NULL }, 3384, "tcp" },
+ { "hp-clic", { NULL }, 3384, "udp" },
+ { "qnxnetman", { NULL }, 3385, "tcp" },
+ { "qnxnetman", { NULL }, 3385, "udp" },
+ { "gprs-data", { NULL }, 3386, "tcp" },
+ { "gprs-sig", { NULL }, 3386, "udp" },
+ { "backroomnet", { NULL }, 3387, "tcp" },
+ { "backroomnet", { NULL }, 3387, "udp" },
+ { "cbserver", { NULL }, 3388, "tcp" },
+ { "cbserver", { NULL }, 3388, "udp" },
+ { "ms-wbt-server", { NULL }, 3389, "tcp" },
+ { "ms-wbt-server", { NULL }, 3389, "udp" },
+ { "dsc", { NULL }, 3390, "tcp" },
+ { "dsc", { NULL }, 3390, "udp" },
+ { "savant", { NULL }, 3391, "tcp" },
+ { "savant", { NULL }, 3391, "udp" },
+ { "efi-lm", { NULL }, 3392, "tcp" },
+ { "efi-lm", { NULL }, 3392, "udp" },
+ { "d2k-tapestry1", { NULL }, 3393, "tcp" },
+ { "d2k-tapestry1", { NULL }, 3393, "udp" },
+ { "d2k-tapestry2", { NULL }, 3394, "tcp" },
+ { "d2k-tapestry2", { NULL }, 3394, "udp" },
+ { "dyna-lm", { NULL }, 3395, "tcp" },
+ { "dyna-lm", { NULL }, 3395, "udp" },
+ { "printer_agent", { NULL }, 3396, "tcp" },
+ { "printer_agent", { NULL }, 3396, "udp" },
+ { "cloanto-lm", { NULL }, 3397, "tcp" },
+ { "cloanto-lm", { NULL }, 3397, "udp" },
+ { "mercantile", { NULL }, 3398, "tcp" },
+ { "mercantile", { NULL }, 3398, "udp" },
+ { "csms", { NULL }, 3399, "tcp" },
+ { "csms", { NULL }, 3399, "udp" },
+ { "csms2", { NULL }, 3400, "tcp" },
+ { "csms2", { NULL }, 3400, "udp" },
+ { "filecast", { NULL }, 3401, "tcp" },
+ { "filecast", { NULL }, 3401, "udp" },
+ { "fxaengine-net", { NULL }, 3402, "tcp" },
+ { "fxaengine-net", { NULL }, 3402, "udp" },
+ { "nokia-ann-ch1", { NULL }, 3405, "tcp" },
+ { "nokia-ann-ch1", { NULL }, 3405, "udp" },
+ { "nokia-ann-ch2", { NULL }, 3406, "tcp" },
+ { "nokia-ann-ch2", { NULL }, 3406, "udp" },
+ { "ldap-admin", { NULL }, 3407, "tcp" },
+ { "ldap-admin", { NULL }, 3407, "udp" },
+ { "BESApi", { NULL }, 3408, "tcp" },
+ { "BESApi", { NULL }, 3408, "udp" },
+ { "networklens", { NULL }, 3409, "tcp" },
+ { "networklens", { NULL }, 3409, "udp" },
+ { "networklenss", { NULL }, 3410, "tcp" },
+ { "networklenss", { NULL }, 3410, "udp" },
+ { "biolink-auth", { NULL }, 3411, "tcp" },
+ { "biolink-auth", { NULL }, 3411, "udp" },
+ { "xmlblaster", { NULL }, 3412, "tcp" },
+ { "xmlblaster", { NULL }, 3412, "udp" },
+ { "svnet", { NULL }, 3413, "tcp" },
+ { "svnet", { NULL }, 3413, "udp" },
+ { "wip-port", { NULL }, 3414, "tcp" },
+ { "wip-port", { NULL }, 3414, "udp" },
+ { "bcinameservice", { NULL }, 3415, "tcp" },
+ { "bcinameservice", { NULL }, 3415, "udp" },
+ { "commandport", { NULL }, 3416, "tcp" },
+ { "commandport", { NULL }, 3416, "udp" },
+ { "csvr", { NULL }, 3417, "tcp" },
+ { "csvr", { NULL }, 3417, "udp" },
+ { "rnmap", { NULL }, 3418, "tcp" },
+ { "rnmap", { NULL }, 3418, "udp" },
+ { "softaudit", { NULL }, 3419, "tcp" },
+ { "softaudit", { NULL }, 3419, "udp" },
+ { "ifcp-port", { NULL }, 3420, "tcp" },
+ { "ifcp-port", { NULL }, 3420, "udp" },
+ { "bmap", { NULL }, 3421, "tcp" },
+ { "bmap", { NULL }, 3421, "udp" },
+ { "rusb-sys-port", { NULL }, 3422, "tcp" },
+ { "rusb-sys-port", { NULL }, 3422, "udp" },
+ { "xtrm", { NULL }, 3423, "tcp" },
+ { "xtrm", { NULL }, 3423, "udp" },
+ { "xtrms", { NULL }, 3424, "tcp" },
+ { "xtrms", { NULL }, 3424, "udp" },
+ { "agps-port", { NULL }, 3425, "tcp" },
+ { "agps-port", { NULL }, 3425, "udp" },
+ { "arkivio", { NULL }, 3426, "tcp" },
+ { "arkivio", { NULL }, 3426, "udp" },
+ { "websphere-snmp", { NULL }, 3427, "tcp" },
+ { "websphere-snmp", { NULL }, 3427, "udp" },
+ { "twcss", { NULL }, 3428, "tcp" },
+ { "twcss", { NULL }, 3428, "udp" },
+ { "gcsp", { NULL }, 3429, "tcp" },
+ { "gcsp", { NULL }, 3429, "udp" },
+ { "ssdispatch", { NULL }, 3430, "tcp" },
+ { "ssdispatch", { NULL }, 3430, "udp" },
+ { "ndl-als", { NULL }, 3431, "tcp" },
+ { "ndl-als", { NULL }, 3431, "udp" },
+ { "osdcp", { NULL }, 3432, "tcp" },
+ { "osdcp", { NULL }, 3432, "udp" },
+ { "alta-smp", { NULL }, 3433, "tcp" },
+ { "alta-smp", { NULL }, 3433, "udp" },
+ { "opencm", { NULL }, 3434, "tcp" },
+ { "opencm", { NULL }, 3434, "udp" },
+ { "pacom", { NULL }, 3435, "tcp" },
+ { "pacom", { NULL }, 3435, "udp" },
+ { "gc-config", { NULL }, 3436, "tcp" },
+ { "gc-config", { NULL }, 3436, "udp" },
+ { "autocueds", { NULL }, 3437, "tcp" },
+ { "autocueds", { NULL }, 3437, "udp" },
+ { "spiral-admin", { NULL }, 3438, "tcp" },
+ { "spiral-admin", { NULL }, 3438, "udp" },
+ { "hri-port", { NULL }, 3439, "tcp" },
+ { "hri-port", { NULL }, 3439, "udp" },
+ { "ans-console", { NULL }, 3440, "tcp" },
+ { "ans-console", { NULL }, 3440, "udp" },
+ { "connect-client", { NULL }, 3441, "tcp" },
+ { "connect-client", { NULL }, 3441, "udp" },
+ { "connect-server", { NULL }, 3442, "tcp" },
+ { "connect-server", { NULL }, 3442, "udp" },
+ { "ov-nnm-websrv", { NULL }, 3443, "tcp" },
+ { "ov-nnm-websrv", { NULL }, 3443, "udp" },
+ { "denali-server", { NULL }, 3444, "tcp" },
+ { "denali-server", { NULL }, 3444, "udp" },
+ { "monp", { NULL }, 3445, "tcp" },
+ { "monp", { NULL }, 3445, "udp" },
+ { "3comfaxrpc", { NULL }, 3446, "tcp" },
+ { "3comfaxrpc", { NULL }, 3446, "udp" },
+ { "directnet", { NULL }, 3447, "tcp" },
+ { "directnet", { NULL }, 3447, "udp" },
+ { "dnc-port", { NULL }, 3448, "tcp" },
+ { "dnc-port", { NULL }, 3448, "udp" },
+ { "hotu-chat", { NULL }, 3449, "tcp" },
+ { "hotu-chat", { NULL }, 3449, "udp" },
+ { "castorproxy", { NULL }, 3450, "tcp" },
+ { "castorproxy", { NULL }, 3450, "udp" },
+ { "asam", { NULL }, 3451, "tcp" },
+ { "asam", { NULL }, 3451, "udp" },
+ { "sabp-signal", { NULL }, 3452, "tcp" },
+ { "sabp-signal", { NULL }, 3452, "udp" },
+ { "pscupd", { NULL }, 3453, "tcp" },
+ { "pscupd", { NULL }, 3453, "udp" },
+ { "mira", { NULL }, 3454, "tcp" },
+ { "prsvp", { NULL }, 3455, "tcp" },
+ { "prsvp", { NULL }, 3455, "udp" },
+ { "vat", { NULL }, 3456, "tcp" },
+ { "vat", { NULL }, 3456, "udp" },
+ { "vat-control", { NULL }, 3457, "tcp" },
+ { "vat-control", { NULL }, 3457, "udp" },
+ { "d3winosfi", { NULL }, 3458, "tcp" },
+ { "d3winosfi", { NULL }, 3458, "udp" },
+ { "integral", { NULL }, 3459, "tcp" },
+ { "integral", { NULL }, 3459, "udp" },
+ { "edm-manager", { NULL }, 3460, "tcp" },
+ { "edm-manager", { NULL }, 3460, "udp" },
+ { "edm-stager", { NULL }, 3461, "tcp" },
+ { "edm-stager", { NULL }, 3461, "udp" },
+ { "edm-std-notify", { NULL }, 3462, "tcp" },
+ { "edm-std-notify", { NULL }, 3462, "udp" },
+ { "edm-adm-notify", { NULL }, 3463, "tcp" },
+ { "edm-adm-notify", { NULL }, 3463, "udp" },
+ { "edm-mgr-sync", { NULL }, 3464, "tcp" },
+ { "edm-mgr-sync", { NULL }, 3464, "udp" },
+ { "edm-mgr-cntrl", { NULL }, 3465, "tcp" },
+ { "edm-mgr-cntrl", { NULL }, 3465, "udp" },
+ { "workflow", { NULL }, 3466, "tcp" },
+ { "workflow", { NULL }, 3466, "udp" },
+ { "rcst", { NULL }, 3467, "tcp" },
+ { "rcst", { NULL }, 3467, "udp" },
+ { "ttcmremotectrl", { NULL }, 3468, "tcp" },
+ { "ttcmremotectrl", { NULL }, 3468, "udp" },
+ { "pluribus", { NULL }, 3469, "tcp" },
+ { "pluribus", { NULL }, 3469, "udp" },
+ { "jt400", { NULL }, 3470, "tcp" },
+ { "jt400", { NULL }, 3470, "udp" },
+ { "jt400-ssl", { NULL }, 3471, "tcp" },
+ { "jt400-ssl", { NULL }, 3471, "udp" },
+ { "jaugsremotec-1", { NULL }, 3472, "tcp" },
+ { "jaugsremotec-1", { NULL }, 3472, "udp" },
+ { "jaugsremotec-2", { NULL }, 3473, "tcp" },
+ { "jaugsremotec-2", { NULL }, 3473, "udp" },
+ { "ttntspauto", { NULL }, 3474, "tcp" },
+ { "ttntspauto", { NULL }, 3474, "udp" },
+ { "genisar-port", { NULL }, 3475, "tcp" },
+ { "genisar-port", { NULL }, 3475, "udp" },
+ { "nppmp", { NULL }, 3476, "tcp" },
+ { "nppmp", { NULL }, 3476, "udp" },
+ { "ecomm", { NULL }, 3477, "tcp" },
+ { "ecomm", { NULL }, 3477, "udp" },
+ { "stun", { NULL }, 3478, "tcp" },
+ { "stun", { NULL }, 3478, "udp" },
+ { "turn", { NULL }, 3478, "tcp" },
+ { "turn", { NULL }, 3478, "udp" },
+ { "stun-behavior", { NULL }, 3478, "tcp" },
+ { "stun-behavior", { NULL }, 3478, "udp" },
+ { "twrpc", { NULL }, 3479, "tcp" },
+ { "twrpc", { NULL }, 3479, "udp" },
+ { "plethora", { NULL }, 3480, "tcp" },
+ { "plethora", { NULL }, 3480, "udp" },
+ { "cleanerliverc", { NULL }, 3481, "tcp" },
+ { "cleanerliverc", { NULL }, 3481, "udp" },
+ { "vulture", { NULL }, 3482, "tcp" },
+ { "vulture", { NULL }, 3482, "udp" },
+ { "slim-devices", { NULL }, 3483, "tcp" },
+ { "slim-devices", { NULL }, 3483, "udp" },
+ { "gbs-stp", { NULL }, 3484, "tcp" },
+ { "gbs-stp", { NULL }, 3484, "udp" },
+ { "celatalk", { NULL }, 3485, "tcp" },
+ { "celatalk", { NULL }, 3485, "udp" },
+ { "ifsf-hb-port", { NULL }, 3486, "tcp" },
+ { "ifsf-hb-port", { NULL }, 3486, "udp" },
+ { "ltctcp", { NULL }, 3487, "tcp" },
+ { "ltcudp", { NULL }, 3487, "udp" },
+ { "fs-rh-srv", { NULL }, 3488, "tcp" },
+ { "fs-rh-srv", { NULL }, 3488, "udp" },
+ { "dtp-dia", { NULL }, 3489, "tcp" },
+ { "dtp-dia", { NULL }, 3489, "udp" },
+ { "colubris", { NULL }, 3490, "tcp" },
+ { "colubris", { NULL }, 3490, "udp" },
+ { "swr-port", { NULL }, 3491, "tcp" },
+ { "swr-port", { NULL }, 3491, "udp" },
+ { "tvdumtray-port", { NULL }, 3492, "tcp" },
+ { "tvdumtray-port", { NULL }, 3492, "udp" },
+ { "nut", { NULL }, 3493, "tcp" },
+ { "nut", { NULL }, 3493, "udp" },
+ { "ibm3494", { NULL }, 3494, "tcp" },
+ { "ibm3494", { NULL }, 3494, "udp" },
+ { "seclayer-tcp", { NULL }, 3495, "tcp" },
+ { "seclayer-tcp", { NULL }, 3495, "udp" },
+ { "seclayer-tls", { NULL }, 3496, "tcp" },
+ { "seclayer-tls", { NULL }, 3496, "udp" },
+ { "ipether232port", { NULL }, 3497, "tcp" },
+ { "ipether232port", { NULL }, 3497, "udp" },
+ { "dashpas-port", { NULL }, 3498, "tcp" },
+ { "dashpas-port", { NULL }, 3498, "udp" },
+ { "sccip-media", { NULL }, 3499, "tcp" },
+ { "sccip-media", { NULL }, 3499, "udp" },
+ { "rtmp-port", { NULL }, 3500, "tcp" },
+ { "rtmp-port", { NULL }, 3500, "udp" },
+ { "isoft-p2p", { NULL }, 3501, "tcp" },
+ { "isoft-p2p", { NULL }, 3501, "udp" },
+ { "avinstalldisc", { NULL }, 3502, "tcp" },
+ { "avinstalldisc", { NULL }, 3502, "udp" },
+ { "lsp-ping", { NULL }, 3503, "tcp" },
+ { "lsp-ping", { NULL }, 3503, "udp" },
+ { "ironstorm", { NULL }, 3504, "tcp" },
+ { "ironstorm", { NULL }, 3504, "udp" },
+ { "ccmcomm", { NULL }, 3505, "tcp" },
+ { "ccmcomm", { NULL }, 3505, "udp" },
+ { "apc-3506", { NULL }, 3506, "tcp" },
+ { "apc-3506", { NULL }, 3506, "udp" },
+ { "nesh-broker", { NULL }, 3507, "tcp" },
+ { "nesh-broker", { NULL }, 3507, "udp" },
+ { "interactionweb", { NULL }, 3508, "tcp" },
+ { "interactionweb", { NULL }, 3508, "udp" },
+ { "vt-ssl", { NULL }, 3509, "tcp" },
+ { "vt-ssl", { NULL }, 3509, "udp" },
+ { "xss-port", { NULL }, 3510, "tcp" },
+ { "xss-port", { NULL }, 3510, "udp" },
+ { "webmail-2", { NULL }, 3511, "tcp" },
+ { "webmail-2", { NULL }, 3511, "udp" },
+ { "aztec", { NULL }, 3512, "tcp" },
+ { "aztec", { NULL }, 3512, "udp" },
+ { "arcpd", { NULL }, 3513, "tcp" },
+ { "arcpd", { NULL }, 3513, "udp" },
+ { "must-p2p", { NULL }, 3514, "tcp" },
+ { "must-p2p", { NULL }, 3514, "udp" },
+ { "must-backplane", { NULL }, 3515, "tcp" },
+ { "must-backplane", { NULL }, 3515, "udp" },
+ { "smartcard-port", { NULL }, 3516, "tcp" },
+ { "smartcard-port", { NULL }, 3516, "udp" },
+ { "802-11-iapp", { NULL }, 3517, "tcp" },
+ { "802-11-iapp", { NULL }, 3517, "udp" },
+ { "artifact-msg", { NULL }, 3518, "tcp" },
+ { "artifact-msg", { NULL }, 3518, "udp" },
+ { "nvmsgd", { NULL }, 3519, "tcp" },
+ { "galileo", { NULL }, 3519, "udp" },
+ { "galileolog", { NULL }, 3520, "tcp" },
+ { "galileolog", { NULL }, 3520, "udp" },
+ { "mc3ss", { NULL }, 3521, "tcp" },
+ { "mc3ss", { NULL }, 3521, "udp" },
+ { "nssocketport", { NULL }, 3522, "tcp" },
+ { "nssocketport", { NULL }, 3522, "udp" },
+ { "odeumservlink", { NULL }, 3523, "tcp" },
+ { "odeumservlink", { NULL }, 3523, "udp" },
+ { "ecmport", { NULL }, 3524, "tcp" },
+ { "ecmport", { NULL }, 3524, "udp" },
+ { "eisport", { NULL }, 3525, "tcp" },
+ { "eisport", { NULL }, 3525, "udp" },
+ { "starquiz-port", { NULL }, 3526, "tcp" },
+ { "starquiz-port", { NULL }, 3526, "udp" },
+ { "beserver-msg-q", { NULL }, 3527, "tcp" },
+ { "beserver-msg-q", { NULL }, 3527, "udp" },
+ { "jboss-iiop", { NULL }, 3528, "tcp" },
+ { "jboss-iiop", { NULL }, 3528, "udp" },
+ { "jboss-iiop-ssl", { NULL }, 3529, "tcp" },
+ { "jboss-iiop-ssl", { NULL }, 3529, "udp" },
+ { "gf", { NULL }, 3530, "tcp" },
+ { "gf", { NULL }, 3530, "udp" },
+ { "joltid", { NULL }, 3531, "tcp" },
+ { "joltid", { NULL }, 3531, "udp" },
+ { "raven-rmp", { NULL }, 3532, "tcp" },
+ { "raven-rmp", { NULL }, 3532, "udp" },
+ { "raven-rdp", { NULL }, 3533, "tcp" },
+ { "raven-rdp", { NULL }, 3533, "udp" },
+ { "urld-port", { NULL }, 3534, "tcp" },
+ { "urld-port", { NULL }, 3534, "udp" },
+ { "ms-la", { NULL }, 3535, "tcp" },
+ { "ms-la", { NULL }, 3535, "udp" },
+ { "snac", { NULL }, 3536, "tcp" },
+ { "snac", { NULL }, 3536, "udp" },
+ { "ni-visa-remote", { NULL }, 3537, "tcp" },
+ { "ni-visa-remote", { NULL }, 3537, "udp" },
+ { "ibm-diradm", { NULL }, 3538, "tcp" },
+ { "ibm-diradm", { NULL }, 3538, "udp" },
+ { "ibm-diradm-ssl", { NULL }, 3539, "tcp" },
+ { "ibm-diradm-ssl", { NULL }, 3539, "udp" },
+ { "pnrp-port", { NULL }, 3540, "tcp" },
+ { "pnrp-port", { NULL }, 3540, "udp" },
+ { "voispeed-port", { NULL }, 3541, "tcp" },
+ { "voispeed-port", { NULL }, 3541, "udp" },
+ { "hacl-monitor", { NULL }, 3542, "tcp" },
+ { "hacl-monitor", { NULL }, 3542, "udp" },
+ { "qftest-lookup", { NULL }, 3543, "tcp" },
+ { "qftest-lookup", { NULL }, 3543, "udp" },
+ { "teredo", { NULL }, 3544, "tcp" },
+ { "teredo", { NULL }, 3544, "udp" },
+ { "camac", { NULL }, 3545, "tcp" },
+ { "camac", { NULL }, 3545, "udp" },
+ { "symantec-sim", { NULL }, 3547, "tcp" },
+ { "symantec-sim", { NULL }, 3547, "udp" },
+ { "interworld", { NULL }, 3548, "tcp" },
+ { "interworld", { NULL }, 3548, "udp" },
+ { "tellumat-nms", { NULL }, 3549, "tcp" },
+ { "tellumat-nms", { NULL }, 3549, "udp" },
+ { "ssmpp", { NULL }, 3550, "tcp" },
+ { "ssmpp", { NULL }, 3550, "udp" },
+ { "apcupsd", { NULL }, 3551, "tcp" },
+ { "apcupsd", { NULL }, 3551, "udp" },
+ { "taserver", { NULL }, 3552, "tcp" },
+ { "taserver", { NULL }, 3552, "udp" },
+ { "rbr-discovery", { NULL }, 3553, "tcp" },
+ { "rbr-discovery", { NULL }, 3553, "udp" },
+ { "questnotify", { NULL }, 3554, "tcp" },
+ { "questnotify", { NULL }, 3554, "udp" },
+ { "razor", { NULL }, 3555, "tcp" },
+ { "razor", { NULL }, 3555, "udp" },
+ { "sky-transport", { NULL }, 3556, "tcp" },
+ { "sky-transport", { NULL }, 3556, "udp" },
+ { "personalos-001", { NULL }, 3557, "tcp" },
+ { "personalos-001", { NULL }, 3557, "udp" },
+ { "mcp-port", { NULL }, 3558, "tcp" },
+ { "mcp-port", { NULL }, 3558, "udp" },
+ { "cctv-port", { NULL }, 3559, "tcp" },
+ { "cctv-port", { NULL }, 3559, "udp" },
+ { "iniserve-port", { NULL }, 3560, "tcp" },
+ { "iniserve-port", { NULL }, 3560, "udp" },
+ { "bmc-onekey", { NULL }, 3561, "tcp" },
+ { "bmc-onekey", { NULL }, 3561, "udp" },
+ { "sdbproxy", { NULL }, 3562, "tcp" },
+ { "sdbproxy", { NULL }, 3562, "udp" },
+ { "watcomdebug", { NULL }, 3563, "tcp" },
+ { "watcomdebug", { NULL }, 3563, "udp" },
+ { "esimport", { NULL }, 3564, "tcp" },
+ { "esimport", { NULL }, 3564, "udp" },
+ { "m2pa", { NULL }, 3565, "tcp" },
+ { "m2pa", { NULL }, 3565, "sctp"},
+ { "quest-data-hub", { NULL }, 3566, "tcp" },
+ { "oap", { NULL }, 3567, "tcp" },
+ { "oap", { NULL }, 3567, "udp" },
+ { "oap-s", { NULL }, 3568, "tcp" },
+ { "oap-s", { NULL }, 3568, "udp" },
+ { "mbg-ctrl", { NULL }, 3569, "tcp" },
+ { "mbg-ctrl", { NULL }, 3569, "udp" },
+ { "mccwebsvr-port", { NULL }, 3570, "tcp" },
+ { "mccwebsvr-port", { NULL }, 3570, "udp" },
+ { "megardsvr-port", { NULL }, 3571, "tcp" },
+ { "megardsvr-port", { NULL }, 3571, "udp" },
+ { "megaregsvrport", { NULL }, 3572, "tcp" },
+ { "megaregsvrport", { NULL }, 3572, "udp" },
+ { "tag-ups-1", { NULL }, 3573, "tcp" },
+ { "tag-ups-1", { NULL }, 3573, "udp" },
+ { "dmaf-server", { NULL }, 3574, "tcp" },
+ { "dmaf-caster", { NULL }, 3574, "udp" },
+ { "ccm-port", { NULL }, 3575, "tcp" },
+ { "ccm-port", { NULL }, 3575, "udp" },
+ { "cmc-port", { NULL }, 3576, "tcp" },
+ { "cmc-port", { NULL }, 3576, "udp" },
+ { "config-port", { NULL }, 3577, "tcp" },
+ { "config-port", { NULL }, 3577, "udp" },
+ { "data-port", { NULL }, 3578, "tcp" },
+ { "data-port", { NULL }, 3578, "udp" },
+ { "ttat3lb", { NULL }, 3579, "tcp" },
+ { "ttat3lb", { NULL }, 3579, "udp" },
+ { "nati-svrloc", { NULL }, 3580, "tcp" },
+ { "nati-svrloc", { NULL }, 3580, "udp" },
+ { "kfxaclicensing", { NULL }, 3581, "tcp" },
+ { "kfxaclicensing", { NULL }, 3581, "udp" },
+ { "press", { NULL }, 3582, "tcp" },
+ { "press", { NULL }, 3582, "udp" },
+ { "canex-watch", { NULL }, 3583, "tcp" },
+ { "canex-watch", { NULL }, 3583, "udp" },
+ { "u-dbap", { NULL }, 3584, "tcp" },
+ { "u-dbap", { NULL }, 3584, "udp" },
+ { "emprise-lls", { NULL }, 3585, "tcp" },
+ { "emprise-lls", { NULL }, 3585, "udp" },
+ { "emprise-lsc", { NULL }, 3586, "tcp" },
+ { "emprise-lsc", { NULL }, 3586, "udp" },
+ { "p2pgroup", { NULL }, 3587, "tcp" },
+ { "p2pgroup", { NULL }, 3587, "udp" },
+ { "sentinel", { NULL }, 3588, "tcp" },
+ { "sentinel", { NULL }, 3588, "udp" },
+ { "isomair", { NULL }, 3589, "tcp" },
+ { "isomair", { NULL }, 3589, "udp" },
+ { "wv-csp-sms", { NULL }, 3590, "tcp" },
+ { "wv-csp-sms", { NULL }, 3590, "udp" },
+ { "gtrack-server", { NULL }, 3591, "tcp" },
+ { "gtrack-server", { NULL }, 3591, "udp" },
+ { "gtrack-ne", { NULL }, 3592, "tcp" },
+ { "gtrack-ne", { NULL }, 3592, "udp" },
+ { "bpmd", { NULL }, 3593, "tcp" },
+ { "bpmd", { NULL }, 3593, "udp" },
+ { "mediaspace", { NULL }, 3594, "tcp" },
+ { "mediaspace", { NULL }, 3594, "udp" },
+ { "shareapp", { NULL }, 3595, "tcp" },
+ { "shareapp", { NULL }, 3595, "udp" },
+ { "iw-mmogame", { NULL }, 3596, "tcp" },
+ { "iw-mmogame", { NULL }, 3596, "udp" },
+ { "a14", { NULL }, 3597, "tcp" },
+ { "a14", { NULL }, 3597, "udp" },
+ { "a15", { NULL }, 3598, "tcp" },
+ { "a15", { NULL }, 3598, "udp" },
+ { "quasar-server", { NULL }, 3599, "tcp" },
+ { "quasar-server", { NULL }, 3599, "udp" },
+ { "trap-daemon", { NULL }, 3600, "tcp" },
+ { "trap-daemon", { NULL }, 3600, "udp" },
+ { "visinet-gui", { NULL }, 3601, "tcp" },
+ { "visinet-gui", { NULL }, 3601, "udp" },
+ { "infiniswitchcl", { NULL }, 3602, "tcp" },
+ { "infiniswitchcl", { NULL }, 3602, "udp" },
+ { "int-rcv-cntrl", { NULL }, 3603, "tcp" },
+ { "int-rcv-cntrl", { NULL }, 3603, "udp" },
+ { "bmc-jmx-port", { NULL }, 3604, "tcp" },
+ { "bmc-jmx-port", { NULL }, 3604, "udp" },
+ { "comcam-io", { NULL }, 3605, "tcp" },
+ { "comcam-io", { NULL }, 3605, "udp" },
+ { "splitlock", { NULL }, 3606, "tcp" },
+ { "splitlock", { NULL }, 3606, "udp" },
+ { "precise-i3", { NULL }, 3607, "tcp" },
+ { "precise-i3", { NULL }, 3607, "udp" },
+ { "trendchip-dcp", { NULL }, 3608, "tcp" },
+ { "trendchip-dcp", { NULL }, 3608, "udp" },
+ { "cpdi-pidas-cm", { NULL }, 3609, "tcp" },
+ { "cpdi-pidas-cm", { NULL }, 3609, "udp" },
+ { "echonet", { NULL }, 3610, "tcp" },
+ { "echonet", { NULL }, 3610, "udp" },
+ { "six-degrees", { NULL }, 3611, "tcp" },
+ { "six-degrees", { NULL }, 3611, "udp" },
+ { "hp-dataprotect", { NULL }, 3612, "tcp" },
+ { "hp-dataprotect", { NULL }, 3612, "udp" },
+ { "alaris-disc", { NULL }, 3613, "tcp" },
+ { "alaris-disc", { NULL }, 3613, "udp" },
+ { "sigma-port", { NULL }, 3614, "tcp" },
+ { "sigma-port", { NULL }, 3614, "udp" },
+ { "start-network", { NULL }, 3615, "tcp" },
+ { "start-network", { NULL }, 3615, "udp" },
+ { "cd3o-protocol", { NULL }, 3616, "tcp" },
+ { "cd3o-protocol", { NULL }, 3616, "udp" },
+ { "sharp-server", { NULL }, 3617, "tcp" },
+ { "sharp-server", { NULL }, 3617, "udp" },
+ { "aairnet-1", { NULL }, 3618, "tcp" },
+ { "aairnet-1", { NULL }, 3618, "udp" },
+ { "aairnet-2", { NULL }, 3619, "tcp" },
+ { "aairnet-2", { NULL }, 3619, "udp" },
+ { "ep-pcp", { NULL }, 3620, "tcp" },
+ { "ep-pcp", { NULL }, 3620, "udp" },
+ { "ep-nsp", { NULL }, 3621, "tcp" },
+ { "ep-nsp", { NULL }, 3621, "udp" },
+ { "ff-lr-port", { NULL }, 3622, "tcp" },
+ { "ff-lr-port", { NULL }, 3622, "udp" },
+ { "haipe-discover", { NULL }, 3623, "tcp" },
+ { "haipe-discover", { NULL }, 3623, "udp" },
+ { "dist-upgrade", { NULL }, 3624, "tcp" },
+ { "dist-upgrade", { NULL }, 3624, "udp" },
+ { "volley", { NULL }, 3625, "tcp" },
+ { "volley", { NULL }, 3625, "udp" },
+ { "bvcdaemon-port", { NULL }, 3626, "tcp" },
+ { "bvcdaemon-port", { NULL }, 3626, "udp" },
+ { "jamserverport", { NULL }, 3627, "tcp" },
+ { "jamserverport", { NULL }, 3627, "udp" },
+ { "ept-machine", { NULL }, 3628, "tcp" },
+ { "ept-machine", { NULL }, 3628, "udp" },
+ { "escvpnet", { NULL }, 3629, "tcp" },
+ { "escvpnet", { NULL }, 3629, "udp" },
+ { "cs-remote-db", { NULL }, 3630, "tcp" },
+ { "cs-remote-db", { NULL }, 3630, "udp" },
+ { "cs-services", { NULL }, 3631, "tcp" },
+ { "cs-services", { NULL }, 3631, "udp" },
+ { "distcc", { NULL }, 3632, "tcp" },
+ { "distcc", { NULL }, 3632, "udp" },
+ { "wacp", { NULL }, 3633, "tcp" },
+ { "wacp", { NULL }, 3633, "udp" },
+ { "hlibmgr", { NULL }, 3634, "tcp" },
+ { "hlibmgr", { NULL }, 3634, "udp" },
+ { "sdo", { NULL }, 3635, "tcp" },
+ { "sdo", { NULL }, 3635, "udp" },
+ { "servistaitsm", { NULL }, 3636, "tcp" },
+ { "servistaitsm", { NULL }, 3636, "udp" },
+ { "scservp", { NULL }, 3637, "tcp" },
+ { "scservp", { NULL }, 3637, "udp" },
+ { "ehp-backup", { NULL }, 3638, "tcp" },
+ { "ehp-backup", { NULL }, 3638, "udp" },
+ { "xap-ha", { NULL }, 3639, "tcp" },
+ { "xap-ha", { NULL }, 3639, "udp" },
+ { "netplay-port1", { NULL }, 3640, "tcp" },
+ { "netplay-port1", { NULL }, 3640, "udp" },
+ { "netplay-port2", { NULL }, 3641, "tcp" },
+ { "netplay-port2", { NULL }, 3641, "udp" },
+ { "juxml-port", { NULL }, 3642, "tcp" },
+ { "juxml-port", { NULL }, 3642, "udp" },
+ { "audiojuggler", { NULL }, 3643, "tcp" },
+ { "audiojuggler", { NULL }, 3643, "udp" },
+ { "ssowatch", { NULL }, 3644, "tcp" },
+ { "ssowatch", { NULL }, 3644, "udp" },
+ { "cyc", { NULL }, 3645, "tcp" },
+ { "cyc", { NULL }, 3645, "udp" },
+ { "xss-srv-port", { NULL }, 3646, "tcp" },
+ { "xss-srv-port", { NULL }, 3646, "udp" },
+ { "splitlock-gw", { NULL }, 3647, "tcp" },
+ { "splitlock-gw", { NULL }, 3647, "udp" },
+ { "fjcp", { NULL }, 3648, "tcp" },
+ { "fjcp", { NULL }, 3648, "udp" },
+ { "nmmp", { NULL }, 3649, "tcp" },
+ { "nmmp", { NULL }, 3649, "udp" },
+ { "prismiq-plugin", { NULL }, 3650, "tcp" },
+ { "prismiq-plugin", { NULL }, 3650, "udp" },
+ { "xrpc-registry", { NULL }, 3651, "tcp" },
+ { "xrpc-registry", { NULL }, 3651, "udp" },
+ { "vxcrnbuport", { NULL }, 3652, "tcp" },
+ { "vxcrnbuport", { NULL }, 3652, "udp" },
+ { "tsp", { NULL }, 3653, "tcp" },
+ { "tsp", { NULL }, 3653, "udp" },
+ { "vaprtm", { NULL }, 3654, "tcp" },
+ { "vaprtm", { NULL }, 3654, "udp" },
+ { "abatemgr", { NULL }, 3655, "tcp" },
+ { "abatemgr", { NULL }, 3655, "udp" },
+ { "abatjss", { NULL }, 3656, "tcp" },
+ { "abatjss", { NULL }, 3656, "udp" },
+ { "immedianet-bcn", { NULL }, 3657, "tcp" },
+ { "immedianet-bcn", { NULL }, 3657, "udp" },
+ { "ps-ams", { NULL }, 3658, "tcp" },
+ { "ps-ams", { NULL }, 3658, "udp" },
+ { "apple-sasl", { NULL }, 3659, "tcp" },
+ { "apple-sasl", { NULL }, 3659, "udp" },
+ { "can-nds-ssl", { NULL }, 3660, "tcp" },
+ { "can-nds-ssl", { NULL }, 3660, "udp" },
+ { "can-ferret-ssl", { NULL }, 3661, "tcp" },
+ { "can-ferret-ssl", { NULL }, 3661, "udp" },
+ { "pserver", { NULL }, 3662, "tcp" },
+ { "pserver", { NULL }, 3662, "udp" },
+ { "dtp", { NULL }, 3663, "tcp" },
+ { "dtp", { NULL }, 3663, "udp" },
+ { "ups-engine", { NULL }, 3664, "tcp" },
+ { "ups-engine", { NULL }, 3664, "udp" },
+ { "ent-engine", { NULL }, 3665, "tcp" },
+ { "ent-engine", { NULL }, 3665, "udp" },
+ { "eserver-pap", { NULL }, 3666, "tcp" },
+ { "eserver-pap", { NULL }, 3666, "udp" },
+ { "infoexch", { NULL }, 3667, "tcp" },
+ { "infoexch", { NULL }, 3667, "udp" },
+ { "dell-rm-port", { NULL }, 3668, "tcp" },
+ { "dell-rm-port", { NULL }, 3668, "udp" },
+ { "casanswmgmt", { NULL }, 3669, "tcp" },
+ { "casanswmgmt", { NULL }, 3669, "udp" },
+ { "smile", { NULL }, 3670, "tcp" },
+ { "smile", { NULL }, 3670, "udp" },
+ { "efcp", { NULL }, 3671, "tcp" },
+ { "efcp", { NULL }, 3671, "udp" },
+ { "lispworks-orb", { NULL }, 3672, "tcp" },
+ { "lispworks-orb", { NULL }, 3672, "udp" },
+ { "mediavault-gui", { NULL }, 3673, "tcp" },
+ { "mediavault-gui", { NULL }, 3673, "udp" },
+ { "wininstall-ipc", { NULL }, 3674, "tcp" },
+ { "wininstall-ipc", { NULL }, 3674, "udp" },
+ { "calltrax", { NULL }, 3675, "tcp" },
+ { "calltrax", { NULL }, 3675, "udp" },
+ { "va-pacbase", { NULL }, 3676, "tcp" },
+ { "va-pacbase", { NULL }, 3676, "udp" },
+ { "roverlog", { NULL }, 3677, "tcp" },
+ { "roverlog", { NULL }, 3677, "udp" },
+ { "ipr-dglt", { NULL }, 3678, "tcp" },
+ { "ipr-dglt", { NULL }, 3678, "udp" },
+ { "newton-dock", { NULL }, 3679, "tcp" },
+ { "newton-dock", { NULL }, 3679, "udp" },
+ { "npds-tracker", { NULL }, 3680, "tcp" },
+ { "npds-tracker", { NULL }, 3680, "udp" },
+ { "bts-x73", { NULL }, 3681, "tcp" },
+ { "bts-x73", { NULL }, 3681, "udp" },
+ { "cas-mapi", { NULL }, 3682, "tcp" },
+ { "cas-mapi", { NULL }, 3682, "udp" },
+ { "bmc-ea", { NULL }, 3683, "tcp" },
+ { "bmc-ea", { NULL }, 3683, "udp" },
+ { "faxstfx-port", { NULL }, 3684, "tcp" },
+ { "faxstfx-port", { NULL }, 3684, "udp" },
+ { "dsx-agent", { NULL }, 3685, "tcp" },
+ { "dsx-agent", { NULL }, 3685, "udp" },
+ { "tnmpv2", { NULL }, 3686, "tcp" },
+ { "tnmpv2", { NULL }, 3686, "udp" },
+ { "simple-push", { NULL }, 3687, "tcp" },
+ { "simple-push", { NULL }, 3687, "udp" },
+ { "simple-push-s", { NULL }, 3688, "tcp" },
+ { "simple-push-s", { NULL }, 3688, "udp" },
+ { "daap", { NULL }, 3689, "tcp" },
+ { "daap", { NULL }, 3689, "udp" },
+ { "svn", { NULL }, 3690, "tcp" },
+ { "svn", { NULL }, 3690, "udp" },
+ { "magaya-network", { NULL }, 3691, "tcp" },
+ { "magaya-network", { NULL }, 3691, "udp" },
+ { "intelsync", { NULL }, 3692, "tcp" },
+ { "intelsync", { NULL }, 3692, "udp" },
+ { "bmc-data-coll", { NULL }, 3695, "tcp" },
+ { "bmc-data-coll", { NULL }, 3695, "udp" },
+ { "telnetcpcd", { NULL }, 3696, "tcp" },
+ { "telnetcpcd", { NULL }, 3696, "udp" },
+ { "nw-license", { NULL }, 3697, "tcp" },
+ { "nw-license", { NULL }, 3697, "udp" },
+ { "sagectlpanel", { NULL }, 3698, "tcp" },
+ { "sagectlpanel", { NULL }, 3698, "udp" },
+ { "kpn-icw", { NULL }, 3699, "tcp" },
+ { "kpn-icw", { NULL }, 3699, "udp" },
+ { "lrs-paging", { NULL }, 3700, "tcp" },
+ { "lrs-paging", { NULL }, 3700, "udp" },
+ { "netcelera", { NULL }, 3701, "tcp" },
+ { "netcelera", { NULL }, 3701, "udp" },
+ { "ws-discovery", { NULL }, 3702, "tcp" },
+ { "ws-discovery", { NULL }, 3702, "udp" },
+ { "adobeserver-3", { NULL }, 3703, "tcp" },
+ { "adobeserver-3", { NULL }, 3703, "udp" },
+ { "adobeserver-4", { NULL }, 3704, "tcp" },
+ { "adobeserver-4", { NULL }, 3704, "udp" },
+ { "adobeserver-5", { NULL }, 3705, "tcp" },
+ { "adobeserver-5", { NULL }, 3705, "udp" },
+ { "rt-event", { NULL }, 3706, "tcp" },
+ { "rt-event", { NULL }, 3706, "udp" },
+ { "rt-event-s", { NULL }, 3707, "tcp" },
+ { "rt-event-s", { NULL }, 3707, "udp" },
+ { "sun-as-iiops", { NULL }, 3708, "tcp" },
+ { "sun-as-iiops", { NULL }, 3708, "udp" },
+ { "ca-idms", { NULL }, 3709, "tcp" },
+ { "ca-idms", { NULL }, 3709, "udp" },
+ { "portgate-auth", { NULL }, 3710, "tcp" },
+ { "portgate-auth", { NULL }, 3710, "udp" },
+ { "edb-server2", { NULL }, 3711, "tcp" },
+ { "edb-server2", { NULL }, 3711, "udp" },
+ { "sentinel-ent", { NULL }, 3712, "tcp" },
+ { "sentinel-ent", { NULL }, 3712, "udp" },
+ { "tftps", { NULL }, 3713, "tcp" },
+ { "tftps", { NULL }, 3713, "udp" },
+ { "delos-dms", { NULL }, 3714, "tcp" },
+ { "delos-dms", { NULL }, 3714, "udp" },
+ { "anoto-rendezv", { NULL }, 3715, "tcp" },
+ { "anoto-rendezv", { NULL }, 3715, "udp" },
+ { "wv-csp-sms-cir", { NULL }, 3716, "tcp" },
+ { "wv-csp-sms-cir", { NULL }, 3716, "udp" },
+ { "wv-csp-udp-cir", { NULL }, 3717, "tcp" },
+ { "wv-csp-udp-cir", { NULL }, 3717, "udp" },
+ { "opus-services", { NULL }, 3718, "tcp" },
+ { "opus-services", { NULL }, 3718, "udp" },
+ { "itelserverport", { NULL }, 3719, "tcp" },
+ { "itelserverport", { NULL }, 3719, "udp" },
+ { "ufastro-instr", { NULL }, 3720, "tcp" },
+ { "ufastro-instr", { NULL }, 3720, "udp" },
+ { "xsync", { NULL }, 3721, "tcp" },
+ { "xsync", { NULL }, 3721, "udp" },
+ { "xserveraid", { NULL }, 3722, "tcp" },
+ { "xserveraid", { NULL }, 3722, "udp" },
+ { "sychrond", { NULL }, 3723, "tcp" },
+ { "sychrond", { NULL }, 3723, "udp" },
+ { "blizwow", { NULL }, 3724, "tcp" },
+ { "blizwow", { NULL }, 3724, "udp" },
+ { "na-er-tip", { NULL }, 3725, "tcp" },
+ { "na-er-tip", { NULL }, 3725, "udp" },
+ { "array-manager", { NULL }, 3726, "tcp" },
+ { "array-manager", { NULL }, 3726, "udp" },
+ { "e-mdu", { NULL }, 3727, "tcp" },
+ { "e-mdu", { NULL }, 3727, "udp" },
+ { "e-woa", { NULL }, 3728, "tcp" },
+ { "e-woa", { NULL }, 3728, "udp" },
+ { "fksp-audit", { NULL }, 3729, "tcp" },
+ { "fksp-audit", { NULL }, 3729, "udp" },
+ { "client-ctrl", { NULL }, 3730, "tcp" },
+ { "client-ctrl", { NULL }, 3730, "udp" },
+ { "smap", { NULL }, 3731, "tcp" },
+ { "smap", { NULL }, 3731, "udp" },
+ { "m-wnn", { NULL }, 3732, "tcp" },
+ { "m-wnn", { NULL }, 3732, "udp" },
+ { "multip-msg", { NULL }, 3733, "tcp" },
+ { "multip-msg", { NULL }, 3733, "udp" },
+ { "synel-data", { NULL }, 3734, "tcp" },
+ { "synel-data", { NULL }, 3734, "udp" },
+ { "pwdis", { NULL }, 3735, "tcp" },
+ { "pwdis", { NULL }, 3735, "udp" },
+ { "rs-rmi", { NULL }, 3736, "tcp" },
+ { "rs-rmi", { NULL }, 3736, "udp" },
+ { "xpanel", { NULL }, 3737, "tcp" },
+ { "versatalk", { NULL }, 3738, "tcp" },
+ { "versatalk", { NULL }, 3738, "udp" },
+ { "launchbird-lm", { NULL }, 3739, "tcp" },
+ { "launchbird-lm", { NULL }, 3739, "udp" },
+ { "heartbeat", { NULL }, 3740, "tcp" },
+ { "heartbeat", { NULL }, 3740, "udp" },
+ { "wysdma", { NULL }, 3741, "tcp" },
+ { "wysdma", { NULL }, 3741, "udp" },
+ { "cst-port", { NULL }, 3742, "tcp" },
+ { "cst-port", { NULL }, 3742, "udp" },
+ { "ipcs-command", { NULL }, 3743, "tcp" },
+ { "ipcs-command", { NULL }, 3743, "udp" },
+ { "sasg", { NULL }, 3744, "tcp" },
+ { "sasg", { NULL }, 3744, "udp" },
+ { "gw-call-port", { NULL }, 3745, "tcp" },
+ { "gw-call-port", { NULL }, 3745, "udp" },
+ { "linktest", { NULL }, 3746, "tcp" },
+ { "linktest", { NULL }, 3746, "udp" },
+ { "linktest-s", { NULL }, 3747, "tcp" },
+ { "linktest-s", { NULL }, 3747, "udp" },
+ { "webdata", { NULL }, 3748, "tcp" },
+ { "webdata", { NULL }, 3748, "udp" },
+ { "cimtrak", { NULL }, 3749, "tcp" },
+ { "cimtrak", { NULL }, 3749, "udp" },
+ { "cbos-ip-port", { NULL }, 3750, "tcp" },
+ { "cbos-ip-port", { NULL }, 3750, "udp" },
+ { "gprs-cube", { NULL }, 3751, "tcp" },
+ { "gprs-cube", { NULL }, 3751, "udp" },
+ { "vipremoteagent", { NULL }, 3752, "tcp" },
+ { "vipremoteagent", { NULL }, 3752, "udp" },
+ { "nattyserver", { NULL }, 3753, "tcp" },
+ { "nattyserver", { NULL }, 3753, "udp" },
+ { "timestenbroker", { NULL }, 3754, "tcp" },
+ { "timestenbroker", { NULL }, 3754, "udp" },
+ { "sas-remote-hlp", { NULL }, 3755, "tcp" },
+ { "sas-remote-hlp", { NULL }, 3755, "udp" },
+ { "canon-capt", { NULL }, 3756, "tcp" },
+ { "canon-capt", { NULL }, 3756, "udp" },
+ { "grf-port", { NULL }, 3757, "tcp" },
+ { "grf-port", { NULL }, 3757, "udp" },
+ { "apw-registry", { NULL }, 3758, "tcp" },
+ { "apw-registry", { NULL }, 3758, "udp" },
+ { "exapt-lmgr", { NULL }, 3759, "tcp" },
+ { "exapt-lmgr", { NULL }, 3759, "udp" },
+ { "adtempusclient", { NULL }, 3760, "tcp" },
+ { "adtempusclient", { NULL }, 3760, "udp" },
+ { "gsakmp", { NULL }, 3761, "tcp" },
+ { "gsakmp", { NULL }, 3761, "udp" },
+ { "gbs-smp", { NULL }, 3762, "tcp" },
+ { "gbs-smp", { NULL }, 3762, "udp" },
+ { "xo-wave", { NULL }, 3763, "tcp" },
+ { "xo-wave", { NULL }, 3763, "udp" },
+ { "mni-prot-rout", { NULL }, 3764, "tcp" },
+ { "mni-prot-rout", { NULL }, 3764, "udp" },
+ { "rtraceroute", { NULL }, 3765, "tcp" },
+ { "rtraceroute", { NULL }, 3765, "udp" },
+ { "listmgr-port", { NULL }, 3767, "tcp" },
+ { "listmgr-port", { NULL }, 3767, "udp" },
+ { "rblcheckd", { NULL }, 3768, "tcp" },
+ { "rblcheckd", { NULL }, 3768, "udp" },
+ { "haipe-otnk", { NULL }, 3769, "tcp" },
+ { "haipe-otnk", { NULL }, 3769, "udp" },
+ { "cindycollab", { NULL }, 3770, "tcp" },
+ { "cindycollab", { NULL }, 3770, "udp" },
+ { "paging-port", { NULL }, 3771, "tcp" },
+ { "paging-port", { NULL }, 3771, "udp" },
+ { "ctp", { NULL }, 3772, "tcp" },
+ { "ctp", { NULL }, 3772, "udp" },
+ { "ctdhercules", { NULL }, 3773, "tcp" },
+ { "ctdhercules", { NULL }, 3773, "udp" },
+ { "zicom", { NULL }, 3774, "tcp" },
+ { "zicom", { NULL }, 3774, "udp" },
+ { "ispmmgr", { NULL }, 3775, "tcp" },
+ { "ispmmgr", { NULL }, 3775, "udp" },
+ { "dvcprov-port", { NULL }, 3776, "tcp" },
+ { "dvcprov-port", { NULL }, 3776, "udp" },
+ { "jibe-eb", { NULL }, 3777, "tcp" },
+ { "jibe-eb", { NULL }, 3777, "udp" },
+ { "c-h-it-port", { NULL }, 3778, "tcp" },
+ { "c-h-it-port", { NULL }, 3778, "udp" },
+ { "cognima", { NULL }, 3779, "tcp" },
+ { "cognima", { NULL }, 3779, "udp" },
+ { "nnp", { NULL }, 3780, "tcp" },
+ { "nnp", { NULL }, 3780, "udp" },
+ { "abcvoice-port", { NULL }, 3781, "tcp" },
+ { "abcvoice-port", { NULL }, 3781, "udp" },
+ { "iso-tp0s", { NULL }, 3782, "tcp" },
+ { "iso-tp0s", { NULL }, 3782, "udp" },
+ { "bim-pem", { NULL }, 3783, "tcp" },
+ { "bim-pem", { NULL }, 3783, "udp" },
+ { "bfd-control", { NULL }, 3784, "tcp" },
+ { "bfd-control", { NULL }, 3784, "udp" },
+ { "bfd-echo", { NULL }, 3785, "tcp" },
+ { "bfd-echo", { NULL }, 3785, "udp" },
+ { "upstriggervsw", { NULL }, 3786, "tcp" },
+ { "upstriggervsw", { NULL }, 3786, "udp" },
+ { "fintrx", { NULL }, 3787, "tcp" },
+ { "fintrx", { NULL }, 3787, "udp" },
+ { "isrp-port", { NULL }, 3788, "tcp" },
+ { "isrp-port", { NULL }, 3788, "udp" },
+ { "remotedeploy", { NULL }, 3789, "tcp" },
+ { "remotedeploy", { NULL }, 3789, "udp" },
+ { "quickbooksrds", { NULL }, 3790, "tcp" },
+ { "quickbooksrds", { NULL }, 3790, "udp" },
+ { "tvnetworkvideo", { NULL }, 3791, "tcp" },
+ { "tvnetworkvideo", { NULL }, 3791, "udp" },
+ { "sitewatch", { NULL }, 3792, "tcp" },
+ { "sitewatch", { NULL }, 3792, "udp" },
+ { "dcsoftware", { NULL }, 3793, "tcp" },
+ { "dcsoftware", { NULL }, 3793, "udp" },
+ { "jaus", { NULL }, 3794, "tcp" },
+ { "jaus", { NULL }, 3794, "udp" },
+ { "myblast", { NULL }, 3795, "tcp" },
+ { "myblast", { NULL }, 3795, "udp" },
+ { "spw-dialer", { NULL }, 3796, "tcp" },
+ { "spw-dialer", { NULL }, 3796, "udp" },
+ { "idps", { NULL }, 3797, "tcp" },
+ { "idps", { NULL }, 3797, "udp" },
+ { "minilock", { NULL }, 3798, "tcp" },
+ { "minilock", { NULL }, 3798, "udp" },
+ { "radius-dynauth", { NULL }, 3799, "tcp" },
+ { "radius-dynauth", { NULL }, 3799, "udp" },
+ { "pwgpsi", { NULL }, 3800, "tcp" },
+ { "pwgpsi", { NULL }, 3800, "udp" },
+ { "ibm-mgr", { NULL }, 3801, "tcp" },
+ { "ibm-mgr", { NULL }, 3801, "udp" },
+ { "vhd", { NULL }, 3802, "tcp" },
+ { "vhd", { NULL }, 3802, "udp" },
+ { "soniqsync", { NULL }, 3803, "tcp" },
+ { "soniqsync", { NULL }, 3803, "udp" },
+ { "iqnet-port", { NULL }, 3804, "tcp" },
+ { "iqnet-port", { NULL }, 3804, "udp" },
+ { "tcpdataserver", { NULL }, 3805, "tcp" },
+ { "tcpdataserver", { NULL }, 3805, "udp" },
+ { "wsmlb", { NULL }, 3806, "tcp" },
+ { "wsmlb", { NULL }, 3806, "udp" },
+ { "spugna", { NULL }, 3807, "tcp" },
+ { "spugna", { NULL }, 3807, "udp" },
+ { "sun-as-iiops-ca", { NULL }, 3808, "tcp" },
+ { "sun-as-iiops-ca", { NULL }, 3808, "udp" },
+ { "apocd", { NULL }, 3809, "tcp" },
+ { "apocd", { NULL }, 3809, "udp" },
+ { "wlanauth", { NULL }, 3810, "tcp" },
+ { "wlanauth", { NULL }, 3810, "udp" },
+ { "amp", { NULL }, 3811, "tcp" },
+ { "amp", { NULL }, 3811, "udp" },
+ { "neto-wol-server", { NULL }, 3812, "tcp" },
+ { "neto-wol-server", { NULL }, 3812, "udp" },
+ { "rap-ip", { NULL }, 3813, "tcp" },
+ { "rap-ip", { NULL }, 3813, "udp" },
+ { "neto-dcs", { NULL }, 3814, "tcp" },
+ { "neto-dcs", { NULL }, 3814, "udp" },
+ { "lansurveyorxml", { NULL }, 3815, "tcp" },
+ { "lansurveyorxml", { NULL }, 3815, "udp" },
+ { "sunlps-http", { NULL }, 3816, "tcp" },
+ { "sunlps-http", { NULL }, 3816, "udp" },
+ { "tapeware", { NULL }, 3817, "tcp" },
+ { "tapeware", { NULL }, 3817, "udp" },
+ { "crinis-hb", { NULL }, 3818, "tcp" },
+ { "crinis-hb", { NULL }, 3818, "udp" },
+ { "epl-slp", { NULL }, 3819, "tcp" },
+ { "epl-slp", { NULL }, 3819, "udp" },
+ { "scp", { NULL }, 3820, "tcp" },
+ { "scp", { NULL }, 3820, "udp" },
+ { "pmcp", { NULL }, 3821, "tcp" },
+ { "pmcp", { NULL }, 3821, "udp" },
+ { "acp-discovery", { NULL }, 3822, "tcp" },
+ { "acp-discovery", { NULL }, 3822, "udp" },
+ { "acp-conduit", { NULL }, 3823, "tcp" },
+ { "acp-conduit", { NULL }, 3823, "udp" },
+ { "acp-policy", { NULL }, 3824, "tcp" },
+ { "acp-policy", { NULL }, 3824, "udp" },
+ { "ffserver", { NULL }, 3825, "tcp" },
+ { "ffserver", { NULL }, 3825, "udp" },
+ { "wormux", { NULL }, 3826, "tcp" },
+ { "wormux", { NULL }, 3826, "udp" },
+ { "netmpi", { NULL }, 3827, "tcp" },
+ { "netmpi", { NULL }, 3827, "udp" },
+ { "neteh", { NULL }, 3828, "tcp" },
+ { "neteh", { NULL }, 3828, "udp" },
+ { "neteh-ext", { NULL }, 3829, "tcp" },
+ { "neteh-ext", { NULL }, 3829, "udp" },
+ { "cernsysmgmtagt", { NULL }, 3830, "tcp" },
+ { "cernsysmgmtagt", { NULL }, 3830, "udp" },
+ { "dvapps", { NULL }, 3831, "tcp" },
+ { "dvapps", { NULL }, 3831, "udp" },
+ { "xxnetserver", { NULL }, 3832, "tcp" },
+ { "xxnetserver", { NULL }, 3832, "udp" },
+ { "aipn-auth", { NULL }, 3833, "tcp" },
+ { "aipn-auth", { NULL }, 3833, "udp" },
+ { "spectardata", { NULL }, 3834, "tcp" },
+ { "spectardata", { NULL }, 3834, "udp" },
+ { "spectardb", { NULL }, 3835, "tcp" },
+ { "spectardb", { NULL }, 3835, "udp" },
+ { "markem-dcp", { NULL }, 3836, "tcp" },
+ { "markem-dcp", { NULL }, 3836, "udp" },
+ { "mkm-discovery", { NULL }, 3837, "tcp" },
+ { "mkm-discovery", { NULL }, 3837, "udp" },
+ { "sos", { NULL }, 3838, "tcp" },
+ { "sos", { NULL }, 3838, "udp" },
+ { "amx-rms", { NULL }, 3839, "tcp" },
+ { "amx-rms", { NULL }, 3839, "udp" },
+ { "flirtmitmir", { NULL }, 3840, "tcp" },
+ { "flirtmitmir", { NULL }, 3840, "udp" },
+ { "zfirm-shiprush3", { NULL }, 3841, "tcp" },
+ { "zfirm-shiprush3", { NULL }, 3841, "udp" },
+ { "nhci", { NULL }, 3842, "tcp" },
+ { "nhci", { NULL }, 3842, "udp" },
+ { "quest-agent", { NULL }, 3843, "tcp" },
+ { "quest-agent", { NULL }, 3843, "udp" },
+ { "rnm", { NULL }, 3844, "tcp" },
+ { "rnm", { NULL }, 3844, "udp" },
+ { "v-one-spp", { NULL }, 3845, "tcp" },
+ { "v-one-spp", { NULL }, 3845, "udp" },
+ { "an-pcp", { NULL }, 3846, "tcp" },
+ { "an-pcp", { NULL }, 3846, "udp" },
+ { "msfw-control", { NULL }, 3847, "tcp" },
+ { "msfw-control", { NULL }, 3847, "udp" },
+ { "item", { NULL }, 3848, "tcp" },
+ { "item", { NULL }, 3848, "udp" },
+ { "spw-dnspreload", { NULL }, 3849, "tcp" },
+ { "spw-dnspreload", { NULL }, 3849, "udp" },
+ { "qtms-bootstrap", { NULL }, 3850, "tcp" },
+ { "qtms-bootstrap", { NULL }, 3850, "udp" },
+ { "spectraport", { NULL }, 3851, "tcp" },
+ { "spectraport", { NULL }, 3851, "udp" },
+ { "sse-app-config", { NULL }, 3852, "tcp" },
+ { "sse-app-config", { NULL }, 3852, "udp" },
+ { "sscan", { NULL }, 3853, "tcp" },
+ { "sscan", { NULL }, 3853, "udp" },
+ { "stryker-com", { NULL }, 3854, "tcp" },
+ { "stryker-com", { NULL }, 3854, "udp" },
+ { "opentrac", { NULL }, 3855, "tcp" },
+ { "opentrac", { NULL }, 3855, "udp" },
+ { "informer", { NULL }, 3856, "tcp" },
+ { "informer", { NULL }, 3856, "udp" },
+ { "trap-port", { NULL }, 3857, "tcp" },
+ { "trap-port", { NULL }, 3857, "udp" },
+ { "trap-port-mom", { NULL }, 3858, "tcp" },
+ { "trap-port-mom", { NULL }, 3858, "udp" },
+ { "nav-port", { NULL }, 3859, "tcp" },
+ { "nav-port", { NULL }, 3859, "udp" },
+ { "sasp", { NULL }, 3860, "tcp" },
+ { "sasp", { NULL }, 3860, "udp" },
+ { "winshadow-hd", { NULL }, 3861, "tcp" },
+ { "winshadow-hd", { NULL }, 3861, "udp" },
+ { "giga-pocket", { NULL }, 3862, "tcp" },
+ { "giga-pocket", { NULL }, 3862, "udp" },
+ { "asap-tcp", { NULL }, 3863, "tcp" },
+ { "asap-udp", { NULL }, 3863, "udp" },
+ { "asap-sctp", { NULL }, 3863, "sctp"},
+ { "asap-tcp-tls", { NULL }, 3864, "tcp" },
+ { "asap-sctp-tls", { NULL }, 3864, "sctp"},
+ { "xpl", { NULL }, 3865, "tcp" },
+ { "xpl", { NULL }, 3865, "udp" },
+ { "dzdaemon", { NULL }, 3866, "tcp" },
+ { "dzdaemon", { NULL }, 3866, "udp" },
+ { "dzoglserver", { NULL }, 3867, "tcp" },
+ { "dzoglserver", { NULL }, 3867, "udp" },
+ { "diameter", { NULL }, 3868, "tcp" },
+ { "diameter", { NULL }, 3868, "sctp"},
+ { "ovsam-mgmt", { NULL }, 3869, "tcp" },
+ { "ovsam-mgmt", { NULL }, 3869, "udp" },
+ { "ovsam-d-agent", { NULL }, 3870, "tcp" },
+ { "ovsam-d-agent", { NULL }, 3870, "udp" },
+ { "avocent-adsap", { NULL }, 3871, "tcp" },
+ { "avocent-adsap", { NULL }, 3871, "udp" },
+ { "oem-agent", { NULL }, 3872, "tcp" },
+ { "oem-agent", { NULL }, 3872, "udp" },
+ { "fagordnc", { NULL }, 3873, "tcp" },
+ { "fagordnc", { NULL }, 3873, "udp" },
+ { "sixxsconfig", { NULL }, 3874, "tcp" },
+ { "sixxsconfig", { NULL }, 3874, "udp" },
+ { "pnbscada", { NULL }, 3875, "tcp" },
+ { "pnbscada", { NULL }, 3875, "udp" },
+ { "dl_agent", { NULL }, 3876, "tcp" },
+ { "dl_agent", { NULL }, 3876, "udp" },
+ { "xmpcr-interface", { NULL }, 3877, "tcp" },
+ { "xmpcr-interface", { NULL }, 3877, "udp" },
+ { "fotogcad", { NULL }, 3878, "tcp" },
+ { "fotogcad", { NULL }, 3878, "udp" },
+ { "appss-lm", { NULL }, 3879, "tcp" },
+ { "appss-lm", { NULL }, 3879, "udp" },
+ { "igrs", { NULL }, 3880, "tcp" },
+ { "igrs", { NULL }, 3880, "udp" },
+ { "idac", { NULL }, 3881, "tcp" },
+ { "idac", { NULL }, 3881, "udp" },
+ { "msdts1", { NULL }, 3882, "tcp" },
+ { "msdts1", { NULL }, 3882, "udp" },
+ { "vrpn", { NULL }, 3883, "tcp" },
+ { "vrpn", { NULL }, 3883, "udp" },
+ { "softrack-meter", { NULL }, 3884, "tcp" },
+ { "softrack-meter", { NULL }, 3884, "udp" },
+ { "topflow-ssl", { NULL }, 3885, "tcp" },
+ { "topflow-ssl", { NULL }, 3885, "udp" },
+ { "nei-management", { NULL }, 3886, "tcp" },
+ { "nei-management", { NULL }, 3886, "udp" },
+ { "ciphire-data", { NULL }, 3887, "tcp" },
+ { "ciphire-data", { NULL }, 3887, "udp" },
+ { "ciphire-serv", { NULL }, 3888, "tcp" },
+ { "ciphire-serv", { NULL }, 3888, "udp" },
+ { "dandv-tester", { NULL }, 3889, "tcp" },
+ { "dandv-tester", { NULL }, 3889, "udp" },
+ { "ndsconnect", { NULL }, 3890, "tcp" },
+ { "ndsconnect", { NULL }, 3890, "udp" },
+ { "rtc-pm-port", { NULL }, 3891, "tcp" },
+ { "rtc-pm-port", { NULL }, 3891, "udp" },
+ { "pcc-image-port", { NULL }, 3892, "tcp" },
+ { "pcc-image-port", { NULL }, 3892, "udp" },
+ { "cgi-starapi", { NULL }, 3893, "tcp" },
+ { "cgi-starapi", { NULL }, 3893, "udp" },
+ { "syam-agent", { NULL }, 3894, "tcp" },
+ { "syam-agent", { NULL }, 3894, "udp" },
+ { "syam-smc", { NULL }, 3895, "tcp" },
+ { "syam-smc", { NULL }, 3895, "udp" },
+ { "sdo-tls", { NULL }, 3896, "tcp" },
+ { "sdo-tls", { NULL }, 3896, "udp" },
+ { "sdo-ssh", { NULL }, 3897, "tcp" },
+ { "sdo-ssh", { NULL }, 3897, "udp" },
+ { "senip", { NULL }, 3898, "tcp" },
+ { "senip", { NULL }, 3898, "udp" },
+ { "itv-control", { NULL }, 3899, "tcp" },
+ { "itv-control", { NULL }, 3899, "udp" },
+ { "udt_os", { NULL }, 3900, "tcp" },
+ { "udt_os", { NULL }, 3900, "udp" },
+ { "nimsh", { NULL }, 3901, "tcp" },
+ { "nimsh", { NULL }, 3901, "udp" },
+ { "nimaux", { NULL }, 3902, "tcp" },
+ { "nimaux", { NULL }, 3902, "udp" },
+ { "charsetmgr", { NULL }, 3903, "tcp" },
+ { "charsetmgr", { NULL }, 3903, "udp" },
+ { "omnilink-port", { NULL }, 3904, "tcp" },
+ { "omnilink-port", { NULL }, 3904, "udp" },
+ { "mupdate", { NULL }, 3905, "tcp" },
+ { "mupdate", { NULL }, 3905, "udp" },
+ { "topovista-data", { NULL }, 3906, "tcp" },
+ { "topovista-data", { NULL }, 3906, "udp" },
+ { "imoguia-port", { NULL }, 3907, "tcp" },
+ { "imoguia-port", { NULL }, 3907, "udp" },
+ { "hppronetman", { NULL }, 3908, "tcp" },
+ { "hppronetman", { NULL }, 3908, "udp" },
+ { "surfcontrolcpa", { NULL }, 3909, "tcp" },
+ { "surfcontrolcpa", { NULL }, 3909, "udp" },
+ { "prnrequest", { NULL }, 3910, "tcp" },
+ { "prnrequest", { NULL }, 3910, "udp" },
+ { "prnstatus", { NULL }, 3911, "tcp" },
+ { "prnstatus", { NULL }, 3911, "udp" },
+ { "gbmt-stars", { NULL }, 3912, "tcp" },
+ { "gbmt-stars", { NULL }, 3912, "udp" },
+ { "listcrt-port", { NULL }, 3913, "tcp" },
+ { "listcrt-port", { NULL }, 3913, "udp" },
+ { "listcrt-port-2", { NULL }, 3914, "tcp" },
+ { "listcrt-port-2", { NULL }, 3914, "udp" },
+ { "agcat", { NULL }, 3915, "tcp" },
+ { "agcat", { NULL }, 3915, "udp" },
+ { "wysdmc", { NULL }, 3916, "tcp" },
+ { "wysdmc", { NULL }, 3916, "udp" },
+ { "aftmux", { NULL }, 3917, "tcp" },
+ { "aftmux", { NULL }, 3917, "udp" },
+ { "pktcablemmcops", { NULL }, 3918, "tcp" },
+ { "pktcablemmcops", { NULL }, 3918, "udp" },
+ { "hyperip", { NULL }, 3919, "tcp" },
+ { "hyperip", { NULL }, 3919, "udp" },
+ { "exasoftport1", { NULL }, 3920, "tcp" },
+ { "exasoftport1", { NULL }, 3920, "udp" },
+ { "herodotus-net", { NULL }, 3921, "tcp" },
+ { "herodotus-net", { NULL }, 3921, "udp" },
+ { "sor-update", { NULL }, 3922, "tcp" },
+ { "sor-update", { NULL }, 3922, "udp" },
+ { "symb-sb-port", { NULL }, 3923, "tcp" },
+ { "symb-sb-port", { NULL }, 3923, "udp" },
+ { "mpl-gprs-port", { NULL }, 3924, "tcp" },
+ { "mpl-gprs-port", { NULL }, 3924, "udp" },
+ { "zmp", { NULL }, 3925, "tcp" },
+ { "zmp", { NULL }, 3925, "udp" },
+ { "winport", { NULL }, 3926, "tcp" },
+ { "winport", { NULL }, 3926, "udp" },
+ { "natdataservice", { NULL }, 3927, "tcp" },
+ { "natdataservice", { NULL }, 3927, "udp" },
+ { "netboot-pxe", { NULL }, 3928, "tcp" },
+ { "netboot-pxe", { NULL }, 3928, "udp" },
+ { "smauth-port", { NULL }, 3929, "tcp" },
+ { "smauth-port", { NULL }, 3929, "udp" },
+ { "syam-webserver", { NULL }, 3930, "tcp" },
+ { "syam-webserver", { NULL }, 3930, "udp" },
+ { "msr-plugin-port", { NULL }, 3931, "tcp" },
+ { "msr-plugin-port", { NULL }, 3931, "udp" },
+ { "dyn-site", { NULL }, 3932, "tcp" },
+ { "dyn-site", { NULL }, 3932, "udp" },
+ { "plbserve-port", { NULL }, 3933, "tcp" },
+ { "plbserve-port", { NULL }, 3933, "udp" },
+ { "sunfm-port", { NULL }, 3934, "tcp" },
+ { "sunfm-port", { NULL }, 3934, "udp" },
+ { "sdp-portmapper", { NULL }, 3935, "tcp" },
+ { "sdp-portmapper", { NULL }, 3935, "udp" },
+ { "mailprox", { NULL }, 3936, "tcp" },
+ { "mailprox", { NULL }, 3936, "udp" },
+ { "dvbservdsc", { NULL }, 3937, "tcp" },
+ { "dvbservdsc", { NULL }, 3937, "udp" },
+ { "dbcontrol_agent", { NULL }, 3938, "tcp" },
+ { "dbcontrol_agent", { NULL }, 3938, "udp" },
+ { "aamp", { NULL }, 3939, "tcp" },
+ { "aamp", { NULL }, 3939, "udp" },
+ { "xecp-node", { NULL }, 3940, "tcp" },
+ { "xecp-node", { NULL }, 3940, "udp" },
+ { "homeportal-web", { NULL }, 3941, "tcp" },
+ { "homeportal-web", { NULL }, 3941, "udp" },
+ { "srdp", { NULL }, 3942, "tcp" },
+ { "srdp", { NULL }, 3942, "udp" },
+ { "tig", { NULL }, 3943, "tcp" },
+ { "tig", { NULL }, 3943, "udp" },
+ { "sops", { NULL }, 3944, "tcp" },
+ { "sops", { NULL }, 3944, "udp" },
+ { "emcads", { NULL }, 3945, "tcp" },
+ { "emcads", { NULL }, 3945, "udp" },
+ { "backupedge", { NULL }, 3946, "tcp" },
+ { "backupedge", { NULL }, 3946, "udp" },
+ { "ccp", { NULL }, 3947, "tcp" },
+ { "ccp", { NULL }, 3947, "udp" },
+ { "apdap", { NULL }, 3948, "tcp" },
+ { "apdap", { NULL }, 3948, "udp" },
+ { "drip", { NULL }, 3949, "tcp" },
+ { "drip", { NULL }, 3949, "udp" },
+ { "namemunge", { NULL }, 3950, "tcp" },
+ { "namemunge", { NULL }, 3950, "udp" },
+ { "pwgippfax", { NULL }, 3951, "tcp" },
+ { "pwgippfax", { NULL }, 3951, "udp" },
+ { "i3-sessionmgr", { NULL }, 3952, "tcp" },
+ { "i3-sessionmgr", { NULL }, 3952, "udp" },
+ { "xmlink-connect", { NULL }, 3953, "tcp" },
+ { "xmlink-connect", { NULL }, 3953, "udp" },
+ { "adrep", { NULL }, 3954, "tcp" },
+ { "adrep", { NULL }, 3954, "udp" },
+ { "p2pcommunity", { NULL }, 3955, "tcp" },
+ { "p2pcommunity", { NULL }, 3955, "udp" },
+ { "gvcp", { NULL }, 3956, "tcp" },
+ { "gvcp", { NULL }, 3956, "udp" },
+ { "mqe-broker", { NULL }, 3957, "tcp" },
+ { "mqe-broker", { NULL }, 3957, "udp" },
+ { "mqe-agent", { NULL }, 3958, "tcp" },
+ { "mqe-agent", { NULL }, 3958, "udp" },
+ { "treehopper", { NULL }, 3959, "tcp" },
+ { "treehopper", { NULL }, 3959, "udp" },
+ { "bess", { NULL }, 3960, "tcp" },
+ { "bess", { NULL }, 3960, "udp" },
+ { "proaxess", { NULL }, 3961, "tcp" },
+ { "proaxess", { NULL }, 3961, "udp" },
+ { "sbi-agent", { NULL }, 3962, "tcp" },
+ { "sbi-agent", { NULL }, 3962, "udp" },
+ { "thrp", { NULL }, 3963, "tcp" },
+ { "thrp", { NULL }, 3963, "udp" },
+ { "sasggprs", { NULL }, 3964, "tcp" },
+ { "sasggprs", { NULL }, 3964, "udp" },
+ { "ati-ip-to-ncpe", { NULL }, 3965, "tcp" },
+ { "ati-ip-to-ncpe", { NULL }, 3965, "udp" },
+ { "bflckmgr", { NULL }, 3966, "tcp" },
+ { "bflckmgr", { NULL }, 3966, "udp" },
+ { "ppsms", { NULL }, 3967, "tcp" },
+ { "ppsms", { NULL }, 3967, "udp" },
+ { "ianywhere-dbns", { NULL }, 3968, "tcp" },
+ { "ianywhere-dbns", { NULL }, 3968, "udp" },
+ { "landmarks", { NULL }, 3969, "tcp" },
+ { "landmarks", { NULL }, 3969, "udp" },
+ { "lanrevagent", { NULL }, 3970, "tcp" },
+ { "lanrevagent", { NULL }, 3970, "udp" },
+ { "lanrevserver", { NULL }, 3971, "tcp" },
+ { "lanrevserver", { NULL }, 3971, "udp" },
+ { "iconp", { NULL }, 3972, "tcp" },
+ { "iconp", { NULL }, 3972, "udp" },
+ { "progistics", { NULL }, 3973, "tcp" },
+ { "progistics", { NULL }, 3973, "udp" },
+ { "citysearch", { NULL }, 3974, "tcp" },
+ { "citysearch", { NULL }, 3974, "udp" },
+ { "airshot", { NULL }, 3975, "tcp" },
+ { "airshot", { NULL }, 3975, "udp" },
+ { "opswagent", { NULL }, 3976, "tcp" },
+ { "opswagent", { NULL }, 3976, "udp" },
+ { "opswmanager", { NULL }, 3977, "tcp" },
+ { "opswmanager", { NULL }, 3977, "udp" },
+ { "secure-cfg-svr", { NULL }, 3978, "tcp" },
+ { "secure-cfg-svr", { NULL }, 3978, "udp" },
+ { "smwan", { NULL }, 3979, "tcp" },
+ { "smwan", { NULL }, 3979, "udp" },
+ { "acms", { NULL }, 3980, "tcp" },
+ { "acms", { NULL }, 3980, "udp" },
+ { "starfish", { NULL }, 3981, "tcp" },
+ { "starfish", { NULL }, 3981, "udp" },
+ { "eis", { NULL }, 3982, "tcp" },
+ { "eis", { NULL }, 3982, "udp" },
+ { "eisp", { NULL }, 3983, "tcp" },
+ { "eisp", { NULL }, 3983, "udp" },
+ { "mapper-nodemgr", { NULL }, 3984, "tcp" },
+ { "mapper-nodemgr", { NULL }, 3984, "udp" },
+ { "mapper-mapethd", { NULL }, 3985, "tcp" },
+ { "mapper-mapethd", { NULL }, 3985, "udp" },
+ { "mapper-ws_ethd", { NULL }, 3986, "tcp" },
+ { "mapper-ws_ethd", { NULL }, 3986, "udp" },
+ { "centerline", { NULL }, 3987, "tcp" },
+ { "centerline", { NULL }, 3987, "udp" },
+ { "dcs-config", { NULL }, 3988, "tcp" },
+ { "dcs-config", { NULL }, 3988, "udp" },
+ { "bv-queryengine", { NULL }, 3989, "tcp" },
+ { "bv-queryengine", { NULL }, 3989, "udp" },
+ { "bv-is", { NULL }, 3990, "tcp" },
+ { "bv-is", { NULL }, 3990, "udp" },
+ { "bv-smcsrv", { NULL }, 3991, "tcp" },
+ { "bv-smcsrv", { NULL }, 3991, "udp" },
+ { "bv-ds", { NULL }, 3992, "tcp" },
+ { "bv-ds", { NULL }, 3992, "udp" },
+ { "bv-agent", { NULL }, 3993, "tcp" },
+ { "bv-agent", { NULL }, 3993, "udp" },
+ { "iss-mgmt-ssl", { NULL }, 3995, "tcp" },
+ { "iss-mgmt-ssl", { NULL }, 3995, "udp" },
+ { "abcsoftware", { NULL }, 3996, "tcp" },
+ { "abcsoftware", { NULL }, 3996, "udp" },
+ { "agentsease-db", { NULL }, 3997, "tcp" },
+ { "agentsease-db", { NULL }, 3997, "udp" },
+ { "dnx", { NULL }, 3998, "tcp" },
+ { "dnx", { NULL }, 3998, "udp" },
+ { "nvcnet", { NULL }, 3999, "tcp" },
+ { "nvcnet", { NULL }, 3999, "udp" },
+ { "terabase", { NULL }, 4000, "tcp" },
+ { "terabase", { NULL }, 4000, "udp" },
+ { "newoak", { NULL }, 4001, "tcp" },
+ { "newoak", { NULL }, 4001, "udp" },
+ { "pxc-spvr-ft", { NULL }, 4002, "tcp" },
+ { "pxc-spvr-ft", { NULL }, 4002, "udp" },
+ { "pxc-splr-ft", { NULL }, 4003, "tcp" },
+ { "pxc-splr-ft", { NULL }, 4003, "udp" },
+ { "pxc-roid", { NULL }, 4004, "tcp" },
+ { "pxc-roid", { NULL }, 4004, "udp" },
+ { "pxc-pin", { NULL }, 4005, "tcp" },
+ { "pxc-pin", { NULL }, 4005, "udp" },
+ { "pxc-spvr", { NULL }, 4006, "tcp" },
+ { "pxc-spvr", { NULL }, 4006, "udp" },
+ { "pxc-splr", { NULL }, 4007, "tcp" },
+ { "pxc-splr", { NULL }, 4007, "udp" },
+ { "netcheque", { NULL }, 4008, "tcp" },
+ { "netcheque", { NULL }, 4008, "udp" },
+ { "chimera-hwm", { NULL }, 4009, "tcp" },
+ { "chimera-hwm", { NULL }, 4009, "udp" },
+ { "samsung-unidex", { NULL }, 4010, "tcp" },
+ { "samsung-unidex", { NULL }, 4010, "udp" },
+ { "altserviceboot", { NULL }, 4011, "tcp" },
+ { "altserviceboot", { NULL }, 4011, "udp" },
+ { "pda-gate", { NULL }, 4012, "tcp" },
+ { "pda-gate", { NULL }, 4012, "udp" },
+ { "acl-manager", { NULL }, 4013, "tcp" },
+ { "acl-manager", { NULL }, 4013, "udp" },
+ { "taiclock", { NULL }, 4014, "tcp" },
+ { "taiclock", { NULL }, 4014, "udp" },
+ { "talarian-mcast1", { NULL }, 4015, "tcp" },
+ { "talarian-mcast1", { NULL }, 4015, "udp" },
+ { "talarian-mcast2", { NULL }, 4016, "tcp" },
+ { "talarian-mcast2", { NULL }, 4016, "udp" },
+ { "talarian-mcast3", { NULL }, 4017, "tcp" },
+ { "talarian-mcast3", { NULL }, 4017, "udp" },
+ { "talarian-mcast4", { NULL }, 4018, "tcp" },
+ { "talarian-mcast4", { NULL }, 4018, "udp" },
+ { "talarian-mcast5", { NULL }, 4019, "tcp" },
+ { "talarian-mcast5", { NULL }, 4019, "udp" },
+ { "trap", { NULL }, 4020, "tcp" },
+ { "trap", { NULL }, 4020, "udp" },
+ { "nexus-portal", { NULL }, 4021, "tcp" },
+ { "nexus-portal", { NULL }, 4021, "udp" },
+ { "dnox", { NULL }, 4022, "tcp" },
+ { "dnox", { NULL }, 4022, "udp" },
+ { "esnm-zoning", { NULL }, 4023, "tcp" },
+ { "esnm-zoning", { NULL }, 4023, "udp" },
+ { "tnp1-port", { NULL }, 4024, "tcp" },
+ { "tnp1-port", { NULL }, 4024, "udp" },
+ { "partimage", { NULL }, 4025, "tcp" },
+ { "partimage", { NULL }, 4025, "udp" },
+ { "as-debug", { NULL }, 4026, "tcp" },
+ { "as-debug", { NULL }, 4026, "udp" },
+ { "bxp", { NULL }, 4027, "tcp" },
+ { "bxp", { NULL }, 4027, "udp" },
+ { "dtserver-port", { NULL }, 4028, "tcp" },
+ { "dtserver-port", { NULL }, 4028, "udp" },
+ { "ip-qsig", { NULL }, 4029, "tcp" },
+ { "ip-qsig", { NULL }, 4029, "udp" },
+ { "jdmn-port", { NULL }, 4030, "tcp" },
+ { "jdmn-port", { NULL }, 4030, "udp" },
+ { "suucp", { NULL }, 4031, "tcp" },
+ { "suucp", { NULL }, 4031, "udp" },
+ { "vrts-auth-port", { NULL }, 4032, "tcp" },
+ { "vrts-auth-port", { NULL }, 4032, "udp" },
+ { "sanavigator", { NULL }, 4033, "tcp" },
+ { "sanavigator", { NULL }, 4033, "udp" },
+ { "ubxd", { NULL }, 4034, "tcp" },
+ { "ubxd", { NULL }, 4034, "udp" },
+ { "wap-push-http", { NULL }, 4035, "tcp" },
+ { "wap-push-http", { NULL }, 4035, "udp" },
+ { "wap-push-https", { NULL }, 4036, "tcp" },
+ { "wap-push-https", { NULL }, 4036, "udp" },
+ { "ravehd", { NULL }, 4037, "tcp" },
+ { "ravehd", { NULL }, 4037, "udp" },
+ { "fazzt-ptp", { NULL }, 4038, "tcp" },
+ { "fazzt-ptp", { NULL }, 4038, "udp" },
+ { "fazzt-admin", { NULL }, 4039, "tcp" },
+ { "fazzt-admin", { NULL }, 4039, "udp" },
+ { "yo-main", { NULL }, 4040, "tcp" },
+ { "yo-main", { NULL }, 4040, "udp" },
+ { "houston", { NULL }, 4041, "tcp" },
+ { "houston", { NULL }, 4041, "udp" },
+ { "ldxp", { NULL }, 4042, "tcp" },
+ { "ldxp", { NULL }, 4042, "udp" },
+ { "nirp", { NULL }, 4043, "tcp" },
+ { "nirp", { NULL }, 4043, "udp" },
+ { "ltp", { NULL }, 4044, "tcp" },
+ { "ltp", { NULL }, 4044, "udp" },
+ { "npp", { NULL }, 4045, "tcp" },
+ { "npp", { NULL }, 4045, "udp" },
+ { "acp-proto", { NULL }, 4046, "tcp" },
+ { "acp-proto", { NULL }, 4046, "udp" },
+ { "ctp-state", { NULL }, 4047, "tcp" },
+ { "ctp-state", { NULL }, 4047, "udp" },
+ { "wafs", { NULL }, 4049, "tcp" },
+ { "wafs", { NULL }, 4049, "udp" },
+ { "cisco-wafs", { NULL }, 4050, "tcp" },
+ { "cisco-wafs", { NULL }, 4050, "udp" },
+ { "cppdp", { NULL }, 4051, "tcp" },
+ { "cppdp", { NULL }, 4051, "udp" },
+ { "interact", { NULL }, 4052, "tcp" },
+ { "interact", { NULL }, 4052, "udp" },
+ { "ccu-comm-1", { NULL }, 4053, "tcp" },
+ { "ccu-comm-1", { NULL }, 4053, "udp" },
+ { "ccu-comm-2", { NULL }, 4054, "tcp" },
+ { "ccu-comm-2", { NULL }, 4054, "udp" },
+ { "ccu-comm-3", { NULL }, 4055, "tcp" },
+ { "ccu-comm-3", { NULL }, 4055, "udp" },
+ { "lms", { NULL }, 4056, "tcp" },
+ { "lms", { NULL }, 4056, "udp" },
+ { "wfm", { NULL }, 4057, "tcp" },
+ { "wfm", { NULL }, 4057, "udp" },
+ { "kingfisher", { NULL }, 4058, "tcp" },
+ { "kingfisher", { NULL }, 4058, "udp" },
+ { "dlms-cosem", { NULL }, 4059, "tcp" },
+ { "dlms-cosem", { NULL }, 4059, "udp" },
+ { "dsmeter_iatc", { NULL }, 4060, "tcp" },
+ { "dsmeter_iatc", { NULL }, 4060, "udp" },
+ { "ice-location", { NULL }, 4061, "tcp" },
+ { "ice-location", { NULL }, 4061, "udp" },
+ { "ice-slocation", { NULL }, 4062, "tcp" },
+ { "ice-slocation", { NULL }, 4062, "udp" },
+ { "ice-router", { NULL }, 4063, "tcp" },
+ { "ice-router", { NULL }, 4063, "udp" },
+ { "ice-srouter", { NULL }, 4064, "tcp" },
+ { "ice-srouter", { NULL }, 4064, "udp" },
+ { "avanti_cdp", { NULL }, 4065, "tcp" },
+ { "avanti_cdp", { NULL }, 4065, "udp" },
+ { "pmas", { NULL }, 4066, "tcp" },
+ { "pmas", { NULL }, 4066, "udp" },
+ { "idp", { NULL }, 4067, "tcp" },
+ { "idp", { NULL }, 4067, "udp" },
+ { "ipfltbcst", { NULL }, 4068, "tcp" },
+ { "ipfltbcst", { NULL }, 4068, "udp" },
+ { "minger", { NULL }, 4069, "tcp" },
+ { "minger", { NULL }, 4069, "udp" },
+ { "tripe", { NULL }, 4070, "tcp" },
+ { "tripe", { NULL }, 4070, "udp" },
+ { "aibkup", { NULL }, 4071, "tcp" },
+ { "aibkup", { NULL }, 4071, "udp" },
+ { "zieto-sock", { NULL }, 4072, "tcp" },
+ { "zieto-sock", { NULL }, 4072, "udp" },
+ { "iRAPP", { NULL }, 4073, "tcp" },
+ { "iRAPP", { NULL }, 4073, "udp" },
+ { "cequint-cityid", { NULL }, 4074, "tcp" },
+ { "cequint-cityid", { NULL }, 4074, "udp" },
+ { "perimlan", { NULL }, 4075, "tcp" },
+ { "perimlan", { NULL }, 4075, "udp" },
+ { "seraph", { NULL }, 4076, "tcp" },
+ { "seraph", { NULL }, 4076, "udp" },
+ { "ascomalarm", { NULL }, 4077, "udp" },
+ { "cssp", { NULL }, 4078, "tcp" },
+ { "santools", { NULL }, 4079, "tcp" },
+ { "santools", { NULL }, 4079, "udp" },
+ { "lorica-in", { NULL }, 4080, "tcp" },
+ { "lorica-in", { NULL }, 4080, "udp" },
+ { "lorica-in-sec", { NULL }, 4081, "tcp" },
+ { "lorica-in-sec", { NULL }, 4081, "udp" },
+ { "lorica-out", { NULL }, 4082, "tcp" },
+ { "lorica-out", { NULL }, 4082, "udp" },
+ { "lorica-out-sec", { NULL }, 4083, "tcp" },
+ { "lorica-out-sec", { NULL }, 4083, "udp" },
+ { "fortisphere-vm", { NULL }, 4084, "udp" },
+ { "ezmessagesrv", { NULL }, 4085, "tcp" },
+ { "ftsync", { NULL }, 4086, "udp" },
+ { "applusservice", { NULL }, 4087, "tcp" },
+ { "npsp", { NULL }, 4088, "tcp" },
+ { "opencore", { NULL }, 4089, "tcp" },
+ { "opencore", { NULL }, 4089, "udp" },
+ { "omasgport", { NULL }, 4090, "tcp" },
+ { "omasgport", { NULL }, 4090, "udp" },
+ { "ewinstaller", { NULL }, 4091, "tcp" },
+ { "ewinstaller", { NULL }, 4091, "udp" },
+ { "ewdgs", { NULL }, 4092, "tcp" },
+ { "ewdgs", { NULL }, 4092, "udp" },
+ { "pvxpluscs", { NULL }, 4093, "tcp" },
+ { "pvxpluscs", { NULL }, 4093, "udp" },
+ { "sysrqd", { NULL }, 4094, "tcp" },
+ { "sysrqd", { NULL }, 4094, "udp" },
+ { "xtgui", { NULL }, 4095, "tcp" },
+ { "xtgui", { NULL }, 4095, "udp" },
+ { "bre", { NULL }, 4096, "tcp" },
+ { "bre", { NULL }, 4096, "udp" },
+ { "patrolview", { NULL }, 4097, "tcp" },
+ { "patrolview", { NULL }, 4097, "udp" },
+ { "drmsfsd", { NULL }, 4098, "tcp" },
+ { "drmsfsd", { NULL }, 4098, "udp" },
+ { "dpcp", { NULL }, 4099, "tcp" },
+ { "dpcp", { NULL }, 4099, "udp" },
+ { "igo-incognito", { NULL }, 4100, "tcp" },
+ { "igo-incognito", { NULL }, 4100, "udp" },
+ { "brlp-0", { NULL }, 4101, "tcp" },
+ { "brlp-0", { NULL }, 4101, "udp" },
+ { "brlp-1", { NULL }, 4102, "tcp" },
+ { "brlp-1", { NULL }, 4102, "udp" },
+ { "brlp-2", { NULL }, 4103, "tcp" },
+ { "brlp-2", { NULL }, 4103, "udp" },
+ { "brlp-3", { NULL }, 4104, "tcp" },
+ { "brlp-3", { NULL }, 4104, "udp" },
+ { "shofarplayer", { NULL }, 4105, "tcp" },
+ { "shofarplayer", { NULL }, 4105, "udp" },
+ { "synchronite", { NULL }, 4106, "tcp" },
+ { "synchronite", { NULL }, 4106, "udp" },
+ { "j-ac", { NULL }, 4107, "tcp" },
+ { "j-ac", { NULL }, 4107, "udp" },
+ { "accel", { NULL }, 4108, "tcp" },
+ { "accel", { NULL }, 4108, "udp" },
+ { "izm", { NULL }, 4109, "tcp" },
+ { "izm", { NULL }, 4109, "udp" },
+ { "g2tag", { NULL }, 4110, "tcp" },
+ { "g2tag", { NULL }, 4110, "udp" },
+ { "xgrid", { NULL }, 4111, "tcp" },
+ { "xgrid", { NULL }, 4111, "udp" },
+ { "apple-vpns-rp", { NULL }, 4112, "tcp" },
+ { "apple-vpns-rp", { NULL }, 4112, "udp" },
+ { "aipn-reg", { NULL }, 4113, "tcp" },
+ { "aipn-reg", { NULL }, 4113, "udp" },
+ { "jomamqmonitor", { NULL }, 4114, "tcp" },
+ { "jomamqmonitor", { NULL }, 4114, "udp" },
+ { "cds", { NULL }, 4115, "tcp" },
+ { "cds", { NULL }, 4115, "udp" },
+ { "smartcard-tls", { NULL }, 4116, "tcp" },
+ { "smartcard-tls", { NULL }, 4116, "udp" },
+ { "hillrserv", { NULL }, 4117, "tcp" },
+ { "hillrserv", { NULL }, 4117, "udp" },
+ { "netscript", { NULL }, 4118, "tcp" },
+ { "netscript", { NULL }, 4118, "udp" },
+ { "assuria-slm", { NULL }, 4119, "tcp" },
+ { "assuria-slm", { NULL }, 4119, "udp" },
+ { "e-builder", { NULL }, 4121, "tcp" },
+ { "e-builder", { NULL }, 4121, "udp" },
+ { "fprams", { NULL }, 4122, "tcp" },
+ { "fprams", { NULL }, 4122, "udp" },
+ { "z-wave", { NULL }, 4123, "tcp" },
+ { "z-wave", { NULL }, 4123, "udp" },
+ { "tigv2", { NULL }, 4124, "tcp" },
+ { "tigv2", { NULL }, 4124, "udp" },
+ { "opsview-envoy", { NULL }, 4125, "tcp" },
+ { "opsview-envoy", { NULL }, 4125, "udp" },
+ { "ddrepl", { NULL }, 4126, "tcp" },
+ { "ddrepl", { NULL }, 4126, "udp" },
+ { "unikeypro", { NULL }, 4127, "tcp" },
+ { "unikeypro", { NULL }, 4127, "udp" },
+ { "nufw", { NULL }, 4128, "tcp" },
+ { "nufw", { NULL }, 4128, "udp" },
+ { "nuauth", { NULL }, 4129, "tcp" },
+ { "nuauth", { NULL }, 4129, "udp" },
+ { "fronet", { NULL }, 4130, "tcp" },
+ { "fronet", { NULL }, 4130, "udp" },
+ { "stars", { NULL }, 4131, "tcp" },
+ { "stars", { NULL }, 4131, "udp" },
+ { "nuts_dem", { NULL }, 4132, "tcp" },
+ { "nuts_dem", { NULL }, 4132, "udp" },
+ { "nuts_bootp", { NULL }, 4133, "tcp" },
+ { "nuts_bootp", { NULL }, 4133, "udp" },
+ { "nifty-hmi", { NULL }, 4134, "tcp" },
+ { "nifty-hmi", { NULL }, 4134, "udp" },
+ { "cl-db-attach", { NULL }, 4135, "tcp" },
+ { "cl-db-attach", { NULL }, 4135, "udp" },
+ { "cl-db-request", { NULL }, 4136, "tcp" },
+ { "cl-db-request", { NULL }, 4136, "udp" },
+ { "cl-db-remote", { NULL }, 4137, "tcp" },
+ { "cl-db-remote", { NULL }, 4137, "udp" },
+ { "nettest", { NULL }, 4138, "tcp" },
+ { "nettest", { NULL }, 4138, "udp" },
+ { "thrtx", { NULL }, 4139, "tcp" },
+ { "thrtx", { NULL }, 4139, "udp" },
+ { "cedros_fds", { NULL }, 4140, "tcp" },
+ { "cedros_fds", { NULL }, 4140, "udp" },
+ { "oirtgsvc", { NULL }, 4141, "tcp" },
+ { "oirtgsvc", { NULL }, 4141, "udp" },
+ { "oidocsvc", { NULL }, 4142, "tcp" },
+ { "oidocsvc", { NULL }, 4142, "udp" },
+ { "oidsr", { NULL }, 4143, "tcp" },
+ { "oidsr", { NULL }, 4143, "udp" },
+ { "vvr-control", { NULL }, 4145, "tcp" },
+ { "vvr-control", { NULL }, 4145, "udp" },
+ { "tgcconnect", { NULL }, 4146, "tcp" },
+ { "tgcconnect", { NULL }, 4146, "udp" },
+ { "vrxpservman", { NULL }, 4147, "tcp" },
+ { "vrxpservman", { NULL }, 4147, "udp" },
+ { "hhb-handheld", { NULL }, 4148, "tcp" },
+ { "hhb-handheld", { NULL }, 4148, "udp" },
+ { "agslb", { NULL }, 4149, "tcp" },
+ { "agslb", { NULL }, 4149, "udp" },
+ { "PowerAlert-nsa", { NULL }, 4150, "tcp" },
+ { "PowerAlert-nsa", { NULL }, 4150, "udp" },
+ { "menandmice_noh", { NULL }, 4151, "tcp" },
+ { "menandmice_noh", { NULL }, 4151, "udp" },
+ { "idig_mux", { NULL }, 4152, "tcp" },
+ { "idig_mux", { NULL }, 4152, "udp" },
+ { "mbl-battd", { NULL }, 4153, "tcp" },
+ { "mbl-battd", { NULL }, 4153, "udp" },
+ { "atlinks", { NULL }, 4154, "tcp" },
+ { "atlinks", { NULL }, 4154, "udp" },
+ { "bzr", { NULL }, 4155, "tcp" },
+ { "bzr", { NULL }, 4155, "udp" },
+ { "stat-results", { NULL }, 4156, "tcp" },
+ { "stat-results", { NULL }, 4156, "udp" },
+ { "stat-scanner", { NULL }, 4157, "tcp" },
+ { "stat-scanner", { NULL }, 4157, "udp" },
+ { "stat-cc", { NULL }, 4158, "tcp" },
+ { "stat-cc", { NULL }, 4158, "udp" },
+ { "nss", { NULL }, 4159, "tcp" },
+ { "nss", { NULL }, 4159, "udp" },
+ { "jini-discovery", { NULL }, 4160, "tcp" },
+ { "jini-discovery", { NULL }, 4160, "udp" },
+ { "omscontact", { NULL }, 4161, "tcp" },
+ { "omscontact", { NULL }, 4161, "udp" },
+ { "omstopology", { NULL }, 4162, "tcp" },
+ { "omstopology", { NULL }, 4162, "udp" },
+ { "silverpeakpeer", { NULL }, 4163, "tcp" },
+ { "silverpeakpeer", { NULL }, 4163, "udp" },
+ { "silverpeakcomm", { NULL }, 4164, "tcp" },
+ { "silverpeakcomm", { NULL }, 4164, "udp" },
+ { "altcp", { NULL }, 4165, "tcp" },
+ { "altcp", { NULL }, 4165, "udp" },
+ { "joost", { NULL }, 4166, "tcp" },
+ { "joost", { NULL }, 4166, "udp" },
+ { "ddgn", { NULL }, 4167, "tcp" },
+ { "ddgn", { NULL }, 4167, "udp" },
+ { "pslicser", { NULL }, 4168, "tcp" },
+ { "pslicser", { NULL }, 4168, "udp" },
+ { "iadt", { NULL }, 4169, "tcp" },
+ { "iadt-disc", { NULL }, 4169, "udp" },
+ { "d-cinema-csp", { NULL }, 4170, "tcp" },
+ { "ml-svnet", { NULL }, 4171, "tcp" },
+ { "pcoip", { NULL }, 4172, "tcp" },
+ { "pcoip", { NULL }, 4172, "udp" },
+ { "smcluster", { NULL }, 4174, "tcp" },
+ { "bccp", { NULL }, 4175, "tcp" },
+ { "tl-ipcproxy", { NULL }, 4176, "tcp" },
+ { "wello", { NULL }, 4177, "tcp" },
+ { "wello", { NULL }, 4177, "udp" },
+ { "storman", { NULL }, 4178, "tcp" },
+ { "storman", { NULL }, 4178, "udp" },
+ { "MaxumSP", { NULL }, 4179, "tcp" },
+ { "MaxumSP", { NULL }, 4179, "udp" },
+ { "httpx", { NULL }, 4180, "tcp" },
+ { "httpx", { NULL }, 4180, "udp" },
+ { "macbak", { NULL }, 4181, "tcp" },
+ { "macbak", { NULL }, 4181, "udp" },
+ { "pcptcpservice", { NULL }, 4182, "tcp" },
+ { "pcptcpservice", { NULL }, 4182, "udp" },
+ { "gmmp", { NULL }, 4183, "tcp" },
+ { "gmmp", { NULL }, 4183, "udp" },
+ { "universe_suite", { NULL }, 4184, "tcp" },
+ { "universe_suite", { NULL }, 4184, "udp" },
+ { "wcpp", { NULL }, 4185, "tcp" },
+ { "wcpp", { NULL }, 4185, "udp" },
+ { "boxbackupstore", { NULL }, 4186, "tcp" },
+ { "csc_proxy", { NULL }, 4187, "tcp" },
+ { "vatata", { NULL }, 4188, "tcp" },
+ { "vatata", { NULL }, 4188, "udp" },
+ { "pcep", { NULL }, 4189, "tcp" },
+ { "sieve", { NULL }, 4190, "tcp" },
+ { "dsmipv6", { NULL }, 4191, "udp" },
+ { "azeti", { NULL }, 4192, "tcp" },
+ { "azeti-bd", { NULL }, 4192, "udp" },
+ { "pvxplusio", { NULL }, 4193, "tcp" },
+ { "eims-admin", { NULL }, 4199, "tcp" },
+ { "eims-admin", { NULL }, 4199, "udp" },
+ { "corelccam", { NULL }, 4300, "tcp" },
+ { "corelccam", { NULL }, 4300, "udp" },
+ { "d-data", { NULL }, 4301, "tcp" },
+ { "d-data", { NULL }, 4301, "udp" },
+ { "d-data-control", { NULL }, 4302, "tcp" },
+ { "d-data-control", { NULL }, 4302, "udp" },
+ { "srcp", { NULL }, 4303, "tcp" },
+ { "srcp", { NULL }, 4303, "udp" },
+ { "owserver", { NULL }, 4304, "tcp" },
+ { "owserver", { NULL }, 4304, "udp" },
+ { "batman", { NULL }, 4305, "tcp" },
+ { "batman", { NULL }, 4305, "udp" },
+ { "pinghgl", { NULL }, 4306, "tcp" },
+ { "pinghgl", { NULL }, 4306, "udp" },
+ { "visicron-vs", { NULL }, 4307, "tcp" },
+ { "visicron-vs", { NULL }, 4307, "udp" },
+ { "compx-lockview", { NULL }, 4308, "tcp" },
+ { "compx-lockview", { NULL }, 4308, "udp" },
+ { "dserver", { NULL }, 4309, "tcp" },
+ { "dserver", { NULL }, 4309, "udp" },
+ { "mirrtex", { NULL }, 4310, "tcp" },
+ { "mirrtex", { NULL }, 4310, "udp" },
+ { "p6ssmc", { NULL }, 4311, "tcp" },
+ { "pscl-mgt", { NULL }, 4312, "tcp" },
+ { "perrla", { NULL }, 4313, "tcp" },
+ { "fdt-rcatp", { NULL }, 4320, "tcp" },
+ { "fdt-rcatp", { NULL }, 4320, "udp" },
+ { "rwhois", { NULL }, 4321, "tcp" },
+ { "rwhois", { NULL }, 4321, "udp" },
+ { "trim-event", { NULL }, 4322, "tcp" },
+ { "trim-event", { NULL }, 4322, "udp" },
+ { "trim-ice", { NULL }, 4323, "tcp" },
+ { "trim-ice", { NULL }, 4323, "udp" },
+ { "balour", { NULL }, 4324, "tcp" },
+ { "balour", { NULL }, 4324, "udp" },
+ { "geognosisman", { NULL }, 4325, "tcp" },
+ { "geognosisman", { NULL }, 4325, "udp" },
+ { "geognosis", { NULL }, 4326, "tcp" },
+ { "geognosis", { NULL }, 4326, "udp" },
+ { "jaxer-web", { NULL }, 4327, "tcp" },
+ { "jaxer-web", { NULL }, 4327, "udp" },
+ { "jaxer-manager", { NULL }, 4328, "tcp" },
+ { "jaxer-manager", { NULL }, 4328, "udp" },
+ { "publiqare-sync", { NULL }, 4329, "tcp" },
+ { "gaia", { NULL }, 4340, "tcp" },
+ { "gaia", { NULL }, 4340, "udp" },
+ { "lisp-data", { NULL }, 4341, "tcp" },
+ { "lisp-data", { NULL }, 4341, "udp" },
+ { "lisp-cons", { NULL }, 4342, "tcp" },
+ { "lisp-control", { NULL }, 4342, "udp" },
+ { "unicall", { NULL }, 4343, "tcp" },
+ { "unicall", { NULL }, 4343, "udp" },
+ { "vinainstall", { NULL }, 4344, "tcp" },
+ { "vinainstall", { NULL }, 4344, "udp" },
+ { "m4-network-as", { NULL }, 4345, "tcp" },
+ { "m4-network-as", { NULL }, 4345, "udp" },
+ { "elanlm", { NULL }, 4346, "tcp" },
+ { "elanlm", { NULL }, 4346, "udp" },
+ { "lansurveyor", { NULL }, 4347, "tcp" },
+ { "lansurveyor", { NULL }, 4347, "udp" },
+ { "itose", { NULL }, 4348, "tcp" },
+ { "itose", { NULL }, 4348, "udp" },
+ { "fsportmap", { NULL }, 4349, "tcp" },
+ { "fsportmap", { NULL }, 4349, "udp" },
+ { "net-device", { NULL }, 4350, "tcp" },
+ { "net-device", { NULL }, 4350, "udp" },
+ { "plcy-net-svcs", { NULL }, 4351, "tcp" },
+ { "plcy-net-svcs", { NULL }, 4351, "udp" },
+ { "pjlink", { NULL }, 4352, "tcp" },
+ { "pjlink", { NULL }, 4352, "udp" },
+ { "f5-iquery", { NULL }, 4353, "tcp" },
+ { "f5-iquery", { NULL }, 4353, "udp" },
+ { "qsnet-trans", { NULL }, 4354, "tcp" },
+ { "qsnet-trans", { NULL }, 4354, "udp" },
+ { "qsnet-workst", { NULL }, 4355, "tcp" },
+ { "qsnet-workst", { NULL }, 4355, "udp" },
+ { "qsnet-assist", { NULL }, 4356, "tcp" },
+ { "qsnet-assist", { NULL }, 4356, "udp" },
+ { "qsnet-cond", { NULL }, 4357, "tcp" },
+ { "qsnet-cond", { NULL }, 4357, "udp" },
+ { "qsnet-nucl", { NULL }, 4358, "tcp" },
+ { "qsnet-nucl", { NULL }, 4358, "udp" },
+ { "omabcastltkm", { NULL }, 4359, "tcp" },
+ { "omabcastltkm", { NULL }, 4359, "udp" },
+ { "matrix_vnet", { NULL }, 4360, "tcp" },
+ { "nacnl", { NULL }, 4361, "udp" },
+ { "afore-vdp-disc", { NULL }, 4362, "udp" },
+ { "wxbrief", { NULL }, 4368, "tcp" },
+ { "wxbrief", { NULL }, 4368, "udp" },
+ { "epmd", { NULL }, 4369, "tcp" },
+ { "epmd", { NULL }, 4369, "udp" },
+ { "elpro_tunnel", { NULL }, 4370, "tcp" },
+ { "elpro_tunnel", { NULL }, 4370, "udp" },
+ { "l2c-control", { NULL }, 4371, "tcp" },
+ { "l2c-disc", { NULL }, 4371, "udp" },
+ { "l2c-data", { NULL }, 4372, "tcp" },
+ { "l2c-data", { NULL }, 4372, "udp" },
+ { "remctl", { NULL }, 4373, "tcp" },
+ { "remctl", { NULL }, 4373, "udp" },
+ { "psi-ptt", { NULL }, 4374, "tcp" },
+ { "tolteces", { NULL }, 4375, "tcp" },
+ { "tolteces", { NULL }, 4375, "udp" },
+ { "bip", { NULL }, 4376, "tcp" },
+ { "bip", { NULL }, 4376, "udp" },
+ { "cp-spxsvr", { NULL }, 4377, "tcp" },
+ { "cp-spxsvr", { NULL }, 4377, "udp" },
+ { "cp-spxdpy", { NULL }, 4378, "tcp" },
+ { "cp-spxdpy", { NULL }, 4378, "udp" },
+ { "ctdb", { NULL }, 4379, "tcp" },
+ { "ctdb", { NULL }, 4379, "udp" },
+ { "xandros-cms", { NULL }, 4389, "tcp" },
+ { "xandros-cms", { NULL }, 4389, "udp" },
+ { "wiegand", { NULL }, 4390, "tcp" },
+ { "wiegand", { NULL }, 4390, "udp" },
+ { "apwi-imserver", { NULL }, 4391, "tcp" },
+ { "apwi-rxserver", { NULL }, 4392, "tcp" },
+ { "apwi-rxspooler", { NULL }, 4393, "tcp" },
+ { "apwi-disc", { NULL }, 4394, "udp" },
+ { "omnivisionesx", { NULL }, 4395, "tcp" },
+ { "omnivisionesx", { NULL }, 4395, "udp" },
+ { "fly", { NULL }, 4396, "tcp" },
+ { "ds-srv", { NULL }, 4400, "tcp" },
+ { "ds-srv", { NULL }, 4400, "udp" },
+ { "ds-srvr", { NULL }, 4401, "tcp" },
+ { "ds-srvr", { NULL }, 4401, "udp" },
+ { "ds-clnt", { NULL }, 4402, "tcp" },
+ { "ds-clnt", { NULL }, 4402, "udp" },
+ { "ds-user", { NULL }, 4403, "tcp" },
+ { "ds-user", { NULL }, 4403, "udp" },
+ { "ds-admin", { NULL }, 4404, "tcp" },
+ { "ds-admin", { NULL }, 4404, "udp" },
+ { "ds-mail", { NULL }, 4405, "tcp" },
+ { "ds-mail", { NULL }, 4405, "udp" },
+ { "ds-slp", { NULL }, 4406, "tcp" },
+ { "ds-slp", { NULL }, 4406, "udp" },
+ { "nacagent", { NULL }, 4407, "tcp" },
+ { "slscc", { NULL }, 4408, "tcp" },
+ { "netcabinet-com", { NULL }, 4409, "tcp" },
+ { "itwo-server", { NULL }, 4410, "tcp" },
+ { "netrockey6", { NULL }, 4425, "tcp" },
+ { "netrockey6", { NULL }, 4425, "udp" },
+ { "beacon-port-2", { NULL }, 4426, "tcp" },
+ { "beacon-port-2", { NULL }, 4426, "udp" },
+ { "drizzle", { NULL }, 4427, "tcp" },
+ { "omviserver", { NULL }, 4428, "tcp" },
+ { "omviagent", { NULL }, 4429, "tcp" },
+ { "rsqlserver", { NULL }, 4430, "tcp" },
+ { "rsqlserver", { NULL }, 4430, "udp" },
+ { "wspipe", { NULL }, 4431, "tcp" },
+ { "netblox", { NULL }, 4441, "udp" },
+ { "saris", { NULL }, 4442, "tcp" },
+ { "saris", { NULL }, 4442, "udp" },
+ { "pharos", { NULL }, 4443, "tcp" },
+ { "pharos", { NULL }, 4443, "udp" },
+ { "krb524", { NULL }, 4444, "tcp" },
+ { "krb524", { NULL }, 4444, "udp" },
+ { "nv-video", { NULL }, 4444, "tcp" },
+ { "nv-video", { NULL }, 4444, "udp" },
+ { "upnotifyp", { NULL }, 4445, "tcp" },
+ { "upnotifyp", { NULL }, 4445, "udp" },
+ { "n1-fwp", { NULL }, 4446, "tcp" },
+ { "n1-fwp", { NULL }, 4446, "udp" },
+ { "n1-rmgmt", { NULL }, 4447, "tcp" },
+ { "n1-rmgmt", { NULL }, 4447, "udp" },
+ { "asc-slmd", { NULL }, 4448, "tcp" },
+ { "asc-slmd", { NULL }, 4448, "udp" },
+ { "privatewire", { NULL }, 4449, "tcp" },
+ { "privatewire", { NULL }, 4449, "udp" },
+ { "camp", { NULL }, 4450, "tcp" },
+ { "camp", { NULL }, 4450, "udp" },
+ { "ctisystemmsg", { NULL }, 4451, "tcp" },
+ { "ctisystemmsg", { NULL }, 4451, "udp" },
+ { "ctiprogramload", { NULL }, 4452, "tcp" },
+ { "ctiprogramload", { NULL }, 4452, "udp" },
+ { "nssalertmgr", { NULL }, 4453, "tcp" },
+ { "nssalertmgr", { NULL }, 4453, "udp" },
+ { "nssagentmgr", { NULL }, 4454, "tcp" },
+ { "nssagentmgr", { NULL }, 4454, "udp" },
+ { "prchat-user", { NULL }, 4455, "tcp" },
+ { "prchat-user", { NULL }, 4455, "udp" },
+ { "prchat-server", { NULL }, 4456, "tcp" },
+ { "prchat-server", { NULL }, 4456, "udp" },
+ { "prRegister", { NULL }, 4457, "tcp" },
+ { "prRegister", { NULL }, 4457, "udp" },
+ { "mcp", { NULL }, 4458, "tcp" },
+ { "mcp", { NULL }, 4458, "udp" },
+ { "hpssmgmt", { NULL }, 4484, "tcp" },
+ { "hpssmgmt", { NULL }, 4484, "udp" },
+ { "assyst-dr", { NULL }, 4485, "tcp" },
+ { "icms", { NULL }, 4486, "tcp" },
+ { "icms", { NULL }, 4486, "udp" },
+ { "prex-tcp", { NULL }, 4487, "tcp" },
+ { "awacs-ice", { NULL }, 4488, "tcp" },
+ { "awacs-ice", { NULL }, 4488, "udp" },
+ { "ipsec-nat-t", { NULL }, 4500, "tcp" },
+ { "ipsec-nat-t", { NULL }, 4500, "udp" },
+ { "ehs", { NULL }, 4535, "tcp" },
+ { "ehs", { NULL }, 4535, "udp" },
+ { "ehs-ssl", { NULL }, 4536, "tcp" },
+ { "ehs-ssl", { NULL }, 4536, "udp" },
+ { "wssauthsvc", { NULL }, 4537, "tcp" },
+ { "wssauthsvc", { NULL }, 4537, "udp" },
+ { "swx-gate", { NULL }, 4538, "tcp" },
+ { "swx-gate", { NULL }, 4538, "udp" },
+ { "worldscores", { NULL }, 4545, "tcp" },
+ { "worldscores", { NULL }, 4545, "udp" },
+ { "sf-lm", { NULL }, 4546, "tcp" },
+ { "sf-lm", { NULL }, 4546, "udp" },
+ { "lanner-lm", { NULL }, 4547, "tcp" },
+ { "lanner-lm", { NULL }, 4547, "udp" },
+ { "synchromesh", { NULL }, 4548, "tcp" },
+ { "synchromesh", { NULL }, 4548, "udp" },
+ { "aegate", { NULL }, 4549, "tcp" },
+ { "aegate", { NULL }, 4549, "udp" },
+ { "gds-adppiw-db", { NULL }, 4550, "tcp" },
+ { "gds-adppiw-db", { NULL }, 4550, "udp" },
+ { "ieee-mih", { NULL }, 4551, "tcp" },
+ { "ieee-mih", { NULL }, 4551, "udp" },
+ { "menandmice-mon", { NULL }, 4552, "tcp" },
+ { "menandmice-mon", { NULL }, 4552, "udp" },
+ { "icshostsvc", { NULL }, 4553, "tcp" },
+ { "msfrs", { NULL }, 4554, "tcp" },
+ { "msfrs", { NULL }, 4554, "udp" },
+ { "rsip", { NULL }, 4555, "tcp" },
+ { "rsip", { NULL }, 4555, "udp" },
+ { "dtn-bundle-tcp", { NULL }, 4556, "tcp" },
+ { "dtn-bundle-udp", { NULL }, 4556, "udp" },
+ { "mtcevrunqss", { NULL }, 4557, "udp" },
+ { "mtcevrunqman", { NULL }, 4558, "udp" },
+ { "hylafax", { NULL }, 4559, "tcp" },
+ { "hylafax", { NULL }, 4559, "udp" },
+ { "kwtc", { NULL }, 4566, "tcp" },
+ { "kwtc", { NULL }, 4566, "udp" },
+ { "tram", { NULL }, 4567, "tcp" },
+ { "tram", { NULL }, 4567, "udp" },
+ { "bmc-reporting", { NULL }, 4568, "tcp" },
+ { "bmc-reporting", { NULL }, 4568, "udp" },
+ { "iax", { NULL }, 4569, "tcp" },
+ { "iax", { NULL }, 4569, "udp" },
+ { "rid", { NULL }, 4590, "tcp" },
+ { "l3t-at-an", { NULL }, 4591, "tcp" },
+ { "l3t-at-an", { NULL }, 4591, "udp" },
+ { "hrpd-ith-at-an", { NULL }, 4592, "udp" },
+ { "ipt-anri-anri", { NULL }, 4593, "tcp" },
+ { "ipt-anri-anri", { NULL }, 4593, "udp" },
+ { "ias-session", { NULL }, 4594, "tcp" },
+ { "ias-session", { NULL }, 4594, "udp" },
+ { "ias-paging", { NULL }, 4595, "tcp" },
+ { "ias-paging", { NULL }, 4595, "udp" },
+ { "ias-neighbor", { NULL }, 4596, "tcp" },
+ { "ias-neighbor", { NULL }, 4596, "udp" },
+ { "a21-an-1xbs", { NULL }, 4597, "tcp" },
+ { "a21-an-1xbs", { NULL }, 4597, "udp" },
+ { "a16-an-an", { NULL }, 4598, "tcp" },
+ { "a16-an-an", { NULL }, 4598, "udp" },
+ { "a17-an-an", { NULL }, 4599, "tcp" },
+ { "a17-an-an", { NULL }, 4599, "udp" },
+ { "piranha1", { NULL }, 4600, "tcp" },
+ { "piranha1", { NULL }, 4600, "udp" },
+ { "piranha2", { NULL }, 4601, "tcp" },
+ { "piranha2", { NULL }, 4601, "udp" },
+ { "mtsserver", { NULL }, 4602, "tcp" },
+ { "menandmice-upg", { NULL }, 4603, "tcp" },
+ { "playsta2-app", { NULL }, 4658, "tcp" },
+ { "playsta2-app", { NULL }, 4658, "udp" },
+ { "playsta2-lob", { NULL }, 4659, "tcp" },
+ { "playsta2-lob", { NULL }, 4659, "udp" },
+ { "smaclmgr", { NULL }, 4660, "tcp" },
+ { "smaclmgr", { NULL }, 4660, "udp" },
+ { "kar2ouche", { NULL }, 4661, "tcp" },
+ { "kar2ouche", { NULL }, 4661, "udp" },
+ { "oms", { NULL }, 4662, "tcp" },
+ { "oms", { NULL }, 4662, "udp" },
+ { "noteit", { NULL }, 4663, "tcp" },
+ { "noteit", { NULL }, 4663, "udp" },
+ { "ems", { NULL }, 4664, "tcp" },
+ { "ems", { NULL }, 4664, "udp" },
+ { "contclientms", { NULL }, 4665, "tcp" },
+ { "contclientms", { NULL }, 4665, "udp" },
+ { "eportcomm", { NULL }, 4666, "tcp" },
+ { "eportcomm", { NULL }, 4666, "udp" },
+ { "mmacomm", { NULL }, 4667, "tcp" },
+ { "mmacomm", { NULL }, 4667, "udp" },
+ { "mmaeds", { NULL }, 4668, "tcp" },
+ { "mmaeds", { NULL }, 4668, "udp" },
+ { "eportcommdata", { NULL }, 4669, "tcp" },
+ { "eportcommdata", { NULL }, 4669, "udp" },
+ { "light", { NULL }, 4670, "tcp" },
+ { "light", { NULL }, 4670, "udp" },
+ { "acter", { NULL }, 4671, "tcp" },
+ { "acter", { NULL }, 4671, "udp" },
+ { "rfa", { NULL }, 4672, "tcp" },
+ { "rfa", { NULL }, 4672, "udp" },
+ { "cxws", { NULL }, 4673, "tcp" },
+ { "cxws", { NULL }, 4673, "udp" },
+ { "appiq-mgmt", { NULL }, 4674, "tcp" },
+ { "appiq-mgmt", { NULL }, 4674, "udp" },
+ { "dhct-status", { NULL }, 4675, "tcp" },
+ { "dhct-status", { NULL }, 4675, "udp" },
+ { "dhct-alerts", { NULL }, 4676, "tcp" },
+ { "dhct-alerts", { NULL }, 4676, "udp" },
+ { "bcs", { NULL }, 4677, "tcp" },
+ { "bcs", { NULL }, 4677, "udp" },
+ { "traversal", { NULL }, 4678, "tcp" },
+ { "traversal", { NULL }, 4678, "udp" },
+ { "mgesupervision", { NULL }, 4679, "tcp" },
+ { "mgesupervision", { NULL }, 4679, "udp" },
+ { "mgemanagement", { NULL }, 4680, "tcp" },
+ { "mgemanagement", { NULL }, 4680, "udp" },
+ { "parliant", { NULL }, 4681, "tcp" },
+ { "parliant", { NULL }, 4681, "udp" },
+ { "finisar", { NULL }, 4682, "tcp" },
+ { "finisar", { NULL }, 4682, "udp" },
+ { "spike", { NULL }, 4683, "tcp" },
+ { "spike", { NULL }, 4683, "udp" },
+ { "rfid-rp1", { NULL }, 4684, "tcp" },
+ { "rfid-rp1", { NULL }, 4684, "udp" },
+ { "autopac", { NULL }, 4685, "tcp" },
+ { "autopac", { NULL }, 4685, "udp" },
+ { "msp-os", { NULL }, 4686, "tcp" },
+ { "msp-os", { NULL }, 4686, "udp" },
+ { "nst", { NULL }, 4687, "tcp" },
+ { "nst", { NULL }, 4687, "udp" },
+ { "mobile-p2p", { NULL }, 4688, "tcp" },
+ { "mobile-p2p", { NULL }, 4688, "udp" },
+ { "altovacentral", { NULL }, 4689, "tcp" },
+ { "altovacentral", { NULL }, 4689, "udp" },
+ { "prelude", { NULL }, 4690, "tcp" },
+ { "prelude", { NULL }, 4690, "udp" },
+ { "mtn", { NULL }, 4691, "tcp" },
+ { "mtn", { NULL }, 4691, "udp" },
+ { "conspiracy", { NULL }, 4692, "tcp" },
+ { "conspiracy", { NULL }, 4692, "udp" },
+ { "netxms-agent", { NULL }, 4700, "tcp" },
+ { "netxms-agent", { NULL }, 4700, "udp" },
+ { "netxms-mgmt", { NULL }, 4701, "tcp" },
+ { "netxms-mgmt", { NULL }, 4701, "udp" },
+ { "netxms-sync", { NULL }, 4702, "tcp" },
+ { "netxms-sync", { NULL }, 4702, "udp" },
+ { "npqes-test", { NULL }, 4703, "tcp" },
+ { "assuria-ins", { NULL }, 4704, "tcp" },
+ { "truckstar", { NULL }, 4725, "tcp" },
+ { "truckstar", { NULL }, 4725, "udp" },
+ { "a26-fap-fgw", { NULL }, 4726, "udp" },
+ { "fcis", { NULL }, 4727, "tcp" },
+ { "fcis-disc", { NULL }, 4727, "udp" },
+ { "capmux", { NULL }, 4728, "tcp" },
+ { "capmux", { NULL }, 4728, "udp" },
+ { "gsmtap", { NULL }, 4729, "udp" },
+ { "gearman", { NULL }, 4730, "tcp" },
+ { "gearman", { NULL }, 4730, "udp" },
+ { "remcap", { NULL }, 4731, "tcp" },
+ { "ohmtrigger", { NULL }, 4732, "udp" },
+ { "resorcs", { NULL }, 4733, "tcp" },
+ { "ipdr-sp", { NULL }, 4737, "tcp" },
+ { "ipdr-sp", { NULL }, 4737, "udp" },
+ { "solera-lpn", { NULL }, 4738, "tcp" },
+ { "solera-lpn", { NULL }, 4738, "udp" },
+ { "ipfix", { NULL }, 4739, "tcp" },
+ { "ipfix", { NULL }, 4739, "udp" },
+ { "ipfix", { NULL }, 4739, "sctp"},
+ { "ipfixs", { NULL }, 4740, "tcp" },
+ { "ipfixs", { NULL }, 4740, "sctp"},
+ { "ipfixs", { NULL }, 4740, "udp" },
+ { "lumimgrd", { NULL }, 4741, "tcp" },
+ { "lumimgrd", { NULL }, 4741, "udp" },
+ { "sicct", { NULL }, 4742, "tcp" },
+ { "sicct-sdp", { NULL }, 4742, "udp" },
+ { "openhpid", { NULL }, 4743, "tcp" },
+ { "openhpid", { NULL }, 4743, "udp" },
+ { "ifsp", { NULL }, 4744, "tcp" },
+ { "ifsp", { NULL }, 4744, "udp" },
+ { "fmp", { NULL }, 4745, "tcp" },
+ { "fmp", { NULL }, 4745, "udp" },
+ { "profilemac", { NULL }, 4749, "tcp" },
+ { "profilemac", { NULL }, 4749, "udp" },
+ { "ssad", { NULL }, 4750, "tcp" },
+ { "ssad", { NULL }, 4750, "udp" },
+ { "spocp", { NULL }, 4751, "tcp" },
+ { "spocp", { NULL }, 4751, "udp" },
+ { "snap", { NULL }, 4752, "tcp" },
+ { "snap", { NULL }, 4752, "udp" },
+ { "bfd-multi-ctl", { NULL }, 4784, "tcp" },
+ { "bfd-multi-ctl", { NULL }, 4784, "udp" },
+ { "cncp", { NULL }, 4785, "udp" },
+ { "smart-install", { NULL }, 4786, "tcp" },
+ { "sia-ctrl-plane", { NULL }, 4787, "tcp" },
+ { "iims", { NULL }, 4800, "tcp" },
+ { "iims", { NULL }, 4800, "udp" },
+ { "iwec", { NULL }, 4801, "tcp" },
+ { "iwec", { NULL }, 4801, "udp" },
+ { "ilss", { NULL }, 4802, "tcp" },
+ { "ilss", { NULL }, 4802, "udp" },
+ { "notateit", { NULL }, 4803, "tcp" },
+ { "notateit-disc", { NULL }, 4803, "udp" },
+ { "aja-ntv4-disc", { NULL }, 4804, "udp" },
+ { "htcp", { NULL }, 4827, "tcp" },
+ { "htcp", { NULL }, 4827, "udp" },
+ { "varadero-0", { NULL }, 4837, "tcp" },
+ { "varadero-0", { NULL }, 4837, "udp" },
+ { "varadero-1", { NULL }, 4838, "tcp" },
+ { "varadero-1", { NULL }, 4838, "udp" },
+ { "varadero-2", { NULL }, 4839, "tcp" },
+ { "varadero-2", { NULL }, 4839, "udp" },
+ { "opcua-tcp", { NULL }, 4840, "tcp" },
+ { "opcua-udp", { NULL }, 4840, "udp" },
+ { "quosa", { NULL }, 4841, "tcp" },
+ { "quosa", { NULL }, 4841, "udp" },
+ { "gw-asv", { NULL }, 4842, "tcp" },
+ { "gw-asv", { NULL }, 4842, "udp" },
+ { "opcua-tls", { NULL }, 4843, "tcp" },
+ { "opcua-tls", { NULL }, 4843, "udp" },
+ { "gw-log", { NULL }, 4844, "tcp" },
+ { "gw-log", { NULL }, 4844, "udp" },
+ { "wcr-remlib", { NULL }, 4845, "tcp" },
+ { "wcr-remlib", { NULL }, 4845, "udp" },
+ { "contamac_icm", { NULL }, 4846, "tcp" },
+ { "contamac_icm", { NULL }, 4846, "udp" },
+ { "wfc", { NULL }, 4847, "tcp" },
+ { "wfc", { NULL }, 4847, "udp" },
+ { "appserv-http", { NULL }, 4848, "tcp" },
+ { "appserv-http", { NULL }, 4848, "udp" },
+ { "appserv-https", { NULL }, 4849, "tcp" },
+ { "appserv-https", { NULL }, 4849, "udp" },
+ { "sun-as-nodeagt", { NULL }, 4850, "tcp" },
+ { "sun-as-nodeagt", { NULL }, 4850, "udp" },
+ { "derby-repli", { NULL }, 4851, "tcp" },
+ { "derby-repli", { NULL }, 4851, "udp" },
+ { "unify-debug", { NULL }, 4867, "tcp" },
+ { "unify-debug", { NULL }, 4867, "udp" },
+ { "phrelay", { NULL }, 4868, "tcp" },
+ { "phrelay", { NULL }, 4868, "udp" },
+ { "phrelaydbg", { NULL }, 4869, "tcp" },
+ { "phrelaydbg", { NULL }, 4869, "udp" },
+ { "cc-tracking", { NULL }, 4870, "tcp" },
+ { "cc-tracking", { NULL }, 4870, "udp" },
+ { "wired", { NULL }, 4871, "tcp" },
+ { "wired", { NULL }, 4871, "udp" },
+ { "tritium-can", { NULL }, 4876, "tcp" },
+ { "tritium-can", { NULL }, 4876, "udp" },
+ { "lmcs", { NULL }, 4877, "tcp" },
+ { "lmcs", { NULL }, 4877, "udp" },
+ { "inst-discovery", { NULL }, 4878, "udp" },
+ { "wsdl-event", { NULL }, 4879, "tcp" },
+ { "hislip", { NULL }, 4880, "tcp" },
+ { "socp-t", { NULL }, 4881, "udp" },
+ { "socp-c", { NULL }, 4882, "udp" },
+ { "wmlserver", { NULL }, 4883, "tcp" },
+ { "hivestor", { NULL }, 4884, "tcp" },
+ { "hivestor", { NULL }, 4884, "udp" },
+ { "abbs", { NULL }, 4885, "tcp" },
+ { "abbs", { NULL }, 4885, "udp" },
+ { "lyskom", { NULL }, 4894, "tcp" },
+ { "lyskom", { NULL }, 4894, "udp" },
+ { "radmin-port", { NULL }, 4899, "tcp" },
+ { "radmin-port", { NULL }, 4899, "udp" },
+ { "hfcs", { NULL }, 4900, "tcp" },
+ { "hfcs", { NULL }, 4900, "udp" },
+ { "flr_agent", { NULL }, 4901, "tcp" },
+ { "magiccontrol", { NULL }, 4902, "tcp" },
+ { "lutap", { NULL }, 4912, "tcp" },
+ { "lutcp", { NULL }, 4913, "tcp" },
+ { "bones", { NULL }, 4914, "tcp" },
+ { "bones", { NULL }, 4914, "udp" },
+ { "frcs", { NULL }, 4915, "tcp" },
+ { "atsc-mh-ssc", { NULL }, 4937, "udp" },
+ { "eq-office-4940", { NULL }, 4940, "tcp" },
+ { "eq-office-4940", { NULL }, 4940, "udp" },
+ { "eq-office-4941", { NULL }, 4941, "tcp" },
+ { "eq-office-4941", { NULL }, 4941, "udp" },
+ { "eq-office-4942", { NULL }, 4942, "tcp" },
+ { "eq-office-4942", { NULL }, 4942, "udp" },
+ { "munin", { NULL }, 4949, "tcp" },
+ { "munin", { NULL }, 4949, "udp" },
+ { "sybasesrvmon", { NULL }, 4950, "tcp" },
+ { "sybasesrvmon", { NULL }, 4950, "udp" },
+ { "pwgwims", { NULL }, 4951, "tcp" },
+ { "pwgwims", { NULL }, 4951, "udp" },
+ { "sagxtsds", { NULL }, 4952, "tcp" },
+ { "sagxtsds", { NULL }, 4952, "udp" },
+ { "dbsyncarbiter", { NULL }, 4953, "tcp" },
+ { "ccss-qmm", { NULL }, 4969, "tcp" },
+ { "ccss-qmm", { NULL }, 4969, "udp" },
+ { "ccss-qsm", { NULL }, 4970, "tcp" },
+ { "ccss-qsm", { NULL }, 4970, "udp" },
+ { "webyast", { NULL }, 4984, "tcp" },
+ { "gerhcs", { NULL }, 4985, "tcp" },
+ { "mrip", { NULL }, 4986, "tcp" },
+ { "mrip", { NULL }, 4986, "udp" },
+ { "smar-se-port1", { NULL }, 4987, "tcp" },
+ { "smar-se-port1", { NULL }, 4987, "udp" },
+ { "smar-se-port2", { NULL }, 4988, "tcp" },
+ { "smar-se-port2", { NULL }, 4988, "udp" },
+ { "parallel", { NULL }, 4989, "tcp" },
+ { "parallel", { NULL }, 4989, "udp" },
+ { "busycal", { NULL }, 4990, "tcp" },
+ { "busycal", { NULL }, 4990, "udp" },
+ { "vrt", { NULL }, 4991, "tcp" },
+ { "vrt", { NULL }, 4991, "udp" },
+ { "hfcs-manager", { NULL }, 4999, "tcp" },
+ { "hfcs-manager", { NULL }, 4999, "udp" },
+ { "commplex-main", { NULL }, 5000, "tcp" },
+ { "commplex-main", { NULL }, 5000, "udp" },
+ { "commplex-link", { NULL }, 5001, "tcp" },
+ { "commplex-link", { NULL }, 5001, "udp" },
+ { "rfe", { NULL }, 5002, "tcp" },
+ { "rfe", { NULL }, 5002, "udp" },
+ { "fmpro-internal", { NULL }, 5003, "tcp" },
+ { "fmpro-internal", { NULL }, 5003, "udp" },
+ { "avt-profile-1", { NULL }, 5004, "tcp" },
+ { "avt-profile-1", { NULL }, 5004, "udp" },
+ { "avt-profile-1", { NULL }, 5004, "dccp"},
+ { "avt-profile-2", { NULL }, 5005, "tcp" },
+ { "avt-profile-2", { NULL }, 5005, "udp" },
+ { "avt-profile-2", { NULL }, 5005, "dccp"},
+ { "wsm-server", { NULL }, 5006, "tcp" },
+ { "wsm-server", { NULL }, 5006, "udp" },
+ { "wsm-server-ssl", { NULL }, 5007, "tcp" },
+ { "wsm-server-ssl", { NULL }, 5007, "udp" },
+ { "synapsis-edge", { NULL }, 5008, "tcp" },
+ { "synapsis-edge", { NULL }, 5008, "udp" },
+ { "winfs", { NULL }, 5009, "tcp" },
+ { "winfs", { NULL }, 5009, "udp" },
+ { "telelpathstart", { NULL }, 5010, "tcp" },
+ { "telelpathstart", { NULL }, 5010, "udp" },
+ { "telelpathattack", { NULL }, 5011, "tcp" },
+ { "telelpathattack", { NULL }, 5011, "udp" },
+ { "nsp", { NULL }, 5012, "tcp" },
+ { "nsp", { NULL }, 5012, "udp" },
+ { "fmpro-v6", { NULL }, 5013, "tcp" },
+ { "fmpro-v6", { NULL }, 5013, "udp" },
+ { "onpsocket", { NULL }, 5014, "udp" },
+ { "fmwp", { NULL }, 5015, "tcp" },
+ { "zenginkyo-1", { NULL }, 5020, "tcp" },
+ { "zenginkyo-1", { NULL }, 5020, "udp" },
+ { "zenginkyo-2", { NULL }, 5021, "tcp" },
+ { "zenginkyo-2", { NULL }, 5021, "udp" },
+ { "mice", { NULL }, 5022, "tcp" },
+ { "mice", { NULL }, 5022, "udp" },
+ { "htuilsrv", { NULL }, 5023, "tcp" },
+ { "htuilsrv", { NULL }, 5023, "udp" },
+ { "scpi-telnet", { NULL }, 5024, "tcp" },
+ { "scpi-telnet", { NULL }, 5024, "udp" },
+ { "scpi-raw", { NULL }, 5025, "tcp" },
+ { "scpi-raw", { NULL }, 5025, "udp" },
+ { "strexec-d", { NULL }, 5026, "tcp" },
+ { "strexec-d", { NULL }, 5026, "udp" },
+ { "strexec-s", { NULL }, 5027, "tcp" },
+ { "strexec-s", { NULL }, 5027, "udp" },
+ { "qvr", { NULL }, 5028, "tcp" },
+ { "infobright", { NULL }, 5029, "tcp" },
+ { "infobright", { NULL }, 5029, "udp" },
+ { "surfpass", { NULL }, 5030, "tcp" },
+ { "surfpass", { NULL }, 5030, "udp" },
+ { "dmp", { NULL }, 5031, "udp" },
+ { "asnaacceler8db", { NULL }, 5042, "tcp" },
+ { "asnaacceler8db", { NULL }, 5042, "udp" },
+ { "swxadmin", { NULL }, 5043, "tcp" },
+ { "swxadmin", { NULL }, 5043, "udp" },
+ { "lxi-evntsvc", { NULL }, 5044, "tcp" },
+ { "lxi-evntsvc", { NULL }, 5044, "udp" },
+ { "osp", { NULL }, 5045, "tcp" },
+ { "vpm-udp", { NULL }, 5046, "udp" },
+ { "iscape", { NULL }, 5047, "udp" },
+ { "texai", { NULL }, 5048, "tcp" },
+ { "ivocalize", { NULL }, 5049, "tcp" },
+ { "ivocalize", { NULL }, 5049, "udp" },
+ { "mmcc", { NULL }, 5050, "tcp" },
+ { "mmcc", { NULL }, 5050, "udp" },
+ { "ita-agent", { NULL }, 5051, "tcp" },
+ { "ita-agent", { NULL }, 5051, "udp" },
+ { "ita-manager", { NULL }, 5052, "tcp" },
+ { "ita-manager", { NULL }, 5052, "udp" },
+ { "rlm", { NULL }, 5053, "tcp" },
+ { "rlm-admin", { NULL }, 5054, "tcp" },
+ { "unot", { NULL }, 5055, "tcp" },
+ { "unot", { NULL }, 5055, "udp" },
+ { "intecom-ps1", { NULL }, 5056, "tcp" },
+ { "intecom-ps1", { NULL }, 5056, "udp" },
+ { "intecom-ps2", { NULL }, 5057, "tcp" },
+ { "intecom-ps2", { NULL }, 5057, "udp" },
+ { "locus-disc", { NULL }, 5058, "udp" },
+ { "sds", { NULL }, 5059, "tcp" },
+ { "sds", { NULL }, 5059, "udp" },
+ { "sip", { NULL }, 5060, "tcp" },
+ { "sip", { NULL }, 5060, "udp" },
+ { "sip-tls", { NULL }, 5061, "tcp" },
+ { "sip-tls", { NULL }, 5061, "udp" },
+ { "na-localise", { NULL }, 5062, "tcp" },
+ { "na-localise", { NULL }, 5062, "udp" },
+ { "csrpc", { NULL }, 5063, "tcp" },
+ { "ca-1", { NULL }, 5064, "tcp" },
+ { "ca-1", { NULL }, 5064, "udp" },
+ { "ca-2", { NULL }, 5065, "tcp" },
+ { "ca-2", { NULL }, 5065, "udp" },
+ { "stanag-5066", { NULL }, 5066, "tcp" },
+ { "stanag-5066", { NULL }, 5066, "udp" },
+ { "authentx", { NULL }, 5067, "tcp" },
+ { "authentx", { NULL }, 5067, "udp" },
+ { "bitforestsrv", { NULL }, 5068, "tcp" },
+ { "i-net-2000-npr", { NULL }, 5069, "tcp" },
+ { "i-net-2000-npr", { NULL }, 5069, "udp" },
+ { "vtsas", { NULL }, 5070, "tcp" },
+ { "vtsas", { NULL }, 5070, "udp" },
+ { "powerschool", { NULL }, 5071, "tcp" },
+ { "powerschool", { NULL }, 5071, "udp" },
+ { "ayiya", { NULL }, 5072, "tcp" },
+ { "ayiya", { NULL }, 5072, "udp" },
+ { "tag-pm", { NULL }, 5073, "tcp" },
+ { "tag-pm", { NULL }, 5073, "udp" },
+ { "alesquery", { NULL }, 5074, "tcp" },
+ { "alesquery", { NULL }, 5074, "udp" },
+ { "cp-spxrpts", { NULL }, 5079, "udp" },
+ { "onscreen", { NULL }, 5080, "tcp" },
+ { "onscreen", { NULL }, 5080, "udp" },
+ { "sdl-ets", { NULL }, 5081, "tcp" },
+ { "sdl-ets", { NULL }, 5081, "udp" },
+ { "qcp", { NULL }, 5082, "tcp" },
+ { "qcp", { NULL }, 5082, "udp" },
+ { "qfp", { NULL }, 5083, "tcp" },
+ { "qfp", { NULL }, 5083, "udp" },
+ { "llrp", { NULL }, 5084, "tcp" },
+ { "llrp", { NULL }, 5084, "udp" },
+ { "encrypted-llrp", { NULL }, 5085, "tcp" },
+ { "encrypted-llrp", { NULL }, 5085, "udp" },
+ { "aprigo-cs", { NULL }, 5086, "tcp" },
+ { "car", { NULL }, 5090, "sctp"},
+ { "cxtp", { NULL }, 5091, "sctp"},
+ { "magpie", { NULL }, 5092, "udp" },
+ { "sentinel-lm", { NULL }, 5093, "tcp" },
+ { "sentinel-lm", { NULL }, 5093, "udp" },
+ { "hart-ip", { NULL }, 5094, "tcp" },
+ { "hart-ip", { NULL }, 5094, "udp" },
+ { "sentlm-srv2srv", { NULL }, 5099, "tcp" },
+ { "sentlm-srv2srv", { NULL }, 5099, "udp" },
+ { "socalia", { NULL }, 5100, "tcp" },
+ { "socalia", { NULL }, 5100, "udp" },
+ { "talarian-tcp", { NULL }, 5101, "tcp" },
+ { "talarian-udp", { NULL }, 5101, "udp" },
+ { "oms-nonsecure", { NULL }, 5102, "tcp" },
+ { "oms-nonsecure", { NULL }, 5102, "udp" },
+ { "actifio-c2c", { NULL }, 5103, "tcp" },
+ { "tinymessage", { NULL }, 5104, "udp" },
+ { "hughes-ap", { NULL }, 5105, "udp" },
+ { "taep-as-svc", { NULL }, 5111, "tcp" },
+ { "taep-as-svc", { NULL }, 5111, "udp" },
+ { "pm-cmdsvr", { NULL }, 5112, "tcp" },
+ { "pm-cmdsvr", { NULL }, 5112, "udp" },
+ { "ev-services", { NULL }, 5114, "tcp" },
+ { "autobuild", { NULL }, 5115, "tcp" },
+ { "emb-proj-cmd", { NULL }, 5116, "udp" },
+ { "gradecam", { NULL }, 5117, "tcp" },
+ { "nbt-pc", { NULL }, 5133, "tcp" },
+ { "nbt-pc", { NULL }, 5133, "udp" },
+ { "ppactivation", { NULL }, 5134, "tcp" },
+ { "erp-scale", { NULL }, 5135, "tcp" },
+ { "minotaur-sa", { NULL }, 5136, "udp" },
+ { "ctsd", { NULL }, 5137, "tcp" },
+ { "ctsd", { NULL }, 5137, "udp" },
+ { "rmonitor_secure", { NULL }, 5145, "tcp" },
+ { "rmonitor_secure", { NULL }, 5145, "udp" },
+ { "social-alarm", { NULL }, 5146, "tcp" },
+ { "atmp", { NULL }, 5150, "tcp" },
+ { "atmp", { NULL }, 5150, "udp" },
+ { "esri_sde", { NULL }, 5151, "tcp" },
+ { "esri_sde", { NULL }, 5151, "udp" },
+ { "sde-discovery", { NULL }, 5152, "tcp" },
+ { "sde-discovery", { NULL }, 5152, "udp" },
+ { "toruxserver", { NULL }, 5153, "tcp" },
+ { "bzflag", { NULL }, 5154, "tcp" },
+ { "bzflag", { NULL }, 5154, "udp" },
+ { "asctrl-agent", { NULL }, 5155, "tcp" },
+ { "asctrl-agent", { NULL }, 5155, "udp" },
+ { "rugameonline", { NULL }, 5156, "tcp" },
+ { "mediat", { NULL }, 5157, "tcp" },
+ { "snmpssh", { NULL }, 5161, "tcp" },
+ { "snmpssh-trap", { NULL }, 5162, "tcp" },
+ { "sbackup", { NULL }, 5163, "tcp" },
+ { "vpa", { NULL }, 5164, "tcp" },
+ { "vpa-disc", { NULL }, 5164, "udp" },
+ { "ife_icorp", { NULL }, 5165, "tcp" },
+ { "ife_icorp", { NULL }, 5165, "udp" },
+ { "winpcs", { NULL }, 5166, "tcp" },
+ { "winpcs", { NULL }, 5166, "udp" },
+ { "scte104", { NULL }, 5167, "tcp" },
+ { "scte104", { NULL }, 5167, "udp" },
+ { "scte30", { NULL }, 5168, "tcp" },
+ { "scte30", { NULL }, 5168, "udp" },
+ { "aol", { NULL }, 5190, "tcp" },
+ { "aol", { NULL }, 5190, "udp" },
+ { "aol-1", { NULL }, 5191, "tcp" },
+ { "aol-1", { NULL }, 5191, "udp" },
+ { "aol-2", { NULL }, 5192, "tcp" },
+ { "aol-2", { NULL }, 5192, "udp" },
+ { "aol-3", { NULL }, 5193, "tcp" },
+ { "aol-3", { NULL }, 5193, "udp" },
+ { "cpscomm", { NULL }, 5194, "tcp" },
+ { "targus-getdata", { NULL }, 5200, "tcp" },
+ { "targus-getdata", { NULL }, 5200, "udp" },
+ { "targus-getdata1", { NULL }, 5201, "tcp" },
+ { "targus-getdata1", { NULL }, 5201, "udp" },
+ { "targus-getdata2", { NULL }, 5202, "tcp" },
+ { "targus-getdata2", { NULL }, 5202, "udp" },
+ { "targus-getdata3", { NULL }, 5203, "tcp" },
+ { "targus-getdata3", { NULL }, 5203, "udp" },
+ { "3exmp", { NULL }, 5221, "tcp" },
+ { "xmpp-client", { NULL }, 5222, "tcp" },
+ { "hpvirtgrp", { NULL }, 5223, "tcp" },
+ { "hpvirtgrp", { NULL }, 5223, "udp" },
+ { "hpvirtctrl", { NULL }, 5224, "tcp" },
+ { "hpvirtctrl", { NULL }, 5224, "udp" },
+ { "hp-server", { NULL }, 5225, "tcp" },
+ { "hp-server", { NULL }, 5225, "udp" },
+ { "hp-status", { NULL }, 5226, "tcp" },
+ { "hp-status", { NULL }, 5226, "udp" },
+ { "perfd", { NULL }, 5227, "tcp" },
+ { "perfd", { NULL }, 5227, "udp" },
+ { "hpvroom", { NULL }, 5228, "tcp" },
+ { "csedaemon", { NULL }, 5232, "tcp" },
+ { "enfs", { NULL }, 5233, "tcp" },
+ { "eenet", { NULL }, 5234, "tcp" },
+ { "eenet", { NULL }, 5234, "udp" },
+ { "galaxy-network", { NULL }, 5235, "tcp" },
+ { "galaxy-network", { NULL }, 5235, "udp" },
+ { "padl2sim", { NULL }, 5236, "tcp" },
+ { "padl2sim", { NULL }, 5236, "udp" },
+ { "mnet-discovery", { NULL }, 5237, "tcp" },
+ { "mnet-discovery", { NULL }, 5237, "udp" },
+ { "downtools", { NULL }, 5245, "tcp" },
+ { "downtools-disc", { NULL }, 5245, "udp" },
+ { "capwap-control", { NULL }, 5246, "udp" },
+ { "capwap-data", { NULL }, 5247, "udp" },
+ { "caacws", { NULL }, 5248, "tcp" },
+ { "caacws", { NULL }, 5248, "udp" },
+ { "caaclang2", { NULL }, 5249, "tcp" },
+ { "caaclang2", { NULL }, 5249, "udp" },
+ { "soagateway", { NULL }, 5250, "tcp" },
+ { "soagateway", { NULL }, 5250, "udp" },
+ { "caevms", { NULL }, 5251, "tcp" },
+ { "caevms", { NULL }, 5251, "udp" },
+ { "movaz-ssc", { NULL }, 5252, "tcp" },
+ { "movaz-ssc", { NULL }, 5252, "udp" },
+ { "kpdp", { NULL }, 5253, "tcp" },
+ { "3com-njack-1", { NULL }, 5264, "tcp" },
+ { "3com-njack-1", { NULL }, 5264, "udp" },
+ { "3com-njack-2", { NULL }, 5265, "tcp" },
+ { "3com-njack-2", { NULL }, 5265, "udp" },
+ { "xmpp-server", { NULL }, 5269, "tcp" },
+ { "xmp", { NULL }, 5270, "tcp" },
+ { "xmp", { NULL }, 5270, "udp" },
+ { "cuelink", { NULL }, 5271, "tcp" },
+ { "cuelink-disc", { NULL }, 5271, "udp" },
+ { "pk", { NULL }, 5272, "tcp" },
+ { "pk", { NULL }, 5272, "udp" },
+ { "xmpp-bosh", { NULL }, 5280, "tcp" },
+ { "undo-lm", { NULL }, 5281, "tcp" },
+ { "transmit-port", { NULL }, 5282, "tcp" },
+ { "transmit-port", { NULL }, 5282, "udp" },
+ { "presence", { NULL }, 5298, "tcp" },
+ { "presence", { NULL }, 5298, "udp" },
+ { "nlg-data", { NULL }, 5299, "tcp" },
+ { "nlg-data", { NULL }, 5299, "udp" },
+ { "hacl-hb", { NULL }, 5300, "tcp" },
+ { "hacl-hb", { NULL }, 5300, "udp" },
+ { "hacl-gs", { NULL }, 5301, "tcp" },
+ { "hacl-gs", { NULL }, 5301, "udp" },
+ { "hacl-cfg", { NULL }, 5302, "tcp" },
+ { "hacl-cfg", { NULL }, 5302, "udp" },
+ { "hacl-probe", { NULL }, 5303, "tcp" },
+ { "hacl-probe", { NULL }, 5303, "udp" },
+ { "hacl-local", { NULL }, 5304, "tcp" },
+ { "hacl-local", { NULL }, 5304, "udp" },
+ { "hacl-test", { NULL }, 5305, "tcp" },
+ { "hacl-test", { NULL }, 5305, "udp" },
+ { "sun-mc-grp", { NULL }, 5306, "tcp" },
+ { "sun-mc-grp", { NULL }, 5306, "udp" },
+ { "sco-aip", { NULL }, 5307, "tcp" },
+ { "sco-aip", { NULL }, 5307, "udp" },
+ { "cfengine", { NULL }, 5308, "tcp" },
+ { "cfengine", { NULL }, 5308, "udp" },
+ { "jprinter", { NULL }, 5309, "tcp" },
+ { "jprinter", { NULL }, 5309, "udp" },
+ { "outlaws", { NULL }, 5310, "tcp" },
+ { "outlaws", { NULL }, 5310, "udp" },
+ { "permabit-cs", { NULL }, 5312, "tcp" },
+ { "permabit-cs", { NULL }, 5312, "udp" },
+ { "rrdp", { NULL }, 5313, "tcp" },
+ { "rrdp", { NULL }, 5313, "udp" },
+ { "opalis-rbt-ipc", { NULL }, 5314, "tcp" },
+ { "opalis-rbt-ipc", { NULL }, 5314, "udp" },
+ { "hacl-poll", { NULL }, 5315, "tcp" },
+ { "hacl-poll", { NULL }, 5315, "udp" },
+ { "hpdevms", { NULL }, 5316, "tcp" },
+ { "hpdevms", { NULL }, 5316, "udp" },
+ { "bsfserver-zn", { NULL }, 5320, "tcp" },
+ { "bsfsvr-zn-ssl", { NULL }, 5321, "tcp" },
+ { "kfserver", { NULL }, 5343, "tcp" },
+ { "kfserver", { NULL }, 5343, "udp" },
+ { "xkotodrcp", { NULL }, 5344, "tcp" },
+ { "xkotodrcp", { NULL }, 5344, "udp" },
+ { "stuns", { NULL }, 5349, "tcp" },
+ { "stuns", { NULL }, 5349, "udp" },
+ { "turns", { NULL }, 5349, "tcp" },
+ { "turns", { NULL }, 5349, "udp" },
+ { "stun-behaviors", { NULL }, 5349, "tcp" },
+ { "stun-behaviors", { NULL }, 5349, "udp" },
+ { "nat-pmp-status", { NULL }, 5350, "tcp" },
+ { "nat-pmp-status", { NULL }, 5350, "udp" },
+ { "nat-pmp", { NULL }, 5351, "tcp" },
+ { "nat-pmp", { NULL }, 5351, "udp" },
+ { "dns-llq", { NULL }, 5352, "tcp" },
+ { "dns-llq", { NULL }, 5352, "udp" },
+ { "mdns", { NULL }, 5353, "tcp" },
+ { "mdns", { NULL }, 5353, "udp" },
+ { "mdnsresponder", { NULL }, 5354, "tcp" },
+ { "mdnsresponder", { NULL }, 5354, "udp" },
+ { "llmnr", { NULL }, 5355, "tcp" },
+ { "llmnr", { NULL }, 5355, "udp" },
+ { "ms-smlbiz", { NULL }, 5356, "tcp" },
+ { "ms-smlbiz", { NULL }, 5356, "udp" },
+ { "wsdapi", { NULL }, 5357, "tcp" },
+ { "wsdapi", { NULL }, 5357, "udp" },
+ { "wsdapi-s", { NULL }, 5358, "tcp" },
+ { "wsdapi-s", { NULL }, 5358, "udp" },
+ { "ms-alerter", { NULL }, 5359, "tcp" },
+ { "ms-alerter", { NULL }, 5359, "udp" },
+ { "ms-sideshow", { NULL }, 5360, "tcp" },
+ { "ms-sideshow", { NULL }, 5360, "udp" },
+ { "ms-s-sideshow", { NULL }, 5361, "tcp" },
+ { "ms-s-sideshow", { NULL }, 5361, "udp" },
+ { "serverwsd2", { NULL }, 5362, "tcp" },
+ { "serverwsd2", { NULL }, 5362, "udp" },
+ { "net-projection", { NULL }, 5363, "tcp" },
+ { "net-projection", { NULL }, 5363, "udp" },
+ { "stresstester", { NULL }, 5397, "tcp" },
+ { "stresstester", { NULL }, 5397, "udp" },
+ { "elektron-admin", { NULL }, 5398, "tcp" },
+ { "elektron-admin", { NULL }, 5398, "udp" },
+ { "securitychase", { NULL }, 5399, "tcp" },
+ { "securitychase", { NULL }, 5399, "udp" },
+ { "excerpt", { NULL }, 5400, "tcp" },
+ { "excerpt", { NULL }, 5400, "udp" },
+ { "excerpts", { NULL }, 5401, "tcp" },
+ { "excerpts", { NULL }, 5401, "udp" },
+ { "mftp", { NULL }, 5402, "tcp" },
+ { "mftp", { NULL }, 5402, "udp" },
+ { "hpoms-ci-lstn", { NULL }, 5403, "tcp" },
+ { "hpoms-ci-lstn", { NULL }, 5403, "udp" },
+ { "hpoms-dps-lstn", { NULL }, 5404, "tcp" },
+ { "hpoms-dps-lstn", { NULL }, 5404, "udp" },
+ { "netsupport", { NULL }, 5405, "tcp" },
+ { "netsupport", { NULL }, 5405, "udp" },
+ { "systemics-sox", { NULL }, 5406, "tcp" },
+ { "systemics-sox", { NULL }, 5406, "udp" },
+ { "foresyte-clear", { NULL }, 5407, "tcp" },
+ { "foresyte-clear", { NULL }, 5407, "udp" },
+ { "foresyte-sec", { NULL }, 5408, "tcp" },
+ { "foresyte-sec", { NULL }, 5408, "udp" },
+ { "salient-dtasrv", { NULL }, 5409, "tcp" },
+ { "salient-dtasrv", { NULL }, 5409, "udp" },
+ { "salient-usrmgr", { NULL }, 5410, "tcp" },
+ { "salient-usrmgr", { NULL }, 5410, "udp" },
+ { "actnet", { NULL }, 5411, "tcp" },
+ { "actnet", { NULL }, 5411, "udp" },
+ { "continuus", { NULL }, 5412, "tcp" },
+ { "continuus", { NULL }, 5412, "udp" },
+ { "wwiotalk", { NULL }, 5413, "tcp" },
+ { "wwiotalk", { NULL }, 5413, "udp" },
+ { "statusd", { NULL }, 5414, "tcp" },
+ { "statusd", { NULL }, 5414, "udp" },
+ { "ns-server", { NULL }, 5415, "tcp" },
+ { "ns-server", { NULL }, 5415, "udp" },
+ { "sns-gateway", { NULL }, 5416, "tcp" },
+ { "sns-gateway", { NULL }, 5416, "udp" },
+ { "sns-agent", { NULL }, 5417, "tcp" },
+ { "sns-agent", { NULL }, 5417, "udp" },
+ { "mcntp", { NULL }, 5418, "tcp" },
+ { "mcntp", { NULL }, 5418, "udp" },
+ { "dj-ice", { NULL }, 5419, "tcp" },
+ { "dj-ice", { NULL }, 5419, "udp" },
+ { "cylink-c", { NULL }, 5420, "tcp" },
+ { "cylink-c", { NULL }, 5420, "udp" },
+ { "netsupport2", { NULL }, 5421, "tcp" },
+ { "netsupport2", { NULL }, 5421, "udp" },
+ { "salient-mux", { NULL }, 5422, "tcp" },
+ { "salient-mux", { NULL }, 5422, "udp" },
+ { "virtualuser", { NULL }, 5423, "tcp" },
+ { "virtualuser", { NULL }, 5423, "udp" },
+ { "beyond-remote", { NULL }, 5424, "tcp" },
+ { "beyond-remote", { NULL }, 5424, "udp" },
+ { "br-channel", { NULL }, 5425, "tcp" },
+ { "br-channel", { NULL }, 5425, "udp" },
+ { "devbasic", { NULL }, 5426, "tcp" },
+ { "devbasic", { NULL }, 5426, "udp" },
+ { "sco-peer-tta", { NULL }, 5427, "tcp" },
+ { "sco-peer-tta", { NULL }, 5427, "udp" },
+ { "telaconsole", { NULL }, 5428, "tcp" },
+ { "telaconsole", { NULL }, 5428, "udp" },
+ { "base", { NULL }, 5429, "tcp" },
+ { "base", { NULL }, 5429, "udp" },
+ { "radec-corp", { NULL }, 5430, "tcp" },
+ { "radec-corp", { NULL }, 5430, "udp" },
+ { "park-agent", { NULL }, 5431, "tcp" },
+ { "park-agent", { NULL }, 5431, "udp" },
+ { "postgresql", { NULL }, 5432, "tcp" },
+ { "postgresql", { NULL }, 5432, "udp" },
+ { "pyrrho", { NULL }, 5433, "tcp" },
+ { "pyrrho", { NULL }, 5433, "udp" },
+ { "sgi-arrayd", { NULL }, 5434, "tcp" },
+ { "sgi-arrayd", { NULL }, 5434, "udp" },
+ { "sceanics", { NULL }, 5435, "tcp" },
+ { "sceanics", { NULL }, 5435, "udp" },
+ { "pmip6-cntl", { NULL }, 5436, "udp" },
+ { "pmip6-data", { NULL }, 5437, "udp" },
+ { "spss", { NULL }, 5443, "tcp" },
+ { "spss", { NULL }, 5443, "udp" },
+ { "surebox", { NULL }, 5453, "tcp" },
+ { "surebox", { NULL }, 5453, "udp" },
+ { "apc-5454", { NULL }, 5454, "tcp" },
+ { "apc-5454", { NULL }, 5454, "udp" },
+ { "apc-5455", { NULL }, 5455, "tcp" },
+ { "apc-5455", { NULL }, 5455, "udp" },
+ { "apc-5456", { NULL }, 5456, "tcp" },
+ { "apc-5456", { NULL }, 5456, "udp" },
+ { "silkmeter", { NULL }, 5461, "tcp" },
+ { "silkmeter", { NULL }, 5461, "udp" },
+ { "ttl-publisher", { NULL }, 5462, "tcp" },
+ { "ttl-publisher", { NULL }, 5462, "udp" },
+ { "ttlpriceproxy", { NULL }, 5463, "tcp" },
+ { "ttlpriceproxy", { NULL }, 5463, "udp" },
+ { "quailnet", { NULL }, 5464, "tcp" },
+ { "quailnet", { NULL }, 5464, "udp" },
+ { "netops-broker", { NULL }, 5465, "tcp" },
+ { "netops-broker", { NULL }, 5465, "udp" },
+ { "fcp-addr-srvr1", { NULL }, 5500, "tcp" },
+ { "fcp-addr-srvr1", { NULL }, 5500, "udp" },
+ { "fcp-addr-srvr2", { NULL }, 5501, "tcp" },
+ { "fcp-addr-srvr2", { NULL }, 5501, "udp" },
+ { "fcp-srvr-inst1", { NULL }, 5502, "tcp" },
+ { "fcp-srvr-inst1", { NULL }, 5502, "udp" },
+ { "fcp-srvr-inst2", { NULL }, 5503, "tcp" },
+ { "fcp-srvr-inst2", { NULL }, 5503, "udp" },
+ { "fcp-cics-gw1", { NULL }, 5504, "tcp" },
+ { "fcp-cics-gw1", { NULL }, 5504, "udp" },
+ { "checkoutdb", { NULL }, 5505, "tcp" },
+ { "checkoutdb", { NULL }, 5505, "udp" },
+ { "amc", { NULL }, 5506, "tcp" },
+ { "amc", { NULL }, 5506, "udp" },
+ { "sgi-eventmond", { NULL }, 5553, "tcp" },
+ { "sgi-eventmond", { NULL }, 5553, "udp" },
+ { "sgi-esphttp", { NULL }, 5554, "tcp" },
+ { "sgi-esphttp", { NULL }, 5554, "udp" },
+ { "personal-agent", { NULL }, 5555, "tcp" },
+ { "personal-agent", { NULL }, 5555, "udp" },
+ { "freeciv", { NULL }, 5556, "tcp" },
+ { "freeciv", { NULL }, 5556, "udp" },
+ { "farenet", { NULL }, 5557, "tcp" },
+ { "westec-connect", { NULL }, 5566, "tcp" },
+ { "m-oap", { NULL }, 5567, "tcp" },
+ { "m-oap", { NULL }, 5567, "udp" },
+ { "sdt", { NULL }, 5568, "tcp" },
+ { "sdt", { NULL }, 5568, "udp" },
+ { "sdmmp", { NULL }, 5573, "tcp" },
+ { "sdmmp", { NULL }, 5573, "udp" },
+ { "lsi-bobcat", { NULL }, 5574, "tcp" },
+ { "ora-oap", { NULL }, 5575, "tcp" },
+ { "fdtracks", { NULL }, 5579, "tcp" },
+ { "tmosms0", { NULL }, 5580, "tcp" },
+ { "tmosms0", { NULL }, 5580, "udp" },
+ { "tmosms1", { NULL }, 5581, "tcp" },
+ { "tmosms1", { NULL }, 5581, "udp" },
+ { "fac-restore", { NULL }, 5582, "tcp" },
+ { "fac-restore", { NULL }, 5582, "udp" },
+ { "tmo-icon-sync", { NULL }, 5583, "tcp" },
+ { "tmo-icon-sync", { NULL }, 5583, "udp" },
+ { "bis-web", { NULL }, 5584, "tcp" },
+ { "bis-web", { NULL }, 5584, "udp" },
+ { "bis-sync", { NULL }, 5585, "tcp" },
+ { "bis-sync", { NULL }, 5585, "udp" },
+ { "ininmessaging", { NULL }, 5597, "tcp" },
+ { "ininmessaging", { NULL }, 5597, "udp" },
+ { "mctfeed", { NULL }, 5598, "tcp" },
+ { "mctfeed", { NULL }, 5598, "udp" },
+ { "esinstall", { NULL }, 5599, "tcp" },
+ { "esinstall", { NULL }, 5599, "udp" },
+ { "esmmanager", { NULL }, 5600, "tcp" },
+ { "esmmanager", { NULL }, 5600, "udp" },
+ { "esmagent", { NULL }, 5601, "tcp" },
+ { "esmagent", { NULL }, 5601, "udp" },
+ { "a1-msc", { NULL }, 5602, "tcp" },
+ { "a1-msc", { NULL }, 5602, "udp" },
+ { "a1-bs", { NULL }, 5603, "tcp" },
+ { "a1-bs", { NULL }, 5603, "udp" },
+ { "a3-sdunode", { NULL }, 5604, "tcp" },
+ { "a3-sdunode", { NULL }, 5604, "udp" },
+ { "a4-sdunode", { NULL }, 5605, "tcp" },
+ { "a4-sdunode", { NULL }, 5605, "udp" },
+ { "ninaf", { NULL }, 5627, "tcp" },
+ { "ninaf", { NULL }, 5627, "udp" },
+ { "htrust", { NULL }, 5628, "tcp" },
+ { "htrust", { NULL }, 5628, "udp" },
+ { "symantec-sfdb", { NULL }, 5629, "tcp" },
+ { "symantec-sfdb", { NULL }, 5629, "udp" },
+ { "precise-comm", { NULL }, 5630, "tcp" },
+ { "precise-comm", { NULL }, 5630, "udp" },
+ { "pcanywheredata", { NULL }, 5631, "tcp" },
+ { "pcanywheredata", { NULL }, 5631, "udp" },
+ { "pcanywherestat", { NULL }, 5632, "tcp" },
+ { "pcanywherestat", { NULL }, 5632, "udp" },
+ { "beorl", { NULL }, 5633, "tcp" },
+ { "beorl", { NULL }, 5633, "udp" },
+ { "xprtld", { NULL }, 5634, "tcp" },
+ { "xprtld", { NULL }, 5634, "udp" },
+ { "sfmsso", { NULL }, 5635, "tcp" },
+ { "sfm-db-server", { NULL }, 5636, "tcp" },
+ { "cssc", { NULL }, 5637, "tcp" },
+ { "amqps", { NULL }, 5671, "tcp" },
+ { "amqps", { NULL }, 5671, "udp" },
+ { "amqp", { NULL }, 5672, "tcp" },
+ { "amqp", { NULL }, 5672, "udp" },
+ { "amqp", { NULL }, 5672, "sctp"},
+ { "jms", { NULL }, 5673, "tcp" },
+ { "jms", { NULL }, 5673, "udp" },
+ { "hyperscsi-port", { NULL }, 5674, "tcp" },
+ { "hyperscsi-port", { NULL }, 5674, "udp" },
+ { "v5ua", { NULL }, 5675, "tcp" },
+ { "v5ua", { NULL }, 5675, "udp" },
+ { "v5ua", { NULL }, 5675, "sctp"},
+ { "raadmin", { NULL }, 5676, "tcp" },
+ { "raadmin", { NULL }, 5676, "udp" },
+ { "questdb2-lnchr", { NULL }, 5677, "tcp" },
+ { "questdb2-lnchr", { NULL }, 5677, "udp" },
+ { "rrac", { NULL }, 5678, "tcp" },
+ { "rrac", { NULL }, 5678, "udp" },
+ { "dccm", { NULL }, 5679, "tcp" },
+ { "dccm", { NULL }, 5679, "udp" },
+ { "auriga-router", { NULL }, 5680, "tcp" },
+ { "auriga-router", { NULL }, 5680, "udp" },
+ { "ncxcp", { NULL }, 5681, "tcp" },
+ { "ncxcp", { NULL }, 5681, "udp" },
+ { "brightcore", { NULL }, 5682, "udp" },
+ { "ggz", { NULL }, 5688, "tcp" },
+ { "ggz", { NULL }, 5688, "udp" },
+ { "qmvideo", { NULL }, 5689, "tcp" },
+ { "qmvideo", { NULL }, 5689, "udp" },
+ { "proshareaudio", { NULL }, 5713, "tcp" },
+ { "proshareaudio", { NULL }, 5713, "udp" },
+ { "prosharevideo", { NULL }, 5714, "tcp" },
+ { "prosharevideo", { NULL }, 5714, "udp" },
+ { "prosharedata", { NULL }, 5715, "tcp" },
+ { "prosharedata", { NULL }, 5715, "udp" },
+ { "prosharerequest", { NULL }, 5716, "tcp" },
+ { "prosharerequest", { NULL }, 5716, "udp" },
+ { "prosharenotify", { NULL }, 5717, "tcp" },
+ { "prosharenotify", { NULL }, 5717, "udp" },
+ { "dpm", { NULL }, 5718, "tcp" },
+ { "dpm", { NULL }, 5718, "udp" },
+ { "dpm-agent", { NULL }, 5719, "tcp" },
+ { "dpm-agent", { NULL }, 5719, "udp" },
+ { "ms-licensing", { NULL }, 5720, "tcp" },
+ { "ms-licensing", { NULL }, 5720, "udp" },
+ { "dtpt", { NULL }, 5721, "tcp" },
+ { "dtpt", { NULL }, 5721, "udp" },
+ { "msdfsr", { NULL }, 5722, "tcp" },
+ { "msdfsr", { NULL }, 5722, "udp" },
+ { "omhs", { NULL }, 5723, "tcp" },
+ { "omhs", { NULL }, 5723, "udp" },
+ { "omsdk", { NULL }, 5724, "tcp" },
+ { "omsdk", { NULL }, 5724, "udp" },
+ { "ms-ilm", { NULL }, 5725, "tcp" },
+ { "ms-ilm-sts", { NULL }, 5726, "tcp" },
+ { "asgenf", { NULL }, 5727, "tcp" },
+ { "io-dist-data", { NULL }, 5728, "tcp" },
+ { "io-dist-group", { NULL }, 5728, "udp" },
+ { "openmail", { NULL }, 5729, "tcp" },
+ { "openmail", { NULL }, 5729, "udp" },
+ { "unieng", { NULL }, 5730, "tcp" },
+ { "unieng", { NULL }, 5730, "udp" },
+ { "ida-discover1", { NULL }, 5741, "tcp" },
+ { "ida-discover1", { NULL }, 5741, "udp" },
+ { "ida-discover2", { NULL }, 5742, "tcp" },
+ { "ida-discover2", { NULL }, 5742, "udp" },
+ { "watchdoc-pod", { NULL }, 5743, "tcp" },
+ { "watchdoc-pod", { NULL }, 5743, "udp" },
+ { "watchdoc", { NULL }, 5744, "tcp" },
+ { "watchdoc", { NULL }, 5744, "udp" },
+ { "fcopy-server", { NULL }, 5745, "tcp" },
+ { "fcopy-server", { NULL }, 5745, "udp" },
+ { "fcopys-server", { NULL }, 5746, "tcp" },
+ { "fcopys-server", { NULL }, 5746, "udp" },
+ { "tunatic", { NULL }, 5747, "tcp" },
+ { "tunatic", { NULL }, 5747, "udp" },
+ { "tunalyzer", { NULL }, 5748, "tcp" },
+ { "tunalyzer", { NULL }, 5748, "udp" },
+ { "rscd", { NULL }, 5750, "tcp" },
+ { "rscd", { NULL }, 5750, "udp" },
+ { "openmailg", { NULL }, 5755, "tcp" },
+ { "openmailg", { NULL }, 5755, "udp" },
+ { "x500ms", { NULL }, 5757, "tcp" },
+ { "x500ms", { NULL }, 5757, "udp" },
+ { "openmailns", { NULL }, 5766, "tcp" },
+ { "openmailns", { NULL }, 5766, "udp" },
+ { "s-openmail", { NULL }, 5767, "tcp" },
+ { "s-openmail", { NULL }, 5767, "udp" },
+ { "openmailpxy", { NULL }, 5768, "tcp" },
+ { "openmailpxy", { NULL }, 5768, "udp" },
+ { "spramsca", { NULL }, 5769, "tcp" },
+ { "spramsca", { NULL }, 5769, "udp" },
+ { "spramsd", { NULL }, 5770, "tcp" },
+ { "spramsd", { NULL }, 5770, "udp" },
+ { "netagent", { NULL }, 5771, "tcp" },
+ { "netagent", { NULL }, 5771, "udp" },
+ { "dali-port", { NULL }, 5777, "tcp" },
+ { "dali-port", { NULL }, 5777, "udp" },
+ { "vts-rpc", { NULL }, 5780, "tcp" },
+ { "3par-evts", { NULL }, 5781, "tcp" },
+ { "3par-evts", { NULL }, 5781, "udp" },
+ { "3par-mgmt", { NULL }, 5782, "tcp" },
+ { "3par-mgmt", { NULL }, 5782, "udp" },
+ { "3par-mgmt-ssl", { NULL }, 5783, "tcp" },
+ { "3par-mgmt-ssl", { NULL }, 5783, "udp" },
+ { "ibar", { NULL }, 5784, "udp" },
+ { "3par-rcopy", { NULL }, 5785, "tcp" },
+ { "3par-rcopy", { NULL }, 5785, "udp" },
+ { "cisco-redu", { NULL }, 5786, "udp" },
+ { "waascluster", { NULL }, 5787, "udp" },
+ { "xtreamx", { NULL }, 5793, "tcp" },
+ { "xtreamx", { NULL }, 5793, "udp" },
+ { "spdp", { NULL }, 5794, "udp" },
+ { "icmpd", { NULL }, 5813, "tcp" },
+ { "icmpd", { NULL }, 5813, "udp" },
+ { "spt-automation", { NULL }, 5814, "tcp" },
+ { "spt-automation", { NULL }, 5814, "udp" },
+ { "wherehoo", { NULL }, 5859, "tcp" },
+ { "wherehoo", { NULL }, 5859, "udp" },
+ { "ppsuitemsg", { NULL }, 5863, "tcp" },
+ { "ppsuitemsg", { NULL }, 5863, "udp" },
+ { "rfb", { NULL }, 5900, "tcp" },
+ { "rfb", { NULL }, 5900, "udp" },
+ { "cm", { NULL }, 5910, "tcp" },
+ { "cm", { NULL }, 5910, "udp" },
+ { "cpdlc", { NULL }, 5911, "tcp" },
+ { "cpdlc", { NULL }, 5911, "udp" },
+ { "fis", { NULL }, 5912, "tcp" },
+ { "fis", { NULL }, 5912, "udp" },
+ { "ads-c", { NULL }, 5913, "tcp" },
+ { "ads-c", { NULL }, 5913, "udp" },
+ { "indy", { NULL }, 5963, "tcp" },
+ { "indy", { NULL }, 5963, "udp" },
+ { "mppolicy-v5", { NULL }, 5968, "tcp" },
+ { "mppolicy-v5", { NULL }, 5968, "udp" },
+ { "mppolicy-mgr", { NULL }, 5969, "tcp" },
+ { "mppolicy-mgr", { NULL }, 5969, "udp" },
+ { "couchdb", { NULL }, 5984, "tcp" },
+ { "couchdb", { NULL }, 5984, "udp" },
+ { "wsman", { NULL }, 5985, "tcp" },
+ { "wsman", { NULL }, 5985, "udp" },
+ { "wsmans", { NULL }, 5986, "tcp" },
+ { "wsmans", { NULL }, 5986, "udp" },
+ { "wbem-rmi", { NULL }, 5987, "tcp" },
+ { "wbem-rmi", { NULL }, 5987, "udp" },
+ { "wbem-http", { NULL }, 5988, "tcp" },
+ { "wbem-http", { NULL }, 5988, "udp" },
+ { "wbem-https", { NULL }, 5989, "tcp" },
+ { "wbem-https", { NULL }, 5989, "udp" },
+ { "wbem-exp-https", { NULL }, 5990, "tcp" },
+ { "wbem-exp-https", { NULL }, 5990, "udp" },
+ { "nuxsl", { NULL }, 5991, "tcp" },
+ { "nuxsl", { NULL }, 5991, "udp" },
+ { "consul-insight", { NULL }, 5992, "tcp" },
+ { "consul-insight", { NULL }, 5992, "udp" },
+ { "cvsup", { NULL }, 5999, "tcp" },
+ { "cvsup", { NULL }, 5999, "udp" },
+ { "ndl-ahp-svc", { NULL }, 6064, "tcp" },
+ { "ndl-ahp-svc", { NULL }, 6064, "udp" },
+ { "winpharaoh", { NULL }, 6065, "tcp" },
+ { "winpharaoh", { NULL }, 6065, "udp" },
+ { "ewctsp", { NULL }, 6066, "tcp" },
+ { "ewctsp", { NULL }, 6066, "udp" },
+ { "gsmp", { NULL }, 6068, "tcp" },
+ { "gsmp", { NULL }, 6068, "udp" },
+ { "trip", { NULL }, 6069, "tcp" },
+ { "trip", { NULL }, 6069, "udp" },
+ { "messageasap", { NULL }, 6070, "tcp" },
+ { "messageasap", { NULL }, 6070, "udp" },
+ { "ssdtp", { NULL }, 6071, "tcp" },
+ { "ssdtp", { NULL }, 6071, "udp" },
+ { "diagnose-proc", { NULL }, 6072, "tcp" },
+ { "diagnose-proc", { NULL }, 6072, "udp" },
+ { "directplay8", { NULL }, 6073, "tcp" },
+ { "directplay8", { NULL }, 6073, "udp" },
+ { "max", { NULL }, 6074, "tcp" },
+ { "max", { NULL }, 6074, "udp" },
+ { "dpm-acm", { NULL }, 6075, "tcp" },
+ { "miami-bcast", { NULL }, 6083, "udp" },
+ { "p2p-sip", { NULL }, 6084, "tcp" },
+ { "konspire2b", { NULL }, 6085, "tcp" },
+ { "konspire2b", { NULL }, 6085, "udp" },
+ { "pdtp", { NULL }, 6086, "tcp" },
+ { "pdtp", { NULL }, 6086, "udp" },
+ { "ldss", { NULL }, 6087, "tcp" },
+ { "ldss", { NULL }, 6087, "udp" },
+ { "raxa-mgmt", { NULL }, 6099, "tcp" },
+ { "synchronet-db", { NULL }, 6100, "tcp" },
+ { "synchronet-db", { NULL }, 6100, "udp" },
+ { "synchronet-rtc", { NULL }, 6101, "tcp" },
+ { "synchronet-rtc", { NULL }, 6101, "udp" },
+ { "synchronet-upd", { NULL }, 6102, "tcp" },
+ { "synchronet-upd", { NULL }, 6102, "udp" },
+ { "rets", { NULL }, 6103, "tcp" },
+ { "rets", { NULL }, 6103, "udp" },
+ { "dbdb", { NULL }, 6104, "tcp" },
+ { "dbdb", { NULL }, 6104, "udp" },
+ { "primaserver", { NULL }, 6105, "tcp" },
+ { "primaserver", { NULL }, 6105, "udp" },
+ { "mpsserver", { NULL }, 6106, "tcp" },
+ { "mpsserver", { NULL }, 6106, "udp" },
+ { "etc-control", { NULL }, 6107, "tcp" },
+ { "etc-control", { NULL }, 6107, "udp" },
+ { "sercomm-scadmin", { NULL }, 6108, "tcp" },
+ { "sercomm-scadmin", { NULL }, 6108, "udp" },
+ { "globecast-id", { NULL }, 6109, "tcp" },
+ { "globecast-id", { NULL }, 6109, "udp" },
+ { "softcm", { NULL }, 6110, "tcp" },
+ { "softcm", { NULL }, 6110, "udp" },
+ { "spc", { NULL }, 6111, "tcp" },
+ { "spc", { NULL }, 6111, "udp" },
+ { "dtspcd", { NULL }, 6112, "tcp" },
+ { "dtspcd", { NULL }, 6112, "udp" },
+ { "dayliteserver", { NULL }, 6113, "tcp" },
+ { "wrspice", { NULL }, 6114, "tcp" },
+ { "xic", { NULL }, 6115, "tcp" },
+ { "xtlserv", { NULL }, 6116, "tcp" },
+ { "daylitetouch", { NULL }, 6117, "tcp" },
+ { "spdy", { NULL }, 6121, "tcp" },
+ { "bex-webadmin", { NULL }, 6122, "tcp" },
+ { "bex-webadmin", { NULL }, 6122, "udp" },
+ { "backup-express", { NULL }, 6123, "tcp" },
+ { "backup-express", { NULL }, 6123, "udp" },
+ { "pnbs", { NULL }, 6124, "tcp" },
+ { "pnbs", { NULL }, 6124, "udp" },
+ { "nbt-wol", { NULL }, 6133, "tcp" },
+ { "nbt-wol", { NULL }, 6133, "udp" },
+ { "pulsonixnls", { NULL }, 6140, "tcp" },
+ { "pulsonixnls", { NULL }, 6140, "udp" },
+ { "meta-corp", { NULL }, 6141, "tcp" },
+ { "meta-corp", { NULL }, 6141, "udp" },
+ { "aspentec-lm", { NULL }, 6142, "tcp" },
+ { "aspentec-lm", { NULL }, 6142, "udp" },
+ { "watershed-lm", { NULL }, 6143, "tcp" },
+ { "watershed-lm", { NULL }, 6143, "udp" },
+ { "statsci1-lm", { NULL }, 6144, "tcp" },
+ { "statsci1-lm", { NULL }, 6144, "udp" },
+ { "statsci2-lm", { NULL }, 6145, "tcp" },
+ { "statsci2-lm", { NULL }, 6145, "udp" },
+ { "lonewolf-lm", { NULL }, 6146, "tcp" },
+ { "lonewolf-lm", { NULL }, 6146, "udp" },
+ { "montage-lm", { NULL }, 6147, "tcp" },
+ { "montage-lm", { NULL }, 6147, "udp" },
+ { "ricardo-lm", { NULL }, 6148, "tcp" },
+ { "ricardo-lm", { NULL }, 6148, "udp" },
+ { "tal-pod", { NULL }, 6149, "tcp" },
+ { "tal-pod", { NULL }, 6149, "udp" },
+ { "efb-aci", { NULL }, 6159, "tcp" },
+ { "patrol-ism", { NULL }, 6161, "tcp" },
+ { "patrol-ism", { NULL }, 6161, "udp" },
+ { "patrol-coll", { NULL }, 6162, "tcp" },
+ { "patrol-coll", { NULL }, 6162, "udp" },
+ { "pscribe", { NULL }, 6163, "tcp" },
+ { "pscribe", { NULL }, 6163, "udp" },
+ { "lm-x", { NULL }, 6200, "tcp" },
+ { "lm-x", { NULL }, 6200, "udp" },
+ { "radmind", { NULL }, 6222, "tcp" },
+ { "radmind", { NULL }, 6222, "udp" },
+ { "jeol-nsdtp-1", { NULL }, 6241, "tcp" },
+ { "jeol-nsddp-1", { NULL }, 6241, "udp" },
+ { "jeol-nsdtp-2", { NULL }, 6242, "tcp" },
+ { "jeol-nsddp-2", { NULL }, 6242, "udp" },
+ { "jeol-nsdtp-3", { NULL }, 6243, "tcp" },
+ { "jeol-nsddp-3", { NULL }, 6243, "udp" },
+ { "jeol-nsdtp-4", { NULL }, 6244, "tcp" },
+ { "jeol-nsddp-4", { NULL }, 6244, "udp" },
+ { "tl1-raw-ssl", { NULL }, 6251, "tcp" },
+ { "tl1-raw-ssl", { NULL }, 6251, "udp" },
+ { "tl1-ssh", { NULL }, 6252, "tcp" },
+ { "tl1-ssh", { NULL }, 6252, "udp" },
+ { "crip", { NULL }, 6253, "tcp" },
+ { "crip", { NULL }, 6253, "udp" },
+ { "gld", { NULL }, 6267, "tcp" },
+ { "grid", { NULL }, 6268, "tcp" },
+ { "grid", { NULL }, 6268, "udp" },
+ { "grid-alt", { NULL }, 6269, "tcp" },
+ { "grid-alt", { NULL }, 6269, "udp" },
+ { "bmc-grx", { NULL }, 6300, "tcp" },
+ { "bmc-grx", { NULL }, 6300, "udp" },
+ { "bmc_ctd_ldap", { NULL }, 6301, "tcp" },
+ { "bmc_ctd_ldap", { NULL }, 6301, "udp" },
+ { "ufmp", { NULL }, 6306, "tcp" },
+ { "ufmp", { NULL }, 6306, "udp" },
+ { "scup", { NULL }, 6315, "tcp" },
+ { "scup-disc", { NULL }, 6315, "udp" },
+ { "abb-escp", { NULL }, 6316, "tcp" },
+ { "abb-escp", { NULL }, 6316, "udp" },
+ { "repsvc", { NULL }, 6320, "tcp" },
+ { "repsvc", { NULL }, 6320, "udp" },
+ { "emp-server1", { NULL }, 6321, "tcp" },
+ { "emp-server1", { NULL }, 6321, "udp" },
+ { "emp-server2", { NULL }, 6322, "tcp" },
+ { "emp-server2", { NULL }, 6322, "udp" },
+ { "sflow", { NULL }, 6343, "tcp" },
+ { "sflow", { NULL }, 6343, "udp" },
+ { "gnutella-svc", { NULL }, 6346, "tcp" },
+ { "gnutella-svc", { NULL }, 6346, "udp" },
+ { "gnutella-rtr", { NULL }, 6347, "tcp" },
+ { "gnutella-rtr", { NULL }, 6347, "udp" },
+ { "adap", { NULL }, 6350, "tcp" },
+ { "adap", { NULL }, 6350, "udp" },
+ { "pmcs", { NULL }, 6355, "tcp" },
+ { "pmcs", { NULL }, 6355, "udp" },
+ { "metaedit-mu", { NULL }, 6360, "tcp" },
+ { "metaedit-mu", { NULL }, 6360, "udp" },
+ { "metaedit-se", { NULL }, 6370, "tcp" },
+ { "metaedit-se", { NULL }, 6370, "udp" },
+ { "metatude-mds", { NULL }, 6382, "tcp" },
+ { "metatude-mds", { NULL }, 6382, "udp" },
+ { "clariion-evr01", { NULL }, 6389, "tcp" },
+ { "clariion-evr01", { NULL }, 6389, "udp" },
+ { "metaedit-ws", { NULL }, 6390, "tcp" },
+ { "metaedit-ws", { NULL }, 6390, "udp" },
+ { "faxcomservice", { NULL }, 6417, "tcp" },
+ { "faxcomservice", { NULL }, 6417, "udp" },
+ { "syserverremote", { NULL }, 6418, "tcp" },
+ { "svdrp", { NULL }, 6419, "tcp" },
+ { "nim-vdrshell", { NULL }, 6420, "tcp" },
+ { "nim-vdrshell", { NULL }, 6420, "udp" },
+ { "nim-wan", { NULL }, 6421, "tcp" },
+ { "nim-wan", { NULL }, 6421, "udp" },
+ { "pgbouncer", { NULL }, 6432, "tcp" },
+ { "sun-sr-https", { NULL }, 6443, "tcp" },
+ { "sun-sr-https", { NULL }, 6443, "udp" },
+ { "sge_qmaster", { NULL }, 6444, "tcp" },
+ { "sge_qmaster", { NULL }, 6444, "udp" },
+ { "sge_execd", { NULL }, 6445, "tcp" },
+ { "sge_execd", { NULL }, 6445, "udp" },
+ { "mysql-proxy", { NULL }, 6446, "tcp" },
+ { "mysql-proxy", { NULL }, 6446, "udp" },
+ { "skip-cert-recv", { NULL }, 6455, "tcp" },
+ { "skip-cert-send", { NULL }, 6456, "udp" },
+ { "lvision-lm", { NULL }, 6471, "tcp" },
+ { "lvision-lm", { NULL }, 6471, "udp" },
+ { "sun-sr-http", { NULL }, 6480, "tcp" },
+ { "sun-sr-http", { NULL }, 6480, "udp" },
+ { "servicetags", { NULL }, 6481, "tcp" },
+ { "servicetags", { NULL }, 6481, "udp" },
+ { "ldoms-mgmt", { NULL }, 6482, "tcp" },
+ { "ldoms-mgmt", { NULL }, 6482, "udp" },
+ { "SunVTS-RMI", { NULL }, 6483, "tcp" },
+ { "SunVTS-RMI", { NULL }, 6483, "udp" },
+ { "sun-sr-jms", { NULL }, 6484, "tcp" },
+ { "sun-sr-jms", { NULL }, 6484, "udp" },
+ { "sun-sr-iiop", { NULL }, 6485, "tcp" },
+ { "sun-sr-iiop", { NULL }, 6485, "udp" },
+ { "sun-sr-iiops", { NULL }, 6486, "tcp" },
+ { "sun-sr-iiops", { NULL }, 6486, "udp" },
+ { "sun-sr-iiop-aut", { NULL }, 6487, "tcp" },
+ { "sun-sr-iiop-aut", { NULL }, 6487, "udp" },
+ { "sun-sr-jmx", { NULL }, 6488, "tcp" },
+ { "sun-sr-jmx", { NULL }, 6488, "udp" },
+ { "sun-sr-admin", { NULL }, 6489, "tcp" },
+ { "sun-sr-admin", { NULL }, 6489, "udp" },
+ { "boks", { NULL }, 6500, "tcp" },
+ { "boks", { NULL }, 6500, "udp" },
+ { "boks_servc", { NULL }, 6501, "tcp" },
+ { "boks_servc", { NULL }, 6501, "udp" },
+ { "boks_servm", { NULL }, 6502, "tcp" },
+ { "boks_servm", { NULL }, 6502, "udp" },
+ { "boks_clntd", { NULL }, 6503, "tcp" },
+ { "boks_clntd", { NULL }, 6503, "udp" },
+ { "badm_priv", { NULL }, 6505, "tcp" },
+ { "badm_priv", { NULL }, 6505, "udp" },
+ { "badm_pub", { NULL }, 6506, "tcp" },
+ { "badm_pub", { NULL }, 6506, "udp" },
+ { "bdir_priv", { NULL }, 6507, "tcp" },
+ { "bdir_priv", { NULL }, 6507, "udp" },
+ { "bdir_pub", { NULL }, 6508, "tcp" },
+ { "bdir_pub", { NULL }, 6508, "udp" },
+ { "mgcs-mfp-port", { NULL }, 6509, "tcp" },
+ { "mgcs-mfp-port", { NULL }, 6509, "udp" },
+ { "mcer-port", { NULL }, 6510, "tcp" },
+ { "mcer-port", { NULL }, 6510, "udp" },
+ { "netconf-tls", { NULL }, 6513, "tcp" },
+ { "syslog-tls", { NULL }, 6514, "tcp" },
+ { "syslog-tls", { NULL }, 6514, "udp" },
+ { "syslog-tls", { NULL }, 6514, "dccp"},
+ { "elipse-rec", { NULL }, 6515, "tcp" },
+ { "elipse-rec", { NULL }, 6515, "udp" },
+ { "lds-distrib", { NULL }, 6543, "tcp" },
+ { "lds-distrib", { NULL }, 6543, "udp" },
+ { "lds-dump", { NULL }, 6544, "tcp" },
+ { "lds-dump", { NULL }, 6544, "udp" },
+ { "apc-6547", { NULL }, 6547, "tcp" },
+ { "apc-6547", { NULL }, 6547, "udp" },
+ { "apc-6548", { NULL }, 6548, "tcp" },
+ { "apc-6548", { NULL }, 6548, "udp" },
+ { "apc-6549", { NULL }, 6549, "tcp" },
+ { "apc-6549", { NULL }, 6549, "udp" },
+ { "fg-sysupdate", { NULL }, 6550, "tcp" },
+ { "fg-sysupdate", { NULL }, 6550, "udp" },
+ { "sum", { NULL }, 6551, "tcp" },
+ { "sum", { NULL }, 6551, "udp" },
+ { "xdsxdm", { NULL }, 6558, "tcp" },
+ { "xdsxdm", { NULL }, 6558, "udp" },
+ { "sane-port", { NULL }, 6566, "tcp" },
+ { "sane-port", { NULL }, 6566, "udp" },
+ { "esp", { NULL }, 6567, "tcp" },
+ { "esp", { NULL }, 6567, "udp" },
+ { "canit_store", { NULL }, 6568, "tcp" },
+ { "rp-reputation", { NULL }, 6568, "udp" },
+ { "affiliate", { NULL }, 6579, "tcp" },
+ { "affiliate", { NULL }, 6579, "udp" },
+ { "parsec-master", { NULL }, 6580, "tcp" },
+ { "parsec-master", { NULL }, 6580, "udp" },
+ { "parsec-peer", { NULL }, 6581, "tcp" },
+ { "parsec-peer", { NULL }, 6581, "udp" },
+ { "parsec-game", { NULL }, 6582, "tcp" },
+ { "parsec-game", { NULL }, 6582, "udp" },
+ { "joaJewelSuite", { NULL }, 6583, "tcp" },
+ { "joaJewelSuite", { NULL }, 6583, "udp" },
+ { "mshvlm", { NULL }, 6600, "tcp" },
+ { "mstmg-sstp", { NULL }, 6601, "tcp" },
+ { "wsscomfrmwk", { NULL }, 6602, "tcp" },
+ { "odette-ftps", { NULL }, 6619, "tcp" },
+ { "odette-ftps", { NULL }, 6619, "udp" },
+ { "kftp-data", { NULL }, 6620, "tcp" },
+ { "kftp-data", { NULL }, 6620, "udp" },
+ { "kftp", { NULL }, 6621, "tcp" },
+ { "kftp", { NULL }, 6621, "udp" },
+ { "mcftp", { NULL }, 6622, "tcp" },
+ { "mcftp", { NULL }, 6622, "udp" },
+ { "ktelnet", { NULL }, 6623, "tcp" },
+ { "ktelnet", { NULL }, 6623, "udp" },
+ { "datascaler-db", { NULL }, 6624, "tcp" },
+ { "datascaler-ctl", { NULL }, 6625, "tcp" },
+ { "wago-service", { NULL }, 6626, "tcp" },
+ { "wago-service", { NULL }, 6626, "udp" },
+ { "nexgen", { NULL }, 6627, "tcp" },
+ { "nexgen", { NULL }, 6627, "udp" },
+ { "afesc-mc", { NULL }, 6628, "tcp" },
+ { "afesc-mc", { NULL }, 6628, "udp" },
+ { "mxodbc-connect", { NULL }, 6632, "tcp" },
+ { "pcs-sf-ui-man", { NULL }, 6655, "tcp" },
+ { "emgmsg", { NULL }, 6656, "tcp" },
+ { "palcom-disc", { NULL }, 6657, "udp" },
+ { "vocaltec-gold", { NULL }, 6670, "tcp" },
+ { "vocaltec-gold", { NULL }, 6670, "udp" },
+ { "p4p-portal", { NULL }, 6671, "tcp" },
+ { "p4p-portal", { NULL }, 6671, "udp" },
+ { "vision_server", { NULL }, 6672, "tcp" },
+ { "vision_server", { NULL }, 6672, "udp" },
+ { "vision_elmd", { NULL }, 6673, "tcp" },
+ { "vision_elmd", { NULL }, 6673, "udp" },
+ { "vfbp", { NULL }, 6678, "tcp" },
+ { "vfbp-disc", { NULL }, 6678, "udp" },
+ { "osaut", { NULL }, 6679, "tcp" },
+ { "osaut", { NULL }, 6679, "udp" },
+ { "clever-ctrace", { NULL }, 6687, "tcp" },
+ { "clever-tcpip", { NULL }, 6688, "tcp" },
+ { "tsa", { NULL }, 6689, "tcp" },
+ { "tsa", { NULL }, 6689, "udp" },
+ { "babel", { NULL }, 6697, "udp" },
+ { "kti-icad-srvr", { NULL }, 6701, "tcp" },
+ { "kti-icad-srvr", { NULL }, 6701, "udp" },
+ { "e-design-net", { NULL }, 6702, "tcp" },
+ { "e-design-net", { NULL }, 6702, "udp" },
+ { "e-design-web", { NULL }, 6703, "tcp" },
+ { "e-design-web", { NULL }, 6703, "udp" },
+ { "frc-hp", { NULL }, 6704, "sctp"},
+ { "frc-mp", { NULL }, 6705, "sctp"},
+ { "frc-lp", { NULL }, 6706, "sctp"},
+ { "ibprotocol", { NULL }, 6714, "tcp" },
+ { "ibprotocol", { NULL }, 6714, "udp" },
+ { "fibotrader-com", { NULL }, 6715, "tcp" },
+ { "fibotrader-com", { NULL }, 6715, "udp" },
+ { "bmc-perf-agent", { NULL }, 6767, "tcp" },
+ { "bmc-perf-agent", { NULL }, 6767, "udp" },
+ { "bmc-perf-mgrd", { NULL }, 6768, "tcp" },
+ { "bmc-perf-mgrd", { NULL }, 6768, "udp" },
+ { "adi-gxp-srvprt", { NULL }, 6769, "tcp" },
+ { "adi-gxp-srvprt", { NULL }, 6769, "udp" },
+ { "plysrv-http", { NULL }, 6770, "tcp" },
+ { "plysrv-http", { NULL }, 6770, "udp" },
+ { "plysrv-https", { NULL }, 6771, "tcp" },
+ { "plysrv-https", { NULL }, 6771, "udp" },
+ { "dgpf-exchg", { NULL }, 6785, "tcp" },
+ { "dgpf-exchg", { NULL }, 6785, "udp" },
+ { "smc-jmx", { NULL }, 6786, "tcp" },
+ { "smc-jmx", { NULL }, 6786, "udp" },
+ { "smc-admin", { NULL }, 6787, "tcp" },
+ { "smc-admin", { NULL }, 6787, "udp" },
+ { "smc-http", { NULL }, 6788, "tcp" },
+ { "smc-http", { NULL }, 6788, "udp" },
+ { "smc-https", { NULL }, 6789, "tcp" },
+ { "smc-https", { NULL }, 6789, "udp" },
+ { "hnmp", { NULL }, 6790, "tcp" },
+ { "hnmp", { NULL }, 6790, "udp" },
+ { "hnm", { NULL }, 6791, "tcp" },
+ { "hnm", { NULL }, 6791, "udp" },
+ { "acnet", { NULL }, 6801, "tcp" },
+ { "acnet", { NULL }, 6801, "udp" },
+ { "pentbox-sim", { NULL }, 6817, "tcp" },
+ { "ambit-lm", { NULL }, 6831, "tcp" },
+ { "ambit-lm", { NULL }, 6831, "udp" },
+ { "netmo-default", { NULL }, 6841, "tcp" },
+ { "netmo-default", { NULL }, 6841, "udp" },
+ { "netmo-http", { NULL }, 6842, "tcp" },
+ { "netmo-http", { NULL }, 6842, "udp" },
+ { "iccrushmore", { NULL }, 6850, "tcp" },
+ { "iccrushmore", { NULL }, 6850, "udp" },
+ { "acctopus-cc", { NULL }, 6868, "tcp" },
+ { "acctopus-st", { NULL }, 6868, "udp" },
+ { "muse", { NULL }, 6888, "tcp" },
+ { "muse", { NULL }, 6888, "udp" },
+ { "jetstream", { NULL }, 6901, "tcp" },
+ { "xsmsvc", { NULL }, 6936, "tcp" },
+ { "xsmsvc", { NULL }, 6936, "udp" },
+ { "bioserver", { NULL }, 6946, "tcp" },
+ { "bioserver", { NULL }, 6946, "udp" },
+ { "otlp", { NULL }, 6951, "tcp" },
+ { "otlp", { NULL }, 6951, "udp" },
+ { "jmact3", { NULL }, 6961, "tcp" },
+ { "jmact3", { NULL }, 6961, "udp" },
+ { "jmevt2", { NULL }, 6962, "tcp" },
+ { "jmevt2", { NULL }, 6962, "udp" },
+ { "swismgr1", { NULL }, 6963, "tcp" },
+ { "swismgr1", { NULL }, 6963, "udp" },
+ { "swismgr2", { NULL }, 6964, "tcp" },
+ { "swismgr2", { NULL }, 6964, "udp" },
+ { "swistrap", { NULL }, 6965, "tcp" },
+ { "swistrap", { NULL }, 6965, "udp" },
+ { "swispol", { NULL }, 6966, "tcp" },
+ { "swispol", { NULL }, 6966, "udp" },
+ { "acmsoda", { NULL }, 6969, "tcp" },
+ { "acmsoda", { NULL }, 6969, "udp" },
+ { "MobilitySrv", { NULL }, 6997, "tcp" },
+ { "MobilitySrv", { NULL }, 6997, "udp" },
+ { "iatp-highpri", { NULL }, 6998, "tcp" },
+ { "iatp-highpri", { NULL }, 6998, "udp" },
+ { "iatp-normalpri", { NULL }, 6999, "tcp" },
+ { "iatp-normalpri", { NULL }, 6999, "udp" },
+ { "afs3-fileserver", { NULL }, 7000, "tcp" },
+ { "afs3-fileserver", { NULL }, 7000, "udp" },
+ { "afs3-callback", { NULL }, 7001, "tcp" },
+ { "afs3-callback", { NULL }, 7001, "udp" },
+ { "afs3-prserver", { NULL }, 7002, "tcp" },
+ { "afs3-prserver", { NULL }, 7002, "udp" },
+ { "afs3-vlserver", { NULL }, 7003, "tcp" },
+ { "afs3-vlserver", { NULL }, 7003, "udp" },
+ { "afs3-kaserver", { NULL }, 7004, "tcp" },
+ { "afs3-kaserver", { NULL }, 7004, "udp" },
+ { "afs3-volser", { NULL }, 7005, "tcp" },
+ { "afs3-volser", { NULL }, 7005, "udp" },
+ { "afs3-errors", { NULL }, 7006, "tcp" },
+ { "afs3-errors", { NULL }, 7006, "udp" },
+ { "afs3-bos", { NULL }, 7007, "tcp" },
+ { "afs3-bos", { NULL }, 7007, "udp" },
+ { "afs3-update", { NULL }, 7008, "tcp" },
+ { "afs3-update", { NULL }, 7008, "udp" },
+ { "afs3-rmtsys", { NULL }, 7009, "tcp" },
+ { "afs3-rmtsys", { NULL }, 7009, "udp" },
+ { "ups-onlinet", { NULL }, 7010, "tcp" },
+ { "ups-onlinet", { NULL }, 7010, "udp" },
+ { "talon-disc", { NULL }, 7011, "tcp" },
+ { "talon-disc", { NULL }, 7011, "udp" },
+ { "talon-engine", { NULL }, 7012, "tcp" },
+ { "talon-engine", { NULL }, 7012, "udp" },
+ { "microtalon-dis", { NULL }, 7013, "tcp" },
+ { "microtalon-dis", { NULL }, 7013, "udp" },
+ { "microtalon-com", { NULL }, 7014, "tcp" },
+ { "microtalon-com", { NULL }, 7014, "udp" },
+ { "talon-webserver", { NULL }, 7015, "tcp" },
+ { "talon-webserver", { NULL }, 7015, "udp" },
+ { "dpserve", { NULL }, 7020, "tcp" },
+ { "dpserve", { NULL }, 7020, "udp" },
+ { "dpserveadmin", { NULL }, 7021, "tcp" },
+ { "dpserveadmin", { NULL }, 7021, "udp" },
+ { "ctdp", { NULL }, 7022, "tcp" },
+ { "ctdp", { NULL }, 7022, "udp" },
+ { "ct2nmcs", { NULL }, 7023, "tcp" },
+ { "ct2nmcs", { NULL }, 7023, "udp" },
+ { "vmsvc", { NULL }, 7024, "tcp" },
+ { "vmsvc", { NULL }, 7024, "udp" },
+ { "vmsvc-2", { NULL }, 7025, "tcp" },
+ { "vmsvc-2", { NULL }, 7025, "udp" },
+ { "op-probe", { NULL }, 7030, "tcp" },
+ { "op-probe", { NULL }, 7030, "udp" },
+ { "arcp", { NULL }, 7070, "tcp" },
+ { "arcp", { NULL }, 7070, "udp" },
+ { "iwg1", { NULL }, 7071, "tcp" },
+ { "iwg1", { NULL }, 7071, "udp" },
+ { "empowerid", { NULL }, 7080, "tcp" },
+ { "empowerid", { NULL }, 7080, "udp" },
+ { "lazy-ptop", { NULL }, 7099, "tcp" },
+ { "lazy-ptop", { NULL }, 7099, "udp" },
+ { "font-service", { NULL }, 7100, "tcp" },
+ { "font-service", { NULL }, 7100, "udp" },
+ { "elcn", { NULL }, 7101, "tcp" },
+ { "elcn", { NULL }, 7101, "udp" },
+ { "aes-x170", { NULL }, 7107, "udp" },
+ { "virprot-lm", { NULL }, 7121, "tcp" },
+ { "virprot-lm", { NULL }, 7121, "udp" },
+ { "scenidm", { NULL }, 7128, "tcp" },
+ { "scenidm", { NULL }, 7128, "udp" },
+ { "scenccs", { NULL }, 7129, "tcp" },
+ { "scenccs", { NULL }, 7129, "udp" },
+ { "cabsm-comm", { NULL }, 7161, "tcp" },
+ { "cabsm-comm", { NULL }, 7161, "udp" },
+ { "caistoragemgr", { NULL }, 7162, "tcp" },
+ { "caistoragemgr", { NULL }, 7162, "udp" },
+ { "cacsambroker", { NULL }, 7163, "tcp" },
+ { "cacsambroker", { NULL }, 7163, "udp" },
+ { "fsr", { NULL }, 7164, "tcp" },
+ { "fsr", { NULL }, 7164, "udp" },
+ { "doc-server", { NULL }, 7165, "tcp" },
+ { "doc-server", { NULL }, 7165, "udp" },
+ { "aruba-server", { NULL }, 7166, "tcp" },
+ { "aruba-server", { NULL }, 7166, "udp" },
+ { "casrmagent", { NULL }, 7167, "tcp" },
+ { "cnckadserver", { NULL }, 7168, "tcp" },
+ { "ccag-pib", { NULL }, 7169, "tcp" },
+ { "ccag-pib", { NULL }, 7169, "udp" },
+ { "nsrp", { NULL }, 7170, "tcp" },
+ { "nsrp", { NULL }, 7170, "udp" },
+ { "drm-production", { NULL }, 7171, "tcp" },
+ { "drm-production", { NULL }, 7171, "udp" },
+ { "zsecure", { NULL }, 7173, "tcp" },
+ { "clutild", { NULL }, 7174, "tcp" },
+ { "clutild", { NULL }, 7174, "udp" },
+ { "fodms", { NULL }, 7200, "tcp" },
+ { "fodms", { NULL }, 7200, "udp" },
+ { "dlip", { NULL }, 7201, "tcp" },
+ { "dlip", { NULL }, 7201, "udp" },
+ { "ramp", { NULL }, 7227, "tcp" },
+ { "ramp", { NULL }, 7227, "udp" },
+ { "citrixupp", { NULL }, 7228, "tcp" },
+ { "citrixuppg", { NULL }, 7229, "tcp" },
+ { "pads", { NULL }, 7237, "tcp" },
+ { "cnap", { NULL }, 7262, "tcp" },
+ { "cnap", { NULL }, 7262, "udp" },
+ { "watchme-7272", { NULL }, 7272, "tcp" },
+ { "watchme-7272", { NULL }, 7272, "udp" },
+ { "oma-rlp", { NULL }, 7273, "tcp" },
+ { "oma-rlp", { NULL }, 7273, "udp" },
+ { "oma-rlp-s", { NULL }, 7274, "tcp" },
+ { "oma-rlp-s", { NULL }, 7274, "udp" },
+ { "oma-ulp", { NULL }, 7275, "tcp" },
+ { "oma-ulp", { NULL }, 7275, "udp" },
+ { "oma-ilp", { NULL }, 7276, "tcp" },
+ { "oma-ilp", { NULL }, 7276, "udp" },
+ { "oma-ilp-s", { NULL }, 7277, "tcp" },
+ { "oma-ilp-s", { NULL }, 7277, "udp" },
+ { "oma-dcdocbs", { NULL }, 7278, "tcp" },
+ { "oma-dcdocbs", { NULL }, 7278, "udp" },
+ { "ctxlic", { NULL }, 7279, "tcp" },
+ { "ctxlic", { NULL }, 7279, "udp" },
+ { "itactionserver1", { NULL }, 7280, "tcp" },
+ { "itactionserver1", { NULL }, 7280, "udp" },
+ { "itactionserver2", { NULL }, 7281, "tcp" },
+ { "itactionserver2", { NULL }, 7281, "udp" },
+ { "mzca-action", { NULL }, 7282, "tcp" },
+ { "mzca-alert", { NULL }, 7282, "udp" },
+ { "lcm-server", { NULL }, 7365, "tcp" },
+ { "lcm-server", { NULL }, 7365, "udp" },
+ { "mindfilesys", { NULL }, 7391, "tcp" },
+ { "mindfilesys", { NULL }, 7391, "udp" },
+ { "mrssrendezvous", { NULL }, 7392, "tcp" },
+ { "mrssrendezvous", { NULL }, 7392, "udp" },
+ { "nfoldman", { NULL }, 7393, "tcp" },
+ { "nfoldman", { NULL }, 7393, "udp" },
+ { "fse", { NULL }, 7394, "tcp" },
+ { "fse", { NULL }, 7394, "udp" },
+ { "winqedit", { NULL }, 7395, "tcp" },
+ { "winqedit", { NULL }, 7395, "udp" },
+ { "hexarc", { NULL }, 7397, "tcp" },
+ { "hexarc", { NULL }, 7397, "udp" },
+ { "rtps-discovery", { NULL }, 7400, "tcp" },
+ { "rtps-discovery", { NULL }, 7400, "udp" },
+ { "rtps-dd-ut", { NULL }, 7401, "tcp" },
+ { "rtps-dd-ut", { NULL }, 7401, "udp" },
+ { "rtps-dd-mt", { NULL }, 7402, "tcp" },
+ { "rtps-dd-mt", { NULL }, 7402, "udp" },
+ { "ionixnetmon", { NULL }, 7410, "tcp" },
+ { "ionixnetmon", { NULL }, 7410, "udp" },
+ { "mtportmon", { NULL }, 7421, "tcp" },
+ { "mtportmon", { NULL }, 7421, "udp" },
+ { "pmdmgr", { NULL }, 7426, "tcp" },
+ { "pmdmgr", { NULL }, 7426, "udp" },
+ { "oveadmgr", { NULL }, 7427, "tcp" },
+ { "oveadmgr", { NULL }, 7427, "udp" },
+ { "ovladmgr", { NULL }, 7428, "tcp" },
+ { "ovladmgr", { NULL }, 7428, "udp" },
+ { "opi-sock", { NULL }, 7429, "tcp" },
+ { "opi-sock", { NULL }, 7429, "udp" },
+ { "xmpv7", { NULL }, 7430, "tcp" },
+ { "xmpv7", { NULL }, 7430, "udp" },
+ { "pmd", { NULL }, 7431, "tcp" },
+ { "pmd", { NULL }, 7431, "udp" },
+ { "faximum", { NULL }, 7437, "tcp" },
+ { "faximum", { NULL }, 7437, "udp" },
+ { "oracleas-https", { NULL }, 7443, "tcp" },
+ { "oracleas-https", { NULL }, 7443, "udp" },
+ { "rise", { NULL }, 7473, "tcp" },
+ { "rise", { NULL }, 7473, "udp" },
+ { "telops-lmd", { NULL }, 7491, "tcp" },
+ { "telops-lmd", { NULL }, 7491, "udp" },
+ { "silhouette", { NULL }, 7500, "tcp" },
+ { "silhouette", { NULL }, 7500, "udp" },
+ { "ovbus", { NULL }, 7501, "tcp" },
+ { "ovbus", { NULL }, 7501, "udp" },
+ { "acplt", { NULL }, 7509, "tcp" },
+ { "ovhpas", { NULL }, 7510, "tcp" },
+ { "ovhpas", { NULL }, 7510, "udp" },
+ { "pafec-lm", { NULL }, 7511, "tcp" },
+ { "pafec-lm", { NULL }, 7511, "udp" },
+ { "saratoga", { NULL }, 7542, "tcp" },
+ { "saratoga", { NULL }, 7542, "udp" },
+ { "atul", { NULL }, 7543, "tcp" },
+ { "atul", { NULL }, 7543, "udp" },
+ { "nta-ds", { NULL }, 7544, "tcp" },
+ { "nta-ds", { NULL }, 7544, "udp" },
+ { "nta-us", { NULL }, 7545, "tcp" },
+ { "nta-us", { NULL }, 7545, "udp" },
+ { "cfs", { NULL }, 7546, "tcp" },
+ { "cfs", { NULL }, 7546, "udp" },
+ { "cwmp", { NULL }, 7547, "tcp" },
+ { "cwmp", { NULL }, 7547, "udp" },
+ { "tidp", { NULL }, 7548, "tcp" },
+ { "tidp", { NULL }, 7548, "udp" },
+ { "nls-tl", { NULL }, 7549, "tcp" },
+ { "nls-tl", { NULL }, 7549, "udp" },
+ { "sncp", { NULL }, 7560, "tcp" },
+ { "sncp", { NULL }, 7560, "udp" },
+ { "cfw", { NULL }, 7563, "tcp" },
+ { "vsi-omega", { NULL }, 7566, "tcp" },
+ { "vsi-omega", { NULL }, 7566, "udp" },
+ { "dell-eql-asm", { NULL }, 7569, "tcp" },
+ { "aries-kfinder", { NULL }, 7570, "tcp" },
+ { "aries-kfinder", { NULL }, 7570, "udp" },
+ { "sun-lm", { NULL }, 7588, "tcp" },
+ { "sun-lm", { NULL }, 7588, "udp" },
+ { "indi", { NULL }, 7624, "tcp" },
+ { "indi", { NULL }, 7624, "udp" },
+ { "simco", { NULL }, 7626, "tcp" },
+ { "simco", { NULL }, 7626, "sctp"},
+ { "soap-http", { NULL }, 7627, "tcp" },
+ { "soap-http", { NULL }, 7627, "udp" },
+ { "zen-pawn", { NULL }, 7628, "tcp" },
+ { "zen-pawn", { NULL }, 7628, "udp" },
+ { "xdas", { NULL }, 7629, "tcp" },
+ { "xdas", { NULL }, 7629, "udp" },
+ { "hawk", { NULL }, 7630, "tcp" },
+ { "tesla-sys-msg", { NULL }, 7631, "tcp" },
+ { "pmdfmgt", { NULL }, 7633, "tcp" },
+ { "pmdfmgt", { NULL }, 7633, "udp" },
+ { "cuseeme", { NULL }, 7648, "tcp" },
+ { "cuseeme", { NULL }, 7648, "udp" },
+ { "imqstomp", { NULL }, 7672, "tcp" },
+ { "imqstomps", { NULL }, 7673, "tcp" },
+ { "imqtunnels", { NULL }, 7674, "tcp" },
+ { "imqtunnels", { NULL }, 7674, "udp" },
+ { "imqtunnel", { NULL }, 7675, "tcp" },
+ { "imqtunnel", { NULL }, 7675, "udp" },
+ { "imqbrokerd", { NULL }, 7676, "tcp" },
+ { "imqbrokerd", { NULL }, 7676, "udp" },
+ { "sun-user-https", { NULL }, 7677, "tcp" },
+ { "sun-user-https", { NULL }, 7677, "udp" },
+ { "pando-pub", { NULL }, 7680, "tcp" },
+ { "pando-pub", { NULL }, 7680, "udp" },
+ { "collaber", { NULL }, 7689, "tcp" },
+ { "collaber", { NULL }, 7689, "udp" },
+ { "klio", { NULL }, 7697, "tcp" },
+ { "klio", { NULL }, 7697, "udp" },
+ { "em7-secom", { NULL }, 7700, "tcp" },
+ { "sync-em7", { NULL }, 7707, "tcp" },
+ { "sync-em7", { NULL }, 7707, "udp" },
+ { "scinet", { NULL }, 7708, "tcp" },
+ { "scinet", { NULL }, 7708, "udp" },
+ { "medimageportal", { NULL }, 7720, "tcp" },
+ { "medimageportal", { NULL }, 7720, "udp" },
+ { "nsdeepfreezectl", { NULL }, 7724, "tcp" },
+ { "nsdeepfreezectl", { NULL }, 7724, "udp" },
+ { "nitrogen", { NULL }, 7725, "tcp" },
+ { "nitrogen", { NULL }, 7725, "udp" },
+ { "freezexservice", { NULL }, 7726, "tcp" },
+ { "freezexservice", { NULL }, 7726, "udp" },
+ { "trident-data", { NULL }, 7727, "tcp" },
+ { "trident-data", { NULL }, 7727, "udp" },
+ { "smip", { NULL }, 7734, "tcp" },
+ { "smip", { NULL }, 7734, "udp" },
+ { "aiagent", { NULL }, 7738, "tcp" },
+ { "aiagent", { NULL }, 7738, "udp" },
+ { "scriptview", { NULL }, 7741, "tcp" },
+ { "scriptview", { NULL }, 7741, "udp" },
+ { "msss", { NULL }, 7742, "tcp" },
+ { "sstp-1", { NULL }, 7743, "tcp" },
+ { "sstp-1", { NULL }, 7743, "udp" },
+ { "raqmon-pdu", { NULL }, 7744, "tcp" },
+ { "raqmon-pdu", { NULL }, 7744, "udp" },
+ { "prgp", { NULL }, 7747, "tcp" },
+ { "prgp", { NULL }, 7747, "udp" },
+ { "cbt", { NULL }, 7777, "tcp" },
+ { "cbt", { NULL }, 7777, "udp" },
+ { "interwise", { NULL }, 7778, "tcp" },
+ { "interwise", { NULL }, 7778, "udp" },
+ { "vstat", { NULL }, 7779, "tcp" },
+ { "vstat", { NULL }, 7779, "udp" },
+ { "accu-lmgr", { NULL }, 7781, "tcp" },
+ { "accu-lmgr", { NULL }, 7781, "udp" },
+ { "minivend", { NULL }, 7786, "tcp" },
+ { "minivend", { NULL }, 7786, "udp" },
+ { "popup-reminders", { NULL }, 7787, "tcp" },
+ { "popup-reminders", { NULL }, 7787, "udp" },
+ { "office-tools", { NULL }, 7789, "tcp" },
+ { "office-tools", { NULL }, 7789, "udp" },
+ { "q3ade", { NULL }, 7794, "tcp" },
+ { "q3ade", { NULL }, 7794, "udp" },
+ { "pnet-conn", { NULL }, 7797, "tcp" },
+ { "pnet-conn", { NULL }, 7797, "udp" },
+ { "pnet-enc", { NULL }, 7798, "tcp" },
+ { "pnet-enc", { NULL }, 7798, "udp" },
+ { "altbsdp", { NULL }, 7799, "tcp" },
+ { "altbsdp", { NULL }, 7799, "udp" },
+ { "asr", { NULL }, 7800, "tcp" },
+ { "asr", { NULL }, 7800, "udp" },
+ { "ssp-client", { NULL }, 7801, "tcp" },
+ { "ssp-client", { NULL }, 7801, "udp" },
+ { "rbt-wanopt", { NULL }, 7810, "tcp" },
+ { "rbt-wanopt", { NULL }, 7810, "udp" },
+ { "apc-7845", { NULL }, 7845, "tcp" },
+ { "apc-7845", { NULL }, 7845, "udp" },
+ { "apc-7846", { NULL }, 7846, "tcp" },
+ { "apc-7846", { NULL }, 7846, "udp" },
+ { "mobileanalyzer", { NULL }, 7869, "tcp" },
+ { "rbt-smc", { NULL }, 7870, "tcp" },
+ { "pss", { NULL }, 7880, "tcp" },
+ { "pss", { NULL }, 7880, "udp" },
+ { "ubroker", { NULL }, 7887, "tcp" },
+ { "ubroker", { NULL }, 7887, "udp" },
+ { "mevent", { NULL }, 7900, "tcp" },
+ { "mevent", { NULL }, 7900, "udp" },
+ { "tnos-sp", { NULL }, 7901, "tcp" },
+ { "tnos-sp", { NULL }, 7901, "udp" },
+ { "tnos-dp", { NULL }, 7902, "tcp" },
+ { "tnos-dp", { NULL }, 7902, "udp" },
+ { "tnos-dps", { NULL }, 7903, "tcp" },
+ { "tnos-dps", { NULL }, 7903, "udp" },
+ { "qo-secure", { NULL }, 7913, "tcp" },
+ { "qo-secure", { NULL }, 7913, "udp" },
+ { "t2-drm", { NULL }, 7932, "tcp" },
+ { "t2-drm", { NULL }, 7932, "udp" },
+ { "t2-brm", { NULL }, 7933, "tcp" },
+ { "t2-brm", { NULL }, 7933, "udp" },
+ { "supercell", { NULL }, 7967, "tcp" },
+ { "supercell", { NULL }, 7967, "udp" },
+ { "micromuse-ncps", { NULL }, 7979, "tcp" },
+ { "micromuse-ncps", { NULL }, 7979, "udp" },
+ { "quest-vista", { NULL }, 7980, "tcp" },
+ { "quest-vista", { NULL }, 7980, "udp" },
+ { "sossd-collect", { NULL }, 7981, "tcp" },
+ { "sossd-agent", { NULL }, 7982, "tcp" },
+ { "sossd-disc", { NULL }, 7982, "udp" },
+ { "pushns", { NULL }, 7997, "tcp" },
+ { "usicontentpush", { NULL }, 7998, "udp" },
+ { "irdmi2", { NULL }, 7999, "tcp" },
+ { "irdmi2", { NULL }, 7999, "udp" },
+ { "irdmi", { NULL }, 8000, "tcp" },
+ { "irdmi", { NULL }, 8000, "udp" },
+ { "vcom-tunnel", { NULL }, 8001, "tcp" },
+ { "vcom-tunnel", { NULL }, 8001, "udp" },
+ { "teradataordbms", { NULL }, 8002, "tcp" },
+ { "teradataordbms", { NULL }, 8002, "udp" },
+ { "mcreport", { NULL }, 8003, "tcp" },
+ { "mcreport", { NULL }, 8003, "udp" },
+ { "mxi", { NULL }, 8005, "tcp" },
+ { "mxi", { NULL }, 8005, "udp" },
+ { "http-alt", { NULL }, 8008, "tcp" },
+ { "http-alt", { NULL }, 8008, "udp" },
+ { "qbdb", { NULL }, 8019, "tcp" },
+ { "qbdb", { NULL }, 8019, "udp" },
+ { "intu-ec-svcdisc", { NULL }, 8020, "tcp" },
+ { "intu-ec-svcdisc", { NULL }, 8020, "udp" },
+ { "intu-ec-client", { NULL }, 8021, "tcp" },
+ { "intu-ec-client", { NULL }, 8021, "udp" },
+ { "oa-system", { NULL }, 8022, "tcp" },
+ { "oa-system", { NULL }, 8022, "udp" },
+ { "ca-audit-da", { NULL }, 8025, "tcp" },
+ { "ca-audit-da", { NULL }, 8025, "udp" },
+ { "ca-audit-ds", { NULL }, 8026, "tcp" },
+ { "ca-audit-ds", { NULL }, 8026, "udp" },
+ { "pro-ed", { NULL }, 8032, "tcp" },
+ { "pro-ed", { NULL }, 8032, "udp" },
+ { "mindprint", { NULL }, 8033, "tcp" },
+ { "mindprint", { NULL }, 8033, "udp" },
+ { "vantronix-mgmt", { NULL }, 8034, "tcp" },
+ { "vantronix-mgmt", { NULL }, 8034, "udp" },
+ { "ampify", { NULL }, 8040, "tcp" },
+ { "ampify", { NULL }, 8040, "udp" },
+ { "fs-agent", { NULL }, 8042, "tcp" },
+ { "fs-server", { NULL }, 8043, "tcp" },
+ { "fs-mgmt", { NULL }, 8044, "tcp" },
+ { "senomix01", { NULL }, 8052, "tcp" },
+ { "senomix01", { NULL }, 8052, "udp" },
+ { "senomix02", { NULL }, 8053, "tcp" },
+ { "senomix02", { NULL }, 8053, "udp" },
+ { "senomix03", { NULL }, 8054, "tcp" },
+ { "senomix03", { NULL }, 8054, "udp" },
+ { "senomix04", { NULL }, 8055, "tcp" },
+ { "senomix04", { NULL }, 8055, "udp" },
+ { "senomix05", { NULL }, 8056, "tcp" },
+ { "senomix05", { NULL }, 8056, "udp" },
+ { "senomix06", { NULL }, 8057, "tcp" },
+ { "senomix06", { NULL }, 8057, "udp" },
+ { "senomix07", { NULL }, 8058, "tcp" },
+ { "senomix07", { NULL }, 8058, "udp" },
+ { "senomix08", { NULL }, 8059, "tcp" },
+ { "senomix08", { NULL }, 8059, "udp" },
+ { "gadugadu", { NULL }, 8074, "tcp" },
+ { "gadugadu", { NULL }, 8074, "udp" },
+ { "http-alt", { NULL }, 8080, "tcp" },
+ { "http-alt", { NULL }, 8080, "udp" },
+ { "sunproxyadmin", { NULL }, 8081, "tcp" },
+ { "sunproxyadmin", { NULL }, 8081, "udp" },
+ { "us-cli", { NULL }, 8082, "tcp" },
+ { "us-cli", { NULL }, 8082, "udp" },
+ { "us-srv", { NULL }, 8083, "tcp" },
+ { "us-srv", { NULL }, 8083, "udp" },
+ { "d-s-n", { NULL }, 8086, "tcp" },
+ { "d-s-n", { NULL }, 8086, "udp" },
+ { "simplifymedia", { NULL }, 8087, "tcp" },
+ { "simplifymedia", { NULL }, 8087, "udp" },
+ { "radan-http", { NULL }, 8088, "tcp" },
+ { "radan-http", { NULL }, 8088, "udp" },
+ { "jamlink", { NULL }, 8091, "tcp" },
+ { "sac", { NULL }, 8097, "tcp" },
+ { "sac", { NULL }, 8097, "udp" },
+ { "xprint-server", { NULL }, 8100, "tcp" },
+ { "xprint-server", { NULL }, 8100, "udp" },
+ { "ldoms-migr", { NULL }, 8101, "tcp" },
+ { "mtl8000-matrix", { NULL }, 8115, "tcp" },
+ { "mtl8000-matrix", { NULL }, 8115, "udp" },
+ { "cp-cluster", { NULL }, 8116, "tcp" },
+ { "cp-cluster", { NULL }, 8116, "udp" },
+ { "privoxy", { NULL }, 8118, "tcp" },
+ { "privoxy", { NULL }, 8118, "udp" },
+ { "apollo-data", { NULL }, 8121, "tcp" },
+ { "apollo-data", { NULL }, 8121, "udp" },
+ { "apollo-admin", { NULL }, 8122, "tcp" },
+ { "apollo-admin", { NULL }, 8122, "udp" },
+ { "paycash-online", { NULL }, 8128, "tcp" },
+ { "paycash-online", { NULL }, 8128, "udp" },
+ { "paycash-wbp", { NULL }, 8129, "tcp" },
+ { "paycash-wbp", { NULL }, 8129, "udp" },
+ { "indigo-vrmi", { NULL }, 8130, "tcp" },
+ { "indigo-vrmi", { NULL }, 8130, "udp" },
+ { "indigo-vbcp", { NULL }, 8131, "tcp" },
+ { "indigo-vbcp", { NULL }, 8131, "udp" },
+ { "dbabble", { NULL }, 8132, "tcp" },
+ { "dbabble", { NULL }, 8132, "udp" },
+ { "isdd", { NULL }, 8148, "tcp" },
+ { "isdd", { NULL }, 8148, "udp" },
+ { "patrol", { NULL }, 8160, "tcp" },
+ { "patrol", { NULL }, 8160, "udp" },
+ { "patrol-snmp", { NULL }, 8161, "tcp" },
+ { "patrol-snmp", { NULL }, 8161, "udp" },
+ { "vmware-fdm", { NULL }, 8182, "tcp" },
+ { "vmware-fdm", { NULL }, 8182, "udp" },
+ { "proremote", { NULL }, 8183, "tcp" },
+ { "itach", { NULL }, 8184, "tcp" },
+ { "itach", { NULL }, 8184, "udp" },
+ { "spytechphone", { NULL }, 8192, "tcp" },
+ { "spytechphone", { NULL }, 8192, "udp" },
+ { "blp1", { NULL }, 8194, "tcp" },
+ { "blp1", { NULL }, 8194, "udp" },
+ { "blp2", { NULL }, 8195, "tcp" },
+ { "blp2", { NULL }, 8195, "udp" },
+ { "vvr-data", { NULL }, 8199, "tcp" },
+ { "vvr-data", { NULL }, 8199, "udp" },
+ { "trivnet1", { NULL }, 8200, "tcp" },
+ { "trivnet1", { NULL }, 8200, "udp" },
+ { "trivnet2", { NULL }, 8201, "tcp" },
+ { "trivnet2", { NULL }, 8201, "udp" },
+ { "lm-perfworks", { NULL }, 8204, "tcp" },
+ { "lm-perfworks", { NULL }, 8204, "udp" },
+ { "lm-instmgr", { NULL }, 8205, "tcp" },
+ { "lm-instmgr", { NULL }, 8205, "udp" },
+ { "lm-dta", { NULL }, 8206, "tcp" },
+ { "lm-dta", { NULL }, 8206, "udp" },
+ { "lm-sserver", { NULL }, 8207, "tcp" },
+ { "lm-sserver", { NULL }, 8207, "udp" },
+ { "lm-webwatcher", { NULL }, 8208, "tcp" },
+ { "lm-webwatcher", { NULL }, 8208, "udp" },
+ { "rexecj", { NULL }, 8230, "tcp" },
+ { "rexecj", { NULL }, 8230, "udp" },
+ { "synapse-nhttps", { NULL }, 8243, "tcp" },
+ { "synapse-nhttps", { NULL }, 8243, "udp" },
+ { "pando-sec", { NULL }, 8276, "tcp" },
+ { "pando-sec", { NULL }, 8276, "udp" },
+ { "synapse-nhttp", { NULL }, 8280, "tcp" },
+ { "synapse-nhttp", { NULL }, 8280, "udp" },
+ { "blp3", { NULL }, 8292, "tcp" },
+ { "blp3", { NULL }, 8292, "udp" },
+ { "hiperscan-id", { NULL }, 8293, "tcp" },
+ { "blp4", { NULL }, 8294, "tcp" },
+ { "blp4", { NULL }, 8294, "udp" },
+ { "tmi", { NULL }, 8300, "tcp" },
+ { "tmi", { NULL }, 8300, "udp" },
+ { "amberon", { NULL }, 8301, "tcp" },
+ { "amberon", { NULL }, 8301, "udp" },
+ { "tnp-discover", { NULL }, 8320, "tcp" },
+ { "tnp-discover", { NULL }, 8320, "udp" },
+ { "tnp", { NULL }, 8321, "tcp" },
+ { "tnp", { NULL }, 8321, "udp" },
+ { "server-find", { NULL }, 8351, "tcp" },
+ { "server-find", { NULL }, 8351, "udp" },
+ { "cruise-enum", { NULL }, 8376, "tcp" },
+ { "cruise-enum", { NULL }, 8376, "udp" },
+ { "cruise-swroute", { NULL }, 8377, "tcp" },
+ { "cruise-swroute", { NULL }, 8377, "udp" },
+ { "cruise-config", { NULL }, 8378, "tcp" },
+ { "cruise-config", { NULL }, 8378, "udp" },
+ { "cruise-diags", { NULL }, 8379, "tcp" },
+ { "cruise-diags", { NULL }, 8379, "udp" },
+ { "cruise-update", { NULL }, 8380, "tcp" },
+ { "cruise-update", { NULL }, 8380, "udp" },
+ { "m2mservices", { NULL }, 8383, "tcp" },
+ { "m2mservices", { NULL }, 8383, "udp" },
+ { "cvd", { NULL }, 8400, "tcp" },
+ { "cvd", { NULL }, 8400, "udp" },
+ { "sabarsd", { NULL }, 8401, "tcp" },
+ { "sabarsd", { NULL }, 8401, "udp" },
+ { "abarsd", { NULL }, 8402, "tcp" },
+ { "abarsd", { NULL }, 8402, "udp" },
+ { "admind", { NULL }, 8403, "tcp" },
+ { "admind", { NULL }, 8403, "udp" },
+ { "svcloud", { NULL }, 8404, "tcp" },
+ { "svbackup", { NULL }, 8405, "tcp" },
+ { "espeech", { NULL }, 8416, "tcp" },
+ { "espeech", { NULL }, 8416, "udp" },
+ { "espeech-rtp", { NULL }, 8417, "tcp" },
+ { "espeech-rtp", { NULL }, 8417, "udp" },
+ { "cybro-a-bus", { NULL }, 8442, "tcp" },
+ { "cybro-a-bus", { NULL }, 8442, "udp" },
+ { "pcsync-https", { NULL }, 8443, "tcp" },
+ { "pcsync-https", { NULL }, 8443, "udp" },
+ { "pcsync-http", { NULL }, 8444, "tcp" },
+ { "pcsync-http", { NULL }, 8444, "udp" },
+ { "npmp", { NULL }, 8450, "tcp" },
+ { "npmp", { NULL }, 8450, "udp" },
+ { "cisco-avp", { NULL }, 8470, "tcp" },
+ { "pim-port", { NULL }, 8471, "tcp" },
+ { "pim-port", { NULL }, 8471, "sctp"},
+ { "otv", { NULL }, 8472, "tcp" },
+ { "otv", { NULL }, 8472, "udp" },
+ { "vp2p", { NULL }, 8473, "tcp" },
+ { "vp2p", { NULL }, 8473, "udp" },
+ { "noteshare", { NULL }, 8474, "tcp" },
+ { "noteshare", { NULL }, 8474, "udp" },
+ { "fmtp", { NULL }, 8500, "tcp" },
+ { "fmtp", { NULL }, 8500, "udp" },
+ { "rtsp-alt", { NULL }, 8554, "tcp" },
+ { "rtsp-alt", { NULL }, 8554, "udp" },
+ { "d-fence", { NULL }, 8555, "tcp" },
+ { "d-fence", { NULL }, 8555, "udp" },
+ { "oap-admin", { NULL }, 8567, "tcp" },
+ { "oap-admin", { NULL }, 8567, "udp" },
+ { "asterix", { NULL }, 8600, "tcp" },
+ { "asterix", { NULL }, 8600, "udp" },
+ { "canon-mfnp", { NULL }, 8610, "tcp" },
+ { "canon-mfnp", { NULL }, 8610, "udp" },
+ { "canon-bjnp1", { NULL }, 8611, "tcp" },
+ { "canon-bjnp1", { NULL }, 8611, "udp" },
+ { "canon-bjnp2", { NULL }, 8612, "tcp" },
+ { "canon-bjnp2", { NULL }, 8612, "udp" },
+ { "canon-bjnp3", { NULL }, 8613, "tcp" },
+ { "canon-bjnp3", { NULL }, 8613, "udp" },
+ { "canon-bjnp4", { NULL }, 8614, "tcp" },
+ { "canon-bjnp4", { NULL }, 8614, "udp" },
+ { "sun-as-jmxrmi", { NULL }, 8686, "tcp" },
+ { "sun-as-jmxrmi", { NULL }, 8686, "udp" },
+ { "vnyx", { NULL }, 8699, "tcp" },
+ { "vnyx", { NULL }, 8699, "udp" },
+ { "dtp-net", { NULL }, 8732, "udp" },
+ { "ibus", { NULL }, 8733, "tcp" },
+ { "ibus", { NULL }, 8733, "udp" },
+ { "mc-appserver", { NULL }, 8763, "tcp" },
+ { "mc-appserver", { NULL }, 8763, "udp" },
+ { "openqueue", { NULL }, 8764, "tcp" },
+ { "openqueue", { NULL }, 8764, "udp" },
+ { "ultraseek-http", { NULL }, 8765, "tcp" },
+ { "ultraseek-http", { NULL }, 8765, "udp" },
+ { "dpap", { NULL }, 8770, "tcp" },
+ { "dpap", { NULL }, 8770, "udp" },
+ { "msgclnt", { NULL }, 8786, "tcp" },
+ { "msgclnt", { NULL }, 8786, "udp" },
+ { "msgsrvr", { NULL }, 8787, "tcp" },
+ { "msgsrvr", { NULL }, 8787, "udp" },
+ { "sunwebadmin", { NULL }, 8800, "tcp" },
+ { "sunwebadmin", { NULL }, 8800, "udp" },
+ { "truecm", { NULL }, 8804, "tcp" },
+ { "truecm", { NULL }, 8804, "udp" },
+ { "dxspider", { NULL }, 8873, "tcp" },
+ { "dxspider", { NULL }, 8873, "udp" },
+ { "cddbp-alt", { NULL }, 8880, "tcp" },
+ { "cddbp-alt", { NULL }, 8880, "udp" },
+ { "secure-mqtt", { NULL }, 8883, "tcp" },
+ { "secure-mqtt", { NULL }, 8883, "udp" },
+ { "ddi-tcp-1", { NULL }, 8888, "tcp" },
+ { "ddi-udp-1", { NULL }, 8888, "udp" },
+ { "ddi-tcp-2", { NULL }, 8889, "tcp" },
+ { "ddi-udp-2", { NULL }, 8889, "udp" },
+ { "ddi-tcp-3", { NULL }, 8890, "tcp" },
+ { "ddi-udp-3", { NULL }, 8890, "udp" },
+ { "ddi-tcp-4", { NULL }, 8891, "tcp" },
+ { "ddi-udp-4", { NULL }, 8891, "udp" },
+ { "ddi-tcp-5", { NULL }, 8892, "tcp" },
+ { "ddi-udp-5", { NULL }, 8892, "udp" },
+ { "ddi-tcp-6", { NULL }, 8893, "tcp" },
+ { "ddi-udp-6", { NULL }, 8893, "udp" },
+ { "ddi-tcp-7", { NULL }, 8894, "tcp" },
+ { "ddi-udp-7", { NULL }, 8894, "udp" },
+ { "ospf-lite", { NULL }, 8899, "tcp" },
+ { "ospf-lite", { NULL }, 8899, "udp" },
+ { "jmb-cds1", { NULL }, 8900, "tcp" },
+ { "jmb-cds1", { NULL }, 8900, "udp" },
+ { "jmb-cds2", { NULL }, 8901, "tcp" },
+ { "jmb-cds2", { NULL }, 8901, "udp" },
+ { "manyone-http", { NULL }, 8910, "tcp" },
+ { "manyone-http", { NULL }, 8910, "udp" },
+ { "manyone-xml", { NULL }, 8911, "tcp" },
+ { "manyone-xml", { NULL }, 8911, "udp" },
+ { "wcbackup", { NULL }, 8912, "tcp" },
+ { "wcbackup", { NULL }, 8912, "udp" },
+ { "dragonfly", { NULL }, 8913, "tcp" },
+ { "dragonfly", { NULL }, 8913, "udp" },
+ { "twds", { NULL }, 8937, "tcp" },
+ { "cumulus-admin", { NULL }, 8954, "tcp" },
+ { "cumulus-admin", { NULL }, 8954, "udp" },
+ { "sunwebadmins", { NULL }, 8989, "tcp" },
+ { "sunwebadmins", { NULL }, 8989, "udp" },
+ { "http-wmap", { NULL }, 8990, "tcp" },
+ { "http-wmap", { NULL }, 8990, "udp" },
+ { "https-wmap", { NULL }, 8991, "tcp" },
+ { "https-wmap", { NULL }, 8991, "udp" },
+ { "bctp", { NULL }, 8999, "tcp" },
+ { "bctp", { NULL }, 8999, "udp" },
+ { "cslistener", { NULL }, 9000, "tcp" },
+ { "cslistener", { NULL }, 9000, "udp" },
+ { "etlservicemgr", { NULL }, 9001, "tcp" },
+ { "etlservicemgr", { NULL }, 9001, "udp" },
+ { "dynamid", { NULL }, 9002, "tcp" },
+ { "dynamid", { NULL }, 9002, "udp" },
+ { "ogs-client", { NULL }, 9007, "udp" },
+ { "ogs-server", { NULL }, 9008, "tcp" },
+ { "pichat", { NULL }, 9009, "tcp" },
+ { "pichat", { NULL }, 9009, "udp" },
+ { "sdr", { NULL }, 9010, "tcp" },
+ { "tambora", { NULL }, 9020, "tcp" },
+ { "tambora", { NULL }, 9020, "udp" },
+ { "panagolin-ident", { NULL }, 9021, "tcp" },
+ { "panagolin-ident", { NULL }, 9021, "udp" },
+ { "paragent", { NULL }, 9022, "tcp" },
+ { "paragent", { NULL }, 9022, "udp" },
+ { "swa-1", { NULL }, 9023, "tcp" },
+ { "swa-1", { NULL }, 9023, "udp" },
+ { "swa-2", { NULL }, 9024, "tcp" },
+ { "swa-2", { NULL }, 9024, "udp" },
+ { "swa-3", { NULL }, 9025, "tcp" },
+ { "swa-3", { NULL }, 9025, "udp" },
+ { "swa-4", { NULL }, 9026, "tcp" },
+ { "swa-4", { NULL }, 9026, "udp" },
+ { "versiera", { NULL }, 9050, "tcp" },
+ { "fio-cmgmt", { NULL }, 9051, "tcp" },
+ { "glrpc", { NULL }, 9080, "tcp" },
+ { "glrpc", { NULL }, 9080, "udp" },
+ { "lcs-ap", { NULL }, 9082, "sctp"},
+ { "emc-pp-mgmtsvc", { NULL }, 9083, "tcp" },
+ { "aurora", { NULL }, 9084, "tcp" },
+ { "aurora", { NULL }, 9084, "udp" },
+ { "aurora", { NULL }, 9084, "sctp"},
+ { "ibm-rsyscon", { NULL }, 9085, "tcp" },
+ { "ibm-rsyscon", { NULL }, 9085, "udp" },
+ { "net2display", { NULL }, 9086, "tcp" },
+ { "net2display", { NULL }, 9086, "udp" },
+ { "classic", { NULL }, 9087, "tcp" },
+ { "classic", { NULL }, 9087, "udp" },
+ { "sqlexec", { NULL }, 9088, "tcp" },
+ { "sqlexec", { NULL }, 9088, "udp" },
+ { "sqlexec-ssl", { NULL }, 9089, "tcp" },
+ { "sqlexec-ssl", { NULL }, 9089, "udp" },
+ { "websm", { NULL }, 9090, "tcp" },
+ { "websm", { NULL }, 9090, "udp" },
+ { "xmltec-xmlmail", { NULL }, 9091, "tcp" },
+ { "xmltec-xmlmail", { NULL }, 9091, "udp" },
+ { "XmlIpcRegSvc", { NULL }, 9092, "tcp" },
+ { "XmlIpcRegSvc", { NULL }, 9092, "udp" },
+ { "hp-pdl-datastr", { NULL }, 9100, "tcp" },
+ { "hp-pdl-datastr", { NULL }, 9100, "udp" },
+ { "pdl-datastream", { NULL }, 9100, "tcp" },
+ { "pdl-datastream", { NULL }, 9100, "udp" },
+ { "bacula-dir", { NULL }, 9101, "tcp" },
+ { "bacula-dir", { NULL }, 9101, "udp" },
+ { "bacula-fd", { NULL }, 9102, "tcp" },
+ { "bacula-fd", { NULL }, 9102, "udp" },
+ { "bacula-sd", { NULL }, 9103, "tcp" },
+ { "bacula-sd", { NULL }, 9103, "udp" },
+ { "peerwire", { NULL }, 9104, "tcp" },
+ { "peerwire", { NULL }, 9104, "udp" },
+ { "xadmin", { NULL }, 9105, "tcp" },
+ { "xadmin", { NULL }, 9105, "udp" },
+ { "astergate", { NULL }, 9106, "tcp" },
+ { "astergate-disc", { NULL }, 9106, "udp" },
+ { "astergatefax", { NULL }, 9107, "tcp" },
+ { "mxit", { NULL }, 9119, "tcp" },
+ { "mxit", { NULL }, 9119, "udp" },
+ { "dddp", { NULL }, 9131, "tcp" },
+ { "dddp", { NULL }, 9131, "udp" },
+ { "apani1", { NULL }, 9160, "tcp" },
+ { "apani1", { NULL }, 9160, "udp" },
+ { "apani2", { NULL }, 9161, "tcp" },
+ { "apani2", { NULL }, 9161, "udp" },
+ { "apani3", { NULL }, 9162, "tcp" },
+ { "apani3", { NULL }, 9162, "udp" },
+ { "apani4", { NULL }, 9163, "tcp" },
+ { "apani4", { NULL }, 9163, "udp" },
+ { "apani5", { NULL }, 9164, "tcp" },
+ { "apani5", { NULL }, 9164, "udp" },
+ { "sun-as-jpda", { NULL }, 9191, "tcp" },
+ { "sun-as-jpda", { NULL }, 9191, "udp" },
+ { "wap-wsp", { NULL }, 9200, "tcp" },
+ { "wap-wsp", { NULL }, 9200, "udp" },
+ { "wap-wsp-wtp", { NULL }, 9201, "tcp" },
+ { "wap-wsp-wtp", { NULL }, 9201, "udp" },
+ { "wap-wsp-s", { NULL }, 9202, "tcp" },
+ { "wap-wsp-s", { NULL }, 9202, "udp" },
+ { "wap-wsp-wtp-s", { NULL }, 9203, "tcp" },
+ { "wap-wsp-wtp-s", { NULL }, 9203, "udp" },
+ { "wap-vcard", { NULL }, 9204, "tcp" },
+ { "wap-vcard", { NULL }, 9204, "udp" },
+ { "wap-vcal", { NULL }, 9205, "tcp" },
+ { "wap-vcal", { NULL }, 9205, "udp" },
+ { "wap-vcard-s", { NULL }, 9206, "tcp" },
+ { "wap-vcard-s", { NULL }, 9206, "udp" },
+ { "wap-vcal-s", { NULL }, 9207, "tcp" },
+ { "wap-vcal-s", { NULL }, 9207, "udp" },
+ { "rjcdb-vcards", { NULL }, 9208, "tcp" },
+ { "rjcdb-vcards", { NULL }, 9208, "udp" },
+ { "almobile-system", { NULL }, 9209, "tcp" },
+ { "almobile-system", { NULL }, 9209, "udp" },
+ { "oma-mlp", { NULL }, 9210, "tcp" },
+ { "oma-mlp", { NULL }, 9210, "udp" },
+ { "oma-mlp-s", { NULL }, 9211, "tcp" },
+ { "oma-mlp-s", { NULL }, 9211, "udp" },
+ { "serverviewdbms", { NULL }, 9212, "tcp" },
+ { "serverviewdbms", { NULL }, 9212, "udp" },
+ { "serverstart", { NULL }, 9213, "tcp" },
+ { "serverstart", { NULL }, 9213, "udp" },
+ { "ipdcesgbs", { NULL }, 9214, "tcp" },
+ { "ipdcesgbs", { NULL }, 9214, "udp" },
+ { "insis", { NULL }, 9215, "tcp" },
+ { "insis", { NULL }, 9215, "udp" },
+ { "acme", { NULL }, 9216, "tcp" },
+ { "acme", { NULL }, 9216, "udp" },
+ { "fsc-port", { NULL }, 9217, "tcp" },
+ { "fsc-port", { NULL }, 9217, "udp" },
+ { "teamcoherence", { NULL }, 9222, "tcp" },
+ { "teamcoherence", { NULL }, 9222, "udp" },
+ { "mon", { NULL }, 9255, "tcp" },
+ { "mon", { NULL }, 9255, "udp" },
+ { "pegasus", { NULL }, 9278, "tcp" },
+ { "pegasus", { NULL }, 9278, "udp" },
+ { "pegasus-ctl", { NULL }, 9279, "tcp" },
+ { "pegasus-ctl", { NULL }, 9279, "udp" },
+ { "pgps", { NULL }, 9280, "tcp" },
+ { "pgps", { NULL }, 9280, "udp" },
+ { "swtp-port1", { NULL }, 9281, "tcp" },
+ { "swtp-port1", { NULL }, 9281, "udp" },
+ { "swtp-port2", { NULL }, 9282, "tcp" },
+ { "swtp-port2", { NULL }, 9282, "udp" },
+ { "callwaveiam", { NULL }, 9283, "tcp" },
+ { "callwaveiam", { NULL }, 9283, "udp" },
+ { "visd", { NULL }, 9284, "tcp" },
+ { "visd", { NULL }, 9284, "udp" },
+ { "n2h2server", { NULL }, 9285, "tcp" },
+ { "n2h2server", { NULL }, 9285, "udp" },
+ { "n2receive", { NULL }, 9286, "udp" },
+ { "cumulus", { NULL }, 9287, "tcp" },
+ { "cumulus", { NULL }, 9287, "udp" },
+ { "armtechdaemon", { NULL }, 9292, "tcp" },
+ { "armtechdaemon", { NULL }, 9292, "udp" },
+ { "storview", { NULL }, 9293, "tcp" },
+ { "storview", { NULL }, 9293, "udp" },
+ { "armcenterhttp", { NULL }, 9294, "tcp" },
+ { "armcenterhttp", { NULL }, 9294, "udp" },
+ { "armcenterhttps", { NULL }, 9295, "tcp" },
+ { "armcenterhttps", { NULL }, 9295, "udp" },
+ { "vrace", { NULL }, 9300, "tcp" },
+ { "vrace", { NULL }, 9300, "udp" },
+ { "sphinxql", { NULL }, 9306, "tcp" },
+ { "sphinxapi", { NULL }, 9312, "tcp" },
+ { "secure-ts", { NULL }, 9318, "tcp" },
+ { "secure-ts", { NULL }, 9318, "udp" },
+ { "guibase", { NULL }, 9321, "tcp" },
+ { "guibase", { NULL }, 9321, "udp" },
+ { "mpidcmgr", { NULL }, 9343, "tcp" },
+ { "mpidcmgr", { NULL }, 9343, "udp" },
+ { "mphlpdmc", { NULL }, 9344, "tcp" },
+ { "mphlpdmc", { NULL }, 9344, "udp" },
+ { "ctechlicensing", { NULL }, 9346, "tcp" },
+ { "ctechlicensing", { NULL }, 9346, "udp" },
+ { "fjdmimgr", { NULL }, 9374, "tcp" },
+ { "fjdmimgr", { NULL }, 9374, "udp" },
+ { "boxp", { NULL }, 9380, "tcp" },
+ { "boxp", { NULL }, 9380, "udp" },
+ { "d2dconfig", { NULL }, 9387, "tcp" },
+ { "d2ddatatrans", { NULL }, 9388, "tcp" },
+ { "adws", { NULL }, 9389, "tcp" },
+ { "otp", { NULL }, 9390, "tcp" },
+ { "fjinvmgr", { NULL }, 9396, "tcp" },
+ { "fjinvmgr", { NULL }, 9396, "udp" },
+ { "mpidcagt", { NULL }, 9397, "tcp" },
+ { "mpidcagt", { NULL }, 9397, "udp" },
+ { "sec-t4net-srv", { NULL }, 9400, "tcp" },
+ { "sec-t4net-srv", { NULL }, 9400, "udp" },
+ { "sec-t4net-clt", { NULL }, 9401, "tcp" },
+ { "sec-t4net-clt", { NULL }, 9401, "udp" },
+ { "sec-pc2fax-srv", { NULL }, 9402, "tcp" },
+ { "sec-pc2fax-srv", { NULL }, 9402, "udp" },
+ { "git", { NULL }, 9418, "tcp" },
+ { "git", { NULL }, 9418, "udp" },
+ { "tungsten-https", { NULL }, 9443, "tcp" },
+ { "tungsten-https", { NULL }, 9443, "udp" },
+ { "wso2esb-console", { NULL }, 9444, "tcp" },
+ { "wso2esb-console", { NULL }, 9444, "udp" },
+ { "sntlkeyssrvr", { NULL }, 9450, "tcp" },
+ { "sntlkeyssrvr", { NULL }, 9450, "udp" },
+ { "ismserver", { NULL }, 9500, "tcp" },
+ { "ismserver", { NULL }, 9500, "udp" },
+ { "sma-spw", { NULL }, 9522, "udp" },
+ { "mngsuite", { NULL }, 9535, "tcp" },
+ { "mngsuite", { NULL }, 9535, "udp" },
+ { "laes-bf", { NULL }, 9536, "tcp" },
+ { "laes-bf", { NULL }, 9536, "udp" },
+ { "trispen-sra", { NULL }, 9555, "tcp" },
+ { "trispen-sra", { NULL }, 9555, "udp" },
+ { "ldgateway", { NULL }, 9592, "tcp" },
+ { "ldgateway", { NULL }, 9592, "udp" },
+ { "cba8", { NULL }, 9593, "tcp" },
+ { "cba8", { NULL }, 9593, "udp" },
+ { "msgsys", { NULL }, 9594, "tcp" },
+ { "msgsys", { NULL }, 9594, "udp" },
+ { "pds", { NULL }, 9595, "tcp" },
+ { "pds", { NULL }, 9595, "udp" },
+ { "mercury-disc", { NULL }, 9596, "tcp" },
+ { "mercury-disc", { NULL }, 9596, "udp" },
+ { "pd-admin", { NULL }, 9597, "tcp" },
+ { "pd-admin", { NULL }, 9597, "udp" },
+ { "vscp", { NULL }, 9598, "tcp" },
+ { "vscp", { NULL }, 9598, "udp" },
+ { "robix", { NULL }, 9599, "tcp" },
+ { "robix", { NULL }, 9599, "udp" },
+ { "micromuse-ncpw", { NULL }, 9600, "tcp" },
+ { "micromuse-ncpw", { NULL }, 9600, "udp" },
+ { "streamcomm-ds", { NULL }, 9612, "tcp" },
+ { "streamcomm-ds", { NULL }, 9612, "udp" },
+ { "iadt-tls", { NULL }, 9614, "tcp" },
+ { "erunbook_agent", { NULL }, 9616, "tcp" },
+ { "erunbook_server", { NULL }, 9617, "tcp" },
+ { "condor", { NULL }, 9618, "tcp" },
+ { "condor", { NULL }, 9618, "udp" },
+ { "odbcpathway", { NULL }, 9628, "tcp" },
+ { "odbcpathway", { NULL }, 9628, "udp" },
+ { "uniport", { NULL }, 9629, "tcp" },
+ { "uniport", { NULL }, 9629, "udp" },
+ { "peoctlr", { NULL }, 9630, "tcp" },
+ { "peocoll", { NULL }, 9631, "tcp" },
+ { "mc-comm", { NULL }, 9632, "udp" },
+ { "pqsflows", { NULL }, 9640, "tcp" },
+ { "xmms2", { NULL }, 9667, "tcp" },
+ { "xmms2", { NULL }, 9667, "udp" },
+ { "tec5-sdctp", { NULL }, 9668, "tcp" },
+ { "tec5-sdctp", { NULL }, 9668, "udp" },
+ { "client-wakeup", { NULL }, 9694, "tcp" },
+ { "client-wakeup", { NULL }, 9694, "udp" },
+ { "ccnx", { NULL }, 9695, "tcp" },
+ { "ccnx", { NULL }, 9695, "udp" },
+ { "board-roar", { NULL }, 9700, "tcp" },
+ { "board-roar", { NULL }, 9700, "udp" },
+ { "l5nas-parchan", { NULL }, 9747, "tcp" },
+ { "l5nas-parchan", { NULL }, 9747, "udp" },
+ { "board-voip", { NULL }, 9750, "tcp" },
+ { "board-voip", { NULL }, 9750, "udp" },
+ { "rasadv", { NULL }, 9753, "tcp" },
+ { "rasadv", { NULL }, 9753, "udp" },
+ { "tungsten-http", { NULL }, 9762, "tcp" },
+ { "tungsten-http", { NULL }, 9762, "udp" },
+ { "davsrc", { NULL }, 9800, "tcp" },
+ { "davsrc", { NULL }, 9800, "udp" },
+ { "sstp-2", { NULL }, 9801, "tcp" },
+ { "sstp-2", { NULL }, 9801, "udp" },
+ { "davsrcs", { NULL }, 9802, "tcp" },
+ { "davsrcs", { NULL }, 9802, "udp" },
+ { "sapv1", { NULL }, 9875, "tcp" },
+ { "sapv1", { NULL }, 9875, "udp" },
+ { "sd", { NULL }, 9876, "tcp" },
+ { "sd", { NULL }, 9876, "udp" },
+ { "cyborg-systems", { NULL }, 9888, "tcp" },
+ { "cyborg-systems", { NULL }, 9888, "udp" },
+ { "gt-proxy", { NULL }, 9889, "tcp" },
+ { "gt-proxy", { NULL }, 9889, "udp" },
+ { "monkeycom", { NULL }, 9898, "tcp" },
+ { "monkeycom", { NULL }, 9898, "udp" },
+ { "sctp-tunneling", { NULL }, 9899, "tcp" },
+ { "sctp-tunneling", { NULL }, 9899, "udp" },
+ { "iua", { NULL }, 9900, "tcp" },
+ { "iua", { NULL }, 9900, "udp" },
+ { "iua", { NULL }, 9900, "sctp"},
+ { "enrp", { NULL }, 9901, "udp" },
+ { "enrp-sctp", { NULL }, 9901, "sctp"},
+ { "enrp-sctp-tls", { NULL }, 9902, "sctp"},
+ { "domaintime", { NULL }, 9909, "tcp" },
+ { "domaintime", { NULL }, 9909, "udp" },
+ { "sype-transport", { NULL }, 9911, "tcp" },
+ { "sype-transport", { NULL }, 9911, "udp" },
+ { "apc-9950", { NULL }, 9950, "tcp" },
+ { "apc-9950", { NULL }, 9950, "udp" },
+ { "apc-9951", { NULL }, 9951, "tcp" },
+ { "apc-9951", { NULL }, 9951, "udp" },
+ { "apc-9952", { NULL }, 9952, "tcp" },
+ { "apc-9952", { NULL }, 9952, "udp" },
+ { "acis", { NULL }, 9953, "tcp" },
+ { "acis", { NULL }, 9953, "udp" },
+ { "odnsp", { NULL }, 9966, "tcp" },
+ { "odnsp", { NULL }, 9966, "udp" },
+ { "dsm-scm-target", { NULL }, 9987, "tcp" },
+ { "dsm-scm-target", { NULL }, 9987, "udp" },
+ { "nsesrvr", { NULL }, 9988, "tcp" },
+ { "osm-appsrvr", { NULL }, 9990, "tcp" },
+ { "osm-appsrvr", { NULL }, 9990, "udp" },
+ { "osm-oev", { NULL }, 9991, "tcp" },
+ { "osm-oev", { NULL }, 9991, "udp" },
+ { "palace-1", { NULL }, 9992, "tcp" },
+ { "palace-1", { NULL }, 9992, "udp" },
+ { "palace-2", { NULL }, 9993, "tcp" },
+ { "palace-2", { NULL }, 9993, "udp" },
+ { "palace-3", { NULL }, 9994, "tcp" },
+ { "palace-3", { NULL }, 9994, "udp" },
+ { "palace-4", { NULL }, 9995, "tcp" },
+ { "palace-4", { NULL }, 9995, "udp" },
+ { "palace-5", { NULL }, 9996, "tcp" },
+ { "palace-5", { NULL }, 9996, "udp" },
+ { "palace-6", { NULL }, 9997, "tcp" },
+ { "palace-6", { NULL }, 9997, "udp" },
+ { "distinct32", { NULL }, 9998, "tcp" },
+ { "distinct32", { NULL }, 9998, "udp" },
+ { "distinct", { NULL }, 9999, "tcp" },
+ { "distinct", { NULL }, 9999, "udp" },
+ { "ndmp", { NULL }, 10000, "tcp" },
+ { "ndmp", { NULL }, 10000, "udp" },
+ { "scp-config", { NULL }, 10001, "tcp" },
+ { "scp-config", { NULL }, 10001, "udp" },
+ { "documentum", { NULL }, 10002, "tcp" },
+ { "documentum", { NULL }, 10002, "udp" },
+ { "documentum_s", { NULL }, 10003, "tcp" },
+ { "documentum_s", { NULL }, 10003, "udp" },
+ { "emcrmirccd", { NULL }, 10004, "tcp" },
+ { "emcrmird", { NULL }, 10005, "tcp" },
+ { "mvs-capacity", { NULL }, 10007, "tcp" },
+ { "mvs-capacity", { NULL }, 10007, "udp" },
+ { "octopus", { NULL }, 10008, "tcp" },
+ { "octopus", { NULL }, 10008, "udp" },
+ { "swdtp-sv", { NULL }, 10009, "tcp" },
+ { "swdtp-sv", { NULL }, 10009, "udp" },
+ { "rxapi", { NULL }, 10010, "tcp" },
+ { "zabbix-agent", { NULL }, 10050, "tcp" },
+ { "zabbix-agent", { NULL }, 10050, "udp" },
+ { "zabbix-trapper", { NULL }, 10051, "tcp" },
+ { "zabbix-trapper", { NULL }, 10051, "udp" },
+ { "qptlmd", { NULL }, 10055, "tcp" },
+ { "amanda", { NULL }, 10080, "tcp" },
+ { "amanda", { NULL }, 10080, "udp" },
+ { "famdc", { NULL }, 10081, "tcp" },
+ { "famdc", { NULL }, 10081, "udp" },
+ { "itap-ddtp", { NULL }, 10100, "tcp" },
+ { "itap-ddtp", { NULL }, 10100, "udp" },
+ { "ezmeeting-2", { NULL }, 10101, "tcp" },
+ { "ezmeeting-2", { NULL }, 10101, "udp" },
+ { "ezproxy-2", { NULL }, 10102, "tcp" },
+ { "ezproxy-2", { NULL }, 10102, "udp" },
+ { "ezrelay", { NULL }, 10103, "tcp" },
+ { "ezrelay", { NULL }, 10103, "udp" },
+ { "swdtp", { NULL }, 10104, "tcp" },
+ { "swdtp", { NULL }, 10104, "udp" },
+ { "bctp-server", { NULL }, 10107, "tcp" },
+ { "bctp-server", { NULL }, 10107, "udp" },
+ { "nmea-0183", { NULL }, 10110, "tcp" },
+ { "nmea-0183", { NULL }, 10110, "udp" },
+ { "netiq-endpoint", { NULL }, 10113, "tcp" },
+ { "netiq-endpoint", { NULL }, 10113, "udp" },
+ { "netiq-qcheck", { NULL }, 10114, "tcp" },
+ { "netiq-qcheck", { NULL }, 10114, "udp" },
+ { "netiq-endpt", { NULL }, 10115, "tcp" },
+ { "netiq-endpt", { NULL }, 10115, "udp" },
+ { "netiq-voipa", { NULL }, 10116, "tcp" },
+ { "netiq-voipa", { NULL }, 10116, "udp" },
+ { "iqrm", { NULL }, 10117, "tcp" },
+ { "iqrm", { NULL }, 10117, "udp" },
+ { "bmc-perf-sd", { NULL }, 10128, "tcp" },
+ { "bmc-perf-sd", { NULL }, 10128, "udp" },
+ { "bmc-gms", { NULL }, 10129, "tcp" },
+ { "qb-db-server", { NULL }, 10160, "tcp" },
+ { "qb-db-server", { NULL }, 10160, "udp" },
+ { "snmptls", { NULL }, 10161, "tcp" },
+ { "snmpdtls", { NULL }, 10161, "udp" },
+ { "snmptls-trap", { NULL }, 10162, "tcp" },
+ { "snmpdtls-trap", { NULL }, 10162, "udp" },
+ { "trisoap", { NULL }, 10200, "tcp" },
+ { "trisoap", { NULL }, 10200, "udp" },
+ { "rsms", { NULL }, 10201, "tcp" },
+ { "rscs", { NULL }, 10201, "udp" },
+ { "apollo-relay", { NULL }, 10252, "tcp" },
+ { "apollo-relay", { NULL }, 10252, "udp" },
+ { "axis-wimp-port", { NULL }, 10260, "tcp" },
+ { "axis-wimp-port", { NULL }, 10260, "udp" },
+ { "blocks", { NULL }, 10288, "tcp" },
+ { "blocks", { NULL }, 10288, "udp" },
+ { "cosir", { NULL }, 10321, "tcp" },
+ { "hip-nat-t", { NULL }, 10500, "udp" },
+ { "MOS-lower", { NULL }, 10540, "tcp" },
+ { "MOS-lower", { NULL }, 10540, "udp" },
+ { "MOS-upper", { NULL }, 10541, "tcp" },
+ { "MOS-upper", { NULL }, 10541, "udp" },
+ { "MOS-aux", { NULL }, 10542, "tcp" },
+ { "MOS-aux", { NULL }, 10542, "udp" },
+ { "MOS-soap", { NULL }, 10543, "tcp" },
+ { "MOS-soap", { NULL }, 10543, "udp" },
+ { "MOS-soap-opt", { NULL }, 10544, "tcp" },
+ { "MOS-soap-opt", { NULL }, 10544, "udp" },
+ { "gap", { NULL }, 10800, "tcp" },
+ { "gap", { NULL }, 10800, "udp" },
+ { "lpdg", { NULL }, 10805, "tcp" },
+ { "lpdg", { NULL }, 10805, "udp" },
+ { "nbd", { NULL }, 10809, "tcp" },
+ { "nmc-disc", { NULL }, 10810, "udp" },
+ { "helix", { NULL }, 10860, "tcp" },
+ { "helix", { NULL }, 10860, "udp" },
+ { "rmiaux", { NULL }, 10990, "tcp" },
+ { "rmiaux", { NULL }, 10990, "udp" },
+ { "irisa", { NULL }, 11000, "tcp" },
+ { "irisa", { NULL }, 11000, "udp" },
+ { "metasys", { NULL }, 11001, "tcp" },
+ { "metasys", { NULL }, 11001, "udp" },
+ { "netapp-icmgmt", { NULL }, 11104, "tcp" },
+ { "netapp-icdata", { NULL }, 11105, "tcp" },
+ { "sgi-lk", { NULL }, 11106, "tcp" },
+ { "sgi-lk", { NULL }, 11106, "udp" },
+ { "vce", { NULL }, 11111, "tcp" },
+ { "vce", { NULL }, 11111, "udp" },
+ { "dicom", { NULL }, 11112, "tcp" },
+ { "dicom", { NULL }, 11112, "udp" },
+ { "suncacao-snmp", { NULL }, 11161, "tcp" },
+ { "suncacao-snmp", { NULL }, 11161, "udp" },
+ { "suncacao-jmxmp", { NULL }, 11162, "tcp" },
+ { "suncacao-jmxmp", { NULL }, 11162, "udp" },
+ { "suncacao-rmi", { NULL }, 11163, "tcp" },
+ { "suncacao-rmi", { NULL }, 11163, "udp" },
+ { "suncacao-csa", { NULL }, 11164, "tcp" },
+ { "suncacao-csa", { NULL }, 11164, "udp" },
+ { "suncacao-websvc", { NULL }, 11165, "tcp" },
+ { "suncacao-websvc", { NULL }, 11165, "udp" },
+ { "snss", { NULL }, 11171, "udp" },
+ { "oemcacao-jmxmp", { NULL }, 11172, "tcp" },
+ { "oemcacao-rmi", { NULL }, 11174, "tcp" },
+ { "oemcacao-websvc", { NULL }, 11175, "tcp" },
+ { "smsqp", { NULL }, 11201, "tcp" },
+ { "smsqp", { NULL }, 11201, "udp" },
+ { "wifree", { NULL }, 11208, "tcp" },
+ { "wifree", { NULL }, 11208, "udp" },
+ { "memcache", { NULL }, 11211, "tcp" },
+ { "memcache", { NULL }, 11211, "udp" },
+ { "imip", { NULL }, 11319, "tcp" },
+ { "imip", { NULL }, 11319, "udp" },
+ { "imip-channels", { NULL }, 11320, "tcp" },
+ { "imip-channels", { NULL }, 11320, "udp" },
+ { "arena-server", { NULL }, 11321, "tcp" },
+ { "arena-server", { NULL }, 11321, "udp" },
+ { "atm-uhas", { NULL }, 11367, "tcp" },
+ { "atm-uhas", { NULL }, 11367, "udp" },
+ { "hkp", { NULL }, 11371, "tcp" },
+ { "hkp", { NULL }, 11371, "udp" },
+ { "asgcypresstcps", { NULL }, 11489, "tcp" },
+ { "tempest-port", { NULL }, 11600, "tcp" },
+ { "tempest-port", { NULL }, 11600, "udp" },
+ { "h323callsigalt", { NULL }, 11720, "tcp" },
+ { "h323callsigalt", { NULL }, 11720, "udp" },
+ { "intrepid-ssl", { NULL }, 11751, "tcp" },
+ { "intrepid-ssl", { NULL }, 11751, "udp" },
+ { "xoraya", { NULL }, 11876, "tcp" },
+ { "xoraya", { NULL }, 11876, "udp" },
+ { "x2e-disc", { NULL }, 11877, "udp" },
+ { "sysinfo-sp", { NULL }, 11967, "tcp" },
+ { "sysinfo-sp", { NULL }, 11967, "udp" },
+ { "wmereceiving", { NULL }, 11997, "sctp"},
+ { "wmedistribution", { NULL }, 11998, "sctp"},
+ { "wmereporting", { NULL }, 11999, "sctp"},
+ { "entextxid", { NULL }, 12000, "tcp" },
+ { "entextxid", { NULL }, 12000, "udp" },
+ { "entextnetwk", { NULL }, 12001, "tcp" },
+ { "entextnetwk", { NULL }, 12001, "udp" },
+ { "entexthigh", { NULL }, 12002, "tcp" },
+ { "entexthigh", { NULL }, 12002, "udp" },
+ { "entextmed", { NULL }, 12003, "tcp" },
+ { "entextmed", { NULL }, 12003, "udp" },
+ { "entextlow", { NULL }, 12004, "tcp" },
+ { "entextlow", { NULL }, 12004, "udp" },
+ { "dbisamserver1", { NULL }, 12005, "tcp" },
+ { "dbisamserver1", { NULL }, 12005, "udp" },
+ { "dbisamserver2", { NULL }, 12006, "tcp" },
+ { "dbisamserver2", { NULL }, 12006, "udp" },
+ { "accuracer", { NULL }, 12007, "tcp" },
+ { "accuracer", { NULL }, 12007, "udp" },
+ { "accuracer-dbms", { NULL }, 12008, "tcp" },
+ { "accuracer-dbms", { NULL }, 12008, "udp" },
+ { "edbsrvr", { NULL }, 12010, "tcp" },
+ { "vipera", { NULL }, 12012, "tcp" },
+ { "vipera", { NULL }, 12012, "udp" },
+ { "vipera-ssl", { NULL }, 12013, "tcp" },
+ { "vipera-ssl", { NULL }, 12013, "udp" },
+ { "rets-ssl", { NULL }, 12109, "tcp" },
+ { "rets-ssl", { NULL }, 12109, "udp" },
+ { "nupaper-ss", { NULL }, 12121, "tcp" },
+ { "nupaper-ss", { NULL }, 12121, "udp" },
+ { "cawas", { NULL }, 12168, "tcp" },
+ { "cawas", { NULL }, 12168, "udp" },
+ { "hivep", { NULL }, 12172, "tcp" },
+ { "hivep", { NULL }, 12172, "udp" },
+ { "linogridengine", { NULL }, 12300, "tcp" },
+ { "linogridengine", { NULL }, 12300, "udp" },
+ { "warehouse-sss", { NULL }, 12321, "tcp" },
+ { "warehouse-sss", { NULL }, 12321, "udp" },
+ { "warehouse", { NULL }, 12322, "tcp" },
+ { "warehouse", { NULL }, 12322, "udp" },
+ { "italk", { NULL }, 12345, "tcp" },
+ { "italk", { NULL }, 12345, "udp" },
+ { "tsaf", { NULL }, 12753, "tcp" },
+ { "tsaf", { NULL }, 12753, "udp" },
+ { "i-zipqd", { NULL }, 13160, "tcp" },
+ { "i-zipqd", { NULL }, 13160, "udp" },
+ { "bcslogc", { NULL }, 13216, "tcp" },
+ { "bcslogc", { NULL }, 13216, "udp" },
+ { "rs-pias", { NULL }, 13217, "tcp" },
+ { "rs-pias", { NULL }, 13217, "udp" },
+ { "emc-vcas-tcp", { NULL }, 13218, "tcp" },
+ { "emc-vcas-udp", { NULL }, 13218, "udp" },
+ { "powwow-client", { NULL }, 13223, "tcp" },
+ { "powwow-client", { NULL }, 13223, "udp" },
+ { "powwow-server", { NULL }, 13224, "tcp" },
+ { "powwow-server", { NULL }, 13224, "udp" },
+ { "doip-data", { NULL }, 13400, "tcp" },
+ { "doip-disc", { NULL }, 13400, "udp" },
+ { "bprd", { NULL }, 13720, "tcp" },
+ { "bprd", { NULL }, 13720, "udp" },
+ { "bpdbm", { NULL }, 13721, "tcp" },
+ { "bpdbm", { NULL }, 13721, "udp" },
+ { "bpjava-msvc", { NULL }, 13722, "tcp" },
+ { "bpjava-msvc", { NULL }, 13722, "udp" },
+ { "vnetd", { NULL }, 13724, "tcp" },
+ { "vnetd", { NULL }, 13724, "udp" },
+ { "bpcd", { NULL }, 13782, "tcp" },
+ { "bpcd", { NULL }, 13782, "udp" },
+ { "vopied", { NULL }, 13783, "tcp" },
+ { "vopied", { NULL }, 13783, "udp" },
+ { "nbdb", { NULL }, 13785, "tcp" },
+ { "nbdb", { NULL }, 13785, "udp" },
+ { "nomdb", { NULL }, 13786, "tcp" },
+ { "nomdb", { NULL }, 13786, "udp" },
+ { "dsmcc-config", { NULL }, 13818, "tcp" },
+ { "dsmcc-config", { NULL }, 13818, "udp" },
+ { "dsmcc-session", { NULL }, 13819, "tcp" },
+ { "dsmcc-session", { NULL }, 13819, "udp" },
+ { "dsmcc-passthru", { NULL }, 13820, "tcp" },
+ { "dsmcc-passthru", { NULL }, 13820, "udp" },
+ { "dsmcc-download", { NULL }, 13821, "tcp" },
+ { "dsmcc-download", { NULL }, 13821, "udp" },
+ { "dsmcc-ccp", { NULL }, 13822, "tcp" },
+ { "dsmcc-ccp", { NULL }, 13822, "udp" },
+ { "bmdss", { NULL }, 13823, "tcp" },
+ { "dta-systems", { NULL }, 13929, "tcp" },
+ { "dta-systems", { NULL }, 13929, "udp" },
+ { "medevolve", { NULL }, 13930, "tcp" },
+ { "scotty-ft", { NULL }, 14000, "tcp" },
+ { "scotty-ft", { NULL }, 14000, "udp" },
+ { "sua", { NULL }, 14001, "tcp" },
+ { "sua", { NULL }, 14001, "udp" },
+ { "sua", { NULL }, 14001, "sctp"},
+ { "sage-best-com1", { NULL }, 14033, "tcp" },
+ { "sage-best-com1", { NULL }, 14033, "udp" },
+ { "sage-best-com2", { NULL }, 14034, "tcp" },
+ { "sage-best-com2", { NULL }, 14034, "udp" },
+ { "vcs-app", { NULL }, 14141, "tcp" },
+ { "vcs-app", { NULL }, 14141, "udp" },
+ { "icpp", { NULL }, 14142, "tcp" },
+ { "icpp", { NULL }, 14142, "udp" },
+ { "gcm-app", { NULL }, 14145, "tcp" },
+ { "gcm-app", { NULL }, 14145, "udp" },
+ { "vrts-tdd", { NULL }, 14149, "tcp" },
+ { "vrts-tdd", { NULL }, 14149, "udp" },
+ { "vcscmd", { NULL }, 14150, "tcp" },
+ { "vad", { NULL }, 14154, "tcp" },
+ { "vad", { NULL }, 14154, "udp" },
+ { "cps", { NULL }, 14250, "tcp" },
+ { "cps", { NULL }, 14250, "udp" },
+ { "ca-web-update", { NULL }, 14414, "tcp" },
+ { "ca-web-update", { NULL }, 14414, "udp" },
+ { "hde-lcesrvr-1", { NULL }, 14936, "tcp" },
+ { "hde-lcesrvr-1", { NULL }, 14936, "udp" },
+ { "hde-lcesrvr-2", { NULL }, 14937, "tcp" },
+ { "hde-lcesrvr-2", { NULL }, 14937, "udp" },
+ { "hydap", { NULL }, 15000, "tcp" },
+ { "hydap", { NULL }, 15000, "udp" },
+ { "xpilot", { NULL }, 15345, "tcp" },
+ { "xpilot", { NULL }, 15345, "udp" },
+ { "3link", { NULL }, 15363, "tcp" },
+ { "3link", { NULL }, 15363, "udp" },
+ { "cisco-snat", { NULL }, 15555, "tcp" },
+ { "cisco-snat", { NULL }, 15555, "udp" },
+ { "bex-xr", { NULL }, 15660, "tcp" },
+ { "bex-xr", { NULL }, 15660, "udp" },
+ { "ptp", { NULL }, 15740, "tcp" },
+ { "ptp", { NULL }, 15740, "udp" },
+ { "2ping", { NULL }, 15998, "udp" },
+ { "programmar", { NULL }, 15999, "tcp" },
+ { "fmsas", { NULL }, 16000, "tcp" },
+ { "fmsascon", { NULL }, 16001, "tcp" },
+ { "gsms", { NULL }, 16002, "tcp" },
+ { "alfin", { NULL }, 16003, "udp" },
+ { "jwpc", { NULL }, 16020, "tcp" },
+ { "jwpc-bin", { NULL }, 16021, "tcp" },
+ { "sun-sea-port", { NULL }, 16161, "tcp" },
+ { "sun-sea-port", { NULL }, 16161, "udp" },
+ { "solaris-audit", { NULL }, 16162, "tcp" },
+ { "etb4j", { NULL }, 16309, "tcp" },
+ { "etb4j", { NULL }, 16309, "udp" },
+ { "pduncs", { NULL }, 16310, "tcp" },
+ { "pduncs", { NULL }, 16310, "udp" },
+ { "pdefmns", { NULL }, 16311, "tcp" },
+ { "pdefmns", { NULL }, 16311, "udp" },
+ { "netserialext1", { NULL }, 16360, "tcp" },
+ { "netserialext1", { NULL }, 16360, "udp" },
+ { "netserialext2", { NULL }, 16361, "tcp" },
+ { "netserialext2", { NULL }, 16361, "udp" },
+ { "netserialext3", { NULL }, 16367, "tcp" },
+ { "netserialext3", { NULL }, 16367, "udp" },
+ { "netserialext4", { NULL }, 16368, "tcp" },
+ { "netserialext4", { NULL }, 16368, "udp" },
+ { "connected", { NULL }, 16384, "tcp" },
+ { "connected", { NULL }, 16384, "udp" },
+ { "xoms", { NULL }, 16619, "tcp" },
+ { "newbay-snc-mc", { NULL }, 16900, "tcp" },
+ { "newbay-snc-mc", { NULL }, 16900, "udp" },
+ { "sgcip", { NULL }, 16950, "tcp" },
+ { "sgcip", { NULL }, 16950, "udp" },
+ { "intel-rci-mp", { NULL }, 16991, "tcp" },
+ { "intel-rci-mp", { NULL }, 16991, "udp" },
+ { "amt-soap-http", { NULL }, 16992, "tcp" },
+ { "amt-soap-http", { NULL }, 16992, "udp" },
+ { "amt-soap-https", { NULL }, 16993, "tcp" },
+ { "amt-soap-https", { NULL }, 16993, "udp" },
+ { "amt-redir-tcp", { NULL }, 16994, "tcp" },
+ { "amt-redir-tcp", { NULL }, 16994, "udp" },
+ { "amt-redir-tls", { NULL }, 16995, "tcp" },
+ { "amt-redir-tls", { NULL }, 16995, "udp" },
+ { "isode-dua", { NULL }, 17007, "tcp" },
+ { "isode-dua", { NULL }, 17007, "udp" },
+ { "soundsvirtual", { NULL }, 17185, "tcp" },
+ { "soundsvirtual", { NULL }, 17185, "udp" },
+ { "chipper", { NULL }, 17219, "tcp" },
+ { "chipper", { NULL }, 17219, "udp" },
+ { "integrius-stp", { NULL }, 17234, "tcp" },
+ { "integrius-stp", { NULL }, 17234, "udp" },
+ { "ssh-mgmt", { NULL }, 17235, "tcp" },
+ { "ssh-mgmt", { NULL }, 17235, "udp" },
+ { "db-lsp", { NULL }, 17500, "tcp" },
+ { "db-lsp-disc", { NULL }, 17500, "udp" },
+ { "ea", { NULL }, 17729, "tcp" },
+ { "ea", { NULL }, 17729, "udp" },
+ { "zep", { NULL }, 17754, "tcp" },
+ { "zep", { NULL }, 17754, "udp" },
+ { "zigbee-ip", { NULL }, 17755, "tcp" },
+ { "zigbee-ip", { NULL }, 17755, "udp" },
+ { "zigbee-ips", { NULL }, 17756, "tcp" },
+ { "zigbee-ips", { NULL }, 17756, "udp" },
+ { "sw-orion", { NULL }, 17777, "tcp" },
+ { "biimenu", { NULL }, 18000, "tcp" },
+ { "biimenu", { NULL }, 18000, "udp" },
+ { "radpdf", { NULL }, 18104, "tcp" },
+ { "racf", { NULL }, 18136, "tcp" },
+ { "opsec-cvp", { NULL }, 18181, "tcp" },
+ { "opsec-cvp", { NULL }, 18181, "udp" },
+ { "opsec-ufp", { NULL }, 18182, "tcp" },
+ { "opsec-ufp", { NULL }, 18182, "udp" },
+ { "opsec-sam", { NULL }, 18183, "tcp" },
+ { "opsec-sam", { NULL }, 18183, "udp" },
+ { "opsec-lea", { NULL }, 18184, "tcp" },
+ { "opsec-lea", { NULL }, 18184, "udp" },
+ { "opsec-omi", { NULL }, 18185, "tcp" },
+ { "opsec-omi", { NULL }, 18185, "udp" },
+ { "ohsc", { NULL }, 18186, "tcp" },
+ { "ohsc", { NULL }, 18186, "udp" },
+ { "opsec-ela", { NULL }, 18187, "tcp" },
+ { "opsec-ela", { NULL }, 18187, "udp" },
+ { "checkpoint-rtm", { NULL }, 18241, "tcp" },
+ { "checkpoint-rtm", { NULL }, 18241, "udp" },
+ { "gv-pf", { NULL }, 18262, "tcp" },
+ { "gv-pf", { NULL }, 18262, "udp" },
+ { "ac-cluster", { NULL }, 18463, "tcp" },
+ { "ac-cluster", { NULL }, 18463, "udp" },
+ { "rds-ib", { NULL }, 18634, "tcp" },
+ { "rds-ib", { NULL }, 18634, "udp" },
+ { "rds-ip", { NULL }, 18635, "tcp" },
+ { "rds-ip", { NULL }, 18635, "udp" },
+ { "ique", { NULL }, 18769, "tcp" },
+ { "ique", { NULL }, 18769, "udp" },
+ { "infotos", { NULL }, 18881, "tcp" },
+ { "infotos", { NULL }, 18881, "udp" },
+ { "apc-necmp", { NULL }, 18888, "tcp" },
+ { "apc-necmp", { NULL }, 18888, "udp" },
+ { "igrid", { NULL }, 19000, "tcp" },
+ { "igrid", { NULL }, 19000, "udp" },
+ { "j-link", { NULL }, 19020, "tcp" },
+ { "opsec-uaa", { NULL }, 19191, "tcp" },
+ { "opsec-uaa", { NULL }, 19191, "udp" },
+ { "ua-secureagent", { NULL }, 19194, "tcp" },
+ { "ua-secureagent", { NULL }, 19194, "udp" },
+ { "keysrvr", { NULL }, 19283, "tcp" },
+ { "keysrvr", { NULL }, 19283, "udp" },
+ { "keyshadow", { NULL }, 19315, "tcp" },
+ { "keyshadow", { NULL }, 19315, "udp" },
+ { "mtrgtrans", { NULL }, 19398, "tcp" },
+ { "mtrgtrans", { NULL }, 19398, "udp" },
+ { "hp-sco", { NULL }, 19410, "tcp" },
+ { "hp-sco", { NULL }, 19410, "udp" },
+ { "hp-sca", { NULL }, 19411, "tcp" },
+ { "hp-sca", { NULL }, 19411, "udp" },
+ { "hp-sessmon", { NULL }, 19412, "tcp" },
+ { "hp-sessmon", { NULL }, 19412, "udp" },
+ { "fxuptp", { NULL }, 19539, "tcp" },
+ { "fxuptp", { NULL }, 19539, "udp" },
+ { "sxuptp", { NULL }, 19540, "tcp" },
+ { "sxuptp", { NULL }, 19540, "udp" },
+ { "jcp", { NULL }, 19541, "tcp" },
+ { "jcp", { NULL }, 19541, "udp" },
+ { "iec-104-sec", { NULL }, 19998, "tcp" },
+ { "dnp-sec", { NULL }, 19999, "tcp" },
+ { "dnp-sec", { NULL }, 19999, "udp" },
+ { "dnp", { NULL }, 20000, "tcp" },
+ { "dnp", { NULL }, 20000, "udp" },
+ { "microsan", { NULL }, 20001, "tcp" },
+ { "microsan", { NULL }, 20001, "udp" },
+ { "commtact-http", { NULL }, 20002, "tcp" },
+ { "commtact-http", { NULL }, 20002, "udp" },
+ { "commtact-https", { NULL }, 20003, "tcp" },
+ { "commtact-https", { NULL }, 20003, "udp" },
+ { "openwebnet", { NULL }, 20005, "tcp" },
+ { "openwebnet", { NULL }, 20005, "udp" },
+ { "ss-idi-disc", { NULL }, 20012, "udp" },
+ { "ss-idi", { NULL }, 20013, "tcp" },
+ { "opendeploy", { NULL }, 20014, "tcp" },
+ { "opendeploy", { NULL }, 20014, "udp" },
+ { "nburn_id", { NULL }, 20034, "tcp" },
+ { "nburn_id", { NULL }, 20034, "udp" },
+ { "tmophl7mts", { NULL }, 20046, "tcp" },
+ { "tmophl7mts", { NULL }, 20046, "udp" },
+ { "mountd", { NULL }, 20048, "tcp" },
+ { "mountd", { NULL }, 20048, "udp" },
+ { "nfsrdma", { NULL }, 20049, "tcp" },
+ { "nfsrdma", { NULL }, 20049, "udp" },
+ { "nfsrdma", { NULL }, 20049, "sctp"},
+ { "tolfab", { NULL }, 20167, "tcp" },
+ { "tolfab", { NULL }, 20167, "udp" },
+ { "ipdtp-port", { NULL }, 20202, "tcp" },
+ { "ipdtp-port", { NULL }, 20202, "udp" },
+ { "ipulse-ics", { NULL }, 20222, "tcp" },
+ { "ipulse-ics", { NULL }, 20222, "udp" },
+ { "emwavemsg", { NULL }, 20480, "tcp" },
+ { "emwavemsg", { NULL }, 20480, "udp" },
+ { "track", { NULL }, 20670, "tcp" },
+ { "track", { NULL }, 20670, "udp" },
+ { "athand-mmp", { NULL }, 20999, "tcp" },
+ { "athand-mmp", { NULL }, 20999, "udp" },
+ { "irtrans", { NULL }, 21000, "tcp" },
+ { "irtrans", { NULL }, 21000, "udp" },
+ { "dfserver", { NULL }, 21554, "tcp" },
+ { "dfserver", { NULL }, 21554, "udp" },
+ { "vofr-gateway", { NULL }, 21590, "tcp" },
+ { "vofr-gateway", { NULL }, 21590, "udp" },
+ { "tvpm", { NULL }, 21800, "tcp" },
+ { "tvpm", { NULL }, 21800, "udp" },
+ { "webphone", { NULL }, 21845, "tcp" },
+ { "webphone", { NULL }, 21845, "udp" },
+ { "netspeak-is", { NULL }, 21846, "tcp" },
+ { "netspeak-is", { NULL }, 21846, "udp" },
+ { "netspeak-cs", { NULL }, 21847, "tcp" },
+ { "netspeak-cs", { NULL }, 21847, "udp" },
+ { "netspeak-acd", { NULL }, 21848, "tcp" },
+ { "netspeak-acd", { NULL }, 21848, "udp" },
+ { "netspeak-cps", { NULL }, 21849, "tcp" },
+ { "netspeak-cps", { NULL }, 21849, "udp" },
+ { "snapenetio", { NULL }, 22000, "tcp" },
+ { "snapenetio", { NULL }, 22000, "udp" },
+ { "optocontrol", { NULL }, 22001, "tcp" },
+ { "optocontrol", { NULL }, 22001, "udp" },
+ { "optohost002", { NULL }, 22002, "tcp" },
+ { "optohost002", { NULL }, 22002, "udp" },
+ { "optohost003", { NULL }, 22003, "tcp" },
+ { "optohost003", { NULL }, 22003, "udp" },
+ { "optohost004", { NULL }, 22004, "tcp" },
+ { "optohost004", { NULL }, 22004, "udp" },
+ { "optohost004", { NULL }, 22005, "tcp" },
+ { "optohost004", { NULL }, 22005, "udp" },
+ { "dcap", { NULL }, 22125, "tcp" },
+ { "gsidcap", { NULL }, 22128, "tcp" },
+ { "wnn6", { NULL }, 22273, "tcp" },
+ { "wnn6", { NULL }, 22273, "udp" },
+ { "cis", { NULL }, 22305, "tcp" },
+ { "cis", { NULL }, 22305, "udp" },
+ { "cis-secure", { NULL }, 22343, "tcp" },
+ { "cis-secure", { NULL }, 22343, "udp" },
+ { "WibuKey", { NULL }, 22347, "tcp" },
+ { "WibuKey", { NULL }, 22347, "udp" },
+ { "CodeMeter", { NULL }, 22350, "tcp" },
+ { "CodeMeter", { NULL }, 22350, "udp" },
+ { "vocaltec-wconf", { NULL }, 22555, "tcp" },
+ { "vocaltec-phone", { NULL }, 22555, "udp" },
+ { "talikaserver", { NULL }, 22763, "tcp" },
+ { "talikaserver", { NULL }, 22763, "udp" },
+ { "aws-brf", { NULL }, 22800, "tcp" },
+ { "aws-brf", { NULL }, 22800, "udp" },
+ { "brf-gw", { NULL }, 22951, "tcp" },
+ { "brf-gw", { NULL }, 22951, "udp" },
+ { "inovaport1", { NULL }, 23000, "tcp" },
+ { "inovaport1", { NULL }, 23000, "udp" },
+ { "inovaport2", { NULL }, 23001, "tcp" },
+ { "inovaport2", { NULL }, 23001, "udp" },
+ { "inovaport3", { NULL }, 23002, "tcp" },
+ { "inovaport3", { NULL }, 23002, "udp" },
+ { "inovaport4", { NULL }, 23003, "tcp" },
+ { "inovaport4", { NULL }, 23003, "udp" },
+ { "inovaport5", { NULL }, 23004, "tcp" },
+ { "inovaport5", { NULL }, 23004, "udp" },
+ { "inovaport6", { NULL }, 23005, "tcp" },
+ { "inovaport6", { NULL }, 23005, "udp" },
+ { "s102", { NULL }, 23272, "udp" },
+ { "elxmgmt", { NULL }, 23333, "tcp" },
+ { "elxmgmt", { NULL }, 23333, "udp" },
+ { "novar-dbase", { NULL }, 23400, "tcp" },
+ { "novar-dbase", { NULL }, 23400, "udp" },
+ { "novar-alarm", { NULL }, 23401, "tcp" },
+ { "novar-alarm", { NULL }, 23401, "udp" },
+ { "novar-global", { NULL }, 23402, "tcp" },
+ { "novar-global", { NULL }, 23402, "udp" },
+ { "aequus", { NULL }, 23456, "tcp" },
+ { "aequus-alt", { NULL }, 23457, "tcp" },
+ { "med-ltp", { NULL }, 24000, "tcp" },
+ { "med-ltp", { NULL }, 24000, "udp" },
+ { "med-fsp-rx", { NULL }, 24001, "tcp" },
+ { "med-fsp-rx", { NULL }, 24001, "udp" },
+ { "med-fsp-tx", { NULL }, 24002, "tcp" },
+ { "med-fsp-tx", { NULL }, 24002, "udp" },
+ { "med-supp", { NULL }, 24003, "tcp" },
+ { "med-supp", { NULL }, 24003, "udp" },
+ { "med-ovw", { NULL }, 24004, "tcp" },
+ { "med-ovw", { NULL }, 24004, "udp" },
+ { "med-ci", { NULL }, 24005, "tcp" },
+ { "med-ci", { NULL }, 24005, "udp" },
+ { "med-net-svc", { NULL }, 24006, "tcp" },
+ { "med-net-svc", { NULL }, 24006, "udp" },
+ { "filesphere", { NULL }, 24242, "tcp" },
+ { "filesphere", { NULL }, 24242, "udp" },
+ { "vista-4gl", { NULL }, 24249, "tcp" },
+ { "vista-4gl", { NULL }, 24249, "udp" },
+ { "ild", { NULL }, 24321, "tcp" },
+ { "ild", { NULL }, 24321, "udp" },
+ { "intel_rci", { NULL }, 24386, "tcp" },
+ { "intel_rci", { NULL }, 24386, "udp" },
+ { "tonidods", { NULL }, 24465, "tcp" },
+ { "tonidods", { NULL }, 24465, "udp" },
+ { "binkp", { NULL }, 24554, "tcp" },
+ { "binkp", { NULL }, 24554, "udp" },
+ { "canditv", { NULL }, 24676, "tcp" },
+ { "canditv", { NULL }, 24676, "udp" },
+ { "flashfiler", { NULL }, 24677, "tcp" },
+ { "flashfiler", { NULL }, 24677, "udp" },
+ { "proactivate", { NULL }, 24678, "tcp" },
+ { "proactivate", { NULL }, 24678, "udp" },
+ { "tcc-http", { NULL }, 24680, "tcp" },
+ { "tcc-http", { NULL }, 24680, "udp" },
+ { "cslg", { NULL }, 24754, "tcp" },
+ { "find", { NULL }, 24922, "tcp" },
+ { "find", { NULL }, 24922, "udp" },
+ { "icl-twobase1", { NULL }, 25000, "tcp" },
+ { "icl-twobase1", { NULL }, 25000, "udp" },
+ { "icl-twobase2", { NULL }, 25001, "tcp" },
+ { "icl-twobase2", { NULL }, 25001, "udp" },
+ { "icl-twobase3", { NULL }, 25002, "tcp" },
+ { "icl-twobase3", { NULL }, 25002, "udp" },
+ { "icl-twobase4", { NULL }, 25003, "tcp" },
+ { "icl-twobase4", { NULL }, 25003, "udp" },
+ { "icl-twobase5", { NULL }, 25004, "tcp" },
+ { "icl-twobase5", { NULL }, 25004, "udp" },
+ { "icl-twobase6", { NULL }, 25005, "tcp" },
+ { "icl-twobase6", { NULL }, 25005, "udp" },
+ { "icl-twobase7", { NULL }, 25006, "tcp" },
+ { "icl-twobase7", { NULL }, 25006, "udp" },
+ { "icl-twobase8", { NULL }, 25007, "tcp" },
+ { "icl-twobase8", { NULL }, 25007, "udp" },
+ { "icl-twobase9", { NULL }, 25008, "tcp" },
+ { "icl-twobase9", { NULL }, 25008, "udp" },
+ { "icl-twobase10", { NULL }, 25009, "tcp" },
+ { "icl-twobase10", { NULL }, 25009, "udp" },
+ { "rna", { NULL }, 25471, "sctp"},
+ { "sauterdongle", { NULL }, 25576, "tcp" },
+ { "vocaltec-hos", { NULL }, 25793, "tcp" },
+ { "vocaltec-hos", { NULL }, 25793, "udp" },
+ { "tasp-net", { NULL }, 25900, "tcp" },
+ { "tasp-net", { NULL }, 25900, "udp" },
+ { "niobserver", { NULL }, 25901, "tcp" },
+ { "niobserver", { NULL }, 25901, "udp" },
+ { "nilinkanalyst", { NULL }, 25902, "tcp" },
+ { "nilinkanalyst", { NULL }, 25902, "udp" },
+ { "niprobe", { NULL }, 25903, "tcp" },
+ { "niprobe", { NULL }, 25903, "udp" },
+ { "quake", { NULL }, 26000, "tcp" },
+ { "quake", { NULL }, 26000, "udp" },
+ { "scscp", { NULL }, 26133, "tcp" },
+ { "scscp", { NULL }, 26133, "udp" },
+ { "wnn6-ds", { NULL }, 26208, "tcp" },
+ { "wnn6-ds", { NULL }, 26208, "udp" },
+ { "ezproxy", { NULL }, 26260, "tcp" },
+ { "ezproxy", { NULL }, 26260, "udp" },
+ { "ezmeeting", { NULL }, 26261, "tcp" },
+ { "ezmeeting", { NULL }, 26261, "udp" },
+ { "k3software-svr", { NULL }, 26262, "tcp" },
+ { "k3software-svr", { NULL }, 26262, "udp" },
+ { "k3software-cli", { NULL }, 26263, "tcp" },
+ { "k3software-cli", { NULL }, 26263, "udp" },
+ { "exoline-tcp", { NULL }, 26486, "tcp" },
+ { "exoline-udp", { NULL }, 26486, "udp" },
+ { "exoconfig", { NULL }, 26487, "tcp" },
+ { "exoconfig", { NULL }, 26487, "udp" },
+ { "exonet", { NULL }, 26489, "tcp" },
+ { "exonet", { NULL }, 26489, "udp" },
+ { "imagepump", { NULL }, 27345, "tcp" },
+ { "imagepump", { NULL }, 27345, "udp" },
+ { "jesmsjc", { NULL }, 27442, "tcp" },
+ { "jesmsjc", { NULL }, 27442, "udp" },
+ { "kopek-httphead", { NULL }, 27504, "tcp" },
+ { "kopek-httphead", { NULL }, 27504, "udp" },
+ { "ars-vista", { NULL }, 27782, "tcp" },
+ { "ars-vista", { NULL }, 27782, "udp" },
+ { "tw-auth-key", { NULL }, 27999, "tcp" },
+ { "tw-auth-key", { NULL }, 27999, "udp" },
+ { "nxlmd", { NULL }, 28000, "tcp" },
+ { "nxlmd", { NULL }, 28000, "udp" },
+ { "pqsp", { NULL }, 28001, "tcp" },
+ { "siemensgsm", { NULL }, 28240, "tcp" },
+ { "siemensgsm", { NULL }, 28240, "udp" },
+ { "sgsap", { NULL }, 29118, "sctp"},
+ { "otmp", { NULL }, 29167, "tcp" },
+ { "otmp", { NULL }, 29167, "udp" },
+ { "sbcap", { NULL }, 29168, "sctp"},
+ { "iuhsctpassoc", { NULL }, 29169, "sctp"},
+ { "pago-services1", { NULL }, 30001, "tcp" },
+ { "pago-services1", { NULL }, 30001, "udp" },
+ { "pago-services2", { NULL }, 30002, "tcp" },
+ { "pago-services2", { NULL }, 30002, "udp" },
+ { "kingdomsonline", { NULL }, 30260, "tcp" },
+ { "kingdomsonline", { NULL }, 30260, "udp" },
+ { "ovobs", { NULL }, 30999, "tcp" },
+ { "ovobs", { NULL }, 30999, "udp" },
+ { "autotrac-acp", { NULL }, 31020, "tcp" },
+ { "yawn", { NULL }, 31029, "udp" },
+ { "xqosd", { NULL }, 31416, "tcp" },
+ { "xqosd", { NULL }, 31416, "udp" },
+ { "tetrinet", { NULL }, 31457, "tcp" },
+ { "tetrinet", { NULL }, 31457, "udp" },
+ { "lm-mon", { NULL }, 31620, "tcp" },
+ { "lm-mon", { NULL }, 31620, "udp" },
+ { "dsx_monitor", { NULL }, 31685, "tcp" },
+ { "gamesmith-port", { NULL }, 31765, "tcp" },
+ { "gamesmith-port", { NULL }, 31765, "udp" },
+ { "iceedcp_tx", { NULL }, 31948, "tcp" },
+ { "iceedcp_tx", { NULL }, 31948, "udp" },
+ { "iceedcp_rx", { NULL }, 31949, "tcp" },
+ { "iceedcp_rx", { NULL }, 31949, "udp" },
+ { "iracinghelper", { NULL }, 32034, "tcp" },
+ { "iracinghelper", { NULL }, 32034, "udp" },
+ { "t1distproc60", { NULL }, 32249, "tcp" },
+ { "t1distproc60", { NULL }, 32249, "udp" },
+ { "apm-link", { NULL }, 32483, "tcp" },
+ { "apm-link", { NULL }, 32483, "udp" },
+ { "sec-ntb-clnt", { NULL }, 32635, "tcp" },
+ { "sec-ntb-clnt", { NULL }, 32635, "udp" },
+ { "DMExpress", { NULL }, 32636, "tcp" },
+ { "DMExpress", { NULL }, 32636, "udp" },
+ { "filenet-powsrm", { NULL }, 32767, "tcp" },
+ { "filenet-powsrm", { NULL }, 32767, "udp" },
+ { "filenet-tms", { NULL }, 32768, "tcp" },
+ { "filenet-tms", { NULL }, 32768, "udp" },
+ { "filenet-rpc", { NULL }, 32769, "tcp" },
+ { "filenet-rpc", { NULL }, 32769, "udp" },
+ { "filenet-nch", { NULL }, 32770, "tcp" },
+ { "filenet-nch", { NULL }, 32770, "udp" },
+ { "filenet-rmi", { NULL }, 32771, "tcp" },
+ { "filenet-rmi", { NULL }, 32771, "udp" },
+ { "filenet-pa", { NULL }, 32772, "tcp" },
+ { "filenet-pa", { NULL }, 32772, "udp" },
+ { "filenet-cm", { NULL }, 32773, "tcp" },
+ { "filenet-cm", { NULL }, 32773, "udp" },
+ { "filenet-re", { NULL }, 32774, "tcp" },
+ { "filenet-re", { NULL }, 32774, "udp" },
+ { "filenet-pch", { NULL }, 32775, "tcp" },
+ { "filenet-pch", { NULL }, 32775, "udp" },
+ { "filenet-peior", { NULL }, 32776, "tcp" },
+ { "filenet-peior", { NULL }, 32776, "udp" },
+ { "filenet-obrok", { NULL }, 32777, "tcp" },
+ { "filenet-obrok", { NULL }, 32777, "udp" },
+ { "mlsn", { NULL }, 32801, "tcp" },
+ { "mlsn", { NULL }, 32801, "udp" },
+ { "retp", { NULL }, 32811, "tcp" },
+ { "idmgratm", { NULL }, 32896, "tcp" },
+ { "idmgratm", { NULL }, 32896, "udp" },
+ { "aurora-balaena", { NULL }, 33123, "tcp" },
+ { "aurora-balaena", { NULL }, 33123, "udp" },
+ { "diamondport", { NULL }, 33331, "tcp" },
+ { "diamondport", { NULL }, 33331, "udp" },
+ { "dgi-serv", { NULL }, 33333, "tcp" },
+ { "traceroute", { NULL }, 33434, "tcp" },
+ { "traceroute", { NULL }, 33434, "udp" },
+ { "snip-slave", { NULL }, 33656, "tcp" },
+ { "snip-slave", { NULL }, 33656, "udp" },
+ { "turbonote-2", { NULL }, 34249, "tcp" },
+ { "turbonote-2", { NULL }, 34249, "udp" },
+ { "p-net-local", { NULL }, 34378, "tcp" },
+ { "p-net-local", { NULL }, 34378, "udp" },
+ { "p-net-remote", { NULL }, 34379, "tcp" },
+ { "p-net-remote", { NULL }, 34379, "udp" },
+ { "dhanalakshmi", { NULL }, 34567, "tcp" },
+ { "profinet-rt", { NULL }, 34962, "tcp" },
+ { "profinet-rt", { NULL }, 34962, "udp" },
+ { "profinet-rtm", { NULL }, 34963, "tcp" },
+ { "profinet-rtm", { NULL }, 34963, "udp" },
+ { "profinet-cm", { NULL }, 34964, "tcp" },
+ { "profinet-cm", { NULL }, 34964, "udp" },
+ { "ethercat", { NULL }, 34980, "tcp" },
+ { "ethercat", { NULL }, 34980, "udp" },
+ { "allpeers", { NULL }, 36001, "tcp" },
+ { "allpeers", { NULL }, 36001, "udp" },
+ { "s1-control", { NULL }, 36412, "sctp"},
+ { "x2-control", { NULL }, 36422, "sctp"},
+ { "m2ap", { NULL }, 36443, "sctp"},
+ { "m3ap", { NULL }, 36444, "sctp"},
+ { "kastenxpipe", { NULL }, 36865, "tcp" },
+ { "kastenxpipe", { NULL }, 36865, "udp" },
+ { "neckar", { NULL }, 37475, "tcp" },
+ { "neckar", { NULL }, 37475, "udp" },
+ { "unisys-eportal", { NULL }, 37654, "tcp" },
+ { "unisys-eportal", { NULL }, 37654, "udp" },
+ { "galaxy7-data", { NULL }, 38201, "tcp" },
+ { "galaxy7-data", { NULL }, 38201, "udp" },
+ { "fairview", { NULL }, 38202, "tcp" },
+ { "fairview", { NULL }, 38202, "udp" },
+ { "agpolicy", { NULL }, 38203, "tcp" },
+ { "agpolicy", { NULL }, 38203, "udp" },
+ { "turbonote-1", { NULL }, 39681, "tcp" },
+ { "turbonote-1", { NULL }, 39681, "udp" },
+ { "safetynetp", { NULL }, 40000, "tcp" },
+ { "safetynetp", { NULL }, 40000, "udp" },
+ { "cscp", { NULL }, 40841, "tcp" },
+ { "cscp", { NULL }, 40841, "udp" },
+ { "csccredir", { NULL }, 40842, "tcp" },
+ { "csccredir", { NULL }, 40842, "udp" },
+ { "csccfirewall", { NULL }, 40843, "tcp" },
+ { "csccfirewall", { NULL }, 40843, "udp" },
+ { "ortec-disc", { NULL }, 40853, "udp" },
+ { "fs-qos", { NULL }, 41111, "tcp" },
+ { "fs-qos", { NULL }, 41111, "udp" },
+ { "tentacle", { NULL }, 41121, "tcp" },
+ { "crestron-cip", { NULL }, 41794, "tcp" },
+ { "crestron-cip", { NULL }, 41794, "udp" },
+ { "crestron-ctp", { NULL }, 41795, "tcp" },
+ { "crestron-ctp", { NULL }, 41795, "udp" },
+ { "candp", { NULL }, 42508, "tcp" },
+ { "candp", { NULL }, 42508, "udp" },
+ { "candrp", { NULL }, 42509, "tcp" },
+ { "candrp", { NULL }, 42509, "udp" },
+ { "caerpc", { NULL }, 42510, "tcp" },
+ { "caerpc", { NULL }, 42510, "udp" },
+ { "reachout", { NULL }, 43188, "tcp" },
+ { "reachout", { NULL }, 43188, "udp" },
+ { "ndm-agent-port", { NULL }, 43189, "tcp" },
+ { "ndm-agent-port", { NULL }, 43189, "udp" },
+ { "ip-provision", { NULL }, 43190, "tcp" },
+ { "ip-provision", { NULL }, 43190, "udp" },
+ { "noit-transport", { NULL }, 43191, "tcp" },
+ { "ew-mgmt", { NULL }, 43440, "tcp" },
+ { "ew-disc-cmd", { NULL }, 43440, "udp" },
+ { "ciscocsdb", { NULL }, 43441, "tcp" },
+ { "ciscocsdb", { NULL }, 43441, "udp" },
+ { "pmcd", { NULL }, 44321, "tcp" },
+ { "pmcd", { NULL }, 44321, "udp" },
+ { "pmcdproxy", { NULL }, 44322, "tcp" },
+ { "pmcdproxy", { NULL }, 44322, "udp" },
+ { "pcp", { NULL }, 44323, "udp" },
+ { "rbr-debug", { NULL }, 44553, "tcp" },
+ { "rbr-debug", { NULL }, 44553, "udp" },
+ { "EtherNet/IP-2", { NULL }, 44818, "tcp" },
+ { "EtherNet/IP-2", { NULL }, 44818, "udp" },
+ { "invision-ag", { NULL }, 45054, "tcp" },
+ { "invision-ag", { NULL }, 45054, "udp" },
+ { "eba", { NULL }, 45678, "tcp" },
+ { "eba", { NULL }, 45678, "udp" },
+ { "qdb2service", { NULL }, 45825, "tcp" },
+ { "qdb2service", { NULL }, 45825, "udp" },
+ { "ssr-servermgr", { NULL }, 45966, "tcp" },
+ { "ssr-servermgr", { NULL }, 45966, "udp" },
+ { "mediabox", { NULL }, 46999, "tcp" },
+ { "mediabox", { NULL }, 46999, "udp" },
+ { "mbus", { NULL }, 47000, "tcp" },
+ { "mbus", { NULL }, 47000, "udp" },
+ { "winrm", { NULL }, 47001, "tcp" },
+ { "dbbrowse", { NULL }, 47557, "tcp" },
+ { "dbbrowse", { NULL }, 47557, "udp" },
+ { "directplaysrvr", { NULL }, 47624, "tcp" },
+ { "directplaysrvr", { NULL }, 47624, "udp" },
+ { "ap", { NULL }, 47806, "tcp" },
+ { "ap", { NULL }, 47806, "udp" },
+ { "bacnet", { NULL }, 47808, "tcp" },
+ { "bacnet", { NULL }, 47808, "udp" },
+ { "nimcontroller", { NULL }, 48000, "tcp" },
+ { "nimcontroller", { NULL }, 48000, "udp" },
+ { "nimspooler", { NULL }, 48001, "tcp" },
+ { "nimspooler", { NULL }, 48001, "udp" },
+ { "nimhub", { NULL }, 48002, "tcp" },
+ { "nimhub", { NULL }, 48002, "udp" },
+ { "nimgtw", { NULL }, 48003, "tcp" },
+ { "nimgtw", { NULL }, 48003, "udp" },
+ { "nimbusdb", { NULL }, 48004, "tcp" },
+ { "nimbusdbctrl", { NULL }, 48005, "tcp" },
+ { "3gpp-cbsp", { NULL }, 48049, "tcp" },
+ { "isnetserv", { NULL }, 48128, "tcp" },
+ { "isnetserv", { NULL }, 48128, "udp" },
+ { "blp5", { NULL }, 48129, "tcp" },
+ { "blp5", { NULL }, 48129, "udp" },
+ { "com-bardac-dw", { NULL }, 48556, "tcp" },
+ { "com-bardac-dw", { NULL }, 48556, "udp" },
+ { "iqobject", { NULL }, 48619, "tcp" },
+ { "iqobject", { NULL }, 48619, "udp" },
+# endif /* USE_IANA_REGISTERED_PORTS */
+ { NULL, { NULL }, 0, NULL }
};
struct servent *getservbyport(int port, const char *proto)
{
unsigned short u_port;
- const char *protocol = NULL;
- int i, error = 0;
+ const char *protocol = NULL;
+ int error = 0;
+ size_t i;
u_port = ntohs((unsigned short)port);
- if (proto)
- {
- switch (strlen(proto)) {
+ if (proto) {
+ switch (ares_strlen(proto)) {
case 3:
- if (!strncasecmp(proto, "tcp", 3))
+ if (!strncasecmp(proto, "tcp", 3)) {
protocol = "tcp";
- else if (!strncasecmp(proto, "udp", 3))
+ } else if (!strncasecmp(proto, "udp", 3)) {
protocol = "udp";
- else
+ } else {
error = WSAEFAULT;
+ }
break;
case 4:
- if (!strncasecmp(proto, "sctp", 4))
+ if (!strncasecmp(proto, "sctp", 4)) {
protocol = "sctp";
- else if (!strncasecmp(proto, "dccp", 4))
+ } else if (!strncasecmp(proto, "dccp", 4)) {
protocol = "dccp";
- else
+ } else {
error = WSAEFAULT;
+ }
break;
default:
error = WSAEFAULT;
- }
}
+ }
- if (!error)
- {
- for (i = 0; i < (sizeof(IANAports) / sizeof(IANAports[0])) - 1; i++)
- {
- if (u_port == IANAports[i].s_port)
- {
- if (!protocol || !strcasecmp(protocol, IANAports[i].s_proto))
- return (struct servent *)&IANAports[i];
- }
+ if (!error) {
+ for (i = 0; i < (sizeof(IANAports) / sizeof(IANAports[0])) - 1; i++) {
+ if (u_port == IANAports[i].s_port) {
+ if (!protocol || !strcasecmp(protocol, IANAports[i].s_proto)) {
+ return (struct servent *)&IANAports[i];
}
- error = WSANO_DATA;
+ }
}
+ error = WSANO_DATA;
+ }
SET_SOCKERRNO(error);
return NULL;
diff --git a/src/lib/ares_platform.h b/src/lib/ares_platform.h
index e6885ae..44b2c03 100644
--- a/src/lib/ares_platform.h
+++ b/src/lib/ares_platform.h
@@ -1,22 +1,31 @@
-#ifndef HEADER_CARES_PLATFORM_H
-#define HEADER_CARES_PLATFORM_H
-
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2004 - 2011 by Daniel Stenberg et al
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) 2004 Daniel Stenberg
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
+#ifndef HEADER_CARES_PLATFORM_H
+#define HEADER_CARES_PLATFORM_H
#include "ares_setup.h"
diff --git a/src/lib/ares_private.h b/src/lib/ares_private.h
index 60d69e0..e5baa3c 100644
--- a/src/lib/ares_private.h
+++ b/src/lib/ares_private.h
@@ -1,245 +1,250 @@
-#ifndef __ARES_PRIVATE_H
-#define __ARES_PRIVATE_H
-
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2004-2010 by Daniel Stenberg
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) 2010 Daniel Stenberg
+ *
+ * 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:
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
+#ifndef __ARES_PRIVATE_H
+#define __ARES_PRIVATE_H
/*
* Define WIN32 when build target is Win32 API
*/
#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
-#define WIN32
+# define WIN32
#endif
#ifdef HAVE_NETINET_IN_H
-#include <netinet/in.h>
+# include <netinet/in.h>
#endif
#ifdef WATT32
-#include <tcp.h>
-#include <sys/ioctl.h>
-#define writev(s,v,c) writev_s(s,v,c)
-#define HAVE_WRITEV 1
+# include <tcp.h>
+# include <sys/ioctl.h>
#endif
-#define DEFAULT_TIMEOUT 5000 /* milliseconds */
-#define DEFAULT_TRIES 4
+#define DEFAULT_TIMEOUT 2000 /* milliseconds */
+#define DEFAULT_TRIES 3
#ifndef INADDR_NONE
-#define INADDR_NONE 0xffffffff
+# define INADDR_NONE 0xffffffff
#endif
#ifdef CARES_EXPOSE_STATICS
/* Make some internal functions visible for testing */
-#define STATIC_TESTABLE
+# define STATIC_TESTABLE
#else
-#define STATIC_TESTABLE static
+# define STATIC_TESTABLE static
#endif
/* By using a double cast, we can get rid of the bogus warning of
- * warning: cast from 'const struct sockaddr *' to 'const struct sockaddr_in6 *' increases required alignment from 1 to 4 [-Wcast-align]
+ * warning: cast from 'const struct sockaddr *' to 'const struct sockaddr_in6 *'
+ * increases required alignment from 1 to 4 [-Wcast-align]
*/
#define CARES_INADDR_CAST(type, var) ((type)((void *)var))
#if defined(WIN32) && !defined(WATT32)
-#define WIN_NS_9X "System\\CurrentControlSet\\Services\\VxD\\MSTCP"
-#define WIN_NS_NT_KEY "System\\CurrentControlSet\\Services\\Tcpip\\Parameters"
-#define WIN_DNSCLIENT "Software\\Policies\\Microsoft\\System\\DNSClient"
-#define WIN_NT_DNSCLIENT "Software\\Policies\\Microsoft\\Windows NT\\DNSClient"
-#define NAMESERVER "NameServer"
-#define DHCPNAMESERVER "DhcpNameServer"
-#define DATABASEPATH "DatabasePath"
-#define WIN_PATH_HOSTS "\\hosts"
-#define SEARCHLIST_KEY "SearchList"
-#define PRIMARYDNSSUFFIX_KEY "PrimaryDNSSuffix"
-#define INTERFACES_KEY "Interfaces"
-#define DOMAIN_KEY "Domain"
-#define DHCPDOMAIN_KEY "DhcpDomain"
+# define WIN_NS_9X "System\\CurrentControlSet\\Services\\VxD\\MSTCP"
+# define WIN_NS_NT_KEY "System\\CurrentControlSet\\Services\\Tcpip\\Parameters"
+# define WIN_DNSCLIENT "Software\\Policies\\Microsoft\\System\\DNSClient"
+# define WIN_NT_DNSCLIENT \
+ "Software\\Policies\\Microsoft\\Windows NT\\DNSClient"
+# define NAMESERVER "NameServer"
+# define DHCPNAMESERVER "DhcpNameServer"
+# define DATABASEPATH "DatabasePath"
+# define WIN_PATH_HOSTS "\\hosts"
+# define SEARCHLIST_KEY "SearchList"
+# define PRIMARYDNSSUFFIX_KEY "PrimaryDNSSuffix"
+# define INTERFACES_KEY "Interfaces"
+# define DOMAIN_KEY "Domain"
+# define DHCPDOMAIN_KEY "DhcpDomain"
#elif defined(WATT32)
-#define PATH_RESOLV_CONF "/dev/ENV/etc/resolv.conf"
-W32_FUNC const char *_w32_GetHostsFile (void);
+# define PATH_RESOLV_CONF "/dev/ENV/etc/resolv.conf"
+W32_FUNC const char *_w32_GetHostsFile(void);
#elif defined(NETWARE)
-#define PATH_RESOLV_CONF "sys:/etc/resolv.cfg"
-#define PATH_HOSTS "sys:/etc/hosts"
+# define PATH_RESOLV_CONF "sys:/etc/resolv.cfg"
+# define PATH_HOSTS "sys:/etc/hosts"
#elif defined(__riscos__)
-#define PATH_HOSTS "InetDBase:Hosts"
+# define PATH_HOSTS "InetDBase:Hosts"
#elif defined(__HAIKU__)
-#define PATH_RESOLV_CONF "/system/settings/network/resolv.conf"
-#define PATH_HOSTS "/system/settings/network/hosts"
+# define PATH_RESOLV_CONF "/system/settings/network/resolv.conf"
+# define PATH_HOSTS "/system/settings/network/hosts"
#else
-#define PATH_RESOLV_CONF "/etc/resolv.conf"
-#ifdef ETC_INET
-#define PATH_HOSTS "/etc/inet/hosts"
-#else
-#define PATH_HOSTS "/etc/hosts"
-#endif
+# define PATH_RESOLV_CONF "/etc/resolv.conf"
+# ifdef ETC_INET
+# define PATH_HOSTS "/etc/inet/hosts"
+# else
+# define PATH_HOSTS "/etc/hosts"
+# endif
#endif
-#define ARES_ID_KEY_LEN 31
-
#include "ares_ipv6.h"
-#include "ares_llist.h"
+
+struct ares_rand_state;
+typedef struct ares_rand_state ares_rand_state;
+
+#include "ares__llist.h"
+#include "ares__slist.h"
+#include "ares__htable_stvp.h"
+#include "ares__htable_asvp.h"
+#include "ares__buf.h"
+#include "ares_dns_record.h"
#ifndef HAVE_GETENV
# include "ares_getenv.h"
# define getenv(ptr) ares_getenv(ptr)
#endif
-#include "ares_strdup.h"
+#include "ares_str.h"
#include "ares_strsplit.h"
#ifndef HAVE_STRCASECMP
# include "ares_strcasecmp.h"
-# define strcasecmp(p1,p2) ares_strcasecmp(p1,p2)
+# define strcasecmp(p1, p2) ares_strcasecmp(p1, p2)
#endif
#ifndef HAVE_STRNCASECMP
# include "ares_strcasecmp.h"
-# define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n)
-#endif
-
-#ifndef HAVE_WRITEV
-# include "ares_writev.h"
-# define writev(s,ptr,cnt) ares_writev(s,ptr,cnt)
+# define strncasecmp(p1, p2, n) ares_strncasecmp(p1, p2, n)
#endif
/********* EDNS defines section ******/
-#define EDNSPACKETSZ 1280 /* Reasonable UDP payload size, as suggested
- in RFC2671 */
-#define MAXENDSSZ 4096 /* Maximum (local) limit for edns packet size */
-#define EDNSFIXEDSZ 11 /* Size of EDNS header */
+#define EDNSPACKETSZ \
+ 1280 /* Reasonable UDP payload size, as suggested \
+ in RFC2671 */
+#define MAXENDSSZ 4096 /* Maximum (local) limit for edns packet size */
+#define EDNSFIXEDSZ 11 /* Size of EDNS header */
+
/********* EDNS defines section ******/
struct ares_addr {
int family;
+
union {
struct in_addr addr4;
struct ares_in6_addr addr6;
} addr;
- int udp_port; /* stored in network order */
- int tcp_port; /* stored in network order */
+
+ unsigned short udp_port; /* stored in network order */
+ unsigned short tcp_port; /* stored in network order */
};
+
#define addrV4 addr.addr4
#define addrV6 addr.addr6
struct query;
-struct send_request {
- /* Remaining data to send */
- const unsigned char *data;
- size_t len;
+struct server_state;
- /* The query for which we're sending this data */
- struct query* owner_query;
- /* The buffer we're using, if we have our own copy of the packet */
- unsigned char *data_storage;
-
- /* Next request in queue */
- struct send_request *next;
+struct server_connection {
+ struct server_state *server;
+ ares_socket_t fd;
+ ares_bool_t is_tcp;
+ /* total number of queries run on this connection since it was established */
+ size_t total_queries;
+ /* list of outstanding queries to this connection */
+ ares__llist_t *queries_to_conn;
};
struct server_state {
- struct ares_addr addr;
- ares_socket_t udp_socket;
- ares_socket_t tcp_socket;
+ size_t idx; /* index for server in ares_channel */
+ struct ares_addr addr;
- /* Mini-buffer for reading the length word */
- unsigned char tcp_lenbuf[2];
- int tcp_lenbuf_pos;
- int tcp_length;
+ ares__llist_t *connections;
+ struct server_connection *tcp_conn;
- /* Buffer for reading actual TCP data */
- unsigned char *tcp_buffer;
- int tcp_buffer_pos;
+ /* TCP buffer since multiple responses can come back in one read, or partial
+ * in a read */
+ ares__buf_t *tcp_parser;
/* TCP output queue */
- struct send_request *qhead;
- struct send_request *qtail;
+ ares__buf_t *tcp_send;
/* Which incarnation of this connection is this? We don't want to
* retransmit requests into the very same socket, but if the server
* closes on us and we re-open the connection, then we do want to
* re-send. */
- int tcp_connection_generation;
-
- /* Circular, doubly-linked list of outstanding queries to this server */
- struct list_node queries_to_server;
+ size_t tcp_connection_generation;
/* Link back to owning channel */
- ares_channel channel;
-
- /* Is this server broken? We mark connections as broken when a
- * request that is queued for sending times out.
- */
- int is_broken;
+ ares_channel channel;
};
/* State to represent a DNS query */
struct query {
/* Query ID from qbuf, for faster lookup, and current timeout */
- unsigned short qid;
- struct timeval timeout;
+ unsigned short qid; /* host byte order */
+ struct timeval timeout;
+ ares_channel channel;
/*
- * Links for the doubly-linked lists in which we insert a query.
- * These circular, doubly-linked lists that are hash-bucketed based
- * the attributes we care about, help making most important
- * operations O(1).
+ * Node object for each list entry the query belongs to in order to
+ * make removal operations O(1).
*/
- struct list_node queries_by_qid; /* hopefully in same cache line as qid */
- struct list_node queries_by_timeout;
- struct list_node queries_to_server;
- struct list_node all_queries;
+ ares__slist_node_t *node_queries_by_timeout;
+ ares__llist_node_t *node_queries_to_conn;
+ ares__llist_node_t *node_all_queries;
+
+ /* connection handle for validation purposes */
+ const struct server_connection *conn;
/* Query buf with length at beginning, for TCP transmission */
- unsigned char *tcpbuf;
- int tcplen;
+ unsigned char *tcpbuf;
+ size_t tcplen;
/* Arguments passed to ares_send() (qbuf points into tcpbuf) */
- const unsigned char *qbuf;
- int qlen;
- ares_callback callback;
- void *arg;
+ const unsigned char *qbuf;
+ size_t qlen;
+ ares_callback callback;
+ void *arg;
/* Query status */
- int try_count; /* Number of times we tried this query already. */
- int server; /* Server this query has last been sent to. */
- struct query_server_info *server_info; /* per-server state */
- int using_tcp;
- int error_status;
- int timeouts; /* number of timeouts we saw for this request */
+ size_t try_count; /* Number of times we tried this query already. */
+ size_t server; /* Server this query has last been sent to. */
+ struct query_server_info *server_info; /* per-server state */
+ ares_bool_t using_tcp;
+ ares_status_t error_status;
+ size_t timeouts; /* number of timeouts we saw for this request */
+ ares_bool_t no_retries; /* do not perform any additional retries, this is set
+ * when a query is to be canceled */
};
/* Per-server state for a query */
struct query_server_info {
- int skip_server; /* should we skip server, due to errors, etc? */
- int tcp_connection_generation; /* into which TCP connection did we send? */
+ ares_bool_t skip_server; /* should we skip server, due to errors, etc? */
+ size_t tcp_connection_generation; /* into which TCP connection did we send? */
};
/* An IP address pattern; matches an IP address X if X & mask == addr */
@@ -247,191 +252,217 @@ struct query_server_info {
#define PATTERN_CIDR 0x2
struct apattern {
- union
- {
+ union {
struct in_addr addr4;
struct ares_in6_addr addr6;
} addr;
- union
- {
+
+ union {
struct in_addr addr4;
struct ares_in6_addr addr6;
unsigned short bits;
} mask;
- int family;
+
+ int family;
unsigned short type;
};
-typedef struct rc4_key
-{
- unsigned char state[256];
- unsigned char x;
- unsigned char y;
-} rc4_key;
-
struct ares_channeldata {
/* Configuration data */
- int flags;
- int timeout; /* in milliseconds */
- int tries;
- int ndots;
- int rotate; /* if true, all servers specified are used */
- int udp_port; /* stored in network order */
- int tcp_port; /* stored in network order */
- int socket_send_buffer_size;
- int socket_receive_buffer_size;
- char **domains;
- int ndomains;
- struct apattern *sortlist;
- int nsort;
- char *lookups;
- int ednspsz;
+ unsigned int flags;
+ size_t timeout; /* in milliseconds */
+ size_t tries;
+ size_t ndots;
+ ares_bool_t rotate;
+ unsigned short udp_port; /* stored in network order */
+ unsigned short tcp_port; /* stored in network order */
+ int socket_send_buffer_size; /* setsockopt takes int */
+ int socket_receive_buffer_size; /* setsockopt takes int */
+ char **domains;
+ size_t ndomains;
+ struct apattern *sortlist;
+ size_t nsort;
+ char *lookups;
+ size_t ednspsz;
+ unsigned int optmask;
/* For binding to local devices and/or IP addresses. Leave
* them null/zero for no binding.
*/
- char local_dev_name[32];
- unsigned int local_ip4;
- unsigned char local_ip6[16];
-
- int optmask; /* the option bitfield passed in at init time */
+ char local_dev_name[32];
+ unsigned int local_ip4;
+ unsigned char local_ip6[16];
/* Server addresses and communications state */
struct server_state *servers;
- int nservers;
+ size_t nservers;
- /* ID to use for next query */
- unsigned short next_id;
- /* key to use when generating new ids */
- rc4_key id_key;
+ /* random state to use when generating new ids */
+ ares_rand_state *rand_state;
/* Generation number to use for the next TCP socket open/close */
- int tcp_connection_generation;
-
- /* The time at which we last called process_timeouts(). Uses integer seconds
- just to draw the line somewhere. */
- time_t last_timeout_processed;
+ size_t tcp_connection_generation;
/* Last server we sent a query to. */
- int last_server;
+ size_t last_server;
- /* Circular, doubly-linked list of queries, bucketed various ways.... */
- /* All active queries in a single list: */
- struct list_node all_queries;
+ /* All active queries in a single list */
+ ares__llist_t *all_queries;
/* Queries bucketed by qid, for quickly dispatching DNS responses: */
-#define ARES_QID_TABLE_SIZE 2048
- struct list_node queries_by_qid[ARES_QID_TABLE_SIZE];
+ ares__htable_stvp_t *queries_by_qid;
+
/* Queries bucketed by timeout, for quickly handling timeouts: */
-#define ARES_TIMEOUT_TABLE_SIZE 1024
- struct list_node queries_by_timeout[ARES_TIMEOUT_TABLE_SIZE];
+ ares__slist_t *queries_by_timeout;
+
+ /* Map linked list node member for connection to file descriptor. We use
+ * the node instead of the connection object itself so we can quickly look
+ * up a connection and remove it if necessary (as otherwise we'd have to
+ * scan all connections) */
+ ares__htable_asvp_t *connnode_by_socket;
- ares_sock_state_cb sock_state_cb;
- void *sock_state_cb_data;
+ ares_sock_state_cb sock_state_cb;
+ void *sock_state_cb_data;
- ares_sock_create_callback sock_create_cb;
- void *sock_create_cb_data;
+ ares_sock_create_callback sock_create_cb;
+ void *sock_create_cb_data;
- ares_sock_config_callback sock_config_cb;
- void *sock_config_cb_data;
+ ares_sock_config_callback sock_config_cb;
+ void *sock_config_cb_data;
- const struct ares_socket_functions * sock_funcs;
- void *sock_func_cb_data;
+ const struct ares_socket_functions *sock_funcs;
+ void *sock_func_cb_data;
/* Path for resolv.conf file, configurable via ares_options */
- char *resolvconf_path;
+ char *resolvconf_path;
+
+ /* Path for hosts file, configurable via ares_options */
+ char *hosts_path;
+
+ /* Maximum UDP queries per connection allowed */
+ size_t udp_max_queries;
};
/* Does the domain end in ".onion" or ".onion."? Case-insensitive. */
-int ares__is_onion_domain(const char *name);
+ares_bool_t ares__is_onion_domain(const char *name);
/* Memory management functions */
-extern void *(*ares_malloc)(size_t size);
-extern void *(*ares_realloc)(void *ptr, size_t size);
-extern void (*ares_free)(void *ptr);
+extern void *(*ares_malloc)(size_t size);
+extern void *(*ares_realloc)(void *ptr, size_t size);
+extern void (*ares_free)(void *ptr);
+void *ares_malloc_zero(size_t size);
+void *ares_realloc_zero(void *ptr, size_t orig_size, size_t new_size);
/* return true if now is exactly check time or later */
-int ares__timedout(struct timeval *now,
- struct timeval *check);
-
-void ares__send_query(ares_channel channel, struct query *query,
- struct timeval *now);
-void ares__close_sockets(ares_channel channel, struct server_state *server);
-int ares__get_hostent(FILE *fp, int family, struct hostent **host);
-int ares__read_line(FILE *fp, char **buf, size_t *bufsize);
-void ares__free_query(struct query *query);
-unsigned short ares__generate_new_id(rc4_key* key);
+ares_bool_t ares__timedout(struct timeval *now, struct timeval *check);
+
+/* Returns one of the normal ares status codes like ARES_SUCCESS */
+ares_status_t ares__send_query(ares_channel channel, struct query *query,
+ struct timeval *now);
+
+/* Identical to ares_query, but returns a normal ares return code like
+ * ARES_SUCCESS, and can be passed the qid by reference which will be
+ * filled in on ARES_SUCCESS */
+ares_status_t ares_query_qid(ares_channel channel, const char *name,
+ int dnsclass, int type, ares_callback callback,
+ void *arg, unsigned short *qid);
+/* Identical to ares_send() except returns normal ares return codes like
+ * ARES_SUCCESS */
+ares_status_t ares_send_ex(ares_channel channel, const unsigned char *qbuf,
+ size_t qlen, ares_callback callback, void *arg);
+void ares__close_connection(struct server_connection *conn);
+void ares__close_sockets(struct server_state *server);
+void ares__check_cleanup_conn(ares_channel channel, ares_socket_t fd);
+ares_status_t ares__get_hostent(FILE *fp, int family, struct hostent **host);
+ares_status_t ares__read_line(FILE *fp, char **buf, size_t *bufsize);
+void ares__free_query(struct query *query);
+
+ares_rand_state *ares__init_rand_state(void);
+void ares__destroy_rand_state(ares_rand_state *state);
+void ares__rand_bytes(ares_rand_state *state, unsigned char *buf, size_t len);
+
+unsigned short ares__generate_new_id(ares_rand_state *state);
struct timeval ares__tvnow(void);
-int ares__expand_name_validated(const unsigned char *encoded,
- const unsigned char *abuf,
- int alen, char **s, long *enclen,
- int is_hostname);
-int ares__expand_name_for_response(const unsigned char *encoded,
- const unsigned char *abuf, int alen,
- char **s, long *enclen, int is_hostname);
-void ares__init_servers_state(ares_channel channel);
-void ares__destroy_servers_state(ares_channel channel);
-int ares__parse_qtype_reply(const unsigned char* abuf, int alen, int* qtype);
-int ares__single_domain(ares_channel channel, const char *name, char **s);
-int ares__cat_domain(const char *name, const char *domain, char **s);
-int ares__sortaddrinfo(ares_channel channel, struct ares_addrinfo_node *ai_node);
-int ares__readaddrinfo(FILE *fp, const char *name, unsigned short port,
- const struct ares_addrinfo_hints *hints,
- struct ares_addrinfo *ai);
-
-struct ares_addrinfo *ares__malloc_addrinfo(void);
-
-struct ares_addrinfo_node *ares__malloc_addrinfo_node(void);
-void ares__freeaddrinfo_nodes(struct ares_addrinfo_node *ai_node);
-
-struct ares_addrinfo_node *ares__append_addrinfo_node(struct ares_addrinfo_node **ai_node);
+ares_status_t ares__expand_name_validated(const unsigned char *encoded,
+ const unsigned char *abuf,
+ size_t alen, char **s, size_t *enclen,
+ ares_bool_t is_hostname);
+ares_status_t ares__expand_name_for_response(const unsigned char *encoded,
+ const unsigned char *abuf,
+ size_t alen, char **s,
+ size_t *enclen,
+ ares_bool_t is_hostname);
+ares_status_t ares_expand_string_ex(const unsigned char *encoded,
+ const unsigned char *abuf, size_t alen,
+ unsigned char **s, size_t *enclen);
+ares_status_t ares__init_servers_state(ares_channel channel);
+void ares__destroy_servers_state(ares_channel channel);
+ares_status_t ares__single_domain(ares_channel channel, const char *name,
+ char **s);
+ares_status_t ares__cat_domain(const char *name, const char *domain, char **s);
+ares_status_t ares__sortaddrinfo(ares_channel channel,
+ struct ares_addrinfo_node *ai_node);
+ares_status_t ares__readaddrinfo(FILE *fp, const char *name,
+ unsigned short port,
+ const struct ares_addrinfo_hints *hints,
+ struct ares_addrinfo *ai);
+
+void ares__freeaddrinfo_nodes(struct ares_addrinfo_node *ai_node);
+
+struct ares_addrinfo_node *
+ ares__append_addrinfo_node(struct ares_addrinfo_node **ai_node);
void ares__addrinfo_cat_nodes(struct ares_addrinfo_node **head,
- struct ares_addrinfo_node *tail);
+ struct ares_addrinfo_node *tail);
-struct ares_addrinfo_cname *ares__malloc_addrinfo_cname(void);
void ares__freeaddrinfo_cnames(struct ares_addrinfo_cname *ai_cname);
-struct ares_addrinfo_cname *ares__append_addrinfo_cname(struct ares_addrinfo_cname **ai_cname);
-
-int ares_append_ai_node(int aftype, unsigned short port, int ttl,
- const void *adata,
- struct ares_addrinfo_node **nodes);
-
-void ares__addrinfo_cat_cnames(struct ares_addrinfo_cname **head,
- struct ares_addrinfo_cname *tail);
-
-int ares__parse_into_addrinfo(const unsigned char *abuf,
- int alen, int cname_only_is_enodata,
- unsigned short port,
- struct ares_addrinfo *ai);
-
-int ares__addrinfo2hostent(const struct ares_addrinfo *ai, int family,
- struct hostent **host);
-int ares__addrinfo2addrttl(const struct ares_addrinfo *ai, int family,
- int req_naddrttls, struct ares_addrttl *addrttls,
- struct ares_addr6ttl *addr6ttls, int *naddrttls);
-int ares__addrinfo_localhost(const char *name, unsigned short port,
- const struct ares_addrinfo_hints *hints,
- struct ares_addrinfo *ai);
-
-#if 0 /* Not used */
-long ares__tvdiff(struct timeval t1, struct timeval t2);
-#endif
-
-ares_socket_t ares__open_socket(ares_channel channel,
- int af, int type, int protocol);
-void ares__close_socket(ares_channel, ares_socket_t);
-int ares__connect_socket(ares_channel channel,
- ares_socket_t sockfd,
- const struct sockaddr *addr,
- ares_socklen_t addrlen);
-
-#define ARES_SWAP_BYTE(a,b) \
- { unsigned char swapByte = *(a); *(a) = *(b); *(b) = swapByte; }
-
-#define SOCK_STATE_CALLBACK(c, s, r, w) \
- do { \
- if ((c)->sock_state_cb) \
- (c)->sock_state_cb((c)->sock_state_cb_data, (s), (r), (w)); \
- } WHILE_FALSE
+struct ares_addrinfo_cname *
+ ares__append_addrinfo_cname(struct ares_addrinfo_cname **ai_cname);
+
+ares_status_t ares_append_ai_node(int aftype, unsigned short port,
+ unsigned int ttl, const void *adata,
+ struct ares_addrinfo_node **nodes);
+
+void ares__addrinfo_cat_cnames(struct ares_addrinfo_cname **head,
+ struct ares_addrinfo_cname *tail);
+
+ares_status_t ares__parse_into_addrinfo(const unsigned char *abuf, size_t alen,
+ ares_bool_t cname_only_is_enodata,
+ unsigned short port,
+ struct ares_addrinfo *ai);
+
+ares_status_t ares__addrinfo2hostent(const struct ares_addrinfo *ai, int family,
+ struct hostent **host);
+ares_status_t ares__addrinfo2addrttl(const struct ares_addrinfo *ai, int family,
+ size_t req_naddrttls,
+ struct ares_addrttl *addrttls,
+ struct ares_addr6ttl *addr6ttls,
+ size_t *naddrttls);
+ares_status_t ares__addrinfo_localhost(const char *name, unsigned short port,
+ const struct ares_addrinfo_hints *hints,
+ struct ares_addrinfo *ai);
+
+ares_socket_t ares__open_socket(ares_channel channel, int af, int type,
+ int protocol);
+void ares__close_socket(ares_channel, ares_socket_t);
+int ares__connect_socket(ares_channel channel, ares_socket_t sockfd,
+ const struct sockaddr *addr, ares_socklen_t addrlen);
+
+#define ARES_SWAP_BYTE(a, b) \
+ do { \
+ unsigned char swapByte = *(a); \
+ *(a) = *(b); \
+ *(b) = swapByte; \
+ } while (0)
+
+#define SOCK_STATE_CALLBACK(c, s, r, w) \
+ do { \
+ if ((c)->sock_state_cb) { \
+ (c)->sock_state_cb((c)->sock_state_cb_data, (s), (r), (w)); \
+ } \
+ } while (0)
+
+
+size_t ares__round_up_pow2(size_t n);
+size_t ares__log2(size_t n);
#endif /* __ARES_PRIVATE_H */
diff --git a/src/lib/ares_process.c b/src/lib/ares_process.c
index 87329e3..65ae865 100644
--- a/src/lib/ares_process.c
+++ b/src/lib/ares_process.c
@@ -1,18 +1,28 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- * Copyright (C) 2004-2017 by Daniel Stenberg
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) 2010 Daniel Stenberg
+ *
+ * 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:
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -51,62 +61,58 @@
#include "ares.h"
#include "ares_dns.h"
-#include "ares_nowarn.h"
#include "ares_private.h"
-
-static int try_again(int errnum);
-static void write_tcp_data(ares_channel channel, fd_set *write_fds,
- ares_socket_t write_fd, struct timeval *now);
-static void read_tcp_data(ares_channel channel, fd_set *read_fds,
- ares_socket_t read_fd, struct timeval *now);
-static void read_udp_packets(ares_channel channel, fd_set *read_fds,
- ares_socket_t read_fd, struct timeval *now);
-static void advance_tcp_send_queue(ares_channel channel, int whichserver,
- ares_ssize_t num_bytes);
-static void process_timeouts(ares_channel channel, struct timeval *now);
-static void process_broken_connections(ares_channel channel,
- struct timeval *now);
-static void process_answer(ares_channel channel, unsigned char *abuf,
- int alen, int whichserver, int tcp,
- struct timeval *now);
-static void handle_error(ares_channel channel, int whichserver,
- struct timeval *now);
+static ares_bool_t try_again(int errnum);
+static void write_tcp_data(ares_channel channel, fd_set *write_fds,
+ ares_socket_t write_fd, struct timeval *now);
+static void read_packets(ares_channel channel, fd_set *read_fds,
+ ares_socket_t read_fd, struct timeval *now);
+static void process_timeouts(ares_channel channel, struct timeval *now);
+static void process_answer(ares_channel channel, const unsigned char *abuf,
+ size_t alen, struct server_connection *conn,
+ ares_bool_t tcp, struct timeval *now);
+static void handle_error(struct server_connection *conn, struct timeval *now);
static void skip_server(ares_channel channel, struct query *query,
- int whichserver);
-static void next_server(ares_channel channel, struct query *query,
- struct timeval *now);
-static int open_tcp_socket(ares_channel channel, struct server_state *server);
-static int open_udp_socket(ares_channel channel, struct server_state *server);
-static int same_questions(const unsigned char *qbuf, int qlen,
- const unsigned char *abuf, int alen);
-static int same_address(struct sockaddr *sa, struct ares_addr *aa);
-static int has_opt_rr(const unsigned char *abuf, int alen);
-static void end_query(ares_channel channel, struct query *query, int status,
- unsigned char *abuf, int alen);
+ struct server_state *server);
+static ares_status_t next_server(ares_channel channel, struct query *query,
+ struct timeval *now);
+static ares_status_t open_socket(ares_channel channel,
+ struct server_state *server,
+ ares_bool_t is_tcp);
+static ares_bool_t same_questions(const unsigned char *qbuf, size_t qlen,
+ ares_dns_record_t *arec);
+static ares_bool_t same_address(struct sockaddr *sa, struct ares_addr *aa);
+static ares_bool_t has_opt_rr(ares_dns_record_t *arec);
+static void end_query(ares_channel channel, struct query *query,
+ ares_status_t status, const unsigned char *abuf,
+ size_t alen);
+static ares_ssize_t ares__socket_write(ares_channel channel, ares_socket_t s,
+ const void *data, size_t len);
/* return true if now is exactly check time or later */
-int ares__timedout(struct timeval *now,
- struct timeval *check)
+ares_bool_t ares__timedout(struct timeval *now, struct timeval *check)
{
- long secs = (now->tv_sec - check->tv_sec);
+ time_t secs = (now->tv_sec - check->tv_sec);
- if(secs > 0)
- return 1; /* yes, timed out */
- if(secs < 0)
- return 0; /* nope, not timed out */
+ if (secs > 0) {
+ return ARES_TRUE; /* yes, timed out */
+ }
+ if (secs < 0) {
+ return ARES_FALSE; /* nope, not timed out */
+ }
/* if the full seconds were identical, check the sub second parts */
- return (now->tv_usec - check->tv_usec >= 0);
+ return (now->tv_usec - check->tv_usec) >= 0 ? ARES_TRUE : ARES_FALSE;
}
/* add the specific number of milliseconds to the time in the first argument */
-static void timeadd(struct timeval *now, int millisecs)
+static void timeadd(struct timeval *now, size_t millisecs)
{
- now->tv_sec += millisecs/1000;
- now->tv_usec += (millisecs%1000)*1000;
+ now->tv_sec += (time_t)millisecs / 1000;
+ now->tv_usec += (time_t)((millisecs % 1000) * 1000);
- if(now->tv_usec >= 1000000) {
+ if (now->tv_usec >= 1000000) {
++(now->tv_sec);
now->tv_usec -= 1000000;
}
@@ -115,17 +121,15 @@ static void timeadd(struct timeval *now, int millisecs)
/*
* generic process function
*/
-static void processfds(ares_channel channel,
- fd_set *read_fds, ares_socket_t read_fd,
- fd_set *write_fds, ares_socket_t write_fd)
+static void processfds(ares_channel channel, fd_set *read_fds,
+ ares_socket_t read_fd, fd_set *write_fds,
+ ares_socket_t write_fd)
{
struct timeval now = ares__tvnow();
write_tcp_data(channel, write_fds, write_fd, &now);
- read_tcp_data(channel, read_fds, read_fd, &now);
- read_udp_packets(channel, read_fds, read_fd, &now);
+ read_packets(channel, read_fds, read_fd, &now);
process_timeouts(channel, &now);
- process_broken_connections(channel, &now);
}
/* Something interesting happened on the wire, or there was a timeout.
@@ -139,7 +143,7 @@ void ares_process(ares_channel channel, fd_set *read_fds, fd_set *write_fds)
/* Something interesting happened on the wire, or there was a timeout.
* See what's up and respond accordingly.
*/
-void ares_process_fd(ares_channel channel,
+void ares_process_fd(ares_channel channel,
ares_socket_t read_fd, /* use ARES_SOCKET_BAD or valid
file descriptors */
ares_socket_t write_fd)
@@ -147,7 +151,6 @@ void ares_process_fd(ares_channel channel,
processfds(channel, NULL, read_fd, NULL, write_fd);
}
-
/* Return 1 if the specified error number describes a readiness error, or 0
* otherwise. This is mostly for HP-UX, which could return EAGAIN or
* EWOULDBLOCK. See this man page
@@ -155,590 +158,552 @@ void ares_process_fd(ares_channel channel,
* http://devrsrc1.external.hp.com/STKS/cgi-bin/man2html?
* manpage=/usr/share/man/man2.Z/send.2
*/
-static int try_again(int errnum)
+static ares_bool_t try_again(int errnum)
{
#if !defined EWOULDBLOCK && !defined EAGAIN
-#error "Neither EWOULDBLOCK nor EAGAIN defined"
+# error "Neither EWOULDBLOCK nor EAGAIN defined"
#endif
- switch (errnum)
- {
+ switch (errnum) {
#ifdef EWOULDBLOCK
case EWOULDBLOCK:
- return 1;
+ return ARES_TRUE;
#endif
#if defined EAGAIN && EAGAIN != EWOULDBLOCK
case EAGAIN:
- return 1;
+ return ARES_TRUE;
#endif
- }
- return 0;
-}
-
-static ares_ssize_t socket_writev(ares_channel channel, ares_socket_t s, const struct iovec * vec, int len)
-{
- if (channel->sock_funcs)
- return channel->sock_funcs->asendv(s, vec, len, channel->sock_func_cb_data);
-
- return writev(s, vec, len);
-}
-
-static ares_ssize_t socket_write(ares_channel channel, ares_socket_t s, const void * data, size_t len)
-{
- if (channel->sock_funcs)
- {
- struct iovec vec;
- vec.iov_base = (void*)data;
- vec.iov_len = len;
- return channel->sock_funcs->asendv(s, &vec, 1, channel->sock_func_cb_data);
- }
- return swrite(s, data, len);
+ }
+ return ARES_FALSE;
}
/* If any TCP sockets select true for writing, write out queued data
* we have for them.
*/
-static void write_tcp_data(ares_channel channel,
- fd_set *write_fds,
- ares_socket_t write_fd,
- struct timeval *now)
+static void write_tcp_data(ares_channel channel, fd_set *write_fds,
+ ares_socket_t write_fd, struct timeval *now)
{
struct server_state *server;
- struct send_request *sendreq;
- struct iovec *vec;
- int i;
- ares_ssize_t scount;
- ares_ssize_t wcount;
- size_t n;
-
- if(!write_fds && (write_fd == ARES_SOCKET_BAD))
+ size_t i;
+
+ if (!write_fds && (write_fd == ARES_SOCKET_BAD)) {
/* no possible action */
return;
+ }
- for (i = 0; i < channel->nservers; i++)
- {
- /* Make sure server has data to send and is selected in write_fds or
- write_fd. */
- server = &channel->servers[i];
- if (!server->qhead || server->tcp_socket == ARES_SOCKET_BAD ||
- server->is_broken)
- continue;
+ for (i = 0; i < channel->nservers; i++) {
+ const unsigned char *data;
+ size_t data_len;
+ ares_ssize_t count;
- if(write_fds) {
- if(!FD_ISSET(server->tcp_socket, write_fds))
- continue;
+ /* Make sure server has data to send and is selected in write_fds or
+ write_fd. */
+ server = &channel->servers[i];
+ if (ares__buf_len(server->tcp_send) == 0 || server->tcp_conn == NULL) {
+ continue;
+ }
+
+ if (write_fds) {
+ if (!FD_ISSET(server->tcp_conn->fd, write_fds)) {
+ continue;
}
- else {
- if(server->tcp_socket != write_fd)
- continue;
+ } else {
+ if (server->tcp_conn->fd != write_fd) {
+ continue;
}
+ }
- if(write_fds)
- /* If there's an error and we close this socket, then open
- * another with the same fd to talk to another server, then we
- * don't want to think that it was the new socket that was
- * ready. This is not disastrous, but is likely to result in
- * extra system calls and confusion. */
- FD_CLR(server->tcp_socket, write_fds);
-
- /* Count the number of send queue items. */
- n = 0;
- for (sendreq = server->qhead; sendreq; sendreq = sendreq->next)
- n++;
-
- /* Allocate iovecs so we can send all our data at once. */
- vec = ares_malloc(n * sizeof(struct iovec));
- if (vec)
- {
- /* Fill in the iovecs and send. */
- n = 0;
- for (sendreq = server->qhead; sendreq; sendreq = sendreq->next)
- {
- vec[n].iov_base = (char *) sendreq->data;
- vec[n].iov_len = sendreq->len;
- n++;
- }
- wcount = socket_writev(channel, server->tcp_socket, vec, (int)n);
- ares_free(vec);
- if (wcount < 0)
- {
- if (!try_again(SOCKERRNO))
- handle_error(channel, i, now);
- continue;
- }
-
- /* Advance the send queue by as many bytes as we sent. */
- advance_tcp_send_queue(channel, i, wcount);
- }
- else
- {
- /* Can't allocate iovecs; just send the first request. */
- sendreq = server->qhead;
-
- scount = socket_write(channel, server->tcp_socket, sendreq->data, sendreq->len);
- if (scount < 0)
- {
- if (!try_again(SOCKERRNO))
- handle_error(channel, i, now);
- continue;
- }
-
- /* Advance the send queue by as many bytes as we sent. */
- advance_tcp_send_queue(channel, i, scount);
- }
+ if (write_fds) {
+ /* If there's an error and we close this socket, then open
+ * another with the same fd to talk to another server, then we
+ * don't want to think that it was the new socket that was
+ * ready. This is not disastrous, but is likely to result in
+ * extra system calls and confusion. */
+ FD_CLR(server->tcp_conn->fd, write_fds);
}
-}
-/* Consume the given number of bytes from the head of the TCP send queue. */
-static void advance_tcp_send_queue(ares_channel channel, int whichserver,
- ares_ssize_t num_bytes)
-{
- struct send_request *sendreq;
- struct server_state *server = &channel->servers[whichserver];
- while (num_bytes > 0) {
- sendreq = server->qhead;
- if ((size_t)num_bytes >= sendreq->len) {
- num_bytes -= sendreq->len;
- server->qhead = sendreq->next;
- if (sendreq->data_storage)
- ares_free(sendreq->data_storage);
- ares_free(sendreq);
- if (server->qhead == NULL) {
- SOCK_STATE_CALLBACK(channel, server->tcp_socket, 1, 0);
- server->qtail = NULL;
-
- /* qhead is NULL so we cannot continue this loop */
- break;
+ data = ares__buf_peek(server->tcp_send, &data_len);
+ count = ares__socket_write(channel, server->tcp_conn->fd, data, data_len);
+ if (count <= 0) {
+ if (!try_again(SOCKERRNO)) {
+ handle_error(server->tcp_conn, now);
}
+ continue;
}
- else {
- sendreq->data += num_bytes;
- sendreq->len -= num_bytes;
- num_bytes = 0;
+
+ /* Strip data written from the buffer */
+ ares__buf_consume(server->tcp_send, (size_t)count);
+
+ /* Notify state callback all data is written */
+ if (ares__buf_len(server->tcp_send) == 0) {
+ SOCK_STATE_CALLBACK(channel, server->tcp_conn->fd, 1, 0);
}
}
}
-static ares_ssize_t socket_recvfrom(ares_channel channel,
- ares_socket_t s,
- void * data,
- size_t data_len,
- int flags,
- struct sockaddr *from,
- ares_socklen_t *from_len)
+static ares_ssize_t socket_recvfrom(ares_channel channel, ares_socket_t s,
+ void *data, size_t data_len, int flags,
+ struct sockaddr *from,
+ ares_socklen_t *from_len)
{
- if (channel->sock_funcs)
- return channel->sock_funcs->arecvfrom(s, data, data_len,
- flags, from, from_len,
- channel->sock_func_cb_data);
+ if (channel->sock_funcs && channel->sock_funcs->arecvfrom) {
+ return channel->sock_funcs->arecvfrom(s, data, data_len, flags, from,
+ from_len, channel->sock_func_cb_data);
+ }
#ifdef HAVE_RECVFROM
- return recvfrom(s, data, data_len, flags, from, from_len);
+ return recvfrom(s, data, data_len, flags, from, from_len);
#else
- return sread(s, data, data_len);
+ return sread(s, data, data_len);
#endif
}
-static ares_ssize_t socket_recv(ares_channel channel,
- ares_socket_t s,
- void * data,
- size_t data_len)
+static ares_ssize_t socket_recv(ares_channel channel, ares_socket_t s,
+ void *data, size_t data_len)
{
- if (channel->sock_funcs)
- return channel->sock_funcs->arecvfrom(s, data, data_len, 0, 0, 0,
- channel->sock_func_cb_data);
+ if (channel->sock_funcs && channel->sock_funcs->arecvfrom) {
+ return channel->sock_funcs->arecvfrom(s, data, data_len, 0, 0, 0,
+ channel->sock_func_cb_data);
+ }
- return sread(s, data, data_len);
+ return sread(s, data, data_len);
}
/* If any TCP socket selects true for reading, read some data,
* allocate a buffer if we finish reading the length word, and process
* a packet if we finish reading one.
*/
-static void read_tcp_data(ares_channel channel, fd_set *read_fds,
- ares_socket_t read_fd, struct timeval *now)
+static void read_tcp_data(ares_channel channel, struct server_connection *conn,
+ struct timeval *now)
{
- struct server_state *server;
- int i;
- ares_ssize_t count;
+ ares_ssize_t count;
+ struct server_state *server = conn->server;
- if(!read_fds && (read_fd == ARES_SOCKET_BAD))
- /* no possible action */
+ /* Fetch buffer to store data we are reading */
+ size_t ptr_len = 512;
+ unsigned char *ptr = ares__buf_append_start(server->tcp_parser, &ptr_len);
+
+ if (ptr == NULL) {
+ handle_error(conn, now);
+ return; /* bail out on malloc failure. TODO: make this
+ function return error codes */
+ }
+
+ /* Read from socket */
+ count = socket_recv(channel, conn->fd, ptr, ptr_len);
+ if (count <= 0) {
+ ares__buf_append_finish(server->tcp_parser, 0);
+ if (!(count == -1 && try_again(SOCKERRNO))) {
+ handle_error(conn, now);
+ }
return;
+ }
- for (i = 0; i < channel->nservers; i++)
- {
- /* Make sure the server has a socket and is selected in read_fds. */
- server = &channel->servers[i];
- if (server->tcp_socket == ARES_SOCKET_BAD || server->is_broken)
- continue;
+ /* Record amount of data read */
+ ares__buf_append_finish(server->tcp_parser, (size_t)count);
- if(read_fds) {
- if(!FD_ISSET(server->tcp_socket, read_fds))
- continue;
- }
- else {
- if(server->tcp_socket != read_fd)
- continue;
+ /* Process all queued answers */
+ while (1) {
+ unsigned short dns_len = 0;
+ const unsigned char *data = NULL;
+ size_t data_len = 0;
+
+ /* Tag so we can roll back */
+ ares__buf_tag(server->tcp_parser);
+
+ /* Read length indicator */
+ if (ares__buf_fetch_be16(server->tcp_parser, &dns_len) != ARES_SUCCESS) {
+ ares__buf_tag_rollback(server->tcp_parser);
+ return;
+ }
+
+ /* Not enough data for a full response yet */
+ if (ares__buf_consume(server->tcp_parser, dns_len) != ARES_SUCCESS) {
+ ares__buf_tag_rollback(server->tcp_parser);
+ return;
+ }
+
+ /* Can't fail except for misuse */
+ data = ares__buf_tag_fetch(server->tcp_parser, &data_len);
+ if (data == NULL) {
+ ares__buf_tag_clear(server->tcp_parser);
+ return;
+ }
+
+ /* Strip off 2 bytes length */
+ data += 2;
+ data_len -= 2;
+
+ /* We finished reading this answer; process it */
+ process_answer(channel, data, data_len, conn, ARES_TRUE, now);
+
+ /* Since we processed the answer, clear the tag so space can be reclaimed */
+ ares__buf_tag_clear(server->tcp_parser);
+ }
+}
+
+static int socket_list_append(ares_socket_t **socketlist, ares_socket_t fd,
+ size_t *alloc_cnt, size_t *num)
+{
+ if (*num >= *alloc_cnt) {
+ /* Grow by powers of 2 */
+ size_t new_alloc = (*alloc_cnt) << 1;
+ ares_socket_t *new_list =
+ ares_realloc(socketlist, new_alloc * sizeof(*new_list));
+ if (new_list == NULL) {
+ return 0;
+ }
+ *alloc_cnt = new_alloc;
+ *socketlist = new_list;
+ }
+
+ (*socketlist)[(*num)++] = fd;
+ return 1;
+}
+
+static ares_socket_t *channel_socket_list(ares_channel channel, size_t *num)
+{
+ size_t alloc_cnt = 1 << 4;
+ size_t i;
+ ares_socket_t *out = ares_malloc(alloc_cnt * sizeof(*out));
+
+ *num = 0;
+
+ if (out == NULL) {
+ return NULL;
+ }
+
+ for (i = 0; i < channel->nservers; i++) {
+ ares__llist_node_t *node;
+ for (node = ares__llist_node_first(channel->servers[i].connections);
+ node != NULL; node = ares__llist_node_next(node)) {
+ struct server_connection *conn = ares__llist_node_val(node);
+
+ if (conn->fd == ARES_SOCKET_BAD) {
+ continue;
}
- if(read_fds)
- /* If there's an error and we close this socket, then open another
- * with the same fd to talk to another server, then we don't want to
- * think that it was the new socket that was ready. This is not
- * disastrous, but is likely to result in extra system calls and
- * confusion. */
- FD_CLR(server->tcp_socket, read_fds);
-
- if (server->tcp_lenbuf_pos != 2)
- {
- /* We haven't yet read a length word, so read that (or
- * what's left to read of it).
- */
- count = socket_recv(channel, server->tcp_socket,
- server->tcp_lenbuf + server->tcp_lenbuf_pos,
- 2 - server->tcp_lenbuf_pos);
- if (count <= 0)
- {
- if (!(count == -1 && try_again(SOCKERRNO)))
- handle_error(channel, i, now);
- continue;
- }
-
- server->tcp_lenbuf_pos += (int)count;
- if (server->tcp_lenbuf_pos == 2)
- {
- /* We finished reading the length word. Decode the
- * length and allocate a buffer for the data.
- */
- server->tcp_length = server->tcp_lenbuf[0] << 8
- | server->tcp_lenbuf[1];
- server->tcp_buffer = ares_malloc(server->tcp_length);
- if (!server->tcp_buffer) {
- handle_error(channel, i, now);
- return; /* bail out on malloc failure. TODO: make this
- function return error codes */
- }
- server->tcp_buffer_pos = 0;
- }
- }
- else
- {
- /* Read data into the allocated buffer. */
- count = socket_recv(channel, server->tcp_socket,
- server->tcp_buffer + server->tcp_buffer_pos,
- server->tcp_length - server->tcp_buffer_pos);
- if (count <= 0)
- {
- if (!(count == -1 && try_again(SOCKERRNO)))
- handle_error(channel, i, now);
- continue;
- }
-
- server->tcp_buffer_pos += (int)count;
- if (server->tcp_buffer_pos == server->tcp_length)
- {
- /* We finished reading this answer; process it and
- * prepare to read another length word.
- */
- process_answer(channel, server->tcp_buffer, server->tcp_length,
- i, 1, now);
- ares_free(server->tcp_buffer);
- server->tcp_buffer = NULL;
- server->tcp_lenbuf_pos = 0;
- server->tcp_buffer_pos = 0;
- }
- }
+ if (!socket_list_append(&out, conn->fd, &alloc_cnt, num)) {
+ goto fail;
+ }
}
+ }
+
+ return out;
+
+fail:
+ ares_free(out);
+ *num = 0;
+ return NULL;
}
/* If any UDP sockets select true for reading, process them. */
-static void read_udp_packets(ares_channel channel, fd_set *read_fds,
- ares_socket_t read_fd, struct timeval *now)
+static void read_udp_packets_fd(ares_channel channel,
+ struct server_connection *conn,
+ struct timeval *now)
{
- struct server_state *server;
- int i;
- ares_ssize_t count;
+ ares_ssize_t read_len;
unsigned char buf[MAXENDSSZ + 1];
+ ares_socket_t fd = conn->fd; /* Cache for validation */
+
#ifdef HAVE_RECVFROM
ares_socklen_t fromlen;
+
union {
struct sockaddr sa;
struct sockaddr_in sa4;
struct sockaddr_in6 sa6;
} from;
+
+ memset(&from, 0, sizeof(from));
#endif
- if(!read_fds && (read_fd == ARES_SOCKET_BAD))
+ /* To reduce event loop overhead, read and process as many
+ * packets as we can. */
+ do {
+ if (conn->fd == ARES_SOCKET_BAD) {
+ read_len = -1;
+ } else {
+ if (conn->server->addr.family == AF_INET) {
+ fromlen = sizeof(from.sa4);
+ } else {
+ fromlen = sizeof(from.sa6);
+ }
+ read_len = socket_recvfrom(channel, conn->fd, (void *)buf, sizeof(buf), 0,
+ &from.sa, &fromlen);
+ }
+
+ if (read_len == 0) {
+ /* UDP is connectionless, so result code of 0 is a 0-length UDP
+ * packet, and not an indication the connection is closed like on
+ * tcp */
+ continue;
+ } else if (read_len < 0) {
+ if (try_again(SOCKERRNO)) {
+ continue;
+ }
+
+ handle_error(conn, now);
+ return;
+#ifdef HAVE_RECVFROM
+ } else if (!same_address(&from.sa, &conn->server->addr)) {
+ /* The address the response comes from does not match the address we
+ * sent the request to. Someone may be attempting to perform a cache
+ * poisoning attack. */
+ continue;
+#endif
+
+ } else {
+ process_answer(channel, buf, (size_t)read_len, conn, ARES_FALSE, now);
+ }
+ /* process_answer may invalidate "conn" and close the file descriptor, so
+ * check to see if file descriptor is still valid before looping! */
+ } while (read_len >= 0 && ares__htable_asvp_get_direct(
+ channel->connnode_by_socket, fd) != NULL);
+}
+
+static void read_packets(ares_channel channel, fd_set *read_fds,
+ ares_socket_t read_fd, struct timeval *now)
+{
+ size_t i;
+ ares_socket_t *socketlist = NULL;
+ size_t num_sockets = 0;
+ struct server_connection *conn = NULL;
+ ares__llist_node_t *node = NULL;
+
+ if (!read_fds && (read_fd == ARES_SOCKET_BAD)) {
/* no possible action */
return;
+ }
- for (i = 0; i < channel->nservers; i++)
- {
- /* Make sure the server has a socket and is selected in read_fds. */
- server = &channel->servers[i];
+ /* Single socket specified */
+ if (!read_fds) {
+ node = ares__htable_asvp_get_direct(channel->connnode_by_socket, read_fd);
+ if (node == NULL) {
+ return;
+ }
- if (server->udp_socket == ARES_SOCKET_BAD || server->is_broken)
- continue;
+ conn = ares__llist_node_val(node);
- if(read_fds) {
- if(!FD_ISSET(server->udp_socket, read_fds))
- continue;
- }
- else {
- if(server->udp_socket != read_fd)
- continue;
- }
+ if (conn->is_tcp) {
+ read_tcp_data(channel, conn, now);
+ } else {
+ read_udp_packets_fd(channel, conn, now);
+ }
- if(read_fds)
- /* If there's an error and we close this socket, then open
- * another with the same fd to talk to another server, then we
- * don't want to think that it was the new socket that was
- * ready. This is not disastrous, but is likely to result in
- * extra system calls and confusion. */
- FD_CLR(server->udp_socket, read_fds);
-
- /* To reduce event loop overhead, read and process as many
- * packets as we can. */
- do {
- if (server->udp_socket == ARES_SOCKET_BAD)
- count = 0;
-
- else {
- if (server->addr.family == AF_INET)
- fromlen = sizeof(from.sa4);
- else
- fromlen = sizeof(from.sa6);
- count = socket_recvfrom(channel, server->udp_socket, (void *)buf,
- sizeof(buf), 0, &from.sa, &fromlen);
- }
+ return;
+ }
- if (count == -1 && try_again(SOCKERRNO))
- continue;
- else if (count <= 0)
- handle_error(channel, i, now);
-#ifdef HAVE_RECVFROM
- else if (!same_address(&from.sa, &server->addr))
- /* The address the response comes from does not match the address we
- * sent the request to. Someone may be attempting to perform a cache
- * poisoning attack. */
- break;
-#endif
- else
- process_answer(channel, buf, (int)count, i, 0, now);
- } while (count > 0);
+ /* There is no good way to iterate across an fd_set, instead we must pull a
+ * list of all known fds, and iterate across that checking against the fd_set.
+ */
+ socketlist = channel_socket_list(channel, &num_sockets);
+
+ for (i = 0; i < num_sockets; i++) {
+ if (!FD_ISSET(socketlist[i], read_fds)) {
+ continue;
+ }
+
+ /* If there's an error and we close this socket, then open
+ * another with the same fd to talk to another server, then we
+ * don't want to think that it was the new socket that was
+ * ready. This is not disastrous, but is likely to result in
+ * extra system calls and confusion. */
+ FD_CLR(socketlist[i], read_fds);
+
+ node =
+ ares__htable_asvp_get_direct(channel->connnode_by_socket, socketlist[i]);
+ if (node == NULL) {
+ return;
+ }
+
+ conn = ares__llist_node_val(node);
+
+ if (conn->is_tcp) {
+ read_tcp_data(channel, conn, now);
+ } else {
+ read_udp_packets_fd(channel, conn, now);
}
+ }
+
+ ares_free(socketlist);
}
/* If any queries have timed out, note the timeout and move them on. */
static void process_timeouts(ares_channel channel, struct timeval *now)
{
- time_t t; /* the time of the timeouts we're processing */
- struct query *query;
- struct list_node* list_head;
- struct list_node* list_node;
-
- /* Process all the timeouts that have fired since the last time we processed
- * timeouts. If things are going well, then we'll have hundreds/thousands of
- * queries that fall into future buckets, and only a handful of requests
- * that fall into the "now" bucket, so this should be quite quick.
- */
- for (t = channel->last_timeout_processed; t <= now->tv_sec; t++)
- {
- list_head = &(channel->queries_by_timeout[t % ARES_TIMEOUT_TABLE_SIZE]);
- for (list_node = list_head->next; list_node != list_head; )
- {
- query = list_node->data;
- list_node = list_node->next; /* in case the query gets deleted */
- if (query->timeout.tv_sec && ares__timedout(now, &query->timeout))
- {
- query->error_status = ARES_ETIMEOUT;
- ++query->timeouts;
- next_server(channel, query, now);
- }
- }
- }
- channel->last_timeout_processed = now->tv_sec;
+ ares__slist_node_t *node =
+ ares__slist_node_first(channel->queries_by_timeout);
+ while (node != NULL) {
+ struct query *query = ares__slist_node_val(node);
+ /* Node might be removed, cache next */
+ ares__slist_node_t *next = ares__slist_node_next(node);
+ ares_socket_t fd;
+
+ /* Since this is sorted, as soon as we hit a query that isn't timed out,
+ * break */
+ if (!ares__timedout(now, &query->timeout)) {
+ break;
+ }
+
+ query->error_status = ARES_ETIMEOUT;
+ query->timeouts++;
+
+
+ fd = query->conn->fd;
+ next_server(channel, query, now);
+ /* A timeout is a special case where we need to possibly cleanup a
+ * a connection */
+ ares__check_cleanup_conn(channel, fd);
+
+ node = next;
+ }
}
/* Handle an answer from a server. */
-static void process_answer(ares_channel channel, unsigned char *abuf,
- int alen, int whichserver, int tcp,
- struct timeval *now)
+static void process_answer(ares_channel channel, const unsigned char *abuf,
+ size_t alen, struct server_connection *conn,
+ ares_bool_t tcp, struct timeval *now)
{
- int tc, rcode, packetsz;
- unsigned short id;
- struct query *query;
- struct list_node* list_head;
- struct list_node* list_node;
-
- /* If there's no room in the answer for a header, we can't do much
- * with it. */
- if (alen < HFIXEDSZ)
- return;
-
- /* Grab the query ID, truncate bit, and response code from the packet. */
- id = DNS_HEADER_QID(abuf);
- tc = DNS_HEADER_TC(abuf);
- rcode = DNS_HEADER_RCODE(abuf);
+ size_t packetsz;
+ struct query *query;
+ /* Cache these as once ares__send_query() gets called, it may end up
+ * invalidating the connection all-together */
+ struct server_state *server = conn->server;
+ ares_socket_t fd = conn->fd;
+ ares_dns_record_t *dnsrec = NULL;
+ ares_status_t status;
+
+ /* Parse the response */
+ status = ares_dns_parse(abuf, alen, 0, &dnsrec);
+ if (status != ARES_SUCCESS) {
+ goto cleanup;
+ }
/* Find the query corresponding to this packet. The queries are
- * hashed/bucketed by query id, so this lookup should be quick. Note that
- * both the query id and the questions must be the same; when the query id
- * wraps around we can have multiple outstanding queries with the same query
- * id, so we need to check both the id and question.
+ * hashed/bucketed by query id, so this lookup should be quick.
*/
- query = NULL;
- list_head = &(channel->queries_by_qid[id % ARES_QID_TABLE_SIZE]);
- for (list_node = list_head->next; list_node != list_head;
- list_node = list_node->next)
- {
- struct query *q = list_node->data;
- if ((q->qid == id) && same_questions(q->qbuf, q->qlen, abuf, alen))
- {
- query = q;
- break;
- }
- }
- if (!query)
- return;
+ query = ares__htable_stvp_get_direct(channel->queries_by_qid,
+ ares_dns_record_get_id(dnsrec));
+ if (!query) {
+ goto cleanup;
+ }
+
+ /* Both the query id and the questions must be the same. We will drop any
+ * replies that aren't for the same query as this is considered invalid. */
+ if (!same_questions(query->qbuf, query->qlen, dnsrec)) {
+ goto cleanup;
+ }
+
+ /* At this point we know we've received an answer for this query, so we should
+ * remove it from the connection's queue so we can possibly invalidate the
+ * connection. Delay cleaning up the connection though as we may enqueue
+ * something new. */
+ ares__llist_node_destroy(query->node_queries_to_conn);
+ query->node_queries_to_conn = NULL;
packetsz = PACKETSZ;
- /* If we use EDNS and server answers with FORMERR without an OPT RR, the protocol
- * extension is not understood by the responder. We must retry the query
- * without EDNS enabled. */
- if (channel->flags & ARES_FLAG_EDNS)
- {
- packetsz = channel->ednspsz;
- if (rcode == FORMERR && has_opt_rr(abuf, alen) != 1)
- {
- int qlen = (query->tcplen - 2) - EDNSFIXEDSZ;
- channel->flags ^= ARES_FLAG_EDNS;
- query->tcplen -= EDNSFIXEDSZ;
- query->qlen -= EDNSFIXEDSZ;
- query->tcpbuf[0] = (unsigned char)((qlen >> 8) & 0xff);
- query->tcpbuf[1] = (unsigned char)(qlen & 0xff);
- DNS_HEADER_SET_ARCOUNT(query->tcpbuf + 2, 0);
- query->tcpbuf = ares_realloc(query->tcpbuf, query->tcplen);
- query->qbuf = query->tcpbuf + 2;
- ares__send_query(channel, query, now);
- return;
- }
+ /* If we use EDNS and server answers with FORMERR without an OPT RR, the
+ * protocol extension is not understood by the responder. We must retry the
+ * query without EDNS enabled. */
+ if (channel->flags & ARES_FLAG_EDNS) {
+ packetsz = (size_t)channel->ednspsz;
+ if (ares_dns_record_get_rcode(dnsrec) == ARES_RCODE_FORMAT_ERROR &&
+ !has_opt_rr(dnsrec)) {
+ size_t qlen = (query->tcplen - 2) - EDNSFIXEDSZ;
+ channel->flags ^= ARES_FLAG_EDNS;
+ query->tcplen -= EDNSFIXEDSZ;
+ query->qlen -= EDNSFIXEDSZ;
+ query->tcpbuf[0] = (unsigned char)((qlen >> 8) & 0xff);
+ query->tcpbuf[1] = (unsigned char)(qlen & 0xff);
+ DNS_HEADER_SET_ARCOUNT(query->tcpbuf + 2, 0);
+ query->tcpbuf = ares_realloc(query->tcpbuf, query->tcplen);
+ query->qbuf = query->tcpbuf + 2;
+ ares__send_query(channel, query, now);
+ ares__check_cleanup_conn(channel, fd);
+ goto cleanup;
+ }
}
/* If we got a truncated UDP packet and are not ignoring truncation,
* don't accept the packet, and switch the query to TCP if we hadn't
* done so already.
*/
- if ((tc || alen > packetsz) && !tcp && !(channel->flags & ARES_FLAG_IGNTC))
- {
- if (!query->using_tcp)
- {
- query->using_tcp = 1;
- ares__send_query(channel, query, now);
- }
- return;
+ if ((ares_dns_record_get_flags(dnsrec) & ARES_FLAG_TC || alen > packetsz) &&
+ !tcp && !(channel->flags & ARES_FLAG_IGNTC)) {
+ if (!query->using_tcp) {
+ query->using_tcp = ARES_TRUE;
+ ares__send_query(channel, query, now);
}
-
- /* Limit alen to PACKETSZ if we aren't using TCP (only relevant if we
- * are ignoring truncation.
- */
- if (alen > packetsz && !tcp)
- alen = packetsz;
+ ares__check_cleanup_conn(channel, fd);
+ goto cleanup;
+ }
/* If we aren't passing through all error packets, discard packets
* with SERVFAIL, NOTIMP, or REFUSED response codes.
*/
- if (!(channel->flags & ARES_FLAG_NOCHECKRESP))
- {
- if (rcode == SERVFAIL || rcode == NOTIMP || rcode == REFUSED)
- {
- skip_server(channel, query, whichserver);
- if (query->server == whichserver)
- next_server(channel, query, now);
- return;
- }
+ if (!(channel->flags & ARES_FLAG_NOCHECKRESP)) {
+ ares_dns_rcode_t rcode = ares_dns_record_get_rcode(dnsrec);
+ if (rcode == ARES_RCODE_SERVER_FAILURE ||
+ rcode == ARES_RCODE_NOT_IMPLEMENTED || rcode == ARES_RCODE_REFUSED) {
+ switch (rcode) {
+ case ARES_RCODE_SERVER_FAILURE:
+ query->error_status = ARES_ESERVFAIL;
+ break;
+ case ARES_RCODE_NOT_IMPLEMENTED:
+ query->error_status = ARES_ENOTIMP;
+ break;
+ case ARES_RCODE_REFUSED:
+ query->error_status = ARES_EREFUSED;
+ break;
+ default:
+ break;
+ }
+ skip_server(channel, query, server);
+ if (query->server == server->idx) { /* Is this ever not true? */
+ next_server(channel, query, now);
+ }
+ ares__check_cleanup_conn(channel, fd);
+ goto cleanup;
}
+ }
end_query(channel, query, ARES_SUCCESS, abuf, alen);
-}
-/* Close all the connections that are no longer usable. */
-static void process_broken_connections(ares_channel channel,
- struct timeval *now)
-{
- int i;
- for (i = 0; i < channel->nservers; i++)
- {
- struct server_state *server = &channel->servers[i];
- if (server->is_broken)
- {
- handle_error(channel, i, now);
- }
- }
-}
-
-/* Swap the contents of two lists */
-static void swap_lists(struct list_node* head_a,
- struct list_node* head_b)
-{
- int is_a_empty = ares__is_list_empty(head_a);
- int is_b_empty = ares__is_list_empty(head_b);
- struct list_node old_a = *head_a;
- struct list_node old_b = *head_b;
+ ares__check_cleanup_conn(channel, fd);
- if (is_a_empty) {
- ares__init_list_head(head_b);
- } else {
- *head_b = old_a;
- old_a.next->prev = head_b;
- old_a.prev->next = head_b;
- }
- if (is_b_empty) {
- ares__init_list_head(head_a);
- } else {
- *head_a = old_b;
- old_b.next->prev = head_a;
- old_b.prev->next = head_a;
- }
+cleanup:
+ ares_dns_record_destroy(dnsrec);
}
-static void handle_error(ares_channel channel, int whichserver,
- struct timeval *now)
+static void handle_error(struct server_connection *conn, struct timeval *now)
{
- struct server_state *server;
- struct query *query;
- struct list_node list_head;
- struct list_node* list_node;
-
- server = &channel->servers[whichserver];
-
- /* Reset communications with this server. */
- ares__close_sockets(channel, server);
+ ares_channel channel = conn->server->channel;
+ struct server_state *server = conn->server;
+ ares__llist_t *list_copy;
+ ares__llist_node_t *node;
+
+ /* We steal the list from the connection then close the connection, then
+ * iterate across the list to requeue any inflight queries with the broken
+ * connection. Destroying the connection prior to requeuing ensures requests
+ * won't go back to the broken connection */
+ list_copy = conn->queries_to_conn;
+ conn->queries_to_conn = NULL;
+ ares__close_connection(conn);
+
+ while ((node = ares__llist_node_first(list_copy)) != NULL) {
+ struct query *query = ares__llist_node_val(node);
+
+ assert(query->server == server->idx);
+ skip_server(channel, query, server);
+ /* next_server will remove the current node from the list */
+ next_server(channel, query, now);
+ }
- /* Tell all queries talking to this server to move on and not try this
- * server again. We steal the current list of queries that were in-flight to
- * this server, since when we call next_server this can cause the queries to
- * be re-sent to this server, which will re-insert these queries in that
- * same server->queries_to_server list.
- */
- ares__init_list_head(&list_head);
- swap_lists(&list_head, &(server->queries_to_server));
- for (list_node = list_head.next; list_node != &list_head; )
- {
- query = list_node->data;
- list_node = list_node->next; /* in case the query gets deleted */
- assert(query->server == whichserver);
- skip_server(channel, query, whichserver);
- next_server(channel, query, now);
- }
- /* Each query should have removed itself from our temporary list as
- * it re-sent itself or finished up...
- */
- assert(ares__is_list_empty(&list_head));
+ ares__llist_destroy(list_copy);
}
static void skip_server(ares_channel channel, struct query *query,
- int whichserver)
+ struct server_state *server)
{
/* The given server gave us problems with this query, so if we have the
* luxury of using other servers, then let's skip the potentially broken
@@ -748,167 +713,196 @@ static void skip_server(ares_channel channel, struct query *query,
* server timed out our TCP connection just as we were sending another
* request).
*/
- if (channel->nservers > 1)
- {
- query->server_info[whichserver].skip_server = 1;
- }
+ if (channel->nservers > 1) {
+ query->server_info[server->idx].skip_server = ARES_TRUE;
+ }
}
-static void next_server(ares_channel channel, struct query *query,
- struct timeval *now)
+static ares_status_t next_server(ares_channel channel, struct query *query,
+ struct timeval *now)
{
+ ares_status_t status;
/* We need to try each server channel->tries times. We have channel->nservers
* servers to try. In total, we need to do channel->nservers * channel->tries
* attempts. Use query->try to remember how many times we already attempted
- * this query. Use modular arithmetic to find the next server to try. */
- while (++(query->try_count) < (channel->nservers * channel->tries))
- {
- struct server_state *server;
-
- /* Move on to the next server. */
- query->server = (query->server + 1) % channel->nservers;
- server = &channel->servers[query->server];
-
- /* We don't want to use this server if (1) we decided this connection is
- * broken, and thus about to be closed, (2) we've decided to skip this
- * server because of earlier errors we encountered, or (3) we already
- * sent this query over this exact connection.
- */
- if (!server->is_broken &&
- !query->server_info[query->server].skip_server &&
- !(query->using_tcp &&
- (query->server_info[query->server].tcp_connection_generation ==
- server->tcp_connection_generation)))
- {
- ares__send_query(channel, query, now);
- return;
- }
-
- /* You might think that with TCP we only need one try. However, even
- * when using TCP, servers can time-out our connection just as we're
- * sending a request, or close our connection because they die, or never
- * send us a reply because they get wedged or tickle a bug that drops
- * our request.
- */
+ * this query. Use modular arithmetic to find the next server to try.
+ * A query can be requested be terminated at the next interval by setting
+ * query->no_retries */
+ while (++(query->try_count) < ((size_t)channel->nservers * channel->tries) &&
+ !query->no_retries) {
+ struct server_state *server;
+
+ /* Move on to the next server. */
+ query->server = (query->server + 1) % (size_t)channel->nservers;
+ server = &channel->servers[query->server];
+
+ /* We don't want to use this server if (1) we've decided to skip this
+ * server because of earlier errors we encountered, or (2) we already
+ * sent this query over this exact connection.
+ */
+ if (!query->server_info[query->server].skip_server &&
+ !(query->using_tcp &&
+ (query->server_info[query->server].tcp_connection_generation ==
+ server->tcp_connection_generation))) {
+ return ares__send_query(channel, query, now);
}
+ /* You might think that with TCP we only need one try. However, even
+ * when using TCP, servers can time-out our connection just as we're
+ * sending a request, or close our connection because they die, or never
+ * send us a reply because they get wedged or tickle a bug that drops
+ * our request.
+ */
+ }
+
/* If we are here, all attempts to perform query failed. */
+ status = query->error_status;
end_query(channel, query, query->error_status, NULL, 0);
+ return status;
}
-void ares__send_query(ares_channel channel, struct query *query,
- struct timeval *now)
+ares_status_t ares__send_query(ares_channel channel, struct query *query,
+ struct timeval *now)
{
- struct send_request *sendreq;
- struct server_state *server;
- int timeplus;
+ struct server_state *server;
+ struct server_connection *conn;
+ size_t timeplus;
+ ares_status_t status;
server = &channel->servers[query->server];
- if (query->using_tcp)
- {
- /* Make sure the TCP socket for this server is set up and queue
- * a send request.
- */
- if (server->tcp_socket == ARES_SOCKET_BAD)
- {
- if (open_tcp_socket(channel, server) == -1)
- {
- skip_server(channel, query, query->server);
- next_server(channel, query, now);
- return;
- }
- }
- sendreq = ares_malloc(sizeof(struct send_request));
- if (!sendreq)
- {
- end_query(channel, query, ARES_ENOMEM, NULL, 0);
- return;
- }
- memset(sendreq, 0, sizeof(struct send_request));
- /* To make the common case fast, we avoid copies by using the query's
- * tcpbuf for as long as the query is alive. In the rare case where the
- * query ends while it's queued for transmission, then we give the
- * sendreq its own copy of the request packet and put it in
- * sendreq->data_storage.
- */
- sendreq->data_storage = NULL;
- sendreq->data = query->tcpbuf;
- sendreq->len = query->tcplen;
- sendreq->owner_query = query;
- sendreq->next = NULL;
- if (server->qtail)
- server->qtail->next = sendreq;
- else
- {
- SOCK_STATE_CALLBACK(channel, server->tcp_socket, 1, 1);
- server->qhead = sendreq;
- }
- server->qtail = sendreq;
- query->server_info[query->server].tcp_connection_generation =
- server->tcp_connection_generation;
+ if (query->using_tcp) {
+ size_t prior_len = 0;
+ /* Make sure the TCP socket for this server is set up and queue
+ * a send request.
+ */
+ if (server->tcp_conn == NULL) {
+ status = open_socket(channel, server, 1);
+ switch (status) {
+ /* Good result, continue on */
+ case ARES_SUCCESS:
+ break;
+
+ /* These conditions are retryable as they are server-specific
+ * error codes */
+ case ARES_ECONNREFUSED:
+ case ARES_EBADFAMILY:
+ skip_server(channel, query, server);
+ return next_server(channel, query, now);
+
+ /* Anything else is not retryable, likely ENOMEM */
+ default:
+ end_query(channel, query, status, NULL, 0);
+ return status;
+ }
}
- else
- {
- if (server->udp_socket == ARES_SOCKET_BAD)
- {
- if (open_udp_socket(channel, server) == -1)
- {
- skip_server(channel, query, query->server);
- next_server(channel, query, now);
- return;
- }
- }
- if (socket_write(channel, server->udp_socket, query->qbuf, query->qlen) == -1)
- {
- /* FIXME: Handle EAGAIN here since it likely can happen. */
- skip_server(channel, query, query->server);
- next_server(channel, query, now);
- return;
- }
+
+ conn = server->tcp_conn;
+
+ prior_len = ares__buf_len(server->tcp_send);
+
+ status = ares__buf_append(server->tcp_send, query->tcpbuf, query->tcplen);
+ if (status != ARES_SUCCESS) {
+ end_query(channel, query, status, NULL, 0);
+ return ARES_ENOMEM;
}
- /* For each trip through the entire server list, double the channel's
- * assigned timeout, avoiding overflow. If channel->timeout is negative,
- * leave it as-is, even though that should be impossible here.
- */
- timeplus = channel->timeout;
- {
- /* How many times do we want to double it? Presume sane values here. */
- const int shift = query->try_count / channel->nservers;
-
- /* Is there enough room to shift timeplus left that many times?
- *
- * To find out, confirm that all of the bits we'll shift away are zero.
- * Stop considering a shift if we get to the point where we could shift
- * a 1 into the sign bit (i.e. when shift is within two of the bit
- * count).
- *
- * This has the side benefit of leaving negative numbers unchanged.
- */
- if(shift <= (int)(sizeof(int) * CHAR_BIT - 1)
- && (timeplus >> (sizeof(int) * CHAR_BIT - 1 - shift)) == 0)
- {
- timeplus <<= shift;
+ if (prior_len == 0) {
+ SOCK_STATE_CALLBACK(channel, conn->fd, 1, 1);
+ }
+
+ query->server_info[query->server].tcp_connection_generation =
+ server->tcp_connection_generation;
+ } else {
+ ares__llist_node_t *node = ares__llist_node_first(server->connections);
+
+ /* Don't use the found connection if we've gone over the maximum number
+ * of queries. Also, skip over the TCP connection if it is the first in
+ * the list */
+ if (node != NULL) {
+ conn = ares__llist_node_val(node);
+ if (conn->is_tcp) {
+ node = NULL;
+ } else if (channel->udp_max_queries > 0 &&
+ conn->total_queries >= (size_t)channel->udp_max_queries) {
+ node = NULL;
}
}
- query->timeout = *now;
- timeadd(&query->timeout, timeplus);
- /* Keep track of queries bucketed by timeout, so we can process
- * timeout events quickly.
- */
- ares__remove_from_list(&(query->queries_by_timeout));
- ares__insert_in_list(
- &(query->queries_by_timeout),
- &(channel->queries_by_timeout[query->timeout.tv_sec %
- ARES_TIMEOUT_TABLE_SIZE]));
-
- /* Keep track of queries bucketed by server, so we can process server
- * errors quickly.
+ if (node == NULL) {
+ status = open_socket(channel, server, 0);
+ switch (status) {
+ /* Good result, continue on */
+ case ARES_SUCCESS:
+ break;
+
+ /* These conditions are retryable as they are server-specific
+ * error codes */
+ case ARES_ECONNREFUSED:
+ case ARES_EBADFAMILY:
+ skip_server(channel, query, server);
+ return next_server(channel, query, now);
+
+ /* Anything else is not retryable, likely ENOMEM */
+ default:
+ end_query(channel, query, status, NULL, 0);
+ return status;
+ }
+ node = ares__llist_node_first(server->connections);
+ }
+
+ conn = ares__llist_node_val(node);
+ if (ares__socket_write(channel, conn->fd, query->qbuf, query->qlen) == -1) {
+ /* FIXME: Handle EAGAIN here since it likely can happen. */
+ skip_server(channel, query, server);
+ return next_server(channel, query, now);
+ }
+ }
+
+ /* For each trip through the entire server list, double the channel's
+ * assigned timeout, avoiding overflow. If channel->timeout is negative,
+ * leave it as-is, even though that should be impossible here.
+ */
+ timeplus = channel->timeout;
+ {
+ /* How many times do we want to double it? Presume sane values here. */
+ const size_t shift = query->try_count / (size_t)channel->nservers;
+
+ /* Is there enough room to shift timeplus left that many times?
+ *
+ * To find out, confirm that all of the bits we'll shift away are zero.
+ * Stop considering a shift if we get to the point where we could shift
+ * a 1 into the sign bit (i.e. when shift is within two of the bit
+ * count).
+ *
+ * This has the side benefit of leaving negative numbers unchanged.
*/
- ares__remove_from_list(&(query->queries_to_server));
- ares__insert_in_list(&(query->queries_to_server),
- &(server->queries_to_server));
+ if (shift <= (sizeof(int) * CHAR_BIT - 1) &&
+ (timeplus >> (sizeof(int) * CHAR_BIT - 1 - shift)) == 0) {
+ timeplus <<= shift;
+ }
+ }
+
+ /* Keep track of queries bucketed by timeout, so we can process
+ * timeout events quickly.
+ */
+ ares__slist_node_destroy(query->node_queries_by_timeout);
+ query->timeout = *now;
+ timeadd(&query->timeout, timeplus);
+ query->node_queries_by_timeout =
+ ares__slist_insert(channel->queries_by_timeout, query);
+ if (!query->node_queries_by_timeout) {
+ end_query(channel, query, ARES_ENOMEM, NULL, 0);
+ return ARES_ENOMEM;
+ }
+
+ /* Keep track of queries bucketed by connection, so we can process errors
+ * quickly. */
+ ares__llist_node_destroy(query->node_queries_to_conn);
+ query->node_queries_to_conn =
+ ares__llist_insert_last(conn->queries_to_conn, query);
+ query->conn = conn;
+ conn->total_queries++;
+ return ARES_SUCCESS;
}
/*
@@ -916,8 +910,8 @@ void ares__send_query(ares_channel channel, struct query *query,
* mode based on the 'nonblock' boolean argument. This function is highly
* portable.
*/
-static int setsocknonblock(ares_socket_t sockfd, /* operate on this */
- int nonblock /* TRUE or FALSE */)
+static int setsocknonblock(ares_socket_t sockfd, /* operate on this */
+ int nonblock /* TRUE or FALSE */)
{
#if defined(USE_BLOCKING_SOCKETS)
@@ -928,10 +922,11 @@ static int setsocknonblock(ares_socket_t sockfd, /* operate on this */
/* most recent unix versions */
int flags;
flags = fcntl(sockfd, F_GETFL, 0);
- if (FALSE != nonblock)
+ if (FALSE != nonblock) {
return fcntl(sockfd, F_SETFL, flags | O_NONBLOCK);
- else
- return fcntl(sockfd, F_SETFL, flags & (~O_NONBLOCK)); /* LCOV_EXCL_LINE */
+ } else {
+ return fcntl(sockfd, F_SETFL, flags & (~O_NONBLOCK)); /* LCOV_EXCL_LINE */
+ }
#elif defined(HAVE_IOCTL_FIONBIO)
@@ -941,12 +936,12 @@ static int setsocknonblock(ares_socket_t sockfd, /* operate on this */
#elif defined(HAVE_IOCTLSOCKET_FIONBIO)
-#ifdef WATT32
+# ifdef WATT32
char flags = nonblock ? 1 : 0;
-#else
+# else
/* Windows */
unsigned long flags = nonblock ? 1UL : 0UL;
-#endif
+# endif
return ioctlsocket(sockfd, FIONBIO, &flags);
#elif defined(HAVE_IOCTLSOCKET_CAMEL_FIONBIO)
@@ -966,6 +961,22 @@ static int setsocknonblock(ares_socket_t sockfd, /* operate on this */
#endif
}
+#if defined(IPV6_V6ONLY) && defined(WIN32)
+/* It makes support for IPv4-mapped IPv6 addresses.
+ * Linux kernel, NetBSD, FreeBSD and Darwin: default is off;
+ * Windows Vista and later: default is on;
+ * DragonFly BSD: acts like off, and dummy setting;
+ * OpenBSD and earlier Windows: unsupported.
+ * Linux: controlled by /proc/sys/net/ipv6/bindv6only.
+ */
+static void set_ipv6_v6only(ares_socket_t sockfd, int on)
+{
+ (void)setsockopt(sockfd, IPPROTO_IPV6, IPV6_V6ONLY, (void *)&on, sizeof(on));
+}
+#else
+# define set_ipv6_v6only(s, v)
+#endif
+
static int configure_socket(ares_socket_t s, int family, ares_channel channel)
{
union {
@@ -975,34 +986,38 @@ static int configure_socket(ares_socket_t s, int family, ares_channel channel)
} local;
/* do not set options for user-managed sockets */
- if (channel->sock_funcs)
+ if (channel->sock_funcs && channel->sock_funcs->asocket) {
return 0;
+ }
(void)setsocknonblock(s, TRUE);
#if defined(FD_CLOEXEC) && !defined(MSDOS)
/* Configure the socket fd as close-on-exec. */
- if (fcntl(s, F_SETFD, FD_CLOEXEC) == -1)
- return -1; /* LCOV_EXCL_LINE */
+ if (fcntl(s, F_SETFD, FD_CLOEXEC) == -1) {
+ return -1; /* LCOV_EXCL_LINE */
+ }
#endif
/* Set the socket's send and receive buffer sizes. */
if ((channel->socket_send_buffer_size > 0) &&
setsockopt(s, SOL_SOCKET, SO_SNDBUF,
(void *)&channel->socket_send_buffer_size,
- sizeof(channel->socket_send_buffer_size)) == -1)
+ sizeof(channel->socket_send_buffer_size)) == -1) {
return -1;
+ }
if ((channel->socket_receive_buffer_size > 0) &&
setsockopt(s, SOL_SOCKET, SO_RCVBUF,
(void *)&channel->socket_receive_buffer_size,
- sizeof(channel->socket_receive_buffer_size)) == -1)
+ sizeof(channel->socket_receive_buffer_size)) == -1) {
return -1;
+ }
#ifdef SO_BINDTODEVICE
if (channel->local_dev_name[0]) {
- if (setsockopt(s, SOL_SOCKET, SO_BINDTODEVICE,
- channel->local_dev_name, sizeof(channel->local_dev_name))) {
+ if (setsockopt(s, SOL_SOCKET, SO_BINDTODEVICE, channel->local_dev_name,
+ sizeof(channel->local_dev_name))) {
/* Only root can do this, and usually not fatal if it doesn't work, so */
/* just continue on. */
}
@@ -1012,537 +1027,360 @@ static int configure_socket(ares_socket_t s, int family, ares_channel channel)
if (family == AF_INET) {
if (channel->local_ip4) {
memset(&local.sa4, 0, sizeof(local.sa4));
- local.sa4.sin_family = AF_INET;
+ local.sa4.sin_family = AF_INET;
local.sa4.sin_addr.s_addr = htonl(channel->local_ip4);
- if (bind(s, &local.sa, sizeof(local.sa4)) < 0)
+ if (bind(s, &local.sa, sizeof(local.sa4)) < 0) {
return -1;
+ }
}
- }
- else if (family == AF_INET6) {
- if (memcmp(channel->local_ip6, &ares_in6addr_any,
+ } else if (family == AF_INET6) {
+ if (memcmp(channel->local_ip6, ares_in6addr_any._S6_un._S6_u8,
sizeof(channel->local_ip6)) != 0) {
memset(&local.sa6, 0, sizeof(local.sa6));
local.sa6.sin6_family = AF_INET6;
memcpy(&local.sa6.sin6_addr, channel->local_ip6,
sizeof(channel->local_ip6));
- if (bind(s, &local.sa, sizeof(local.sa6)) < 0)
+ if (bind(s, &local.sa, sizeof(local.sa6)) < 0) {
return -1;
+ }
}
+ set_ipv6_v6only(s, 0);
}
return 0;
}
-static int open_tcp_socket(ares_channel channel, struct server_state *server)
+static ares_status_t open_socket(ares_channel channel,
+ struct server_state *server,
+ ares_bool_t is_tcp)
{
- ares_socket_t s;
- int opt;
+ ares_socket_t s;
+ int opt;
ares_socklen_t salen;
+
union {
struct sockaddr_in sa4;
struct sockaddr_in6 sa6;
} saddr;
- struct sockaddr *sa;
+ struct sockaddr *sa;
+ unsigned short port;
+ struct server_connection *conn;
+ ares__llist_node_t *node;
+ int type = is_tcp ? SOCK_STREAM : SOCK_DGRAM;
+
+ if (is_tcp) {
+ port = server->addr.tcp_port ? server->addr.tcp_port : channel->tcp_port;
+ } else {
+ port = server->addr.udp_port ? server->addr.udp_port : channel->udp_port;
+ }
- switch (server->addr.family)
- {
- case AF_INET:
- sa = (void *)&saddr.sa4;
- salen = sizeof(saddr.sa4);
- memset(sa, 0, salen);
- saddr.sa4.sin_family = AF_INET;
- if (server->addr.tcp_port) {
- saddr.sa4.sin_port = aresx_sitous(server->addr.tcp_port);
- } else {
- saddr.sa4.sin_port = aresx_sitous(channel->tcp_port);
- }
- memcpy(&saddr.sa4.sin_addr, &server->addr.addrV4,
- sizeof(server->addr.addrV4));
- break;
- case AF_INET6:
- sa = (void *)&saddr.sa6;
- salen = sizeof(saddr.sa6);
- memset(sa, 0, salen);
- saddr.sa6.sin6_family = AF_INET6;
- if (server->addr.tcp_port) {
- saddr.sa6.sin6_port = aresx_sitous(server->addr.tcp_port);
- } else {
- saddr.sa6.sin6_port = aresx_sitous(channel->tcp_port);
- }
- memcpy(&saddr.sa6.sin6_addr, &server->addr.addrV6,
- sizeof(server->addr.addrV6));
- break;
- default:
- return -1; /* LCOV_EXCL_LINE */
- }
+ switch (server->addr.family) {
+ case AF_INET:
+ sa = (void *)&saddr.sa4;
+ salen = sizeof(saddr.sa4);
+ memset(sa, 0, salen);
+ saddr.sa4.sin_family = AF_INET;
+ saddr.sa4.sin_port = port;
+ memcpy(&saddr.sa4.sin_addr, &server->addr.addrV4,
+ sizeof(server->addr.addrV4));
+ break;
+ case AF_INET6:
+ sa = (void *)&saddr.sa6;
+ salen = sizeof(saddr.sa6);
+ memset(sa, 0, salen);
+ saddr.sa6.sin6_family = AF_INET6;
+ saddr.sa6.sin6_port = port;
+ memcpy(&saddr.sa6.sin6_addr, &server->addr.addrV6,
+ sizeof(server->addr.addrV6));
+ break;
+ default:
+ return ARES_EBADFAMILY; /* LCOV_EXCL_LINE */
+ }
/* Acquire a socket. */
- s = ares__open_socket(channel, server->addr.family, SOCK_STREAM, 0);
- if (s == ARES_SOCKET_BAD)
- return -1;
+ s = ares__open_socket(channel, server->addr.family, type, 0);
+ if (s == ARES_SOCKET_BAD) {
+ return ARES_ECONNREFUSED;
+ }
/* Configure it. */
- if (configure_socket(s, server->addr.family, channel) < 0)
- {
- ares__close_socket(channel, s);
- return -1;
- }
+ if (configure_socket(s, server->addr.family, channel) < 0) {
+ ares__close_socket(channel, s);
+ return ARES_ECONNREFUSED;
+ }
#ifdef TCP_NODELAY
- /*
- * Disable the Nagle algorithm (only relevant for TCP sockets, and thus not
- * in configure_socket). In general, in DNS lookups we're pretty much
- * interested in firing off a single request and then waiting for a reply,
- * so batching isn't very interesting.
- */
- opt = 1;
- if (channel->sock_funcs == 0
- &&
- setsockopt(s, IPPROTO_TCP, TCP_NODELAY,
- (void *)&opt, sizeof(opt)) == -1)
- {
- ares__close_socket(channel, s);
- return -1;
+ if (is_tcp) {
+ /*
+ * Disable the Nagle algorithm (only relevant for TCP sockets, and thus not
+ * in configure_socket). In general, in DNS lookups we're pretty much
+ * interested in firing off a single request and then waiting for a reply,
+ * so batching isn't very interesting.
+ */
+ opt = 1;
+ if (!channel->sock_funcs || !channel->sock_funcs->asocket) {
+ if (setsockopt(s, IPPROTO_TCP, TCP_NODELAY, (void *)&opt, sizeof(opt)) ==
+ -1) {
+ ares__close_socket(channel, s);
+ return ARES_ECONNREFUSED;
+ }
}
+ }
#endif
- if (channel->sock_config_cb)
- {
- int err = channel->sock_config_cb(s, SOCK_STREAM,
- channel->sock_config_cb_data);
- if (err < 0)
- {
- ares__close_socket(channel, s);
- return err;
- }
+ if (channel->sock_config_cb) {
+ int err = channel->sock_config_cb(s, type, channel->sock_config_cb_data);
+ if (err < 0) {
+ ares__close_socket(channel, s);
+ return ARES_ECONNREFUSED;
}
+ }
/* Connect to the server. */
- if (ares__connect_socket(channel, s, sa, salen) == -1)
- {
- int err = SOCKERRNO;
-
- if (err != EINPROGRESS && err != EWOULDBLOCK)
- {
- ares__close_socket(channel, s);
- return -1;
- }
- }
+ if (ares__connect_socket(channel, s, sa, salen) == -1) {
+ int err = SOCKERRNO;
- if (channel->sock_create_cb)
- {
- int err = channel->sock_create_cb(s, SOCK_STREAM,
- channel->sock_create_cb_data);
- if (err < 0)
- {
- ares__close_socket(channel, s);
- return err;
- }
+ if (err != EINPROGRESS && err != EWOULDBLOCK) {
+ ares__close_socket(channel, s);
+ return ARES_ECONNREFUSED;
}
+ }
- SOCK_STATE_CALLBACK(channel, s, 1, 0);
- server->tcp_buffer_pos = 0;
- server->tcp_socket = s;
- server->tcp_connection_generation = ++channel->tcp_connection_generation;
- return 0;
-}
-
-static int open_udp_socket(ares_channel channel, struct server_state *server)
-{
- ares_socket_t s;
- ares_socklen_t salen;
- union {
- struct sockaddr_in sa4;
- struct sockaddr_in6 sa6;
- } saddr;
- struct sockaddr *sa;
-
- switch (server->addr.family)
- {
- case AF_INET:
- sa = (void *)&saddr.sa4;
- salen = sizeof(saddr.sa4);
- memset(sa, 0, salen);
- saddr.sa4.sin_family = AF_INET;
- if (server->addr.udp_port) {
- saddr.sa4.sin_port = aresx_sitous(server->addr.udp_port);
- } else {
- saddr.sa4.sin_port = aresx_sitous(channel->udp_port);
- }
- memcpy(&saddr.sa4.sin_addr, &server->addr.addrV4,
- sizeof(server->addr.addrV4));
- break;
- case AF_INET6:
- sa = (void *)&saddr.sa6;
- salen = sizeof(saddr.sa6);
- memset(sa, 0, salen);
- saddr.sa6.sin6_family = AF_INET6;
- if (server->addr.udp_port) {
- saddr.sa6.sin6_port = aresx_sitous(server->addr.udp_port);
- } else {
- saddr.sa6.sin6_port = aresx_sitous(channel->udp_port);
- }
- memcpy(&saddr.sa6.sin6_addr, &server->addr.addrV6,
- sizeof(server->addr.addrV6));
- break;
- default:
- return -1; /* LCOV_EXCL_LINE */
- }
-
- /* Acquire a socket. */
- s = ares__open_socket(channel, server->addr.family, SOCK_DGRAM, 0);
- if (s == ARES_SOCKET_BAD)
- return -1;
-
- /* Set the socket non-blocking. */
- if (configure_socket(s, server->addr.family, channel) < 0)
- {
- ares__close_socket(channel, s);
- return -1;
+ if (channel->sock_create_cb) {
+ int err = channel->sock_create_cb(s, type, channel->sock_create_cb_data);
+ if (err < 0) {
+ ares__close_socket(channel, s);
+ return ARES_ECONNREFUSED;
}
+ }
- if (channel->sock_config_cb)
- {
- int err = channel->sock_config_cb(s, SOCK_DGRAM,
- channel->sock_config_cb_data);
- if (err < 0)
- {
- ares__close_socket(channel, s);
- return err;
- }
- }
+ conn = ares_malloc(sizeof(*conn));
+ if (conn == NULL) {
+ ares__close_socket(channel, s);
+ return ARES_ENOMEM;
+ }
+ memset(conn, 0, sizeof(*conn));
+ conn->fd = s;
+ conn->server = server;
+ conn->queries_to_conn = ares__llist_create(NULL);
+ conn->is_tcp = is_tcp;
+ if (conn->queries_to_conn == NULL) {
+ ares__close_socket(channel, s);
+ ares_free(conn);
+ return ARES_ENOMEM;
+ }
- /* Connect to the server. */
- if (ares__connect_socket(channel, s, sa, salen) == -1)
- {
- int err = SOCKERRNO;
-
- if (err != EINPROGRESS && err != EWOULDBLOCK)
- {
- ares__close_socket(channel, s);
- return -1;
- }
- }
+ /* TCP connections are thrown to the end as we don't spawn multiple TCP
+ * connections. UDP connections are put on front where the newest connection
+ * can be quickly pulled */
+ if (is_tcp) {
+ node = ares__llist_insert_last(server->connections, conn);
+ } else {
+ node = ares__llist_insert_first(server->connections, conn);
+ }
+ if (node == NULL) {
+ ares__close_socket(channel, s);
+ ares__llist_destroy(conn->queries_to_conn);
+ ares_free(conn);
+ return ARES_ENOMEM;
+ }
- if (channel->sock_create_cb)
- {
- int err = channel->sock_create_cb(s, SOCK_DGRAM,
- channel->sock_create_cb_data);
- if (err < 0)
- {
- ares__close_socket(channel, s);
- return err;
- }
- }
+ /* Register globally to quickly map event on file descriptor to connection
+ * node object */
+ if (!ares__htable_asvp_insert(channel->connnode_by_socket, s, node)) {
+ ares__close_socket(channel, s);
+ ares__llist_destroy(conn->queries_to_conn);
+ ares__llist_node_claim(node);
+ ares_free(conn);
+ return ARES_ENOMEM;
+ }
SOCK_STATE_CALLBACK(channel, s, 1, 0);
- server->udp_socket = s;
- return 0;
+ if (is_tcp) {
+ server->tcp_connection_generation = ++channel->tcp_connection_generation;
+ server->tcp_conn = conn;
+ }
+
+ return ARES_SUCCESS;
}
-static int same_questions(const unsigned char *qbuf, int qlen,
- const unsigned char *abuf, int alen)
+static ares_bool_t same_questions(const unsigned char *qbuf, size_t qlen,
+ ares_dns_record_t *arec)
{
- struct {
- const unsigned char *p;
- int qdcount;
- char *name;
- long namelen;
- int type;
- int dnsclass;
- } q, a;
- int i, j;
-
- if (qlen < HFIXEDSZ || alen < HFIXEDSZ)
- return 0;
+ ares_dns_record_t *qrec = NULL;
+ size_t i;
+ ares_bool_t rv = ARES_FALSE;
- /* Extract qdcount from the request and reply buffers and compare them. */
- q.qdcount = DNS_HEADER_QDCOUNT(qbuf);
- a.qdcount = DNS_HEADER_QDCOUNT(abuf);
- if (q.qdcount != a.qdcount)
- return 0;
+ if (ares_dns_parse(qbuf, qlen, 0, &qrec) != ARES_SUCCESS) {
+ goto done;
+ }
- /* For each question in qbuf, find it in abuf. */
- q.p = qbuf + HFIXEDSZ;
- for (i = 0; i < q.qdcount; i++)
- {
- /* Decode the question in the query. */
- if (ares_expand_name(q.p, qbuf, qlen, &q.name, &q.namelen)
- != ARES_SUCCESS)
- return 0;
- q.p += q.namelen;
- if (q.p + QFIXEDSZ > qbuf + qlen)
- {
- ares_free(q.name);
- return 0;
- }
- q.type = DNS_QUESTION_TYPE(q.p);
- q.dnsclass = DNS_QUESTION_CLASS(q.p);
- q.p += QFIXEDSZ;
-
- /* Search for this question in the answer. */
- a.p = abuf + HFIXEDSZ;
- for (j = 0; j < a.qdcount; j++)
- {
- /* Decode the question in the answer. */
- if (ares_expand_name(a.p, abuf, alen, &a.name, &a.namelen)
- != ARES_SUCCESS)
- {
- ares_free(q.name);
- return 0;
- }
- a.p += a.namelen;
- if (a.p + QFIXEDSZ > abuf + alen)
- {
- ares_free(q.name);
- ares_free(a.name);
- return 0;
- }
- a.type = DNS_QUESTION_TYPE(a.p);
- a.dnsclass = DNS_QUESTION_CLASS(a.p);
- a.p += QFIXEDSZ;
-
- /* Compare the decoded questions. */
- if (strcasecmp(q.name, a.name) == 0 && q.type == a.type
- && q.dnsclass == a.dnsclass)
- {
- ares_free(a.name);
- break;
- }
- ares_free(a.name);
- }
+ if (ares_dns_record_query_cnt(qrec) != ares_dns_record_query_cnt(arec)) {
+ goto done;
+ }
- ares_free(q.name);
- if (j == a.qdcount)
- return 0;
+ for (i = 0; i < ares_dns_record_query_cnt(qrec); i++) {
+ const char *qname = NULL;
+ const char *aname = NULL;
+ ares_dns_rec_type_t qtype;
+ ares_dns_rec_type_t atype;
+ ares_dns_class_t qclass;
+ ares_dns_class_t aclass;
+
+ if (ares_dns_record_query_get(qrec, i, &qname, &qtype, &qclass) !=
+ ARES_SUCCESS ||
+ qname == NULL) {
+ goto done;
}
- return 1;
+
+ if (ares_dns_record_query_get(arec, i, &aname, &atype, &aclass) !=
+ ARES_SUCCESS ||
+ aname == NULL) {
+ goto done;
+ }
+ if (strcasecmp(qname, aname) != 0 || qtype != atype || qclass != aclass) {
+ goto done;
+ }
+ }
+
+ rv = ARES_TRUE;
+
+done:
+ ares_dns_record_destroy(qrec);
+ return rv;
}
-static int same_address(struct sockaddr *sa, struct ares_addr *aa)
+static ares_bool_t same_address(struct sockaddr *sa, struct ares_addr *aa)
{
void *addr1;
void *addr2;
- if (sa->sa_family == aa->family)
- {
- switch (aa->family)
- {
- case AF_INET:
- addr1 = &aa->addrV4;
- addr2 = &(CARES_INADDR_CAST(struct sockaddr_in *, sa))->sin_addr;
- if (memcmp(addr1, addr2, sizeof(aa->addrV4)) == 0)
- return 1; /* match */
- break;
- case AF_INET6:
- addr1 = &aa->addrV6;
- addr2 = &(CARES_INADDR_CAST(struct sockaddr_in6 *, sa))->sin6_addr;
- if (memcmp(addr1, addr2, sizeof(aa->addrV6)) == 0)
- return 1; /* match */
- break;
- default:
- break; /* LCOV_EXCL_LINE */
+ if (sa->sa_family == aa->family) {
+ switch (aa->family) {
+ case AF_INET:
+ addr1 = &aa->addrV4;
+ addr2 = &(CARES_INADDR_CAST(struct sockaddr_in *, sa))->sin_addr;
+ if (memcmp(addr1, addr2, sizeof(aa->addrV4)) == 0) {
+ return ARES_TRUE; /* match */
}
+ break;
+ case AF_INET6:
+ addr1 = &aa->addrV6;
+ addr2 = &(CARES_INADDR_CAST(struct sockaddr_in6 *, sa))->sin6_addr;
+ if (memcmp(addr1, addr2, sizeof(aa->addrV6)) == 0) {
+ return ARES_TRUE; /* match */
+ }
+ break;
+ default:
+ break; /* LCOV_EXCL_LINE */
}
- return 0; /* different */
+ }
+ return ARES_FALSE; /* different */
}
/* search for an OPT RR in the response */
-static int has_opt_rr(const unsigned char *abuf, int alen)
+static ares_bool_t has_opt_rr(ares_dns_record_t *arec)
{
- unsigned int qdcount, ancount, nscount, arcount, i;
- const unsigned char *aptr;
- int status;
-
- if (alen < HFIXEDSZ)
- return -1;
+ size_t i;
+ for (i = 0; i < ares_dns_record_rr_cnt(arec, ARES_SECTION_ADDITIONAL); i++) {
+ ares_dns_rr_t *rr =
+ ares_dns_record_rr_get(arec, ARES_SECTION_ADDITIONAL, i);
- /* Parse the answer header. */
- qdcount = DNS_HEADER_QDCOUNT(abuf);
- ancount = DNS_HEADER_ANCOUNT(abuf);
- nscount = DNS_HEADER_NSCOUNT(abuf);
- arcount = DNS_HEADER_ARCOUNT(abuf);
-
- aptr = abuf + HFIXEDSZ;
-
- /* skip the questions */
- for (i = 0; i < qdcount; i++)
- {
- char* name;
- long len;
- status = ares_expand_name(aptr, abuf, alen, &name, &len);
- if (status != ARES_SUCCESS)
- return -1;
- ares_free_string(name);
- if (aptr + len + QFIXEDSZ > abuf + alen)
- return -1;
- aptr += len + QFIXEDSZ;
- }
-
- /* skip the ancount and nscount */
- for (i = 0; i < ancount + nscount; i++)
- {
- char* name;
- long len;
- int dlen;
- status = ares_expand_name(aptr, abuf, alen, &name, &len);
- if (status != ARES_SUCCESS)
- return -1;
- ares_free_string(name);
- if (aptr + len + RRFIXEDSZ > abuf + alen)
- return -1;
- aptr += len;
- dlen = DNS_RR_LEN(aptr);
- aptr += RRFIXEDSZ;
- if (aptr + dlen > abuf + alen)
- return -1;
- aptr += dlen;
- }
-
- /* search for rr type (41) - opt */
- for (i = 0; i < arcount; i++)
- {
- char* name;
- long len;
- int dlen;
- status = ares_expand_name(aptr, abuf, alen, &name, &len);
- if (status != ARES_SUCCESS)
- return -1;
- ares_free_string(name);
- if (aptr + len + RRFIXEDSZ > abuf + alen)
- return -1;
- aptr += len;
-
- if (DNS_RR_TYPE(aptr) == T_OPT)
- return 1;
-
- dlen = DNS_RR_LEN(aptr);
- aptr += RRFIXEDSZ;
- if (aptr + dlen > abuf + alen)
- return -1;
- aptr += dlen;
+ if (ares_dns_rr_get_type(rr) == ARES_REC_TYPE_OPT) {
+ return ARES_TRUE;
}
+ }
+ return ARES_FALSE;
+}
- return 0;
+static void ares_detach_query(struct query *query)
+{
+ /* Remove the query from all the lists in which it is linked */
+ ares__htable_stvp_remove(query->channel->queries_by_qid, query->qid);
+ ares__slist_node_destroy(query->node_queries_by_timeout);
+ ares__llist_node_destroy(query->node_queries_to_conn);
+ ares__llist_node_destroy(query->node_all_queries);
+ query->node_queries_by_timeout = NULL;
+ query->node_queries_to_conn = NULL;
+ query->node_all_queries = NULL;
}
-static void end_query (ares_channel channel, struct query *query, int status,
- unsigned char *abuf, int alen)
+static void end_query(ares_channel channel, struct query *query,
+ ares_status_t status, const unsigned char *abuf,
+ size_t alen)
{
- int i;
+ (void)channel;
- /* First we check to see if this query ended while one of our send
- * queues still has pointers to it.
- */
- for (i = 0; i < channel->nservers; i++)
- {
- struct server_state *server = &channel->servers[i];
- struct send_request *sendreq;
- for (sendreq = server->qhead; sendreq; sendreq = sendreq->next)
- if (sendreq->owner_query == query)
- {
- sendreq->owner_query = NULL;
- assert(sendreq->data_storage == NULL);
- if (status == ARES_SUCCESS)
- {
- /* We got a reply for this query, but this queued sendreq
- * points into this soon-to-be-gone query's tcpbuf. Probably
- * this means we timed out and queued the query for
- * retransmission, then received a response before actually
- * retransmitting. This is perfectly fine, so we want to keep
- * the connection running smoothly if we can. But in the worst
- * case we may have sent only some prefix of the query, with
- * some suffix of the query left to send. Also, the buffer may
- * be queued on multiple queues. To prevent dangling pointers
- * to the query's tcpbuf and handle these cases, we just give
- * such sendreqs their own copy of the query packet.
- */
- sendreq->data_storage = ares_malloc(sendreq->len);
- if (sendreq->data_storage != NULL)
- {
- memcpy(sendreq->data_storage, sendreq->data, sendreq->len);
- sendreq->data = sendreq->data_storage;
- }
- }
- if ((status != ARES_SUCCESS) || (sendreq->data_storage == NULL))
- {
- /* We encountered an error (probably a timeout, suggesting the
- * DNS server we're talking to is probably unreachable,
- * wedged, or severely overloaded) or we couldn't copy the
- * request, so mark the connection as broken. When we get to
- * process_broken_connections() we'll close the connection and
- * try to re-send requests to another server.
- */
- server->is_broken = 1;
- /* Just to be paranoid, zero out this sendreq... */
- sendreq->data = NULL;
- sendreq->len = 0;
- }
- }
- }
+ ares_detach_query(query);
- /* Invoke the callback */
- query->callback(query->arg, status, query->timeouts, abuf, alen);
+ /* Invoke the callback. */
+ query->callback(query->arg, (int)status, (int)query->timeouts,
+ /* due to prior design flaws, abuf isn't meant to be modified,
+ * but bad prototypes, ugh. Lets cast off constfor compat. */
+ (unsigned char *)((void *)((size_t)abuf)), (int)alen);
ares__free_query(query);
-
- /* Simple cleanup policy: if no queries are remaining, close all network
- * sockets unless STAYOPEN is set.
- */
- if (!(channel->flags & ARES_FLAG_STAYOPEN) &&
- ares__is_list_empty(&(channel->all_queries)))
- {
- for (i = 0; i < channel->nservers; i++)
- ares__close_sockets(channel, &channel->servers[i]);
- }
}
void ares__free_query(struct query *query)
{
- /* Remove the query from all the lists in which it is linked */
- ares__remove_from_list(&(query->queries_by_qid));
- ares__remove_from_list(&(query->queries_by_timeout));
- ares__remove_from_list(&(query->queries_to_server));
- ares__remove_from_list(&(query->all_queries));
+ ares_detach_query(query);
/* Zero out some important stuff, to help catch bugs */
query->callback = NULL;
- query->arg = NULL;
+ query->arg = NULL;
/* Deallocate the memory associated with the query */
ares_free(query->tcpbuf);
ares_free(query->server_info);
ares_free(query);
}
-ares_socket_t ares__open_socket(ares_channel channel,
- int af, int type, int protocol)
+ares_socket_t ares__open_socket(ares_channel channel, int af, int type,
+ int protocol)
{
- if (channel->sock_funcs)
- return channel->sock_funcs->asocket(af,
- type,
- protocol,
+ if (channel->sock_funcs && channel->sock_funcs->asocket) {
+ return channel->sock_funcs->asocket(af, type, protocol,
channel->sock_func_cb_data);
- else
- return socket(af, type, protocol);
+ }
+
+ return socket(af, type, protocol);
}
-int ares__connect_socket(ares_channel channel,
- ares_socket_t sockfd,
- const struct sockaddr *addr,
- ares_socklen_t addrlen)
+int ares__connect_socket(ares_channel channel, ares_socket_t sockfd,
+ const struct sockaddr *addr, ares_socklen_t addrlen)
{
- if (channel->sock_funcs)
- return channel->sock_funcs->aconnect(sockfd,
- addr,
- addrlen,
+ if (channel->sock_funcs && channel->sock_funcs->aconnect) {
+ return channel->sock_funcs->aconnect(sockfd, addr, addrlen,
channel->sock_func_cb_data);
- else
- return connect(sockfd, addr, addrlen);
+ }
+
+ return connect(sockfd, addr, addrlen);
}
void ares__close_socket(ares_channel channel, ares_socket_t s)
{
- if (channel->sock_funcs)
+ if (channel->sock_funcs && channel->sock_funcs->aclose) {
channel->sock_funcs->aclose(s, channel->sock_func_cb_data);
- else
+ } else {
sclose(s);
+ }
+}
+
+#ifndef HAVE_WRITEV
+/* Structure for scatter/gather I/O. */
+struct iovec {
+ void *iov_base; /* Pointer to data. */
+ size_t iov_len; /* Length of data. */
+};
+#endif
+
+static ares_ssize_t ares__socket_write(ares_channel channel, ares_socket_t s,
+ const void *data, size_t len)
+{
+ if (channel->sock_funcs && channel->sock_funcs->asendv) {
+ struct iovec vec;
+ vec.iov_base = (void *)data;
+ vec.iov_len = len;
+ return channel->sock_funcs->asendv(s, &vec, 1, channel->sock_func_cb_data);
+ }
+ return swrite(s, data, len);
}
diff --git a/src/lib/ares_query.c b/src/lib/ares_query.c
index 508274d..4996732 100644
--- a/src/lib/ares_query.c
+++ b/src/lib/ares_query.c
@@ -1,17 +1,28 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -28,56 +39,11 @@
struct qquery {
ares_callback callback;
- void *arg;
+ void *arg;
};
-static void qcallback(void *arg, int status, int timeouts, unsigned char *abuf, int alen);
-
-static void rc4(rc4_key* key, unsigned char *buffer_ptr, int buffer_len)
-{
- unsigned char x;
- unsigned char y;
- unsigned char* state;
- unsigned char xorIndex;
- int counter;
-
- x = key->x;
- y = key->y;
-
- state = &key->state[0];
- for(counter = 0; counter < buffer_len; counter ++)
- {
- x = (unsigned char)((x + 1) % 256);
- y = (unsigned char)((state[x] + y) % 256);
- ARES_SWAP_BYTE(&state[x], &state[y]);
-
- xorIndex = (unsigned char)((state[x] + state[y]) % 256);
-
- buffer_ptr[counter] = (unsigned char)(buffer_ptr[counter]^state[xorIndex]);
- }
- key->x = x;
- key->y = y;
-}
-
-static struct query* find_query_by_id(ares_channel channel, unsigned short id)
-{
- unsigned short qid;
- struct list_node* list_head;
- struct list_node* list_node;
- DNS_HEADER_SET_QID(((unsigned char*)&qid), id);
-
- /* Find the query corresponding to this packet. */
- list_head = &(channel->queries_by_qid[qid % ARES_QID_TABLE_SIZE]);
- for (list_node = list_head->next; list_node != list_head;
- list_node = list_node->next)
- {
- struct query *q = list_node->data;
- if (q->qid == qid)
- return q;
- }
- return NULL;
-}
-
+static void qcallback(void *arg, int status, int timeouts, unsigned char *abuf,
+ int alen);
/* a unique query id is generated using an rc4 key. Since the id may already
be used by a running query (as infrequent as it may be), a lookup is
@@ -89,92 +55,99 @@ static unsigned short generate_unique_id(ares_channel channel)
unsigned short id;
do {
- id = ares__generate_new_id(&channel->id_key);
- } while (find_query_by_id(channel, id));
+ id = ares__generate_new_id(channel->rand_state);
+ } while (ares__htable_stvp_get(channel->queries_by_qid, id, NULL));
return (unsigned short)id;
}
-unsigned short ares__generate_new_id(rc4_key* key)
-{
- unsigned short r=0;
- rc4(key, (unsigned char *)&r, sizeof(r));
- return r;
-}
-
-void ares_query(ares_channel channel, const char *name, int dnsclass,
- int type, ares_callback callback, void *arg)
+ares_status_t ares_query_qid(ares_channel channel, const char *name,
+ int dnsclass, int type, ares_callback callback,
+ void *arg, unsigned short *qid)
{
struct qquery *qquery;
unsigned char *qbuf;
- int qlen, rd, status;
+ int qlen;
+ int rd;
+ ares_status_t status;
+ unsigned short id = generate_unique_id(channel);
/* Compose the query. */
- rd = !(channel->flags & ARES_FLAG_NORECURSE);
- status = ares_create_query(name, dnsclass, type, channel->next_id, rd, &qbuf,
- &qlen, (channel->flags & ARES_FLAG_EDNS) ? channel->ednspsz : 0);
- if (status != ARES_SUCCESS)
- {
- if (qbuf != NULL) ares_free(qbuf);
- callback(arg, status, 0, NULL, 0);
- return;
+ rd = !(channel->flags & ARES_FLAG_NORECURSE);
+ status = (ares_status_t)ares_create_query(
+ name, dnsclass, type, id, rd, &qbuf, &qlen,
+ (channel->flags & ARES_FLAG_EDNS) ? (int)channel->ednspsz : 0);
+ if (status != ARES_SUCCESS) {
+ if (qbuf != NULL) {
+ ares_free(qbuf);
}
-
- channel->next_id = generate_unique_id(channel);
+ callback(arg, (int)status, 0, NULL, 0);
+ return status;
+ }
/* Allocate and fill in the query structure. */
qquery = ares_malloc(sizeof(struct qquery));
- if (!qquery)
- {
- ares_free_string(qbuf);
- callback(arg, ARES_ENOMEM, 0, NULL, 0);
- return;
- }
+ if (!qquery) {
+ ares_free_string(qbuf);
+ callback(arg, ARES_ENOMEM, 0, NULL, 0);
+ return ARES_ENOMEM;
+ }
qquery->callback = callback;
- qquery->arg = arg;
+ qquery->arg = arg;
/* Send it off. qcallback will be called when we get an answer. */
- ares_send(channel, qbuf, qlen, qcallback, qquery);
+ status = ares_send_ex(channel, qbuf, (size_t)qlen, qcallback, qquery);
ares_free_string(qbuf);
+
+ if (status == ARES_SUCCESS && qid) {
+ *qid = id;
+ }
+
+ return status;
+}
+
+void ares_query(ares_channel channel, const char *name, int dnsclass, int type,
+ ares_callback callback, void *arg)
+{
+ ares_query_qid(channel, name, dnsclass, type, callback, arg, NULL);
}
-static void qcallback(void *arg, int status, int timeouts, unsigned char *abuf, int alen)
+static void qcallback(void *arg, int status, int timeouts, unsigned char *abuf,
+ int alen)
{
- struct qquery *qquery = (struct qquery *) arg;
- unsigned int ancount;
- int rcode;
+ struct qquery *qquery = (struct qquery *)arg;
+ size_t ancount;
+ int rcode;
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
qquery->callback(qquery->arg, status, timeouts, abuf, alen);
- else
- {
- /* Pull the response code and answer count from the packet. */
- rcode = DNS_HEADER_RCODE(abuf);
- ancount = DNS_HEADER_ANCOUNT(abuf);
-
- /* Convert errors. */
- switch (rcode)
- {
- case NOERROR:
- status = (ancount > 0) ? ARES_SUCCESS : ARES_ENODATA;
- break;
- case FORMERR:
- status = ARES_EFORMERR;
- break;
- case SERVFAIL:
- status = ARES_ESERVFAIL;
- break;
- case NXDOMAIN:
- status = ARES_ENOTFOUND;
- break;
- case NOTIMP:
- status = ARES_ENOTIMP;
- break;
- case REFUSED:
- status = ARES_EREFUSED;
- break;
- }
- qquery->callback(qquery->arg, status, timeouts, abuf, alen);
+ } else {
+ /* Pull the response code and answer count from the packet. */
+ rcode = DNS_HEADER_RCODE(abuf);
+ ancount = DNS_HEADER_ANCOUNT(abuf);
+
+ /* Convert errors. */
+ switch (rcode) {
+ case NOERROR:
+ status = (ancount > 0) ? ARES_SUCCESS : ARES_ENODATA;
+ break;
+ case FORMERR:
+ status = ARES_EFORMERR;
+ break;
+ case SERVFAIL:
+ status = ARES_ESERVFAIL;
+ break;
+ case NXDOMAIN:
+ status = ARES_ENOTFOUND;
+ break;
+ case NOTIMP:
+ status = ARES_ENOTIMP;
+ break;
+ case REFUSED:
+ status = ARES_EREFUSED;
+ break;
}
+ qquery->callback(qquery->arg, status, timeouts, abuf, alen);
+ }
ares_free(qquery);
}
diff --git a/src/lib/ares_rand.c b/src/lib/ares_rand.c
new file mode 100644
index 0000000..a02658e
--- /dev/null
+++ b/src/lib/ares_rand.c
@@ -0,0 +1,359 @@
+/* MIT License
+ *
+ * Copyright (c) 2023 Brad House
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "ares_setup.h"
+#include "ares.h"
+#include "ares_private.h"
+#include <stdlib.h>
+
+#if !defined(HAVE_ARC4RANDOM_BUF) && !defined(HAVE_GETRANDOM) && \
+ !defined(_WIN32)
+# define ARES_NEEDS_RC4 1
+#endif
+
+typedef enum {
+ ARES_RAND_OS = 1, /* OS-provided such as RtlGenRandom or arc4random */
+ ARES_RAND_FILE = 2, /* OS file-backed random number generator */
+#ifdef ARES_NEEDS_RC4
+ ARES_RAND_RC4 = 3 /* Internal RC4 based PRNG */
+#endif
+} ares_rand_backend;
+
+/* Don't build RC4 code if it goes unused as it will generate dead code
+ * warnings */
+#ifdef ARES_NEEDS_RC4
+# define ARES_RC4_KEY_LEN 32 /* 256 bits */
+
+typedef struct ares_rand_rc4 {
+ unsigned char S[256];
+ size_t i;
+ size_t j;
+} ares_rand_rc4;
+
+
+# ifdef _MSC_VER
+typedef unsigned __int64 cares_u64;
+# else
+typedef unsigned long long cares_u64;
+# endif
+
+
+static unsigned int ares_u32_from_ptr(void *addr)
+{
+ if (sizeof(void *) == 8) {
+ return (unsigned int)((((cares_u64)addr >> 32) & 0xFFFFFFFF) |
+ ((cares_u64)addr & 0xFFFFFFFF));
+ }
+ return (unsigned int)((size_t)addr & 0xFFFFFFFF);
+}
+
+/* initialize an rc4 key as the last possible fallback. */
+static void ares_rc4_generate_key(ares_rand_rc4 *rc4_state, unsigned char *key,
+ size_t key_len)
+{
+ size_t i;
+ size_t len = 0;
+ unsigned int data;
+ struct timeval tv;
+
+ if (key_len != ARES_RC4_KEY_LEN) {
+ return;
+ }
+
+ /* Randomness is hard to come by. Maybe the system randomizes heap and stack
+ * addresses. Maybe the current timestamp give us some randomness. Use
+ * rc4_state (heap), &i (stack), and ares__tvnow()
+ */
+ data = ares_u32_from_ptr(rc4_state);
+ memcpy(key + len, &data, sizeof(data));
+ len += sizeof(data);
+
+ data = ares_u32_from_ptr(&i);
+ memcpy(key + len, &data, sizeof(data));
+ len += sizeof(data);
+
+ tv = ares__tvnow();
+ data = (unsigned int)((tv.tv_sec | tv.tv_usec) & 0xFFFFFFFF);
+ memcpy(key + len, &data, sizeof(data));
+ len += sizeof(data);
+
+ srand(ares_u32_from_ptr(rc4_state) | ares_u32_from_ptr(&i) |
+ (unsigned int)((tv.tv_sec | tv.tv_usec) & 0xFFFFFFFF));
+
+ for (i = len; i < key_len; i++) {
+ key[i] = (unsigned char)(rand() % 256); /* LCOV_EXCL_LINE */
+ }
+}
+
+static void ares_rc4_init(ares_rand_rc4 *rc4_state)
+{
+ unsigned char key[ARES_RC4_KEY_LEN];
+ size_t i;
+ size_t j;
+
+ ares_rc4_generate_key(rc4_state, key, sizeof(key));
+
+ for (i = 0; i < sizeof(rc4_state->S); i++) {
+ rc4_state->S[i] = i & 0xFF;
+ }
+
+ for (i = 0, j = 0; i < 256; i++) {
+ j = (j + rc4_state->S[i] + key[i % sizeof(key)]) % 256;
+ ARES_SWAP_BYTE(&rc4_state->S[i], &rc4_state->S[j]);
+ }
+
+ rc4_state->i = 0;
+ rc4_state->j = 0;
+}
+
+/* Just outputs the key schedule, no need to XOR with any data since we have
+ * none */
+static void ares_rc4_prng(ares_rand_rc4 *rc4_state, unsigned char *buf,
+ size_t len)
+{
+ unsigned char *S = rc4_state->S;
+ size_t i = rc4_state->i;
+ size_t j = rc4_state->j;
+ size_t cnt;
+
+ for (cnt = 0; cnt < len; cnt++) {
+ i = (i + 1) % 256;
+ j = (j + S[i]) % 256;
+
+ ARES_SWAP_BYTE(&S[i], &S[j]);
+ buf[cnt] = S[(S[i] + S[j]) % 256];
+ }
+
+ rc4_state->i = i;
+ rc4_state->j = j;
+}
+
+#endif /* ARES_NEEDS_RC4 */
+
+
+struct ares_rand_state {
+ ares_rand_backend type;
+
+ union {
+ FILE *rand_file;
+#ifdef ARES_NEEDS_RC4
+ ares_rand_rc4 rc4;
+#endif
+ } state;
+
+ /* Since except for RC4, random data will likely result in a syscall, lets
+ * pre-pull 256 bytes at a time. Every query will pull 2 bytes off this so
+ * that means we should only need a syscall every 128 queries. 256bytes
+ * appears to be a sweet spot that may be able to be served without
+ * interruption */
+ unsigned char cache[256];
+ size_t cache_remaining;
+};
+
+/* Define RtlGenRandom = SystemFunction036. This is in advapi32.dll. There is
+ * no need to dynamically load this, other software used widely does not.
+ * http://blogs.msdn.com/michael_howard/archive/2005/01/14/353379.aspx
+ * https://docs.microsoft.com/en-us/windows/win32/api/ntsecapi/nf-ntsecapi-rtlgenrandom
+ */
+#ifdef _WIN32
+BOOLEAN WINAPI SystemFunction036(PVOID RandomBuffer, ULONG RandomBufferLength);
+# ifndef RtlGenRandom
+# define RtlGenRandom(a, b) SystemFunction036(a, b)
+# endif
+#endif
+
+
+static ares_bool_t ares__init_rand_engine(ares_rand_state *state)
+{
+ memset(state, 0, sizeof(*state));
+
+#if defined(HAVE_ARC4RANDOM_BUF) || defined(HAVE_GETRANDOM) || defined(_WIN32)
+ state->type = ARES_RAND_OS;
+ return ARES_TRUE;
+#elif defined(CARES_RANDOM_FILE)
+ state->type = ARES_RAND_FILE;
+ state->state.rand_file = fopen(CARES_RANDOM_FILE, "rb");
+ if (state->state.rand_file) {
+ setvbuf(state->state.rand_file, NULL, _IONBF, 0);
+ return ARES_TRUE;
+ }
+ /* Fall-Thru on failure to RC4 */
+#endif
+
+#ifdef ARES_NEEDS_RC4
+ state->type = ARES_RAND_RC4;
+ ares_rc4_init(&state->state.rc4);
+
+ /* Currently cannot fail */
+ return ARES_TRUE;
+#endif
+}
+
+ares_rand_state *ares__init_rand_state(void)
+{
+ ares_rand_state *state = NULL;
+
+ state = ares_malloc(sizeof(*state));
+ if (!state) {
+ return NULL;
+ }
+
+ if (!ares__init_rand_engine(state)) {
+ ares_free(state);
+ return NULL;
+ }
+
+ return state;
+}
+
+static void ares__clear_rand_state(ares_rand_state *state)
+{
+ if (!state) {
+ return;
+ }
+
+ switch (state->type) {
+ case ARES_RAND_OS:
+ break;
+ case ARES_RAND_FILE:
+ fclose(state->state.rand_file);
+ break;
+#ifdef ARES_NEEDS_RC4
+ case ARES_RAND_RC4:
+ break;
+#endif
+ }
+}
+
+static void ares__reinit_rand(ares_rand_state *state)
+{
+ ares__clear_rand_state(state);
+ ares__init_rand_engine(state);
+}
+
+void ares__destroy_rand_state(ares_rand_state *state)
+{
+ if (!state) {
+ return;
+ }
+
+ ares__clear_rand_state(state);
+ ares_free(state);
+}
+
+static void ares__rand_bytes_fetch(ares_rand_state *state, unsigned char *buf,
+ size_t len)
+{
+ while (1) {
+ size_t bytes_read = 0;
+
+ switch (state->type) {
+ case ARES_RAND_OS:
+#ifdef _WIN32
+ RtlGenRandom(buf, len);
+ return;
+#elif defined(HAVE_ARC4RANDOM_BUF)
+ arc4random_buf(buf, len);
+ return;
+#elif defined(HAVE_GETRANDOM)
+ while (1) {
+ size_t n = len - bytes_read;
+ /* getrandom() on Linux always succeeds and is never
+ * interrupted by a signal when requesting <= 256 bytes.
+ */
+ ssize_t rv = getrandom(buf + bytes_read, n > 256 ? 256 : n, 0);
+ if (rv <= 0) {
+ continue; /* Just retry. */
+ }
+
+ bytes_read += (size_t)rv;
+ if (bytes_read == len) {
+ return;
+ }
+ }
+ break;
+#else
+ /* Shouldn't be possible to be here */
+ break;
+#endif
+
+ case ARES_RAND_FILE:
+ while (1) {
+ size_t rv = fread(buf + bytes_read, 1, len - bytes_read,
+ state->state.rand_file);
+ if (rv == 0) {
+ break; /* critical error, will reinit rand state */
+ }
+
+ bytes_read += rv;
+ if (bytes_read == len) {
+ return;
+ }
+ }
+ break;
+
+#ifdef ARES_NEEDS_RC4
+ case ARES_RAND_RC4:
+ ares_rc4_prng(&state->state.rc4, buf, len);
+ return;
+#endif
+ }
+
+ /* If we didn't return before we got here, that means we had a critical rand
+ * failure and need to reinitialized */
+ ares__reinit_rand(state);
+ }
+}
+
+void ares__rand_bytes(ares_rand_state *state, unsigned char *buf, size_t len)
+{
+ /* See if we need to refill the cache to serve the request, but if len is
+ * excessive, we're not going to update our cache or serve from cache */
+ if (len > state->cache_remaining && len < sizeof(state->cache)) {
+ size_t fetch_size = sizeof(state->cache) - state->cache_remaining;
+ ares__rand_bytes_fetch(state, state->cache, fetch_size);
+ state->cache_remaining = sizeof(state->cache);
+ }
+
+ /* Serve from cache */
+ if (len <= state->cache_remaining) {
+ size_t offset = sizeof(state->cache) - state->cache_remaining;
+ memcpy(buf, state->cache + offset, len);
+ state->cache_remaining -= len;
+ return;
+ }
+
+ /* Serve direct due to excess size of request */
+ ares__rand_bytes_fetch(state, buf, len);
+}
+
+unsigned short ares__generate_new_id(ares_rand_state *state)
+{
+ unsigned short r = 0;
+
+ ares__rand_bytes(state, (unsigned char *)&r, sizeof(r));
+ return r;
+}
diff --git a/src/lib/ares_search.c b/src/lib/ares_search.c
index c4b0424..23f966f 100644
--- a/src/lib/ares_search.c
+++ b/src/lib/ares_search.c
@@ -1,17 +1,28 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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 (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -25,202 +36,196 @@
struct search_query {
/* Arguments passed to ares_search */
- ares_channel channel;
- char *name; /* copied into an allocated buffer */
- int dnsclass;
- int type;
+ ares_channel channel;
+ char *name; /* copied into an allocated buffer */
+ int dnsclass;
+ int type;
ares_callback callback;
- void *arg;
+ void *arg;
- int status_as_is; /* error status from trying as-is */
- int next_domain; /* next search domain to try */
- int trying_as_is; /* current query is for name as-is */
- int timeouts; /* number of timeouts we saw for this request */
- int ever_got_nodata; /* did we ever get ARES_ENODATA along the way? */
+ int status_as_is; /* error status from trying as-is */
+ size_t next_domain; /* next search domain to try */
+ ares_bool_t trying_as_is; /* current query is for name as-is */
+ size_t timeouts; /* number of timeouts we saw for this request */
+ ares_bool_t ever_got_nodata; /* did we ever get ARES_ENODATA along the way? */
};
static void search_callback(void *arg, int status, int timeouts,
unsigned char *abuf, int alen);
-static void end_squery(struct search_query *squery, int status,
- unsigned char *abuf, int alen);
+static void end_squery(struct search_query *squery, ares_status_t status,
+ unsigned char *abuf, size_t alen);
-void ares_search(ares_channel channel, const char *name, int dnsclass,
- int type, ares_callback callback, void *arg)
+void ares_search(ares_channel channel, const char *name, int dnsclass, int type,
+ ares_callback callback, void *arg)
{
struct search_query *squery;
- char *s;
- const char *p;
- int status, ndots;
+ char *s;
+ const char *p;
+ ares_status_t status;
+ size_t ndots;
/* Per RFC 7686, reject queries for ".onion" domain names with NXDOMAIN. */
- if (ares__is_onion_domain(name))
- {
- callback(arg, ARES_ENOTFOUND, 0, NULL, 0);
- return;
- }
+ if (ares__is_onion_domain(name)) {
+ callback(arg, ARES_ENOTFOUND, 0, NULL, 0);
+ return;
+ }
/* If name only yields one domain to search, then we don't have
* to keep extra state, so just do an ares_query().
*/
status = ares__single_domain(channel, name, &s);
- if (status != ARES_SUCCESS)
- {
- callback(arg, status, 0, NULL, 0);
- return;
- }
- if (s)
- {
- ares_query(channel, s, dnsclass, type, callback, arg);
- ares_free(s);
- return;
- }
+ if (status != ARES_SUCCESS) {
+ callback(arg, (int)status, 0, NULL, 0);
+ return;
+ }
+ if (s) {
+ ares_query(channel, s, dnsclass, type, callback, arg);
+ ares_free(s);
+ return;
+ }
/* Allocate a search_query structure to hold the state necessary for
* doing multiple lookups.
*/
squery = ares_malloc(sizeof(struct search_query));
- if (!squery)
- {
- callback(arg, ARES_ENOMEM, 0, NULL, 0);
- return;
- }
+ if (!squery) {
+ callback(arg, ARES_ENOMEM, 0, NULL, 0);
+ return;
+ }
squery->channel = channel;
- squery->name = ares_strdup(name);
- if (!squery->name)
- {
- ares_free(squery);
- callback(arg, ARES_ENOMEM, 0, NULL, 0);
- return;
- }
- squery->dnsclass = dnsclass;
- squery->type = type;
- squery->status_as_is = -1;
- squery->callback = callback;
- squery->arg = arg;
- squery->timeouts = 0;
- squery->ever_got_nodata = 0;
+ squery->name = ares_strdup(name);
+ if (!squery->name) {
+ ares_free(squery);
+ callback(arg, ARES_ENOMEM, 0, NULL, 0);
+ return;
+ }
+ squery->dnsclass = dnsclass;
+ squery->type = type;
+ squery->status_as_is = -1;
+ squery->callback = callback;
+ squery->arg = arg;
+ squery->timeouts = 0;
+ squery->ever_got_nodata = ARES_FALSE;
/* Count the number of dots in name. */
ndots = 0;
- for (p = name; *p; p++)
- {
- if (*p == '.')
- ndots++;
+ for (p = name; *p; p++) {
+ if (*p == '.') {
+ ndots++;
}
+ }
/* If ndots is at least the channel ndots threshold (usually 1),
* then we try the name as-is first. Otherwise, we try the name
* as-is last.
*/
- if (ndots >= channel->ndots)
- {
- /* Try the name as-is first. */
- squery->next_domain = 0;
- squery->trying_as_is = 1;
- ares_query(channel, name, dnsclass, type, search_callback, squery);
- }
- else
- {
- /* Try the name as-is last; start with the first search domain. */
- squery->next_domain = 1;
- squery->trying_as_is = 0;
- status = ares__cat_domain(name, channel->domains[0], &s);
- if (status == ARES_SUCCESS)
- {
- ares_query(channel, s, dnsclass, type, search_callback, squery);
- ares_free(s);
- }
- else
- {
- /* failed, free the malloc()ed memory */
- ares_free(squery->name);
- ares_free(squery);
- callback(arg, status, 0, NULL, 0);
- }
+ if (ndots >= (size_t)channel->ndots) {
+ /* Try the name as-is first. */
+ squery->next_domain = 0;
+ squery->trying_as_is = ARES_TRUE;
+ ares_query(channel, name, dnsclass, type, search_callback, squery);
+ } else {
+ /* Try the name as-is last; start with the first search domain. */
+ squery->next_domain = 1;
+ squery->trying_as_is = ARES_FALSE;
+ status = ares__cat_domain(name, channel->domains[0], &s);
+ if (status == ARES_SUCCESS) {
+ ares_query(channel, s, dnsclass, type, search_callback, squery);
+ ares_free(s);
+ } else {
+ /* failed, free the malloc()ed memory */
+ ares_free(squery->name);
+ ares_free(squery);
+ callback(arg, (int)status, 0, NULL, 0);
}
+ }
}
static void search_callback(void *arg, int status, int timeouts,
unsigned char *abuf, int alen)
{
- struct search_query *squery = (struct search_query *) arg;
- ares_channel channel = squery->channel;
- char *s;
+ struct search_query *squery = (struct search_query *)arg;
+ ares_channel channel = squery->channel;
+ char *s;
- squery->timeouts += timeouts;
+ squery->timeouts += (size_t)timeouts;
/* Stop searching unless we got a non-fatal error. */
- if (status != ARES_ENODATA && status != ARES_ESERVFAIL
- && status != ARES_ENOTFOUND)
- end_squery(squery, status, abuf, alen);
- else
- {
- /* Save the status if we were trying as-is. */
- if (squery->trying_as_is)
- squery->status_as_is = status;
+ if (status != ARES_ENODATA && status != ARES_ESERVFAIL &&
+ status != ARES_ENOTFOUND) {
+ end_squery(squery, (ares_status_t)status, abuf, (size_t)alen);
+ } else {
+ /* Save the status if we were trying as-is. */
+ if (squery->trying_as_is) {
+ squery->status_as_is = status;
+ }
- /*
- * If we ever get ARES_ENODATA along the way, record that; if the search
- * should run to the very end and we got at least one ARES_ENODATA,
- * then callers like ares_gethostbyname() may want to try a T_A search
- * even if the last domain we queried for T_AAAA resource records
- * returned ARES_ENOTFOUND.
- */
- if (status == ARES_ENODATA)
- squery->ever_got_nodata = 1;
+ /*
+ * If we ever get ARES_ENODATA along the way, record that; if the search
+ * should run to the very end and we got at least one ARES_ENODATA,
+ * then callers like ares_gethostbyname() may want to try a T_A search
+ * even if the last domain we queried for T_AAAA resource records
+ * returned ARES_ENOTFOUND.
+ */
+ if (status == ARES_ENODATA) {
+ squery->ever_got_nodata = ARES_TRUE;
+ }
- if (squery->next_domain < channel->ndomains)
- {
- /* Try the next domain. */
- status = ares__cat_domain(squery->name,
- channel->domains[squery->next_domain], &s);
- if (status != ARES_SUCCESS)
- end_squery(squery, status, NULL, 0);
- else
- {
- squery->trying_as_is = 0;
- squery->next_domain++;
- ares_query(channel, s, squery->dnsclass, squery->type,
- search_callback, squery);
- ares_free(s);
- }
- }
- else if (squery->status_as_is == -1)
- {
- /* Try the name as-is at the end. */
- squery->trying_as_is = 1;
- ares_query(channel, squery->name, squery->dnsclass, squery->type,
- search_callback, squery);
- }
- else {
- if (squery->status_as_is == ARES_ENOTFOUND && squery->ever_got_nodata) {
- end_squery(squery, ARES_ENODATA, NULL, 0);
- }
- else
- end_squery(squery, squery->status_as_is, NULL, 0);
+ if (squery->next_domain < (size_t)channel->ndomains) {
+ ares_status_t mystatus;
+ /* Try the next domain. */
+ mystatus = ares__cat_domain(squery->name,
+ channel->domains[squery->next_domain], &s);
+ if (mystatus != ARES_SUCCESS) {
+ end_squery(squery, mystatus, NULL, 0);
+ } else {
+ squery->trying_as_is = ARES_FALSE;
+ squery->next_domain++;
+ ares_query(channel, s, squery->dnsclass, squery->type, search_callback,
+ squery);
+ ares_free(s);
+ }
+ } else if (squery->status_as_is == -1) {
+ /* Try the name as-is at the end. */
+ squery->trying_as_is = ARES_TRUE;
+ ares_query(channel, squery->name, squery->dnsclass, squery->type,
+ search_callback, squery);
+ } else {
+ if (squery->status_as_is == ARES_ENOTFOUND && squery->ever_got_nodata) {
+ end_squery(squery, ARES_ENODATA, NULL, 0);
+ } else {
+ end_squery(squery, (ares_status_t)squery->status_as_is, NULL, 0);
}
}
+ }
}
-static void end_squery(struct search_query *squery, int status,
- unsigned char *abuf, int alen)
+static void end_squery(struct search_query *squery, ares_status_t status,
+ unsigned char *abuf, size_t alen)
{
- squery->callback(squery->arg, status, squery->timeouts, abuf, alen);
+ squery->callback(squery->arg, (int)status, (int)squery->timeouts, abuf,
+ (int)alen);
ares_free(squery->name);
ares_free(squery);
}
/* Concatenate two domains. */
-int ares__cat_domain(const char *name, const char *domain, char **s)
+ares_status_t ares__cat_domain(const char *name, const char *domain, char **s)
{
- size_t nlen = strlen(name);
- size_t dlen = strlen(domain);
+ size_t nlen = ares_strlen(name);
+ size_t dlen = ares_strlen(domain);
*s = ares_malloc(nlen + 1 + dlen + 1);
- if (!*s)
+ if (!*s) {
return ARES_ENOMEM;
+ }
memcpy(*s, name, nlen);
(*s)[nlen] = '.';
+ if (strcmp(domain, ".") == 0) {
+ /* Avoid appending the root domain to the separator, which would set *s to
+ an ill-formed value (ending in two consequtive dots). */
+ dlen = 0;
+ }
memcpy(*s + nlen + 1, domain, dlen);
(*s)[nlen + 1 + dlen] = 0;
return ARES_SUCCESS;
@@ -230,91 +235,84 @@ int ares__cat_domain(const char *name, const char *domain, char **s)
* the string we should query, in an allocated buffer. If not, set *s
* to NULL.
*/
-int ares__single_domain(ares_channel channel, const char *name, char **s)
+ares_status_t ares__single_domain(ares_channel channel, const char *name,
+ char **s)
{
- size_t len = strlen(name);
- const char *hostaliases;
- FILE *fp;
- char *line = NULL;
- int status;
- size_t linesize;
- const char *p, *q;
- int error;
+ size_t len = ares_strlen(name);
+ const char *hostaliases;
+ FILE *fp;
+ char *line = NULL;
+ ares_status_t status;
+ size_t linesize;
+ const char *p;
+ const char *q;
+ int error;
/* If the name contains a trailing dot, then the single query is the name
* sans the trailing dot.
*/
- if ((len > 0) && (name[len - 1] == '.'))
- {
- *s = ares_strdup(name);
- return (*s) ? ARES_SUCCESS : ARES_ENOMEM;
- }
+ if ((len > 0) && (name[len - 1] == '.')) {
+ *s = ares_strdup(name);
+ return (*s) ? ARES_SUCCESS : ARES_ENOMEM;
+ }
- if (!(channel->flags & ARES_FLAG_NOALIASES) && !strchr(name, '.'))
- {
- /* The name might be a host alias. */
- hostaliases = getenv("HOSTALIASES");
- if (hostaliases)
- {
- fp = fopen(hostaliases, "r");
- if (fp)
- {
- while ((status = ares__read_line(fp, &line, &linesize))
- == ARES_SUCCESS)
- {
- if (strncasecmp(line, name, len) != 0 ||
- !ISSPACE(line[len]))
- continue;
- p = line + len;
- while (ISSPACE(*p))
- p++;
- if (*p)
- {
- q = p + 1;
- while (*q && !ISSPACE(*q))
- q++;
- *s = ares_malloc(q - p + 1);
- if (*s)
- {
- memcpy(*s, p, q - p);
- (*s)[q - p] = 0;
- }
- ares_free(line);
- fclose(fp);
- return (*s) ? ARES_SUCCESS : ARES_ENOMEM;
- }
- }
- ares_free(line);
- fclose(fp);
- if (status != ARES_SUCCESS && status != ARES_EOF)
- return status;
+ if (!(channel->flags & ARES_FLAG_NOALIASES) && !strchr(name, '.')) {
+ /* The name might be a host alias. */
+ hostaliases = getenv("HOSTALIASES");
+ if (hostaliases) {
+ fp = fopen(hostaliases, "r");
+ if (fp) {
+ while ((status = ares__read_line(fp, &line, &linesize)) ==
+ ARES_SUCCESS) {
+ if (strncasecmp(line, name, len) != 0 || !ISSPACE(line[len])) {
+ continue;
+ }
+ p = line + len;
+ while (ISSPACE(*p)) {
+ p++;
+ }
+ if (*p) {
+ q = p + 1;
+ while (*q && !ISSPACE(*q)) {
+ q++;
}
- else
- {
- error = ERRNO;
- switch(error)
- {
- case ENOENT:
- case ESRCH:
- break;
- default:
- DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n",
- error, strerror(error)));
- DEBUGF(fprintf(stderr, "Error opening file: %s\n",
- hostaliases));
- *s = NULL;
- return ARES_EFILE;
- }
+ *s = ares_malloc((size_t)(q - p + 1));
+ if (*s) {
+ memcpy(*s, p, (size_t)(q - p));
+ (*s)[q - p] = 0;
}
+ ares_free(line);
+ fclose(fp);
+ return (*s) ? ARES_SUCCESS : ARES_ENOMEM;
+ }
+ }
+ ares_free(line);
+ fclose(fp);
+ if (status != ARES_SUCCESS && status != ARES_EOF) {
+ return status;
}
+ } else {
+ error = ERRNO;
+ switch (error) {
+ case ENOENT:
+ case ESRCH:
+ break;
+ default:
+ DEBUGF(fprintf(stderr, "fopen() failed with error: %d %s\n", error,
+ strerror(error)));
+ DEBUGF(fprintf(stderr, "Error opening file: %s\n", hostaliases));
+ *s = NULL;
+ return ARES_EFILE;
+ }
+ }
}
+ }
- if (channel->flags & ARES_FLAG_NOSEARCH || channel->ndomains == 0)
- {
- /* No domain search to do; just try the name as-is. */
- *s = ares_strdup(name);
- return (*s) ? ARES_SUCCESS : ARES_ENOMEM;
- }
+ if (channel->flags & ARES_FLAG_NOSEARCH || channel->ndomains == 0) {
+ /* No domain search to do; just try the name as-is. */
+ *s = ares_strdup(name);
+ return (*s) ? ARES_SUCCESS : ARES_ENOMEM;
+ }
*s = NULL;
return ARES_SUCCESS;
diff --git a/src/lib/ares_send.c b/src/lib/ares_send.c
index 75ba9e4..bc3aeed 100644
--- a/src/lib/ares_send.c
+++ b/src/lib/ares_send.c
@@ -1,17 +1,28 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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 (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -26,53 +37,49 @@
#include "ares_dns.h"
#include "ares_private.h"
-void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
- ares_callback callback, void *arg)
+ares_status_t ares_send_ex(ares_channel channel, const unsigned char *qbuf,
+ size_t qlen, ares_callback callback, void *arg)
{
- struct query *query;
- int i, packetsz;
+ struct query *query;
+ size_t i;
+ size_t packetsz;
struct timeval now;
/* Verify that the query is at least long enough to hold the header. */
- if (qlen < HFIXEDSZ || qlen >= (1 << 16))
- {
- callback(arg, ARES_EBADQUERY, 0, NULL, 0);
- return;
- }
-
+ if (qlen < HFIXEDSZ || qlen >= (1 << 16)) {
+ callback(arg, ARES_EBADQUERY, 0, NULL, 0);
+ return ARES_EBADQUERY;
+ }
+ if (channel->nservers < 1) {
+ callback(arg, ARES_ESERVFAIL, 0, NULL, 0);
+ return ARES_ESERVFAIL;
+ }
/* Allocate space for query and allocated fields. */
query = ares_malloc(sizeof(struct query));
- if (!query)
- {
- callback(arg, ARES_ENOMEM, 0, NULL, 0);
- return;
- }
- query->tcpbuf = ares_malloc(qlen + 2);
- if (!query->tcpbuf)
- {
- ares_free(query);
- callback(arg, ARES_ENOMEM, 0, NULL, 0);
- return;
- }
- if (channel->nservers < 1)
- {
- ares_free(query);
- callback(arg, ARES_ESERVFAIL, 0, NULL, 0);
- return;
- }
- query->server_info = ares_malloc(channel->nservers *
- sizeof(query->server_info[0]));
- if (!query->server_info)
- {
- ares_free(query->tcpbuf);
- ares_free(query);
- callback(arg, ARES_ENOMEM, 0, NULL, 0);
- return;
- }
+ if (!query) {
+ callback(arg, ARES_ENOMEM, 0, NULL, 0);
+ return ARES_ENOMEM;
+ }
+ memset(query, 0, sizeof(*query));
+ query->channel = channel;
+ query->tcpbuf = ares_malloc(qlen + 2);
+ if (!query->tcpbuf) {
+ ares_free(query);
+ callback(arg, ARES_ENOMEM, 0, NULL, 0);
+ return ARES_ENOMEM;
+ }
+ query->server_info =
+ ares_malloc((size_t)channel->nservers * sizeof(query->server_info[0]));
+ if (!query->server_info) {
+ ares_free(query->tcpbuf);
+ ares_free(query);
+ callback(arg, ARES_ENOMEM, 0, NULL, 0);
+ return ARES_ENOMEM;
+ }
/* Compute the query ID. Start with no timeout. */
- query->qid = DNS_HEADER_QID(qbuf);
- query->timeout.tv_sec = 0;
+ query->qid = DNS_HEADER_QID(qbuf);
+ query->timeout.tv_sec = 0;
query->timeout.tv_usec = 0;
/* Form the TCP query buffer by prepending qlen (as two
@@ -84,10 +91,10 @@ void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
query->tcplen = qlen + 2;
/* Fill in query arguments. */
- query->qbuf = query->tcpbuf + 2;
- query->qlen = qlen;
+ query->qbuf = query->tcpbuf + 2;
+ query->qlen = qlen;
query->callback = callback;
- query->arg = arg;
+ query->arg = arg;
/* Initialize query status. */
query->try_count = 0;
@@ -95,37 +102,51 @@ void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
/* Choose the server to send the query to. If rotation is enabled, keep track
* of the next server we want to use. */
query->server = channel->last_server;
- if (channel->rotate == 1)
- channel->last_server = (channel->last_server + 1) % channel->nservers;
+ if (channel->rotate == 1) {
+ channel->last_server =
+ (channel->last_server + 1) % (size_t)channel->nservers;
+ }
- for (i = 0; i < channel->nservers; i++)
- {
- query->server_info[i].skip_server = 0;
- query->server_info[i].tcp_connection_generation = 0;
- }
+ for (i = 0; i < (size_t)channel->nservers; i++) {
+ query->server_info[i].skip_server = ARES_FALSE;
+ query->server_info[i].tcp_connection_generation = 0;
+ }
packetsz = (channel->flags & ARES_FLAG_EDNS) ? channel->ednspsz : PACKETSZ;
query->using_tcp = (channel->flags & ARES_FLAG_USEVC) || qlen > packetsz;
query->error_status = ARES_ECONNREFUSED;
- query->timeouts = 0;
+ query->timeouts = 0;
/* Initialize our list nodes. */
- ares__init_list_node(&(query->queries_by_qid), query);
- ares__init_list_node(&(query->queries_by_timeout), query);
- ares__init_list_node(&(query->queries_to_server), query);
- ares__init_list_node(&(query->all_queries), query);
+ query->node_queries_by_timeout = NULL;
+ query->node_queries_to_conn = NULL;
/* Chain the query into the list of all queries. */
- ares__insert_in_list(&(query->all_queries), &(channel->all_queries));
+ query->node_all_queries =
+ ares__llist_insert_last(channel->all_queries, query);
+ if (query->node_all_queries == NULL) {
+ callback(arg, ARES_ENOMEM, 0, NULL, 0);
+ ares__free_query(query);
+ return ARES_ENOMEM;
+ }
+
/* Keep track of queries bucketed by qid, so we can process DNS
* responses quickly.
*/
- ares__insert_in_list(
- &(query->queries_by_qid),
- &(channel->queries_by_qid[query->qid % ARES_QID_TABLE_SIZE]));
+ if (!ares__htable_stvp_insert(channel->queries_by_qid, query->qid, query)) {
+ callback(arg, ARES_ENOMEM, 0, NULL, 0);
+ ares__free_query(query);
+ return ARES_ENOMEM;
+ }
/* Perform the first query action. */
now = ares__tvnow();
- ares__send_query(channel, query, &now);
+ return ares__send_query(channel, query, &now);
+}
+
+void ares_send(ares_channel channel, const unsigned char *qbuf, int qlen,
+ ares_callback callback, void *arg)
+{
+ ares_send_ex(channel, qbuf, (size_t)qlen, callback, arg);
}
diff --git a/src/lib/ares_setup.h b/src/lib/ares_setup.h
index 6ad2cee..0387f3e 100644
--- a/src/lib/ares_setup.h
+++ b/src/lib/ares_setup.h
@@ -1,26 +1,37 @@
-#ifndef HEADER_CARES_SETUP_H
-#define HEADER_CARES_SETUP_H
-
-
-/* Copyright (C) 2004 - 2012 by Daniel Stenberg et al
+/* MIT License
+ *
+ * Copyright (c) 2004 Daniel Stenberg
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
+#ifndef HEADER_CARES_SETUP_H
+#define HEADER_CARES_SETUP_H
/*
* Define WIN32 when build target is Win32 API
*/
#if (defined(_WIN32) || defined(__WIN32__)) && !defined(WIN32)
-#define WIN32
+# define WIN32
#endif
/*
@@ -29,12 +40,12 @@
*/
#ifdef HAVE_CONFIG_H
-#include "ares_config.h"
+# include "ares_config.h"
#else
-#ifdef WIN32
-#include "config-win32.h"
-#endif
+# ifdef WIN32
+# include "config-win32.h"
+# endif
#endif /* HAVE_CONFIG_H */
@@ -112,7 +123,7 @@
# ifdef HAVE_WINSOCK2_H
# include <winsock2.h>
# ifdef HAVE_WS2TCPIP_H
-# include <ws2tcpip.h>
+# include <ws2tcpip.h>
# endif
# else
# ifdef HAVE_WINSOCK_H
@@ -127,8 +138,9 @@
* undefine USE_WINSOCK.
*/
-#undef USE_WINSOCK
-
+#ifdef USE_WINSOCK
+# undef USE_WINSOCK
+#endif
#ifdef HAVE_WINSOCK2_H
# define USE_WINSOCK 2
#else
@@ -143,17 +155,17 @@
#ifndef HAVE_CONFIG_H
-#if !defined(HAVE_SYS_TIME_H) && !defined(_MSC_VER) && !defined(__WATCOMC__)
-#define HAVE_SYS_TIME_H
-#endif
+# if !defined(HAVE_SYS_TIME_H) && !defined(_MSC_VER) && !defined(__WATCOMC__)
+# define HAVE_SYS_TIME_H
+# endif
-#if !defined(HAVE_UNISTD_H) && !defined(_MSC_VER)
-#define HAVE_UNISTD_H 1
-#endif
+# if !defined(HAVE_UNISTD_H) && !defined(_MSC_VER)
+# define HAVE_UNISTD_H 1
+# endif
-#if !defined(HAVE_SYS_UIO_H) && !defined(WIN32) && !defined(MSDOS)
-#define HAVE_SYS_UIO_H
-#endif
+# if !defined(HAVE_SYS_UIO_H) && !defined(WIN32) && !defined(MSDOS)
+# define HAVE_SYS_UIO_H
+# endif
#endif /* HAVE_CONFIG_H */
@@ -182,7 +194,7 @@
* but it is not fully implemented and missing identifiers, so udefine here.
*/
#if (defined(ANDROID) || defined(__ANDROID__) || defined(__MVS__)) && \
- defined(HAVE_ARPA_NAMESER_H)
+ defined(HAVE_ARPA_NAMESER_H)
# undef HAVE_ARPA_NAMESER_H
#endif
@@ -192,21 +204,35 @@
* --enable-debug) so we undef them again here.
*/
-#undef PACKAGE_STRING
-#undef PACKAGE_TARNAME
-#undef PACKAGE_VERSION
-#undef PACKAGE_BUGREPORT
-#undef PACKAGE_NAME
-#undef VERSION
-#undef PACKAGE
+#ifdef PACKAGE_STRING
+# undef PACKAGE_STRING
+#endif
+#ifdef PACKAGE_TARNAME
+# undef PACKAGE_TARNAME
+#endif
+#ifdef PACKAGE_VERSION
+# undef PACKAGE_VERSION
+#endif
+#ifdef PACKAGE_BUGREPORT
+# undef PACKAGE_BUGREPORT
+#endif
+#ifdef PACKAGE_NAME
+# undef PACKAGE_NAME
+#endif
+#ifdef VERSION
+# undef VERSION
+#endif
+#ifdef PACKAGE
+# undef PACKAGE
+#endif
/* IPv6 compatibility */
#if !defined(HAVE_AF_INET6)
-#if defined(HAVE_PF_INET6)
-#define AF_INET6 PF_INET6
-#else
-#define AF_INET6 AF_MAX+1
-#endif
+# if defined(HAVE_PF_INET6)
+# define AF_INET6 PF_INET6
+# else
+# define AF_INET6 AF_MAX + 1
+# endif
#endif
/*
@@ -214,7 +240,7 @@
*/
#ifndef __SETUP_ONCE_H
-#include "setup_once.h"
+# include "setup_once.h"
#endif
#endif /* HEADER_CARES_SETUP_H */
diff --git a/src/lib/ares_str.c b/src/lib/ares_str.c
new file mode 100644
index 0000000..1179477
--- /dev/null
+++ b/src/lib/ares_str.c
@@ -0,0 +1,95 @@
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "ares_setup.h"
+#include "ares_str.h"
+#include "ares.h"
+#include "ares_private.h"
+
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+
+size_t ares_strlen(const char *str)
+{
+ if (str == NULL) {
+ return 0;
+ }
+
+ return strlen(str);
+}
+
+char *ares_strdup(const char *s1)
+{
+ size_t len;
+ char *out;
+
+ if (s1 == NULL) {
+ return NULL;
+ }
+
+ len = ares_strlen(s1);
+
+ /* Don't see how this is possible */
+ if (len == SIZE_MAX) {
+ return NULL;
+ }
+
+ out = ares_malloc(len + 1);
+ if (out == NULL) {
+ return NULL;
+ }
+
+ if (len) {
+ memcpy(out, s1, len);
+ }
+
+ out[len] = 0;
+ return out;
+}
+
+size_t ares_strcpy(char *dest, const char *src, size_t dest_size)
+{
+ size_t len = 0;
+
+ if (dest == NULL || dest_size == 0) {
+ return 0;
+ }
+
+ len = ares_strlen(src);
+
+ if (len >= dest_size) {
+ len = dest_size - 1;
+ }
+
+ if (len) {
+ memcpy(dest, src, len);
+ }
+
+ dest[len] = 0;
+ return len;
+}
diff --git a/src/lib/ares_str.h b/src/lib/ares_str.h
new file mode 100644
index 0000000..fa5d550
--- /dev/null
+++ b/src/lib/ares_str.h
@@ -0,0 +1,49 @@
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+#ifndef HEADER_CARES_STRDUP_H
+#define HEADER_CARES_STRDUP_H
+
+#include "ares_setup.h"
+
+char *ares_strdup(const char *s1);
+
+size_t ares_strlen(const char *str);
+
+/*! Copy string from source to destination with destination buffer size
+ * provided. The destination is guaranteed to be null terminated, if the
+ * provided buffer isn't large enough, only those bytes from the source that
+ * will fit will be copied.
+ *
+ * \param[out] dest Destination buffer
+ * \param[in] src Source to copy
+ * \param[in] dest_size Size of destination buffer
+ * \return String length. Will be at most dest_size-1
+ */
+size_t ares_strcpy(char *dest, const char *src, size_t dest_size);
+
+
+#endif /* HEADER_CARES_STRDUP_H */
diff --git a/src/lib/ares_strcasecmp.c b/src/lib/ares_strcasecmp.c
index f9c85e2..b91cbbe 100644
--- a/src/lib/ares_strcasecmp.c
+++ b/src/lib/ares_strcasecmp.c
@@ -1,18 +1,28 @@
-
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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 (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -21,46 +31,49 @@
#ifndef HAVE_STRCASECMP
int ares_strcasecmp(const char *a, const char *b)
{
-#if defined(HAVE_STRCMPI)
+# if defined(HAVE_STRCMPI)
return strcmpi(a, b);
-#elif defined(HAVE_STRICMP)
+# elif defined(HAVE_STRICMP)
return stricmp(a, b);
-#else
+# else
size_t i;
for (i = 0; i < (size_t)-1; i++) {
int c1 = ISUPPER(a[i]) ? tolower(a[i]) : a[i];
int c2 = ISUPPER(b[i]) ? tolower(b[i]) : b[i];
- if (c1 != c2)
- return c1-c2;
- if (!c1)
+ if (c1 != c2) {
+ return c1 - c2;
+ }
+ if (!c1) {
break;
+ }
}
return 0;
-#endif
+# endif
}
#endif
#ifndef HAVE_STRNCASECMP
int ares_strncasecmp(const char *a, const char *b, size_t n)
{
-#if defined(HAVE_STRNCMPI)
+# if defined(HAVE_STRNCMPI)
return strncmpi(a, b, n);
-#elif defined(HAVE_STRNICMP)
+# elif defined(HAVE_STRNICMP)
return strnicmp(a, b, n);
-#else
+# else
size_t i;
for (i = 0; i < n; i++) {
int c1 = ISUPPER(a[i]) ? tolower(a[i]) : a[i];
int c2 = ISUPPER(b[i]) ? tolower(b[i]) : b[i];
- if (c1 != c2)
- return c1-c2;
- if (!c1)
+ if (c1 != c2) {
+ return c1 - c2;
+ }
+ if (!c1) {
break;
+ }
}
return 0;
-#endif
+# endif
}
#endif
-
diff --git a/src/lib/ares_strcasecmp.h b/src/lib/ares_strcasecmp.h
index 57d86f9..31a66be 100644
--- a/src/lib/ares_strcasecmp.h
+++ b/src/lib/ares_strcasecmp.h
@@ -1,21 +1,31 @@
-#ifndef HEADER_CARES_STRCASECMP_H
-#define HEADER_CARES_STRCASECMP_H
-
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
+#ifndef HEADER_CARES_STRCASECMP_H
+#define HEADER_CARES_STRCASECMP_H
#include "ares_setup.h"
diff --git a/src/lib/ares_strdup.c b/src/lib/ares_strdup.c
deleted file mode 100644
index 39fc869..0000000
--- a/src/lib/ares_strdup.c
+++ /dev/null
@@ -1,42 +0,0 @@
-
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- *
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
- */
-
-#include "ares_setup.h"
-#include "ares_strdup.h"
-#include "ares.h"
-#include "ares_private.h"
-
-char *ares_strdup(const char *s1)
-{
- size_t sz;
- char * s2;
-
- if(s1) {
- sz = strlen(s1);
- if(sz < (size_t)-1) {
- sz++;
- if(sz < ((size_t)-1)) {
- s2 = ares_malloc(sz);
- if(s2) {
- memcpy(s2, s1, sz);
- return s2;
- }
- }
- }
- }
- return (char *)NULL;
-}
diff --git a/src/lib/ares_strdup.h b/src/lib/ares_strdup.h
deleted file mode 100644
index 67f2a74..0000000
--- a/src/lib/ares_strdup.h
+++ /dev/null
@@ -1,24 +0,0 @@
-#ifndef HEADER_CARES_STRDUP_H
-#define HEADER_CARES_STRDUP_H
-
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- *
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
- */
-
-#include "ares_setup.h"
-
-extern char *ares_strdup(const char *s1);
-
-#endif /* HEADER_CARES_STRDUP_H */
diff --git a/src/lib/ares_strerror.c b/src/lib/ares_strerror.c
index c3ecbd7..fd583c5 100644
--- a/src/lib/ares_strerror.c
+++ b/src/lib/ares_strerror.c
@@ -1,17 +1,28 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -20,37 +31,61 @@
const char *ares_strerror(int code)
{
- /* Return a string literal from a table. */
- const char *errtext[] = {
- "Successful completion",
- "DNS server returned answer with no data",
- "DNS server claims query was misformatted",
- "DNS server returned general failure",
- "Domain name not found",
- "DNS server does not implement requested operation",
- "DNS server refused query",
- "Misformatted DNS query",
- "Misformatted domain name",
- "Unsupported address family",
- "Misformatted DNS reply",
- "Could not contact DNS servers",
- "Timeout while contacting DNS servers",
- "End of file",
- "Error reading file",
- "Out of memory",
- "Channel is being destroyed",
- "Misformatted string",
- "Illegal flags specified",
- "Given hostname is not numeric",
- "Illegal hints flags specified",
- "c-ares library initialization not yet performed",
- "Error loading iphlpapi.dll",
- "Could not find GetNetworkParams function",
- "DNS query cancelled"
- };
+ ares_status_t status = (ares_status_t)code;
+ switch (status) {
+ case ARES_SUCCESS:
+ return "Successful completion";
+ case ARES_ENODATA:
+ return "DNS server returned answer with no data";
+ case ARES_EFORMERR:
+ return "DNS server claims query was misformatted";
+ case ARES_ESERVFAIL:
+ return "DNS server returned general failure";
+ case ARES_ENOTFOUND:
+ return "Domain name not found";
+ case ARES_ENOTIMP:
+ return "DNS server does not implement requested operation";
+ case ARES_EREFUSED:
+ return "DNS server refused query";
+ case ARES_EBADQUERY:
+ return "Misformatted DNS query";
+ case ARES_EBADNAME:
+ return "Misformatted domain name";
+ case ARES_EBADFAMILY:
+ return "Unsupported address family";
+ case ARES_EBADRESP:
+ return "Misformatted DNS reply";
+ case ARES_ECONNREFUSED:
+ return "Could not contact DNS servers";
+ case ARES_ETIMEOUT:
+ return "Timeout while contacting DNS servers";
+ case ARES_EOF:
+ return "End of file";
+ case ARES_EFILE:
+ return "Error reading file";
+ case ARES_ENOMEM:
+ return "Out of memory";
+ case ARES_EDESTRUCTION:
+ return "Channel is being destroyed";
+ case ARES_EBADSTR:
+ return "Misformatted string";
+ case ARES_EBADFLAGS:
+ return "Illegal flags specified";
+ case ARES_ENONAME:
+ return "Given hostname is not numeric";
+ case ARES_EBADHINTS:
+ return "Illegal hints flags specified";
+ case ARES_ENOTINITIALIZED:
+ return "c-ares library initialization not yet performed";
+ case ARES_ELOADIPHLPAPI:
+ return "Error loading iphlpapi.dll";
+ case ARES_EADDRGETNETWORKPARAMS:
+ return "Could not find GetNetworkParams function";
+ case ARES_ECANCELLED:
+ return "DNS query cancelled";
+ case ARES_ESERVICE:
+ return "Invalid service name or number";
+ }
- if(code >= 0 && code < (int)(sizeof(errtext) / sizeof(*errtext)))
- return errtext[code];
- else
- return "unknown";
+ return "unknown";
}
diff --git a/src/lib/ares_strsplit.c b/src/lib/ares_strsplit.c
index 97b4e5d..117fc62 100644
--- a/src/lib/ares_strsplit.c
+++ b/src/lib/ares_strsplit.c
@@ -1,178 +1,117 @@
-/* Copyright (C) 2018 by John Schember <john@nachtimwald.com>
+/* MIT License
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * Copyright (c) 2018 John Schember
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#if defined(__MVS__)
-#include <strings.h>
+# include <strings.h>
#endif
#include "ares_setup.h"
-#include "ares_strsplit.h"
#include "ares.h"
#include "ares_private.h"
-static int list_contains(char * const *list, size_t num_elem, const char *str, int insensitive)
-{
- size_t len;
- size_t i;
-
- len = strlen(str);
- for (i=0; i<num_elem; i++)
- {
- if (insensitive)
- {
-#ifdef WIN32
- if (strnicmp(list[i], str, len) == 0)
-#else
- if (strncasecmp(list[i], str, len) == 0)
-#endif
- return 1;
- }
- else
- {
- if (strncmp(list[i], str, len) == 0)
- return 1;
- }
- }
-
- return 0;
-}
-
-static int is_delim(char c, const char *delims, size_t num_delims)
-{
- size_t i;
-
- for (i=0; i<num_delims; i++)
- {
- if (c == delims[i])
- return 1;
- }
- return 0;
-}
-
-
-void ares_strsplit_free(char **elms, size_t num_elm)
+void ares__strsplit_free(char **elms, size_t num_elm)
{
size_t i;
- if (elms == NULL)
+ if (elms == NULL) {
return;
+ }
- for (i=0; i<num_elm; i++)
+ for (i = 0; i < num_elm; i++) {
ares_free(elms[i]);
+ }
ares_free(elms);
}
-
-char **ares_strsplit(const char *in, const char *delms, int make_set, size_t *num_elm)
+char **ares__strsplit(const char *in, const char *delms, size_t *num_elm)
{
- char *parsestr;
- char **temp;
- char **out;
- size_t cnt;
- size_t nelms;
- size_t in_len;
- size_t num_delims;
- size_t i;
-
- if (in == NULL || delms == NULL || num_elm == NULL)
+ const char *p;
+ char **table;
+ void *tmp;
+ size_t i;
+ size_t j;
+ size_t k;
+ size_t count;
+
+ if (in == NULL || delms == NULL || num_elm == NULL) {
return NULL;
+ }
*num_elm = 0;
- in_len = strlen(in);
- num_delims = strlen(delms);
-
- /* Figure out how many elements. */
- nelms = 1;
- for (i=0; i<in_len; i++)
- {
- if (is_delim(in[i], delms, num_delims))
- {
- nelms++;
+ /* count non-empty delimited substrings */
+ count = 0;
+ p = in;
+ do {
+ i = strcspn(p, delms);
+ if (i != 0) {
+ /* string is non-empty */
+ count++;
+ p += i;
}
- }
+ } while (*p++ != 0);
- /* Copy of input so we can cut it up. */
- parsestr = ares_strdup(in);
- if (parsestr == NULL)
- return NULL;
-
- /* Temporary array to store locations of start of each element
- * within parsestr. */
- temp = ares_malloc(nelms * sizeof(*temp));
- if (temp == NULL)
- {
- ares_free(parsestr);
+ if (count == 0) {
return NULL;
}
- temp[0] = parsestr;
- cnt = 1;
- for (i=0; i<in_len && cnt<nelms; i++)
- {
- if (!is_delim(parsestr[i], delms, num_delims))
- continue;
-
- /* Replace sep with NULL. */
- parsestr[i] = '\0';
- /* Add the pointer to the array of elements */
- temp[cnt] = parsestr+i+1;
- cnt++;
- }
-
- /* Copy each element to our output array. */
- out = ares_malloc(nelms * sizeof(*out));
- if (out == NULL)
- {
- ares_free(parsestr);
- ares_free(temp);
+ table = ares_malloc(count * sizeof(*table));
+ if (table == NULL) {
return NULL;
}
- nelms = 0;
- for (i=0; i<cnt; i++)
- {
- if (temp[i][0] == '\0')
- continue;
-
- if (make_set && list_contains(out, nelms, temp[i], 1))
- continue;
-
- out[nelms] = ares_strdup(temp[i]);
- if (out[nelms] == NULL)
- {
- ares_strsplit_free(out, nelms);
- ares_free(parsestr);
- ares_free(temp);
- return NULL;
+ j = 0; /* current table entry */
+ /* re-calculate indices and allocate new strings for table */
+ for (p = in; j < count; p += i + 1) {
+ i = strcspn(p, delms);
+ if (i != 0) {
+ for (k = 0; k < j; k++) {
+ if (strncasecmp(table[k], p, i) == 0 && table[k][i] == 0) {
+ break;
+ }
+ }
+ if (k == j) {
+ /* copy unique strings only */
+ table[j] = ares_malloc(i + 1);
+ if (table[j] == NULL) {
+ ares__strsplit_free(table, j);
+ return NULL;
+ }
+ ares_strcpy(table[j], p, i + 1);
+ j++;
+ } else {
+ count--;
+ }
}
- nelms++;
}
-
- /* If there are no elements don't return an empty allocated
- * array. */
- if (nelms == 0)
- {
- ares_strsplit_free(out, nelms);
- out = NULL;
+ tmp = ares_realloc(table, count * sizeof(*table));
+ if (tmp != NULL) {
+ table = tmp;
}
- /* Get the true number of elements (recalculated because of make_set) */
- *num_elm = nelms;
-
- ares_free(parsestr);
- ares_free(temp);
- return out;
+ *num_elm = count;
+ return table;
}
diff --git a/src/lib/ares_strsplit.h b/src/lib/ares_strsplit.h
index e00fd14..2f43338 100644
--- a/src/lib/ares_strsplit.h
+++ b/src/lib/ares_strsplit.h
@@ -1,43 +1,51 @@
+/* MIT License
+ *
+ * Copyright (c) 2018 John Schember
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#ifndef HEADER_CARES_STRSPLIT_H
#define HEADER_CARES_STRSPLIT_H
-/* Copyright (C) 2018 by John Schember <john@nachtimwald.com>
- *
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
- */
-
#include "ares_setup.h"
-/* Split a string on delem skipping empty elements.
+/* Split a string on delms skipping empty or duplicate elements.
*
* param in String to split.
- * param delims String of characters to treat as a delimitor.
- * Each character in the string is a delimitor so
- * there can be multiple delimitors to split on.
- * E.g. ", " will split on all comma's and spaces.
- * param make_set Have the list be a Set where there are no
- * duplicate entries. 1 for true, 0 or false.
+ * param delms String of characters to treat as a delimitor.
+ * Each character in the string is a delimitor so
+ * there can be multiple delimitors to split on.
+ * E.g. ", " will split on all comma's and spaces.
+ * Duplicate entries are removed.
* param num_elm Return parameter of the number of elements
* in the result array.
*
* returns an allocated array of allocated string elements.
*
*/
-char **ares_strsplit(const char *in, const char *delms, int make_set, size_t *num_elm);
+char **ares__strsplit(const char *in, const char *delms, size_t *num_elm);
-/* Frees the result returned from ares_strsplit(). */
-void ares_strsplit_free(char **elms, size_t num_elm);
+/* Frees the result returned from ares__strsplit(). */
+void ares__strsplit_free(char **elms, size_t num_elm);
#endif /* HEADER_CARES_STRSPLIT_H */
-
diff --git a/src/lib/ares_timeout.c b/src/lib/ares_timeout.c
index 293e4af..f1f77b7 100644
--- a/src/lib/ares_timeout.c
+++ b/src/lib/ares_timeout.c
@@ -1,23 +1,34 @@
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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:
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
#ifdef HAVE_LIMITS_H
-#include <limits.h>
+# include <limits.h>
#endif
#include "ares.h"
@@ -26,63 +37,57 @@
/* return time offset between now and (future) check, in milliseconds */
static long timeoffset(struct timeval *now, struct timeval *check)
{
- return (check->tv_sec - now->tv_sec)*1000 +
- (check->tv_usec - now->tv_usec)/1000;
+ return (check->tv_sec - now->tv_sec) * 1000 +
+ (check->tv_usec - now->tv_usec) / 1000;
}
-/* WARNING: Beware that this is linear in the number of outstanding
- * requests! You are probably far better off just calling ares_process()
- * once per second, rather than calling ares_timeout() to figure out
- * when to next call ares_process().
- */
struct timeval *ares_timeout(ares_channel channel, struct timeval *maxtv,
struct timeval *tvbuf)
{
- struct query *query;
- struct list_node* list_head;
- struct list_node* list_node;
- struct timeval now;
- struct timeval nextstop;
- long offset, min_offset;
+ struct query *query;
+ ares__slist_node_t *node;
+ struct timeval now;
+ long offset;
- /* No queries, no timeout (and no fetch of the current time). */
- if (ares__is_list_empty(&(channel->all_queries)))
- return maxtv;
+ /* The minimum timeout of all queries is always the first entry in
+ * channel->queries_by_timeout */
+ node = ares__slist_node_first(channel->queries_by_timeout);
+ /* no queries/timeout */
+ if (node == NULL) {
+ return maxtv; /* <-- maxtv can be null though, hrm */
+ }
+
+ query = ares__slist_node_val(node);
- /* Find the minimum timeout for the current set of queries. */
now = ares__tvnow();
- min_offset = -1;
- list_head = &(channel->all_queries);
- for (list_node = list_head->next; list_node != list_head;
- list_node = list_node->next)
- {
- query = list_node->data;
- if (query->timeout.tv_sec == 0)
- continue;
- offset = timeoffset(&now, &query->timeout);
- if (offset < 0)
- offset = 0;
- if (min_offset == -1 || offset < min_offset)
- min_offset = offset;
- }
+ offset = timeoffset(&now, &query->timeout);
+ if (offset < 0) {
+ offset = 0;
+ }
+ if (offset > (long)INT_MAX) {
+ offset = INT_MAX;
+ }
+
+ tvbuf->tv_sec = offset / 1000;
+ tvbuf->tv_usec = (offset % 1000) * 1000;
- /* If we found a minimum timeout and it's sooner than the one specified in
- * maxtv (if any), return it. Otherwise go with maxtv.
- */
- if (min_offset != -1)
- {
- int ioffset = (min_offset > (long)INT_MAX) ? INT_MAX : (int)min_offset;
+ if (maxtv == NULL) {
+ return tvbuf;
+ }
- nextstop.tv_sec = ioffset/1000;
- nextstop.tv_usec = (ioffset%1000)*1000;
+ /* Return the minimum time between maxtv and tvbuf */
- if (!maxtv || ares__timedout(maxtv, &nextstop))
- {
- *tvbuf = nextstop;
- return tvbuf;
- }
- }
+ if (tvbuf->tv_sec > maxtv->tv_sec) {
+ return maxtv;
+ }
+ if (tvbuf->tv_sec < maxtv->tv_sec) {
+ return tvbuf;
+ }
+
+ if (tvbuf->tv_usec > maxtv->tv_usec) {
+ return maxtv;
+ }
- return maxtv;
+ return tvbuf;
}
diff --git a/src/lib/ares_version.c b/src/lib/ares_version.c
index 4f8c42f..ca15fa7 100644
--- a/src/lib/ares_version.c
+++ b/src/lib/ares_version.c
@@ -1,11 +1,37 @@
-
+/* MIT License
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares_setup.h"
#include "ares.h"
const char *ares_version(int *version)
{
- if(version)
+ if (version) {
*version = ARES_VERSION;
+ }
return ARES_VERSION_STR;
}
diff --git a/src/lib/ares_writev.c b/src/lib/ares_writev.c
deleted file mode 100644
index e812c09..0000000
--- a/src/lib/ares_writev.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- *
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
- */
-
-#include "ares_setup.h"
-
-#ifdef HAVE_LIMITS_H
-# include <limits.h>
-#endif
-
-#include "ares.h"
-#include "ares_private.h"
-
-#ifndef HAVE_WRITEV
-ares_ssize_t ares_writev(ares_socket_t s, const struct iovec *iov, int iovcnt)
-{
- char *buffer, *bp;
- int i;
- size_t bytes = 0;
- ares_ssize_t result;
-
- /* Validate iovcnt */
- if (iovcnt <= 0)
- {
- SET_ERRNO(EINVAL);
- return (-1);
- }
-
- /* Validate and find the sum of the iov_len values in the iov array */
- for (i = 0; i < iovcnt; i++)
- {
- if (iov[i].iov_len > INT_MAX - bytes)
- {
- SET_ERRNO(EINVAL);
- return (-1);
- }
- bytes += iov[i].iov_len;
- }
-
- if (bytes == 0)
- return (0);
-
- /* Allocate a temporary buffer to hold the data */
- buffer = ares_malloc(bytes);
- if (!buffer)
- {
- SET_ERRNO(ENOMEM);
- return (-1);
- }
-
- /* Copy the data into buffer */
- for (bp = buffer, i = 0; i < iovcnt; ++i)
- {
- memcpy (bp, iov[i].iov_base, iov[i].iov_len);
- bp += iov[i].iov_len;
- }
-
- /* Send buffer contents */
- result = swrite(s, buffer, bytes);
-
- ares_free(buffer);
-
- return (result);
-}
-#endif
-
diff --git a/src/lib/ares_writev.h b/src/lib/ares_writev.h
deleted file mode 100644
index 65cea87..0000000
--- a/src/lib/ares_writev.h
+++ /dev/null
@@ -1,36 +0,0 @@
-#ifndef HEADER_CARES_WRITEV_H
-#define HEADER_CARES_WRITEV_H
-
-
-/* Copyright 1998 by the Massachusetts Institute of Technology.
- *
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
- */
-
-#include "ares_setup.h"
-#include "ares.h"
-
-#ifndef HAVE_WRITEV
-
-/* Structure for scatter/gather I/O. */
-struct iovec
-{
- void *iov_base; /* Pointer to data. */
- size_t iov_len; /* Length of data. */
-};
-
-extern ares_ssize_t ares_writev(ares_socket_t s, const struct iovec *iov, int iovcnt);
-
-#endif
-
-#endif /* HEADER_CARES_WRITEV_H */
diff --git a/src/lib/bitncmp.c b/src/lib/bitncmp.c
index 1468d49..0296316 100644
--- a/src/lib/bitncmp.c
+++ b/src/lib/bitncmp.c
@@ -1,4 +1,3 @@
-
/*
* Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
* Copyright (c) 1996,1999 by Internet Software Consortium.
@@ -14,12 +13,14 @@
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#ifndef HAVE_BITNCMP
-#include "ares_setup.h"
-#include "bitncmp.h"
+# include "ares_setup.h"
+# include "bitncmp.h"
/*
* int
@@ -33,22 +34,26 @@
* author:
* Paul Vixie (ISC), June 1996
*/
-int ares__bitncmp(const void *l, const void *r, int n)
+int ares__bitncmp(const void *l, const void *r, size_t n)
{
- unsigned int lb, rb;
- int x, b;
+ size_t lb;
+ size_t rb;
+ ares_ssize_t x;
+ size_t b;
b = n / 8;
x = memcmp(l, r, b);
- if (x || (n % 8) == 0)
- return (x);
+ if (x || (n % 8) == 0) {
+ return (int)x;
+ }
lb = ((const unsigned char *)l)[b];
rb = ((const unsigned char *)r)[b];
for (b = n % 8; b > 0; b--) {
if ((lb & 0x80) != (rb & 0x80)) {
- if (lb & 0x80)
+ if (lb & 0x80) {
return (1);
+ }
return (-1);
}
lb <<= 1;
diff --git a/src/lib/bitncmp.h b/src/lib/bitncmp.h
index 7b8d66c..0c4b9c3 100644
--- a/src/lib/bitncmp.h
+++ b/src/lib/bitncmp.h
@@ -1,26 +1,35 @@
-#ifndef __ARES_BITNCMP_H
-#define __ARES_BITNCMP_H
-
-
-/* Copyright (C) 2005, 2013 by Dominick Meglio
+/* MIT License
+ *
+ * Copyright (c) 2005 Dominick Meglio
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
+#ifndef __ARES_BITNCMP_H
+#define __ARES_BITNCMP_H
#ifndef HAVE_BITNCMP
-int ares__bitncmp(const void *l, const void *r, int n);
+int ares__bitncmp(const void *l, const void *r, size_t n);
#else
-#define ares__bitncmp(x,y,z) bitncmp(x,y,z)
+# define ares__bitncmp(x, y, z) bitncmp(x, y, z)
#endif
#endif /* __ARES_BITNCMP_H */
diff --git a/src/lib/cares.rc b/src/lib/cares.rc
index 6360834..9275b07 100644
--- a/src/lib/cares.rc
+++ b/src/lib/cares.rc
@@ -1,17 +1,27 @@
-
-/* Copyright (C) 2009-2021 by Daniel Stenberg
+/* MIT License
+ *
+ * Copyright (c) 2009 Daniel Stenberg
+ *
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * SPDX-License-Identifier: MIT
*/
#include <winver.h>
diff --git a/src/lib/config-dos.h b/src/lib/config-dos.h
index b241d69..301fee4 100644
--- a/src/lib/config-dos.h
+++ b/src/lib/config-dos.h
@@ -2,61 +2,64 @@
#define HEADER_CONFIG_DOS_H
-/* ================================================================ */
-/* ares/config-dos.h - Hand crafted config file for DOS */
-/* ================================================================ */
-
-#define PACKAGE "c-ares"
-
-#define HAVE_ERRNO_H 1
-#define HAVE_GETENV 1
-#define HAVE_GETTIMEOFDAY 1
-#define HAVE_IOCTLSOCKET 1
-#define HAVE_IOCTLSOCKET_FIONBIO 1
-#define HAVE_LIMITS_H 1
-#define HAVE_NET_IF_H 1
-#define HAVE_RECV 1
-#define HAVE_RECVFROM 1
-#define HAVE_SEND 1
-#define HAVE_STRDUP 1
-#define HAVE_STRICMP 1
-#define HAVE_STRUCT_IN6_ADDR 1
-#define HAVE_STRUCT_TIMEVAL 1
-#define HAVE_SYS_IOCTL_H 1
-#define HAVE_SYS_SOCKET_H 1
-#define HAVE_SYS_STAT_H 1
-#define HAVE_SYS_TYPES_H 1
-#define HAVE_TIME_H 1
-#define HAVE_UNISTD_H 1
-#define HAVE_WRITEV 1
-
-#define NEED_MALLOC_H 1
-
-#define RETSIGTYPE void
-#define TIME_WITH_SYS_TIME 1
+/* ================================================================
+ * ares/config-dos.h - Hand crafted config file for DOS
+ *
+ * Copyright (C) The c-ares project and its contributors
+ * SPDX-License-Identifier: MIT
+ * ================================================================ */
+
+#define PACKAGE "c-ares"
+
+#define HAVE_ERRNO_H 1
+#define HAVE_GETENV 1
+#define HAVE_GETTIMEOFDAY 1
+#define HAVE_IOCTLSOCKET 1
+#define HAVE_IOCTLSOCKET_FIONBIO 1
+#define HAVE_LIMITS_H 1
+#define HAVE_NET_IF_H 1
+#define HAVE_RECV 1
+#define HAVE_RECVFROM 1
+#define HAVE_SEND 1
+#define HAVE_STRDUP 1
+#define HAVE_STRICMP 1
+#define HAVE_STRUCT_IN6_ADDR 1
+#define HAVE_STRUCT_TIMEVAL 1
+#define HAVE_SYS_IOCTL_H 1
+#define HAVE_SYS_SOCKET_H 1
+#define HAVE_SYS_STAT_H 1
+#define HAVE_SYS_TYPES_H 1
+#define HAVE_TIME_H 1
+#define HAVE_UNISTD_H 1
+#define HAVE_WRITEV 1
+
+#define NEED_MALLOC_H 1
+
+#define RETSIGTYPE void
+#define TIME_WITH_SYS_TIME 1
/* Qualifiers for send(), recv(), recvfrom() and getnameinfo(). */
-#define SEND_TYPE_ARG1 int
-#define SEND_QUAL_ARG2 const
-#define SEND_TYPE_ARG2 void *
-#define SEND_TYPE_ARG3 int
-#define SEND_TYPE_ARG4 int
-#define SEND_TYPE_RETV int
-
-#define RECV_TYPE_ARG1 int
-#define RECV_TYPE_ARG2 void *
-#define RECV_TYPE_ARG3 int
-#define RECV_TYPE_ARG4 int
-#define RECV_TYPE_RETV int
-
-#define RECVFROM_TYPE_ARG1 int
-#define RECVFROM_TYPE_ARG2 void
-#define RECVFROM_TYPE_ARG3 int
-#define RECVFROM_TYPE_ARG4 int
-#define RECVFROM_TYPE_ARG5 struct sockaddr
-#define RECVFROM_TYPE_ARG6 int
-#define RECVFROM_TYPE_RETV int
+#define SEND_TYPE_ARG1 int
+#define SEND_QUAL_ARG2 const
+#define SEND_TYPE_ARG2 void *
+#define SEND_TYPE_ARG3 int
+#define SEND_TYPE_ARG4 int
+#define SEND_TYPE_RETV int
+
+#define RECV_TYPE_ARG1 int
+#define RECV_TYPE_ARG2 void *
+#define RECV_TYPE_ARG3 int
+#define RECV_TYPE_ARG4 int
+#define RECV_TYPE_RETV int
+
+#define RECVFROM_TYPE_ARG1 int
+#define RECVFROM_TYPE_ARG2 void
+#define RECVFROM_TYPE_ARG3 int
+#define RECVFROM_TYPE_ARG4 int
+#define RECVFROM_TYPE_ARG5 struct sockaddr
+#define RECVFROM_TYPE_ARG6 int
+#define RECVFROM_TYPE_RETV int
#define RECVFROM_TYPE_ARG2_IS_VOID 1
#define BSD
@@ -64,52 +67,51 @@
/* Target HAVE_x section */
#if defined(DJGPP)
- #undef _SSIZE_T
- #include <sys/types.h> /* For 'ssize_t' */
+# undef _SSIZE_T
+# include <sys/types.h> /* For 'ssize_t' */
- #define HAVE_STRCASECMP 1
- #define HAVE_STRNCASECMP 1
- #define HAVE_SYS_TIME_H 1
- #define HAVE_VARIADIC_MACROS_GCC 1
+# define HAVE_STRCASECMP 1
+# define HAVE_STRNCASECMP 1
+# define HAVE_SYS_TIME_H 1
+# define HAVE_VARIADIC_MACROS_GCC 1
- /* Because djgpp <= 2.03 doesn't have snprintf() etc. */
- #if (DJGPP_MINOR < 4)
- #define _MPRINTF_REPLACE
- #endif
+/* Because djgpp <= 2.03 doesn't have snprintf() etc. */
+# if (DJGPP_MINOR < 4)
+# define _MPRINTF_REPLACE
+# endif
#elif defined(__WATCOMC__)
- #define HAVE_STRCASECMP 1
+# define HAVE_STRCASECMP 1
#elif defined(__HIGHC__)
- #define HAVE_SYS_TIME_H 1
- #define strerror(e) strerror_s_((e))
+# define HAVE_SYS_TIME_H 1
+# define strerror(e) strerror_s_((e))
#endif
#ifdef WATT32
- #define HAVE_AF_INET6 1
- #define HAVE_ARPA_INET_H 1
- #define HAVE_ARPA_NAMESER_H 1
- #define HAVE_CLOSE_S 1
- #define HAVE_GETHOSTNAME 1
- #define HAVE_NETDB_H 1
- #define HAVE_NETINET_IN_H 1
- #define HAVE_NETINET_TCP_H 1
- #define HAVE_PF_INET6 1
- #define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
- #define HAVE_STRUCT_ADDRINFO 1
- #define HAVE_STRUCT_IN6_ADDR 1
- #define HAVE_STRUCT_SOCKADDR_IN6 1
- #define HAVE_SYS_SOCKET_H 1
- #define HAVE_SYS_UIO_H 1
- #define NS_INADDRSZ 4
- #define HAVE_STRUCT_SOCKADDR_IN6 1
-
- #define HAVE_GETSERVBYPORT_R 1
- #define GETSERVBYPORT_R_ARGS 5
+# define HAVE_AF_INET6 1
+# define HAVE_ARPA_INET_H 1
+# define HAVE_ARPA_NAMESER_H 1
+# define HAVE_CLOSE_S 1
+# define HAVE_GETHOSTNAME 1
+# define HAVE_NETDB_H 1
+# define HAVE_NETINET_IN_H 1
+# define HAVE_NETINET_TCP_H 1
+# define HAVE_PF_INET6 1
+# define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
+# define HAVE_STRUCT_ADDRINFO 1
+# define HAVE_STRUCT_IN6_ADDR 1
+# define HAVE_STRUCT_SOCKADDR_IN6 1
+# define HAVE_SYS_SOCKET_H 1
+# define HAVE_SYS_UIO_H 1
+# define NS_INADDRSZ 4
+# define HAVE_STRUCT_SOCKADDR_IN6 1
+
+# define HAVE_GETSERVBYPORT_R 1
+# define GETSERVBYPORT_R_ARGS 5
#endif
#undef word
#undef byte
#endif /* HEADER_CONFIG_DOS_H */
-
diff --git a/src/lib/config-win32.h b/src/lib/config-win32.h
index cc8e443..ddba7e4 100644
--- a/src/lib/config-win32.h
+++ b/src/lib/config-win32.h
@@ -1,18 +1,30 @@
-#ifndef HEADER_CARES_CONFIG_WIN32_H
-#define HEADER_CARES_CONFIG_WIN32_H
-
-/* Copyright (C) 2004 - 2011 by Daniel Stenberg et al
+/* MIT License
+ *
+ * Copyright (c) 2004 Daniel Stenberg
+ *
+ * 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:
*
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, 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.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
+#ifndef HEADER_CARES_CONFIG_WIN32_H
+#define HEADER_CARES_CONFIG_WIN32_H
/* ================================================================ */
/* c-ares/config-win32.h - Hand crafted config file for Windows */
@@ -30,7 +42,7 @@
/* Define if you have the <getopt.h> header file. */
#if defined(__MINGW32__) || defined(__POCC__)
-#define HAVE_GETOPT_H 1
+# define HAVE_GETOPT_H 1
#endif
/* Define if you have the <limits.h> header file. */
@@ -38,7 +50,7 @@
/* Define if you have the <process.h> header file. */
#ifndef __SALFORDC__
-#define HAVE_PROCESS_H 1
+# define HAVE_PROCESS_H 1
#endif
/* Define if you have the <signal.h> header file. */
@@ -52,8 +64,8 @@
/* Define if you have the <unistd.h> header file. */
#if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__) || \
- defined(__POCC__)
-#define HAVE_UNISTD_H 1
+ defined(__POCC__)
+# define HAVE_UNISTD_H 1
#endif
/* Define if you have the <windows.h> header file. */
@@ -64,12 +76,12 @@
/* Define if you have the <winsock2.h> header file. */
#ifndef __SALFORDC__
-#define HAVE_WINSOCK2_H 1
+# define HAVE_WINSOCK2_H 1
#endif
/* Define if you have the <ws2tcpip.h> header file. */
#ifndef __SALFORDC__
-#define HAVE_WS2TCPIP_H 1
+# define HAVE_WS2TCPIP_H 1
#endif
/* ---------------------------------------------------------------- */
@@ -184,21 +196,21 @@
/* Specifics for the Watt-32 tcp/ip stack. */
#ifdef WATT32
- #define SOCKET int
- #define NS_INADDRSZ 4
- #define HAVE_ARPA_NAMESER_H 1
- #define HAVE_ARPA_INET_H 1
- #define HAVE_NETDB_H 1
- #define HAVE_NETINET_IN_H 1
- #define HAVE_SYS_SOCKET_H 1
- #define HAVE_NETINET_TCP_H 1
- #define HAVE_AF_INET6 1
- #define HAVE_PF_INET6 1
- #define HAVE_STRUCT_IN6_ADDR 1
- #define HAVE_STRUCT_SOCKADDR_IN6 1
- #undef HAVE_WINSOCK_H
- #undef HAVE_WINSOCK2_H
- #undef HAVE_WS2TCPIP_H
+# define SOCKET int
+# define NS_INADDRSZ 4
+# define HAVE_ARPA_NAMESER_H 1
+# define HAVE_ARPA_INET_H 1
+# define HAVE_NETDB_H 1
+# define HAVE_NETINET_IN_H 1
+# define HAVE_SYS_SOCKET_H 1
+# define HAVE_NETINET_TCP_H 1
+# define HAVE_AF_INET6 1
+# define HAVE_PF_INET6 1
+# define HAVE_STRUCT_IN6_ADDR 1
+# define HAVE_STRUCT_SOCKADDR_IN6 1
+# undef HAVE_WINSOCK_H
+# undef HAVE_WINSOCK2_H
+# undef HAVE_WS2TCPIP_H
#endif
/* ---------------------------------------------------------------- */
@@ -213,7 +225,7 @@
#ifdef __cplusplus
/* Compiling headers in C++ mode means bool is available */
-#define HAVE_BOOL_T
+# define HAVE_BOOL_T
#endif
/* ---------------------------------------------------------------- */
@@ -229,7 +241,7 @@
/* Define if you have struct sockaddr_storage. */
#if !defined(__SALFORDC__) && !defined(__BORLANDC__)
-#define HAVE_STRUCT_SOCKADDR_STORAGE 1
+# define HAVE_STRUCT_SOCKADDR_STORAGE 1
#endif
/* Define if you have struct timeval. */
@@ -241,7 +253,7 @@
/* Define to avoid VS2005 complaining about portable C functions. */
#if defined(_MSC_VER) && (_MSC_VER >= 1400)
-# define _CRT_SECURE_NO_DEPRECATE 1
+# define _CRT_SECURE_NO_DEPRECATE 1
# define _CRT_NONSTDC_NO_DEPRECATE 1
#endif
@@ -308,27 +320,27 @@
/* Define if you have address family AF_INET6. */
#ifdef HAVE_WINSOCK2_H
-#define HAVE_AF_INET6 1
+# define HAVE_AF_INET6 1
#endif
/* Define if you have protocol family PF_INET6. */
#ifdef HAVE_WINSOCK2_H
-#define HAVE_PF_INET6 1
+# define HAVE_PF_INET6 1
#endif
/* Define if you have struct in6_addr. */
#ifdef HAVE_WS2TCPIP_H
-#define HAVE_STRUCT_IN6_ADDR 1
+# define HAVE_STRUCT_IN6_ADDR 1
#endif
/* Define if you have struct sockaddr_in6. */
#ifdef HAVE_WS2TCPIP_H
-#define HAVE_STRUCT_SOCKADDR_IN6 1
+# define HAVE_STRUCT_SOCKADDR_IN6 1
#endif
/* Define if you have sockaddr_in6 with scopeid. */
#ifdef HAVE_WS2TCPIP_H
-#define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
+# define HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1
#endif
/* ---------------------------------------------------------------- */
@@ -342,10 +354,10 @@
*/
#if defined(_WIN32_WCE) && !defined(HAVE_ERRNO_H)
-# define ENOENT ERROR_FILE_NOT_FOUND
-# define ESRCH ERROR_PATH_NOT_FOUND
-# define ENOMEM ERROR_NOT_ENOUGH_MEMORY
-# define ENOSPC ERROR_INVALID_PARAMETER
+# define ENOENT ERROR_FILE_NOT_FOUND
+# define ESRCH ERROR_PATH_NOT_FOUND
+# define ENOMEM ERROR_NOT_ENOUGH_MEMORY
+# define ENOSPC ERROR_INVALID_PARAMETER
#endif
#endif /* HEADER_CARES_CONFIG_WIN32_H */
diff --git a/src/lib/inet_net_pton.c b/src/lib/inet_net_pton.c
index 840de50..175bc24 100644
--- a/src/lib/inet_net_pton.c
+++ b/src/lib/inet_net_pton.c
@@ -1,19 +1,21 @@
-
/*
- * Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (c) 2012 by Gilles Chehade <gilles@openbsd.org>
* Copyright (c) 1996,1999 by Internet Software Consortium.
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
- * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
- * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
+ * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
+ * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -29,14 +31,12 @@
#include "ares.h"
#include "ares_ipv6.h"
-#include "ares_nowarn.h"
#include "ares_inet_net_pton.h"
+#include "ares_private.h"
-const struct ares_in6_addr ares_in6addr_any = { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } };
-
-
-#ifndef HAVE_INET_NET_PTON
+const struct ares_in6_addr ares_in6addr_any = { { { 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0 } } };
/*
* static int
@@ -59,325 +59,338 @@ const struct ares_in6_addr ares_in6addr_any = { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,
* author:
* Paul Vixie (ISC), June 1996
*/
-static int
-inet_net_pton_ipv4(const char *src, unsigned char *dst, size_t size)
+static int ares_inet_net_pton_ipv4(const char *src, unsigned char *dst,
+ size_t size)
{
- static const char xdigits[] = "0123456789abcdef";
- static const char digits[] = "0123456789";
- int n, ch, tmp = 0, dirty, bits;
+ static const char xdigits[] = "0123456789abcdef";
+ static const char digits[] = "0123456789";
+ int n;
+ int ch;
+ int tmp = 0;
+ int dirty;
+ int bits;
const unsigned char *odst = dst;
ch = *src++;
- if (ch == '0' && (src[0] == 'x' || src[0] == 'X')
- && ISASCII(src[1])
- && ISXDIGIT(src[1])) {
+ if (ch == '0' && (src[0] == 'x' || src[0] == 'X') && ISASCII(src[1]) &&
+ ISXDIGIT(src[1])) {
/* Hexadecimal: Eat nybble string. */
- if (!size)
+ if (!size) {
goto emsgsize;
+ }
dirty = 0;
- src++; /* skip x or X. */
+ src++; /* skip x or X. */
while ((ch = *src++) != '\0' && ISASCII(ch) && ISXDIGIT(ch)) {
- if (ISUPPER(ch))
+ if (ISUPPER(ch)) {
ch = tolower(ch);
- n = aresx_sztosi(strchr(xdigits, ch) - xdigits);
- if (dirty == 0)
+ }
+ n = (int)(strchr(xdigits, ch) - xdigits);
+ if (dirty == 0) {
tmp = n;
- else
+ } else {
tmp = (tmp << 4) | n;
+ }
if (++dirty == 2) {
- if (!size--)
+ if (!size--) {
goto emsgsize;
- *dst++ = (unsigned char) tmp;
- dirty = 0;
+ }
+ *dst++ = (unsigned char)tmp;
+ dirty = 0;
}
}
- if (dirty) { /* Odd trailing nybble? */
- if (!size--)
+ if (dirty) { /* Odd trailing nybble? */
+ if (!size--) {
goto emsgsize;
- *dst++ = (unsigned char) (tmp << 4);
+ }
+ *dst++ = (unsigned char)(tmp << 4);
}
} else if (ISASCII(ch) && ISDIGIT(ch)) {
/* Decimal: eat dotted digit string. */
for (;;) {
tmp = 0;
do {
- n = aresx_sztosi(strchr(digits, ch) - digits);
+ n = (int)(strchr(digits, ch) - digits);
tmp *= 10;
tmp += n;
- if (tmp > 255)
+ if (tmp > 255) {
goto enoent;
- } while ((ch = *src++) != '\0' &&
- ISASCII(ch) && ISDIGIT(ch));
- if (!size--)
+ }
+ } while ((ch = *src++) != '\0' && ISASCII(ch) && ISDIGIT(ch));
+ if (!size--) {
goto emsgsize;
- *dst++ = (unsigned char) tmp;
- if (ch == '\0' || ch == '/')
+ }
+ *dst++ = (unsigned char)tmp;
+ if (ch == '\0' || ch == '/') {
break;
- if (ch != '.')
+ }
+ if (ch != '.') {
goto enoent;
+ }
ch = *src++;
- if (!ISASCII(ch) || !ISDIGIT(ch))
+ if (!ISASCII(ch) || !ISDIGIT(ch)) {
goto enoent;
+ }
}
- } else
+ } else {
goto enoent;
+ }
bits = -1;
- if (ch == '/' && ISASCII(src[0]) &&
- ISDIGIT(src[0]) && dst > odst) {
+ if (ch == '/' && ISASCII(src[0]) && ISDIGIT(src[0]) && dst > odst) {
/* CIDR width specifier. Nothing can follow it. */
- ch = *src++; /* Skip over the /. */
+ ch = *src++; /* Skip over the /. */
bits = 0;
do {
- n = aresx_sztosi(strchr(digits, ch) - digits);
+ n = (int)(strchr(digits, ch) - digits);
bits *= 10;
bits += n;
- if (bits > 32)
+ if (bits > 32) {
goto enoent;
+ }
} while ((ch = *src++) != '\0' && ISASCII(ch) && ISDIGIT(ch));
- if (ch != '\0')
+ if (ch != '\0') {
goto enoent;
+ }
}
/* Firey death and destruction unless we prefetched EOS. */
- if (ch != '\0')
+ if (ch != '\0') {
goto enoent;
+ }
/* If nothing was written to the destination, we found no address. */
- if (dst == odst)
- goto enoent; /* LCOV_EXCL_LINE: all valid paths above increment dst */
+ if (dst == odst) {
+ goto enoent; /* LCOV_EXCL_LINE: all valid paths above increment dst */
+ }
/* If no CIDR spec was given, infer width from net class. */
if (bits == -1) {
- if (*odst >= 240) /* Class E */
+ if (*odst >= 240) { /* Class E */
bits = 32;
- else if (*odst >= 224) /* Class D */
+ } else if (*odst >= 224) { /* Class D */
bits = 8;
- else if (*odst >= 192) /* Class C */
+ } else if (*odst >= 192) { /* Class C */
bits = 24;
- else if (*odst >= 128) /* Class B */
+ } else if (*odst >= 128) { /* Class B */
bits = 16;
- else /* Class A */
+ } else { /* Class A */
bits = 8;
+ }
/* If imputed mask is narrower than specified octets, widen. */
- if (bits < ((dst - odst) * 8))
- bits = aresx_sztosi(dst - odst) * 8;
+ if (bits < ((dst - odst) * 8)) {
+ bits = (int)(dst - odst) * 8;
+ }
/*
* If there are no additional bits specified for a class D
* address adjust bits to 4.
*/
- if (bits == 8 && *odst == 224)
+ if (bits == 8 && *odst == 224) {
bits = 4;
+ }
}
/* Extend network to cover the actual mask. */
while (bits > ((dst - odst) * 8)) {
- if (!size--)
+ if (!size--) {
goto emsgsize;
+ }
*dst++ = '\0';
}
return (bits);
- enoent:
+enoent:
SET_ERRNO(ENOENT);
return (-1);
- emsgsize:
+emsgsize:
SET_ERRNO(EMSGSIZE);
return (-1);
}
-static int
-getbits(const char *src, int *bitsp)
+static int getbits(const char *src, size_t *bitsp)
{
static const char digits[] = "0123456789";
- int n;
- int val;
- char ch;
+ size_t n;
+ size_t val;
+ char ch;
val = 0;
- n = 0;
+ n = 0;
while ((ch = *src++) != '\0') {
const char *pch;
pch = strchr(digits, ch);
if (pch != NULL) {
- if (n++ != 0 && val == 0) /* no leading zeros */
+ if (n++ != 0 && val == 0) { /* no leading zeros */
return (0);
+ }
val *= 10;
- val += aresx_sztosi(pch - digits);
- if (val > 128) /* range */
+ val += (size_t)(pch - digits);
+ if (val > 128) { /* range */
return (0);
+ }
continue;
}
return (0);
}
- if (n == 0)
+ if (n == 0) {
return (0);
+ }
*bitsp = val;
return (1);
}
-static int
-getv4(const char *src, unsigned char *dst, int *bitsp)
+static int ares_inet_pton6(const char *src, unsigned char *dst)
{
- static const char digits[] = "0123456789";
- unsigned char *odst = dst;
- int n;
- unsigned int val;
- char ch;
-
- val = 0;
- n = 0;
- while ((ch = *src++) != '\0') {
- const char *pch;
-
- pch = strchr(digits, ch);
- if (pch != NULL) {
- if (n++ != 0 && val == 0) /* no leading zeros */
- return (0);
- val *= 10;
- val += aresx_sztoui(pch - digits);
- if (val > 255) /* range */
- return (0);
- continue;
- }
- if (ch == '.' || ch == '/') {
- if (dst - odst > 3) /* too many octets? */
- return (0);
- *dst++ = (unsigned char)val;
- if (ch == '/')
- return (getbits(src, bitsp));
- val = 0;
- n = 0;
- continue;
- }
- return (0);
- }
- if (n == 0)
- return (0);
- if (dst - odst > 3) /* too many octets? */
- return (0);
- *dst = (unsigned char)val;
- return 1;
-}
-
-static int
-inet_net_pton_ipv6(const char *src, unsigned char *dst, size_t size)
-{
- static const char xdigits_l[] = "0123456789abcdef",
- xdigits_u[] = "0123456789ABCDEF";
- unsigned char tmp[NS_IN6ADDRSZ], *tp, *endp, *colonp;
- const char *xdigits, *curtok;
- int ch, saw_xdigit;
- unsigned int val;
- int digits;
- int bits;
- size_t bytes;
- int words;
- int ipv4;
+ static const char xdigits_l[] = "0123456789abcdef";
+ static const char xdigits_u[] = "0123456789ABCDEF";
+ unsigned char tmp[NS_IN6ADDRSZ];
+ unsigned char *tp;
+ unsigned char *endp;
+ unsigned char *colonp;
+ const char *xdigits;
+ const char *curtok;
+ int ch;
+ int saw_xdigit;
+ int count_xdigit;
+ unsigned int val;
memset((tp = tmp), '\0', NS_IN6ADDRSZ);
- endp = tp + NS_IN6ADDRSZ;
+ endp = tp + NS_IN6ADDRSZ;
colonp = NULL;
/* Leading :: requires some special handling. */
- if (*src == ':')
- if (*++src != ':')
+ if (*src == ':') {
+ if (*++src != ':') {
goto enoent;
- curtok = src;
- saw_xdigit = 0;
- val = 0;
- digits = 0;
- bits = -1;
- ipv4 = 0;
+ }
+ }
+ curtok = src;
+ saw_xdigit = count_xdigit = 0;
+ val = 0;
while ((ch = *src++) != '\0') {
const char *pch;
- if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL)
+ if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL) {
pch = strchr((xdigits = xdigits_u), ch);
+ }
if (pch != NULL) {
+ if (count_xdigit >= 4) {
+ goto enoent;
+ }
val <<= 4;
- val |= aresx_sztoui(pch - xdigits);
- if (++digits > 4)
+ val |= (unsigned int)(pch - xdigits);
+ if (val > 0xffff) {
goto enoent;
+ }
saw_xdigit = 1;
+ count_xdigit++;
continue;
}
if (ch == ':') {
curtok = src;
if (!saw_xdigit) {
- if (colonp)
+ if (colonp) {
goto enoent;
+ }
colonp = tp;
continue;
- } else if (*src == '\0')
+ } else if (*src == '\0') {
goto enoent;
- if (tp + NS_INT16SZ > endp)
- return (0);
- *tp++ = (unsigned char)((val >> 8) & 0xff);
- *tp++ = (unsigned char)(val & 0xff);
- saw_xdigit = 0;
- digits = 0;
- val = 0;
+ }
+ if (tp + NS_INT16SZ > endp) {
+ goto enoent;
+ }
+ *tp++ = (unsigned char)(val >> 8) & 0xff;
+ *tp++ = (unsigned char)val & 0xff;
+ saw_xdigit = 0;
+ count_xdigit = 0;
+ val = 0;
continue;
}
if (ch == '.' && ((tp + NS_INADDRSZ) <= endp) &&
- getv4(curtok, tp, &bits) > 0) {
- tp += NS_INADDRSZ;
- saw_xdigit = 0;
- ipv4 = 1;
- break; /* '\0' was seen by inet_pton4(). */
+ ares_inet_net_pton_ipv4(curtok, tp, NS_INADDRSZ) > 0) {
+ tp += NS_INADDRSZ;
+ saw_xdigit = 0;
+ break; /* '\0' was seen by inet_pton4(). */
}
- if (ch == '/' && getbits(src, &bits) > 0)
- break;
goto enoent;
}
if (saw_xdigit) {
- if (tp + NS_INT16SZ > endp)
+ if (tp + NS_INT16SZ > endp) {
goto enoent;
- *tp++ = (unsigned char)((val >> 8) & 0xff);
- *tp++ = (unsigned char)(val & 0xff);
+ }
+ *tp++ = (unsigned char)(val >> 8) & 0xff;
+ *tp++ = (unsigned char)val & 0xff;
}
- if (bits == -1)
- bits = 128;
-
- words = (bits + 15) / 16;
- if (words < 2)
- words = 2;
- if (ipv4)
- words = 8;
- endp = tmp + 2 * words;
-
if (colonp != NULL) {
/*
* Since some memmove()'s erroneously fail to handle
* overlapping regions, we'll do the shift by hand.
*/
- const ares_ssize_t n = tp - colonp;
- ares_ssize_t i;
+ const int n = (int)(tp - colonp);
+ int i;
- if (tp == endp)
+ if (tp == endp) {
goto enoent;
+ }
for (i = 1; i <= n; i++) {
- *(endp - i) = *(colonp + n - i);
- *(colonp + n - i) = 0;
+ endp[-i] = colonp[n - i];
+ colonp[n - i] = 0;
}
tp = endp;
}
- if (tp != endp)
+ if (tp != endp) {
goto enoent;
+ }
- bytes = (bits + 7) / 8;
- if (bytes > size)
- goto emsgsize;
- memcpy(dst, tmp, bytes);
- return (bits);
+ memcpy(dst, tmp, NS_IN6ADDRSZ);
+ return (1);
- enoent:
+enoent:
SET_ERRNO(ENOENT);
return (-1);
+}
- emsgsize:
- SET_ERRNO(EMSGSIZE);
- return (-1);
+static int ares_inet_net_pton_ipv6(const char *src, unsigned char *dst,
+ size_t size)
+{
+ struct ares_in6_addr in6;
+ int ret;
+ size_t bits;
+ size_t bytes;
+ char buf[INET6_ADDRSTRLEN + sizeof("/128")];
+ char *sep;
+
+ if (ares_strlen(src) >= sizeof buf) {
+ SET_ERRNO(EMSGSIZE);
+ return (-1);
+ }
+ ares_strcpy(buf, src, sizeof buf);
+
+ sep = strchr(buf, '/');
+ if (sep != NULL) {
+ *sep++ = '\0';
+ }
+
+ ret = ares_inet_pton6(buf, (unsigned char *)&in6);
+ if (ret != 1) {
+ return (-1);
+ }
+
+ if (sep == NULL) {
+ bits = 128;
+ } else {
+ if (!getbits(sep, &bits)) {
+ SET_ERRNO(ENOENT);
+ return (-1);
+ }
+ }
+
+ bytes = (bits + 7) / 8;
+ if (bytes > size) {
+ SET_ERRNO(EMSGSIZE);
+ return (-1);
+ }
+ memcpy(dst, &in6, bytes);
+ return (int)bits;
}
/*
@@ -398,47 +411,35 @@ inet_net_pton_ipv6(const char *src, unsigned char *dst, size_t size)
* author:
* Paul Vixie (ISC), June 1996
*/
-int
-ares_inet_net_pton(int af, const char *src, void *dst, size_t size)
+int ares_inet_net_pton(int af, const char *src, void *dst, size_t size)
{
switch (af) {
- case AF_INET:
- return (inet_net_pton_ipv4(src, dst, size));
- case AF_INET6:
- return (inet_net_pton_ipv6(src, dst, size));
- default:
- SET_ERRNO(EAFNOSUPPORT);
- return (-1);
+ case AF_INET:
+ return (ares_inet_net_pton_ipv4(src, dst, size));
+ case AF_INET6:
+ return (ares_inet_net_pton_ipv6(src, dst, size));
+ default:
+ SET_ERRNO(EAFNOSUPPORT);
+ return (-1);
}
}
-#endif /* HAVE_INET_NET_PTON */
-
-#ifndef HAVE_INET_PTON
int ares_inet_pton(int af, const char *src, void *dst)
{
- int result;
+ int result;
size_t size;
- if (af == AF_INET)
+ if (af == AF_INET) {
size = sizeof(struct in_addr);
- else if (af == AF_INET6)
+ } else if (af == AF_INET6) {
size = sizeof(struct ares_in6_addr);
- else
- {
+ } else {
SET_ERRNO(EAFNOSUPPORT);
return -1;
}
result = ares_inet_net_pton(af, src, dst, size);
- if (result == -1 && ERRNO == ENOENT)
+ if (result == -1 && ERRNO == ENOENT) {
return 0;
+ }
return (result > -1 ? 1 : -1);
}
-#else /* HAVE_INET_PTON */
-int ares_inet_pton(int af, const char *src, void *dst)
-{
- /* just relay this to the underlying function */
- return inet_pton(af, src, dst);
-}
-
-#endif
diff --git a/src/lib/inet_ntop.c b/src/lib/inet_ntop.c
index 6645c0a..f342c5b 100644
--- a/src/lib/inet_ntop.c
+++ b/src/lib/inet_ntop.c
@@ -13,6 +13,8 @@
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
* OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -28,6 +30,7 @@
#include "ares.h"
#include "ares_ipv6.h"
+#include "ares_private.h"
#ifndef HAVE_INET_NTOP
@@ -52,17 +55,17 @@ static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size);
* author:
* Paul Vixie, 1996.
*/
-const char *
-ares_inet_ntop(int af, const void *src, char *dst, ares_socklen_t size)
+const char *ares_inet_ntop(int af, const void *src, char *dst,
+ ares_socklen_t size)
{
switch (af) {
- case AF_INET:
- return (inet_ntop4(src, dst, (size_t)size));
- case AF_INET6:
- return (inet_ntop6(src, dst, (size_t)size));
- default:
- SET_ERRNO(EAFNOSUPPORT);
- return (NULL);
+ case AF_INET:
+ return (inet_ntop4(src, dst, (size_t)size));
+ case AF_INET6:
+ return (inet_ntop6(src, dst, (size_t)size));
+ default:
+ SET_ERRNO(EAFNOSUPPORT);
+ return (NULL);
}
/* NOTREACHED */
}
@@ -78,17 +81,17 @@ ares_inet_ntop(int af, const void *src, char *dst, ares_socklen_t size)
* author:
* Paul Vixie, 1996.
*/
-static const char *
-inet_ntop4(const unsigned char *src, char *dst, size_t size)
+static const char *inet_ntop4(const unsigned char *src, char *dst, size_t size)
{
static const char fmt[] = "%u.%u.%u.%u";
- char tmp[sizeof("255.255.255.255")];
+ char tmp[sizeof("255.255.255.255")];
- if ((size_t)sprintf(tmp, fmt, src[0], src[1], src[2], src[3]) >= size) {
+ if ((size_t)snprintf(tmp, sizeof(tmp), fmt, src[0], src[1], src[2], src[3]) >=
+ size) {
SET_ERRNO(ENOSPC);
return (NULL);
}
- strcpy(dst, tmp);
+ ares_strcpy(dst, tmp, size);
return (dst);
}
@@ -98,8 +101,7 @@ inet_ntop4(const unsigned char *src, char *dst, size_t size)
* author:
* Paul Vixie, 1996.
*/
-static const char *
-inet_ntop6(const unsigned char *src, char *dst, size_t size)
+static const char *inet_ntop6(const unsigned char *src, char *dst, size_t size)
{
/*
* Note that int32_t and int16_t need only be "at least" large enough
@@ -108,11 +110,15 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
* Keep this in mind if you think this function should have been coded
* to use pointer overlays. All the world's not a VAX.
*/
- char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
+ char tmp[sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")];
char *tp;
- struct { int base, len; } best, cur;
+
+ struct {
+ int base, len;
+ } best, cur;
+
unsigned int words[NS_IN6ADDRSZ / NS_INT16SZ];
- int i;
+ int i;
/*
* Preprocess:
@@ -120,32 +126,37 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
* Find the longest run of 0x00's in src[] for :: shorthanding.
*/
memset(words, '\0', sizeof(words));
- for (i = 0; i < NS_IN6ADDRSZ; i++)
+ for (i = 0; i < NS_IN6ADDRSZ; i++) {
words[i / 2] |= (src[i] << ((1 - (i % 2)) << 3));
+ }
best.base = -1;
- best.len = 0;
- cur.base = -1;
- cur.len = 0;
+ best.len = 0;
+ cur.base = -1;
+ cur.len = 0;
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
if (words[i] == 0) {
- if (cur.base == -1)
+ if (cur.base == -1) {
cur.base = i, cur.len = 1;
- else
+ } else {
cur.len++;
+ }
} else {
if (cur.base != -1) {
- if (best.base == -1 || cur.len > best.len)
+ if (best.base == -1 || cur.len > best.len) {
best = cur;
+ }
cur.base = -1;
}
}
}
if (cur.base != -1) {
- if (best.base == -1 || cur.len > best.len)
+ if (best.base == -1 || cur.len > best.len) {
best = cur;
+ }
}
- if (best.base != -1 && best.len < 2)
+ if (best.base != -1 && best.len < 2) {
best.base = -1;
+ }
/*
* Format the result.
@@ -153,29 +164,33 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
tp = tmp;
for (i = 0; i < (NS_IN6ADDRSZ / NS_INT16SZ); i++) {
/* Are we inside the best run of 0x00's? */
- if (best.base != -1 && i >= best.base &&
- i < (best.base + best.len)) {
- if (i == best.base)
+ if (best.base != -1 && i >= best.base && i < (best.base + best.len)) {
+ if (i == best.base) {
*tp++ = ':';
+ }
continue;
}
/* Are we following an initial run of 0x00s or any real hex? */
- if (i != 0)
+ if (i != 0) {
*tp++ = ':';
+ }
/* Is this address an encapsulated IPv4? */
- if (i == 6 && best.base == 0 && (best.len == 6 ||
- (best.len == 7 && words[7] != 0x0001) ||
- (best.len == 5 && words[5] == 0xffff))) {
- if (!inet_ntop4(src+12, tp, sizeof(tmp) - (tp - tmp)))
+ if (i == 6 && best.base == 0 &&
+ (best.len == 6 || (best.len == 7 && words[7] != 0x0001) ||
+ (best.len == 5 && words[5] == 0xffff))) {
+ if (!inet_ntop4(src + 12, tp, sizeof(tmp) - (tp - tmp))) {
return (NULL);
- tp += strlen(tp);
+ }
+ tp += ares_strlen(tp);
break;
}
- tp += sprintf(tp, "%x", words[i]);
+ tp += snprintf(tp, sizeof(tmp) - (tp - tmp), "%x", words[i]);
}
/* Was it a trailing run of 0x00's? */
- if (best.base != -1 && (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ))
+ if (best.base != -1 &&
+ (best.base + best.len) == (NS_IN6ADDRSZ / NS_INT16SZ)) {
*tp++ = ':';
+ }
*tp++ = '\0';
/*
@@ -185,14 +200,14 @@ inet_ntop6(const unsigned char *src, char *dst, size_t size)
SET_ERRNO(ENOSPC);
return (NULL);
}
- strcpy(dst, tmp);
+ ares_strcpy(dst, tmp, size);
return (dst);
}
-#else /* HAVE_INET_NTOP */
+#else /* HAVE_INET_NTOP */
-const char *
-ares_inet_ntop(int af, const void *src, char *dst, ares_socklen_t size)
+const char *ares_inet_ntop(int af, const void *src, char *dst,
+ ares_socklen_t size)
{
/* just relay this to the underlying function */
return inet_ntop(af, src, dst, size);
diff --git a/src/lib/setup_once.h b/src/lib/setup_once.h
index a8cfe6b..4fbf5ba 100644
--- a/src/lib/setup_once.h
+++ b/src/lib/setup_once.h
@@ -1,19 +1,30 @@
-#ifndef __SETUP_ONCE_H
-#define __SETUP_ONCE_H
-
-
-/* Copyright (C) 2004 - 2013 by Daniel Stenberg et al
+/* MIT License
+ *
+ * Copyright (c) 2004 Daniel Stenberg
+ *
+ * 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:
*
- * Permission to use, copy, modify, and distribute this software and its
- * documentation for any purpose and without fee is hereby granted, 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.
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
+#ifndef __SETUP_ONCE_H
+#define __SETUP_ONCE_H
/********************************************************************
@@ -37,47 +48,47 @@
#include <ctype.h>
#ifdef HAVE_ERRNO_H
-#include <errno.h>
+# include <errno.h>
#endif
#ifdef HAVE_SYS_TYPES_H
-#include <sys/types.h>
+# include <sys/types.h>
#endif
#ifdef NEED_MALLOC_H
-#include <malloc.h>
+# include <malloc.h>
#endif
#ifdef NEED_MEMORY_H
-#include <memory.h>
+# include <memory.h>
#endif
#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
+# include <sys/stat.h>
#endif
#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#ifdef TIME_WITH_SYS_TIME
-#include <time.h>
-#endif
+# include <sys/time.h>
+# ifdef TIME_WITH_SYS_TIME
+# include <time.h>
+# endif
#else
-#ifdef HAVE_TIME_H
-#include <time.h>
-#endif
+# ifdef HAVE_TIME_H
+# include <time.h>
+# endif
#endif
#ifdef WIN32
-#include <io.h>
-#include <fcntl.h>
+# include <io.h>
+# include <fcntl.h>
#endif
#if defined(HAVE_STDBOOL_H) && defined(HAVE_BOOL_T)
-#include <stdbool.h>
+# include <stdbool.h>
#endif
#ifdef HAVE_UNISTD_H
-#include <unistd.h>
+# include <unistd.h>
#endif
#ifdef __hpux
@@ -91,8 +102,12 @@
# endif
#endif
+#ifdef HAVE_SYS_RANDOM_H
+# include <sys/random.h>
+#endif
+
#ifdef HAVE_SYS_SOCKET_H
-#include <sys/socket.h>
+# include <sys/socket.h>
#endif
#ifdef __hpux
@@ -111,8 +126,8 @@
#ifndef HAVE_STRUCT_TIMEVAL
struct timeval {
- long tv_sec;
- long tv_usec;
+ long tv_sec;
+ long tv_usec;
};
#endif
@@ -123,17 +138,17 @@ struct timeval {
*/
#ifdef HAVE_MSG_NOSIGNAL
-#define SEND_4TH_ARG MSG_NOSIGNAL
+# define SEND_4TH_ARG MSG_NOSIGNAL
#else
-#define SEND_4TH_ARG 0
+# define SEND_4TH_ARG 0
#endif
#if defined(__minix)
/* Minix doesn't support recv on TCP sockets */
-#define sread(x,y,z) (ares_ssize_t)read((RECV_TYPE_ARG1)(x), \
- (RECV_TYPE_ARG2)(y), \
- (RECV_TYPE_ARG3)(z))
+# define sread(x, y, z) \
+ (ares_ssize_t) \
+ read((RECV_TYPE_ARG1)(x), (RECV_TYPE_ARG2)(y), (RECV_TYPE_ARG3)(z))
#elif defined(HAVE_RECV)
/*
@@ -158,97 +173,86 @@ struct timeval {
* SEND_TYPE_RETV must also be defined.
*/
-#if !defined(RECV_TYPE_ARG1) || \
- !defined(RECV_TYPE_ARG2) || \
- !defined(RECV_TYPE_ARG3) || \
- !defined(RECV_TYPE_ARG4) || \
+# if !defined(RECV_TYPE_ARG1) || !defined(RECV_TYPE_ARG2) || \
+ !defined(RECV_TYPE_ARG3) || !defined(RECV_TYPE_ARG4) || \
!defined(RECV_TYPE_RETV)
- /* */
- Error Missing_definition_of_return_and_arguments_types_of_recv
- /* */
-#else
-#define sread(x,y,z) (ares_ssize_t)recv((RECV_TYPE_ARG1)(x), \
- (RECV_TYPE_ARG2)(y), \
- (RECV_TYPE_ARG3)(z), \
- (RECV_TYPE_ARG4)(0))
-#endif
+/* */
+Error Missing_definition_of_return_and_arguments_types_of_recv
+/* */
+# else
+# define sread(x, y, z) \
+ (ares_ssize_t) recv((RECV_TYPE_ARG1)(x), (RECV_TYPE_ARG2)(y), \
+ (RECV_TYPE_ARG3)(z), (RECV_TYPE_ARG4)(0))
+# endif
#else /* HAVE_RECV */
-#ifndef sread
- /* */
- Error Missing_definition_of_macro_sread
- /* */
-#endif
+# ifndef sread
+/* */
+Error Missing_definition_of_macro_sread
+/* */
+# endif
#endif /* HAVE_RECV */
#if defined(__minix)
/* Minix doesn't support send on TCP sockets */
-#define swrite(x,y,z) (ares_ssize_t)write((SEND_TYPE_ARG1)(x), \
- (SEND_TYPE_ARG2)(y), \
- (SEND_TYPE_ARG3)(z))
+# define swrite(x, y, z) \
+ (ares_ssize_t) \
+ write((SEND_TYPE_ARG1)(x), (SEND_TYPE_ARG2)(y), (SEND_TYPE_ARG3)(z))
#elif defined(HAVE_SEND)
-#if !defined(SEND_TYPE_ARG1) || \
- !defined(SEND_QUAL_ARG2) || \
- !defined(SEND_TYPE_ARG2) || \
- !defined(SEND_TYPE_ARG3) || \
- !defined(SEND_TYPE_ARG4) || \
- !defined(SEND_TYPE_RETV)
+# if !defined(SEND_TYPE_ARG1) || !defined(SEND_QUAL_ARG2) || \
+ !defined(SEND_TYPE_ARG2) || !defined(SEND_TYPE_ARG3) || \
+ !defined(SEND_TYPE_ARG4) || !defined(SEND_TYPE_RETV)
/* */
Error Missing_definition_of_return_and_arguments_types_of_send
- /* */
-#else
-#define swrite(x,y,z) (ares_ssize_t)send((SEND_TYPE_ARG1)(x), \
- (SEND_TYPE_ARG2)(y), \
- (SEND_TYPE_ARG3)(z), \
- (SEND_TYPE_ARG4)(SEND_4TH_ARG))
-#endif
+/* */
+# else
+# define swrite(x, y, z) \
+ (ares_ssize_t) send((SEND_TYPE_ARG1)(x), (SEND_TYPE_ARG2)(y), \
+ (SEND_TYPE_ARG3)(z), (SEND_TYPE_ARG4)(SEND_4TH_ARG))
+# endif
#else /* HAVE_SEND */
-#ifndef swrite
+# ifndef swrite
/* */
Error Missing_definition_of_macro_swrite
- /* */
-#endif
+/* */
+# endif
#endif /* HAVE_SEND */
#if 0
-#if defined(HAVE_RECVFROM)
+# if defined(HAVE_RECVFROM)
/*
* Currently recvfrom is only used on udp sockets.
*/
-#if !defined(RECVFROM_TYPE_ARG1) || \
- !defined(RECVFROM_TYPE_ARG2) || \
- !defined(RECVFROM_TYPE_ARG3) || \
- !defined(RECVFROM_TYPE_ARG4) || \
- !defined(RECVFROM_TYPE_ARG5) || \
- !defined(RECVFROM_TYPE_ARG6) || \
- !defined(RECVFROM_TYPE_RETV)
+# if !defined(RECVFROM_TYPE_ARG1) || !defined(RECVFROM_TYPE_ARG2) || \
+ !defined(RECVFROM_TYPE_ARG3) || !defined(RECVFROM_TYPE_ARG4) || \
+ !defined(RECVFROM_TYPE_ARG5) || !defined(RECVFROM_TYPE_ARG6) || \
+ !defined(RECVFROM_TYPE_RETV)
/* */
Error Missing_definition_of_return_and_arguments_types_of_recvfrom
/* */
-#else
-#define sreadfrom(s,b,bl,f,fl) (ares_ssize_t)recvfrom((RECVFROM_TYPE_ARG1) (s), \
- (RECVFROM_TYPE_ARG2 *)(b), \
- (RECVFROM_TYPE_ARG3) (bl), \
- (RECVFROM_TYPE_ARG4) (0), \
- (RECVFROM_TYPE_ARG5 *)(f), \
- (RECVFROM_TYPE_ARG6 *)(fl))
-#endif
-#else /* HAVE_RECVFROM */
-#ifndef sreadfrom
+# else
+# define sreadfrom(s, b, bl, f, fl) \
+ (ares_ssize_t) \
+ recvfrom((RECVFROM_TYPE_ARG1)(s), (RECVFROM_TYPE_ARG2 *)(b), \
+ (RECVFROM_TYPE_ARG3)(bl), (RECVFROM_TYPE_ARG4)(0), \
+ (RECVFROM_TYPE_ARG5 *)(f), (RECVFROM_TYPE_ARG6 *)(fl))
+# endif
+# else /* HAVE_RECVFROM */
+# ifndef sreadfrom
/* */
Error Missing_definition_of_macro_sreadfrom
/* */
-#endif
-#endif /* HAVE_RECVFROM */
+# endif
+# endif /* HAVE_RECVFROM */
-#ifdef RECVFROM_TYPE_ARG6_IS_VOID
-# define RECVFROM_ARG6_T int
-#else
-# define RECVFROM_ARG6_T RECVFROM_TYPE_ARG6
-#endif
+# ifdef RECVFROM_TYPE_ARG6_IS_VOID
+# define RECVFROM_ARG6_T int
+# else
+# define RECVFROM_ARG6_T RECVFROM_TYPE_ARG6
+# endif
#endif /* if 0 */
@@ -257,13 +261,13 @@ struct timeval {
*/
#if defined(HAVE_CLOSESOCKET)
-# define sclose(x) closesocket((x))
+# define sclose(x) closesocket((x))
#elif defined(HAVE_CLOSESOCKET_CAMEL)
-# define sclose(x) CloseSocket((x))
+# define sclose(x) CloseSocket((x))
#elif defined(HAVE_CLOSE_S)
-# define sclose(x) close_s((x))
+# define sclose(x) close_s((x))
#else
-# define sclose(x) close((x))
+# define sclose(x) close((x))
#endif
@@ -272,21 +276,21 @@ struct timeval {
* avoid negative number inputs with argument byte codes > 127.
*/
-#define ISSPACE(x) (isspace((int) ((unsigned char)x)))
-#define ISDIGIT(x) (isdigit((int) ((unsigned char)x)))
-#define ISALNUM(x) (isalnum((int) ((unsigned char)x)))
-#define ISXDIGIT(x) (isxdigit((int) ((unsigned char)x)))
-#define ISGRAPH(x) (isgraph((int) ((unsigned char)x)))
-#define ISALPHA(x) (isalpha((int) ((unsigned char)x)))
-#define ISPRINT(x) (isprint((int) ((unsigned char)x)))
-#define ISUPPER(x) (isupper((int) ((unsigned char)x)))
-#define ISLOWER(x) (islower((int) ((unsigned char)x)))
-#define ISASCII(x) (isascii((int) ((unsigned char)x)))
+#define ISSPACE(x) (isspace((int)((unsigned char)x)))
+#define ISDIGIT(x) (isdigit((int)((unsigned char)x)))
+#define ISALNUM(x) (isalnum((int)((unsigned char)x)))
+#define ISXDIGIT(x) (isxdigit((int)((unsigned char)x)))
+#define ISGRAPH(x) (isgraph((int)((unsigned char)x)))
+#define ISALPHA(x) (isalpha((int)((unsigned char)x)))
+#define ISPRINT(x) (isprint((int)((unsigned char)x)))
+#define ISUPPER(x) (isupper((int)((unsigned char)x)))
+#define ISLOWER(x) (islower((int)((unsigned char)x)))
+#define ISASCII(x) (isascii((int)((unsigned char)x)))
-#define ISBLANK(x) (int)((((unsigned char)x) == ' ') || \
- (((unsigned char)x) == '\t'))
+#define ISBLANK(x) \
+ (int)((((unsigned char)x) == ' ') || (((unsigned char)x) == '\t'))
-#define TOLOWER(x) (tolower((int) ((unsigned char)x)))
+#define TOLOWER(x) (tolower((int)((unsigned char)x)))
/*
@@ -294,9 +298,9 @@ struct timeval {
*/
#if defined(__hpux) && !defined(HAVE_BOOL_T)
- typedef int bool;
+typedef int bool;
# define false 0
-# define true 1
+# define true 1
# define HAVE_BOOL_T
#endif
@@ -309,10 +313,10 @@ struct timeval {
*/
#ifndef HAVE_BOOL_T
- typedef enum {
- bool_false = 0,
- bool_true = 1
- } bool;
+typedef enum {
+ bool_false = 0,
+ bool_true = 1
+} bool;
/*
* Use a define to let 'true' and 'false' use those enums. There
@@ -334,10 +338,10 @@ struct timeval {
*/
#ifndef TRUE
-#define TRUE true
+# define TRUE true
#endif
#ifndef FALSE
-#define FALSE false
+# define FALSE false
#endif
@@ -346,18 +350,16 @@ struct timeval {
* avoiding compiler warnings. Mostly intended for other macro definitions.
*/
-#define WHILE_FALSE while(0)
+#define WHILE_FALSE while (0)
#if defined(_MSC_VER) && !defined(__POCC__)
# undef WHILE_FALSE
# if (_MSC_VER < 1500)
-# define WHILE_FALSE while(1, 0)
+# define WHILE_FALSE while (1, 0)
# else
-# define WHILE_FALSE \
-__pragma(warning(push)) \
-__pragma(warning(disable:4127)) \
-while(0) \
-__pragma(warning(pop))
+# define WHILE_FALSE \
+ __pragma(warning(push)) __pragma(warning(disable : 4127)) while (0) \
+ __pragma(warning(pop))
# endif
#endif
@@ -368,7 +370,7 @@ __pragma(warning(pop))
#ifndef HAVE_SIG_ATOMIC_T
typedef int sig_atomic_t;
-#define HAVE_SIG_ATOMIC_T
+# define HAVE_SIG_ATOMIC_T
#endif
@@ -377,9 +379,9 @@ typedef int sig_atomic_t;
*/
#ifdef HAVE_SIG_ATOMIC_T_VOLATILE
-#define SIG_ATOMIC_T static sig_atomic_t
+# define SIG_ATOMIC_T static sig_atomic_t
#else
-#define SIG_ATOMIC_T static volatile sig_atomic_t
+# define SIG_ATOMIC_T static volatile sig_atomic_t
#endif
@@ -388,7 +390,7 @@ typedef int sig_atomic_t;
*/
#ifndef RETSIGTYPE
-#define RETSIGTYPE void
+# define RETSIGTYPE void
#endif
@@ -397,9 +399,12 @@ typedef int sig_atomic_t;
*/
#ifdef DEBUGBUILD
-#define DEBUGF(x) x
+# define DEBUGF(x) x
#else
-#define DEBUGF(x) do { } WHILE_FALSE
+# define DEBUGF(x) \
+ do { \
+ } \
+ WHILE_FALSE
#endif
@@ -408,9 +413,12 @@ typedef int sig_atomic_t;
*/
#if defined(DEBUGBUILD) && defined(HAVE_ASSERT_H)
-#define DEBUGASSERT(x) assert(x)
+# define DEBUGASSERT(x) assert(x)
#else
-#define DEBUGASSERT(x) do { } WHILE_FALSE
+# define DEBUGASSERT(x) \
+ do { \
+ } \
+ WHILE_FALSE
#endif
@@ -420,11 +428,11 @@ typedef int sig_atomic_t;
*/
#ifdef USE_WINSOCK
-#define SOCKERRNO ((int)WSAGetLastError())
-#define SET_SOCKERRNO(x) (WSASetLastError((int)(x)))
+# define SOCKERRNO ((int)WSAGetLastError())
+# define SET_SOCKERRNO(x) (WSASetLastError((int)(x)))
#else
-#define SOCKERRNO (errno)
-#define SET_SOCKERRNO(x) (errno = (x))
+# define SOCKERRNO (errno)
+# define SET_SOCKERRNO(x) (errno = (x))
#endif
@@ -434,11 +442,11 @@ typedef int sig_atomic_t;
*/
#if defined(WIN32) && !defined(WATT32)
-#define ERRNO ((int)GetLastError())
-#define SET_ERRNO(x) (SetLastError((DWORD)(x)))
+# define ERRNO ((int)GetLastError())
+# define SET_ERRNO(x) (SetLastError((DWORD)(x)))
#else
-#define ERRNO (errno)
-#define SET_ERRNO(x) (errno = (x))
+# define ERRNO (errno)
+# define SET_ERRNO(x) (errno = (x))
#endif
@@ -447,78 +455,78 @@ typedef int sig_atomic_t;
*/
#ifdef USE_WINSOCK
-#undef EBADF /* override definition in errno.h */
-#define EBADF WSAEBADF
-#undef EINTR /* override definition in errno.h */
-#define EINTR WSAEINTR
-#undef EINVAL /* override definition in errno.h */
-#define EINVAL WSAEINVAL
-#undef EWOULDBLOCK /* override definition in errno.h */
-#define EWOULDBLOCK WSAEWOULDBLOCK
-#undef EINPROGRESS /* override definition in errno.h */
-#define EINPROGRESS WSAEINPROGRESS
-#undef EALREADY /* override definition in errno.h */
-#define EALREADY WSAEALREADY
-#undef ENOTSOCK /* override definition in errno.h */
-#define ENOTSOCK WSAENOTSOCK
-#undef EDESTADDRREQ /* override definition in errno.h */
-#define EDESTADDRREQ WSAEDESTADDRREQ
-#undef EMSGSIZE /* override definition in errno.h */
-#define EMSGSIZE WSAEMSGSIZE
-#undef EPROTOTYPE /* override definition in errno.h */
-#define EPROTOTYPE WSAEPROTOTYPE
-#undef ENOPROTOOPT /* override definition in errno.h */
-#define ENOPROTOOPT WSAENOPROTOOPT
-#undef EPROTONOSUPPORT /* override definition in errno.h */
-#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
-#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
-#undef EOPNOTSUPP /* override definition in errno.h */
-#define EOPNOTSUPP WSAEOPNOTSUPP
-#define EPFNOSUPPORT WSAEPFNOSUPPORT
-#undef EAFNOSUPPORT /* override definition in errno.h */
-#define EAFNOSUPPORT WSAEAFNOSUPPORT
-#undef EADDRINUSE /* override definition in errno.h */
-#define EADDRINUSE WSAEADDRINUSE
-#undef EADDRNOTAVAIL /* override definition in errno.h */
-#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
-#undef ENETDOWN /* override definition in errno.h */
-#define ENETDOWN WSAENETDOWN
-#undef ENETUNREACH /* override definition in errno.h */
-#define ENETUNREACH WSAENETUNREACH
-#undef ENETRESET /* override definition in errno.h */
-#define ENETRESET WSAENETRESET
-#undef ECONNABORTED /* override definition in errno.h */
-#define ECONNABORTED WSAECONNABORTED
-#undef ECONNRESET /* override definition in errno.h */
-#define ECONNRESET WSAECONNRESET
-#undef ENOBUFS /* override definition in errno.h */
-#define ENOBUFS WSAENOBUFS
-#undef EISCONN /* override definition in errno.h */
-#define EISCONN WSAEISCONN
-#undef ENOTCONN /* override definition in errno.h */
-#define ENOTCONN WSAENOTCONN
-#define ESHUTDOWN WSAESHUTDOWN
-#define ETOOMANYREFS WSAETOOMANYREFS
-#undef ETIMEDOUT /* override definition in errno.h */
-#define ETIMEDOUT WSAETIMEDOUT
-#undef ECONNREFUSED /* override definition in errno.h */
-#define ECONNREFUSED WSAECONNREFUSED
-#undef ELOOP /* override definition in errno.h */
-#define ELOOP WSAELOOP
-#ifndef ENAMETOOLONG /* possible previous definition in errno.h */
-#define ENAMETOOLONG WSAENAMETOOLONG
-#endif
-#define EHOSTDOWN WSAEHOSTDOWN
-#undef EHOSTUNREACH /* override definition in errno.h */
-#define EHOSTUNREACH WSAEHOSTUNREACH
-#ifndef ENOTEMPTY /* possible previous definition in errno.h */
-#define ENOTEMPTY WSAENOTEMPTY
-#endif
-#define EPROCLIM WSAEPROCLIM
-#define EUSERS WSAEUSERS
-#define EDQUOT WSAEDQUOT
-#define ESTALE WSAESTALE
-#define EREMOTE WSAEREMOTE
+# undef EBADF /* override definition in errno.h */
+# define EBADF WSAEBADF
+# undef EINTR /* override definition in errno.h */
+# define EINTR WSAEINTR
+# undef EINVAL /* override definition in errno.h */
+# define EINVAL WSAEINVAL
+# undef EWOULDBLOCK /* override definition in errno.h */
+# define EWOULDBLOCK WSAEWOULDBLOCK
+# undef EINPROGRESS /* override definition in errno.h */
+# define EINPROGRESS WSAEINPROGRESS
+# undef EALREADY /* override definition in errno.h */
+# define EALREADY WSAEALREADY
+# undef ENOTSOCK /* override definition in errno.h */
+# define ENOTSOCK WSAENOTSOCK
+# undef EDESTADDRREQ /* override definition in errno.h */
+# define EDESTADDRREQ WSAEDESTADDRREQ
+# undef EMSGSIZE /* override definition in errno.h */
+# define EMSGSIZE WSAEMSGSIZE
+# undef EPROTOTYPE /* override definition in errno.h */
+# define EPROTOTYPE WSAEPROTOTYPE
+# undef ENOPROTOOPT /* override definition in errno.h */
+# define ENOPROTOOPT WSAENOPROTOOPT
+# undef EPROTONOSUPPORT /* override definition in errno.h */
+# define EPROTONOSUPPORT WSAEPROTONOSUPPORT
+# define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
+# undef EOPNOTSUPP /* override definition in errno.h */
+# define EOPNOTSUPP WSAEOPNOTSUPP
+# define EPFNOSUPPORT WSAEPFNOSUPPORT
+# undef EAFNOSUPPORT /* override definition in errno.h */
+# define EAFNOSUPPORT WSAEAFNOSUPPORT
+# undef EADDRINUSE /* override definition in errno.h */
+# define EADDRINUSE WSAEADDRINUSE
+# undef EADDRNOTAVAIL /* override definition in errno.h */
+# define EADDRNOTAVAIL WSAEADDRNOTAVAIL
+# undef ENETDOWN /* override definition in errno.h */
+# define ENETDOWN WSAENETDOWN
+# undef ENETUNREACH /* override definition in errno.h */
+# define ENETUNREACH WSAENETUNREACH
+# undef ENETRESET /* override definition in errno.h */
+# define ENETRESET WSAENETRESET
+# undef ECONNABORTED /* override definition in errno.h */
+# define ECONNABORTED WSAECONNABORTED
+# undef ECONNRESET /* override definition in errno.h */
+# define ECONNRESET WSAECONNRESET
+# undef ENOBUFS /* override definition in errno.h */
+# define ENOBUFS WSAENOBUFS
+# undef EISCONN /* override definition in errno.h */
+# define EISCONN WSAEISCONN
+# undef ENOTCONN /* override definition in errno.h */
+# define ENOTCONN WSAENOTCONN
+# define ESHUTDOWN WSAESHUTDOWN
+# define ETOOMANYREFS WSAETOOMANYREFS
+# undef ETIMEDOUT /* override definition in errno.h */
+# define ETIMEDOUT WSAETIMEDOUT
+# undef ECONNREFUSED /* override definition in errno.h */
+# define ECONNREFUSED WSAECONNREFUSED
+# undef ELOOP /* override definition in errno.h */
+# define ELOOP WSAELOOP
+# ifndef ENAMETOOLONG /* possible previous definition in errno.h */
+# define ENAMETOOLONG WSAENAMETOOLONG
+# endif
+# define EHOSTDOWN WSAEHOSTDOWN
+# undef EHOSTUNREACH /* override definition in errno.h */
+# define EHOSTUNREACH WSAEHOSTUNREACH
+# ifndef ENOTEMPTY /* possible previous definition in errno.h */
+# define ENOTEMPTY WSAENOTEMPTY
+# endif
+# define EPROCLIM WSAEPROCLIM
+# define EUSERS WSAEUSERS
+# define EDQUOT WSAEDQUOT
+# define ESTALE WSAESTALE
+# define EREMOTE WSAEREMOTE
#endif
@@ -526,9 +534,9 @@ typedef int sig_atomic_t;
* Actually use __32_getpwuid() on 64-bit VMS builds for getpwuid()
*/
-#if defined(__VMS) && \
- defined(__INITIAL_POINTER_SIZE) && (__INITIAL_POINTER_SIZE == 64)
-#define getpwuid __32_getpwuid
+#if defined(__VMS) && defined(__INITIAL_POINTER_SIZE) && \
+ (__INITIAL_POINTER_SIZE == 64)
+# define getpwuid __32_getpwuid
#endif
@@ -537,9 +545,9 @@ typedef int sig_atomic_t;
*/
#ifdef __VMS
-#define argv_item_t __char_ptr32
+# define argv_item_t __char_ptr32
#else
-#define argv_item_t char *
+# define argv_item_t char *
#endif
diff --git a/src/lib/windows_port.c b/src/lib/windows_port.c
index 03acd1c..d5f0ad3 100644
--- a/src/lib/windows_port.c
+++ b/src/lib/windows_port.c
@@ -1,3 +1,11 @@
+/**********************************************************************
+ *
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (C) Daniel Stenberg
+ *
+ * SPDX-License-Identifier: MIT
+ *
+ */
#include "ares_setup.h"
@@ -5,18 +13,17 @@
*/
#if (defined(WIN32) || defined(WATT32)) && !defined(MSDOS)
-#ifdef __WATCOMC__
+# ifdef __WATCOMC__
/*
* Watcom needs a DllMain() in order to initialise the clib startup code.
*/
-BOOL
-WINAPI DllMain (HINSTANCE hnd, DWORD reason, LPVOID reserved)
+BOOL WINAPI DllMain(HINSTANCE hnd, DWORD reason, LPVOID reserved)
{
- (void) hnd;
- (void) reason;
- (void) reserved;
+ (void)hnd;
+ (void)reason;
+ (void)reserved;
return (TRUE);
}
-#endif
+# endif
#endif /* WIN32 builds only */
diff --git a/src/tools/CMakeLists.txt b/src/tools/CMakeLists.txt
index 0c44216..5839ea1 100644
--- a/src/tools/CMakeLists.txt
+++ b/src/tools/CMakeLists.txt
@@ -1,3 +1,5 @@
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
IF (CARES_BUILD_TOOLS)
# Transform Makefile.inc
transform_makefile_inc("Makefile.inc" "${PROJECT_BINARY_DIR}/src/tools/Makefile.inc.cmake")
@@ -13,6 +15,9 @@ IF (CARES_BUILD_TOOLS)
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}"
)
+ SET_TARGET_PROPERTIES (ahost PROPERTIES
+ C_STANDARD 90
+ )
TARGET_COMPILE_DEFINITIONS (ahost PRIVATE HAVE_CONFIG_H=1)
TARGET_LINK_LIBRARIES (ahost PRIVATE ${PROJECT_NAME})
IF (CARES_INSTALL)
@@ -30,26 +35,12 @@ IF (CARES_BUILD_TOOLS)
"$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}"
)
+ SET_TARGET_PROPERTIES (adig PROPERTIES
+ C_STANDARD 90
+ )
TARGET_COMPILE_DEFINITIONS (adig PRIVATE HAVE_CONFIG_H=1)
TARGET_LINK_LIBRARIES (adig PRIVATE ${PROJECT_NAME})
IF (CARES_INSTALL)
INSTALL (TARGETS adig COMPONENT Tools ${TARGETS_INST_DEST})
ENDIF ()
-
-
- # Build acountry
- ADD_EXECUTABLE (acountry acountry.c ${SAMPLESOURCES})
- TARGET_INCLUDE_DIRECTORIES (acountry
- PUBLIC "$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}>"
- "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}>"
- "$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/src/lib>"
- "$<BUILD_INTERFACE:${CARES_TOPLEVEL_DIR}/include>"
- "$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>"
- PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}"
- )
- TARGET_COMPILE_DEFINITIONS (acountry PRIVATE HAVE_CONFIG_H=1)
- TARGET_LINK_LIBRARIES (acountry PRIVATE ${PROJECT_NAME})
- IF (CARES_INSTALL)
- INSTALL (TARGETS acountry COMPONENT Tools ${TARGETS_INST_DEST})
- ENDIF ()
ENDIF ()
diff --git a/src/tools/Makefile.am b/src/tools/Makefile.am
index c503723..8ca33a9 100644
--- a/src/tools/Makefile.am
+++ b/src/tools/Makefile.am
@@ -1,5 +1,7 @@
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
AUTOMAKE_OPTIONS = foreign subdir-objects nostdinc 1.9.6
-PROGS = ahost adig acountry
+PROGS = ahost adig
EXTRA_DIST = CMakeLists.txt Makefile.inc
@@ -21,7 +23,9 @@ endif
include Makefile.inc
-LDADD = $(top_builddir)/src/lib/libcares.la
+# We're not interested in code coverage of the test apps themselves, but need
+# to link with gcov if building with code coverage enabled
+LDADD = $(top_builddir)/src/lib/libcares.la $(CODE_COVERAGE_LIBS)
ahost_SOURCES = ahost.c $(SAMPLESOURCES) $(SAMPLEHEADERS)
ahost_CFLAGS = $(AM_CFLAGS)
@@ -30,7 +34,3 @@ ahost_CPPFLAGS = $(AM_CPPFLAGS)
adig_SOURCES = adig.c $(SAMPLESOURCES) $(SAMPLEHEADERS)
adig_CFLAGS = $(AM_CFLAGS)
adig_CPPFLAGS = $(AM_CPPFLAGS)
-
-acountry_SOURCES = acountry.c $(SAMPLESOURCES) $(SAMPLEHEADERS)
-acountry_CFLAGS = $(AM_CFLAGS)
-acountry_CPPFLAGS = $(AM_CPPFLAGS)
diff --git a/src/tools/Makefile.in b/src/tools/Makefile.in
index e665ac9..45e2575 100644
--- a/src/tools/Makefile.in
+++ b/src/tools/Makefile.in
@@ -96,8 +96,12 @@ am__aclocal_m4_deps = $(top_srcdir)/m4/ax_ac_append_to_file.m4 \
$(top_srcdir)/m4/ax_ac_print_to_file.m4 \
$(top_srcdir)/m4/ax_add_am_macro_static.m4 \
$(top_srcdir)/m4/ax_am_macros_static.m4 \
+ $(top_srcdir)/m4/ax_append_compile_flags.m4 \
+ $(top_srcdir)/m4/ax_append_flag.m4 \
+ $(top_srcdir)/m4/ax_check_compile_flag.m4 \
$(top_srcdir)/m4/ax_check_gnu_make.m4 \
$(top_srcdir)/m4/ax_code_coverage.m4 \
+ $(top_srcdir)/m4/ax_cxx_compile_stdcxx.m4 \
$(top_srcdir)/m4/ax_cxx_compile_stdcxx_11.m4 \
$(top_srcdir)/m4/ax_file_escapes.m4 \
$(top_srcdir)/m4/ax_require_defined.m4 \
@@ -123,44 +127,34 @@ CONFIG_HEADER = $(top_builddir)/src/lib/ares_config.h \
$(top_builddir)/include/ares_build.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
-am__EXEEXT_1 = ahost$(EXEEXT) adig$(EXEEXT) acountry$(EXEEXT)
+am__EXEEXT_1 = ahost$(EXEEXT) adig$(EXEEXT)
PROGRAMS = $(noinst_PROGRAMS)
am__dirstamp = $(am__leading_dot)dirstamp
-am__objects_1 = acountry-ares_getopt.$(OBJEXT) \
- ../lib/acountry-ares_nowarn.$(OBJEXT) \
- ../lib/acountry-ares_strcasecmp.$(OBJEXT)
+am__objects_1 = adig-ares_getopt.$(OBJEXT) \
+ ../lib/adig-ares_strcasecmp.$(OBJEXT)
am__objects_2 =
-am_acountry_OBJECTS = acountry-acountry.$(OBJEXT) $(am__objects_1) \
+am_adig_OBJECTS = adig-adig.$(OBJEXT) $(am__objects_1) \
$(am__objects_2)
-acountry_OBJECTS = $(am_acountry_OBJECTS)
-acountry_LDADD = $(LDADD)
-acountry_DEPENDENCIES = $(top_builddir)/src/lib/libcares.la
+adig_OBJECTS = $(am_adig_OBJECTS)
+adig_LDADD = $(LDADD)
+am__DEPENDENCIES_1 =
+adig_DEPENDENCIES = $(top_builddir)/src/lib/libcares.la \
+ $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
-acountry_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(acountry_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am__objects_3 = adig-ares_getopt.$(OBJEXT) \
- ../lib/adig-ares_nowarn.$(OBJEXT) \
- ../lib/adig-ares_strcasecmp.$(OBJEXT)
-am_adig_OBJECTS = adig-adig.$(OBJEXT) $(am__objects_3) \
- $(am__objects_2)
-adig_OBJECTS = $(am_adig_OBJECTS)
-adig_LDADD = $(LDADD)
-adig_DEPENDENCIES = $(top_builddir)/src/lib/libcares.la
adig_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(adig_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
-am__objects_4 = ahost-ares_getopt.$(OBJEXT) \
- ../lib/ahost-ares_nowarn.$(OBJEXT) \
+am__objects_3 = ahost-ares_getopt.$(OBJEXT) \
../lib/ahost-ares_strcasecmp.$(OBJEXT)
-am_ahost_OBJECTS = ahost-ahost.$(OBJEXT) $(am__objects_4) \
+am_ahost_OBJECTS = ahost-ahost.$(OBJEXT) $(am__objects_3) \
$(am__objects_2)
ahost_OBJECTS = $(am_ahost_OBJECTS)
ahost_LDADD = $(LDADD)
-ahost_DEPENDENCIES = $(top_builddir)/src/lib/libcares.la
+ahost_DEPENDENCIES = $(top_builddir)/src/lib/libcares.la \
+ $(am__DEPENDENCIES_1)
ahost_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(ahost_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
@@ -179,16 +173,10 @@ am__v_at_1 =
DEFAULT_INCLUDES =
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__maybe_remake_depfiles = depfiles
-am__depfiles_remade = ../lib/$(DEPDIR)/acountry-ares_nowarn.Po \
- ../lib/$(DEPDIR)/acountry-ares_strcasecmp.Po \
- ../lib/$(DEPDIR)/adig-ares_nowarn.Po \
- ../lib/$(DEPDIR)/adig-ares_strcasecmp.Po \
- ../lib/$(DEPDIR)/ahost-ares_nowarn.Po \
+am__depfiles_remade = ../lib/$(DEPDIR)/adig-ares_strcasecmp.Po \
../lib/$(DEPDIR)/ahost-ares_strcasecmp.Po \
- ./$(DEPDIR)/acountry-acountry.Po \
- ./$(DEPDIR)/acountry-ares_getopt.Po ./$(DEPDIR)/adig-adig.Po \
- ./$(DEPDIR)/adig-ares_getopt.Po ./$(DEPDIR)/ahost-ahost.Po \
- ./$(DEPDIR)/ahost-ares_getopt.Po
+ ./$(DEPDIR)/adig-adig.Po ./$(DEPDIR)/adig-ares_getopt.Po \
+ ./$(DEPDIR)/ahost-ahost.Po ./$(DEPDIR)/ahost-ares_getopt.Po
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
@@ -208,8 +196,8 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-SOURCES = $(acountry_SOURCES) $(adig_SOURCES) $(ahost_SOURCES)
-DIST_SOURCES = $(acountry_SOURCES) $(adig_SOURCES) $(ahost_SOURCES)
+SOURCES = $(adig_SOURCES) $(ahost_SOURCES)
+DIST_SOURCES = $(adig_SOURCES) $(ahost_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -280,6 +268,7 @@ EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
+FILECMD = @FILECMD@
GCOV = @GCOV@
GENHTML = @GENHTML@
GREP = @GREP@
@@ -380,8 +369,11 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
+
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
AUTOMAKE_OPTIONS = foreign subdir-objects nostdinc 1.9.6
-PROGS = ahost adig acountry
+PROGS = ahost adig
EXTRA_DIST = CMakeLists.txt Makefile.inc
# Specify our include paths here, and do it relative to $(top_srcdir) and
@@ -391,24 +383,25 @@ EXTRA_DIST = CMakeLists.txt Makefile.inc
AM_CPPFLAGS = -I$(top_builddir)/include -I$(top_builddir)/src/lib \
-I$(top_srcdir)/include -I$(top_srcdir)/src/lib \
$(am__append_1)
+
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
SAMPLESOURCES = ares_getopt.c \
- ../lib/ares_nowarn.c \
../lib/ares_strcasecmp.c
SAMPLEHEADERS = ares_getopt.h \
- ../lib/ares_nowarn.h \
../lib/ares_strcasecmp.h
-LDADD = $(top_builddir)/src/lib/libcares.la
+
+# We're not interested in code coverage of the test apps themselves, but need
+# to link with gcov if building with code coverage enabled
+LDADD = $(top_builddir)/src/lib/libcares.la $(CODE_COVERAGE_LIBS)
ahost_SOURCES = ahost.c $(SAMPLESOURCES) $(SAMPLEHEADERS)
ahost_CFLAGS = $(AM_CFLAGS)
ahost_CPPFLAGS = $(AM_CPPFLAGS)
adig_SOURCES = adig.c $(SAMPLESOURCES) $(SAMPLEHEADERS)
adig_CFLAGS = $(AM_CFLAGS)
adig_CPPFLAGS = $(AM_CPPFLAGS)
-acountry_SOURCES = acountry.c $(SAMPLESOURCES) $(SAMPLEHEADERS)
-acountry_CFLAGS = $(AM_CFLAGS)
-acountry_CPPFLAGS = $(AM_CPPFLAGS)
all: all-am
.SUFFIXES:
@@ -458,24 +451,12 @@ clean-noinstPROGRAMS:
../lib/$(DEPDIR)/$(am__dirstamp):
@$(MKDIR_P) ../lib/$(DEPDIR)
@: > ../lib/$(DEPDIR)/$(am__dirstamp)
-../lib/acountry-ares_nowarn.$(OBJEXT): ../lib/$(am__dirstamp) \
- ../lib/$(DEPDIR)/$(am__dirstamp)
-../lib/acountry-ares_strcasecmp.$(OBJEXT): ../lib/$(am__dirstamp) \
- ../lib/$(DEPDIR)/$(am__dirstamp)
-
-acountry$(EXEEXT): $(acountry_OBJECTS) $(acountry_DEPENDENCIES) $(EXTRA_acountry_DEPENDENCIES)
- @rm -f acountry$(EXEEXT)
- $(AM_V_CCLD)$(acountry_LINK) $(acountry_OBJECTS) $(acountry_LDADD) $(LIBS)
-../lib/adig-ares_nowarn.$(OBJEXT): ../lib/$(am__dirstamp) \
- ../lib/$(DEPDIR)/$(am__dirstamp)
../lib/adig-ares_strcasecmp.$(OBJEXT): ../lib/$(am__dirstamp) \
../lib/$(DEPDIR)/$(am__dirstamp)
adig$(EXEEXT): $(adig_OBJECTS) $(adig_DEPENDENCIES) $(EXTRA_adig_DEPENDENCIES)
@rm -f adig$(EXEEXT)
$(AM_V_CCLD)$(adig_LINK) $(adig_OBJECTS) $(adig_LDADD) $(LIBS)
-../lib/ahost-ares_nowarn.$(OBJEXT): ../lib/$(am__dirstamp) \
- ../lib/$(DEPDIR)/$(am__dirstamp)
../lib/ahost-ares_strcasecmp.$(OBJEXT): ../lib/$(am__dirstamp) \
../lib/$(DEPDIR)/$(am__dirstamp)
@@ -490,14 +471,8 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/acountry-ares_nowarn.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/acountry-ares_strcasecmp.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/adig-ares_nowarn.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/adig-ares_strcasecmp.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/ahost-ares_nowarn.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@../lib/$(DEPDIR)/ahost-ares_strcasecmp.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acountry-acountry.Po@am__quote@ # am--include-marker
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acountry-ares_getopt.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adig-adig.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/adig-ares_getopt.Po@am__quote@ # am--include-marker
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ahost-ahost.Po@am__quote@ # am--include-marker
@@ -533,62 +508,6 @@ am--depfiles: $(am__depfiles_remade)
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-acountry-acountry.o: acountry.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-acountry.o -MD -MP -MF $(DEPDIR)/acountry-acountry.Tpo -c -o acountry-acountry.o `test -f 'acountry.c' || echo '$(srcdir)/'`acountry.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/acountry-acountry.Tpo $(DEPDIR)/acountry-acountry.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='acountry.c' object='acountry-acountry.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-acountry.o `test -f 'acountry.c' || echo '$(srcdir)/'`acountry.c
-
-acountry-acountry.obj: acountry.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-acountry.obj -MD -MP -MF $(DEPDIR)/acountry-acountry.Tpo -c -o acountry-acountry.obj `if test -f 'acountry.c'; then $(CYGPATH_W) 'acountry.c'; else $(CYGPATH_W) '$(srcdir)/acountry.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/acountry-acountry.Tpo $(DEPDIR)/acountry-acountry.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='acountry.c' object='acountry-acountry.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-acountry.obj `if test -f 'acountry.c'; then $(CYGPATH_W) 'acountry.c'; else $(CYGPATH_W) '$(srcdir)/acountry.c'; fi`
-
-acountry-ares_getopt.o: ares_getopt.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-ares_getopt.o -MD -MP -MF $(DEPDIR)/acountry-ares_getopt.Tpo -c -o acountry-ares_getopt.o `test -f 'ares_getopt.c' || echo '$(srcdir)/'`ares_getopt.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/acountry-ares_getopt.Tpo $(DEPDIR)/acountry-ares_getopt.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_getopt.c' object='acountry-ares_getopt.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-ares_getopt.o `test -f 'ares_getopt.c' || echo '$(srcdir)/'`ares_getopt.c
-
-acountry-ares_getopt.obj: ares_getopt.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT acountry-ares_getopt.obj -MD -MP -MF $(DEPDIR)/acountry-ares_getopt.Tpo -c -o acountry-ares_getopt.obj `if test -f 'ares_getopt.c'; then $(CYGPATH_W) 'ares_getopt.c'; else $(CYGPATH_W) '$(srcdir)/ares_getopt.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/acountry-ares_getopt.Tpo $(DEPDIR)/acountry-ares_getopt.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ares_getopt.c' object='acountry-ares_getopt.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o acountry-ares_getopt.obj `if test -f 'ares_getopt.c'; then $(CYGPATH_W) 'ares_getopt.c'; else $(CYGPATH_W) '$(srcdir)/ares_getopt.c'; fi`
-
-../lib/acountry-ares_nowarn.o: ../lib/ares_nowarn.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT ../lib/acountry-ares_nowarn.o -MD -MP -MF ../lib/$(DEPDIR)/acountry-ares_nowarn.Tpo -c -o ../lib/acountry-ares_nowarn.o `test -f '../lib/ares_nowarn.c' || echo '$(srcdir)/'`../lib/ares_nowarn.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/acountry-ares_nowarn.Tpo ../lib/$(DEPDIR)/acountry-ares_nowarn.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_nowarn.c' object='../lib/acountry-ares_nowarn.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o ../lib/acountry-ares_nowarn.o `test -f '../lib/ares_nowarn.c' || echo '$(srcdir)/'`../lib/ares_nowarn.c
-
-../lib/acountry-ares_nowarn.obj: ../lib/ares_nowarn.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT ../lib/acountry-ares_nowarn.obj -MD -MP -MF ../lib/$(DEPDIR)/acountry-ares_nowarn.Tpo -c -o ../lib/acountry-ares_nowarn.obj `if test -f '../lib/ares_nowarn.c'; then $(CYGPATH_W) '../lib/ares_nowarn.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_nowarn.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/acountry-ares_nowarn.Tpo ../lib/$(DEPDIR)/acountry-ares_nowarn.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_nowarn.c' object='../lib/acountry-ares_nowarn.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o ../lib/acountry-ares_nowarn.obj `if test -f '../lib/ares_nowarn.c'; then $(CYGPATH_W) '../lib/ares_nowarn.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_nowarn.c'; fi`
-
-../lib/acountry-ares_strcasecmp.o: ../lib/ares_strcasecmp.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT ../lib/acountry-ares_strcasecmp.o -MD -MP -MF ../lib/$(DEPDIR)/acountry-ares_strcasecmp.Tpo -c -o ../lib/acountry-ares_strcasecmp.o `test -f '../lib/ares_strcasecmp.c' || echo '$(srcdir)/'`../lib/ares_strcasecmp.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/acountry-ares_strcasecmp.Tpo ../lib/$(DEPDIR)/acountry-ares_strcasecmp.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_strcasecmp.c' object='../lib/acountry-ares_strcasecmp.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o ../lib/acountry-ares_strcasecmp.o `test -f '../lib/ares_strcasecmp.c' || echo '$(srcdir)/'`../lib/ares_strcasecmp.c
-
-../lib/acountry-ares_strcasecmp.obj: ../lib/ares_strcasecmp.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -MT ../lib/acountry-ares_strcasecmp.obj -MD -MP -MF ../lib/$(DEPDIR)/acountry-ares_strcasecmp.Tpo -c -o ../lib/acountry-ares_strcasecmp.obj `if test -f '../lib/ares_strcasecmp.c'; then $(CYGPATH_W) '../lib/ares_strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_strcasecmp.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/acountry-ares_strcasecmp.Tpo ../lib/$(DEPDIR)/acountry-ares_strcasecmp.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_strcasecmp.c' object='../lib/acountry-ares_strcasecmp.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(acountry_CPPFLAGS) $(CPPFLAGS) $(acountry_CFLAGS) $(CFLAGS) -c -o ../lib/acountry-ares_strcasecmp.obj `if test -f '../lib/ares_strcasecmp.c'; then $(CYGPATH_W) '../lib/ares_strcasecmp.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_strcasecmp.c'; fi`
-
adig-adig.o: adig.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT adig-adig.o -MD -MP -MF $(DEPDIR)/adig-adig.Tpo -c -o adig-adig.o `test -f 'adig.c' || echo '$(srcdir)/'`adig.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/adig-adig.Tpo $(DEPDIR)/adig-adig.Po
@@ -617,20 +536,6 @@ adig-ares_getopt.obj: ares_getopt.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o adig-ares_getopt.obj `if test -f 'ares_getopt.c'; then $(CYGPATH_W) 'ares_getopt.c'; else $(CYGPATH_W) '$(srcdir)/ares_getopt.c'; fi`
-../lib/adig-ares_nowarn.o: ../lib/ares_nowarn.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT ../lib/adig-ares_nowarn.o -MD -MP -MF ../lib/$(DEPDIR)/adig-ares_nowarn.Tpo -c -o ../lib/adig-ares_nowarn.o `test -f '../lib/ares_nowarn.c' || echo '$(srcdir)/'`../lib/ares_nowarn.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/adig-ares_nowarn.Tpo ../lib/$(DEPDIR)/adig-ares_nowarn.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_nowarn.c' object='../lib/adig-ares_nowarn.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o ../lib/adig-ares_nowarn.o `test -f '../lib/ares_nowarn.c' || echo '$(srcdir)/'`../lib/ares_nowarn.c
-
-../lib/adig-ares_nowarn.obj: ../lib/ares_nowarn.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT ../lib/adig-ares_nowarn.obj -MD -MP -MF ../lib/$(DEPDIR)/adig-ares_nowarn.Tpo -c -o ../lib/adig-ares_nowarn.obj `if test -f '../lib/ares_nowarn.c'; then $(CYGPATH_W) '../lib/ares_nowarn.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_nowarn.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/adig-ares_nowarn.Tpo ../lib/$(DEPDIR)/adig-ares_nowarn.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_nowarn.c' object='../lib/adig-ares_nowarn.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -c -o ../lib/adig-ares_nowarn.obj `if test -f '../lib/ares_nowarn.c'; then $(CYGPATH_W) '../lib/ares_nowarn.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_nowarn.c'; fi`
-
../lib/adig-ares_strcasecmp.o: ../lib/ares_strcasecmp.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(adig_CPPFLAGS) $(CPPFLAGS) $(adig_CFLAGS) $(CFLAGS) -MT ../lib/adig-ares_strcasecmp.o -MD -MP -MF ../lib/$(DEPDIR)/adig-ares_strcasecmp.Tpo -c -o ../lib/adig-ares_strcasecmp.o `test -f '../lib/ares_strcasecmp.c' || echo '$(srcdir)/'`../lib/ares_strcasecmp.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/adig-ares_strcasecmp.Tpo ../lib/$(DEPDIR)/adig-ares_strcasecmp.Po
@@ -673,20 +578,6 @@ ahost-ares_getopt.obj: ares_getopt.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ahost-ares_getopt.obj `if test -f 'ares_getopt.c'; then $(CYGPATH_W) 'ares_getopt.c'; else $(CYGPATH_W) '$(srcdir)/ares_getopt.c'; fi`
-../lib/ahost-ares_nowarn.o: ../lib/ares_nowarn.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ../lib/ahost-ares_nowarn.o -MD -MP -MF ../lib/$(DEPDIR)/ahost-ares_nowarn.Tpo -c -o ../lib/ahost-ares_nowarn.o `test -f '../lib/ares_nowarn.c' || echo '$(srcdir)/'`../lib/ares_nowarn.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/ahost-ares_nowarn.Tpo ../lib/$(DEPDIR)/ahost-ares_nowarn.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_nowarn.c' object='../lib/ahost-ares_nowarn.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ../lib/ahost-ares_nowarn.o `test -f '../lib/ares_nowarn.c' || echo '$(srcdir)/'`../lib/ares_nowarn.c
-
-../lib/ahost-ares_nowarn.obj: ../lib/ares_nowarn.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ../lib/ahost-ares_nowarn.obj -MD -MP -MF ../lib/$(DEPDIR)/ahost-ares_nowarn.Tpo -c -o ../lib/ahost-ares_nowarn.obj `if test -f '../lib/ares_nowarn.c'; then $(CYGPATH_W) '../lib/ares_nowarn.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_nowarn.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/ahost-ares_nowarn.Tpo ../lib/$(DEPDIR)/ahost-ares_nowarn.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='../lib/ares_nowarn.c' object='../lib/ahost-ares_nowarn.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -c -o ../lib/ahost-ares_nowarn.obj `if test -f '../lib/ares_nowarn.c'; then $(CYGPATH_W) '../lib/ares_nowarn.c'; else $(CYGPATH_W) '$(srcdir)/../lib/ares_nowarn.c'; fi`
-
../lib/ahost-ares_strcasecmp.o: ../lib/ares_strcasecmp.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(ahost_CPPFLAGS) $(CPPFLAGS) $(ahost_CFLAGS) $(CFLAGS) -MT ../lib/ahost-ares_strcasecmp.o -MD -MP -MF ../lib/$(DEPDIR)/ahost-ares_strcasecmp.Tpo -c -o ../lib/ahost-ares_strcasecmp.o `test -f '../lib/ares_strcasecmp.c' || echo '$(srcdir)/'`../lib/ares_strcasecmp.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) ../lib/$(DEPDIR)/ahost-ares_strcasecmp.Tpo ../lib/$(DEPDIR)/ahost-ares_strcasecmp.Po
@@ -833,14 +724,8 @@ clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
mostlyclean-am
distclean: distclean-am
- -rm -f ../lib/$(DEPDIR)/acountry-ares_nowarn.Po
- -rm -f ../lib/$(DEPDIR)/acountry-ares_strcasecmp.Po
- -rm -f ../lib/$(DEPDIR)/adig-ares_nowarn.Po
- -rm -f ../lib/$(DEPDIR)/adig-ares_strcasecmp.Po
- -rm -f ../lib/$(DEPDIR)/ahost-ares_nowarn.Po
+ -rm -f ../lib/$(DEPDIR)/adig-ares_strcasecmp.Po
-rm -f ../lib/$(DEPDIR)/ahost-ares_strcasecmp.Po
- -rm -f ./$(DEPDIR)/acountry-acountry.Po
- -rm -f ./$(DEPDIR)/acountry-ares_getopt.Po
-rm -f ./$(DEPDIR)/adig-adig.Po
-rm -f ./$(DEPDIR)/adig-ares_getopt.Po
-rm -f ./$(DEPDIR)/ahost-ahost.Po
@@ -890,14 +775,8 @@ install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
- -rm -f ../lib/$(DEPDIR)/acountry-ares_nowarn.Po
- -rm -f ../lib/$(DEPDIR)/acountry-ares_strcasecmp.Po
- -rm -f ../lib/$(DEPDIR)/adig-ares_nowarn.Po
- -rm -f ../lib/$(DEPDIR)/adig-ares_strcasecmp.Po
- -rm -f ../lib/$(DEPDIR)/ahost-ares_nowarn.Po
+ -rm -f ../lib/$(DEPDIR)/adig-ares_strcasecmp.Po
-rm -f ../lib/$(DEPDIR)/ahost-ares_strcasecmp.Po
- -rm -f ./$(DEPDIR)/acountry-acountry.Po
- -rm -f ./$(DEPDIR)/acountry-ares_getopt.Po
-rm -f ./$(DEPDIR)/adig-adig.Po
-rm -f ./$(DEPDIR)/adig-ares_getopt.Po
-rm -f ./$(DEPDIR)/ahost-ahost.Po
diff --git a/src/tools/Makefile.inc b/src/tools/Makefile.inc
index 7aea8e5..dd081b3 100644
--- a/src/tools/Makefile.inc
+++ b/src/tools/Makefile.inc
@@ -1,7 +1,7 @@
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
SAMPLESOURCES = ares_getopt.c \
- ../lib/ares_nowarn.c \
../lib/ares_strcasecmp.c
SAMPLEHEADERS = ares_getopt.h \
- ../lib/ares_nowarn.h \
../lib/ares_strcasecmp.h
diff --git a/src/tools/acountry.c b/src/tools/acountry.c
deleted file mode 100644
index a86d7cb..0000000
--- a/src/tools/acountry.c
+++ /dev/null
@@ -1,652 +0,0 @@
-/*
- *
- * IP-address/hostname to country converter.
- *
- * Problem; you want to know where IP a.b.c.d is located.
- *
- * Use ares_gethostbyname ("d.c.b.a.zz.countries.nerd.dk")
- * and get the CNAME (host->h_name). Result will be:
- * CNAME = zz<CC>.countries.nerd.dk with address 127.0.x.y (ver 1) or
- * CNAME = <a.b.c.d>.zz.countries.nerd.dk with address 127.0.x.y (ver 2)
- *
- * The 2 letter country code is in <CC> and the ISO-3166 country
- * number is in x.y (number = x*256 + y). Version 2 of the protocol is missing
- * the <CC> number.
- *
- * Ref: http://countries.nerd.dk/more.html
- *
- * Written by G. Vanem <gvanem@yahoo.no> 2006, 2007
- *
- * NB! This program may not be big-endian aware.
- *
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
- */
-
-#include "ares_setup.h"
-
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-
-#if defined(WIN32) && !defined(WATT32)
- #include <winsock.h>
-#else
- #include <arpa/inet.h>
- #include <netinet/in.h>
- #include <netdb.h>
-#endif
-
-#include "ares.h"
-#include "ares_getopt.h"
-#include "ares_nowarn.h"
-
-#ifndef HAVE_STRDUP
-# include "ares_strdup.h"
-# define strdup(ptr) ares_strdup(ptr)
-#endif
-
-#ifndef HAVE_STRCASECMP
-# include "ares_strcasecmp.h"
-# define strcasecmp(p1,p2) ares_strcasecmp(p1,p2)
-#endif
-
-#ifndef HAVE_STRNCASECMP
-# include "ares_strcasecmp.h"
-# define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n)
-#endif
-
-#ifndef INADDR_NONE
-#define INADDR_NONE 0xffffffff
-#endif
-
-/* By using a double cast, we can get rid of the bogus warning of
- * warning: cast from 'const struct sockaddr *' to 'const struct sockaddr_in6 *' increases required alignment from 1 to 4 [-Wcast-align]
- */
-#define CARES_INADDR_CAST(type, var) ((type)((void *)var))
-
-static const char *usage = "acountry [-?hdv] {host|addr} ...\n";
-static const char nerd_fmt[] = "%u.%u.%u.%u.zz.countries.nerd.dk";
-static const char *nerd_ver1 = nerd_fmt + 14; /* .countries.nerd.dk */
-static const char *nerd_ver2 = nerd_fmt + 11; /* .zz.countries.nerd.dk */
-static int verbose = 0;
-
-#define TRACE(fmt) do { \
- if (verbose > 0) \
- printf fmt ; \
- } WHILE_FALSE
-
-static void wait_ares(ares_channel channel);
-static void callback(void *arg, int status, int timeouts, struct hostent *host);
-static void callback2(void *arg, int status, int timeouts, struct hostent *host);
-static void find_country_from_cname(const char *cname, struct in_addr addr);
-static void print_help_info_acountry(void);
-
-static void Abort(const char *fmt, ...)
-{
- va_list args;
- va_start(args, fmt);
- vfprintf(stderr, fmt, args);
- va_end(args);
- exit(1);
-}
-
-int main(int argc, char **argv)
-{
- ares_channel channel;
- int ch, status;
-
-#if defined(WIN32) && !defined(WATT32)
- WORD wVersionRequested = MAKEWORD(USE_WINSOCK,USE_WINSOCK);
- WSADATA wsaData;
- WSAStartup(wVersionRequested, &wsaData);
-#endif
-
- status = ares_library_init(ARES_LIB_INIT_ALL);
- if (status != ARES_SUCCESS)
- {
- fprintf(stderr, "ares_library_init: %s\n", ares_strerror(status));
- return 1;
- }
-
- while ((ch = ares_getopt(argc, argv, "dvh?")) != -1)
- switch (ch)
- {
- case 'd':
-#ifdef WATT32
- dbug_init();
-#endif
- break;
- case 'v':
- verbose++;
- break;
- case 'h':
- print_help_info_acountry();
- break;
- case '?':
- print_help_info_acountry();
- break;
- default:
- Abort(usage);
- }
-
- argc -= optind;
- argv += optind;
- if (argc < 1)
- Abort(usage);
-
- status = ares_init(&channel);
- if (status != ARES_SUCCESS)
- {
- fprintf(stderr, "ares_init: %s\n", ares_strerror(status));
- return 1;
- }
-
- /* Initiate the queries, one per command-line argument. */
- for ( ; *argv; argv++)
- {
- struct in_addr addr;
- char buf[100];
-
- /* If this fails, assume '*argv' is a host-name that
- * must be resolved first
- */
- if (ares_inet_pton(AF_INET, *argv, &addr) != 1)
- {
- ares_gethostbyname(channel, *argv, AF_INET, callback2, &addr);
- wait_ares(channel);
- if (addr.s_addr == INADDR_NONE)
- {
- printf("Failed to lookup %s\n", *argv);
- continue;
- }
- }
-
- sprintf(buf, nerd_fmt,
- (unsigned int)(addr.s_addr >> 24),
- (unsigned int)((addr.s_addr >> 16) & 255),
- (unsigned int)((addr.s_addr >> 8) & 255),
- (unsigned int)(addr.s_addr & 255));
- TRACE(("Looking up %s...", buf));
- fflush(stdout);
- ares_gethostbyname(channel, buf, AF_INET, callback, buf);
- }
-
- wait_ares(channel);
- ares_destroy(channel);
-
- ares_library_cleanup();
-
-#if defined(WIN32) && !defined(WATT32)
- WSACleanup();
-#endif
-
- return 0;
-}
-
-/*
- * Wait for the queries to complete.
- */
-static void wait_ares(ares_channel channel)
-{
- for (;;)
- {
- struct timeval *tvp, tv;
- fd_set read_fds, write_fds;
- int nfds;
-
- FD_ZERO(&read_fds);
- FD_ZERO(&write_fds);
- nfds = ares_fds(channel, &read_fds, &write_fds);
- if (nfds == 0)
- break;
- tvp = ares_timeout(channel, NULL, &tv);
- nfds = select(nfds, &read_fds, &write_fds, NULL, tvp);
- if (nfds < 0)
- continue;
- ares_process(channel, &read_fds, &write_fds);
- }
-}
-
-/*
- * This is the callback used when we have the IP-address of interest.
- * Extract the CNAME and figure out the country-code from it.
- */
-static void callback(void *arg, int status, int timeouts, struct hostent *host)
-{
- const char *name = (const char*)arg;
- const char *cname;
- char buf[20];
-
- (void)timeouts;
-
- if (!host || status != ARES_SUCCESS)
- {
- printf("Failed to lookup %s: %s\n", name, ares_strerror(status));
- return;
- }
-
- TRACE(("\nFound address %s, name %s\n",
- ares_inet_ntop(AF_INET,(const char*)host->h_addr,buf,sizeof(buf)),
- host->h_name));
-
- cname = host->h_name; /* CNAME gets put here */
- if (!cname)
- printf("Failed to get CNAME for %s\n", name);
- else
- find_country_from_cname(cname, *(CARES_INADDR_CAST(struct in_addr *, host->h_addr)));
-}
-
-/*
- * This is the callback used to obtain the IP-address of the host of interest.
- */
-static void callback2(void *arg, int status, int timeouts, struct hostent *host)
-{
- struct in_addr *addr = (struct in_addr*) arg;
-
- (void)timeouts;
- if (!host || status != ARES_SUCCESS)
- memset(addr, INADDR_NONE, sizeof(*addr));
- else
- memcpy(addr, host->h_addr, sizeof(*addr));
-}
-
-struct search_list {
- int country_number; /* ISO-3166 country number */
- char short_name[3]; /* A2 short country code */
- const char *long_name; /* normal country name */
- };
-
-static const struct search_list *list_lookup(int number, const struct search_list *list, int num)
-{
- while (num > 0 && list->long_name)
- {
- if (list->country_number == number)
- return (list);
- num--;
- list++;
- }
- return (NULL);
-}
-
-/*
- * Ref: https://en.wikipedia.org/wiki/ISO_3166-1
- */
-static const struct search_list country_list[] = {
- { 4, "af", "Afghanistan" },
- { 248, "ax", "Ã…land Island" },
- { 8, "al", "Albania" },
- { 12, "dz", "Algeria" },
- { 16, "as", "American Samoa" },
- { 20, "ad", "Andorra" },
- { 24, "ao", "Angola" },
- { 660, "ai", "Anguilla" },
- { 10, "aq", "Antarctica" },
- { 28, "ag", "Antigua & Barbuda" },
- { 32, "ar", "Argentina" },
- { 51, "am", "Armenia" },
- { 533, "aw", "Aruba" },
- { 36, "au", "Australia" },
- { 40, "at", "Austria" },
- { 31, "az", "Azerbaijan" },
- { 44, "bs", "Bahamas" },
- { 48, "bh", "Bahrain" },
- { 50, "bd", "Bangladesh" },
- { 52, "bb", "Barbados" },
- { 112, "by", "Belarus" },
- { 56, "be", "Belgium" },
- { 84, "bz", "Belize" },
- { 204, "bj", "Benin" },
- { 60, "bm", "Bermuda" },
- { 64, "bt", "Bhutan" },
- { 68, "bo", "Bolivia" },
- { 535, "bq", "Bonaire, Sint Eustatius and Saba" }, /* Formerly 'Bonaire' / 'Netherlands Antilles' */
- { 70, "ba", "Bosnia & Herzegovina" },
- { 72, "bw", "Botswana" },
- { 74, "bv", "Bouvet Island" },
- { 76, "br", "Brazil" },
- { 86, "io", "British Indian Ocean Territory" },
- { 96, "bn", "Brunei Darussalam" },
- { 100, "bg", "Bulgaria" },
- { 854, "bf", "Burkina Faso" },
- { 108, "bi", "Burundi" },
- { 116, "kh", "Cambodia" },
- { 120, "cm", "Cameroon" },
- { 124, "ca", "Canada" },
- { 132, "cv", "Cape Verde" },
- { 136, "ky", "Cayman Islands" },
- { 140, "cf", "Central African Republic" },
- { 148, "td", "Chad" },
- { 152, "cl", "Chile" },
- { 156, "cn", "China" },
- { 162, "cx", "Christmas Island" },
- { 166, "cc", "Cocos Islands" },
- { 170, "co", "Colombia" },
- { 174, "km", "Comoros" },
- { 178, "cg", "Congo" },
- { 180, "cd", "Congo" },
- { 184, "ck", "Cook Islands" },
- { 188, "cr", "Costa Rica" },
- { 384, "ci", "Cote d'Ivoire" },
- { 191, "hr", "Croatia" },
- { 192, "cu", "Cuba" },
- { 531, "cw", "Curaçao" },
- { 196, "cy", "Cyprus" },
- { 203, "cz", "Czech Republic" },
- { 208, "dk", "Denmark" },
- { 262, "dj", "Djibouti" },
- { 212, "dm", "Dominica" },
- { 214, "do", "Dominican Republic" },
- { 218, "ec", "Ecuador" },
- { 818, "eg", "Egypt" },
- { 222, "sv", "El Salvador" },
- { 226, "gq", "Equatorial Guinea" },
- { 232, "er", "Eritrea" },
- { 233, "ee", "Estonia" },
- { 748, "sz", "Eswatini" }, /* Formerly Swaziland */
- { 231, "et", "Ethiopia" },
- { 65281, "eu", "European Union" }, /* 127.0.255.1 */
- { 238, "fk", "Falkland Islands" },
- { 234, "fo", "Faroe Islands" },
- { 242, "fj", "Fiji" },
- { 246, "fi", "Finland" },
- { 250, "fr", "France" },
- { 249, "fx", "France, Metropolitan" },
- { 254, "gf", "French Guiana" },
- { 258, "pf", "French Polynesia" },
- { 260, "tf", "French Southern Territories" },
- { 266, "ga", "Gabon" },
- { 270, "gm", "Gambia" },
- { 268, "ge", "Georgia" },
- { 276, "de", "Germany" },
- { 288, "gh", "Ghana" },
- { 292, "gi", "Gibraltar" },
- { 300, "gr", "Greece" },
- { 304, "gl", "Greenland" },
- { 308, "gd", "Grenada" },
- { 312, "gp", "Guadeloupe" },
- { 316, "gu", "Guam" },
- { 320, "gt", "Guatemala" },
- { 831, "gg", "Guernsey" },
- { 324, "gn", "Guinea" },
- { 624, "gw", "Guinea-Bissau" },
- { 328, "gy", "Guyana" },
- { 332, "ht", "Haiti" },
- { 334, "hm", "Heard & Mc Donald Islands" },
- { 336, "va", "Holy See" }, /* Vatican City */
- { 340, "hn", "Honduras" },
- { 344, "hk", "Hong kong" },
- { 348, "hu", "Hungary" },
- { 352, "is", "Iceland" },
- { 356, "in", "India" },
- { 360, "id", "Indonesia" },
- { 364, "ir", "Iran" },
- { 368, "iq", "Iraq" },
- { 372, "ie", "Ireland" },
- { 833, "im", "Isle of Man" },
- { 376, "il", "Israel" },
- { 380, "it", "Italy" },
- { 388, "jm", "Jamaica" },
- { 392, "jp", "Japan" },
- { 832, "je", "Jersey" },
- { 400, "jo", "Jordan" },
- { 398, "kz", "Kazakhstan" },
- { 404, "ke", "Kenya" },
- { 296, "ki", "Kiribati" },
- { 408, "kp", "Korea (north)" },
- { 410, "kr", "Korea (south)" },
- { 0, "xk", "Kosovo" }, /* https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2 */
- { 414, "kw", "Kuwait" },
- { 417, "kg", "Kyrgyzstan" },
- { 418, "la", "Laos" },
- { 428, "lv", "Latvia" },
- { 422, "lb", "Lebanon" },
- { 426, "ls", "Lesotho" },
- { 430, "lr", "Liberia" },
- { 434, "ly", "Libya" },
- { 438, "li", "Liechtenstein" },
- { 440, "lt", "Lithuania" },
- { 442, "lu", "Luxembourg" },
- { 446, "mo", "Macao" },
- { 450, "mg", "Madagascar" },
- { 454, "mw", "Malawi" },
- { 458, "my", "Malaysia" },
- { 462, "mv", "Maldives" },
- { 466, "ml", "Mali" },
- { 470, "mt", "Malta" },
- { 584, "mh", "Marshall Islands" },
- { 474, "mq", "Martinique" },
- { 478, "mr", "Mauritania" },
- { 480, "mu", "Mauritius" },
- { 175, "yt", "Mayotte" },
- { 484, "mx", "Mexico" },
- { 583, "fm", "Micronesia" },
- { 498, "md", "Moldova" },
- { 492, "mc", "Monaco" },
- { 496, "mn", "Mongolia" },
- { 499, "me", "Montenegro" },
- { 500, "ms", "Montserrat" },
- { 504, "ma", "Morocco" },
- { 508, "mz", "Mozambique" },
- { 104, "mm", "Myanmar" },
- { 516, "na", "Namibia" },
- { 520, "nr", "Nauru" },
- { 524, "np", "Nepal" },
- { 528, "nl", "Netherlands" },
- { 540, "nc", "New Caledonia" },
- { 554, "nz", "New Zealand" },
- { 558, "ni", "Nicaragua" },
- { 562, "ne", "Niger" },
- { 566, "ng", "Nigeria" },
- { 570, "nu", "Niue" },
- { 574, "nf", "Norfolk Island" },
- { 807, "mk", "North Macedonia" }, /* 'Macedonia' until February 2019 */
- { 580, "mp", "Northern Mariana Islands" },
- { 578, "no", "Norway" },
- { 512, "om", "Oman" },
- { 586, "pk", "Pakistan" },
- { 585, "pw", "Palau" },
- { 275, "ps", "Palestinian Territory" },
- { 591, "pa", "Panama" },
- { 598, "pg", "Papua New Guinea" },
- { 600, "py", "Paraguay" },
- { 604, "pe", "Peru" },
- { 608, "ph", "Philippines" },
- { 612, "pn", "Pitcairn" },
- { 616, "pl", "Poland" },
- { 620, "pt", "Portugal" },
- { 630, "pr", "Puerto Rico" },
- { 634, "qa", "Qatar" },
- { 638, "re", "Reunion" },
- { 642, "ro", "Romania" },
- { 643, "ru", "Russian Federation" },
- { 646, "rw", "Rwanda" },
- { 0, "bl", "Saint Barthélemy" }, /* https://en.wikipedia.org/wiki/ISO_3166-2:BL */
- { 659, "kn", "Saint Kitts & Nevis" },
- { 662, "lc", "Saint Lucia" },
- { 663, "mf", "Saint Martin" },
- { 670, "vc", "Saint Vincent" },
- { 882, "ws", "Samoa" },
- { 674, "sm", "San Marino" },
- { 678, "st", "Sao Tome & Principe" },
- { 682, "sa", "Saudi Arabia" },
- { 686, "sn", "Senegal" },
- { 688, "rs", "Serbia" },
- { 690, "sc", "Seychelles" },
- { 694, "sl", "Sierra Leone" },
- { 702, "sg", "Singapore" },
- { 534, "sx", "Sint Maarten" },
- { 703, "sk", "Slovakia" },
- { 705, "si", "Slovenia" },
- { 90, "sb", "Solomon Islands" },
- { 706, "so", "Somalia" },
- { 710, "za", "South Africa" },
- { 239, "gs", "South Georgia & South Sandwich Is." },
- { 728, "ss", "South Sudan" },
- { 724, "es", "Spain" },
- { 144, "lk", "Sri Lanka" },
- { 654, "sh", "St. Helena" },
- { 666, "pm", "St. Pierre & Miquelon" },
- { 736, "sd", "Sudan" },
- { 740, "sr", "Suriname" },
- { 744, "sj", "Svalbard & Jan Mayen Islands" },
- { 752, "se", "Sweden" },
- { 756, "ch", "Switzerland" },
- { 760, "sy", "Syrian Arab Republic" },
- { 158, "tw", "Taiwan" },
- { 762, "tj", "Tajikistan" },
- { 834, "tz", "Tanzania" },
- { 764, "th", "Thailand" },
- { 626, "tl", "Timor-Leste" },
- { 768, "tg", "Togo" },
- { 772, "tk", "Tokelau" },
- { 776, "to", "Tonga" },
- { 780, "tt", "Trinidad & Tobago" },
- { 788, "tn", "Tunisia" },
- { 792, "tr", "Turkey" },
- { 795, "tm", "Turkmenistan" },
- { 796, "tc", "Turks & Caicos Islands" },
- { 798, "tv", "Tuvalu" },
- { 800, "ug", "Uganda" },
- { 804, "ua", "Ukraine" },
- { 784, "ae", "United Arab Emirates" },
- { 826, "gb", "United Kingdom" },
- { 840, "us", "United States" },
- { 581, "um", "United States Minor Outlying Islands" },
- { 858, "uy", "Uruguay" },
- { 860, "uz", "Uzbekistan" },
- { 548, "vu", "Vanuatu" },
- { 862, "ve", "Venezuela" },
- { 704, "vn", "Vietnam" },
- { 92, "vg", "Virgin Islands (British)" },
- { 850, "vi", "Virgin Islands (US)" },
- { 876, "wf", "Wallis & Futuna Islands" },
- { 732, "eh", "Western Sahara" },
- { 887, "ye", "Yemen" },
- { 894, "zm", "Zambia" },
- { 716, "zw", "Zimbabwe" }
- };
-
-/*
- * Check if start of 'str' is simply an IPv4 address.
- */
-#define BYTE_OK(x) ((x) >= 0 && (x) <= 255)
-
-static int is_addr(char *str, char **end)
-{
- int a0, a1, a2, a3, num, rc = 0, length = 0;
-
- num = sscanf(str,"%3d.%3d.%3d.%3d%n",&a0,&a1,&a2,&a3,&length);
- if( (num == 4) &&
- BYTE_OK(a0) && BYTE_OK(a1) && BYTE_OK(a2) && BYTE_OK(a3) &&
- length >= (3+4))
- {
- rc = 1;
- *end = str + length;
- }
- return rc;
-}
-
-/*
- * Find the country-code and name from the CNAME. E.g.:
- * version 1: CNAME = zzno.countries.nerd.dk with address 127.0.2.66
- * yields ccode_A" = "no" and cnumber 578 (2.66).
- * version 2: CNAME = <a.b.c.d>.zz.countries.nerd.dk with address 127.0.2.66
- * yields cnumber 578 (2.66). ccode_A is "";
- */
-static void find_country_from_cname(const char *cname, struct in_addr addr)
-{
- const struct search_list *country;
- char ccode_A2[3], *ccopy, *dot_4;
- int cnumber, z0, z1, ver_1, ver_2;
- unsigned long ip;
-
- ip = ntohl(addr.s_addr);
- z0 = TOLOWER(cname[0]);
- z1 = TOLOWER(cname[1]);
- ccopy = strdup(cname);
- dot_4 = NULL;
-
- ver_1 = (z0 == 'z' && z1 == 'z' && !strcasecmp(cname+4,nerd_ver1));
- ver_2 = (is_addr(ccopy,&dot_4) && !strcasecmp(dot_4,nerd_ver2));
-
- if (ver_1)
- {
- const char *dot = strchr(cname, '.');
- if (dot != cname+4)
- {
- printf("Unexpected CNAME %s (ver_1)\n", cname);
- free(ccopy);
- return;
- }
- }
- else if (ver_2)
- {
- z0 = TOLOWER(dot_4[1]);
- z1 = TOLOWER(dot_4[2]);
- if (z0 != 'z' && z1 != 'z')
- {
- printf("Unexpected CNAME %s (ver_2)\n", cname);
- free(ccopy);
- return;
- }
- }
- else
- {
- printf("Unexpected CNAME %s (ver?)\n", cname);
- free(ccopy);
- return;
- }
-
- if (ver_1)
- {
- ccode_A2[0] = (char)TOLOWER(cname[2]);
- ccode_A2[1] = (char)TOLOWER(cname[3]);
- ccode_A2[2] = '\0';
- }
- else
- ccode_A2[0] = '\0';
-
- cnumber = ip & 0xFFFF;
-
- TRACE(("Found country-code `%s', number %d\n",
- ver_1 ? ccode_A2 : "<n/a>", cnumber));
-
- country = list_lookup(cnumber, country_list,
- sizeof(country_list) / sizeof(country_list[0]));
- if (!country)
- printf("Name for country-number %d not found.\n", cnumber);
- else
- {
- if (ver_1)
- {
- if ((country->short_name[0] != ccode_A2[0]) ||
- (country->short_name[1] != ccode_A2[1]) ||
- (country->short_name[2] != ccode_A2[2]))
- printf("short-name mismatch; %s vs %s\n",
- country->short_name, ccode_A2);
- }
- printf("%s (%s), number %d.\n",
- country->long_name, country->short_name, cnumber);
- }
- free(ccopy);
-}
-
-/* Information from the man page. Formatting taken from man -h */
-static void print_help_info_acountry(void) {
- printf("acountry, version %s \n\n", ARES_VERSION_STR);
- printf("usage: acountry [-hdv] {host|addr} ...\n\n"
- " d : Print some extra debugging output.\n"
- " h : Display this help and exit.\n"
- " v : Be more verbose. Print extra information.\n\n");
- exit(0);
-}
diff --git a/src/tools/adig.c b/src/tools/adig.c
index 412ad46..17e1a34 100644
--- a/src/tools/adig.c
+++ b/src/tools/adig.c
@@ -1,17 +1,28 @@
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
*
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
@@ -35,7 +46,6 @@
#include "ares.h"
#include "ares_dns.h"
#include "ares_getopt.h"
-#include "ares_nowarn.h"
#ifndef HAVE_STRDUP
# include "ares_strdup.h"
@@ -44,333 +54,364 @@
#ifndef HAVE_STRCASECMP
# include "ares_strcasecmp.h"
-# define strcasecmp(p1,p2) ares_strcasecmp(p1,p2)
+# define strcasecmp(p1, p2) ares_strcasecmp(p1, p2)
#endif
#ifndef HAVE_STRNCASECMP
# include "ares_strcasecmp.h"
-# define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n)
+# define strncasecmp(p1, p2, n) ares_strncasecmp(p1, p2, n)
#endif
#ifdef WATT32
-#undef WIN32 /* Redefined in MingW headers */
+# undef WIN32 /* Redefined in MingW headers */
#endif
struct nv {
const char *name;
- int value;
+ int value;
};
static const struct nv flags[] = {
- { "usevc", ARES_FLAG_USEVC },
- { "primary", ARES_FLAG_PRIMARY },
- { "igntc", ARES_FLAG_IGNTC },
- { "norecurse", ARES_FLAG_NORECURSE },
- { "stayopen", ARES_FLAG_STAYOPEN },
- { "noaliases", ARES_FLAG_NOALIASES }
+ {"usevc", ARES_FLAG_USEVC },
+ { "primary", ARES_FLAG_PRIMARY },
+ { "igntc", ARES_FLAG_IGNTC },
+ { "norecurse", ARES_FLAG_NORECURSE},
+ { "stayopen", ARES_FLAG_STAYOPEN },
+ { "noaliases", ARES_FLAG_NOALIASES}
};
-static const int nflags = sizeof(flags) / sizeof(flags[0]);
+static const int nflags = sizeof(flags) / sizeof(flags[0]);
static const struct nv classes[] = {
- { "IN", C_IN },
- { "CHAOS", C_CHAOS },
- { "HS", C_HS },
- { "ANY", C_ANY }
+ {"IN", C_IN },
+ { "CHAOS", C_CHAOS},
+ { "HS", C_HS },
+ { "ANY", C_ANY }
};
-static const int nclasses = sizeof(classes) / sizeof(classes[0]);
+static const int nclasses = sizeof(classes) / sizeof(classes[0]);
static const struct nv types[] = {
- { "A", T_A },
- { "NS", T_NS },
- { "MD", T_MD },
- { "MF", T_MF },
- { "CNAME", T_CNAME },
- { "SOA", T_SOA },
- { "MB", T_MB },
- { "MG", T_MG },
- { "MR", T_MR },
- { "NULL", T_NULL },
- { "WKS", T_WKS },
- { "PTR", T_PTR },
- { "HINFO", T_HINFO },
- { "MINFO", T_MINFO },
- { "MX", T_MX },
- { "TXT", T_TXT },
- { "RP", T_RP },
- { "AFSDB", T_AFSDB },
- { "X25", T_X25 },
- { "ISDN", T_ISDN },
- { "RT", T_RT },
- { "NSAP", T_NSAP },
- { "NSAP_PTR", T_NSAP_PTR },
- { "SIG", T_SIG },
- { "KEY", T_KEY },
- { "PX", T_PX },
- { "GPOS", T_GPOS },
- { "AAAA", T_AAAA },
- { "LOC", T_LOC },
- { "SRV", T_SRV },
- { "AXFR", T_AXFR },
- { "MAILB", T_MAILB },
- { "MAILA", T_MAILA },
- { "NAPTR", T_NAPTR },
- { "DS", T_DS },
- { "SSHFP", T_SSHFP },
- { "RRSIG", T_RRSIG },
- { "NSEC", T_NSEC },
- { "DNSKEY", T_DNSKEY },
- { "CAA", T_CAA },
- { "URI", T_URI },
- { "ANY", T_ANY }
+ {"A", T_A },
+ { "NS", T_NS },
+ { "MD", T_MD },
+ { "MF", T_MF },
+ { "CNAME", T_CNAME },
+ { "SOA", T_SOA },
+ { "MB", T_MB },
+ { "MG", T_MG },
+ { "MR", T_MR },
+ { "NULL", T_NULL },
+ { "WKS", T_WKS },
+ { "PTR", T_PTR },
+ { "HINFO", T_HINFO },
+ { "MINFO", T_MINFO },
+ { "MX", T_MX },
+ { "TXT", T_TXT },
+ { "RP", T_RP },
+ { "AFSDB", T_AFSDB },
+ { "X25", T_X25 },
+ { "ISDN", T_ISDN },
+ { "RT", T_RT },
+ { "NSAP", T_NSAP },
+ { "NSAP_PTR", T_NSAP_PTR},
+ { "SIG", T_SIG },
+ { "KEY", T_KEY },
+ { "PX", T_PX },
+ { "GPOS", T_GPOS },
+ { "AAAA", T_AAAA },
+ { "LOC", T_LOC },
+ { "SRV", T_SRV },
+ { "AXFR", T_AXFR },
+ { "MAILB", T_MAILB },
+ { "MAILA", T_MAILA },
+ { "NAPTR", T_NAPTR },
+ { "DS", T_DS },
+ { "SSHFP", T_SSHFP },
+ { "RRSIG", T_RRSIG },
+ { "NSEC", T_NSEC },
+ { "DNSKEY", T_DNSKEY },
+ { "CAA", T_CAA },
+ { "URI", T_URI },
+ { "ANY", T_ANY }
};
-static const int ntypes = sizeof(types) / sizeof(types[0]);
+static const int ntypes = sizeof(types) / sizeof(types[0]);
static const char *opcodes[] = {
- "QUERY", "IQUERY", "STATUS", "(reserved)", "NOTIFY",
- "(unknown)", "(unknown)", "(unknown)", "(unknown)",
- "UPDATEA", "UPDATED", "UPDATEDA", "UPDATEM", "UPDATEMA",
- "ZONEINIT", "ZONEREF"
+ "QUERY", "IQUERY", "STATUS", "(reserved)", "NOTIFY", "(unknown)",
+ "(unknown)", "(unknown)", "(unknown)", "UPDATEA", "UPDATED", "UPDATEDA",
+ "UPDATEM", "UPDATEMA", "ZONEINIT", "ZONEREF"
};
static const char *rcodes[] = {
- "NOERROR", "FORMERR", "SERVFAIL", "NXDOMAIN", "NOTIMP", "REFUSED",
- "(unknown)", "(unknown)", "(unknown)", "(unknown)", "(unknown)",
- "(unknown)", "(unknown)", "(unknown)", "(unknown)", "NOCHANGE"
+ "NOERROR", "FORMERR", "SERVFAIL", "NXDOMAIN", "NOTIMP", "REFUSED",
+ "(unknown)", "(unknown)", "(unknown)", "(unknown)", "(unknown)", "(unknown)",
+ "(unknown)", "(unknown)", "(unknown)", "NOCHANGE"
};
-static void callback(void *arg, int status, int timeouts,
- unsigned char *abuf, int alen);
+static void callback(void *arg, int status, int timeouts, unsigned char *abuf,
+ int alen);
static const unsigned char *display_question(const unsigned char *aptr,
const unsigned char *abuf,
- int alen);
+ int alen);
static const unsigned char *display_rr(const unsigned char *aptr,
const unsigned char *abuf, int alen);
-static int convert_query (char **name, int use_bitstring);
-static const char *type_name(int type);
-static const char *class_name(int dnsclass);
-static void usage(void);
-static void destroy_addr_list(struct ares_addr_node *head);
-static void append_addr_list(struct ares_addr_node **head,
- struct ares_addr_node *node);
-static void print_help_info_adig(void);
+static int convert_query(char **name, int use_bitstring);
+static const char *type_name(int type);
+static const char *class_name(int dnsclass);
+static void usage(void);
+static void destroy_addr_list(struct ares_addr_node *head);
+static void append_addr_list(struct ares_addr_node **head,
+ struct ares_addr_node *node);
+static void print_help_info_adig(void);
+
+static size_t ares_strcpy(char *dest, const char *src, size_t dest_size)
+{
+ size_t len = 0;
+
+ if (dest == NULL || dest_size == 0) {
+ return 0;
+ }
+
+ if (src != NULL) {
+ len = strlen(src);
+ }
+
+ if (len >= dest_size) {
+ len = dest_size - 1;
+ }
+
+ if (len) {
+ memcpy(dest, src, len);
+ }
+
+ dest[len] = 0;
+ return len;
+}
int main(int argc, char **argv)
{
- ares_channel channel;
- int c, i, optmask = ARES_OPT_FLAGS, dnsclass = C_IN, type = T_A;
- int status, nfds, count;
- int use_ptr_helper = 0;
- struct ares_options options;
- struct hostent *hostent;
- fd_set read_fds, write_fds;
- struct timeval *tvp, tv;
- struct ares_addr_node *srvr, *servers = NULL;
+ ares_channel channel;
+ int c;
+ int i;
+ int optmask = ARES_OPT_FLAGS;
+ int dnsclass = C_IN;
+ int type = T_A;
+ int status;
+ int nfds;
+ int count;
+ int use_ptr_helper = 0;
+ struct ares_options options;
+ struct hostent *hostent;
+ fd_set read_fds;
+ fd_set write_fds;
+ struct timeval *tvp;
+ struct timeval tv;
+ struct ares_addr_node *srvr;
+ struct ares_addr_node *servers = NULL;
#ifdef USE_WINSOCK
- WORD wVersionRequested = MAKEWORD(USE_WINSOCK,USE_WINSOCK);
+ WORD wVersionRequested = MAKEWORD(USE_WINSOCK, USE_WINSOCK);
WSADATA wsaData;
WSAStartup(wVersionRequested, &wsaData);
#endif
status = ares_library_init(ARES_LIB_INIT_ALL);
- if (status != ARES_SUCCESS)
- {
- fprintf(stderr, "ares_library_init: %s\n", ares_strerror(status));
- return 1;
- }
+ if (status != ARES_SUCCESS) {
+ fprintf(stderr, "ares_library_init: %s\n", ares_strerror(status));
+ return 1;
+ }
- options.flags = ARES_FLAG_NOCHECKRESP;
- options.servers = NULL;
+ options.flags = ARES_FLAG_NOCHECKRESP;
+ options.servers = NULL;
options.nservers = 0;
- while ((c = ares_getopt(argc, argv, "dh?f:s:c:t:T:U:x")) != -1)
- {
- switch (c)
- {
- case 'd':
+ while ((c = ares_getopt(argc, argv, "dh?f:s:c:t:T:U:x")) != -1) {
+ switch (c) {
+ case 'd':
#ifdef WATT32
- dbug_init();
+ dbug_init();
#endif
- break;
- case 'h':
- print_help_info_adig();
- break;
- case '?':
- print_help_info_adig();
- break;
- case 'f':
- /* Add a flag. */
- for (i = 0; i < nflags; i++)
- {
- if (strcmp(flags[i].name, optarg) == 0)
- break;
- }
- if (i < nflags)
- options.flags |= flags[i].value;
- else
- usage();
- break;
-
- case 's':
- /* User-specified name servers override default ones. */
- srvr = malloc(sizeof(struct ares_addr_node));
- if (!srvr)
- {
- fprintf(stderr, "Out of memory!\n");
+ break;
+ case 'h':
+ print_help_info_adig();
+ break;
+ case '?':
+ print_help_info_adig();
+ break;
+ case 'f':
+ /* Add a flag. */
+ for (i = 0; i < nflags; i++) {
+ if (strcmp(flags[i].name, optarg) == 0) {
+ break;
+ }
+ }
+ if (i < nflags) {
+ options.flags |= flags[i].value;
+ } else {
+ usage();
+ }
+ break;
+
+ case 's':
+ /* User-specified name servers override default ones. */
+ srvr = malloc(sizeof(struct ares_addr_node));
+ if (!srvr) {
+ fprintf(stderr, "Out of memory!\n");
+ destroy_addr_list(servers);
+ return 1;
+ }
+ append_addr_list(&servers, srvr);
+ if (ares_inet_pton(AF_INET, optarg, &srvr->addr.addr4) > 0) {
+ srvr->family = AF_INET;
+ } else if (ares_inet_pton(AF_INET6, optarg, &srvr->addr.addr6) > 0) {
+ srvr->family = AF_INET6;
+ } else {
+ hostent = gethostbyname(optarg);
+ if (!hostent) {
+ fprintf(stderr, "adig: server %s not found.\n", optarg);
+ destroy_addr_list(servers);
+ return 1;
+ }
+ switch (hostent->h_addrtype) {
+ case AF_INET:
+ srvr->family = AF_INET;
+ memcpy(&srvr->addr.addr4, hostent->h_addr,
+ sizeof(srvr->addr.addr4));
+ break;
+ case AF_INET6:
+ srvr->family = AF_INET6;
+ memcpy(&srvr->addr.addr6, hostent->h_addr,
+ sizeof(srvr->addr.addr6));
+ break;
+ default:
+ fprintf(stderr, "adig: server %s unsupported address family.\n",
+ optarg);
destroy_addr_list(servers);
return 1;
- }
- append_addr_list(&servers, srvr);
- if (ares_inet_pton(AF_INET, optarg, &srvr->addr.addr4) > 0)
- srvr->family = AF_INET;
- else if (ares_inet_pton(AF_INET6, optarg, &srvr->addr.addr6) > 0)
- srvr->family = AF_INET6;
- else
- {
- hostent = gethostbyname(optarg);
- if (!hostent)
- {
- fprintf(stderr, "adig: server %s not found.\n", optarg);
- destroy_addr_list(servers);
- return 1;
- }
- switch (hostent->h_addrtype)
- {
- case AF_INET:
- srvr->family = AF_INET;
- memcpy(&srvr->addr.addr4, hostent->h_addr,
- sizeof(srvr->addr.addr4));
- break;
- case AF_INET6:
- srvr->family = AF_INET6;
- memcpy(&srvr->addr.addr6, hostent->h_addr,
- sizeof(srvr->addr.addr6));
- break;
- default:
- fprintf(stderr,
- "adig: server %s unsupported address family.\n", optarg);
- destroy_addr_list(servers);
- return 1;
- }
- }
- /* Notice that calling ares_init_options() without servers in the
- * options struct and with ARES_OPT_SERVERS set simultaneously in
- * the options mask, results in an initialization with no servers.
- * When alternative name servers have been specified these are set
- * later calling ares_set_servers() overriding any existing server
- * configuration. To prevent initial configuration with default
- * servers that will be discarded later, ARES_OPT_SERVERS is set.
- * If this flag is not set here the result shall be the same but
- * ares_init_options() will do needless work. */
- optmask |= ARES_OPT_SERVERS;
- break;
-
- case 'c':
- /* Set the query class. */
- for (i = 0; i < nclasses; i++)
- {
- if (strcasecmp(classes[i].name, optarg) == 0)
- break;
- }
- if (i < nclasses)
- dnsclass = classes[i].value;
- else
- usage();
- break;
-
- case 't':
- /* Set the query type. */
- for (i = 0; i < ntypes; i++)
- {
- if (strcasecmp(types[i].name, optarg) == 0)
- break;
- }
- if (i < ntypes)
- type = types[i].value;
- else
- usage();
- break;
-
- case 'T':
- /* Set the TCP port number. */
- if (!ISDIGIT(*optarg))
- usage();
- options.tcp_port = (unsigned short)strtol(optarg, NULL, 0);
- optmask |= ARES_OPT_TCP_PORT;
- break;
-
- case 'U':
- /* Set the UDP port number. */
- if (!ISDIGIT(*optarg))
- usage();
- options.udp_port = (unsigned short)strtol(optarg, NULL, 0);
- optmask |= ARES_OPT_UDP_PORT;
- break;
-
- case 'x':
- use_ptr_helper++;
- break;
+ }
+ }
+ /* Notice that calling ares_init_options() without servers in the
+ * options struct and with ARES_OPT_SERVERS set simultaneously in
+ * the options mask, results in an initialization with no servers.
+ * When alternative name servers have been specified these are set
+ * later calling ares_set_servers() overriding any existing server
+ * configuration. To prevent initial configuration with default
+ * servers that will be discarded later, ARES_OPT_SERVERS is set.
+ * If this flag is not set here the result shall be the same but
+ * ares_init_options() will do needless work. */
+ optmask |= ARES_OPT_SERVERS;
+ break;
+
+ case 'c':
+ /* Set the query class. */
+ for (i = 0; i < nclasses; i++) {
+ if (strcasecmp(classes[i].name, optarg) == 0) {
+ break;
+ }
+ }
+ if (i < nclasses) {
+ dnsclass = classes[i].value;
+ } else {
+ usage();
+ }
+ break;
+
+ case 't':
+ /* Set the query type. */
+ for (i = 0; i < ntypes; i++) {
+ if (strcasecmp(types[i].name, optarg) == 0) {
+ break;
+ }
+ }
+ if (i < ntypes) {
+ type = types[i].value;
+ } else {
+ usage();
+ }
+ break;
+
+ case 'T':
+ /* Set the TCP port number. */
+ if (!ISDIGIT(*optarg)) {
+ usage();
+ }
+ options.tcp_port = (unsigned short)strtol(optarg, NULL, 0);
+ options.flags |= ARES_FLAG_USEVC;
+ optmask |= ARES_OPT_TCP_PORT;
+ break;
+
+ case 'U':
+ /* Set the UDP port number. */
+ if (!ISDIGIT(*optarg)) {
+ usage();
}
+ options.udp_port = (unsigned short)strtol(optarg, NULL, 0);
+ optmask |= ARES_OPT_UDP_PORT;
+ break;
+
+ case 'x':
+ use_ptr_helper++;
+ break;
}
+ }
argc -= optind;
argv += optind;
- if (argc == 0)
+ if (argc == 0) {
usage();
+ }
status = ares_init_options(&channel, &options, optmask);
- if (status != ARES_SUCCESS)
- {
- fprintf(stderr, "ares_init_options: %s\n",
- ares_strerror(status));
- return 1;
- }
+ if (status != ARES_SUCCESS) {
+ fprintf(stderr, "ares_init_options: %s\n", ares_strerror(status));
+ return 1;
+ }
- if(servers)
- {
- status = ares_set_servers(channel, servers);
- destroy_addr_list(servers);
- if (status != ARES_SUCCESS)
- {
- fprintf(stderr, "ares_init_options: %s\n",
- ares_strerror(status));
- return 1;
- }
+ if (servers) {
+ status = ares_set_servers(channel, servers);
+ destroy_addr_list(servers);
+ if (status != ARES_SUCCESS) {
+ fprintf(stderr, "ares_init_options: %s\n", ares_strerror(status));
+ return 1;
}
+ }
/* Initiate the queries, one per command-line argument. If there is
* only one query to do, supply NULL as the callback argument;
* otherwise, supply the query name as an argument so we can
* distinguish responses for the user when printing them out.
*/
- for (i = 1; *argv; i++, argv++)
- {
- char *query = *argv;
+ for (i = 1; *argv; i++, argv++) {
+ char *query = *argv;
- if (type == T_PTR && dnsclass == C_IN && use_ptr_helper)
- if (!convert_query (&query, use_ptr_helper >= 2))
- continue;
-
- ares_query(channel, query, dnsclass, type, callback, i < argc-1 ? (void*)query : NULL);
+ if (type == T_PTR && dnsclass == C_IN && use_ptr_helper) {
+ if (!convert_query(&query, use_ptr_helper >= 2)) {
+ continue;
+ }
}
+ ares_query(channel, query, dnsclass, type, callback,
+ i < argc - 1 ? (void *)query : NULL);
+ }
+
/* Wait for all queries to complete. */
- for (;;)
- {
- FD_ZERO(&read_fds);
- FD_ZERO(&write_fds);
- nfds = ares_fds(channel, &read_fds, &write_fds);
- if (nfds == 0)
- break;
- tvp = ares_timeout(channel, NULL, &tv);
- count = select(nfds, &read_fds, &write_fds, NULL, tvp);
- if (count < 0 && (status = SOCKERRNO) != EINVAL)
- {
- printf("select fail: %d", status);
- return 1;
- }
- ares_process(channel, &read_fds, &write_fds);
+ for (;;) {
+ FD_ZERO(&read_fds);
+ FD_ZERO(&write_fds);
+ nfds = ares_fds(channel, &read_fds, &write_fds);
+ if (nfds == 0) {
+ break;
+ }
+ tvp = ares_timeout(channel, NULL, &tv);
+ if (tvp == NULL) {
+ break;
+ }
+ count = select(nfds, &read_fds, &write_fds, NULL, tvp);
+ if (count < 0 && (status = SOCKERRNO) != EINVAL) {
+ printf("select fail: %d", status);
+ return 1;
}
+ ares_process(channel, &read_fds, &write_fds);
+ }
ares_destroy(channel);
@@ -383,43 +424,56 @@ int main(int argc, char **argv)
return 0;
}
-static void callback(void *arg, int status, int timeouts,
- unsigned char *abuf, int alen)
+static void callback(void *arg, int status, int timeouts, unsigned char *abuf,
+ int alen)
{
- char *name = (char *) arg;
- int id, qr, opcode, aa, tc, rd, ra, rcode;
- unsigned int qdcount, ancount, nscount, arcount, i;
+ char *name = (char *)arg;
+ int id;
+ int qr;
+ int opcode;
+ int aa;
+ int tc;
+ int rd;
+ int ra;
+ int rcode;
+ unsigned int qdcount;
+ unsigned int ancount;
+ unsigned int nscount;
+ unsigned int arcount;
+ unsigned int i;
const unsigned char *aptr;
- (void) timeouts;
+ (void)timeouts;
/* Display the query name if given. */
- if (name)
+ if (name) {
printf("Answer for query %s:\n", name);
+ }
/* Display an error message if there was an error, but only stop if
* we actually didn't get an answer buffer.
*/
- if (status != ARES_SUCCESS)
- {
- printf("%s\n", ares_strerror(status));
- if (!abuf)
- return;
+ if (status != ARES_SUCCESS) {
+ printf("%s\n", ares_strerror(status));
+ if (!abuf) {
+ return;
}
+ }
/* Won't happen, but check anyway, for safety. */
- if (alen < HFIXEDSZ)
+ if (alen < HFIXEDSZ) {
return;
+ }
/* Parse the answer header. */
- id = DNS_HEADER_QID(abuf);
- qr = DNS_HEADER_QR(abuf);
- opcode = DNS_HEADER_OPCODE(abuf);
- aa = DNS_HEADER_AA(abuf);
- tc = DNS_HEADER_TC(abuf);
- rd = DNS_HEADER_RD(abuf);
- ra = DNS_HEADER_RA(abuf);
- rcode = DNS_HEADER_RCODE(abuf);
+ id = DNS_HEADER_QID(abuf);
+ qr = DNS_HEADER_QR(abuf);
+ opcode = DNS_HEADER_OPCODE(abuf);
+ aa = DNS_HEADER_AA(abuf);
+ tc = DNS_HEADER_TC(abuf);
+ rd = DNS_HEADER_RD(abuf);
+ ra = DNS_HEADER_RA(abuf);
+ rcode = DNS_HEADER_RCODE(abuf);
qdcount = DNS_HEADER_QDCOUNT(abuf);
ancount = DNS_HEADER_ANCOUNT(abuf);
nscount = DNS_HEADER_NSCOUNT(abuf);
@@ -427,87 +481,86 @@ static void callback(void *arg, int status, int timeouts,
/* Display the answer header. */
printf("id: %d\n", id);
- printf("flags: %s%s%s%s%s\n",
- qr ? "qr " : "",
- aa ? "aa " : "",
- tc ? "tc " : "",
- rd ? "rd " : "",
- ra ? "ra " : "");
+ printf("flags: %s%s%s%s%s\n", qr ? "qr " : "", aa ? "aa " : "",
+ tc ? "tc " : "", rd ? "rd " : "", ra ? "ra " : "");
printf("opcode: %s\n", opcodes[opcode]);
printf("rcode: %s\n", rcodes[rcode]);
/* Display the questions. */
printf("Questions:\n");
aptr = abuf + HFIXEDSZ;
- for (i = 0; i < qdcount; i++)
- {
- aptr = display_question(aptr, abuf, alen);
- if (aptr == NULL)
- return;
+ for (i = 0; i < qdcount; i++) {
+ aptr = display_question(aptr, abuf, alen);
+ if (aptr == NULL) {
+ return;
}
+ }
/* Display the answers. */
printf("Answers:\n");
- for (i = 0; i < ancount; i++)
- {
- aptr = display_rr(aptr, abuf, alen);
- if (aptr == NULL)
- return;
+ for (i = 0; i < ancount; i++) {
+ aptr = display_rr(aptr, abuf, alen);
+ if (aptr == NULL) {
+ return;
}
+ }
/* Display the NS records. */
printf("NS records:\n");
- for (i = 0; i < nscount; i++)
- {
- aptr = display_rr(aptr, abuf, alen);
- if (aptr == NULL)
- return;
+ for (i = 0; i < nscount; i++) {
+ aptr = display_rr(aptr, abuf, alen);
+ if (aptr == NULL) {
+ return;
}
+ }
/* Display the additional records. */
printf("Additional records:\n");
- for (i = 0; i < arcount; i++)
- {
- aptr = display_rr(aptr, abuf, alen);
- if (aptr == NULL)
- return;
+ for (i = 0; i < arcount; i++) {
+ aptr = display_rr(aptr, abuf, alen);
+ if (aptr == NULL) {
+ return;
}
+ }
}
static const unsigned char *display_question(const unsigned char *aptr,
const unsigned char *abuf,
- int alen)
+ int alen)
{
char *name;
- int type, dnsclass, status;
- long len;
+ int type;
+ int dnsclass;
+ int status;
+ long len;
/* Parse the question name. */
status = ares_expand_name(aptr, abuf, alen, &name, &len);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
return NULL;
+ }
aptr += len;
/* Make sure there's enough data after the name for the fixed part
* of the question.
*/
- if (aptr + QFIXEDSZ > abuf + alen)
- {
- ares_free_string(name);
- return NULL;
- }
+ if (aptr + QFIXEDSZ > abuf + alen) {
+ ares_free_string(name);
+ return NULL;
+ }
/* Parse the question type and class. */
- type = DNS_QUESTION_TYPE(aptr);
- dnsclass = DNS_QUESTION_CLASS(aptr);
- aptr += QFIXEDSZ;
+ type = DNS_QUESTION_TYPE(aptr);
+ dnsclass = DNS_QUESTION_CLASS(aptr);
+ aptr += QFIXEDSZ;
/* Display the question, in a format sort of similar to how we will
* display RRs.
*/
printf("\t%-15s.\t", name);
- if (dnsclass != C_IN)
+ if (dnsclass != C_IN) {
printf("\t%s", class_name(dnsclass));
+ }
printf("\t%s\n", type_name(type));
ares_free_string(name);
return aptr;
@@ -517,53 +570,58 @@ static const unsigned char *display_rr(const unsigned char *aptr,
const unsigned char *abuf, int alen)
{
const unsigned char *p;
- int type, dnsclass, ttl, dlen, status, i;
- long len;
- int vlen;
- char addr[46];
+ int type;
+ int dnsclass;
+ unsigned int ttl;
+ int dlen;
+ int status;
+ int i;
+ long len;
+ int vlen;
+ char addr[46];
+
union {
- unsigned char * as_uchar;
- char * as_char;
+ unsigned char *as_uchar;
+ char *as_char;
} name;
/* Parse the RR name. */
status = ares_expand_name(aptr, abuf, alen, &name.as_char, &len);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
return NULL;
+ }
aptr += len;
/* Make sure there is enough data after the RR name for the fixed
* part of the RR.
*/
- if (aptr + RRFIXEDSZ > abuf + alen)
- {
- ares_free_string(name.as_char);
- return NULL;
- }
+ if (aptr + RRFIXEDSZ > abuf + alen) {
+ ares_free_string(name.as_char);
+ return NULL;
+ }
/* Parse the fixed part of the RR, and advance to the RR data
* field. */
- type = DNS_RR_TYPE(aptr);
- dnsclass = DNS_RR_CLASS(aptr);
- ttl = DNS_RR_TTL(aptr);
- dlen = DNS_RR_LEN(aptr);
- aptr += RRFIXEDSZ;
- if (aptr + dlen > abuf + alen)
- {
- ares_free_string(name.as_char);
- return NULL;
- }
+ type = DNS_RR_TYPE(aptr);
+ dnsclass = DNS_RR_CLASS(aptr);
+ ttl = DNS_RR_TTL(aptr);
+ dlen = DNS_RR_LEN(aptr);
+ aptr += RRFIXEDSZ;
+ if (aptr + dlen > abuf + alen) {
+ ares_free_string(name.as_char);
+ return NULL;
+ }
/* Display the RR name, class, and type. */
printf("\t%-15s.\t%d", name.as_char, ttl);
- if (dnsclass != C_IN)
+ if (dnsclass != C_IN) {
printf("\t%s", class_name(dnsclass));
+ }
printf("\t%s", type_name(type));
ares_free_string(name.as_char);
/* Display the RR data. Don't touch aptr. */
- switch (type)
- {
+ switch (type) {
case T_CNAME:
case T_MB:
case T_MD:
@@ -574,46 +632,53 @@ static const unsigned char *display_rr(const unsigned char *aptr,
case T_PTR:
/* For these types, the RR data is just a domain name. */
status = ares_expand_name(aptr, abuf, alen, &name.as_char, &len);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
return NULL;
+ }
printf("\t%s.", name.as_char);
ares_free_string(name.as_char);
break;
case T_HINFO:
/* The RR data is two length-counted character strings. */
- p = aptr;
+ p = aptr;
len = *p;
- if (p + len + 1 > aptr + dlen)
+ if (p + len + 1 > aptr + dlen) {
return NULL;
+ }
status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
return NULL;
+ }
printf("\t%s", name.as_char);
ares_free_string(name.as_char);
- p += len;
- len = *p;
- if (p + len + 1 > aptr + dlen)
+ p += len;
+ len = *p;
+ if (p + len + 1 > aptr + dlen) {
return NULL;
+ }
status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
return NULL;
+ }
printf("\t%s", name.as_char);
ares_free_string(name.as_char);
break;
case T_MINFO:
/* The RR data is two domain names. */
- p = aptr;
+ p = aptr;
status = ares_expand_name(p, abuf, alen, &name.as_char, &len);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
return NULL;
+ }
printf("\t%s.", name.as_char);
ares_free_string(name.as_char);
- p += len;
- status = ares_expand_name(p, abuf, alen, &name.as_char, &len);
- if (status != ARES_SUCCESS)
+ p += len;
+ status = ares_expand_name(p, abuf, alen, &name.as_char, &len);
+ if (status != ARES_SUCCESS) {
return NULL;
+ }
printf("\t%s.", name.as_char);
ares_free_string(name.as_char);
break;
@@ -622,12 +687,14 @@ static const unsigned char *display_rr(const unsigned char *aptr,
/* The RR data is two bytes giving a preference ordering, and
* then a domain name.
*/
- if (dlen < 2)
+ if (dlen < 2) {
return NULL;
+ }
printf("\t%d", (int)DNS__16BIT(aptr));
status = ares_expand_name(aptr + 2, abuf, alen, &name.as_char, &len);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
return NULL;
+ }
printf("\t%s.", name.as_char);
ares_free_string(name.as_char);
break;
@@ -636,43 +703,45 @@ static const unsigned char *display_rr(const unsigned char *aptr,
/* The RR data is two domain names and then five four-byte
* numbers giving the serial number and some timeouts.
*/
- p = aptr;
+ p = aptr;
status = ares_expand_name(p, abuf, alen, &name.as_char, &len);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
return NULL;
+ }
printf("\t%s.\n", name.as_char);
ares_free_string(name.as_char);
- p += len;
- status = ares_expand_name(p, abuf, alen, &name.as_char, &len);
- if (status != ARES_SUCCESS)
+ p += len;
+ status = ares_expand_name(p, abuf, alen, &name.as_char, &len);
+ if (status != ARES_SUCCESS) {
return NULL;
+ }
printf("\t\t\t\t\t\t%s.\n", name.as_char);
ares_free_string(name.as_char);
p += len;
- if (p + 20 > aptr + dlen)
+ if (p + 20 > aptr + dlen) {
return NULL;
- printf("\t\t\t\t\t\t( %u %u %u %u %u )",
- DNS__32BIT(p), DNS__32BIT(p+4),
- DNS__32BIT(p+8), DNS__32BIT(p+12),
- DNS__32BIT(p+16));
+ }
+ printf("\t\t\t\t\t\t( %u %u %u %u %u )", DNS__32BIT(p), DNS__32BIT(p + 4),
+ DNS__32BIT(p + 8), DNS__32BIT(p + 12), DNS__32BIT(p + 16));
break;
case T_TXT:
/* The RR data is one or more length-counted character
* strings. */
p = aptr;
- while (p < aptr + dlen)
- {
- len = *p;
- if (p + len + 1 > aptr + dlen)
- return NULL;
- status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len);
- if (status != ARES_SUCCESS)
- return NULL;
- printf("\t%s", name.as_char);
- ares_free_string(name.as_char);
- p += len;
+ while (p < aptr + dlen) {
+ len = *p;
+ if (p + len + 1 > aptr + dlen) {
+ return NULL;
+ }
+ status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len);
+ if (status != ARES_SUCCESS) {
+ return NULL;
}
+ printf("\t%s", name.as_char);
+ ares_free_string(name.as_char);
+ p += len;
+ }
break;
case T_CAA:
@@ -691,14 +760,16 @@ static const unsigned char *display_rr(const unsigned char *aptr,
- "iodef", or
- "issuewild" */
status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
return NULL;
+ }
printf(" %s", name.as_char);
ares_free_string(name.as_char);
p += len;
- if (p + vlen > abuf + alen)
+ if (p + vlen > abuf + alen) {
return NULL;
+ }
/* A sequence of octets representing the Property Value */
printf(" %.*s", vlen, p);
@@ -706,16 +777,18 @@ static const unsigned char *display_rr(const unsigned char *aptr,
case T_A:
/* The RR data is a four-byte Internet address. */
- if (dlen != 4)
+ if (dlen != 4) {
return NULL;
- printf("\t%s", ares_inet_ntop(AF_INET,aptr,addr,sizeof(addr)));
+ }
+ printf("\t%s", ares_inet_ntop(AF_INET, aptr, addr, sizeof(addr)));
break;
case T_AAAA:
/* The RR data is a 16-byte IPv6 address. */
- if (dlen != 16)
+ if (dlen != 16) {
return NULL;
- printf("\t%s", ares_inet_ntop(AF_INET6,aptr,addr,sizeof(addr)));
+ }
+ printf("\t%s", ares_inet_ntop(AF_INET6, aptr, addr, sizeof(addr)));
break;
case T_WKS:
@@ -732,8 +805,9 @@ static const unsigned char *display_rr(const unsigned char *aptr,
printf(" %d", (int)DNS__16BIT(aptr + 4));
status = ares_expand_name(aptr + 6, abuf, alen, &name.as_char, &len);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
return NULL;
+ }
printf("\t%s.", name.as_char);
ares_free_string(name.as_char);
break;
@@ -744,42 +818,47 @@ static const unsigned char *display_rr(const unsigned char *aptr,
*/
printf("\t%d ", (int)DNS__16BIT(aptr));
- printf("%d \t\t", (int)DNS__16BIT(aptr+2));
- p = aptr +4;
- for (i=0; i <dlen-4; ++i)
- printf("%c",p[i]);
+ printf("%d \t\t", (int)DNS__16BIT(aptr + 2));
+ p = aptr + 4;
+ for (i = 0; i < dlen - 4; ++i) {
+ printf("%c", p[i]);
+ }
break;
case T_NAPTR:
- printf("\t%d", (int)DNS__16BIT(aptr)); /* order */
+ printf("\t%d", (int)DNS__16BIT(aptr)); /* order */
printf(" %d\n", (int)DNS__16BIT(aptr + 2)); /* preference */
- p = aptr + 4;
+ p = aptr + 4;
status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
return NULL;
+ }
printf("\t\t\t\t\t\t%s\n", name.as_char);
ares_free_string(name.as_char);
p += len;
status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
return NULL;
+ }
printf("\t\t\t\t\t\t%s\n", name.as_char);
ares_free_string(name.as_char);
p += len;
status = ares_expand_string(p, abuf, alen, &name.as_uchar, &len);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
return NULL;
+ }
printf("\t\t\t\t\t\t%s\n", name.as_char);
ares_free_string(name.as_char);
p += len;
status = ares_expand_name(p, abuf, alen, &name.as_char, &len);
- if (status != ARES_SUCCESS)
+ if (status != ARES_SUCCESS) {
return NULL;
+ }
printf("\t\t\t\t\t\t%s", name.as_char);
ares_free_string(name.as_char);
break;
@@ -795,7 +874,7 @@ static const unsigned char *display_rr(const unsigned char *aptr,
default:
printf("\t[Unknown RR; cannot parse]");
break;
- }
+ }
printf("\n");
return aptr + dlen;
@@ -811,30 +890,32 @@ static const unsigned char *display_rr(const unsigned char *aptr,
* An example from 'dig -x PTR 2001:470:1:1b9::31':
*
* QUESTION SECTION:
- * 1.3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.9.b.1.0.1.0.0.0.0.7.4.0.1.0.0.2.IP6.ARPA. IN PTR
+ * 1.3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.9.b.1.0.1.0.0.0.0.7.4.0.1.0.0.2.IP6.ARPA. IN
+ * PTR
*
* ANSWER SECTION:
- * 1.3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.9.b.1.0.1.0.0.0.0.7.4.0.1.0.0.2.IP6.ARPA. 254148 IN PTR ipv6.cybernode.com.
+ * 1.3.0.0.0.0.0.0.0.0.0.0.0.0.0.0.9.b.1.0.1.0.0.0.0.7.4.0.1.0.0.2.IP6.ARPA.
+ * 254148 IN PTR ipv6.cybernode.com.
*
- * If 'use_bitstring == 1', try to use the more compact RFC-2673 bitstring format.
- * Thus the above 'dig' query should become:
+ * If 'use_bitstring == 1', try to use the more compact RFC-2673 bitstring
+ * format. Thus the above 'dig' query should become:
* [x13000000000000009b10100007401002].IP6.ARPA. IN PTR
*/
-static int convert_query (char **name_p, int use_bitstring)
+static int convert_query(char **name_p, int use_bitstring)
{
#ifndef MAX_IP6_RR
-#define MAX_IP6_RR (16*sizeof(".x.x") + sizeof(".IP6.ARPA") + 1)
+# define MAX_IP6_RR (16 * sizeof(".x.x") + sizeof(".IP6.ARPA") + 1)
#endif
#ifdef HAVE_INET_PTON
- #define ACCEPTED_RETVAL4 1
- #define ACCEPTED_RETVAL6 1
+# define ACCEPTED_RETVAL4 1
+# define ACCEPTED_RETVAL6 1
#else
- #define ACCEPTED_RETVAL4 32
- #define ACCEPTED_RETVAL6 128
+# define ACCEPTED_RETVAL4 32
+# define ACCEPTED_RETVAL6 128
#endif
- static char new_name [MAX_IP6_RR];
+ static char new_name[MAX_IP6_RR];
static const char hex_chars[] = "0123456789ABCDEF";
union {
@@ -842,59 +923,56 @@ static int convert_query (char **name_p, int use_bitstring)
struct ares_in6_addr addr6;
} addr;
- if (ares_inet_pton (AF_INET, *name_p, &addr.addr4) == 1)
- {
- unsigned long laddr = ntohl(addr.addr4.s_addr);
- unsigned long a1 = (laddr >> 24UL) & 0xFFUL;
- unsigned long a2 = (laddr >> 16UL) & 0xFFUL;
- unsigned long a3 = (laddr >> 8UL) & 0xFFUL;
- unsigned long a4 = laddr & 0xFFUL;
-
- snprintf(new_name, sizeof(new_name), "%lu.%lu.%lu.%lu.in-addr.arpa", a4, a3, a2, a1);
- *name_p = new_name;
- return (1);
- }
-
- if (ares_inet_pton(AF_INET6, *name_p, &addr.addr6) == 1)
- {
- char *c = new_name;
- const unsigned char *ip = (const unsigned char*) &addr.addr6;
- int max_i = (int)sizeof(addr.addr6) - 1;
- int i, hi, lo;
-
- /* Use the more compact RFC-2673 notation?
- * Currently doesn't work or unsupported by the DNS-servers I've tested against.
- */
- if (use_bitstring)
- {
- *c++ = '\\';
- *c++ = '[';
- *c++ = 'x';
- for (i = max_i; i >= 0; i--)
- {
- hi = ip[i] >> 4;
- lo = ip[i] & 15;
- *c++ = hex_chars [lo];
- *c++ = hex_chars [hi];
- }
- strcpy (c, "].IP6.ARPA");
- }
- else
- {
- for (i = max_i; i >= 0; i--)
- {
- hi = ip[i] >> 4;
- lo = ip[i] & 15;
- *c++ = hex_chars [lo];
- *c++ = '.';
- *c++ = hex_chars [hi];
- *c++ = '.';
- }
- strcpy (c, "IP6.ARPA");
- }
- *name_p = new_name;
- return (1);
+ if (ares_inet_pton(AF_INET, *name_p, &addr.addr4) == 1) {
+ unsigned long laddr = ntohl(addr.addr4.s_addr);
+ unsigned long a1 = (laddr >> 24UL) & 0xFFUL;
+ unsigned long a2 = (laddr >> 16UL) & 0xFFUL;
+ unsigned long a3 = (laddr >> 8UL) & 0xFFUL;
+ unsigned long a4 = laddr & 0xFFUL;
+
+ snprintf(new_name, sizeof(new_name), "%lu.%lu.%lu.%lu.in-addr.arpa", a4, a3,
+ a2, a1);
+ *name_p = new_name;
+ return (1);
+ }
+
+ if (ares_inet_pton(AF_INET6, *name_p, &addr.addr6) == 1) {
+ char *c = new_name;
+ const unsigned char *ip = (const unsigned char *)&addr.addr6;
+ int max_i = (int)sizeof(addr.addr6) - 1;
+ int i;
+ int hi;
+ int lo;
+
+ /* Use the more compact RFC-2673 notation?
+ * Currently doesn't work or unsupported by the DNS-servers I've tested
+ * against.
+ */
+ if (use_bitstring) {
+ *c++ = '\\';
+ *c++ = '[';
+ *c++ = 'x';
+ for (i = max_i; i >= 0; i--) {
+ hi = ip[i] >> 4;
+ lo = ip[i] & 15;
+ *c++ = hex_chars[lo];
+ *c++ = hex_chars[hi];
+ }
+ ares_strcpy(c, "].IP6.ARPA", sizeof(new_name) - strlen(c));
+ } else {
+ for (i = max_i; i >= 0; i--) {
+ hi = ip[i] >> 4;
+ lo = ip[i] & 15;
+ *c++ = hex_chars[lo];
+ *c++ = '.';
+ *c++ = hex_chars[hi];
+ *c++ = '.';
+ }
+ ares_strcpy(c, "IP6.ARPA", sizeof(new_name) - strlen(c));
}
+ *name_p = new_name;
+ return (1);
+ }
printf("Address %s was not legal for this query.\n", *name_p);
return (0);
}
@@ -903,11 +981,11 @@ static const char *type_name(int type)
{
int i;
- for (i = 0; i < ntypes; i++)
- {
- if (types[i].value == type)
- return types[i].name;
+ for (i = 0; i < ntypes; i++) {
+ if (types[i].value == type) {
+ return types[i].name;
}
+ }
return "(unknown)";
}
@@ -915,69 +993,82 @@ static const char *class_name(int dnsclass)
{
int i;
- for (i = 0; i < nclasses; i++)
- {
- if (classes[i].value == dnsclass)
- return classes[i].name;
+ for (i = 0; i < nclasses; i++) {
+ if (classes[i].value == dnsclass) {
+ return classes[i].name;
}
+ }
return "(unknown)";
}
static void usage(void)
{
fprintf(stderr, "usage: adig [-h] [-d] [-f flag] [-s server] [-c class] "
- "[-t type] [-T|U port] [-x|-xx] name ...\n");
+ "[-t type] [-T|U port] [-x|-xx] name ...\n");
exit(1);
}
static void destroy_addr_list(struct ares_addr_node *head)
{
- while(head)
- {
- struct ares_addr_node *detached = head;
- head = head->next;
- free(detached);
- }
+ while (head) {
+ struct ares_addr_node *detached = head;
+ head = head->next;
+ free(detached);
+ }
}
static void append_addr_list(struct ares_addr_node **head,
- struct ares_addr_node *node)
+ struct ares_addr_node *node)
{
struct ares_addr_node *last;
node->next = NULL;
- if(*head)
- {
- last = *head;
- while(last->next)
- last = last->next;
- last->next = node;
+ if (*head) {
+ last = *head;
+ while (last->next) {
+ last = last->next;
}
- else
+ last->next = node;
+ } else {
*head = node;
+ }
}
-
/* Information from the man page. Formatting taken from man -h */
-static void print_help_info_adig(void) {
- printf("adig, version %s \n\n", ARES_VERSION_STR);
- printf("usage: adig [-h] [-d] [-f flag] [-s server] [-c class] [-t type] [-T|U port] [-x | -xx] name ...\n\n"
- " d : Print some extra debugging output.\n"
- " f : Add a flag. Possible values for flag are igntc, noaliases, norecurse, primary, stayopen, usevc.\n"
- " h : Display this help and exit.\n\n"
- " T port : Use specified TCP port to connect to DNS server.\n"
- " U port : Use specified UDP port to connect to DNS server.\n"
- " c class : Set the query class. Possible values for class are NY, CHAOS, HS, IN (default).\n"
- " s server : Connect to specified DNS server, instead of the system's default one(s).\n"
- " t type : Query records of specified type. \n"
- " Possible values for type are A \n"
- " (default), AAAA, AFSDB, ANY,\n"
- " AXFR, CNAME, GPOS, HINFO, ISDN,\n"
- " KEY, LOC, MAILA, MAILB, MB, MD,\n"
- " MF, MG, MINFO, MR, MX, NAPTR, NS,\n"
- " NSAP, NSAP_PTR, NULL, PTR, PX, RP,\n"
- " RT, SIG, SOA, SRV, TXT, URI, WKS, X25\n\n"
+static void print_help_info_adig(void)
+{
+ printf("adig, version %s\n\n", ARES_VERSION_STR);
+ printf(
+ "usage: adig [-h] [-d] [-f flag] [[-s server] ...] [-T|U port] [-c class] "
+ "[-t type] [-x|-xx] name ...\n\n"
+ " h : Display this help and exit.\n"
+ " d : Print some extra debugging output.\n\n"
+ " f flag : Add a behavior control flag. Possible values are\n"
+ " igntc - ignore to query in TCP to get truncated UDP "
+ "answer,\n"
+ " noaliases - don't honor the HOSTALIASES environment "
+ "variable,\n"
+ " norecurse - don't query upstream servers recursively,\n"
+ " primary - use the first server,\n"
+ " stayopen - don't close the communication sockets, and\n"
+ " usevc - use TCP only.\n"
+ " s server : Connect to the specified DNS server, instead of the system's "
+ "default one(s).\n"
+ " Servers are tried in round-robin, if the previous one "
+ "failed.\n"
+ " T port : Connect to the specified TCP port of DNS server.\n"
+ " U port : Connect to the specified UDP port of DNS server.\n"
+ " c class : Set the query class. Possible values for class are ANY, "
+ "CHAOS, HS and IN (default)\n"
+ " t type : Query records of the specified type.\n"
+ " Possible values for type are A (default), AAAA, AFSDB, ANY, "
+ "AXFR,\n"
+ " CNAME, GPOS, HINFO, ISDN, KEY, LOC, MAILA, MAILB, MB, MD, "
+ "MF, MG,\n"
+ " MINFO, MR, MX, NAPTR, NS, NSAP, NSAP_PTR, NULL, PTR, PX, "
+ "RP, RT,\n"
+ " SIG, SOA, SRV, TXT, URI, WKS and X25.\n\n"
" -x : For a '-t PTR a.b.c.d' lookup, query for 'd.c.b.a.in-addr.arpa.'\n"
" -xx : As above, but for IPv6, compact the format into a bitstring like\n"
" '[xabcdef00000000000000000000000000].IP6.ARPA.'\n");
- exit(0);
+ exit(0);
}
diff --git a/src/tools/ahost.c b/src/tools/ahost.c
index 77ca7cd..c67c53b 100644
--- a/src/tools/ahost.c
+++ b/src/tools/ahost.c
@@ -1,36 +1,46 @@
-/* Copyright 1998 by the Massachusetts Institute of Technology.
+/* MIT License
*
+ * Copyright (c) 1998 Massachusetts Institute of Technology
+ * Copyright (c) The c-ares project and its contributors
*
- * Permission to use, copy, modify, and distribute this
- * software and its documentation for any purpose and without
- * fee is hereby granted, 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.
+ * 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 (including the next
+ * paragraph) 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
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ *
+ * SPDX-License-Identifier: MIT
*/
#include "ares_setup.h"
#if !defined(WIN32) || defined(WATT32)
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
+# include <netinet/in.h>
+# include <arpa/inet.h>
+# include <netdb.h>
#endif
#ifdef HAVE_STRINGS_H
-#include <strings.h>
+# include <strings.h>
#endif
#include "ares.h"
#include "ares_dns.h"
#include "ares_getopt.h"
#include "ares_ipv6.h"
-#include "ares_nowarn.h"
#ifndef HAVE_STRDUP
# include "ares_strdup.h"
@@ -39,31 +49,36 @@
#ifndef HAVE_STRCASECMP
# include "ares_strcasecmp.h"
-# define strcasecmp(p1,p2) ares_strcasecmp(p1,p2)
+# define strcasecmp(p1, p2) ares_strcasecmp(p1, p2)
#endif
#ifndef HAVE_STRNCASECMP
# include "ares_strcasecmp.h"
-# define strncasecmp(p1,p2,n) ares_strncasecmp(p1,p2,n)
+# define strncasecmp(p1, p2, n) ares_strncasecmp(p1, p2, n)
#endif
static void callback(void *arg, int status, int timeouts, struct hostent *host);
static void usage(void);
static void print_help_info_ahost(void);
-int main(int argc, char **argv)
+int main(int argc, char **argv)
{
- struct ares_options options;
- int optmask = 0;
- ares_channel channel;
- int status, nfds, c, addr_family = AF_INET;
- fd_set read_fds, write_fds;
- struct timeval *tvp, tv;
- struct in_addr addr4;
+ struct ares_options options;
+ int optmask = 0;
+ ares_channel channel;
+ int status;
+ int nfds;
+ int c;
+ int addr_family = AF_INET;
+ fd_set read_fds;
+ fd_set write_fds;
+ struct timeval *tvp;
+ struct timeval tv;
+ struct in_addr addr4;
struct ares_in6_addr addr6;
#ifdef USE_WINSOCK
- WORD wVersionRequested = MAKEWORD(USE_WINSOCK,USE_WINSOCK);
+ WORD wVersionRequested = MAKEWORD(USE_WINSOCK, USE_WINSOCK);
WSADATA wsaData;
WSAStartup(wVersionRequested, &wsaData);
#endif
@@ -71,96 +86,92 @@ int main(int argc, char **argv)
memset(&options, 0, sizeof(options));
status = ares_library_init(ARES_LIB_INIT_ALL);
- if (status != ARES_SUCCESS)
- {
- fprintf(stderr, "ares_library_init: %s\n", ares_strerror(status));
- return 1;
- }
-
- while ((c = ares_getopt(argc,argv,"dt:h?s:")) != -1)
- {
- switch (c)
- {
- case 'd':
+ if (status != ARES_SUCCESS) {
+ fprintf(stderr, "ares_library_init: %s\n", ares_strerror(status));
+ return 1;
+ }
+
+ while ((c = ares_getopt(argc, argv, "dt:h?s:")) != -1) {
+ switch (c) {
+ case 'd':
#ifdef WATT32
- dbug_init();
+ dbug_init();
#endif
- break;
- case 's':
- optmask |= ARES_OPT_DOMAINS;
- options.ndomains++;
- options.domains = (char **)realloc(options.domains,
- options.ndomains * sizeof(char *));
- options.domains[options.ndomains - 1] = strdup(optarg);
- break;
- case 't':
- if (!strcasecmp(optarg,"a"))
- addr_family = AF_INET;
- else if (!strcasecmp(optarg,"aaaa"))
- addr_family = AF_INET6;
- else if (!strcasecmp(optarg,"u"))
- addr_family = AF_UNSPEC;
- else
- usage();
- break;
- case 'h':
- print_help_info_ahost();
- break;
- case '?':
- print_help_info_ahost();
- break;
- default:
+ break;
+ case 's':
+ optmask |= ARES_OPT_DOMAINS;
+ options.ndomains++;
+ options.domains = (char **)realloc(
+ options.domains, (size_t)options.ndomains * sizeof(char *));
+ options.domains[options.ndomains - 1] = strdup(optarg);
+ break;
+ case 't':
+ if (!strcasecmp(optarg, "a")) {
+ addr_family = AF_INET;
+ } else if (!strcasecmp(optarg, "aaaa")) {
+ addr_family = AF_INET6;
+ } else if (!strcasecmp(optarg, "u")) {
+ addr_family = AF_UNSPEC;
+ } else {
usage();
- break;
}
+ break;
+ case 'h':
+ print_help_info_ahost();
+ break;
+ case '?':
+ print_help_info_ahost();
+ break;
+ default:
+ usage();
+ break;
}
+ }
argc -= optind;
argv += optind;
- if (argc < 1)
+ if (argc < 1) {
usage();
+ }
status = ares_init_options(&channel, &options, optmask);
- if (status != ARES_SUCCESS)
- {
- fprintf(stderr, "ares_init: %s\n", ares_strerror(status));
- return 1;
- }
+ if (status != ARES_SUCCESS) {
+ fprintf(stderr, "ares_init: %s\n", ares_strerror(status));
+ return 1;
+ }
/* Initiate the queries, one per command-line argument. */
- for ( ; *argv; argv++)
- {
- if (ares_inet_pton(AF_INET, *argv, &addr4) == 1)
- {
- ares_gethostbyaddr(channel, &addr4, sizeof(addr4), AF_INET, callback,
- *argv);
- }
- else if (ares_inet_pton(AF_INET6, *argv, &addr6) == 1)
- {
- ares_gethostbyaddr(channel, &addr6, sizeof(addr6), AF_INET6, callback,
- *argv);
- }
- else
- {
- ares_gethostbyname(channel, *argv, addr_family, callback, *argv);
- }
+ for (; *argv; argv++) {
+ if (ares_inet_pton(AF_INET, *argv, &addr4) == 1) {
+ ares_gethostbyaddr(channel, &addr4, sizeof(addr4), AF_INET, callback,
+ *argv);
+ } else if (ares_inet_pton(AF_INET6, *argv, &addr6) == 1) {
+ ares_gethostbyaddr(channel, &addr6, sizeof(addr6), AF_INET6, callback,
+ *argv);
+ } else {
+ ares_gethostbyname(channel, *argv, addr_family, callback, *argv);
}
+ }
/* Wait for all queries to complete. */
- for (;;)
- {
- int res;
- FD_ZERO(&read_fds);
- FD_ZERO(&write_fds);
- nfds = ares_fds(channel, &read_fds, &write_fds);
- if (nfds == 0)
- break;
- tvp = ares_timeout(channel, NULL, &tv);
- res = select(nfds, &read_fds, &write_fds, NULL, tvp);
- if (-1 == res)
- break;
- ares_process(channel, &read_fds, &write_fds);
+ for (;;) {
+ int res;
+ FD_ZERO(&read_fds);
+ FD_ZERO(&write_fds);
+ nfds = ares_fds(channel, &read_fds, &write_fds);
+ if (nfds == 0) {
+ break;
}
+ tvp = ares_timeout(channel, NULL, &tv);
+ if (tvp == NULL) {
+ break;
+ }
+ res = select(nfds, &read_fds, &write_fds, NULL, tvp);
+ if (-1 == res) {
+ break;
+ }
+ ares_process(channel, &read_fds, &write_fds);
+ }
ares_destroy(channel);
@@ -179,18 +190,16 @@ static void callback(void *arg, int status, int timeouts, struct hostent *host)
(void)timeouts;
- if (status != ARES_SUCCESS)
- {
- fprintf(stderr, "%s: %s\n", (char *) arg, ares_strerror(status));
- return;
- }
+ if (status != ARES_SUCCESS) {
+ fprintf(stderr, "%s: %s\n", (char *)arg, ares_strerror(status));
+ return;
+ }
- for (p = host->h_addr_list; *p; p++)
- {
- char addr_buf[46] = "??";
+ for (p = host->h_addr_list; *p; p++) {
+ char addr_buf[46] = "??";
- ares_inet_ntop(host->h_addrtype, *p, addr_buf, sizeof(addr_buf));
- printf("%-32s\t%s", host->h_name, addr_buf);
+ ares_inet_ntop(host->h_addrtype, *p, addr_buf, sizeof(addr_buf));
+ printf("%-32s\t%s", host->h_name, addr_buf);
#if 0
if (host->h_aliases[0])
{
@@ -201,31 +210,36 @@ static void callback(void *arg, int status, int timeouts, struct hostent *host)
printf("%s ", host->h_aliases[i]);
}
#endif
- puts("");
- }
+ puts("");
+ }
}
static void usage(void)
{
- fprintf(stderr, "usage: ahost [-h] [-d] [-s {domain}] [-t {a|aaaa|u}] {host|addr} ...\n");
+ fprintf(
+ stderr,
+ "usage: ahost [-h] [-d] [-s {domain}] [-t {a|aaaa|u}] {host|addr} ...\n");
exit(1);
}
/* Information from the man page. Formatting taken from man -h */
-static void print_help_info_ahost(void) {
- printf("ahost, version %s \n\n", ARES_VERSION_STR);
- printf("usage: ahost [-h] [-d] [-s {domain}] [-t {a|aaaa|u}] {host|addr} ...\n\n"
- " d : Print some extra debugging output.\n"
- " h : Display this help and exit.\n\n"
- " s domain : Specify the domain to search instead of \n"
- " using the default values from \n"
- " /etc/resolv.conf. This option only has an \n"
- " effect on platforms that use /etc/resolv.conf\n"
- " for DNS configuration; it has no effect on other\n"
- " platforms (such as Win32 or Android).\n"
+static void print_help_info_ahost(void)
+{
+ printf("ahost, version %s\n\n", ARES_VERSION_STR);
+ printf(
+ "usage: ahost [-h] [-d] [[-s domain] ...] [-t a|aaaa|u] host|addr ...\n\n"
+ " h : Display this help and exit.\n"
+ " d : Print some extra debugging output.\n\n"
+ " s domain : Specify the domain to search instead of using the default "
+ "values\n"
+ " from /etc/resolv.conf. This option only has an effect on\n"
+ " platforms that use /etc/resolv.conf for DNS "
+ "configuration;\n"
+ " it has no effect on other platforms (such as Win32 or "
+ "Android).\n\n"
" t type : If type is \"a\", print the A record (default).\n"
- " If type is \"aaaa\", print the AAAA record. If\n"
- " type is \"u\", look for either AAAA or A record\n"
- " (in that order).\n\n");
- exit(0);
-}
+ " If type is \"aaaa\", print the AAAA record.\n"
+ " If type is \"u\", look for either AAAA or A record (in "
+ "that order).\n\n");
+ exit(0);
+}
diff --git a/src/tools/ares_getopt.c b/src/tools/ares_getopt.c
index 1e02d08..b49606f 100644
--- a/src/tools/ares_getopt.c
+++ b/src/tools/ares_getopt.c
@@ -36,6 +36,8 @@
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
*/
/* #if !defined(lint)
@@ -48,75 +50,77 @@
#include <string.h>
#include "ares_getopt.h"
-int opterr = 1, /* if error message should be printed */
- optind = 1; /* index into parent argv vector */
-int optopt = 0; /* character checked for validity */
-static int optreset; /* reset getopt */
-char *optarg; /* argument associated with option */
+int opterr = 1; /* if error message should be printed */
+int optind = 1; /* index into parent argv vector */
+int optopt = 0; /* character checked for validity */
+static int optreset; /* reset getopt */
+char *optarg; /* argument associated with option */
-#define BADCH (int)'?'
-#define BADARG (int)':'
-#define EMSG (char *)""
+#define BADCH (int)'?'
+#define BADARG (int)':'
+#define EMSG (char *)""
/*
* ares_getopt --
* Parse argc/argv argument vector.
*/
-int
-ares_getopt(int nargc, char * const nargv[], const char *ostr)
+int ares_getopt(int nargc, char * const nargv[], const char *ostr)
{
- static char *place = EMSG; /* option letter processing */
- char *oli; /* option letter list index */
+ static char *place = EMSG; /* option letter processing */
+ char *oli; /* option letter list index */
- if (optreset || !*place) { /* update scanning pointer */
- optreset = 0;
- if (optind >= nargc || *(place = nargv[optind]) != '-') {
- place = EMSG;
- return (EOF);
- }
- if (place[1] && *++place == '-') { /* found "--" */
- ++optind;
- place = EMSG;
- return (EOF);
- }
- } /* option letter okay? */
- if ((optopt = (int)*place++) == (int)':' ||
- (oli = strchr(ostr, optopt)) == NULL) {
- /*
- * if the user didn't specify '-' as an option,
- * assume it means EOF.
- */
- if (optopt == (int)'-')
- return (EOF);
- if (!*place)
- ++optind;
- if (opterr && *ostr != ':')
- (void)fprintf(stderr,
- "%s: illegal option -- %c\n", __FILE__, optopt);
- return (BADCH);
+ if (optreset || !*place) { /* update scanning pointer */
+ optreset = 0;
+ if (optind >= nargc || *(place = nargv[optind]) != '-') {
+ place = EMSG;
+ return (EOF);
+ }
+ if (place[1] && *++place == '-') { /* found "--" */
+ ++optind;
+ place = EMSG;
+ return (EOF);
+ }
+ } /* option letter okay? */
+ if ((optopt = (int)*place++) == (int)':' ||
+ (oli = strchr(ostr, optopt)) == NULL) {
+ /*
+ * if the user didn't specify '-' as an option,
+ * assume it means EOF.
+ */
+ if (optopt == (int)'-') {
+ return (EOF);
+ }
+ if (!*place) {
+ ++optind;
+ }
+ if (opterr && *ostr != ':') {
+ (void)fprintf(stderr, "%s: illegal option -- %c\n", __FILE__, optopt);
}
- if (*++oli != ':') { /* don't need argument */
- optarg = NULL;
- if (!*place)
- ++optind;
+ return (BADCH);
+ }
+ if (*++oli != ':') { /* don't need argument */
+ optarg = NULL;
+ if (!*place) {
+ ++optind;
}
- else { /* need an argument */
- if (*place) /* no white space */
- optarg = place;
- else if (nargc <= ++optind) { /* no arg */
- place = EMSG;
- if (*ostr == ':')
- return (BADARG);
- if (opterr)
- (void)fprintf(stderr,
- "%s: option requires an argument -- %c\n",
- __FILE__, optopt);
- return (BADCH);
- }
- else /* white space */
- optarg = nargv[optind];
- place = EMSG;
- ++optind;
+ } else { /* need an argument */
+ if (*place) { /* no white space */
+ optarg = place;
+ } else if (nargc <= ++optind) { /* no arg */
+ place = EMSG;
+ if (*ostr == ':') {
+ return (BADARG);
+ }
+ if (opterr) {
+ (void)fprintf(stderr, "%s: option requires an argument -- %c\n",
+ __FILE__, optopt);
+ }
+ return (BADCH);
+ } else { /* white space */
+ optarg = nargv[optind];
}
- return (optopt); /* dump back option letter */
+ place = EMSG;
+ ++optind;
+ }
+ return (optopt); /* dump back option letter */
}
diff --git a/src/tools/ares_getopt.h b/src/tools/ares_getopt.h
index 63acb3b..b80da75 100644
--- a/src/tools/ares_getopt.h
+++ b/src/tools/ares_getopt.h
@@ -28,16 +28,28 @@
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
*/
int ares_getopt(int nargc, char * const nargv[], const char *ostr);
-#undef optarg
-#undef optind
-#undef opterr
-#undef optopt
-#undef optreset
+#ifdef optarg
+# undef optarg
+#endif
+#ifdef optind
+# undef optind
+#endif
+#ifdef opterr
+# undef opterr
+#endif
+#ifdef optopt
+# undef optopt
+#endif
+#ifdef optreset
+# undef optreset
+#endif
#define optarg ares_optarg
#define optind ares_optind
@@ -46,8 +58,8 @@ int ares_getopt(int nargc, char * const nargv[], const char *ostr);
#define optreset ares_optreset
extern char *optarg;
-extern int optind;
-extern int opterr;
-extern int optopt;
+extern int optind;
+extern int opterr;
+extern int optopt;
#endif /* ARES_GETOPT_H */
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 6f87cd5..78e2d5c 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -1,3 +1,5 @@
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
set(CMAKE_CXX_EXTENSIONS FALSE)
diff --git a/test/Makefile.am b/test/Makefile.am
index 1fe8b2d..1e03d82 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -1,3 +1,24 @@
+#############################################################
+#
+# Copyright (C) the Massachusetts Institute of Technology.
+# Copyright (C) Daniel Stenberg
+#
+# Permission to use, copy, modify, and distribute this
+# software and its documentation for any purpose and without
+# fee is hereby granted, 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.
+#
+# SPDX-License-Identifier: MIT
+#
+#############################################################
+
ARES_BLD_DIR = $(top_builddir)/..
ARES_SRC_DIR = $(top_srcdir)/..
@@ -31,21 +52,19 @@ libgmock_la_CPPFLAGS = -isystem $(srcdir)/gmock-1.11.0
noinst_PROGRAMS = arestest aresfuzz aresfuzzname dnsdump
EXTRA_DIST = fuzzcheck.sh CMakeLists.txt Makefile.m32 Makefile.msvc README.md buildconf $(srcdir)/fuzzinput/* $(srcdir)/fuzznames/*
arestest_SOURCES = $(TESTSOURCES) $(TESTHEADERS)
-arestest_LDADD = libgmock.la $(ARES_BLD_DIR)/src/lib/libcares.la $(PTHREAD_LIBS)
# Not interested in coverage of test code, but linking the test binary needs the coverage option
+arestest_LDADD = libgmock.la $(ARES_BLD_DIR)/src/lib/libcares.la $(PTHREAD_LIBS) $(CODE_COVERAGE_LIBS)
include $(top_srcdir)/aminclude_static.am
-arestest_LIBS = $(CODE_COVERAGE_LIBS)
-
aresfuzz_SOURCES = $(FUZZSOURCES)
-aresfuzz_LDADD = $(ARES_BLD_DIR)/src/lib/libcares.la
+aresfuzz_LDADD = $(ARES_BLD_DIR)/src/lib/libcares.la $(CODE_COVERAGE_LIBS)
aresfuzzname_SOURCES = $(FUZZNAMESOURCES)
-aresfuzzname_LDADD = $(ARES_BLD_DIR)/src/lib/libcares.la
+aresfuzzname_LDADD = $(ARES_BLD_DIR)/src/lib/libcares.la $(CODE_COVERAGE_LIBS)
dnsdump_SOURCES = $(DUMPSOURCES)
-dnsdump_LDADD = $(ARES_BLD_DIR)/src/lib/libcares.la
+dnsdump_LDADD = $(ARES_BLD_DIR)/src/lib/libcares.la $(CODE_COVERAGE_LIBS)
test: check
diff --git a/test/Makefile.in b/test/Makefile.in
index 0d422be..4eb7bee 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -14,8 +14,29 @@
@SET_MAKE@
+#############################################################
+#
+# Copyright (C) the Massachusetts Institute of Technology.
+# Copyright (C) Daniel Stenberg
+#
+# Permission to use, copy, modify, and distribute this
+# software and its documentation for any purpose and without
+# fee is hereby granted, 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.
+#
+# SPDX-License-Identifier: MIT
+#
+#############################################################
+
# aminclude_static.am generated automatically by Autoconf
-# from AX_AM_MACROS_STATIC on Mon Oct 25 23:08:32 CEST 2021
+# from AX_AM_MACROS_STATIC on Mon Oct 9 16:56:28 CEST 2023
VPATH = @srcdir@
@@ -105,6 +126,7 @@ am__aclocal_m4_deps = $(top_srcdir)/../m4/ax_ac_append_to_file.m4 \
$(top_srcdir)/../m4/ax_check_user_namespace.m4 \
$(top_srcdir)/../m4/ax_check_uts_namespace.m4 \
$(top_srcdir)/../m4/ax_code_coverage.m4 \
+ $(top_srcdir)/../m4/ax_cxx_compile_stdcxx.m4 \
$(top_srcdir)/../m4/ax_cxx_compile_stdcxx_11.m4 \
$(top_srcdir)/../m4/ax_file_escapes.m4 \
$(top_srcdir)/../m4/ax_pthread.m4 \
@@ -137,11 +159,14 @@ am__v_lt_1 =
am__objects_1 = ares-test-fuzz.$(OBJEXT) ares-fuzz.$(OBJEXT)
am_aresfuzz_OBJECTS = $(am__objects_1)
aresfuzz_OBJECTS = $(am_aresfuzz_OBJECTS)
-aresfuzz_DEPENDENCIES = $(ARES_BLD_DIR)/src/lib/libcares.la
+am__DEPENDENCIES_1 =
+aresfuzz_DEPENDENCIES = $(ARES_BLD_DIR)/src/lib/libcares.la \
+ $(am__DEPENDENCIES_1)
am__objects_2 = ares-test-fuzz-name.$(OBJEXT) ares-fuzz.$(OBJEXT)
am_aresfuzzname_OBJECTS = $(am__objects_2)
aresfuzzname_OBJECTS = $(am_aresfuzzname_OBJECTS)
-aresfuzzname_DEPENDENCIES = $(ARES_BLD_DIR)/src/lib/libcares.la
+aresfuzzname_DEPENDENCIES = $(ARES_BLD_DIR)/src/lib/libcares.la \
+ $(am__DEPENDENCIES_1)
am__objects_3 = ares-test-main.$(OBJEXT) ares-test-init.$(OBJEXT) \
ares-test.$(OBJEXT) ares-test-ns.$(OBJEXT) \
ares-test-parse.$(OBJEXT) ares-test-parse-a.$(OBJEXT) \
@@ -158,13 +183,14 @@ am__objects_3 = ares-test-main.$(OBJEXT) ares-test-init.$(OBJEXT) \
am__objects_4 =
am_arestest_OBJECTS = $(am__objects_3) $(am__objects_4)
arestest_OBJECTS = $(am_arestest_OBJECTS)
-am__DEPENDENCIES_1 =
arestest_DEPENDENCIES = libgmock.la \
- $(ARES_BLD_DIR)/src/lib/libcares.la $(am__DEPENDENCIES_1)
+ $(ARES_BLD_DIR)/src/lib/libcares.la $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
am__objects_5 = dns-proto.$(OBJEXT) dns-dump.$(OBJEXT)
am_dnsdump_OBJECTS = $(am__objects_5)
dnsdump_OBJECTS = $(am_dnsdump_OBJECTS)
-dnsdump_DEPENDENCIES = $(ARES_BLD_DIR)/src/lib/libcares.la
+dnsdump_DEPENDENCIES = $(ARES_BLD_DIR)/src/lib/libcares.la \
+ $(am__DEPENDENCIES_1)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -511,6 +537,7 @@ CODE_COVERAGE_CPPFLAGS = @CODE_COVERAGE_CPPFLAGS@
CODE_COVERAGE_CXXFLAGS = @CODE_COVERAGE_CXXFLAGS@
CODE_COVERAGE_ENABLED = @CODE_COVERAGE_ENABLED@
CODE_COVERAGE_LIBS = @CODE_COVERAGE_LIBS@
+CPP = @CPP@
# Note use of -isystem to force use of local gMock/gTest even if there's an installed version.
CPPFLAGS = @CPPFLAGS@ -I$(ARES_BLD_DIR)/include \
@@ -536,6 +563,7 @@ EGREP = @EGREP@
ETAGS = @ETAGS@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
+FILECMD = @FILECMD@
GCOV = @GCOV@
GENHTML = @GENHTML@
GREP = @GREP@
@@ -575,6 +603,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
PTHREAD_CC = @PTHREAD_CC@
PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
+PTHREAD_CXX = @PTHREAD_CXX@
PTHREAD_LIBS = @PTHREAD_LIBS@
RANLIB = @RANLIB@
SED = @SED@
@@ -643,6 +672,9 @@ ARES_BLD_DIR = $(top_builddir)/..
ARES_SRC_DIR = $(top_srcdir)/..
AUTOMAKE_OPTIONS = foreign subdir-objects nostdinc 1.9.6
ACLOCAL_AMFLAGS = -I ../m4 --install
+
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
TESTSOURCES = ares-test-main.cc \
ares-test-init.cc \
ares-test.cc \
@@ -690,7 +722,9 @@ libgmock_la_SOURCES = \
libgmock_la_CPPFLAGS = -isystem $(srcdir)/gmock-1.11.0
EXTRA_DIST = fuzzcheck.sh CMakeLists.txt Makefile.m32 Makefile.msvc README.md buildconf $(srcdir)/fuzzinput/* $(srcdir)/fuzznames/*
arestest_SOURCES = $(TESTSOURCES) $(TESTHEADERS)
-arestest_LDADD = libgmock.la $(ARES_BLD_DIR)/src/lib/libcares.la $(PTHREAD_LIBS)
+
+# Not interested in coverage of test code, but linking the test binary needs the coverage option
+arestest_LDADD = libgmock.la $(ARES_BLD_DIR)/src/lib/libcares.la $(PTHREAD_LIBS) $(CODE_COVERAGE_LIBS)
@CODE_COVERAGE_ENABLED_TRUE@GITIGNOREFILES := $(GITIGNOREFILES) $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_DIRECTORY)
@CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_cap = $(code_coverage_v_lcov_cap_$(V))
@CODE_COVERAGE_ENABLED_TRUE@code_coverage_v_lcov_cap_ = $(code_coverage_v_lcov_cap_$(AM_DEFAULT_VERBOSITY))
@@ -708,15 +742,12 @@ arestest_LDADD = libgmock.la $(ARES_BLD_DIR)/src/lib/libcares.la $(PTHREAD_LIBS)
# sanitizes the test-name: replaces with underscores: dashes and dots
@CODE_COVERAGE_ENABLED_TRUE@code_coverage_sanitize = $(subst -,_,$(subst .,_,$(1)))
@CODE_COVERAGE_ENABLED_TRUE@AM_DISTCHECK_CONFIGURE_FLAGS := $(AM_DISTCHECK_CONFIGURE_FLAGS) --disable-code-coverage
-
-# Not interested in coverage of test code, but linking the test binary needs the coverage option
-arestest_LIBS = $(CODE_COVERAGE_LIBS)
aresfuzz_SOURCES = $(FUZZSOURCES)
-aresfuzz_LDADD = $(ARES_BLD_DIR)/src/lib/libcares.la
+aresfuzz_LDADD = $(ARES_BLD_DIR)/src/lib/libcares.la $(CODE_COVERAGE_LIBS)
aresfuzzname_SOURCES = $(FUZZNAMESOURCES)
-aresfuzzname_LDADD = $(ARES_BLD_DIR)/src/lib/libcares.la
+aresfuzzname_LDADD = $(ARES_BLD_DIR)/src/lib/libcares.la $(CODE_COVERAGE_LIBS)
dnsdump_SOURCES = $(DUMPSOURCES)
-dnsdump_LDADD = $(ARES_BLD_DIR)/src/lib/libcares.la
+dnsdump_LDADD = $(ARES_BLD_DIR)/src/lib/libcares.la $(CODE_COVERAGE_LIBS)
all: config.h
$(MAKE) $(AM_MAKEFLAGS) all-am
diff --git a/test/Makefile.inc b/test/Makefile.inc
index 820afdb..8ef4f8e 100644
--- a/test/Makefile.inc
+++ b/test/Makefile.inc
@@ -1,3 +1,5 @@
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
TESTSOURCES = ares-test-main.cc \
ares-test-init.cc \
ares-test.cc \
diff --git a/test/Makefile.m32 b/test/Makefile.m32
index 8300dfa..9a2de58 100644
--- a/test/Makefile.m32
+++ b/test/Makefile.m32
@@ -1,7 +1,9 @@
#############################################################
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
#
-## Makefile for building arestest.exe with MingW32 (GCC-3.2)
-## Use: make -f Makefile.m32
+# Makefile for building arestest.exe with MingW32 (GCC-3.2)
+# Use: make -f Makefile.m32
#
########################################################
CXX = g++
diff --git a/test/Makefile.msvc b/test/Makefile.msvc
index 39939c8..cd948c9 100644
--- a/test/Makefile.msvc
+++ b/test/Makefile.msvc
@@ -1,3 +1,6 @@
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
+#
# Permission to use, copy, modify, and distribute this
# software and its documentation for any purpose and without
# fee is hereby granted, provided that the above copyright
diff --git a/test/README.md b/test/README.md
index 9881446..6a86476 100644
--- a/test/README.md
+++ b/test/README.md
@@ -1,7 +1,6 @@
c-ares Unit Test Suite
======================
-
This directory holds unit tests for the c-ares library. To build the tests:
- Build the main c-ares library first, in the directory above this. To
diff --git a/test/aclocal.m4 b/test/aclocal.m4
index 3a57c5c..7b91744 100644
--- a/test/aclocal.m4
+++ b/test/aclocal.m4
@@ -1156,6 +1156,7 @@ m4_include([../m4/ax_check_gnu_make.m4])
m4_include([../m4/ax_check_user_namespace.m4])
m4_include([../m4/ax_check_uts_namespace.m4])
m4_include([../m4/ax_code_coverage.m4])
+m4_include([../m4/ax_cxx_compile_stdcxx.m4])
m4_include([../m4/ax_cxx_compile_stdcxx_11.m4])
m4_include([../m4/ax_file_escapes.m4])
m4_include([../m4/ax_pthread.m4])
diff --git a/test/aminclude_static.am b/test/aminclude_static.am
index 0631256..3efee0c 100644
--- a/test/aminclude_static.am
+++ b/test/aminclude_static.am
@@ -1,6 +1,6 @@
# aminclude_static.am generated automatically by Autoconf
-# from AX_AM_MACROS_STATIC on Mon Oct 25 23:08:32 CEST 2021
+# from AX_AM_MACROS_STATIC on Mon Oct 9 16:56:28 CEST 2023
# Code coverage
diff --git a/test/ares-fuzz.c b/test/ares-fuzz.c
index 5526f46..66d6300 100644
--- a/test/ares-fuzz.c
+++ b/test/ares-fuzz.c
@@ -1,4 +1,21 @@
/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+/*
* General driver to allow command-line fuzzer (i.e. afl) to
* exercise the libFuzzer entrypoint.
*/
@@ -9,38 +26,44 @@
#include <stdlib.h>
#include <string.h>
#ifdef WIN32
-#include <io.h>
+# include <io.h>
#else
-#include <unistd.h>
+# include <unistd.h>
#endif
+#include "ares.h"
+
#define kMaxAflInputSize (1 << 20)
static unsigned char afl_buffer[kMaxAflInputSize];
#ifdef __AFL_LOOP
/* If we are built with afl-clang-fast, use persistent mode */
-#define KEEP_FUZZING(count) __AFL_LOOP(1000)
+# define KEEP_FUZZING(count) __AFL_LOOP(1000)
#else
/* If we are built with afl-clang, execute each input once */
-#define KEEP_FUZZING(count) ((count) < 1)
+# define KEEP_FUZZING(count) ((count) < 1)
#endif
/* In ares-test-fuzz.c and ares-test-fuzz-name.c: */
int LLVMFuzzerTestOneInput(const unsigned char *data, unsigned long size);
-static void ProcessFile(int fd) {
- int count = read(fd, afl_buffer, kMaxAflInputSize);
+static void ProcessFile(int fd)
+{
+ ares_ssize_t count = read(fd, afl_buffer, kMaxAflInputSize);
/*
* Make a copy of the data so that it's not part of a larger
* buffer (where buffer overflows would go unnoticed).
*/
- unsigned char *copied_data = (unsigned char *)malloc(count);
- memcpy(copied_data, afl_buffer, count);
- LLVMFuzzerTestOneInput(copied_data, count);
- free(copied_data);
+ if (count > 0) {
+ unsigned char *copied_data = (unsigned char *)malloc((size_t)count);
+ memcpy(copied_data, afl_buffer, (size_t)count);
+ LLVMFuzzerTestOneInput(copied_data, (size_t)count);
+ free(copied_data);
+ }
}
-int main(int argc, char *argv[]) {
+int main(int argc, char *argv[])
+{
if (argc == 1) {
int count = 0;
while (KEEP_FUZZING(count)) {
diff --git a/test/ares-test-ai.h b/test/ares-test-ai.h
index 7cf27e3..3ef5441 100644
--- a/test/ares-test-ai.h
+++ b/test/ares-test-ai.h
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#ifndef ARES_TEST_AI_H
#define ARES_TEST_AI_H
@@ -10,36 +27,42 @@ namespace ares {
namespace test {
class MockChannelTestAI
- : public MockChannelOptsTest,
- public ::testing::WithParamInterface< std::pair<int, bool> > {
- public:
- MockChannelTestAI() : MockChannelOptsTest(1, GetParam().first, GetParam().second, nullptr, 0) {}
+ : public MockChannelOptsTest,
+ public ::testing::WithParamInterface<std::pair<int, bool>> {
+public:
+ MockChannelTestAI()
+ : MockChannelOptsTest(1, GetParam().first, GetParam().second, nullptr, 0)
+ {
+ }
};
-class MockUDPChannelTestAI
- : public MockChannelOptsTest,
- public ::testing::WithParamInterface<int> {
- public:
- MockUDPChannelTestAI() : MockChannelOptsTest(1, GetParam(), false, nullptr, 0) {}
+class MockUDPChannelTestAI : public MockChannelOptsTest,
+ public ::testing::WithParamInterface<int> {
+public:
+ MockUDPChannelTestAI() : MockChannelOptsTest(1, GetParam(), false, nullptr, 0)
+ {
+ }
};
-class MockTCPChannelTestAI
- : public MockChannelOptsTest,
- public ::testing::WithParamInterface<int> {
- public:
- MockTCPChannelTestAI() : MockChannelOptsTest(1, GetParam(), true, nullptr, 0) {}
+class MockTCPChannelTestAI : public MockChannelOptsTest,
+ public ::testing::WithParamInterface<int> {
+public:
+ MockTCPChannelTestAI() : MockChannelOptsTest(1, GetParam(), true, nullptr, 0)
+ {
+ }
};
-
// Test fixture that uses a default channel.
class DefaultChannelTestAI : public LibraryTest {
- public:
- DefaultChannelTestAI() : channel_(nullptr) {
+public:
+ DefaultChannelTestAI() : channel_(nullptr)
+ {
EXPECT_EQ(ARES_SUCCESS, ares_init(&channel_));
EXPECT_NE(nullptr, channel_);
}
- ~DefaultChannelTestAI() {
+ ~DefaultChannelTestAI()
+ {
ares_destroy(channel_);
channel_ = nullptr;
}
@@ -47,11 +70,11 @@ class DefaultChannelTestAI : public LibraryTest {
// Process all pending work on ares-owned file descriptors.
void Process();
- protected:
+protected:
ares_channel channel_;
};
-}
-}
+} // namespace test
+} // namespace ares
#endif
diff --git a/test/ares-test-fuzz-name.c b/test/ares-test-fuzz-name.c
index 82df743..cc7763f 100644
--- a/test/ares-test-fuzz-name.c
+++ b/test/ares-test-fuzz-name.c
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include <stddef.h>
#include <stdlib.h>
#include <string.h>
@@ -6,16 +23,18 @@
// Include ares internal file for DNS protocol constants
#include "ares_nameser.h"
+int LLVMFuzzerTestOneInput(const unsigned char *data, unsigned long size);
+
// Entrypoint for Clang's libfuzzer, exercising query creation.
-int LLVMFuzzerTestOneInput(const unsigned char *data,
- unsigned long size) {
+int LLVMFuzzerTestOneInput(const unsigned char *data, unsigned long size)
+{
// Null terminate the data.
- char *name = malloc(size + 1);
- name[size] = '\0';
+ char *name = malloc(size + 1);
+ unsigned char *buf = NULL;
+ int buflen = 0;
+ name[size] = '\0';
memcpy(name, data, size);
- unsigned char *buf = NULL;
- int buflen = 0;
ares_create_query(name, C_IN, T_AAAA, 1234, 0, &buf, &buflen, 1024);
free(buf);
free(name);
diff --git a/test/ares-test-fuzz.c b/test/ares-test-fuzz.c
index ddd6583..f104e34 100644
--- a/test/ares-test-fuzz.c
+++ b/test/ares-test-fuzz.c
@@ -1,59 +1,100 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include <stddef.h>
#include "ares.h"
+int LLVMFuzzerTestOneInput(const unsigned char *data, unsigned long size);
+
// Entrypoint for Clang's libfuzzer
-int LLVMFuzzerTestOneInput(const unsigned char *data,
- unsigned long size) {
+int LLVMFuzzerTestOneInput(const unsigned char *data, unsigned long size)
+{
// Feed the data into each of the ares_parse_*_reply functions.
- struct hostent *host = NULL;
- struct ares_addrttl info[5];
- int count = 5;
- ares_parse_a_reply(data, size, &host, info, &count);
- if (host) ares_free_hostent(host);
+ struct hostent *host = NULL;
+ struct ares_addrttl info[5];
+ struct ares_addr6ttl info6[5];
+ unsigned char addrv4[4] = { 0x10, 0x20, 0x30, 0x40 };
+ struct ares_srv_reply *srv = NULL;
+ struct ares_mx_reply *mx = NULL;
+ struct ares_txt_reply *txt = NULL;
+ struct ares_soa_reply *soa = NULL;
+ struct ares_naptr_reply *naptr = NULL;
+ struct ares_caa_reply *caa = NULL;
+ struct ares_uri_reply *uri = NULL;
+ int count = 5;
+ ares_parse_a_reply(data, (int)size, &host, info, &count);
+ if (host) {
+ ares_free_hostent(host);
+ }
- host = NULL;
- struct ares_addr6ttl info6[5];
+ host = NULL;
count = 5;
- ares_parse_aaaa_reply(data, size, &host, info6, &count);
- if (host) ares_free_hostent(host);
+ ares_parse_aaaa_reply(data, (int)size, &host, info6, &count);
+ if (host) {
+ ares_free_hostent(host);
+ }
host = NULL;
- unsigned char addrv4[4] = {0x10, 0x20, 0x30, 0x40};
- ares_parse_ptr_reply(data, size, addrv4, sizeof(addrv4), AF_INET, &host);
- if (host) ares_free_hostent(host);
+ ares_parse_ptr_reply(data, (int)size, addrv4, sizeof(addrv4), AF_INET, &host);
+ if (host) {
+ ares_free_hostent(host);
+ }
host = NULL;
- ares_parse_ns_reply(data, size, &host);
- if (host) ares_free_hostent(host);
+ ares_parse_ns_reply(data, (int)size, &host);
+ if (host) {
+ ares_free_hostent(host);
+ }
- struct ares_srv_reply* srv = NULL;
- ares_parse_srv_reply(data, size, &srv);
- if (srv) ares_free_data(srv);
+ ares_parse_srv_reply(data, (int)size, &srv);
+ if (srv) {
+ ares_free_data(srv);
+ }
- struct ares_mx_reply* mx = NULL;
- ares_parse_mx_reply(data, size, &mx);
- if (mx) ares_free_data(mx);
+ ares_parse_mx_reply(data, (int)size, &mx);
+ if (mx) {
+ ares_free_data(mx);
+ }
- struct ares_txt_reply* txt = NULL;
- ares_parse_txt_reply(data, size, &txt);
- if (txt) ares_free_data(txt);
+ ares_parse_txt_reply(data, (int)size, &txt);
+ if (txt) {
+ ares_free_data(txt);
+ }
- struct ares_soa_reply* soa = NULL;
- ares_parse_soa_reply(data, size, &soa);
- if (soa) ares_free_data(soa);
+ ares_parse_soa_reply(data, (int)size, &soa);
+ if (soa) {
+ ares_free_data(soa);
+ }
- struct ares_naptr_reply* naptr = NULL;
- ares_parse_naptr_reply(data, size, &naptr);
- if (naptr) ares_free_data(naptr);
+ ares_parse_naptr_reply(data, (int)size, &naptr);
+ if (naptr) {
+ ares_free_data(naptr);
+ }
- struct ares_caa_reply* caa = NULL;
- ares_parse_caa_reply(data, size, &caa);
- if (caa) ares_free_data(caa);
+ ares_parse_caa_reply(data, (int)size, &caa);
+ if (caa) {
+ ares_free_data(caa);
+ }
- struct ares_uri_reply* uri = NULL;
- ares_parse_uri_reply(data, size, &uri);
- if (uri) ares_free_data(uri);
+ ares_parse_uri_reply(data, (int)size, &uri);
+ if (uri) {
+ ares_free_data(uri);
+ }
return 0;
}
diff --git a/test/ares-test-init.cc b/test/ares-test-init.cc
index ff6c6c6..33cc1f1 100644
--- a/test/ares-test-init.cc
+++ b/test/ares-test-init.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test.h"
// library initialization is only needed for windows builds
@@ -88,6 +105,8 @@ TEST_F(LibraryTest, OptionsChannelInit) {
optmask |= ARES_OPT_ROTATE;
opts.resolvconf_path = strdup("/etc/resolv.conf");
optmask |= ARES_OPT_RESOLVCONF;
+ opts.hosts_path = strdup("/etc/hosts");
+ optmask |= ARES_OPT_HOSTS_FILE;
ares_channel channel = nullptr;
EXPECT_EQ(ARES_SUCCESS, ares_init_options(&channel, &opts, optmask));
@@ -115,6 +134,7 @@ TEST_F(LibraryTest, OptionsChannelInit) {
EXPECT_EQ(std::string(opts.domains[1]), std::string(opts2.domains[1]));
EXPECT_EQ(std::string(opts.lookups), std::string(opts2.lookups));
EXPECT_EQ(std::string(opts.resolvconf_path), std::string(opts2.resolvconf_path));
+ EXPECT_EQ(std::string(opts.hosts_path), std::string(opts2.hosts_path));
ares_destroy_options(&opts);
ares_destroy_options(&opts2);
@@ -174,6 +194,8 @@ TEST_F(LibraryTest, OptionsChannelAllocFail) {
optmask |= ARES_OPT_ROTATE;
opts.resolvconf_path = strdup("/etc/resolv.conf");
optmask |= ARES_OPT_RESOLVCONF;
+ opts.hosts_path = strdup("/etc/hosts");
+ optmask |= ARES_OPT_HOSTS_FILE;
ares_channel channel = nullptr;
for (int ii = 1; ii <= 8; ii++) {
@@ -270,6 +292,10 @@ TEST_F(DefaultChannelTest, SetAddresses) {
TEST_F(DefaultChannelTest, SetSortlistFailures) {
EXPECT_EQ(ARES_ENODATA, ares_set_sortlist(nullptr, "1.2.3.4"));
+ EXPECT_EQ(ARES_EBADSTR, ares_set_sortlist(channel_, "111.111.111.111*/16"));
+ EXPECT_EQ(ARES_EBADSTR, ares_set_sortlist(channel_, "111.111.111.111/255.255.255.240*"));
+ EXPECT_EQ(ARES_EBADSTR, ares_set_sortlist(channel_, "1 0123456789012345"));
+ EXPECT_EQ(ARES_EBADSTR, ares_set_sortlist(channel_, "1 /01234567890123456789012345678901"));
EXPECT_EQ(ARES_SUCCESS, ares_set_sortlist(channel_, "xyzzy ; lwk"));
EXPECT_EQ(ARES_SUCCESS, ares_set_sortlist(channel_, "xyzzy ; 0x123"));
}
@@ -430,6 +456,32 @@ CONTAINED_TEST_F(LibraryTest, ContainerMyResolvConfInit,
return HasFailure();
}
+// Allow hosts path to be configurable
+NameContentList myhosts = {
+ {"/tmp/hosts", "10.0.12.26 foobar\n"
+ "2001:A0:C::1A foobar\n"}};
+CONTAINED_TEST_F(LibraryTest, ContainerMyHostsInit,
+ "myhostname", "mydomain.org", myhosts) {
+ char filename[] = "/tmp/hosts";
+ ares_channel channel = nullptr;
+ struct ares_options options = {0};
+ options.hosts_path = strdup(filename);
+ int optmask = ARES_OPT_HOSTS_FILE;
+ EXPECT_EQ(ARES_SUCCESS, ares_init_options(&channel, &options, optmask));
+
+ optmask = 0;
+ free(options.hosts_path);
+ options.hosts_path = NULL;
+
+ EXPECT_EQ(ARES_SUCCESS, ares_save_options(channel, &options, &optmask));
+ EXPECT_EQ(ARES_OPT_HOSTS_FILE, (optmask & ARES_OPT_HOSTS_FILE));
+ EXPECT_EQ(std::string(filename), std::string(options.hosts_path));
+
+ ares_destroy_options(&options);
+ ares_destroy(channel);
+ return HasFailure();
+}
+
NameContentList hostconf = {
{"/etc/resolv.conf", "nameserver 1.2.3.4\n"
"sortlist1.2.3.4\n" // malformed line
diff --git a/test/ares-test-internal.cc b/test/ares-test-internal.cc
index 96d4ede..4195da4 100644
--- a/test/ares-test-internal.cc
+++ b/test/ares-test-internal.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test.h"
#include "dns-proto.h"
@@ -16,9 +33,9 @@ extern "C" {
#undef PACKAGE_TARNAME
// ... so we can include the library's config without symbol redefinitions.
#include "ares_setup.h"
-#include "ares_nowarn.h"
#include "ares_inet_net_pton.h"
#include "ares_data.h"
+#include "ares_strsplit.h"
#include "ares_private.h"
#include "bitncmp.h"
@@ -47,6 +64,47 @@ void CheckPtoN4(int size, unsigned int value, const char *input) {
}
#endif
+#ifndef CARES_SYMBOL_HIDING
+TEST_F(LibraryTest, Strsplit) {
+ using std::vector;
+ using std::string;
+ size_t n;
+ struct {
+ vector<string> inputs;
+ vector<string> delimiters;
+ vector<vector<string>> expected;
+ } data = {
+ {
+ "",
+ " ",
+ " ",
+ "example.com, example.co",
+ " a, b, A,c, d, e,,,D,e,e,E",
+ },
+ { ", ", ", ", ", ", ", ", ", " },
+ {
+ {}, {}, {},
+ { "example.com", "example.co" },
+ { "a", "b", "c", "d", "e" },
+ },
+ };
+ for(size_t i = 0; i < data.inputs.size(); i++) {
+ char **out = ares__strsplit(data.inputs.at(i).c_str(),
+ data.delimiters.at(i).c_str(), &n);
+ if(data.expected.at(i).size() == 0) {
+ EXPECT_EQ(out, nullptr);
+ }
+ else {
+ EXPECT_EQ(n, data.expected.at(i).size());
+ for(size_t j = 0; j < n && j < data.expected.at(i).size(); j++) {
+ EXPECT_STREQ(out[j], data.expected.at(i).at(j).c_str());
+ }
+ }
+ ares__strsplit_free(out, n);
+ }
+}
+#endif
+
TEST_F(LibraryTest, InetPtoN) {
struct in_addr a4;
struct in6_addr a6;
@@ -81,6 +139,7 @@ TEST_F(LibraryTest, InetPtoN) {
EXPECT_EQ(0, ares_inet_net_pton(AF_INET6, "12:34::ff/0", &a6, sizeof(a6)));
EXPECT_EQ(16 * 8, ares_inet_net_pton(AF_INET6, "12:34::ffff:0.2", &a6, sizeof(a6)));
EXPECT_EQ(16 * 8, ares_inet_net_pton(AF_INET6, "1234:1234:1234:1234:1234:1234:1234:1234", &a6, sizeof(a6)));
+ EXPECT_EQ(2, ares_inet_net_pton(AF_INET6, "0::00:00:00/2", &a6, sizeof(a6)));
// Various malformed versions
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET, "", &a4, sizeof(a4)));
@@ -118,11 +177,9 @@ TEST_F(LibraryTest, InetPtoN) {
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, ":1234:1234:1234:1234:1234:1234:1234:1234", &a6, sizeof(a6)));
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, ":1234:1234:1234:1234:1234:1234:1234:1234:", &a6, sizeof(a6)));
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "1234:1234:1234:1234:1234:1234:1234:1234:5678", &a6, sizeof(a6)));
- // TODO(drysdale): check whether the next two tests should give -1.
- EXPECT_EQ(0, ares_inet_net_pton(AF_INET6, "1234:1234:1234:1234:1234:1234:1234:1234:5678:5678", &a6, sizeof(a6)));
- EXPECT_EQ(0, ares_inet_net_pton(AF_INET6, "1234:1234:1234:1234:1234:1234:1234:1234:5678:5678:5678", &a6, sizeof(a6)));
+ EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "1234:1234:1234:1234:1234:1234:1234:1234:5678:5678", &a6, sizeof(a6)));
+ EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "1234:1234:1234:1234:1234:1234:1234:1234:5678:5678:5678", &a6, sizeof(a6)));
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "12:34::ffff:257.2.3.4", &a6, sizeof(a6)));
- EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "12:34::ffff:002.2.3.4", &a6, sizeof(a6)));
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "12:34::ffff:1.2.3.4.5.6", &a6, sizeof(a6)));
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "12:34::ffff:1.2.3.4.5", &a6, sizeof(a6)));
EXPECT_EQ(-1, ares_inet_net_pton(AF_INET6, "12:34::ffff:1.2.3.z", &a6, sizeof(a6)));
@@ -240,20 +297,6 @@ TEST(Misc, Bitncmp) {
EXPECT_GT(0, ares__bitncmp(a, b, 3*8 + 7));
}
-TEST_F(LibraryTest, Casts) {
- ares_ssize_t ssz = 100;
- unsigned int u = 100;
- int i = 100;
- long l = 100;
-
- unsigned int ru = aresx_sztoui(ssz);
- EXPECT_EQ(u, ru);
- int ri = aresx_sztosi(ssz);
- EXPECT_EQ(i, ri);
-
- ri = aresx_sltosi(l);
- EXPECT_EQ(l, (long)ri);
-}
TEST_F(LibraryTest, ReadLine) {
TempFile temp("abcde\n0123456789\nXYZ\n012345678901234567890\n\n");
@@ -467,6 +510,22 @@ TEST(Misc, OnionDomain) {
EXPECT_EQ(1, ares__is_onion_domain("YES.ONION"));
EXPECT_EQ(1, ares__is_onion_domain("YES.ONION."));
}
+
+TEST_F(LibraryTest, CatDomain) {
+ char *s;
+
+ ares__cat_domain("foo", "example.net", &s);
+ EXPECT_STREQ("foo.example.net", s);
+ ares_free(s);
+
+ ares__cat_domain("foo", ".", &s);
+ EXPECT_STREQ("foo.", s);
+ ares_free(s);
+
+ ares__cat_domain("foo", "example.net.", &s);
+ EXPECT_STREQ("foo.example.net.", s);
+ ares_free(s);
+}
#endif
#ifdef CARES_EXPOSE_STATICS
@@ -484,7 +543,7 @@ TEST_F(LibraryTest, Striendstr) {
const char *str = "plugh";
EXPECT_NE(nullptr, ares_striendstr(str, str));
}
-extern "C" int ares__single_domain(ares_channel, const char*, char**);
+extern "C" ares_status_t ares__single_domain(ares_channel, const char*, char**);
TEST_F(DefaultChannelTest, SingleDomain) {
TempFile aliases("www www.google.com\n");
EnvValue with_env("HOSTALIASES", aliases.filename());
@@ -507,7 +566,7 @@ TEST_F(DefaultChannelTest, SingleDomain) {
TEST_F(DefaultChannelTest, SaveInvalidChannel) {
int saved = channel_->nservers;
- channel_->nservers = -1;
+ channel_->nservers = 0;
struct ares_options opts;
int optmask = 0;
EXPECT_EQ(ARES_ENODATA, ares_save_options(channel_, &opts, &optmask));
@@ -564,26 +623,10 @@ const struct ares_socket_functions VirtualizeIO::default_functions = {
}
return s;
},
- [](ares_socket_t s, void * p) {
- return :: sclose(s);
- },
- [](ares_socket_t s, const struct sockaddr * addr, socklen_t len, void *) {
- return ::connect(s, addr, len);
- },
- [](ares_socket_t s, void * dst, size_t len, int flags, struct sockaddr * addr, socklen_t * alen, void *) -> ares_ssize_t {
-#ifdef HAVE_RECVFROM
- return ::recvfrom(s, reinterpret_cast<RECV_TYPE_ARG2>(dst), len, flags, addr, alen);
-#else
- return sread(s, dst, len);
-#endif
- },
- [](ares_socket_t s, const struct iovec * vec, int len, void *) {
-#ifndef HAVE_WRITEV
- return ares_writev(s, vec, len);
-#else
- return :: writev(s, vec, len);
-#endif
- }
+ NULL,
+ NULL,
+ NULL,
+ NULL
};
diff --git a/test/ares-test-live.cc b/test/ares-test-live.cc
index 03d775e..cd2fdb6 100644
--- a/test/ares-test-live.cc
+++ b/test/ares-test-live.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
// This file includes tests that attempt to do real lookups
// of DNS names using the local machine's live infrastructure.
// As a result, we don't check the results very closely, to allow
@@ -159,6 +176,7 @@ TEST_P(DefaultChannelModeTest, LiveGetLocalhostByNameV6) {
Process();
EXPECT_TRUE(result.done_);
if (result.status_ != ARES_ECONNREFUSED) {
+ EXPECT_EQ(ARES_SUCCESS, result.status_);
EXPECT_EQ(1, (int)result.host_.addrs_.size());
EXPECT_EQ(AF_INET6, result.host_.addrtype_);
std::stringstream ss;
@@ -167,6 +185,34 @@ TEST_P(DefaultChannelModeTest, LiveGetLocalhostByNameV6) {
}
}
+TEST_P(DefaultChannelModeTest, LiveGetNonExistLocalhostByNameV4) {
+ HostResult result;
+ ares_gethostbyname(channel_, "idonotexist.localhost", AF_INET, HostCallback, &result);
+ Process();
+ EXPECT_TRUE(result.done_);
+ if (result.status_ != ARES_ECONNREFUSED) {
+ EXPECT_EQ(ARES_SUCCESS, result.status_);
+ EXPECT_EQ(1, (int)result.host_.addrs_.size());
+ EXPECT_EQ(AF_INET, result.host_.addrtype_);
+ EXPECT_NE(std::string::npos, result.host_.name_.find("idonotexist.localhost"));
+ }
+}
+
+TEST_P(DefaultChannelModeTest, LiveGetNonExistLocalhostByNameV6) {
+ HostResult result;
+ ares_gethostbyname(channel_, "idonotexist.localhost", AF_INET6, HostCallback, &result);
+ Process();
+ EXPECT_TRUE(result.done_);
+ if (result.status_ != ARES_ECONNREFUSED) {
+ EXPECT_EQ(ARES_SUCCESS, result.status_);
+ EXPECT_EQ(1, (int)result.host_.addrs_.size());
+ EXPECT_EQ(AF_INET6, result.host_.addrtype_);
+ std::stringstream ss;
+ ss << HostEnt(result.host_);
+ EXPECT_NE(std::string::npos, result.host_.name_.find("idonotexist.localhost"));
+ }
+}
+
TEST_P(DefaultChannelModeTest, LiveGetLocalhostByNameIPV4) {
HostResult result;
ares_gethostbyname(channel_, "127.0.0.1", AF_INET, HostCallback, &result);
@@ -624,6 +670,17 @@ VIRT_NONVIRT_TEST_F(DefaultChannelTest, GetSock) {
ares_gethostbyname(channel_, "www.google.com.", AF_INET, HostCallback, &result);
bitmask = ares_getsock(channel_, socks, 3);
EXPECT_NE(0, bitmask);
+
+ size_t sock_cnt = 0;
+ for (size_t i=0; i<3; i++) {
+ if (ARES_GETSOCK_READABLE(bitmask, i) || ARES_GETSOCK_WRITABLE(bitmask, i)) {
+ EXPECT_NE(ARES_SOCKET_BAD, socks[i]);
+ if (socks[i] != ARES_SOCKET_BAD)
+ sock_cnt++;
+ }
+ }
+ EXPECT_NE(0, sock_cnt);
+
bitmask = ares_getsock(channel_, nullptr, 0);
EXPECT_EQ(0, bitmask);
@@ -650,6 +707,17 @@ TEST_F(LibraryTest, GetTCPSock) {
ares_gethostbyname(channel, "www.google.com.", AF_INET, HostCallback, &result);
bitmask = ares_getsock(channel, socks, 3);
EXPECT_NE(0, bitmask);
+
+ size_t sock_cnt = 0;
+ for (size_t i=0; i<3; i++) {
+ if (ARES_GETSOCK_READABLE(bitmask, i) || ARES_GETSOCK_WRITABLE(bitmask, i)) {
+ EXPECT_NE(ARES_SOCKET_BAD, socks[i]);
+ if (socks[i] != ARES_SOCKET_BAD)
+ sock_cnt++;
+ }
+ }
+ EXPECT_NE(0, sock_cnt);
+
bitmask = ares_getsock(channel, nullptr, 0);
EXPECT_EQ(0, bitmask);
diff --git a/test/ares-test-main.cc b/test/ares-test-main.cc
index 86ac96a..49c80ed 100644
--- a/test/ares-test-main.cc
+++ b/test/ares-test-main.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include <signal.h>
#include <stdlib.h>
diff --git a/test/ares-test-misc.cc b/test/ares-test-misc.cc
index b11b04b..9a6d071 100644
--- a/test/ares-test-misc.cc
+++ b/test/ares-test-misc.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test.h"
#include "dns-proto.h"
@@ -298,7 +315,7 @@ TEST_F(DefaultChannelTest, SearchOnionDomain) {
}
TEST_F(DefaultChannelTest, SendFailure) {
- unsigned char buf[2];
+ unsigned char buf[2] = {};
SearchResult result;
ares_send(channel_, buf, sizeof(buf), SearchCallback, &result);
EXPECT_TRUE(result.done_);
@@ -516,7 +533,7 @@ TEST_F(LibraryTest, ExpandString) {
EXPECT_EQ(ARES_EBADSTR,
ares_expand_string(s1.data() + 4, s1.data(), s1.size(),
(unsigned char**)&result, &len));
- SetAllocSizeFail(3 + 1);
+ SetAllocFail(1);
EXPECT_EQ(ARES_ENOMEM,
ares_expand_string(s1.data(), s1.data(), s1.size(),
(unsigned char**)&result, &len));
diff --git a/test/ares-test-mock-ai.cc b/test/ares-test-mock-ai.cc
index afbec30..7e69110 100644
--- a/test/ares-test-mock-ai.cc
+++ b/test/ares-test-mock-ai.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test-ai.h"
#include "dns-proto.h"
@@ -177,8 +194,7 @@ TEST_P(MockTCPChannelTestAI, ServFailResponse) {
ares_getaddrinfo(channel_, "www.google.com.", NULL, &hints, AddrInfoCallback, &result);
Process();
EXPECT_TRUE(result.done_);
- // ARES_FLAG_NOCHECKRESP not set, so SERVFAIL consumed
- EXPECT_EQ(ARES_ECONNREFUSED, result.status_);
+ EXPECT_EQ(ARES_ESERVFAIL, result.status_);
}
TEST_P(MockTCPChannelTestAI, NotImplResponse) {
@@ -196,8 +212,7 @@ TEST_P(MockTCPChannelTestAI, NotImplResponse) {
ares_getaddrinfo(channel_, "www.google.com.", NULL, &hints, AddrInfoCallback, &result);
Process();
EXPECT_TRUE(result.done_);
- // ARES_FLAG_NOCHECKRESP not set, so NOTIMP consumed
- EXPECT_EQ(ARES_ECONNREFUSED, result.status_);
+ EXPECT_EQ(ARES_ENOTIMP, result.status_);
}
TEST_P(MockTCPChannelTestAI, RefusedResponse) {
@@ -215,8 +230,7 @@ TEST_P(MockTCPChannelTestAI, RefusedResponse) {
ares_getaddrinfo(channel_, "www.google.com.", NULL, &hints, AddrInfoCallback, &result);
Process();
EXPECT_TRUE(result.done_);
- // ARES_FLAG_NOCHECKRESP not set, so REFUSED consumed
- EXPECT_EQ(ARES_ECONNREFUSED, result.status_);
+ EXPECT_EQ(ARES_EREFUSED, result.status_);
}
TEST_P(MockTCPChannelTestAI, YXDomainResponse) {
diff --git a/test/ares-test-mock.cc b/test/ares-test-mock.cc
index e29c050..0557c50 100644
--- a/test/ares-test-mock.cc
+++ b/test/ares-test-mock.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test.h"
#include "dns-proto.h"
@@ -202,7 +219,88 @@ TEST_P(MockChannelTest, SockConfigureFailCallback) {
EXPECT_EQ(ARES_ECONNREFUSED, result.status_);
}
-// TCP only to prevent retries
+#define MAXUDPQUERIES_TOTAL 32
+#define MAXUDPQUERIES_LIMIT 8
+
+class MockUDPMaxQueriesTest
+ : public MockChannelOptsTest,
+ public ::testing::WithParamInterface<int> {
+ public:
+ MockUDPMaxQueriesTest()
+ : MockChannelOptsTest(1, GetParam(), false,
+ FillOptions(&opts_),
+ ARES_OPT_UDP_MAX_QUERIES) {}
+ static struct ares_options* FillOptions(struct ares_options * opts) {
+ memset(opts, 0, sizeof(struct ares_options));
+ opts->udp_max_queries = MAXUDPQUERIES_LIMIT;
+ return opts;
+ }
+ private:
+ struct ares_options opts_;
+};
+
+TEST_P(MockUDPMaxQueriesTest, GetHostByNameParallelLookups) {
+ DNSPacket rsp;
+ rsp.set_response().set_aa()
+ .add_question(new DNSQuestion("www.google.com", T_A))
+ .add_answer(new DNSARR("www.google.com", 100, {2, 3, 4, 5}));
+ ON_CALL(server_, OnRequest("www.google.com", T_A))
+ .WillByDefault(SetReply(&server_, &rsp));
+
+ // Get notified of new sockets so we can validate how many are created
+ int rc = ARES_SUCCESS;
+ ares_set_socket_callback(channel_, SocketConnectCallback, &rc);
+ sock_cb_count = 0;
+
+ HostResult result[MAXUDPQUERIES_TOTAL];
+ for (size_t i=0; i<MAXUDPQUERIES_TOTAL; i++) {
+ ares_gethostbyname(channel_, "www.google.com.", AF_INET, HostCallback, &result[i]);
+ }
+
+ Process();
+
+ EXPECT_EQ(MAXUDPQUERIES_TOTAL / MAXUDPQUERIES_LIMIT, sock_cb_count);
+
+ for (size_t i=0; i<MAXUDPQUERIES_TOTAL; i++) {
+ std::stringstream ss;
+ EXPECT_TRUE(result[i].done_);
+ ss << result[i].host_;
+ EXPECT_EQ("{'www.google.com' aliases=[] addrs=[2.3.4.5]}", ss.str());
+ }
+}
+
+#define TCPPARALLELLOOKUPS 32
+TEST_P(MockTCPChannelTest, GetHostByNameParallelLookups) {
+ DNSPacket rsp;
+ rsp.set_response().set_aa()
+ .add_question(new DNSQuestion("www.google.com", T_A))
+ .add_answer(new DNSARR("www.google.com", 100, {2, 3, 4, 5}));
+ ON_CALL(server_, OnRequest("www.google.com", T_A))
+ .WillByDefault(SetReply(&server_, &rsp));
+
+ // Get notified of new sockets so we can validate how many are created
+ int rc = ARES_SUCCESS;
+ ares_set_socket_callback(channel_, SocketConnectCallback, &rc);
+ sock_cb_count = 0;
+
+ HostResult result[TCPPARALLELLOOKUPS];
+ for (size_t i=0; i<TCPPARALLELLOOKUPS; i++) {
+ ares_gethostbyname(channel_, "www.google.com.", AF_INET, HostCallback, &result[i]);
+ }
+
+ Process();
+
+ EXPECT_EQ(1, sock_cb_count);
+
+ for (size_t i=0; i<TCPPARALLELLOOKUPS; i++) {
+ std::stringstream ss;
+ EXPECT_TRUE(result[i].done_);
+ ss << result[i].host_;
+ EXPECT_EQ("{'www.google.com' aliases=[] addrs=[2.3.4.5]}", ss.str());
+ }
+}
+
+
TEST_P(MockTCPChannelTest, MalformedResponse) {
std::vector<byte> one = {0x01};
EXPECT_CALL(server_, OnRequest("www.google.com", T_A))
@@ -240,8 +338,7 @@ TEST_P(MockTCPChannelTest, ServFailResponse) {
ares_gethostbyname(channel_, "www.google.com.", AF_INET, HostCallback, &result);
Process();
EXPECT_TRUE(result.done_);
- // ARES_FLAG_NOCHECKRESP not set, so SERVFAIL consumed
- EXPECT_EQ(ARES_ECONNREFUSED, result.status_);
+ EXPECT_EQ(ARES_ESERVFAIL, result.status_);
}
TEST_P(MockTCPChannelTest, NotImplResponse) {
@@ -255,8 +352,7 @@ TEST_P(MockTCPChannelTest, NotImplResponse) {
ares_gethostbyname(channel_, "www.google.com.", AF_INET, HostCallback, &result);
Process();
EXPECT_TRUE(result.done_);
- // ARES_FLAG_NOCHECKRESP not set, so NOTIMP consumed
- EXPECT_EQ(ARES_ECONNREFUSED, result.status_);
+ EXPECT_EQ(ARES_ENOTIMP, result.status_);
}
TEST_P(MockTCPChannelTest, RefusedResponse) {
@@ -270,8 +366,7 @@ TEST_P(MockTCPChannelTest, RefusedResponse) {
ares_gethostbyname(channel_, "www.google.com.", AF_INET, HostCallback, &result);
Process();
EXPECT_TRUE(result.done_);
- // ARES_FLAG_NOCHECKRESP not set, so REFUSED consumed
- EXPECT_EQ(ARES_ECONNREFUSED, result.status_);
+ EXPECT_EQ(ARES_EREFUSED, result.status_);
}
TEST_P(MockTCPChannelTest, YXDomainResponse) {
@@ -631,6 +726,29 @@ TEST_P(MockChannelTest, SearchHighNdots) {
ss.str());
}
+TEST_P(MockUDPChannelTest, V4WorksV6Timeout) {
+ std::vector<byte> nothing;
+ DNSPacket reply;
+ reply.set_response().set_aa()
+ .add_question(new DNSQuestion("www.google.com", T_A))
+ .add_answer(new DNSARR("www.google.com", 0x0100, {0x01, 0x02, 0x03, 0x04}));
+
+ ON_CALL(server_, OnRequest("www.google.com", T_A))
+ .WillByDefault(SetReply(&server_, &reply));
+
+ ON_CALL(server_, OnRequest("www.google.com", T_AAAA))
+ .WillByDefault(SetReplyData(&server_, nothing));
+
+ HostResult result;
+ ares_gethostbyname(channel_, "www.google.com.", AF_UNSPEC, HostCallback, &result);
+ Process();
+ EXPECT_TRUE(result.done_);
+ EXPECT_EQ(1, result.timeouts_);
+ std::stringstream ss;
+ ss << result.host_;
+ EXPECT_EQ("{'www.google.com' aliases=[] addrs=[1.2.3.4]}", ss.str());
+}
+
TEST_P(MockChannelTest, UnspecifiedFamilyV6) {
DNSPacket rsp6;
rsp6.set_response().set_aa()
@@ -923,6 +1041,26 @@ TEST_P(MockUDPChannelTest, CancelLater) {
EXPECT_EQ(0, result.timeouts_);
}
+TEST_P(MockChannelTest, DisconnectFirstAttempt) {
+ DNSPacket reply;
+ reply.set_response().set_aa()
+ .add_question(new DNSQuestion("www.google.com", T_A))
+ .add_answer(new DNSARR("www.google.com", 0x0100, {0x01, 0x02, 0x03, 0x04}));
+
+ // On second request, cancel the channel.
+ EXPECT_CALL(server_, OnRequest("www.google.com", T_A))
+ .WillOnce(Disconnect(&server_))
+ .WillOnce(SetReply(&server_, &reply));
+
+ HostResult result;
+ ares_gethostbyname(channel_, "www.google.com.", AF_INET, HostCallback, &result);
+ Process();
+ EXPECT_TRUE(result.done_);
+ std::stringstream ss;
+ ss << result.host_;
+ EXPECT_EQ("{'www.google.com' aliases=[] addrs=[1.2.3.4]}", ss.str());
+}
+
TEST_P(MockChannelTest, GetHostByNameDestroyAbsolute) {
HostResult result;
ares_gethostbyname(channel_, "www.google.com.", AF_INET, HostCallback, &result);
@@ -1183,6 +1321,8 @@ INSTANTIATE_TEST_SUITE_P(AddressFamilies, MockChannelTest, ::testing::ValuesIn(a
INSTANTIATE_TEST_SUITE_P(AddressFamilies, MockUDPChannelTest, ::testing::ValuesIn(ares::test::families));
+INSTANTIATE_TEST_SUITE_P(AddressFamilies, MockUDPMaxQueriesTest, ::testing::ValuesIn(ares::test::families));
+
INSTANTIATE_TEST_SUITE_P(AddressFamilies, MockTCPChannelTest, ::testing::ValuesIn(ares::test::families));
INSTANTIATE_TEST_SUITE_P(AddressFamilies, MockExtraOptsTest, ::testing::ValuesIn(ares::test::families_modes));
diff --git a/test/ares-test-ns.cc b/test/ares-test-ns.cc
index c3c4552..a97d7e5 100644
--- a/test/ares-test-ns.cc
+++ b/test/ares-test-ns.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test.h"
#ifdef HAVE_CONTAINER
diff --git a/test/ares-test-parse-a.cc b/test/ares-test-parse-a.cc
index f8050ac..6484ae0 100644
--- a/test/ares-test-parse-a.cc
+++ b/test/ares-test-parse-a.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test.h"
#include "dns-proto.h"
diff --git a/test/ares-test-parse-aaaa.cc b/test/ares-test-parse-aaaa.cc
index df56529..223b1a3 100644
--- a/test/ares-test-parse-aaaa.cc
+++ b/test/ares-test-parse-aaaa.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test.h"
#include "dns-proto.h"
diff --git a/test/ares-test-parse-caa.cc b/test/ares-test-parse-caa.cc
index 99903ed..4b35f59 100644
--- a/test/ares-test-parse-caa.cc
+++ b/test/ares-test-parse-caa.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test.h"
#include "dns-proto.h"
diff --git a/test/ares-test-parse-mx.cc b/test/ares-test-parse-mx.cc
index db8fa89..941afb8 100644
--- a/test/ares-test-parse-mx.cc
+++ b/test/ares-test-parse-mx.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test.h"
#include "dns-proto.h"
diff --git a/test/ares-test-parse-naptr.cc b/test/ares-test-parse-naptr.cc
index aa1a2a5..a9cb603 100644
--- a/test/ares-test-parse-naptr.cc
+++ b/test/ares-test-parse-naptr.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test.h"
#include "dns-proto.h"
diff --git a/test/ares-test-parse-ns.cc b/test/ares-test-parse-ns.cc
index 3164921..965ec29 100644
--- a/test/ares-test-parse-ns.cc
+++ b/test/ares-test-parse-ns.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test.h"
#include "dns-proto.h"
diff --git a/test/ares-test-parse-ptr.cc b/test/ares-test-parse-ptr.cc
index 6fdaf3e..3119240 100644
--- a/test/ares-test-parse-ptr.cc
+++ b/test/ares-test-parse-ptr.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test.h"
#include "dns-proto.h"
diff --git a/test/ares-test-parse-soa-any.cc b/test/ares-test-parse-soa-any.cc
index 700073c..eccec0f 100644
--- a/test/ares-test-parse-soa-any.cc
+++ b/test/ares-test-parse-soa-any.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test.h"
#include "dns-proto.h"
diff --git a/test/ares-test-parse-soa.cc b/test/ares-test-parse-soa.cc
index 22a78e5..f32600e 100644
--- a/test/ares-test-parse-soa.cc
+++ b/test/ares-test-parse-soa.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test.h"
#include "dns-proto.h"
diff --git a/test/ares-test-parse-srv.cc b/test/ares-test-parse-srv.cc
index b004759..2c5472f 100644
--- a/test/ares-test-parse-srv.cc
+++ b/test/ares-test-parse-srv.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test.h"
#include "dns-proto.h"
diff --git a/test/ares-test-parse-txt.cc b/test/ares-test-parse-txt.cc
index b33fb2d..75c6a7b 100644
--- a/test/ares-test-parse-txt.cc
+++ b/test/ares-test-parse-txt.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test.h"
#include "dns-proto.h"
@@ -26,15 +43,11 @@ TEST_F(LibraryTest, ParseTxtReplyOK) {
struct ares_txt_reply* txt2 = txt->next;
ASSERT_NE(nullptr, txt2);
- EXPECT_EQ(std::vector<byte>(expected2a.data(), expected2a.data() + expected2a.size()),
+ std::vector<byte> rsp = std::vector<byte>(expected2a.data(), expected2a.data() + expected2a.size());
+ rsp.insert(rsp.end(), expected2b.data(), expected2b.data() + expected2b.size());
+ EXPECT_EQ(rsp,
std::vector<byte>(txt2->txt, txt2->txt + txt2->length));
- struct ares_txt_reply* txt3 = txt2->next;
- ASSERT_NE(nullptr, txt3);
- EXPECT_EQ(std::vector<byte>(expected2b.data(), expected2b.data() + expected2b.size()),
- std::vector<byte>(txt3->txt, txt3->txt + txt3->length));
- EXPECT_EQ(nullptr, txt3->next);
-
ares_free_data(txt);
}
@@ -58,17 +71,12 @@ TEST_F(LibraryTest, ParseTxtExtReplyOK) {
struct ares_txt_ext* txt2 = txt->next;
ASSERT_NE(nullptr, txt2);
- EXPECT_EQ(std::vector<byte>(expected2a.data(), expected2a.data() + expected2a.size()),
+ std::vector<byte> rsp = std::vector<byte>(expected2a.data(), expected2a.data() + expected2a.size());
+ rsp.insert(rsp.end(), expected2b.data(), expected2b.data() + expected2b.size());
+ EXPECT_EQ(rsp,
std::vector<byte>(txt2->txt, txt2->txt + txt2->length));
EXPECT_EQ(1, txt2->record_start);
- struct ares_txt_ext* txt3 = txt2->next;
- ASSERT_NE(nullptr, txt3);
- EXPECT_EQ(std::vector<byte>(expected2b.data(), expected2b.data() + expected2b.size()),
- std::vector<byte>(txt3->txt, txt3->txt + txt3->length));
- EXPECT_EQ(nullptr, txt3->next);
- EXPECT_EQ(0, txt3->record_start);
-
ares_free_data(txt);
}
diff --git a/test/ares-test-parse-uri.cc b/test/ares-test-parse-uri.cc
index 4fbffd0..1e43697 100644
--- a/test/ares-test-parse-uri.cc
+++ b/test/ares-test-parse-uri.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test.h"
#include "dns-proto.h"
diff --git a/test/ares-test-parse.cc b/test/ares-test-parse.cc
index 87ab0bd..10e8fae 100644
--- a/test/ares-test-parse.cc
+++ b/test/ares-test-parse.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test.h"
#include "dns-proto.h"
@@ -182,41 +199,6 @@ TEST_F(LibraryTest, ParseFullyCompressedName) {
ares_free_hostent(host);
}
-TEST_F(LibraryTest, ParseFullyCompressedName2) {
- std::vector<byte> data = {
- 0x12, 0x34, // qid
- 0x84, // response + query + AA + not-TC + not-RD
- 0x00, // not-RA + not-Z + not-AD + not-CD + rc=NoError
- 0x00, 0x01, // num questions
- 0x00, 0x01, // num answer RRs
- 0x00, 0x00, // num authority RRs
- 0x00, 0x00, // num additional RRs
- // Question
- 0xC0, 0x12, // pointer to later in message
- 0x00, 0x01, // type A
- 0x00, 0x01, // class IN
- // Answer 1
- 0x03, 'w', 'w', 'w',
- 0x07, 'e', 'x', 'a', 'm', 'p', 'l', 'e',
- 0x03, 'c', 'o', 'm',
- 0x00,
- 0x00, 0x01, // RR type
- 0x00, 0x01, // class IN
- 0x01, 0x02, 0x03, 0x04, // TTL
- 0x00, 0x04, // rdata length
- 0x02, 0x03, 0x04, 0x05,
- };
- struct hostent *host = nullptr;
- struct ares_addrttl info[2];
- int count = 2;
- EXPECT_EQ(ARES_SUCCESS, ares_parse_a_reply(data.data(), data.size(),
- &host, info, &count));
- ASSERT_NE(nullptr, host);
- std::stringstream ss;
- ss << HostEnt(host);
- EXPECT_EQ("{'www.example.com' aliases=[] addrs=[2.3.4.5]}", ss.str());
- ares_free_hostent(host);
-}
} // namespace test
} // namespace ares
diff --git a/test/ares-test.cc b/test/ares-test.cc
index 7e8793d..059f1cf 100644
--- a/test/ares-test.cc
+++ b/test/ares-test.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) Brad House
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares_setup.h"
#include "ares.h"
#include "ares_nameser.h"
@@ -84,9 +101,11 @@ void ProcessWork(ares_channel channel,
}
}
- // Wait for activity or timeout.
- tv.tv_sec = 0;
- tv.tv_usec = 100000; // 100ms
+ /* If ares_timeout returns NULL, it means there are no requests in queue,
+ * so we can break out */
+ if (ares_timeout(channel, NULL, &tv) == NULL)
+ return;
+
count = select(nfds, &readers, &writers, nullptr, &tv);
if (count < 0) {
fprintf(stderr, "select() failed, errno %d\n", errno);
@@ -175,6 +194,8 @@ void DefaultChannelModeTest::Process() {
MockServer::MockServer(int family, int port)
: udpport_(port), tcpport_(port), qid_(-1) {
// Create a TCP socket to receive data on.
+ tcp_data_ = NULL;
+ tcp_data_len_ = 0;
tcpfd_ = socket(family, SOCK_STREAM, 0);
EXPECT_NE(-1, tcpfd_);
int optval = 1;
@@ -260,6 +281,7 @@ MockServer::~MockServer() {
}
sclose(tcpfd_);
sclose(udpfd_);
+ free(tcp_data_);
}
void MockServer::ProcessPacket(int fd, struct sockaddr_storage *addr, socklen_t addrlen,
@@ -345,36 +367,38 @@ void MockServer::ProcessFD(int fd) {
byte buffer[2048];
int len = recvfrom(fd, BYTE_CAST buffer, sizeof(buffer), 0,
(struct sockaddr *)&addr, &addrlen);
- byte* data = buffer;
if (fd != udpfd_) {
if (len == 0) {
connfds_.erase(std::find(connfds_.begin(), connfds_.end(), fd));
sclose(fd);
+ free(tcp_data_);
+ tcp_data_ = NULL;
+ tcp_data_len_ = 0;
return;
}
- if (len < 2) {
- std::cerr << "Packet too short (" << len << ")" << std::endl;
- return;
- }
+ tcp_data_ = (unsigned char *)realloc(tcp_data_, tcp_data_len_ + len);
+ memcpy(tcp_data_ + tcp_data_len_, buffer, len);
+ tcp_data_len_ += len;
+
/* TCP might aggregate the various requests into a single packet, so we
* need to split */
- while (len) {
- int tcplen = (data[0] << 8) + data[1];
- data += 2;
- len -= 2;
- if (tcplen > len) {
- std::cerr << "Warning: TCP length " << tcplen
- << " doesn't match remaining data length " << len << std::endl;
+ while (tcp_data_len_ > 2) {
+ size_t tcplen = (tcp_data_[0] << 8) + tcp_data_[1];
+ if (tcp_data_len_ - 2 < tcplen)
+ break;
+
+ ProcessPacket(fd, &addr, addrlen, tcp_data_ + 2, tcplen);
+
+ /* strip off processed data if connection not terminated */
+ if (tcp_data_ != NULL) {
+ memmove(tcp_data_, tcp_data_ + tcplen + 2, tcp_data_len_ - 2 - tcplen);
+ tcp_data_len_ -= 2 + tcplen;
}
- int process_len = (tcplen > len)?len:tcplen;
- ProcessPacket(fd, &addr, addrlen, data, process_len);
- len -= process_len;
- data += process_len;
}
} else {
/* UDP is always a single packet */
- ProcessPacket(fd, &addr, addrlen, data, len);
+ ProcessPacket(fd, &addr, addrlen, buffer, len);
}
}
diff --git a/test/ares-test.h b/test/ares-test.h
index 9337915..fa501ab 100644
--- a/test/ares-test.h
+++ b/test/ares-test.h
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
// -*- mode: c++ -*-
#ifndef ARES_TEST_H
#define ARES_TEST_H
@@ -13,10 +30,10 @@
#include "gmock/gmock.h"
#ifdef HAVE_CONFIG_H
-#include "config.h"
+# include "config.h"
#endif
#if defined(HAVE_USER_NAMESPACE) && defined(HAVE_UTS_NAMESPACE)
-#define HAVE_CONTAINER
+# define HAVE_CONTAINER
#endif
#include <functional>
@@ -34,68 +51,73 @@ typedef unsigned char byte;
namespace test {
-extern bool verbose;
-extern int mock_port;
-extern const std::vector<int> both_families;
-extern const std::vector<int> ipv4_family;
-extern const std::vector<int> ipv6_family;
+extern bool verbose;
+extern int mock_port;
+extern const std::vector<int> both_families;
+extern const std::vector<int> ipv4_family;
+extern const std::vector<int> ipv6_family;
extern const std::vector<std::pair<int, bool>> both_families_both_modes;
extern const std::vector<std::pair<int, bool>> ipv4_family_both_modes;
extern const std::vector<std::pair<int, bool>> ipv6_family_both_modes;
// Which parameters to use in tests
-extern std::vector<int> families;
-extern std::vector<std::pair<int, bool>> families_modes;
+extern std::vector<int> families;
+extern std::vector<std::pair<int, bool>> families_modes;
// Process all pending work on ares-owned file descriptors, plus
// optionally the given set-of-FDs + work function.
-void ProcessWork(ares_channel channel,
- std::function<std::set<int>()> get_extrafds,
- std::function<void(int)> process_extra);
-std::set<int> NoExtraFDs();
+void ProcessWork(ares_channel channel,
+ std::function<std::set<int>()> get_extrafds,
+ std::function<void(int)> process_extra);
+std::set<int> NoExtraFDs();
// Test fixture that ensures library initialization, and allows
// memory allocations to be failed.
class LibraryTest : public ::testing::Test {
- public:
- LibraryTest() {
- EXPECT_EQ(ARES_SUCCESS,
- ares_library_init_mem(ARES_LIB_INIT_ALL,
- &LibraryTest::amalloc,
- &LibraryTest::afree,
- &LibraryTest::arealloc));
+public:
+ LibraryTest()
+ {
+ EXPECT_EQ(ARES_SUCCESS, ares_library_init_mem(
+ ARES_LIB_INIT_ALL, &LibraryTest::amalloc,
+ &LibraryTest::afree, &LibraryTest::arealloc));
}
- ~LibraryTest() {
+
+ ~LibraryTest()
+ {
ares_library_cleanup();
ClearFails();
}
+
// Set the n-th malloc call (of any size) from the library to fail.
// (nth == 1 means the next call)
- static void SetAllocFail(int nth);
+ static void SetAllocFail(int nth);
// Set the next malloc call for the given size to fail.
- static void SetAllocSizeFail(size_t size);
+ static void SetAllocSizeFail(size_t size);
// Remove any pending alloc failures.
- static void ClearFails();
+ static void ClearFails();
static void *amalloc(size_t size);
- static void* arealloc(void *ptr, size_t size);
- static void afree(void *ptr);
- private:
- static bool ShouldAllocFail(size_t size);
- static unsigned long long fails_;
+ static void *arealloc(void *ptr, size_t size);
+ static void afree(void *ptr);
+
+private:
+ static bool ShouldAllocFail(size_t size);
+ static unsigned long long fails_;
static std::map<size_t, int> size_fails_;
};
// Test fixture that uses a default channel.
class DefaultChannelTest : public LibraryTest {
- public:
- DefaultChannelTest() : channel_(nullptr) {
+public:
+ DefaultChannelTest() : channel_(nullptr)
+ {
EXPECT_EQ(ARES_SUCCESS, ares_init(&channel_));
EXPECT_NE(nullptr, channel_);
}
- ~DefaultChannelTest() {
+ ~DefaultChannelTest()
+ {
ares_destroy(channel_);
channel_ = nullptr;
}
@@ -103,25 +125,27 @@ class DefaultChannelTest : public LibraryTest {
// Process all pending work on ares-owned file descriptors.
void Process();
- protected:
+protected:
ares_channel channel_;
};
// Test fixture that uses a default channel with the specified lookup mode.
class DefaultChannelModeTest
- : public LibraryTest,
- public ::testing::WithParamInterface<std::string> {
- public:
- DefaultChannelModeTest() : channel_(nullptr) {
- struct ares_options opts = {0};
- opts.lookups = strdup(GetParam().c_str());
- int optmask = ARES_OPT_LOOKUPS;
+ : public LibraryTest,
+ public ::testing::WithParamInterface<std::string> {
+public:
+ DefaultChannelModeTest() : channel_(nullptr)
+ {
+ struct ares_options opts = { 0 };
+ opts.lookups = strdup(GetParam().c_str());
+ int optmask = ARES_OPT_LOOKUPS;
EXPECT_EQ(ARES_SUCCESS, ares_init_options(&channel_, &opts, optmask));
EXPECT_NE(nullptr, channel_);
free(opts.lookups);
}
- ~DefaultChannelModeTest() {
+ ~DefaultChannelModeTest()
+ {
ares_destroy(channel_);
channel_ = nullptr;
}
@@ -129,204 +153,271 @@ class DefaultChannelModeTest
// Process all pending work on ares-owned file descriptors.
void Process();
- protected:
+protected:
ares_channel channel_;
};
// Mock DNS server to allow responses to be scripted by tests.
class MockServer {
- public:
+public:
MockServer(int family, int port);
~MockServer();
// Mock method indicating the processing of a particular <name, RRtype>
// request.
- MOCK_METHOD2(OnRequest, void(const std::string& name, int rrtype));
+ MOCK_METHOD2(OnRequest, void(const std::string &name, int rrtype));
// Set the reply to be sent next; the query ID field will be overwritten
// with the value from the request.
- void SetReplyData(const std::vector<byte>& reply) { reply_ = reply; }
- void SetReply(const DNSPacket* reply) { SetReplyData(reply->data()); }
- void SetReplyQID(int qid) { qid_ = qid; }
+ void SetReplyData(const std::vector<byte> &reply)
+ {
+ reply_ = reply;
+ }
+
+ void SetReply(const DNSPacket *reply)
+ {
+ SetReplyData(reply->data());
+ }
+
+ void SetReplyQID(int qid)
+ {
+ qid_ = qid;
+ }
+
+ void Disconnect()
+ {
+ for (int fd : connfds_) {
+ sclose(fd);
+ }
+ connfds_.clear();
+ free(tcp_data_);
+ tcp_data_ = NULL;
+ tcp_data_len_ = 0;
+ }
// The set of file descriptors that the server handles.
std::set<int> fds() const;
// Process activity on a file descriptor.
- void ProcessFD(int fd);
+ void ProcessFD(int fd);
// Ports the server is responding to
- int udpport() const { return udpport_; }
- int tcpport() const { return tcpport_; }
+ int udpport() const
+ {
+ return udpport_;
+ }
- private:
- void ProcessRequest(int fd, struct sockaddr_storage* addr, int addrlen,
- int qid, const std::string& name, int rrtype);
+ int tcpport() const
+ {
+ return tcpport_;
+ }
+
+private:
+ void ProcessRequest(int fd, struct sockaddr_storage *addr, int addrlen,
+ int qid, const std::string &name, int rrtype);
void ProcessPacket(int fd, struct sockaddr_storage *addr, socklen_t addrlen,
byte *data, int len);
- int udpport_;
- int tcpport_;
- int udpfd_;
- int tcpfd_;
- std::set<int> connfds_;
+ int udpport_;
+ int tcpport_;
+ int udpfd_;
+ int tcpfd_;
+ std::set<int> connfds_;
std::vector<byte> reply_;
- int qid_;
+ int qid_;
+ unsigned char *tcp_data_;
+ size_t tcp_data_len_;
};
// Test fixture that uses a mock DNS server.
class MockChannelOptsTest : public LibraryTest {
- public:
- MockChannelOptsTest(int count, int family, bool force_tcp, struct ares_options* givenopts, int optmask);
+public:
+ MockChannelOptsTest(int count, int family, bool force_tcp,
+ struct ares_options *givenopts, int optmask);
~MockChannelOptsTest();
- // Process all pending work on ares-owned and mock-server-owned file descriptors.
+ // Process all pending work on ares-owned and mock-server-owned file
+ // descriptors.
void Process();
- protected:
+protected:
// NiceMockServer doesn't complain about uninteresting calls.
- typedef testing::NiceMock<MockServer> NiceMockServer;
- typedef std::vector< std::unique_ptr<NiceMockServer> > NiceMockServers;
+ typedef testing::NiceMock<MockServer> NiceMockServer;
+ typedef std::vector<std::unique_ptr<NiceMockServer>> NiceMockServers;
- std::set<int> fds() const;
- void ProcessFD(int fd);
+ std::set<int> fds() const;
+ void ProcessFD(int fd);
static NiceMockServers BuildServers(int count, int family, int base_port);
- NiceMockServers servers_;
+ NiceMockServers servers_;
// Convenience reference to first server.
- NiceMockServer& server_;
- ares_channel channel_;
+ NiceMockServer &server_;
+ ares_channel channel_;
};
class MockChannelTest
- : public MockChannelOptsTest,
- public ::testing::WithParamInterface< std::pair<int, bool> > {
- public:
- MockChannelTest() : MockChannelOptsTest(1, GetParam().first, GetParam().second, nullptr, 0) {}
+ : public MockChannelOptsTest,
+ public ::testing::WithParamInterface<std::pair<int, bool>> {
+public:
+ MockChannelTest()
+ : MockChannelOptsTest(1, GetParam().first, GetParam().second, nullptr, 0)
+ {
+ }
};
-class MockUDPChannelTest
- : public MockChannelOptsTest,
- public ::testing::WithParamInterface<int> {
- public:
- MockUDPChannelTest() : MockChannelOptsTest(1, GetParam(), false, nullptr, 0) {}
+class MockUDPChannelTest : public MockChannelOptsTest,
+ public ::testing::WithParamInterface<int> {
+public:
+ MockUDPChannelTest() : MockChannelOptsTest(1, GetParam(), false, nullptr, 0)
+ {
+ }
};
-class MockTCPChannelTest
- : public MockChannelOptsTest,
- public ::testing::WithParamInterface<int> {
- public:
- MockTCPChannelTest() : MockChannelOptsTest(1, GetParam(), true, nullptr, 0) {}
+class MockTCPChannelTest : public MockChannelOptsTest,
+ public ::testing::WithParamInterface<int> {
+public:
+ MockTCPChannelTest() : MockChannelOptsTest(1, GetParam(), true, nullptr, 0)
+ {
+ }
};
// gMock action to set the reply for a mock server.
-ACTION_P2(SetReplyData, mockserver, data) {
+ACTION_P2(SetReplyData, mockserver, data)
+{
mockserver->SetReplyData(data);
}
-ACTION_P2(SetReply, mockserver, reply) {
+
+ACTION_P2(SetReply, mockserver, reply)
+{
mockserver->SetReply(reply);
}
-ACTION_P2(SetReplyQID, mockserver, qid) {
+
+ACTION_P2(SetReplyQID, mockserver, qid)
+{
mockserver->SetReplyQID(qid);
}
+
// gMock action to cancel a channel.
-ACTION_P2(CancelChannel, mockserver, channel) {
+ACTION_P2(CancelChannel, mockserver, channel)
+{
ares_cancel(channel);
}
+// gMock action to disconnect all connections.
+ACTION_P2(Disconnect, mockserver)
+{
+ mockserver->Disconnect();
+}
+
// C++ wrapper for struct hostent.
struct HostEnt {
- HostEnt() : addrtype_(-1) {}
- HostEnt(const struct hostent* hostent);
- std::string name_;
+ HostEnt() : addrtype_(-1)
+ {
+ }
+
+ HostEnt(const struct hostent *hostent);
+ std::string name_;
std::vector<std::string> aliases_;
- int addrtype_; // AF_INET or AF_INET6
+ int addrtype_; // AF_INET or AF_INET6
std::vector<std::string> addrs_;
};
-std::ostream& operator<<(std::ostream& os, const HostEnt& result);
+
+std::ostream &operator<<(std::ostream &os, const HostEnt &result);
// Structure that describes the result of an ares_host_callback invocation.
struct HostResult {
- HostResult() : done_(false), status_(0), timeouts_(0) {}
+ HostResult() : done_(false), status_(0), timeouts_(0)
+ {
+ }
+
// Whether the callback has been invoked.
- bool done_;
+ bool done_;
// Explicitly provided result information.
- int status_;
- int timeouts_;
+ int status_;
+ int timeouts_;
// Contents of the hostent structure, if provided.
HostEnt host_;
};
-std::ostream& operator<<(std::ostream& os, const HostResult& result);
+
+std::ostream &operator<<(std::ostream &os, const HostResult &result);
// Structure that describes the result of an ares_callback invocation.
struct SearchResult {
// Whether the callback has been invoked.
- bool done_;
+ bool done_;
// Explicitly provided result information.
- int status_;
- int timeouts_;
+ int status_;
+ int timeouts_;
std::vector<byte> data_;
};
-std::ostream& operator<<(std::ostream& os, const SearchResult& result);
+
+std::ostream &operator<<(std::ostream &os, const SearchResult &result);
// Structure that describes the result of an ares_nameinfo_callback invocation.
struct NameInfoResult {
// Whether the callback has been invoked.
- bool done_;
+ bool done_;
// Explicitly provided result information.
- int status_;
- int timeouts_;
+ int status_;
+ int timeouts_;
std::string node_;
std::string service_;
};
-std::ostream& operator<<(std::ostream& os, const NameInfoResult& result);
+
+std::ostream &operator<<(std::ostream &os, const NameInfoResult &result);
struct AddrInfoDeleter {
- void operator() (ares_addrinfo *ptr) {
- if (ptr) ares_freeaddrinfo(ptr);
+ void operator()(ares_addrinfo *ptr)
+ {
+ if (ptr) {
+ ares_freeaddrinfo(ptr);
+ }
}
};
// C++ wrapper for struct ares_addrinfo.
using AddrInfo = std::unique_ptr<ares_addrinfo, AddrInfoDeleter>;
-std::ostream& operator<<(std::ostream& os, const AddrInfo& result);
+std::ostream &operator<<(std::ostream &os, const AddrInfo &result);
// Structure that describes the result of an ares_addrinfo_callback invocation.
struct AddrInfoResult {
- AddrInfoResult() : done_(false), status_(-1), timeouts_(0) {}
+ AddrInfoResult() : done_(false), status_(-1), timeouts_(0)
+ {
+ }
+
// Whether the callback has been invoked.
- bool done_;
+ bool done_;
// Explicitly provided result information.
- int status_;
- int timeouts_;
+ int status_;
+ int timeouts_;
// Contents of the ares_addrinfo structure, if provided.
AddrInfo ai_;
};
-std::ostream& operator<<(std::ostream& os, const AddrInfoResult& result);
+
+std::ostream &operator<<(std::ostream &os, const AddrInfoResult &result);
// Standard implementation of ares callbacks that fill out the corresponding
// structures.
-void HostCallback(void *data, int status, int timeouts,
- struct hostent *hostent);
-void SearchCallback(void *data, int status, int timeouts,
- unsigned char *abuf, int alen);
-void NameInfoCallback(void *data, int status, int timeouts,
- char *node, char *service);
+void HostCallback(void *data, int status, int timeouts,
+ struct hostent *hostent);
+void SearchCallback(void *data, int status, int timeouts, unsigned char *abuf,
+ int alen);
+void NameInfoCallback(void *data, int status, int timeouts, char *node,
+ char *service);
void AddrInfoCallback(void *data, int status, int timeouts,
struct ares_addrinfo *res);
// Retrieve the name servers used by a channel.
std::vector<std::string> GetNameServers(ares_channel channel);
-
// RAII class to temporarily create a directory of a given name.
class TransientDir {
- public:
- TransientDir(const std::string& dirname);
+public:
+ TransientDir(const std::string &dirname);
~TransientDir();
- private:
+private:
std::string dirname_;
};
@@ -335,19 +426,23 @@ std::string TempNam(const char *dir, const char *prefix);
// RAII class to temporarily create file of a given name and contents.
class TransientFile {
- public:
+public:
TransientFile(const std::string &filename, const std::string &contents);
~TransientFile();
- protected:
+protected:
std::string filename_;
};
// RAII class for a temporary file with the given contents.
class TempFile : public TransientFile {
- public:
- TempFile(const std::string& contents);
- const char* filename() const { return filename_.c_str(); }
+public:
+ TempFile(const std::string &contents);
+
+ const char *filename() const
+ {
+ return filename_.c_str();
+ }
};
#ifdef _WIN32
@@ -358,11 +453,13 @@ static int setenv(const char *name, const char *value, int overwrite)
char *buffer;
size_t buf_size;
- if (name == NULL)
+ if (name == NULL) {
return -1;
+ }
- if (value == NULL)
+ if (value == NULL) {
value = ""; /* For unset */
+ }
if (!overwrite && getenv(name) != NULL) {
return -1;
@@ -386,25 +483,29 @@ static int unsetenv(const char *name)
// RAII class for a temporary environment variable value.
class EnvValue {
- public:
- EnvValue(const char *name, const char *value) : name_(name), restore_(false) {
+public:
+ EnvValue(const char *name, const char *value) : name_(name), restore_(false)
+ {
char *original = getenv(name);
if (original) {
- restore_ = true;
+ restore_ = true;
original_ = original;
}
setenv(name_.c_str(), value, 1);
}
- ~EnvValue() {
+
+ ~EnvValue()
+ {
if (restore_) {
setenv(name_.c_str(), original_.c_str(), 1);
} else {
unsetenv(name_.c_str());
}
}
- private:
+
+private:
std::string name_;
- bool restore_;
+ bool restore_;
std::string original_;
};
@@ -412,39 +513,51 @@ class EnvValue {
#ifdef HAVE_CONTAINER
// Linux-specific functionality for running code in a container, implemented
// in ares-test-ns.cc
-typedef std::function<int(void)> VoidToIntFn;
+typedef std::function<int(void)> VoidToIntFn;
typedef std::vector<std::pair<std::string, std::string>> NameContentList;
class ContainerFilesystem {
- public:
- ContainerFilesystem(NameContentList files, const std::string& mountpt);
+public:
+ ContainerFilesystem(NameContentList files, const std::string &mountpt);
~ContainerFilesystem();
- std::string root() const { return rootdir_; };
- std::string mountpt() const { return mountpt_; };
- private:
- void EnsureDirExists(const std::string& dir);
- std::string rootdir_;
- std::string mountpt_;
+
+ std::string root() const
+ {
+ return rootdir_;
+ }
+
+ std::string mountpt() const
+ {
+ return mountpt_;
+ }
+
+private:
+ void EnsureDirExists(const std::string &dir);
+ std::string rootdir_;
+ std::string mountpt_;
std::list<std::string> dirs_;
std::vector<std::unique_ptr<TransientFile>> files_;
};
-int RunInContainer(ContainerFilesystem* fs, const std::string& hostname,
- const std::string& domainname, VoidToIntFn fn);
-
-#define ICLASS_NAME(casename, testname) Contained##casename##_##testname
-#define CONTAINED_TEST_F(casename, testname, hostname, domainname, files) \
- class ICLASS_NAME(casename, testname) : public casename { \
- public: \
- ICLASS_NAME(casename, testname)() {} \
- static int InnerTestBody(); \
- }; \
- TEST_F(ICLASS_NAME(casename, testname), _) { \
- ContainerFilesystem chroot(files, ".."); \
- VoidToIntFn fn(ICLASS_NAME(casename, testname)::InnerTestBody); \
- EXPECT_EQ(0, RunInContainer(&chroot, hostname, domainname, fn)); \
- } \
- int ICLASS_NAME(casename, testname)::InnerTestBody()
+int RunInContainer(ContainerFilesystem *fs, const std::string &hostname,
+ const std::string &domainname, VoidToIntFn fn);
+
+# define ICLASS_NAME(casename, testname) Contained##casename##_##testname
+# define CONTAINED_TEST_F(casename, testname, hostname, domainname, files) \
+ class ICLASS_NAME(casename, testname) : public casename { \
+ public: \
+ ICLASS_NAME(casename, testname)() \
+ { \
+ } \
+ static int InnerTestBody(); \
+ }; \
+ TEST_F(ICLASS_NAME(casename, testname), _) \
+ { \
+ ContainerFilesystem chroot(files, ".."); \
+ VoidToIntFn fn(ICLASS_NAME(casename, testname)::InnerTestBody); \
+ EXPECT_EQ(0, RunInContainer(&chroot, hostname, domainname, fn)); \
+ } \
+ int ICLASS_NAME(casename, testname)::InnerTestBody()
#endif
@@ -457,6 +570,7 @@ public:
~VirtualizeIO();
static const ares_socket_functions default_functions;
+
private:
ares_channel channel_;
};
@@ -470,22 +584,26 @@ private:
* requirements.
*/
#define VCLASS_NAME(casename, testname) Virt##casename##_##testname
-#define VIRT_NONVIRT_TEST_F(casename, testname) \
- class VCLASS_NAME(casename, testname) : public casename { \
- public: \
- VCLASS_NAME(casename, testname)() {} \
- void InnerTestBody(); \
- }; \
- GTEST_TEST_(casename, testname, VCLASS_NAME(casename, testname), \
- ::testing::internal::GetTypeId<casename>()) { \
- InnerTestBody(); \
- } \
- GTEST_TEST_(casename, testname##_virtualized, \
- VCLASS_NAME(casename, testname), \
- ::testing::internal::GetTypeId<casename>()) { \
- VirtualizeIO vio(channel_); \
- InnerTestBody(); \
- } \
+#define VIRT_NONVIRT_TEST_F(casename, testname) \
+ class VCLASS_NAME(casename, testname) : public casename { \
+ public: \
+ VCLASS_NAME(casename, testname)() \
+ { \
+ } \
+ void InnerTestBody(); \
+ }; \
+ GTEST_TEST_(casename, testname, VCLASS_NAME(casename, testname), \
+ ::testing::internal::GetTypeId<casename>()) \
+ { \
+ InnerTestBody(); \
+ } \
+ GTEST_TEST_(casename, testname##_virtualized, \
+ VCLASS_NAME(casename, testname), \
+ ::testing::internal::GetTypeId<casename>()) \
+ { \
+ VirtualizeIO vio(channel_); \
+ InnerTestBody(); \
+ } \
void VCLASS_NAME(casename, testname)::InnerTestBody()
} // namespace test
diff --git a/test/buildconf b/test/buildconf
index 5a9d7a3..91109ca 100755
--- a/test/buildconf
+++ b/test/buildconf
@@ -1,2 +1,4 @@
#!/bin/sh
-autoreconf -iv \ No newline at end of file
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
+autoreconf -iv
diff --git a/test/config.guess b/test/config.guess
index f50dcdb..7f76b62 100755
--- a/test/config.guess
+++ b/test/config.guess
@@ -1,12 +1,14 @@
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright 1992-2018 Free Software Foundation, Inc.
+# Copyright 1992-2022 Free Software Foundation, Inc.
-timestamp='2018-02-24'
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2022-01-09'
# 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
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
@@ -27,11 +29,19 @@ timestamp='2018-02-24'
# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
#
# You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
#
# Please send patches to <config-patches@gnu.org>.
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX. However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
+
me=`echo "$0" | sed -e 's,.*/,,'`
usage="\
@@ -50,7 +60,7 @@ version="\
GNU config.guess ($timestamp)
Originally written by Per Bothner.
-Copyright 1992-2018 Free Software Foundation, Inc.
+Copyright 1992-2022 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."
@@ -84,7 +94,8 @@ if test $# != 0; then
exit 1
fi
-trap 'exit 1' 1 2 15
+# Just in case it came from the environment.
+GUESS=
# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
# compiler to aid in system detection is discouraged as it requires
@@ -96,73 +107,90 @@ trap 'exit 1' 1 2 15
# Portable tmp directory creation inspired by the Autoconf team.
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,) echo "int x;" > "$dummy.c" ;
- for c in cc gcc c89 c99 ; do
- if ($c -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
- CC_FOR_BUILD="$c"; break ;
- fi ;
- done ;
- if test x"$CC_FOR_BUILD" = x ; then
- CC_FOR_BUILD=no_compiler_found ;
- fi
- ;;
- ,,*) CC_FOR_BUILD=$CC ;;
- ,*,*) CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
+tmp=
+# shellcheck disable=SC2172
+trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15
+
+set_cc_for_build() {
+ # prevent multiple calls if $tmp is already set
+ test "$tmp" && return 0
+ : "${TMPDIR=/tmp}"
+ # shellcheck disable=SC2039,SC3028
+ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
+ dummy=$tmp/dummy
+ case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
+ ,,) echo "int x;" > "$dummy.c"
+ for driver in cc gcc c89 c99 ; do
+ if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
+ CC_FOR_BUILD=$driver
+ break
+ fi
+ done
+ if test x"$CC_FOR_BUILD" = x ; then
+ CC_FOR_BUILD=no_compiler_found
+ fi
+ ;;
+ ,,*) CC_FOR_BUILD=$CC ;;
+ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
+ esac
+}
# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+if test -f /.attbin/uname ; then
PATH=$PATH:/.attbin ; export PATH
fi
UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-case "$UNAME_SYSTEM" in
+case $UNAME_SYSTEM in
Linux|GNU|GNU/*)
- # If the system lacks a compiler, then just pick glibc.
- # We could probably try harder.
- LIBC=gnu
+ LIBC=unknown
- eval "$set_cc_for_build"
+ set_cc_for_build
cat <<-EOF > "$dummy.c"
#include <features.h>
#if defined(__UCLIBC__)
LIBC=uclibc
#elif defined(__dietlibc__)
LIBC=dietlibc
- #else
+ #elif defined(__GLIBC__)
LIBC=gnu
+ #else
+ #include <stdarg.h>
+ /* First heuristic to detect musl libc. */
+ #ifdef __DEFINED_va_list
+ LIBC=musl
+ #endif
#endif
EOF
- eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
+ cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
+ eval "$cc_set_libc"
- # If ldd exists, use it to detect musl libc.
- if command -v ldd >/dev/null && \
- ldd --version 2>&1 | grep -q ^musl
- then
- LIBC=musl
+ # Second heuristic to detect musl libc.
+ if [ "$LIBC" = unknown ] &&
+ command -v ldd >/dev/null &&
+ ldd --version 2>&1 | grep -q ^musl; then
+ LIBC=musl
+ fi
+
+ # If the system lacks a compiler, then just pick glibc.
+ # We could probably try harder.
+ if [ "$LIBC" = unknown ]; then
+ LIBC=gnu
fi
;;
esac
# Note: order is significant - the case branches are not exclusive.
-case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
+case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in
*:NetBSD:*:*)
# NetBSD (nbsd) targets should (where applicable) match one or
# more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
@@ -174,12 +202,12 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
#
# Note: NetBSD doesn't particularly care about the vendor
# portion of the name. We always set it to "unknown".
- sysctl="sysctl -n hw.machine_arch"
UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
- "/sbin/$sysctl" 2>/dev/null || \
- "/usr/sbin/$sysctl" 2>/dev/null || \
+ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \
+ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \
echo unknown)`
- case "$UNAME_MACHINE_ARCH" in
+ case $UNAME_MACHINE_ARCH in
+ aarch64eb) machine=aarch64_be-unknown ;;
armeb) machine=armeb-unknown ;;
arm*) machine=arm-unknown ;;
sh3el) machine=shl-unknown ;;
@@ -188,18 +216,18 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
earmv*)
arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
- machine="${arch}${endian}"-unknown
+ machine=${arch}${endian}-unknown
;;
- *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
+ *) machine=$UNAME_MACHINE_ARCH-unknown ;;
esac
# The Operating System including object format, if it has switched
# to ELF recently (or will in the future) and ABI.
- case "$UNAME_MACHINE_ARCH" in
+ case $UNAME_MACHINE_ARCH in
earm*)
os=netbsdelf
;;
arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- eval "$set_cc_for_build"
+ set_cc_for_build
if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ELF__
then
@@ -215,7 +243,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
;;
esac
# Determine ABI tags.
- case "$UNAME_MACHINE_ARCH" in
+ case $UNAME_MACHINE_ARCH in
earm*)
expr='s/^earmv[0-9]/-eabi/;s/eb$//'
abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
@@ -226,7 +254,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# thus, need a distinct triplet. However, they do not need
# kernel version information, so it can be replaced with a
# suitable tag, in the style of linux-gnu.
- case "$UNAME_VERSION" in
+ case $UNAME_VERSION in
Debian*)
release='-gnu'
;;
@@ -237,45 +265,57 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
# contains redundant information, the shorter form:
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
- echo "$machine-${os}${release}${abi}"
- exit ;;
+ GUESS=$machine-${os}${release}${abi-}
+ ;;
*:Bitrig:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
- echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE
+ ;;
*:OpenBSD:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
- echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE
+ ;;
+ *:SecBSD:*:*)
+ UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'`
+ GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE
+ ;;
*:LibertyBSD:*:*)
UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
- echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE
+ ;;
*:MidnightBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE
+ ;;
*:ekkoBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE
+ ;;
*:SolidBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE
+ ;;
+ *:OS108:*:*)
+ GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE
+ ;;
macppc:MirBSD:*:*)
- echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE
+ ;;
*:MirBSD:*:*)
- echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE
+ ;;
*:Sortix:*:*)
- echo "$UNAME_MACHINE"-unknown-sortix
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-sortix
+ ;;
+ *:Twizzler:*:*)
+ GUESS=$UNAME_MACHINE-unknown-twizzler
+ ;;
*:Redox:*:*)
- echo "$UNAME_MACHINE"-unknown-redox
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-redox
+ ;;
mips:OSF1:*.*)
- echo mips-dec-osf1
- exit ;;
+ GUESS=mips-dec-osf1
+ ;;
alpha:OSF1:*:*)
+ # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+ trap '' 0
case $UNAME_RELEASE in
*4.0)
UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
@@ -289,7 +329,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# covers most systems running today. This code pipes the CPU
# types through head -n 1, so we only detect the type of CPU 0.
ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
- case "$ALPHA_CPU_TYPE" in
+ case $ALPHA_CPU_TYPE in
"EV4 (21064)")
UNAME_MACHINE=alpha ;;
"EV4.5 (21064)")
@@ -326,117 +366,121 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# A Tn.n version is a released field test version.
# A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r.
- echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`"
- # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
- exitcode=$?
- trap '' 0
- exit $exitcode ;;
+ OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+ GUESS=$UNAME_MACHINE-dec-osf$OSF_REL
+ ;;
Amiga*:UNIX_System_V:4.0:*)
- echo m68k-unknown-sysv4
- exit ;;
+ GUESS=m68k-unknown-sysv4
+ ;;
*:[Aa]miga[Oo][Ss]:*:*)
- echo "$UNAME_MACHINE"-unknown-amigaos
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-amigaos
+ ;;
*:[Mm]orph[Oo][Ss]:*:*)
- echo "$UNAME_MACHINE"-unknown-morphos
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-morphos
+ ;;
*:OS/390:*:*)
- echo i370-ibm-openedition
- exit ;;
+ GUESS=i370-ibm-openedition
+ ;;
*:z/VM:*:*)
- echo s390-ibm-zvmoe
- exit ;;
+ GUESS=s390-ibm-zvmoe
+ ;;
*:OS400:*:*)
- echo powerpc-ibm-os400
- exit ;;
+ GUESS=powerpc-ibm-os400
+ ;;
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
- echo arm-acorn-riscix"$UNAME_RELEASE"
- exit ;;
+ GUESS=arm-acorn-riscix$UNAME_RELEASE
+ ;;
arm*:riscos:*:*|arm*:RISCOS:*:*)
- echo arm-unknown-riscos
- exit ;;
+ GUESS=arm-unknown-riscos
+ ;;
SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
- echo hppa1.1-hitachi-hiuxmpp
- exit ;;
+ GUESS=hppa1.1-hitachi-hiuxmpp
+ ;;
Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
- if test "`(/bin/universe) 2>/dev/null`" = att ; then
- echo pyramid-pyramid-sysv3
- else
- echo pyramid-pyramid-bsd
- fi
- exit ;;
+ case `(/bin/universe) 2>/dev/null` in
+ att) GUESS=pyramid-pyramid-sysv3 ;;
+ *) GUESS=pyramid-pyramid-bsd ;;
+ esac
+ ;;
NILE*:*:*:dcosx)
- echo pyramid-pyramid-svr4
- exit ;;
+ GUESS=pyramid-pyramid-svr4
+ ;;
DRS?6000:unix:4.0:6*)
- echo sparc-icl-nx6
- exit ;;
+ GUESS=sparc-icl-nx6
+ ;;
DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
case `/usr/bin/uname -p` in
- sparc) echo sparc-icl-nx7; exit ;;
- esac ;;
+ sparc) GUESS=sparc-icl-nx7 ;;
+ esac
+ ;;
s390x:SunOS:*:*)
- echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL
+ ;;
sun4H:SunOS:5.*:*)
- echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-hal-solaris2$SUN_REL
+ ;;
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-sun-solaris2$SUN_REL
+ ;;
i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
- echo i386-pc-auroraux"$UNAME_RELEASE"
- exit ;;
+ GUESS=i386-pc-auroraux$UNAME_RELEASE
+ ;;
i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
- eval "$set_cc_for_build"
+ set_cc_for_build
SUN_ARCH=i386
# If there is a compiler, see if it is configured for 64-bit objects.
# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
# This test works for both compilers.
- if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \
grep IS_64BIT_ARCH >/dev/null
then
SUN_ARCH=x86_64
fi
fi
- echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=$SUN_ARCH-pc-solaris2$SUN_REL
+ ;;
sun4*:SunOS:6*:*)
# According to config.sub, this is the proper way to canonicalize
# SunOS6. Hard to guess exactly what SunOS6 will be like, but
# it's likely to be more like Solaris than SunOS4.
- echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=sparc-sun-solaris3$SUN_REL
+ ;;
sun4*:SunOS:*:*)
- case "`/usr/bin/arch -k`" in
+ case `/usr/bin/arch -k` in
Series*|S4*)
UNAME_RELEASE=`uname -v`
;;
esac
# Japanese Language versions have a version number like `4.1.3-JL'.
- echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'`
+ GUESS=sparc-sun-sunos$SUN_REL
+ ;;
sun3*:SunOS:*:*)
- echo m68k-sun-sunos"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-sun-sunos$UNAME_RELEASE
+ ;;
sun*:*:4.2BSD:*)
UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
- case "`/bin/arch`" in
+ case `/bin/arch` in
sun3)
- echo m68k-sun-sunos"$UNAME_RELEASE"
+ GUESS=m68k-sun-sunos$UNAME_RELEASE
;;
sun4)
- echo sparc-sun-sunos"$UNAME_RELEASE"
+ GUESS=sparc-sun-sunos$UNAME_RELEASE
;;
esac
- exit ;;
+ ;;
aushp:SunOS:*:*)
- echo sparc-auspex-sunos"$UNAME_RELEASE"
- exit ;;
+ GUESS=sparc-auspex-sunos$UNAME_RELEASE
+ ;;
# The situation for MiNT is a little confusing. The machine name
# can be virtually everything (everything which is not
# "atarist" or "atariste" at least should have a processor
@@ -446,43 +490,43 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
# MiNT. But MiNT is downward compatible to TOS, so this should
# be no problem.
atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
*falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
- echo m68k-atari-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-atari-mint$UNAME_RELEASE
+ ;;
milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
- echo m68k-milan-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-milan-mint$UNAME_RELEASE
+ ;;
hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
- echo m68k-hades-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-hades-mint$UNAME_RELEASE
+ ;;
*:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
- echo m68k-unknown-mint"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-unknown-mint$UNAME_RELEASE
+ ;;
m68k:machten:*:*)
- echo m68k-apple-machten"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-apple-machten$UNAME_RELEASE
+ ;;
powerpc:machten:*:*)
- echo powerpc-apple-machten"$UNAME_RELEASE"
- exit ;;
+ GUESS=powerpc-apple-machten$UNAME_RELEASE
+ ;;
RISC*:Mach:*:*)
- echo mips-dec-mach_bsd4.3
- exit ;;
+ GUESS=mips-dec-mach_bsd4.3
+ ;;
RISC*:ULTRIX:*:*)
- echo mips-dec-ultrix"$UNAME_RELEASE"
- exit ;;
+ GUESS=mips-dec-ultrix$UNAME_RELEASE
+ ;;
VAX*:ULTRIX*:*:*)
- echo vax-dec-ultrix"$UNAME_RELEASE"
- exit ;;
+ GUESS=vax-dec-ultrix$UNAME_RELEASE
+ ;;
2020:CLIX:*:* | 2430:CLIX:*:*)
- echo clipper-intergraph-clix"$UNAME_RELEASE"
- exit ;;
+ GUESS=clipper-intergraph-clix$UNAME_RELEASE
+ ;;
mips:*:*:UMIPS | mips:*:*:RISCos)
- eval "$set_cc_for_build"
+ set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
#ifdef __cplusplus
#include <stdio.h> /* for printf() prototype */
@@ -508,78 +552,79 @@ EOF
dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
{ echo "$SYSTEM_NAME"; exit; }
- echo mips-mips-riscos"$UNAME_RELEASE"
- exit ;;
+ GUESS=mips-mips-riscos$UNAME_RELEASE
+ ;;
Motorola:PowerMAX_OS:*:*)
- echo powerpc-motorola-powermax
- exit ;;
+ GUESS=powerpc-motorola-powermax
+ ;;
Motorola:*:4.3:PL8-*)
- echo powerpc-harris-powermax
- exit ;;
+ GUESS=powerpc-harris-powermax
+ ;;
Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
- echo powerpc-harris-powermax
- exit ;;
+ GUESS=powerpc-harris-powermax
+ ;;
Night_Hawk:Power_UNIX:*:*)
- echo powerpc-harris-powerunix
- exit ;;
+ GUESS=powerpc-harris-powerunix
+ ;;
m88k:CX/UX:7*:*)
- echo m88k-harris-cxux7
- exit ;;
+ GUESS=m88k-harris-cxux7
+ ;;
m88k:*:4*:R4*)
- echo m88k-motorola-sysv4
- exit ;;
+ GUESS=m88k-motorola-sysv4
+ ;;
m88k:*:3*:R3*)
- echo m88k-motorola-sysv3
- exit ;;
+ GUESS=m88k-motorola-sysv3
+ ;;
AViiON:dgux:*:*)
# DG/UX returns AViiON for all architectures
UNAME_PROCESSOR=`/usr/bin/uname -p`
- if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ]
+ if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110
then
- if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \
- [ "$TARGET_BINARY_INTERFACE"x = x ]
+ if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \
+ test "$TARGET_BINARY_INTERFACE"x = x
then
- echo m88k-dg-dgux"$UNAME_RELEASE"
+ GUESS=m88k-dg-dgux$UNAME_RELEASE
else
- echo m88k-dg-dguxbcs"$UNAME_RELEASE"
+ GUESS=m88k-dg-dguxbcs$UNAME_RELEASE
fi
else
- echo i586-dg-dgux"$UNAME_RELEASE"
+ GUESS=i586-dg-dgux$UNAME_RELEASE
fi
- exit ;;
+ ;;
M88*:DolphinOS:*:*) # DolphinOS (SVR3)
- echo m88k-dolphin-sysv3
- exit ;;
+ GUESS=m88k-dolphin-sysv3
+ ;;
M88*:*:R3*:*)
# Delta 88k system running SVR3
- echo m88k-motorola-sysv3
- exit ;;
+ GUESS=m88k-motorola-sysv3
+ ;;
XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
- echo m88k-tektronix-sysv3
- exit ;;
+ GUESS=m88k-tektronix-sysv3
+ ;;
Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
- echo m68k-tektronix-bsd
- exit ;;
+ GUESS=m68k-tektronix-bsd
+ ;;
*:IRIX*:*:*)
- echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`"
- exit ;;
+ IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'`
+ GUESS=mips-sgi-irix$IRIX_REL
+ ;;
????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
- echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
- exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
+ GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id
+ ;; # Note that: echo "'`uname -s`'" gives 'AIX '
i*86:AIX:*:*)
- echo i386-ibm-aix
- exit ;;
+ GUESS=i386-ibm-aix
+ ;;
ia64:AIX:*:*)
- if [ -x /usr/bin/oslevel ] ; then
+ if test -x /usr/bin/oslevel ; then
IBM_REV=`/usr/bin/oslevel`
else
- IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+ IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
fi
- echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV"
- exit ;;
+ GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV
+ ;;
*:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
- eval "$set_cc_for_build"
+ set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
#include <sys/systemcfg.h>
@@ -593,16 +638,16 @@ EOF
EOF
if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
then
- echo "$SYSTEM_NAME"
+ GUESS=$SYSTEM_NAME
else
- echo rs6000-ibm-aix3.2.5
+ GUESS=rs6000-ibm-aix3.2.5
fi
elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
- echo rs6000-ibm-aix3.2.4
+ GUESS=rs6000-ibm-aix3.2.4
else
- echo rs6000-ibm-aix3.2
+ GUESS=rs6000-ibm-aix3.2
fi
- exit ;;
+ ;;
*:AIX:*:[4567])
IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
@@ -610,57 +655,57 @@ EOF
else
IBM_ARCH=powerpc
fi
- if [ -x /usr/bin/lslpp ] ; then
- IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+ if test -x /usr/bin/lslpp ; then
+ IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \
awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
else
- IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+ IBM_REV=$UNAME_VERSION.$UNAME_RELEASE
fi
- echo "$IBM_ARCH"-ibm-aix"$IBM_REV"
- exit ;;
+ GUESS=$IBM_ARCH-ibm-aix$IBM_REV
+ ;;
*:AIX:*:*)
- echo rs6000-ibm-aix
- exit ;;
+ GUESS=rs6000-ibm-aix
+ ;;
ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
- echo romp-ibm-bsd4.4
- exit ;;
+ GUESS=romp-ibm-bsd4.4
+ ;;
ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
- echo romp-ibm-bsd"$UNAME_RELEASE" # 4.3 with uname added to
- exit ;; # report: romp-ibm BSD 4.3
+ GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to
+ ;; # report: romp-ibm BSD 4.3
*:BOSX:*:*)
- echo rs6000-bull-bosx
- exit ;;
+ GUESS=rs6000-bull-bosx
+ ;;
DPX/2?00:B.O.S.:*:*)
- echo m68k-bull-sysv3
- exit ;;
+ GUESS=m68k-bull-sysv3
+ ;;
9000/[34]??:4.3bsd:1.*:*)
- echo m68k-hp-bsd
- exit ;;
+ GUESS=m68k-hp-bsd
+ ;;
hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
- echo m68k-hp-bsd4.4
- exit ;;
+ GUESS=m68k-hp-bsd4.4
+ ;;
9000/[34678]??:HP-UX:*:*)
- HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
- case "$UNAME_MACHINE" in
+ HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+ case $UNAME_MACHINE in
9000/31?) HP_ARCH=m68000 ;;
9000/[34]??) HP_ARCH=m68k ;;
9000/[678][0-9][0-9])
- if [ -x /usr/bin/getconf ]; then
+ if test -x /usr/bin/getconf; then
sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- case "$sc_cpu_version" in
+ case $sc_cpu_version in
523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
532) # CPU_PA_RISC2_0
- case "$sc_kernel_bits" in
+ case $sc_kernel_bits in
32) HP_ARCH=hppa2.0n ;;
64) HP_ARCH=hppa2.0w ;;
'') HP_ARCH=hppa2.0 ;; # HP-UX 10.20
esac ;;
esac
fi
- if [ "$HP_ARCH" = "" ]; then
- eval "$set_cc_for_build"
+ if test "$HP_ARCH" = ""; then
+ set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
#define _HPUX_SOURCE
@@ -698,9 +743,9 @@ EOF
test -z "$HP_ARCH" && HP_ARCH=hppa
fi ;;
esac
- if [ "$HP_ARCH" = hppa2.0w ]
+ if test "$HP_ARCH" = hppa2.0w
then
- eval "$set_cc_for_build"
+ set_cc_for_build
# hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
# 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
@@ -719,14 +764,14 @@ EOF
HP_ARCH=hppa64
fi
fi
- echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
- exit ;;
+ GUESS=$HP_ARCH-hp-hpux$HPUX_REV
+ ;;
ia64:HP-UX:*:*)
- HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
- echo ia64-hp-hpux"$HPUX_REV"
- exit ;;
+ HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'`
+ GUESS=ia64-hp-hpux$HPUX_REV
+ ;;
3050*:HI-UX:*:*)
- eval "$set_cc_for_build"
+ set_cc_for_build
sed 's/^ //' << EOF > "$dummy.c"
#include <unistd.h>
int
@@ -754,36 +799,36 @@ EOF
EOF
$CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
{ echo "$SYSTEM_NAME"; exit; }
- echo unknown-hitachi-hiuxwe2
- exit ;;
+ GUESS=unknown-hitachi-hiuxwe2
+ ;;
9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
- echo hppa1.1-hp-bsd
- exit ;;
+ GUESS=hppa1.1-hp-bsd
+ ;;
9000/8??:4.3bsd:*:*)
- echo hppa1.0-hp-bsd
- exit ;;
+ GUESS=hppa1.0-hp-bsd
+ ;;
*9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
- echo hppa1.0-hp-mpeix
- exit ;;
+ GUESS=hppa1.0-hp-mpeix
+ ;;
hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
- echo hppa1.1-hp-osf
- exit ;;
+ GUESS=hppa1.1-hp-osf
+ ;;
hp8??:OSF1:*:*)
- echo hppa1.0-hp-osf
- exit ;;
+ GUESS=hppa1.0-hp-osf
+ ;;
i*86:OSF1:*:*)
- if [ -x /usr/sbin/sysversion ] ; then
- echo "$UNAME_MACHINE"-unknown-osf1mk
+ if test -x /usr/sbin/sysversion ; then
+ GUESS=$UNAME_MACHINE-unknown-osf1mk
else
- echo "$UNAME_MACHINE"-unknown-osf1
+ GUESS=$UNAME_MACHINE-unknown-osf1
fi
- exit ;;
+ ;;
parisc*:Lites*:*:*)
- echo hppa1.1-hp-lites
- exit ;;
+ GUESS=hppa1.1-hp-lites
+ ;;
C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
- echo c1-convex-bsd
- exit ;;
+ GUESS=c1-convex-bsd
+ ;;
C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
if getsysinfo -f scalar_acc
then echo c32-convex-bsd
@@ -791,17 +836,18 @@ EOF
fi
exit ;;
C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
- echo c34-convex-bsd
- exit ;;
+ GUESS=c34-convex-bsd
+ ;;
C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
- echo c38-convex-bsd
- exit ;;
+ GUESS=c38-convex-bsd
+ ;;
C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
- echo c4-convex-bsd
- exit ;;
+ GUESS=c4-convex-bsd
+ ;;
CRAY*Y-MP:*:*:*)
- echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=ymp-cray-unicos$CRAY_REL
+ ;;
CRAY*[A-Z]90:*:*:*)
echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
@@ -809,103 +855,129 @@ EOF
-e 's/\.[^.]*$/.X/'
exit ;;
CRAY*TS:*:*:*)
- echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=t90-cray-unicos$CRAY_REL
+ ;;
CRAY*T3E:*:*:*)
- echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=alphaev5-cray-unicosmk$CRAY_REL
+ ;;
CRAY*SV1:*:*:*)
- echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=sv1-cray-unicos$CRAY_REL
+ ;;
*:UNICOS/mp:*:*)
- echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
- exit ;;
+ CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'`
+ GUESS=craynv-cray-unicosmp$CRAY_REL
+ ;;
F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
- echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
+ GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+ ;;
5000:UNIX_System_V:4.*:*)
FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
- echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- exit ;;
+ GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}
+ ;;
i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE
+ ;;
sparc*:BSD/OS:*:*)
- echo sparc-unknown-bsdi"$UNAME_RELEASE"
- exit ;;
+ GUESS=sparc-unknown-bsdi$UNAME_RELEASE
+ ;;
*:BSD/OS:*:*)
- echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE
+ ;;
+ arm:FreeBSD:*:*)
+ UNAME_PROCESSOR=`uname -p`
+ set_cc_for_build
+ if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+ | grep -q __ARM_PCS_VFP
+ then
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi
+ else
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf
+ fi
+ ;;
*:FreeBSD:*:*)
UNAME_PROCESSOR=`/usr/bin/uname -p`
- case "$UNAME_PROCESSOR" in
+ case $UNAME_PROCESSOR in
amd64)
UNAME_PROCESSOR=x86_64 ;;
i386)
UNAME_PROCESSOR=i586 ;;
esac
- echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
- exit ;;
+ FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL
+ ;;
i*:CYGWIN*:*)
- echo "$UNAME_MACHINE"-pc-cygwin
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-cygwin
+ ;;
*:MINGW64*:*)
- echo "$UNAME_MACHINE"-pc-mingw64
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-mingw64
+ ;;
*:MINGW*:*)
- echo "$UNAME_MACHINE"-pc-mingw32
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-mingw32
+ ;;
*:MSYS*:*)
- echo "$UNAME_MACHINE"-pc-msys
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-msys
+ ;;
i*:PW*:*)
- echo "$UNAME_MACHINE"-pc-pw32
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-pw32
+ ;;
+ *:SerenityOS:*:*)
+ GUESS=$UNAME_MACHINE-pc-serenity
+ ;;
*:Interix*:*)
- case "$UNAME_MACHINE" in
+ case $UNAME_MACHINE in
x86)
- echo i586-pc-interix"$UNAME_RELEASE"
- exit ;;
+ GUESS=i586-pc-interix$UNAME_RELEASE
+ ;;
authenticamd | genuineintel | EM64T)
- echo x86_64-unknown-interix"$UNAME_RELEASE"
- exit ;;
+ GUESS=x86_64-unknown-interix$UNAME_RELEASE
+ ;;
IA64)
- echo ia64-unknown-interix"$UNAME_RELEASE"
- exit ;;
+ GUESS=ia64-unknown-interix$UNAME_RELEASE
+ ;;
esac ;;
i*:UWIN*:*)
- echo "$UNAME_MACHINE"-pc-uwin
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-uwin
+ ;;
amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
- echo x86_64-unknown-cygwin
- exit ;;
+ GUESS=x86_64-pc-cygwin
+ ;;
prep*:SunOS:5.*:*)
- echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
- exit ;;
+ SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`
+ GUESS=powerpcle-unknown-solaris2$SUN_REL
+ ;;
*:GNU:*:*)
# the GNU system
- echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`"
- exit ;;
+ GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'`
+ GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'`
+ GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL
+ ;;
*:GNU/*:*:*)
# other systems with GNU libc and userland
- echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
- exit ;;
- i*86:Minix:*:*)
- echo "$UNAME_MACHINE"-pc-minix
- exit ;;
+ GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"`
+ GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC
+ ;;
+ *:Minix:*:*)
+ GUESS=$UNAME_MACHINE-unknown-minix
+ ;;
aarch64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
aarch64_be:Linux:*:*)
UNAME_MACHINE=aarch64_be
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
alpha:Linux:*:*)
- case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in
EV5) UNAME_MACHINE=alphaev5 ;;
EV56) UNAME_MACHINE=alphaev56 ;;
PCA56) UNAME_MACHINE=alphapca56 ;;
@@ -916,187 +988,225 @@ EOF
esac
objdump --private-headers /bin/sh | grep -q ld.so.1
if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
- arc:Linux:*:* | arceb:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
arm*:Linux:*:*)
- eval "$set_cc_for_build"
+ set_cc_for_build
if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_EABI__
then
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
else
if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
| grep -q __ARM_PCS_VFP
then
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi
+ GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi
else
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf
+ GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf
fi
fi
- exit ;;
+ ;;
avr32*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
cris:Linux:*:*)
- echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+ ;;
crisv32:Linux:*:*)
- echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-axis-linux-$LIBC
+ ;;
e2k:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
frv:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
hexagon:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
i*86:Linux:*:*)
- echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-linux-$LIBC
+ ;;
ia64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
k1om:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
+ loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
m32r*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
m68*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
mips:Linux:*:* | mips64:Linux:*:*)
- eval "$set_cc_for_build"
+ set_cc_for_build
+ IS_GLIBC=0
+ test x"${LIBC}" = xgnu && IS_GLIBC=1
sed 's/^ //' << EOF > "$dummy.c"
#undef CPU
- #undef ${UNAME_MACHINE}
- #undef ${UNAME_MACHINE}el
+ #undef mips
+ #undef mipsel
+ #undef mips64
+ #undef mips64el
+ #if ${IS_GLIBC} && defined(_ABI64)
+ LIBCABI=gnuabi64
+ #else
+ #if ${IS_GLIBC} && defined(_ABIN32)
+ LIBCABI=gnuabin32
+ #else
+ LIBCABI=${LIBC}
+ #endif
+ #endif
+
+ #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+ CPU=mipsisa64r6
+ #else
+ #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6
+ CPU=mipsisa32r6
+ #else
+ #if defined(__mips64)
+ CPU=mips64
+ #else
+ CPU=mips
+ #endif
+ #endif
+ #endif
+
#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
- CPU=${UNAME_MACHINE}el
+ MIPS_ENDIAN=el
#else
#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
- CPU=${UNAME_MACHINE}
+ MIPS_ENDIAN=
#else
- CPU=
+ MIPS_ENDIAN=
#endif
#endif
EOF
- eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`"
- test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; }
+ cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`
+ eval "$cc_set_vars"
+ test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; }
;;
mips64el:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
openrisc*:Linux:*:*)
- echo or1k-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=or1k-unknown-linux-$LIBC
+ ;;
or32:Linux:*:* | or1k*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
padre:Linux:*:*)
- echo sparc-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=sparc-unknown-linux-$LIBC
+ ;;
parisc64:Linux:*:* | hppa64:Linux:*:*)
- echo hppa64-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=hppa64-unknown-linux-$LIBC
+ ;;
parisc:Linux:*:* | hppa:Linux:*:*)
# Look for CPU level
case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
- PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
- PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
- *) echo hppa-unknown-linux-"$LIBC" ;;
+ PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;;
+ PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;;
+ *) GUESS=hppa-unknown-linux-$LIBC ;;
esac
- exit ;;
+ ;;
ppc64:Linux:*:*)
- echo powerpc64-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=powerpc64-unknown-linux-$LIBC
+ ;;
ppc:Linux:*:*)
- echo powerpc-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=powerpc-unknown-linux-$LIBC
+ ;;
ppc64le:Linux:*:*)
- echo powerpc64le-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=powerpc64le-unknown-linux-$LIBC
+ ;;
ppcle:Linux:*:*)
- echo powerpcle-unknown-linux-"$LIBC"
- exit ;;
- riscv32:Linux:*:* | riscv64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=powerpcle-unknown-linux-$LIBC
+ ;;
+ riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*)
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
s390:Linux:*:* | s390x:Linux:*:*)
- echo "$UNAME_MACHINE"-ibm-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-ibm-linux-$LIBC
+ ;;
sh64*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
sh*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
sparc:Linux:*:* | sparc64:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
tile*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
vax:Linux:*:*)
- echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-dec-linux-$LIBC
+ ;;
x86_64:Linux:*:*)
- if objdump -f /bin/sh | grep -q elf32-x86-64; then
- echo "$UNAME_MACHINE"-pc-linux-"$LIBC"x32
- else
- echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
+ set_cc_for_build
+ LIBCABI=$LIBC
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_X32 >/dev/null
+ then
+ LIBCABI=${LIBC}x32
+ fi
fi
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI
+ ;;
xtensa*:Linux:*:*)
- echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-linux-$LIBC
+ ;;
i*86:DYNIX/ptx:4*:*)
# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
# earlier versions are messed up and put the nodename in both
# sysname and nodename.
- echo i386-sequent-sysv4
- exit ;;
+ GUESS=i386-sequent-sysv4
+ ;;
i*86:UNIX_SV:4.2MP:2.*)
# Unixware is an offshoot of SVR4, but it has its own version
# number series starting with 2...
# I am not positive that other SVR4 systems won't match this,
# I just have to hope. -- rms.
# Use sysv4.2uw... so that sysv4* matches it.
- echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION"
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION
+ ;;
i*86:OS/2:*:*)
# If we were able to find `uname', then EMX Unix compatibility
# is probably installed.
- echo "$UNAME_MACHINE"-pc-os2-emx
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-os2-emx
+ ;;
i*86:XTS-300:*:STOP)
- echo "$UNAME_MACHINE"-unknown-stop
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-stop
+ ;;
i*86:atheos:*:*)
- echo "$UNAME_MACHINE"-unknown-atheos
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-atheos
+ ;;
i*86:syllable:*:*)
- echo "$UNAME_MACHINE"-pc-syllable
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-syllable
+ ;;
i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
- echo i386-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=i386-unknown-lynxos$UNAME_RELEASE
+ ;;
i*86:*DOS:*:*)
- echo "$UNAME_MACHINE"-pc-msdosdjgpp
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-msdosdjgpp
+ ;;
i*86:*:4.*:*)
UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
+ GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL
else
- echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL"
+ GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL
fi
- exit ;;
+ ;;
i*86:*:5:[678]*)
# UnixWare 7.x, OpenUNIX and OpenServer 6.
case `/bin/uname -X | grep "^Machine"` in
@@ -1104,12 +1214,12 @@ EOF
*Pentium) UNAME_MACHINE=i586 ;;
*Pent*|*Celeron) UNAME_MACHINE=i686 ;;
esac
- echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}"
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+ ;;
i*86:*:3.2:*)
if test -f /usr/options/cb.name; then
UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
- echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
+ GUESS=$UNAME_MACHINE-pc-isc$UNAME_REL
elif /bin/uname -X 2>/dev/null >/dev/null ; then
UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
@@ -1119,11 +1229,11 @@ EOF
&& UNAME_MACHINE=i686
(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
&& UNAME_MACHINE=i686
- echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL"
+ GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL
else
- echo "$UNAME_MACHINE"-pc-sysv32
+ GUESS=$UNAME_MACHINE-pc-sysv32
fi
- exit ;;
+ ;;
pc:*:*:*)
# Left here for compatibility:
# uname -m prints for DJGPP always 'pc', but it prints nothing about
@@ -1131,31 +1241,31 @@ EOF
# Note: whatever this is, it MUST be the same as what config.sub
# prints for the "djgpp" host, or else GDB configure will decide that
# this is a cross-build.
- echo i586-pc-msdosdjgpp
- exit ;;
+ GUESS=i586-pc-msdosdjgpp
+ ;;
Intel:Mach:3*:*)
- echo i386-pc-mach3
- exit ;;
+ GUESS=i386-pc-mach3
+ ;;
paragon:*:*:*)
- echo i860-intel-osf1
- exit ;;
+ GUESS=i860-intel-osf1
+ ;;
i860:*:4.*:*) # i860-SVR4
if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
- echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4
+ GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4
else # Add other i860-SVR4 vendors below as they are discovered.
- echo i860-unknown-sysv"$UNAME_RELEASE" # Unknown i860-SVR4
+ GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4
fi
- exit ;;
+ ;;
mini*:CTIX:SYS*5:*)
# "miniframe"
- echo m68010-convergent-sysv
- exit ;;
+ GUESS=m68010-convergent-sysv
+ ;;
mc68k:UNIX:SYSTEM5:3.51m)
- echo m68k-convergent-sysv
- exit ;;
+ GUESS=m68k-convergent-sysv
+ ;;
M680?0:D-NIX:5.3:*)
- echo m68k-diab-dnix
- exit ;;
+ GUESS=m68k-diab-dnix
+ ;;
M68*:*:R3V[5678]*:*)
test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
@@ -1180,249 +1290,404 @@ EOF
/bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
&& { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
- echo m68k-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-unknown-lynxos$UNAME_RELEASE
+ ;;
mc68030:UNIX_System_V:4.*:*)
- echo m68k-atari-sysv4
- exit ;;
+ GUESS=m68k-atari-sysv4
+ ;;
TSUNAMI:LynxOS:2.*:*)
- echo sparc-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=sparc-unknown-lynxos$UNAME_RELEASE
+ ;;
rs6000:LynxOS:2.*:*)
- echo rs6000-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=rs6000-unknown-lynxos$UNAME_RELEASE
+ ;;
PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
- echo powerpc-unknown-lynxos"$UNAME_RELEASE"
- exit ;;
+ GUESS=powerpc-unknown-lynxos$UNAME_RELEASE
+ ;;
SM[BE]S:UNIX_SV:*:*)
- echo mips-dde-sysv"$UNAME_RELEASE"
- exit ;;
+ GUESS=mips-dde-sysv$UNAME_RELEASE
+ ;;
RM*:ReliantUNIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
+ GUESS=mips-sni-sysv4
+ ;;
RM*:SINIX-*:*:*)
- echo mips-sni-sysv4
- exit ;;
+ GUESS=mips-sni-sysv4
+ ;;
*:SINIX-*:*:*)
if uname -p 2>/dev/null >/dev/null ; then
UNAME_MACHINE=`(uname -p) 2>/dev/null`
- echo "$UNAME_MACHINE"-sni-sysv4
+ GUESS=$UNAME_MACHINE-sni-sysv4
else
- echo ns32k-sni-sysv
+ GUESS=ns32k-sni-sysv
fi
- exit ;;
+ ;;
PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
# says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit ;;
+ GUESS=i586-unisys-sysv4
+ ;;
*:UNIX_System_V:4*:FTX*)
# From Gerald Hewes <hewes@openmarket.com>.
# How about differentiating between stratus architectures? -djm
- echo hppa1.1-stratus-sysv4
- exit ;;
+ GUESS=hppa1.1-stratus-sysv4
+ ;;
*:*:*:FTX*)
# From seanf@swdc.stratus.com.
- echo i860-stratus-sysv4
- exit ;;
+ GUESS=i860-stratus-sysv4
+ ;;
i*86:VOS:*:*)
# From Paul.Green@stratus.com.
- echo "$UNAME_MACHINE"-stratus-vos
- exit ;;
+ GUESS=$UNAME_MACHINE-stratus-vos
+ ;;
*:VOS:*:*)
# From Paul.Green@stratus.com.
- echo hppa1.1-stratus-vos
- exit ;;
+ GUESS=hppa1.1-stratus-vos
+ ;;
mc68*:A/UX:*:*)
- echo m68k-apple-aux"$UNAME_RELEASE"
- exit ;;
+ GUESS=m68k-apple-aux$UNAME_RELEASE
+ ;;
news*:NEWS-OS:6*:*)
- echo mips-sony-newsos6
- exit ;;
+ GUESS=mips-sony-newsos6
+ ;;
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
- if [ -d /usr/nec ]; then
- echo mips-nec-sysv"$UNAME_RELEASE"
+ if test -d /usr/nec; then
+ GUESS=mips-nec-sysv$UNAME_RELEASE
else
- echo mips-unknown-sysv"$UNAME_RELEASE"
+ GUESS=mips-unknown-sysv$UNAME_RELEASE
fi
- exit ;;
+ ;;
BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
- echo powerpc-be-beos
- exit ;;
+ GUESS=powerpc-be-beos
+ ;;
BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
- echo powerpc-apple-beos
- exit ;;
+ GUESS=powerpc-apple-beos
+ ;;
BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
- echo i586-pc-beos
- exit ;;
+ GUESS=i586-pc-beos
+ ;;
BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
- echo i586-pc-haiku
- exit ;;
+ GUESS=i586-pc-haiku
+ ;;
x86_64:Haiku:*:*)
- echo x86_64-unknown-haiku
- exit ;;
+ GUESS=x86_64-unknown-haiku
+ ;;
SX-4:SUPER-UX:*:*)
- echo sx4-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx4-nec-superux$UNAME_RELEASE
+ ;;
SX-5:SUPER-UX:*:*)
- echo sx5-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx5-nec-superux$UNAME_RELEASE
+ ;;
SX-6:SUPER-UX:*:*)
- echo sx6-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx6-nec-superux$UNAME_RELEASE
+ ;;
SX-7:SUPER-UX:*:*)
- echo sx7-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx7-nec-superux$UNAME_RELEASE
+ ;;
SX-8:SUPER-UX:*:*)
- echo sx8-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx8-nec-superux$UNAME_RELEASE
+ ;;
SX-8R:SUPER-UX:*:*)
- echo sx8r-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sx8r-nec-superux$UNAME_RELEASE
+ ;;
SX-ACE:SUPER-UX:*:*)
- echo sxace-nec-superux"$UNAME_RELEASE"
- exit ;;
+ GUESS=sxace-nec-superux$UNAME_RELEASE
+ ;;
Power*:Rhapsody:*:*)
- echo powerpc-apple-rhapsody"$UNAME_RELEASE"
- exit ;;
+ GUESS=powerpc-apple-rhapsody$UNAME_RELEASE
+ ;;
*:Rhapsody:*:*)
- echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE
+ ;;
+ arm64:Darwin:*:*)
+ GUESS=aarch64-apple-darwin$UNAME_RELEASE
+ ;;
*:Darwin:*:*)
- UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- eval "$set_cc_for_build"
- if test "$UNAME_PROCESSOR" = unknown ; then
- UNAME_PROCESSOR=powerpc
+ UNAME_PROCESSOR=`uname -p`
+ case $UNAME_PROCESSOR in
+ unknown) UNAME_PROCESSOR=powerpc ;;
+ esac
+ if command -v xcode-select > /dev/null 2> /dev/null && \
+ ! xcode-select --print-path > /dev/null 2> /dev/null ; then
+ # Avoid executing cc if there is no toolchain installed as
+ # cc will be a stub that puts up a graphical alert
+ # prompting the user to install developer tools.
+ CC_FOR_BUILD=no_compiler_found
+ else
+ set_cc_for_build
fi
- if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then
- if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
- if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_64BIT_ARCH >/dev/null
- then
- case $UNAME_PROCESSOR in
- i386) UNAME_PROCESSOR=x86_64 ;;
- powerpc) UNAME_PROCESSOR=powerpc64 ;;
- esac
- fi
- # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
- if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
- (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- grep IS_PPC >/dev/null
- then
- UNAME_PROCESSOR=powerpc
- fi
+ if test "$CC_FOR_BUILD" != no_compiler_found; then
+ if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_64BIT_ARCH >/dev/null
+ then
+ case $UNAME_PROCESSOR in
+ i386) UNAME_PROCESSOR=x86_64 ;;
+ powerpc) UNAME_PROCESSOR=powerpc64 ;;
+ esac
+ fi
+ # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+ if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+ grep IS_PPC >/dev/null
+ then
+ UNAME_PROCESSOR=powerpc
fi
elif test "$UNAME_PROCESSOR" = i386 ; then
- # Avoid executing cc on OS X 10.9, as it ships with a stub
- # that puts up a graphical alert prompting to install
- # developer tools. Any system running Mac OS X 10.7 or
- # later (Darwin 11 and later) is required to have a 64-bit
- # processor. This is not true of the ARM version of Darwin
- # that Apple uses in portable devices.
- UNAME_PROCESSOR=x86_64
+ # uname -m returns i386 or x86_64
+ UNAME_PROCESSOR=$UNAME_MACHINE
fi
- echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE
+ ;;
*:procnto*:*:* | *:QNX:[0123456789]*:*)
UNAME_PROCESSOR=`uname -p`
if test "$UNAME_PROCESSOR" = x86; then
UNAME_PROCESSOR=i386
UNAME_MACHINE=pc
fi
- echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE
+ ;;
*:QNX:*:4*)
- echo i386-pc-qnx
- exit ;;
+ GUESS=i386-pc-qnx
+ ;;
NEO-*:NONSTOP_KERNEL:*:*)
- echo neo-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=neo-tandem-nsk$UNAME_RELEASE
+ ;;
NSE-*:NONSTOP_KERNEL:*:*)
- echo nse-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=nse-tandem-nsk$UNAME_RELEASE
+ ;;
NSR-*:NONSTOP_KERNEL:*:*)
- echo nsr-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=nsr-tandem-nsk$UNAME_RELEASE
+ ;;
NSV-*:NONSTOP_KERNEL:*:*)
- echo nsv-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=nsv-tandem-nsk$UNAME_RELEASE
+ ;;
NSX-*:NONSTOP_KERNEL:*:*)
- echo nsx-tandem-nsk"$UNAME_RELEASE"
- exit ;;
+ GUESS=nsx-tandem-nsk$UNAME_RELEASE
+ ;;
*:NonStop-UX:*:*)
- echo mips-compaq-nonstopux
- exit ;;
+ GUESS=mips-compaq-nonstopux
+ ;;
BS2000:POSIX*:*:*)
- echo bs2000-siemens-sysv
- exit ;;
+ GUESS=bs2000-siemens-sysv
+ ;;
DS/*:UNIX_System_V:*:*)
- echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE"
- exit ;;
+ GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE
+ ;;
*:Plan9:*:*)
# "uname -m" is not consistent, so use $cputype instead. 386
# is converted to i386 for consistency with other x86
# operating systems.
- if test "$cputype" = 386; then
+ if test "${cputype-}" = 386; then
UNAME_MACHINE=i386
- else
- UNAME_MACHINE="$cputype"
+ elif test "x${cputype-}" != x; then
+ UNAME_MACHINE=$cputype
fi
- echo "$UNAME_MACHINE"-unknown-plan9
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-plan9
+ ;;
*:TOPS-10:*:*)
- echo pdp10-unknown-tops10
- exit ;;
+ GUESS=pdp10-unknown-tops10
+ ;;
*:TENEX:*:*)
- echo pdp10-unknown-tenex
- exit ;;
+ GUESS=pdp10-unknown-tenex
+ ;;
KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
- echo pdp10-dec-tops20
- exit ;;
+ GUESS=pdp10-dec-tops20
+ ;;
XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
- echo pdp10-xkl-tops20
- exit ;;
+ GUESS=pdp10-xkl-tops20
+ ;;
*:TOPS-20:*:*)
- echo pdp10-unknown-tops20
- exit ;;
+ GUESS=pdp10-unknown-tops20
+ ;;
*:ITS:*:*)
- echo pdp10-unknown-its
- exit ;;
+ GUESS=pdp10-unknown-its
+ ;;
SEI:*:*:SEIUX)
- echo mips-sei-seiux"$UNAME_RELEASE"
- exit ;;
+ GUESS=mips-sei-seiux$UNAME_RELEASE
+ ;;
*:DragonFly:*:*)
- echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
- exit ;;
+ DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'`
+ GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL
+ ;;
*:*VMS:*:*)
UNAME_MACHINE=`(uname -p) 2>/dev/null`
- case "$UNAME_MACHINE" in
- A*) echo alpha-dec-vms ; exit ;;
- I*) echo ia64-dec-vms ; exit ;;
- V*) echo vax-dec-vms ; exit ;;
+ case $UNAME_MACHINE in
+ A*) GUESS=alpha-dec-vms ;;
+ I*) GUESS=ia64-dec-vms ;;
+ V*) GUESS=vax-dec-vms ;;
esac ;;
*:XENIX:*:SysV)
- echo i386-pc-xenix
- exit ;;
+ GUESS=i386-pc-xenix
+ ;;
i*86:skyos:*:*)
- echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`"
- exit ;;
+ SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`
+ GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL
+ ;;
i*86:rdos:*:*)
- echo "$UNAME_MACHINE"-pc-rdos
- exit ;;
- i*86:AROS:*:*)
- echo "$UNAME_MACHINE"-pc-aros
- exit ;;
+ GUESS=$UNAME_MACHINE-pc-rdos
+ ;;
+ i*86:Fiwix:*:*)
+ GUESS=$UNAME_MACHINE-pc-fiwix
+ ;;
+ *:AROS:*:*)
+ GUESS=$UNAME_MACHINE-unknown-aros
+ ;;
x86_64:VMkernel:*:*)
- echo "$UNAME_MACHINE"-unknown-esx
- exit ;;
+ GUESS=$UNAME_MACHINE-unknown-esx
+ ;;
amd64:Isilon\ OneFS:*:*)
- echo x86_64-unknown-onefs
- exit ;;
+ GUESS=x86_64-unknown-onefs
+ ;;
+ *:Unleashed:*:*)
+ GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE
+ ;;
esac
+# Do we have a guess based on uname results?
+if test "x$GUESS" != x; then
+ echo "$GUESS"
+ exit
+fi
+
+# No uname command or uname output not recognized.
+set_cc_for_build
+cat > "$dummy.c" <<EOF
+#ifdef _SEQUENT_
+#include <sys/types.h>
+#include <sys/utsname.h>
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#include <signal.h>
+#if defined(_SIZE_T_) || defined(SIGLOST)
+#include <sys/utsname.h>
+#endif
+#endif
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
+ I don't know.... */
+ printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+ printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+ "4"
+#else
+ ""
+#endif
+ ); exit (0);
+#endif
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+ int version;
+ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+ if (version < 4)
+ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+ else
+ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+ exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+ printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+ printf ("ns32k-encore-mach\n"); exit (0);
+#else
+ printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+ printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+ printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+ printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+ struct utsname un;
+
+ uname(&un);
+ if (strncmp(un.version, "V2", 2) == 0) {
+ printf ("i386-sequent-ptx2\n"); exit (0);
+ }
+ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+ printf ("i386-sequent-ptx1\n"); exit (0);
+ }
+ printf ("i386-sequent-ptx\n"); exit (0);
+#endif
+
+#if defined (vax)
+#if !defined (ultrix)
+#include <sys/param.h>
+#if defined (BSD)
+#if BSD == 43
+ printf ("vax-dec-bsd4.3\n"); exit (0);
+#else
+#if BSD == 199006
+ printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#else
+ printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#endif
+#else
+ printf ("vax-dec-bsd\n"); exit (0);
+#endif
+#else
+#if defined(_SIZE_T_) || defined(SIGLOST)
+ struct utsname un;
+ uname (&un);
+ printf ("vax-dec-ultrix%s\n", un.release); exit (0);
+#else
+ printf ("vax-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+#if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__)
+#if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__)
+#if defined(_SIZE_T_) || defined(SIGLOST)
+ struct utsname *un;
+ uname (&un);
+ printf ("mips-dec-ultrix%s\n", un.release); exit (0);
+#else
+ printf ("mips-dec-ultrix\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (alliant) && defined (i860)
+ printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+ exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` &&
+ { echo "$SYSTEM_NAME"; exit; }
+
+# Apollos put the system type in the environment.
+test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; }
+
echo "$0: unable to guess system type" >&2
-case "$UNAME_MACHINE:$UNAME_SYSTEM" in
+case $UNAME_MACHINE:$UNAME_SYSTEM in
mips:Linux | mips64:Linux)
# If we got here on MIPS GNU/Linux, output extra information.
cat >&2 <<EOF
@@ -1439,9 +1704,17 @@ This script (version $timestamp), has failed to recognize the
operating system you are using. If your script is old, overwrite *all*
copies of config.guess and config.sub with the latest versions from:
- https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+ https://git.savannah.gnu.org/cgit/config.git/plain/config.guess
and
- https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+ https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
+EOF
+
+our_year=`echo $timestamp | sed 's,-.*,,'`
+thisyear=`date +%Y`
+# shellcheck disable=SC2003
+script_age=`expr "$thisyear" - "$our_year"`
+if test "$script_age" -lt 3 ; then
+ cat >&2 <<EOF
If $0 has already been updated, send the following data and any
information you think might be pertinent to config-patches@gnu.org to
@@ -1469,11 +1742,12 @@ UNAME_RELEASE = "$UNAME_RELEASE"
UNAME_SYSTEM = "$UNAME_SYSTEM"
UNAME_VERSION = "$UNAME_VERSION"
EOF
+fi
exit 1
# Local variables:
-# eval: (add-hook 'write-file-functions 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "timestamp='"
# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'"
diff --git a/test/config.sub b/test/config.sub
index 1d8e98b..dba16e8 100755
--- a/test/config.sub
+++ b/test/config.sub
@@ -1,12 +1,14 @@
#! /bin/sh
# Configuration validation subroutine script.
-# Copyright 1992-2018 Free Software Foundation, Inc.
+# Copyright 1992-2022 Free Software Foundation, Inc.
-timestamp='2018-02-22'
+# shellcheck disable=SC2006,SC2268 # see below for rationale
+
+timestamp='2022-01-03'
# 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
-# the Free Software Foundation; either version 3 of the License, or
+# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
@@ -33,7 +35,7 @@ timestamp='2018-02-22'
# Otherwise, we print the canonical config type on stdout and succeed.
# You can get the latest version of this script from:
-# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+# https://git.savannah.gnu.org/cgit/config.git/plain/config.sub
# This file is supposed to be the same for all GNU packages
# and recognize all the CPU types, system types and aliases
@@ -50,6 +52,13 @@ timestamp='2018-02-22'
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
# It is wrong to echo any other type of specification.
+# The "shellcheck disable" line above the timestamp inhibits complaints
+# about features and limitations of the classic Bourne shell that were
+# superseded or lifted in POSIX. However, this script identifies a wide
+# variety of pre-POSIX systems that do not have POSIX shells at all, and
+# even some reasonably current systems (Solaris 10 as case-in-point) still
+# have a pre-POSIX /bin/sh.
+
me=`echo "$0" | sed -e 's,.*/,,'`
usage="\
@@ -67,7 +76,7 @@ Report bugs and patches to <config-patches@gnu.org>."
version="\
GNU config.sub ($timestamp)
-Copyright 1992-2018 Free Software Foundation, Inc.
+Copyright 1992-2022 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."
@@ -89,7 +98,7 @@ while test $# -gt 0 ; do
- ) # Use stdin as input.
break ;;
-* )
- echo "$me: invalid option $1$help"
+ echo "$me: invalid option $1$help" >&2
exit 1 ;;
*local*)
@@ -110,1223 +119,1186 @@ case $# in
exit 1;;
esac
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
- nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
- linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
- knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
- kopensolaris*-gnu* | cloudabi*-eabi* | \
- storm-chaos* | os2-emx* | rtmk-nova*)
- os=-$maybe_os
- basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
- ;;
- android-linux)
- os=-linux-android
- basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
- ;;
- *)
- basic_machine=`echo "$1" | sed 's/-[^-]*$//'`
- if [ "$basic_machine" != "$1" ]
- then os=`echo "$1" | sed 's/.*-/-/'`
- else os=; fi
- ;;
-esac
+# Split fields of configuration type
+# shellcheck disable=SC2162
+saved_IFS=$IFS
+IFS="-" read field1 field2 field3 field4 <<EOF
+$1
+EOF
+IFS=$saved_IFS
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work. We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
- -sun*os*)
- # Prevent following clause from handling this invalid input.
- ;;
- -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
- -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
- -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
- -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
- -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
- -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
- -apple | -axis | -knuth | -cray | -microblaze*)
- os=
- basic_machine=$1
- ;;
- -bluegene*)
- os=-cnk
- ;;
- -sim | -cisco | -oki | -wec | -winbond)
- os=
- basic_machine=$1
- ;;
- -scout)
- ;;
- -wrs)
- os=-vxworks
- basic_machine=$1
- ;;
- -chorusos*)
- os=-chorusos
- basic_machine=$1
- ;;
- -chorusrdb)
- os=-chorusrdb
- basic_machine=$1
- ;;
- -hiux*)
- os=-hiuxwe2
- ;;
- -sco6)
- os=-sco5v6
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco5)
- os=-sco3.2v5
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco4)
- os=-sco3.2v4
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2.[4-9]*)
- os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco3.2v[4-9]*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco5v6*)
- # Don't forget version if it is 3.2v4 or newer.
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -sco*)
- os=-sco3.2v2
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -udk*)
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -isc)
- os=-isc2.2
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -clix*)
- basic_machine=clipper-intergraph
- ;;
- -isc*)
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
- ;;
- -lynx*178)
- os=-lynxos178
- ;;
- -lynx*5)
- os=-lynxos5
+# Separate into logical components for further validation
+case $1 in
+ *-*-*-*-*)
+ echo Invalid configuration \`"$1"\': more than four components >&2
+ exit 1
;;
- -lynx*)
- os=-lynxos
+ *-*-*-*)
+ basic_machine=$field1-$field2
+ basic_os=$field3-$field4
;;
- -ptx*)
- basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'`
+ *-*-*)
+ # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
+ # parts
+ maybe_os=$field2-$field3
+ case $maybe_os 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*)
+ basic_machine=$field1
+ basic_os=$maybe_os
+ ;;
+ android-linux)
+ basic_machine=$field1-unknown
+ basic_os=linux-android
+ ;;
+ *)
+ basic_machine=$field1-$field2
+ basic_os=$field3
+ ;;
+ esac
;;
- -psos*)
- os=-psos
+ *-*)
+ # A lone config we happen to match not fitting any pattern
+ case $field1-$field2 in
+ decstation-3100)
+ basic_machine=mips-dec
+ basic_os=
+ ;;
+ *-*)
+ # Second component is usually, but not always the OS
+ case $field2 in
+ # Prevent following clause from handling this valid os
+ sun*os*)
+ basic_machine=$field1
+ basic_os=$field2
+ ;;
+ zephyr*)
+ basic_machine=$field1-unknown
+ basic_os=$field2
+ ;;
+ # Manufacturers
+ dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
+ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
+ | unicom* | ibm* | next | hp | isi* | apollo | altos* \
+ | convergent* | ncr* | news | 32* | 3600* | 3100* \
+ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
+ | ultra | tti* | harris | dolphin | highlevel | gould \
+ | cbm | ns | masscomp | apple | axis | knuth | cray \
+ | microblaze* | sim | cisco \
+ | oki | wec | wrs | winbond)
+ basic_machine=$field1-$field2
+ basic_os=
+ ;;
+ *)
+ basic_machine=$field1
+ basic_os=$field2
+ ;;
+ esac
+ ;;
+ esac
;;
- -mint | -mint[0-9]*)
- basic_machine=m68k-atari
- os=-mint
+ *)
+ # Convert single-component short-hands not valid as part of
+ # multi-component configurations.
+ case $field1 in
+ 386bsd)
+ basic_machine=i386-pc
+ basic_os=bsd
+ ;;
+ a29khif)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ adobe68k)
+ basic_machine=m68010-adobe
+ basic_os=scout
+ ;;
+ alliant)
+ basic_machine=fx80-alliant
+ basic_os=
+ ;;
+ altos | altos3068)
+ basic_machine=m68k-altos
+ basic_os=
+ ;;
+ am29k)
+ basic_machine=a29k-none
+ basic_os=bsd
+ ;;
+ amdahl)
+ basic_machine=580-amdahl
+ basic_os=sysv
+ ;;
+ amiga)
+ basic_machine=m68k-unknown
+ basic_os=
+ ;;
+ amigaos | amigados)
+ basic_machine=m68k-unknown
+ basic_os=amigaos
+ ;;
+ amigaunix | amix)
+ basic_machine=m68k-unknown
+ basic_os=sysv4
+ ;;
+ apollo68)
+ basic_machine=m68k-apollo
+ basic_os=sysv
+ ;;
+ apollo68bsd)
+ basic_machine=m68k-apollo
+ basic_os=bsd
+ ;;
+ aros)
+ basic_machine=i386-pc
+ basic_os=aros
+ ;;
+ aux)
+ basic_machine=m68k-apple
+ basic_os=aux
+ ;;
+ balance)
+ basic_machine=ns32k-sequent
+ basic_os=dynix
+ ;;
+ blackfin)
+ basic_machine=bfin-unknown
+ basic_os=linux
+ ;;
+ cegcc)
+ basic_machine=arm-unknown
+ basic_os=cegcc
+ ;;
+ convex-c1)
+ basic_machine=c1-convex
+ basic_os=bsd
+ ;;
+ convex-c2)
+ basic_machine=c2-convex
+ basic_os=bsd
+ ;;
+ convex-c32)
+ basic_machine=c32-convex
+ basic_os=bsd
+ ;;
+ convex-c34)
+ basic_machine=c34-convex
+ basic_os=bsd
+ ;;
+ convex-c38)
+ basic_machine=c38-convex
+ basic_os=bsd
+ ;;
+ cray)
+ basic_machine=j90-cray
+ basic_os=unicos
+ ;;
+ crds | unos)
+ basic_machine=m68k-crds
+ basic_os=
+ ;;
+ da30)
+ basic_machine=m68k-da30
+ basic_os=
+ ;;
+ decstation | pmax | pmin | dec3100 | decstatn)
+ basic_machine=mips-dec
+ basic_os=
+ ;;
+ delta88)
+ basic_machine=m88k-motorola
+ basic_os=sysv3
+ ;;
+ dicos)
+ basic_machine=i686-pc
+ basic_os=dicos
+ ;;
+ djgpp)
+ basic_machine=i586-pc
+ basic_os=msdosdjgpp
+ ;;
+ ebmon29k)
+ basic_machine=a29k-amd
+ basic_os=ebmon
+ ;;
+ es1800 | OSE68k | ose68k | ose | OSE)
+ basic_machine=m68k-ericsson
+ basic_os=ose
+ ;;
+ gmicro)
+ basic_machine=tron-gmicro
+ basic_os=sysv
+ ;;
+ go32)
+ basic_machine=i386-pc
+ basic_os=go32
+ ;;
+ h8300hms)
+ basic_machine=h8300-hitachi
+ basic_os=hms
+ ;;
+ h8300xray)
+ basic_machine=h8300-hitachi
+ basic_os=xray
+ ;;
+ h8500hms)
+ basic_machine=h8500-hitachi
+ basic_os=hms
+ ;;
+ harris)
+ basic_machine=m88k-harris
+ basic_os=sysv3
+ ;;
+ hp300 | hp300hpux)
+ basic_machine=m68k-hp
+ basic_os=hpux
+ ;;
+ hp300bsd)
+ basic_machine=m68k-hp
+ basic_os=bsd
+ ;;
+ hppaosf)
+ basic_machine=hppa1.1-hp
+ basic_os=osf
+ ;;
+ hppro)
+ basic_machine=hppa1.1-hp
+ basic_os=proelf
+ ;;
+ i386mach)
+ basic_machine=i386-mach
+ basic_os=mach
+ ;;
+ isi68 | isi)
+ basic_machine=m68k-isi
+ basic_os=sysv
+ ;;
+ m68knommu)
+ basic_machine=m68k-unknown
+ basic_os=linux
+ ;;
+ magnum | m3230)
+ basic_machine=mips-mips
+ basic_os=sysv
+ ;;
+ merlin)
+ basic_machine=ns32k-utek
+ basic_os=sysv
+ ;;
+ mingw64)
+ basic_machine=x86_64-pc
+ basic_os=mingw64
+ ;;
+ mingw32)
+ basic_machine=i686-pc
+ basic_os=mingw32
+ ;;
+ mingw32ce)
+ basic_machine=arm-unknown
+ basic_os=mingw32ce
+ ;;
+ monitor)
+ basic_machine=m68k-rom68k
+ basic_os=coff
+ ;;
+ morphos)
+ basic_machine=powerpc-unknown
+ basic_os=morphos
+ ;;
+ moxiebox)
+ basic_machine=moxie-unknown
+ basic_os=moxiebox
+ ;;
+ msdos)
+ basic_machine=i386-pc
+ basic_os=msdos
+ ;;
+ msys)
+ basic_machine=i686-pc
+ basic_os=msys
+ ;;
+ mvs)
+ basic_machine=i370-ibm
+ basic_os=mvs
+ ;;
+ nacl)
+ basic_machine=le32-unknown
+ basic_os=nacl
+ ;;
+ ncr3000)
+ basic_machine=i486-ncr
+ basic_os=sysv4
+ ;;
+ netbsd386)
+ basic_machine=i386-pc
+ basic_os=netbsd
+ ;;
+ netwinder)
+ basic_machine=armv4l-rebel
+ basic_os=linux
+ ;;
+ news | news700 | news800 | news900)
+ basic_machine=m68k-sony
+ basic_os=newsos
+ ;;
+ news1000)
+ basic_machine=m68030-sony
+ basic_os=newsos
+ ;;
+ necv70)
+ basic_machine=v70-nec
+ basic_os=sysv
+ ;;
+ nh3000)
+ basic_machine=m68k-harris
+ basic_os=cxux
+ ;;
+ nh[45]000)
+ basic_machine=m88k-harris
+ basic_os=cxux
+ ;;
+ nindy960)
+ basic_machine=i960-intel
+ basic_os=nindy
+ ;;
+ mon960)
+ basic_machine=i960-intel
+ basic_os=mon960
+ ;;
+ nonstopux)
+ basic_machine=mips-compaq
+ basic_os=nonstopux
+ ;;
+ os400)
+ basic_machine=powerpc-ibm
+ basic_os=os400
+ ;;
+ OSE68000 | ose68000)
+ basic_machine=m68000-ericsson
+ basic_os=ose
+ ;;
+ os68k)
+ basic_machine=m68k-none
+ basic_os=os68k
+ ;;
+ paragon)
+ basic_machine=i860-intel
+ basic_os=osf
+ ;;
+ parisc)
+ basic_machine=hppa-unknown
+ basic_os=linux
+ ;;
+ psp)
+ basic_machine=mipsallegrexel-sony
+ basic_os=psp
+ ;;
+ pw32)
+ basic_machine=i586-unknown
+ basic_os=pw32
+ ;;
+ rdos | rdos64)
+ basic_machine=x86_64-pc
+ basic_os=rdos
+ ;;
+ rdos32)
+ basic_machine=i386-pc
+ basic_os=rdos
+ ;;
+ rom68k)
+ basic_machine=m68k-rom68k
+ basic_os=coff
+ ;;
+ sa29200)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ sei)
+ basic_machine=mips-sei
+ basic_os=seiux
+ ;;
+ sequent)
+ basic_machine=i386-sequent
+ basic_os=
+ ;;
+ sps7)
+ basic_machine=m68k-bull
+ basic_os=sysv2
+ ;;
+ st2000)
+ basic_machine=m68k-tandem
+ basic_os=
+ ;;
+ stratus)
+ basic_machine=i860-stratus
+ basic_os=sysv4
+ ;;
+ sun2)
+ basic_machine=m68000-sun
+ basic_os=
+ ;;
+ sun2os3)
+ basic_machine=m68000-sun
+ basic_os=sunos3
+ ;;
+ sun2os4)
+ basic_machine=m68000-sun
+ basic_os=sunos4
+ ;;
+ sun3)
+ basic_machine=m68k-sun
+ basic_os=
+ ;;
+ sun3os3)
+ basic_machine=m68k-sun
+ basic_os=sunos3
+ ;;
+ sun3os4)
+ basic_machine=m68k-sun
+ basic_os=sunos4
+ ;;
+ sun4)
+ basic_machine=sparc-sun
+ basic_os=
+ ;;
+ sun4os3)
+ basic_machine=sparc-sun
+ basic_os=sunos3
+ ;;
+ sun4os4)
+ basic_machine=sparc-sun
+ basic_os=sunos4
+ ;;
+ sun4sol2)
+ basic_machine=sparc-sun
+ basic_os=solaris2
+ ;;
+ sun386 | sun386i | roadrunner)
+ basic_machine=i386-sun
+ basic_os=
+ ;;
+ sv1)
+ basic_machine=sv1-cray
+ basic_os=unicos
+ ;;
+ symmetry)
+ basic_machine=i386-sequent
+ basic_os=dynix
+ ;;
+ t3e)
+ basic_machine=alphaev5-cray
+ basic_os=unicos
+ ;;
+ t90)
+ basic_machine=t90-cray
+ basic_os=unicos
+ ;;
+ toad1)
+ basic_machine=pdp10-xkl
+ basic_os=tops20
+ ;;
+ tpf)
+ basic_machine=s390x-ibm
+ basic_os=tpf
+ ;;
+ udi29k)
+ basic_machine=a29k-amd
+ basic_os=udi
+ ;;
+ ultra3)
+ basic_machine=a29k-nyu
+ basic_os=sym1
+ ;;
+ v810 | necv810)
+ basic_machine=v810-nec
+ basic_os=none
+ ;;
+ vaxv)
+ basic_machine=vax-dec
+ basic_os=sysv
+ ;;
+ vms)
+ basic_machine=vax-dec
+ basic_os=vms
+ ;;
+ vsta)
+ basic_machine=i386-pc
+ basic_os=vsta
+ ;;
+ vxworks960)
+ basic_machine=i960-wrs
+ basic_os=vxworks
+ ;;
+ vxworks68)
+ basic_machine=m68k-wrs
+ basic_os=vxworks
+ ;;
+ vxworks29k)
+ basic_machine=a29k-wrs
+ basic_os=vxworks
+ ;;
+ xbox)
+ basic_machine=i686-pc
+ basic_os=mingw32
+ ;;
+ ymp)
+ basic_machine=ymp-cray
+ basic_os=unicos
+ ;;
+ *)
+ basic_machine=$1
+ basic_os=
+ ;;
+ esac
;;
esac
-# Decode aliases for certain CPU-COMPANY combinations.
+# Decode 1-component or ad-hoc basic machines
case $basic_machine in
- # Recognize the basic CPU types without company name.
- # Some are omitted here because they have special meanings below.
- 1750a | 580 \
- | a29k \
- | aarch64 | aarch64_be \
- | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- | am33_2.0 \
- | arc | arceb \
- | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
- | avr | avr32 \
- | ba \
- | be32 | be64 \
- | bfin \
- | c4x | c8051 | clipper \
- | d10v | d30v | dlx | dsp16xx \
- | e2k | epiphany \
- | fido | fr30 | frv | ft32 \
- | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- | hexagon \
- | i370 | i860 | i960 | ia16 | ia64 \
- | ip2k | iq2000 \
- | k1om \
- | le32 | le64 \
- | lm32 \
- | m32c | m32r | m32rle | m68000 | m68k | m88k \
- | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
- | mips | mipsbe | mipseb | mipsel | mipsle \
- | mips16 \
- | mips64 | mips64el \
- | mips64octeon | mips64octeonel \
- | mips64orion | mips64orionel \
- | mips64r5900 | mips64r5900el \
- | mips64vr | mips64vrel \
- | mips64vr4100 | mips64vr4100el \
- | mips64vr4300 | mips64vr4300el \
- | mips64vr5000 | mips64vr5000el \
- | mips64vr5900 | mips64vr5900el \
- | mipsisa32 | mipsisa32el \
- | mipsisa32r2 | mipsisa32r2el \
- | mipsisa32r6 | mipsisa32r6el \
- | mipsisa64 | mipsisa64el \
- | mipsisa64r2 | mipsisa64r2el \
- | mipsisa64r6 | mipsisa64r6el \
- | mipsisa64sb1 | mipsisa64sb1el \
- | mipsisa64sr71k | mipsisa64sr71kel \
- | mipsr5900 | mipsr5900el \
- | mipstx39 | mipstx39el \
- | mn10200 | mn10300 \
- | moxie \
- | mt \
- | msp430 \
- | nds32 | nds32le | nds32be \
- | nios | nios2 | nios2eb | nios2el \
- | ns16k | ns32k \
- | open8 | or1k | or1knd | or32 \
- | pdp10 | pj | pjl \
- | powerpc | powerpc64 | powerpc64le | powerpcle \
- | pru \
- | pyramid \
- | riscv32 | riscv64 \
- | rl78 | rx \
- | score \
- | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
- | sh64 | sh64le \
- | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
- | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
- | spu \
- | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
- | ubicom32 \
- | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
- | visium \
- | wasm32 \
- | x86 | xc16x | xstormy16 | xtensa \
- | z8k | z80)
- basic_machine=$basic_machine-unknown
- ;;
- c54x)
- basic_machine=tic54x-unknown
- ;;
- c55x)
- basic_machine=tic55x-unknown
- ;;
- c6x)
- basic_machine=tic6x-unknown
- ;;
- leon|leon[3-9])
- basic_machine=sparc-$basic_machine
- ;;
- m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
- basic_machine=$basic_machine-unknown
- os=-none
+ # Here we handle the default manufacturer of certain CPU types. It is in
+ # some cases the only manufacturer, in others, it is the most popular.
+ w89k)
+ cpu=hppa1.1
+ vendor=winbond
;;
- m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65)
+ op50n)
+ cpu=hppa1.1
+ vendor=oki
;;
- ms1)
- basic_machine=mt-unknown
+ op60c)
+ cpu=hppa1.1
+ vendor=oki
;;
-
- strongarm | thumb | xscale)
- basic_machine=arm-unknown
+ ibm*)
+ cpu=i370
+ vendor=ibm
;;
- xgate)
- basic_machine=$basic_machine-unknown
- os=-none
+ orion105)
+ cpu=clipper
+ vendor=highlevel
;;
- xscaleeb)
- basic_machine=armeb-unknown
+ mac | mpw | mac-mpw)
+ cpu=m68k
+ vendor=apple
;;
-
- xscaleel)
- basic_machine=armel-unknown
+ pmac | pmac-mpw)
+ cpu=powerpc
+ vendor=apple
;;
- # 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)
- basic_machine=$basic_machine-pc
- ;;
- # Object if more than one company name word.
- *-*-*)
- echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2
- exit 1
- ;;
- # Recognize the basic CPU types with company name.
- 580-* \
- | a29k-* \
- | aarch64-* | aarch64_be-* \
- | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
- | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
- | avr-* | avr32-* \
- | ba-* \
- | be32-* | be64-* \
- | bfin-* | bs2000-* \
- | c[123]* | c30-* | [cjt]90-* | c4x-* \
- | c8051-* | clipper-* | craynv-* | cydra-* \
- | d10v-* | d30v-* | dlx-* \
- | e2k-* | elxsi-* \
- | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
- | h8300-* | h8500-* \
- | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- | hexagon-* \
- | i*86-* | i860-* | i960-* | ia16-* | ia64-* \
- | ip2k-* | iq2000-* \
- | k1om-* \
- | le32-* | le64-* \
- | lm32-* \
- | m32c-* | m32r-* | m32rle-* \
- | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
- | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
- | microblaze-* | microblazeel-* \
- | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
- | mips16-* \
- | mips64-* | mips64el-* \
- | mips64octeon-* | mips64octeonel-* \
- | mips64orion-* | mips64orionel-* \
- | mips64r5900-* | mips64r5900el-* \
- | mips64vr-* | mips64vrel-* \
- | mips64vr4100-* | mips64vr4100el-* \
- | mips64vr4300-* | mips64vr4300el-* \
- | mips64vr5000-* | mips64vr5000el-* \
- | mips64vr5900-* | mips64vr5900el-* \
- | mipsisa32-* | mipsisa32el-* \
- | mipsisa32r2-* | mipsisa32r2el-* \
- | mipsisa32r6-* | mipsisa32r6el-* \
- | mipsisa64-* | mipsisa64el-* \
- | mipsisa64r2-* | mipsisa64r2el-* \
- | mipsisa64r6-* | mipsisa64r6el-* \
- | mipsisa64sb1-* | mipsisa64sb1el-* \
- | mipsisa64sr71k-* | mipsisa64sr71kel-* \
- | mipsr5900-* | mipsr5900el-* \
- | mipstx39-* | mipstx39el-* \
- | mmix-* \
- | mt-* \
- | msp430-* \
- | nds32-* | nds32le-* | nds32be-* \
- | nios-* | nios2-* | nios2eb-* | nios2el-* \
- | none-* | np1-* | ns16k-* | ns32k-* \
- | open8-* \
- | or1k*-* \
- | orion-* \
- | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
- | pru-* \
- | pyramid-* \
- | riscv32-* | riscv64-* \
- | rl78-* | romp-* | rs6000-* | rx-* \
- | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
- | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
- | sparclite-* \
- | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
- | tahoe-* \
- | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- | tile*-* \
- | tron-* \
- | ubicom32-* \
- | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
- | vax-* \
- | visium-* \
- | wasm32-* \
- | we32k-* \
- | x86-* | x86_64-* | xc16x-* | xps100-* \
- | xstormy16-* | xtensa*-* \
- | ymp-* \
- | z8k-* | z80-*)
- ;;
- # Recognize the basic CPU types without company name, with glob match.
- xtensa*)
- basic_machine=$basic_machine-unknown
- ;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
- 386bsd)
- basic_machine=i386-pc
- os=-bsd
- ;;
3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
- basic_machine=m68000-att
+ cpu=m68000
+ vendor=att
;;
3b*)
- basic_machine=we32k-att
- ;;
- a29khif)
- basic_machine=a29k-amd
- os=-udi
- ;;
- abacus)
- basic_machine=abacus-unknown
- ;;
- adobe68k)
- basic_machine=m68010-adobe
- os=-scout
- ;;
- alliant | fx80)
- basic_machine=fx80-alliant
- ;;
- altos | altos3068)
- basic_machine=m68k-altos
- ;;
- am29k)
- basic_machine=a29k-none
- os=-bsd
- ;;
- amd64)
- basic_machine=x86_64-pc
- ;;
- amd64-*)
- basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- amdahl)
- basic_machine=580-amdahl
- os=-sysv
- ;;
- amiga | amiga-*)
- basic_machine=m68k-unknown
- ;;
- amigaos | amigados)
- basic_machine=m68k-unknown
- os=-amigaos
- ;;
- amigaunix | amix)
- basic_machine=m68k-unknown
- os=-sysv4
- ;;
- apollo68)
- basic_machine=m68k-apollo
- os=-sysv
- ;;
- apollo68bsd)
- basic_machine=m68k-apollo
- os=-bsd
- ;;
- aros)
- basic_machine=i386-pc
- os=-aros
- ;;
- asmjs)
- basic_machine=asmjs-unknown
- ;;
- aux)
- basic_machine=m68k-apple
- os=-aux
- ;;
- balance)
- basic_machine=ns32k-sequent
- os=-dynix
- ;;
- blackfin)
- basic_machine=bfin-unknown
- os=-linux
- ;;
- blackfin-*)
- basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- os=-linux
+ cpu=we32k
+ vendor=att
;;
bluegene*)
- basic_machine=powerpc-ibm
- os=-cnk
- ;;
- c54x-*)
- basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- c55x-*)
- basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- c6x-*)
- basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- c90)
- basic_machine=c90-cray
- os=-unicos
- ;;
- cegcc)
- basic_machine=arm-unknown
- os=-cegcc
- ;;
- convex-c1)
- basic_machine=c1-convex
- os=-bsd
- ;;
- convex-c2)
- basic_machine=c2-convex
- os=-bsd
- ;;
- convex-c32)
- basic_machine=c32-convex
- os=-bsd
- ;;
- convex-c34)
- basic_machine=c34-convex
- os=-bsd
- ;;
- convex-c38)
- basic_machine=c38-convex
- os=-bsd
- ;;
- cray | j90)
- basic_machine=j90-cray
- os=-unicos
- ;;
- craynv)
- basic_machine=craynv-cray
- os=-unicosmp
- ;;
- cr16 | cr16-*)
- basic_machine=cr16-unknown
- os=-elf
- ;;
- crds | unos)
- basic_machine=m68k-crds
- ;;
- crisv32 | crisv32-* | etraxfs*)
- basic_machine=crisv32-axis
- ;;
- cris | cris-* | etrax*)
- basic_machine=cris-axis
- ;;
- crx)
- basic_machine=crx-unknown
- os=-elf
- ;;
- da30 | da30-*)
- basic_machine=m68k-da30
- ;;
- decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
- basic_machine=mips-dec
+ cpu=powerpc
+ vendor=ibm
+ basic_os=cnk
;;
decsystem10* | dec10*)
- basic_machine=pdp10-dec
- os=-tops10
+ cpu=pdp10
+ vendor=dec
+ basic_os=tops10
;;
decsystem20* | dec20*)
- basic_machine=pdp10-dec
- os=-tops20
+ cpu=pdp10
+ vendor=dec
+ basic_os=tops20
;;
delta | 3300 | motorola-3300 | motorola-delta \
| 3300-motorola | delta-motorola)
- basic_machine=m68k-motorola
- ;;
- delta88)
- basic_machine=m88k-motorola
- os=-sysv3
- ;;
- dicos)
- basic_machine=i686-pc
- os=-dicos
- ;;
- djgpp)
- basic_machine=i586-pc
- os=-msdosdjgpp
- ;;
- dpx20 | dpx20-*)
- basic_machine=rs6000-bull
- os=-bosx
+ cpu=m68k
+ vendor=motorola
;;
dpx2*)
- basic_machine=m68k-bull
- os=-sysv3
- ;;
- e500v[12])
- basic_machine=powerpc-unknown
- os=$os"spe"
- ;;
- e500v[12]-*)
- basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- os=$os"spe"
- ;;
- ebmon29k)
- basic_machine=a29k-amd
- os=-ebmon
- ;;
- elxsi)
- basic_machine=elxsi-elxsi
- os=-bsd
+ cpu=m68k
+ vendor=bull
+ basic_os=sysv3
;;
encore | umax | mmax)
- basic_machine=ns32k-encore
+ cpu=ns32k
+ vendor=encore
;;
- es1800 | OSE68k | ose68k | ose | OSE)
- basic_machine=m68k-ericsson
- os=-ose
+ elxsi)
+ cpu=elxsi
+ vendor=elxsi
+ basic_os=${basic_os:-bsd}
;;
fx2800)
- basic_machine=i860-alliant
+ cpu=i860
+ vendor=alliant
;;
genix)
- basic_machine=ns32k-ns
- ;;
- gmicro)
- basic_machine=tron-gmicro
- os=-sysv
- ;;
- go32)
- basic_machine=i386-pc
- os=-go32
+ cpu=ns32k
+ vendor=ns
;;
h3050r* | hiux*)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- h8300hms)
- basic_machine=h8300-hitachi
- os=-hms
- ;;
- h8300xray)
- basic_machine=h8300-hitachi
- os=-xray
- ;;
- h8500hms)
- basic_machine=h8500-hitachi
- os=-hms
- ;;
- harris)
- basic_machine=m88k-harris
- os=-sysv3
- ;;
- hp300-*)
- basic_machine=m68k-hp
- ;;
- hp300bsd)
- basic_machine=m68k-hp
- os=-bsd
- ;;
- hp300hpux)
- basic_machine=m68k-hp
- os=-hpux
+ cpu=hppa1.1
+ vendor=hitachi
+ basic_os=hiuxwe2
;;
hp3k9[0-9][0-9] | hp9[0-9][0-9])
- basic_machine=hppa1.0-hp
+ cpu=hppa1.0
+ vendor=hp
;;
hp9k2[0-9][0-9] | hp9k31[0-9])
- basic_machine=m68000-hp
+ cpu=m68000
+ vendor=hp
;;
hp9k3[2-9][0-9])
- basic_machine=m68k-hp
+ cpu=m68k
+ vendor=hp
;;
hp9k6[0-9][0-9] | hp6[0-9][0-9])
- basic_machine=hppa1.0-hp
+ cpu=hppa1.0
+ vendor=hp
;;
hp9k7[0-79][0-9] | hp7[0-79][0-9])
- basic_machine=hppa1.1-hp
+ cpu=hppa1.1
+ vendor=hp
;;
hp9k78[0-9] | hp78[0-9])
# FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
+ cpu=hppa1.1
+ vendor=hp
;;
hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
# FIXME: really hppa2.0-hp
- basic_machine=hppa1.1-hp
+ cpu=hppa1.1
+ vendor=hp
;;
hp9k8[0-9][13679] | hp8[0-9][13679])
- basic_machine=hppa1.1-hp
+ cpu=hppa1.1
+ vendor=hp
;;
hp9k8[0-9][0-9] | hp8[0-9][0-9])
- basic_machine=hppa1.0-hp
- ;;
- hppaosf)
- basic_machine=hppa1.1-hp
- os=-osf
- ;;
- hppro)
- basic_machine=hppa1.1-hp
- os=-proelf
- ;;
- i370-ibm* | ibm*)
- basic_machine=i370-ibm
+ cpu=hppa1.0
+ vendor=hp
;;
i*86v32)
- basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
- os=-sysv32
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=sysv32
;;
i*86v4*)
- basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
- os=-sysv4
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=sysv4
;;
i*86v)
- basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
- os=-sysv
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=sysv
;;
i*86sol2)
- basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
- os=-solaris2
- ;;
- i386mach)
- basic_machine=i386-mach
- os=-mach
+ cpu=`echo "$1" | sed -e 's/86.*/86/'`
+ vendor=pc
+ basic_os=solaris2
;;
- vsta)
- basic_machine=i386-unknown
- os=-vsta
+ j90 | j90-cray)
+ cpu=j90
+ vendor=cray
+ basic_os=${basic_os:-unicos}
;;
iris | iris4d)
- basic_machine=mips-sgi
- case $os in
- -irix*)
+ cpu=mips
+ vendor=sgi
+ case $basic_os in
+ irix*)
;;
*)
- os=-irix4
+ basic_os=irix4
;;
esac
;;
- isi68 | isi)
- basic_machine=m68k-isi
- os=-sysv
- ;;
- leon-*|leon[3-9]-*)
- basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'`
- ;;
- m68knommu)
- basic_machine=m68k-unknown
- os=-linux
- ;;
- m68knommu-*)
- basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- os=-linux
- ;;
- magnum | m3230)
- basic_machine=mips-mips
- os=-sysv
- ;;
- merlin)
- basic_machine=ns32k-utek
- os=-sysv
- ;;
- microblaze*)
- basic_machine=microblaze-xilinx
- ;;
- mingw64)
- basic_machine=x86_64-pc
- os=-mingw64
- ;;
- mingw32)
- basic_machine=i686-pc
- os=-mingw32
- ;;
- mingw32ce)
- basic_machine=arm-unknown
- os=-mingw32ce
- ;;
miniframe)
- basic_machine=m68000-convergent
- ;;
- *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
- basic_machine=m68k-atari
- os=-mint
- ;;
- mips3*-*)
- basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`
- ;;
- mips3*)
- basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown
- ;;
- monitor)
- basic_machine=m68k-rom68k
- os=-coff
- ;;
- morphos)
- basic_machine=powerpc-unknown
- os=-morphos
- ;;
- moxiebox)
- basic_machine=moxie-unknown
- os=-moxiebox
+ cpu=m68000
+ vendor=convergent
;;
- msdos)
- basic_machine=i386-pc
- os=-msdos
- ;;
- ms1-*)
- basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'`
- ;;
- msys)
- basic_machine=i686-pc
- os=-msys
- ;;
- mvs)
- basic_machine=i370-ibm
- os=-mvs
- ;;
- nacl)
- basic_machine=le32-unknown
- os=-nacl
- ;;
- ncr3000)
- basic_machine=i486-ncr
- os=-sysv4
- ;;
- netbsd386)
- basic_machine=i386-unknown
- os=-netbsd
- ;;
- netwinder)
- basic_machine=armv4l-rebel
- os=-linux
- ;;
- news | news700 | news800 | news900)
- basic_machine=m68k-sony
- os=-newsos
- ;;
- news1000)
- basic_machine=m68030-sony
- os=-newsos
+ *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
+ cpu=m68k
+ vendor=atari
+ basic_os=mint
;;
news-3600 | risc-news)
- basic_machine=mips-sony
- os=-newsos
- ;;
- necv70)
- basic_machine=v70-nec
- os=-sysv
+ cpu=mips
+ vendor=sony
+ basic_os=newsos
;;
next | m*-next)
- basic_machine=m68k-next
- case $os in
- -nextstep* )
+ cpu=m68k
+ vendor=next
+ case $basic_os in
+ openstep*)
+ ;;
+ nextstep*)
;;
- -ns2*)
- os=-nextstep2
+ ns2*)
+ basic_os=nextstep2
;;
*)
- os=-nextstep3
+ basic_os=nextstep3
;;
esac
;;
- nh3000)
- basic_machine=m68k-harris
- os=-cxux
- ;;
- nh[45]000)
- basic_machine=m88k-harris
- os=-cxux
- ;;
- nindy960)
- basic_machine=i960-intel
- os=-nindy
- ;;
- mon960)
- basic_machine=i960-intel
- os=-mon960
- ;;
- nonstopux)
- basic_machine=mips-compaq
- os=-nonstopux
- ;;
np1)
- basic_machine=np1-gould
- ;;
- neo-tandem)
- basic_machine=neo-tandem
- ;;
- nse-tandem)
- basic_machine=nse-tandem
- ;;
- nsr-tandem)
- basic_machine=nsr-tandem
- ;;
- nsv-tandem)
- basic_machine=nsv-tandem
- ;;
- nsx-tandem)
- basic_machine=nsx-tandem
+ cpu=np1
+ vendor=gould
;;
op50n-* | op60c-*)
- basic_machine=hppa1.1-oki
- os=-proelf
- ;;
- openrisc | openrisc-*)
- basic_machine=or32-unknown
- ;;
- os400)
- basic_machine=powerpc-ibm
- os=-os400
- ;;
- OSE68000 | ose68000)
- basic_machine=m68000-ericsson
- os=-ose
- ;;
- os68k)
- basic_machine=m68k-none
- os=-os68k
+ cpu=hppa1.1
+ vendor=oki
+ basic_os=proelf
;;
pa-hitachi)
- basic_machine=hppa1.1-hitachi
- os=-hiuxwe2
- ;;
- paragon)
- basic_machine=i860-intel
- os=-osf
- ;;
- parisc)
- basic_machine=hppa-unknown
- os=-linux
- ;;
- parisc-*)
- basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- os=-linux
+ cpu=hppa1.1
+ vendor=hitachi
+ basic_os=hiuxwe2
;;
pbd)
- basic_machine=sparc-tti
+ cpu=sparc
+ vendor=tti
;;
pbb)
- basic_machine=m68k-tti
- ;;
- pc532 | pc532-*)
- basic_machine=ns32k-pc532
- ;;
- pc98)
- basic_machine=i386-pc
+ cpu=m68k
+ vendor=tti
;;
- pc98-*)
- basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- pentium | p5 | k5 | k6 | nexgen | viac3)
- basic_machine=i586-pc
- ;;
- pentiumpro | p6 | 6x86 | athlon | athlon_*)
- basic_machine=i686-pc
- ;;
- pentiumii | pentium2 | pentiumiii | pentium3)
- basic_machine=i686-pc
- ;;
- pentium4)
- basic_machine=i786-pc
- ;;
- pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
- basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- pentiumpro-* | p6-* | 6x86-* | athlon-*)
- basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
- basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- pentium4-*)
- basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ pc532)
+ cpu=ns32k
+ vendor=pc532
;;
pn)
- basic_machine=pn-gould
- ;;
- power) basic_machine=power-ibm
- ;;
- ppc | ppcbe) basic_machine=powerpc-unknown
+ cpu=pn
+ vendor=gould
;;
- ppc-* | ppcbe-*)
- basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
- ;;
- ppcle | powerpclittle)
- basic_machine=powerpcle-unknown
+ power)
+ cpu=power
+ vendor=ibm
;;
- ppcle-* | powerpclittle-*)
- basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ ps2)
+ cpu=i386
+ vendor=ibm
;;
- ppc64) basic_machine=powerpc64-unknown
+ rm[46]00)
+ cpu=mips
+ vendor=siemens
;;
- ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ rtpc | rtpc-*)
+ cpu=romp
+ vendor=ibm
;;
- ppc64le | powerpc64little)
- basic_machine=powerpc64le-unknown
+ sde)
+ cpu=mipsisa32
+ vendor=sde
+ basic_os=${basic_os:-elf}
;;
- ppc64le-* | powerpc64little-*)
- basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ simso-wrs)
+ cpu=sparclite
+ vendor=wrs
+ basic_os=vxworks
;;
- ps2)
- basic_machine=i386-ibm
+ tower | tower-32)
+ cpu=m68k
+ vendor=ncr
;;
- pw32)
- basic_machine=i586-unknown
- os=-pw32
+ vpp*|vx|vx-*)
+ cpu=f301
+ vendor=fujitsu
;;
- rdos | rdos64)
- basic_machine=x86_64-pc
- os=-rdos
+ w65)
+ cpu=w65
+ vendor=wdc
;;
- rdos32)
- basic_machine=i386-pc
- os=-rdos
+ w89k-*)
+ cpu=hppa1.1
+ vendor=winbond
+ basic_os=proelf
;;
- rom68k)
- basic_machine=m68k-rom68k
- os=-coff
+ none)
+ cpu=none
+ vendor=none
;;
- rm[46]00)
- basic_machine=mips-siemens
+ leon|leon[3-9])
+ cpu=sparc
+ vendor=$basic_machine
;;
- rtpc | rtpc-*)
- basic_machine=romp-ibm
+ leon-*|leon[3-9]-*)
+ cpu=sparc
+ vendor=`echo "$basic_machine" | sed 's/-.*//'`
;;
- s390 | s390-*)
- basic_machine=s390-ibm
+
+ *-*)
+ # shellcheck disable=SC2162
+ saved_IFS=$IFS
+ IFS="-" read cpu vendor <<EOF
+$basic_machine
+EOF
+ IFS=$saved_IFS
;;
- s390x | s390x-*)
- basic_machine=s390x-ibm
+ # 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)
+ cpu=$basic_machine
+ vendor=pc
;;
- sa29200)
- basic_machine=a29k-amd
- os=-udi
+ # These rules are duplicated from below for sake of the special case above;
+ # i.e. things that normalized to x86 arches should also default to "pc"
+ pc98)
+ cpu=i386
+ vendor=pc
;;
- sb1)
- basic_machine=mipsisa64sb1-unknown
+ x64 | amd64)
+ cpu=x86_64
+ vendor=pc
;;
- sb1el)
- basic_machine=mipsisa64sb1el-unknown
+ # Recognize the basic CPU types without company name.
+ *)
+ cpu=$basic_machine
+ vendor=unknown
;;
- sde)
- basic_machine=mipsisa32-sde
- os=-elf
+esac
+
+unset -v basic_machine
+
+# Decode basic machines in the full and proper CPU-Company form.
+case $cpu-$vendor in
+ # Here we handle the default manufacturer of certain CPU types in canonical form. It is in
+ # some cases the only manufacturer, in others, it is the most popular.
+ craynv-unknown)
+ vendor=cray
+ basic_os=${basic_os:-unicosmp}
;;
- sei)
- basic_machine=mips-sei
- os=-seiux
+ c90-unknown | c90-cray)
+ vendor=cray
+ basic_os=${Basic_os:-unicos}
;;
- sequent)
- basic_machine=i386-sequent
+ fx80-unknown)
+ vendor=alliant
;;
- sh5el)
- basic_machine=sh5le-unknown
+ romp-unknown)
+ vendor=ibm
;;
- simso-wrs)
- basic_machine=sparclite-wrs
- os=-vxworks
+ mmix-unknown)
+ vendor=knuth
;;
- sps7)
- basic_machine=m68k-bull
- os=-sysv2
+ microblaze-unknown | microblazeel-unknown)
+ vendor=xilinx
;;
- spur)
- basic_machine=spur-unknown
+ rs6000-unknown)
+ vendor=ibm
;;
- st2000)
- basic_machine=m68k-tandem
+ vax-unknown)
+ vendor=dec
;;
- stratus)
- basic_machine=i860-stratus
- os=-sysv4
+ pdp11-unknown)
+ vendor=dec
;;
- strongarm-* | thumb-*)
- basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'`
+ we32k-unknown)
+ vendor=att
;;
- sun2)
- basic_machine=m68000-sun
+ cydra-unknown)
+ vendor=cydrome
;;
- sun2os3)
- basic_machine=m68000-sun
- os=-sunos3
+ i370-ibm*)
+ vendor=ibm
;;
- sun2os4)
- basic_machine=m68000-sun
- os=-sunos4
+ orion-unknown)
+ vendor=highlevel
;;
- sun3os3)
- basic_machine=m68k-sun
- os=-sunos3
+ xps-unknown | xps100-unknown)
+ cpu=xps100
+ vendor=honeywell
;;
- sun3os4)
- basic_machine=m68k-sun
- os=-sunos4
+
+ # Here we normalize CPU types with a missing or matching vendor
+ armh-unknown | armh-alt)
+ cpu=armv7l
+ vendor=alt
+ basic_os=${basic_os:-linux-gnueabihf}
;;
- sun4os3)
- basic_machine=sparc-sun
- os=-sunos3
+ dpx20-unknown | dpx20-bull)
+ cpu=rs6000
+ vendor=bull
+ basic_os=${basic_os:-bosx}
;;
- sun4os4)
- basic_machine=sparc-sun
- os=-sunos4
+
+ # Here we normalize CPU types irrespective of the vendor
+ amd64-*)
+ cpu=x86_64
;;
- sun4sol2)
- basic_machine=sparc-sun
- os=-solaris2
+ blackfin-*)
+ cpu=bfin
+ basic_os=linux
;;
- sun3 | sun3-*)
- basic_machine=m68k-sun
+ c54x-*)
+ cpu=tic54x
;;
- sun4)
- basic_machine=sparc-sun
+ c55x-*)
+ cpu=tic55x
;;
- sun386 | sun386i | roadrunner)
- basic_machine=i386-sun
+ c6x-*)
+ cpu=tic6x
;;
- sv1)
- basic_machine=sv1-cray
- os=-unicos
+ e500v[12]-*)
+ cpu=powerpc
+ basic_os=${basic_os}"spe"
;;
- symmetry)
- basic_machine=i386-sequent
- os=-dynix
+ mips3*-*)
+ cpu=mips64
;;
- t3e)
- basic_machine=alphaev5-cray
- os=-unicos
+ ms1-*)
+ cpu=mt
;;
- t90)
- basic_machine=t90-cray
- os=-unicos
+ m68knommu-*)
+ cpu=m68k
+ basic_os=linux
;;
- tile*)
- basic_machine=$basic_machine-unknown
- os=-linux-gnu
+ m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
+ cpu=s12z
;;
- tx39)
- basic_machine=mipstx39-unknown
+ openrisc-*)
+ cpu=or32
;;
- tx39el)
- basic_machine=mipstx39el-unknown
+ parisc-*)
+ cpu=hppa
+ basic_os=linux
;;
- toad1)
- basic_machine=pdp10-xkl
- os=-tops20
+ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+ cpu=i586
;;
- tower | tower-32)
- basic_machine=m68k-ncr
+ pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
+ cpu=i686
;;
- tpf)
- basic_machine=s390x-ibm
- os=-tpf
+ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+ cpu=i686
;;
- udi29k)
- basic_machine=a29k-amd
- os=-udi
+ pentium4-*)
+ cpu=i786
;;
- ultra3)
- basic_machine=a29k-nyu
- os=-sym1
+ pc98-*)
+ cpu=i386
;;
- v810 | necv810)
- basic_machine=v810-nec
- os=-none
+ ppc-* | ppcbe-*)
+ cpu=powerpc
;;
- vaxv)
- basic_machine=vax-dec
- os=-sysv
+ ppcle-* | powerpclittle-*)
+ cpu=powerpcle
;;
- vms)
- basic_machine=vax-dec
- os=-vms
+ ppc64-*)
+ cpu=powerpc64
;;
- vpp*|vx|vx-*)
- basic_machine=f301-fujitsu
+ ppc64le-* | powerpc64little-*)
+ cpu=powerpc64le
;;
- vxworks960)
- basic_machine=i960-wrs
- os=-vxworks
+ sb1-*)
+ cpu=mipsisa64sb1
;;
- vxworks68)
- basic_machine=m68k-wrs
- os=-vxworks
+ sb1el-*)
+ cpu=mipsisa64sb1el
;;
- vxworks29k)
- basic_machine=a29k-wrs
- os=-vxworks
+ sh5e[lb]-*)
+ cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
;;
- w65*)
- basic_machine=w65-wdc
- os=-none
+ spur-*)
+ cpu=spur
;;
- w89k-*)
- basic_machine=hppa1.1-winbond
- os=-proelf
+ strongarm-* | thumb-*)
+ cpu=arm
;;
- x64)
- basic_machine=x86_64-pc
+ tx39-*)
+ cpu=mipstx39
;;
- xbox)
- basic_machine=i686-pc
- os=-mingw32
+ tx39el-*)
+ cpu=mipstx39el
;;
- xps | xps100)
- basic_machine=xps100-honeywell
+ x64-*)
+ cpu=x86_64
;;
xscale-* | xscalee[bl]-*)
- basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'`
- ;;
- ymp)
- basic_machine=ymp-cray
- os=-unicos
+ cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
;;
- none)
- basic_machine=none-none
- os=-none
+ arm64-* | aarch64le-*)
+ cpu=aarch64
;;
-# Here we handle the default manufacturer of certain CPU types. It is in
-# some cases the only manufacturer, in others, it is the most popular.
- w89k)
- basic_machine=hppa1.1-winbond
- ;;
- op50n)
- basic_machine=hppa1.1-oki
- ;;
- op60c)
- basic_machine=hppa1.1-oki
- ;;
- romp)
- basic_machine=romp-ibm
- ;;
- mmix)
- basic_machine=mmix-knuth
+ # Recognize the canonical CPU Types that limit and/or modify the
+ # company names they are paired with.
+ cr16-*)
+ basic_os=${basic_os:-elf}
;;
- rs6000)
- basic_machine=rs6000-ibm
+ crisv32-* | etraxfs*-*)
+ cpu=crisv32
+ vendor=axis
;;
- vax)
- basic_machine=vax-dec
+ cris-* | etrax*-*)
+ cpu=cris
+ vendor=axis
;;
- pdp11)
- basic_machine=pdp11-dec
+ crx-*)
+ basic_os=${basic_os:-elf}
;;
- we32k)
- basic_machine=we32k-att
+ neo-tandem)
+ cpu=neo
+ vendor=tandem
;;
- sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
- basic_machine=sh-unknown
+ nse-tandem)
+ cpu=nse
+ vendor=tandem
;;
- cydra)
- basic_machine=cydra-cydrome
+ nsr-tandem)
+ cpu=nsr
+ vendor=tandem
;;
- orion)
- basic_machine=orion-highlevel
+ nsv-tandem)
+ cpu=nsv
+ vendor=tandem
;;
- orion105)
- basic_machine=clipper-highlevel
+ nsx-tandem)
+ cpu=nsx
+ vendor=tandem
;;
- mac | mpw | mac-mpw)
- basic_machine=m68k-apple
+ mipsallegrexel-sony)
+ cpu=mipsallegrexel
+ vendor=sony
;;
- pmac | pmac-mpw)
- basic_machine=powerpc-apple
- ;;
- *-unknown)
- # Make sure to match an already-canonicalized machine name.
+ tile*-*)
+ basic_os=${basic_os:-linux-gnu}
;;
+
*)
- echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2
- exit 1
+ # Recognize the canonical CPU types that are allowed with any
+ # company name.
+ case $cpu in
+ 1750a | 580 \
+ | a29k \
+ | aarch64 | aarch64_be \
+ | abacus \
+ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
+ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
+ | alphapca5[67] | alpha64pca5[67] \
+ | am33_2.0 \
+ | amdgcn \
+ | arc | arceb | arc32 | arc64 \
+ | arm | arm[lb]e | arme[lb] | armv* \
+ | avr | avr32 \
+ | asmjs \
+ | ba \
+ | be32 | be64 \
+ | bfin | bpf | bs2000 \
+ | c[123]* | c30 | [cjt]90 | c4x \
+ | c8051 | clipper | craynv | csky | cydra \
+ | d10v | d30v | dlx | dsp16xx \
+ | e2k | elxsi | epiphany \
+ | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
+ | h8300 | h8500 \
+ | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+ | hexagon \
+ | i370 | i*86 | i860 | i960 | ia16 | ia64 \
+ | ip2k | iq2000 \
+ | k1om \
+ | le32 | le64 \
+ | lm32 \
+ | loongarch32 | loongarch64 | loongarchx32 \
+ | m32c | m32r | m32rle \
+ | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \
+ | 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 \
+ | mmix \
+ | mn10200 | mn10300 \
+ | moxie \
+ | mt \
+ | msp430 \
+ | nds32 | nds32le | nds32be \
+ | nfp \
+ | nios | nios2 | nios2eb | nios2el \
+ | none | np1 | ns16k | ns32k | nvptx \
+ | open8 \
+ | or1k* \
+ | or32 \
+ | orion \
+ | picochip \
+ | pdp10 | pdp11 | pj | pjl | pn | power \
+ | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
+ | pru \
+ | pyramid \
+ | riscv | riscv32 | riscv32be | riscv64 | riscv64be \
+ | rl78 | romp | rs6000 | rx \
+ | s390 | s390x \
+ | score \
+ | sh | shl \
+ | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
+ | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
+ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
+ | sparclite \
+ | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
+ | spu \
+ | tahoe \
+ | thumbv7* \
+ | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
+ | tron \
+ | ubicom32 \
+ | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
+ | vax \
+ | visium \
+ | w65 \
+ | wasm32 | wasm64 \
+ | we32k \
+ | x86 | x86_64 | xc16x | xgate | xps100 \
+ | xstormy16 | xtensa* \
+ | ymp \
+ | z8k | z80)
+ ;;
+
+ *)
+ echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
+ exit 1
+ ;;
+ esac
;;
esac
# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
- *-digital*)
- basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'`
+case $vendor in
+ digital*)
+ vendor=dec
;;
- *-commodore*)
- basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'`
+ commodore*)
+ vendor=cbm
;;
*)
;;
@@ -1334,203 +1306,215 @@ esac
# Decode manufacturer-specific aliases for certain operating systems.
-if [ x"$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.
+case $basic_os in
+ gnu/linux*)
+ kernel=linux
+ os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'`
+ ;;
+ os2-emx)
+ kernel=os2
+ os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'`
+ ;;
+ nto-qnx*)
+ kernel=nto
+ os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'`
+ ;;
+ *-*)
+ # shellcheck disable=SC2162
+ saved_IFS=$IFS
+ IFS="-" read kernel os <<EOF
+$basic_os
+EOF
+ IFS=$saved_IFS
+ ;;
+ # Default OS when just kernel was specified
+ nto*)
+ kernel=nto
+ os=`echo "$basic_os" | sed -e 's|nto|qnx|'`
+ ;;
+ linux*)
+ kernel=linux
+ os=`echo "$basic_os" | sed -e 's|linux|gnu|'`
+ ;;
+ *)
+ kernel=
+ os=$basic_os
+ ;;
+esac
+
+# Now, normalize the OS (knowing we just have one component, it's not a kernel,
+# etc.)
case $os in
# First match some system type aliases that might get confused
# with valid system types.
- # -solaris* is a basic system type, with this one exception.
- -auroraux)
- os=-auroraux
+ # solaris* is a basic system type, with this one exception.
+ auroraux)
+ os=auroraux
;;
- -solaris1 | -solaris1.*)
- os=`echo $os | sed -e 's|solaris1|sunos4|'`
+ bluegene*)
+ os=cnk
;;
- -solaris)
- os=-solaris2
+ solaris1 | solaris1.*)
+ os=`echo "$os" | sed -e 's|solaris1|sunos4|'`
;;
- -unixware*)
- os=-sysv4.2uw
+ solaris)
+ os=solaris2
;;
- -gnu/linux*)
- os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+ unixware*)
+ os=sysv4.2uw
;;
# es1800 is here to avoid being matched by es* (a different OS)
- -es1800*)
- os=-ose
+ es1800*)
+ os=ose
;;
- # Now accept the basic system types.
- # The portable systems comes first.
- # Each alternative MUST end in a * to match a version number.
- # -sysv* is not here because it comes later, after sysvr4.
- -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
- | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
- | -sym* | -kopensolaris* | -plan9* \
- | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
- | -aos* | -aros* | -cloudabi* | -sortix* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \
- | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
- | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
- | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
- | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
- | -linux-newlib* | -linux-musl* | -linux-uclibc* \
- | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
- | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \
- | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
- | -morphos* | -superux* | -rtmk* | -windiss* \
- | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
- | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
- | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \
- | -midnightbsd*)
- # Remember, each alternative MUST END IN *, to match a version number.
- ;;
- -qnx*)
- case $basic_machine in
- x86-* | i*86-*)
- ;;
- *)
- os=-nto$os
- ;;
- esac
+ # Some version numbers need modification
+ chorusos*)
+ os=chorusos
;;
- -nto-qnx*)
+ isc)
+ os=isc2.2
;;
- -nto*)
- os=`echo $os | sed -e 's|nto|nto-qnx|'`
+ sco6)
+ os=sco5v6
;;
- -sim | -xray | -os68k* | -v88r* \
- | -windows* | -osx | -abug | -netware* | -os9* \
- | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+ sco5)
+ os=sco3.2v5
;;
- -mac*)
- os=`echo "$os" | sed -e 's|mac|macos|'`
+ sco4)
+ os=sco3.2v4
;;
- -linux-dietlibc)
- os=-linux-dietlibc
+ sco3.2.[4-9]*)
+ os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'`
;;
- -linux*)
- os=`echo $os | sed -e 's|linux|linux-gnu|'`
+ sco*v* | scout)
+ # Don't match below
;;
- -sunos5*)
- os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
+ sco*)
+ os=sco3.2v2
;;
- -sunos6*)
- os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
+ psos*)
+ os=psos
;;
- -opened*)
- os=-openedition
+ qnx*)
+ os=qnx
;;
- -os400*)
- os=-os400
+ hiux*)
+ os=hiuxwe2
;;
- -wince*)
- os=-wince
+ lynx*178)
+ os=lynxos178
;;
- -utek*)
- os=-bsd
+ lynx*5)
+ os=lynxos5
;;
- -dynix*)
- os=-bsd
+ lynxos*)
+ # don't get caught up in next wildcard
;;
- -acis*)
- os=-aos
+ lynx*)
+ os=lynxos
;;
- -atheos*)
- os=-atheos
+ mac[0-9]*)
+ os=`echo "$os" | sed -e 's|mac|macos|'`
;;
- -syllable*)
- os=-syllable
+ opened*)
+ os=openedition
;;
- -386bsd)
- os=-bsd
+ os400*)
+ os=os400
;;
- -ctix* | -uts*)
- os=-sysv
+ sunos5*)
+ os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
;;
- -nova*)
- os=-rtmk-nova
+ sunos6*)
+ os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
;;
- -ns2)
- os=-nextstep2
+ wince*)
+ os=wince
;;
- -nsk*)
- os=-nsk
+ utek*)
+ os=bsd
;;
- # Preserve the version number of sinix5.
- -sinix5.*)
- os=`echo $os | sed -e 's|sinix|sysv|'`
+ dynix*)
+ os=bsd
;;
- -sinix*)
- os=-sysv4
+ acis*)
+ os=aos
;;
- -tpf*)
- os=-tpf
+ atheos*)
+ os=atheos
;;
- -triton*)
- os=-sysv3
+ syllable*)
+ os=syllable
+ ;;
+ 386bsd)
+ os=bsd
+ ;;
+ ctix* | uts*)
+ os=sysv
+ ;;
+ nova*)
+ os=rtmk-nova
+ ;;
+ ns2)
+ os=nextstep2
+ ;;
+ # Preserve the version number of sinix5.
+ sinix5.*)
+ os=`echo "$os" | sed -e 's|sinix|sysv|'`
;;
- -oss*)
- os=-sysv3
+ sinix*)
+ os=sysv4
;;
- -svr4*)
- os=-sysv4
+ tpf*)
+ os=tpf
;;
- -svr3)
- os=-sysv3
+ triton*)
+ os=sysv3
;;
- -sysvr4)
- os=-sysv4
+ oss*)
+ os=sysv3
;;
- # This must come after -sysvr4.
- -sysv*)
+ svr4*)
+ os=sysv4
;;
- -ose*)
- os=-ose
+ svr3)
+ os=sysv3
;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
- os=-mint
+ sysvr4)
+ os=sysv4
;;
- -zvmoe)
- os=-zvmoe
+ ose*)
+ os=ose
;;
- -dicos*)
- os=-dicos
+ *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
+ os=mint
;;
- -pikeos*)
+ dicos*)
+ os=dicos
+ ;;
+ pikeos*)
# Until real need of OS specific support for
# particular features comes up, bare metal
# configurations are quite functional.
- case $basic_machine in
+ case $cpu in
arm*)
- os=-eabi
+ os=eabi
;;
*)
- os=-elf
+ os=elf
;;
esac
;;
- -nacl*)
- ;;
- -ios)
- ;;
- -none)
- ;;
*)
- # Get rid of the `-' at the beginning of $os.
- os=`echo $os | sed 's/[^-]*-//'`
- echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2
- exit 1
+ # No normalization, but not necessarily accepted, that comes below.
;;
esac
+
else
# Here we handle the default operating systems that come with various machines.
@@ -1543,258 +1527,363 @@ else
# will signal an error saying that MANUFACTURER isn't an operating
# system, and we'll never get to this point.
-case $basic_machine in
+kernel=
+case $cpu-$vendor in
score-*)
- os=-elf
+ os=elf
;;
spu-*)
- os=-elf
+ os=elf
;;
*-acorn)
- os=-riscix1.2
+ os=riscix1.2
;;
arm*-rebel)
- os=-linux
+ kernel=linux
+ os=gnu
;;
arm*-semi)
- os=-aout
+ os=aout
;;
c4x-* | tic4x-*)
- os=-coff
+ os=coff
;;
c8051-*)
- os=-elf
+ os=elf
+ ;;
+ clipper-intergraph)
+ os=clix
;;
hexagon-*)
- os=-elf
+ os=elf
;;
tic54x-*)
- os=-coff
+ os=coff
;;
tic55x-*)
- os=-coff
+ os=coff
;;
tic6x-*)
- os=-coff
+ os=coff
;;
# This must come before the *-dec entry.
pdp10-*)
- os=-tops20
+ os=tops20
;;
pdp11-*)
- os=-none
+ os=none
;;
*-dec | vax-*)
- os=-ultrix4.2
+ os=ultrix4.2
;;
m68*-apollo)
- os=-domain
+ os=domain
;;
i386-sun)
- os=-sunos4.0.2
+ os=sunos4.0.2
;;
m68000-sun)
- os=-sunos3
+ os=sunos3
;;
m68*-cisco)
- os=-aout
+ os=aout
;;
mep-*)
- os=-elf
+ os=elf
;;
mips*-cisco)
- os=-elf
+ os=elf
;;
mips*-*)
- os=-elf
+ os=elf
;;
or32-*)
- os=-coff
+ os=coff
;;
*-tti) # must be before sparc entry or we get the wrong os.
- os=-sysv3
+ os=sysv3
;;
sparc-* | *-sun)
- os=-sunos4.1.1
+ os=sunos4.1.1
;;
pru-*)
- os=-elf
+ os=elf
;;
*-be)
- os=-beos
+ os=beos
;;
*-ibm)
- os=-aix
+ os=aix
;;
*-knuth)
- os=-mmixware
+ os=mmixware
;;
*-wec)
- os=-proelf
+ os=proelf
;;
*-winbond)
- os=-proelf
+ os=proelf
;;
*-oki)
- os=-proelf
+ os=proelf
;;
*-hp)
- os=-hpux
+ os=hpux
;;
*-hitachi)
- os=-hiux
+ os=hiux
;;
i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
- os=-sysv
+ os=sysv
;;
*-cbm)
- os=-amigaos
+ os=amigaos
;;
*-dg)
- os=-dgux
+ os=dgux
;;
*-dolphin)
- os=-sysv3
+ os=sysv3
;;
m68k-ccur)
- os=-rtu
+ os=rtu
;;
m88k-omron*)
- os=-luna
+ os=luna
;;
*-next)
- os=-nextstep
+ os=nextstep
;;
*-sequent)
- os=-ptx
+ os=ptx
;;
*-crds)
- os=-unos
+ os=unos
;;
*-ns)
- os=-genix
+ os=genix
;;
i370-*)
- os=-mvs
+ os=mvs
;;
*-gould)
- os=-sysv
+ os=sysv
;;
*-highlevel)
- os=-bsd
+ os=bsd
;;
*-encore)
- os=-bsd
+ os=bsd
;;
*-sgi)
- os=-irix
+ os=irix
;;
*-siemens)
- os=-sysv4
+ os=sysv4
;;
*-masscomp)
- os=-rtu
+ os=rtu
;;
f30[01]-fujitsu | f700-fujitsu)
- os=-uxpv
+ os=uxpv
;;
*-rom68k)
- os=-coff
+ os=coff
;;
*-*bug)
- os=-coff
+ os=coff
;;
*-apple)
- os=-macos
+ os=macos
;;
*-atari*)
- os=-mint
+ os=mint
+ ;;
+ *-wrs)
+ os=vxworks
;;
*)
- os=-none
+ os=none
;;
esac
+
fi
+# Now, validate our (potentially fixed-up) OS.
+case $os in
+ # Sometimes we do "kernel-libc", so those need to count as OSes.
+ musl* | newlib* | relibc* | uclibc*)
+ ;;
+ # Likewise for "kernel-abi"
+ eabi* | gnueabi*)
+ ;;
+ # VxWorks passes extra cpu info in the 4th filed.
+ simlinux | simwindows | spe)
+ ;;
+ # Now accept the basic system types.
+ # The portable systems comes first.
+ # Each alternative MUST end in a * to match a version number.
+ gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
+ | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \
+ | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
+ | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \
+ | hiux* | abug | nacl* | netware* | windows* \
+ | os9* | macos* | osx* | ios* \
+ | mpw* | magic* | mmixware* | mon960* | lnews* \
+ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
+ | aos* | aros* | cloudabi* | sortix* | twizzler* \
+ | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
+ | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
+ | 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* \
+ | udi* | lites* | ieee* | go32* | aux* | hcos* \
+ | chorusrdb* | cegcc* | glidix* | serenity* \
+ | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
+ | midipix* | mingw32* | mingw64* | mint* \
+ | uxpv* | beos* | mpeix* | udk* | moxiebox* \
+ | interix* | uwin* | mks* | rhapsody* | darwin* \
+ | openstep* | oskit* | conix* | pw32* | nonstopux* \
+ | storm-chaos* | tops10* | tenex* | tops20* | its* \
+ | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \
+ | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \
+ | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
+ | skyos* | haiku* | rdos* | toppers* | drops* | es* \
+ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
+ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \
+ | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \
+ | fiwix* )
+ ;;
+ # 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.
+ ;;
+ none)
+ ;;
+ *)
+ echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 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* )
+ ;;
+ uclinux-uclibc* )
+ ;;
+ -dietlibc* | -newlib* | -musl* | -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
+ exit 1
+ ;;
+ kfreebsd*-gnu* | kopensolaris*-gnu*)
+ ;;
+ vxworks-simlinux | vxworks-simwindows | vxworks-spe)
+ ;;
+ nto-qnx*)
+ ;;
+ os2-emx)
+ ;;
+ *-eabi* | *-gnueabi*)
+ ;;
+ -*)
+ # Blank kernel with real OS is always fine.
+ ;;
+ *-*)
+ echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2
+ exit 1
+ ;;
+esac
+
# Here we handle the case where we know the os, and the CPU type, but not the
# manufacturer. We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
- *-unknown)
- case $os in
- -riscix*)
+case $vendor in
+ unknown)
+ case $cpu-$os in
+ *-riscix*)
vendor=acorn
;;
- -sunos*)
+ *-sunos*)
vendor=sun
;;
- -cnk*|-aix*)
+ *-cnk* | *-aix*)
vendor=ibm
;;
- -beos*)
+ *-beos*)
vendor=be
;;
- -hpux*)
+ *-hpux*)
vendor=hp
;;
- -mpeix*)
+ *-mpeix*)
vendor=hp
;;
- -hiux*)
+ *-hiux*)
vendor=hitachi
;;
- -unos*)
+ *-unos*)
vendor=crds
;;
- -dgux*)
+ *-dgux*)
vendor=dg
;;
- -luna*)
+ *-luna*)
vendor=omron
;;
- -genix*)
+ *-genix*)
vendor=ns
;;
- -mvs* | -opened*)
+ *-clix*)
+ vendor=intergraph
+ ;;
+ *-mvs* | *-opened*)
+ vendor=ibm
+ ;;
+ *-os400*)
vendor=ibm
;;
- -os400*)
+ s390-* | s390x-*)
vendor=ibm
;;
- -ptx*)
+ *-ptx*)
vendor=sequent
;;
- -tpf*)
+ *-tpf*)
vendor=ibm
;;
- -vxsim* | -vxworks* | -windiss*)
+ *-vxsim* | *-vxworks* | *-windiss*)
vendor=wrs
;;
- -aux*)
+ *-aux*)
vendor=apple
;;
- -hms*)
+ *-hms*)
vendor=hitachi
;;
- -mpw* | -macos*)
+ *-mpw* | *-macos*)
vendor=apple
;;
- -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+ *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*)
vendor=atari
;;
- -vos*)
+ *-vos*)
vendor=stratus
;;
esac
- basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"`
;;
esac
-echo "$basic_machine$os"
+echo "$cpu-$vendor-${kernel:+$kernel-}$os"
exit
# Local variables:
-# eval: (add-hook 'write-file-functions 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
# time-stamp-start: "timestamp='"
# time-stamp-format: "%:y-%02m-%02d"
# time-stamp-end: "'"
diff --git a/test/configure b/test/configure
index b9259e2..256925c 100755
--- a/test/configure
+++ b/test/configure
@@ -676,8 +676,10 @@ CODE_COVERAGE_ENABLED_FALSE
CODE_COVERAGE_ENABLED_TRUE
PTHREAD_CFLAGS
PTHREAD_LIBS
+PTHREAD_CXX
PTHREAD_CC
ax_pthread_config
+CPP
LIBTOOL_DEPS
CXXCPP
LT_SYS_LIBRARY_PATH
@@ -692,6 +694,7 @@ ac_ct_AR
AR
DLLTOOL
OBJDUMP
+FILECMD
LN_S
NM
ac_ct_DUMPBIN
@@ -831,7 +834,8 @@ CCC
CC
CFLAGS
LT_SYS_LIBRARY_PATH
-CXXCPP'
+CXXCPP
+CPP'
# Initialize some variables set by options.
@@ -1498,6 +1502,7 @@ Some influential environment variables:
LT_SYS_LIBRARY_PATH
User-defined run-time library search path.
CXXCPP C++ preprocessor
+ CPP C preprocessor
Use these variables to override the choices made by `configure' or to help
it to find libraries and programs with nonstandard names/locations.
@@ -1885,6 +1890,44 @@ fi
} # ac_fn_cxx_try_link
+# 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_c_try_run LINENO
# ----------------------
# Try to run conftest.$ac_ext, and return whether this succeeded. Assumes that
@@ -4119,11 +4162,11 @@ if test x$ac_prog_cxx_stdcxx = xno
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5
printf %s "checking for $CXX option to enable C++11 features... " >&6; }
-if test ${ac_cv_prog_cxx_11+y}
+if test ${ac_cv_prog_cxx_cxx11+y}
then :
printf %s "(cached) " >&6
else $as_nop
- ac_cv_prog_cxx_11=no
+ ac_cv_prog_cxx_cxx11=no
ac_save_CXX=$CXX
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -4165,11 +4208,11 @@ if test x$ac_prog_cxx_stdcxx = xno
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5
printf %s "checking for $CXX option to enable C++98 features... " >&6; }
-if test ${ac_cv_prog_cxx_98+y}
+if test ${ac_cv_prog_cxx_cxx98+y}
then :
printf %s "(cached) " >&6
else $as_nop
- ac_cv_prog_cxx_98=no
+ ac_cv_prog_cxx_cxx98=no
ac_save_CXX=$CXX
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -4408,144 +4451,323 @@ fi
- ax_cxx_compile_cxx11_required=true
+ ax_cxx_compile_alternatives="11 0x" ax_cxx_compile_cxx11_required=true
ac_ext=cpp
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
ac_success=no
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features by default" >&5
-printf %s "checking whether $CXX supports C++11 features by default... " >&6; }
-if test ${ax_cv_cxx_compile_cxx11+y}
+
+
+
+
+
+ if test x$ac_success = xno; then
+ for alternative in ${ax_cxx_compile_alternatives}; do
+ for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do
+ cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh`
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5
+printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; }
+if eval test \${$cachevar+y}
then :
printf %s "(cached) " >&6
else $as_nop
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ ac_save_CXX="$CXX"
+ CXX="$CXX $switch"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
- template <typename T>
+
+// If the compiler admits that it is not ready for C++11, why torture it?
+// Hopefully, this will speed up the test.
+
+#ifndef __cplusplus
+
+#error "This is not a C++ compiler"
+
+// MSVC always sets __cplusplus to 199711L in older versions; newer versions
+// only set it correctly if /Zc:__cplusplus is specified as well as a
+// /std:c++NN switch:
+// https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
+#elif __cplusplus < 201103L && !defined _MSC_VER
+
+#error "This is not a C++11 compiler"
+
+#else
+
+namespace cxx11
+{
+
+ namespace test_static_assert
+ {
+
+ template <typename T>
struct check
{
static_assert(sizeof(int) <= sizeof(T), "not big enough");
};
- struct Base {
- virtual void f() {}
+ }
+
+ namespace test_final_override
+ {
+
+ struct Base
+ {
+ virtual ~Base() {}
+ virtual void f() {}
};
- struct Child : public Base {
- virtual void f() override {}
+
+ struct Derived : public Base
+ {
+ virtual ~Derived() override {}
+ virtual void f() override {}
};
- typedef check<check<bool>> right_angle_brackets;
+ }
- int a;
- decltype(a) b;
+ namespace test_double_right_angle_brackets
+ {
- typedef check<int> check_type;
- check_type c;
- check_type&& cr = static_cast<check_type&&>(c);
+ template < typename T >
+ struct check {};
- auto d = a;
- auto l = [](){};
+ typedef check<void> single_type;
+ typedef check<check<void>> double_type;
+ typedef check<check<check<void>>> triple_type;
+ typedef check<check<check<check<void>>>> quadruple_type;
- // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
- // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function because of this
- namespace test_template_alias_sfinae {
- struct foo {};
+ }
- template<typename T>
- using member = typename T::member_type;
+ namespace test_decltype
+ {
- template<typename T>
- void func(...) {}
+ int
+ f()
+ {
+ int a = 1;
+ decltype(a) b = 2;
+ return a + b;
+ }
- template<typename T>
- void func(member<T>*) {}
+ }
- void test();
+ namespace test_type_deduction
+ {
- void test() {
- func<foo>(0);
- }
+ template < typename T1, typename T2 >
+ struct is_same
+ {
+ static const bool value = false;
+ };
+
+ template < typename T >
+ struct is_same<T, T>
+ {
+ static const bool value = true;
+ };
+
+ template < typename T1, typename T2 >
+ auto
+ add(T1 a1, T2 a2) -> decltype(a1 + a2)
+ {
+ return a1 + a2;
}
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"
-then :
- ax_cv_cxx_compile_cxx11=yes
-else $as_nop
- ax_cv_cxx_compile_cxx11=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_cxx_compile_cxx11" >&5
-printf "%s\n" "$ax_cv_cxx_compile_cxx11" >&6; }
- if test x$ax_cv_cxx_compile_cxx11 = xyes; then
- ac_success=yes
- fi
+ int
+ test(const int c, volatile int v)
+ {
+ static_assert(is_same<int, decltype(0)>::value == true, "");
+ static_assert(is_same<int, decltype(c)>::value == false, "");
+ static_assert(is_same<int, decltype(v)>::value == false, "");
+ auto ac = c;
+ auto av = v;
+ auto sumi = ac + av + 'x';
+ auto sumf = ac + av + 1.0;
+ static_assert(is_same<int, decltype(ac)>::value == true, "");
+ static_assert(is_same<int, decltype(av)>::value == true, "");
+ static_assert(is_same<int, decltype(sumi)>::value == true, "");
+ static_assert(is_same<int, decltype(sumf)>::value == false, "");
+ static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
+ return (sumf > 0.0) ? sumi : add(c, v);
+ }
+ }
+ namespace test_noexcept
+ {
- if test x$ac_success = xno; then
- for switch in -std=c++11 -std=c++0x; do
- cachevar=`printf "%s\n" "ax_cv_cxx_compile_cxx11_$switch" | $as_tr_sh`
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CXX supports C++11 features with $switch" >&5
-printf %s "checking whether $CXX supports C++11 features with $switch... " >&6; }
-if eval test \${$cachevar+y}
-then :
- printf %s "(cached) " >&6
-else $as_nop
- ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS="$CXXFLAGS $switch"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
+ int f() { return 0; }
+ int g() noexcept { return 0; }
- template <typename T>
- struct check
+ static_assert(noexcept(f()) == false, "");
+ static_assert(noexcept(g()) == true, "");
+
+ }
+
+ namespace test_constexpr
+ {
+
+ template < typename CharT >
+ unsigned long constexpr
+ strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
{
- static_assert(sizeof(int) <= sizeof(T), "not big enough");
+ return *s ? strlen_c_r(s + 1, acc + 1) : acc;
+ }
+
+ template < typename CharT >
+ unsigned long constexpr
+ strlen_c(const CharT *const s) noexcept
+ {
+ return strlen_c_r(s, 0UL);
+ }
+
+ static_assert(strlen_c("") == 0UL, "");
+ static_assert(strlen_c("1") == 1UL, "");
+ static_assert(strlen_c("example") == 7UL, "");
+ static_assert(strlen_c("another\0example") == 7UL, "");
+
+ }
+
+ namespace test_rvalue_references
+ {
+
+ template < int N >
+ struct answer
+ {
+ static constexpr int value = N;
};
- struct Base {
- virtual void f() {}
+ answer<1> f(int&) { return answer<1>(); }
+ answer<2> f(const int&) { return answer<2>(); }
+ answer<3> f(int&&) { return answer<3>(); }
+
+ void
+ test()
+ {
+ int i = 0;
+ const int c = 0;
+ static_assert(decltype(f(i))::value == 1, "");
+ static_assert(decltype(f(c))::value == 2, "");
+ static_assert(decltype(f(0))::value == 3, "");
+ }
+
+ }
+
+ namespace test_uniform_initialization
+ {
+
+ struct test
+ {
+ static const int zero {};
+ static const int one {1};
};
- struct Child : public Base {
- virtual void f() override {}
+
+ static_assert(test::zero == 0, "");
+ static_assert(test::one == 1, "");
+
+ }
+
+ namespace test_lambdas
+ {
+
+ void
+ test1()
+ {
+ auto lambda1 = [](){};
+ auto lambda2 = lambda1;
+ lambda1();
+ lambda2();
+ }
+
+ int
+ test2()
+ {
+ auto a = [](int i, int j){ return i + j; }(1, 2);
+ auto b = []() -> int { return '0'; }();
+ auto c = [=](){ return a + b; }();
+ auto d = [&](){ return c; }();
+ auto e = [a, &b](int x) mutable {
+ const auto identity = [](int y){ return y; };
+ for (auto i = 0; i < a; ++i)
+ a += b--;
+ return x + identity(a + b);
+ }(0);
+ return a + b + c + d + e;
+ }
+
+ int
+ test3()
+ {
+ const auto nullary = [](){ return 0; };
+ const auto unary = [](int x){ return x; };
+ using nullary_t = decltype(nullary);
+ using unary_t = decltype(unary);
+ const auto higher1st = [](nullary_t f){ return f(); };
+ const auto higher2nd = [unary](nullary_t f1){
+ return [unary, f1](unary_t f2){ return f2(unary(f1())); };
+ };
+ return higher1st(nullary) + higher2nd(nullary)(unary);
+ }
+
+ }
+
+ namespace test_variadic_templates
+ {
+
+ template <int...>
+ struct sum;
+
+ template <int N0, int... N1toN>
+ struct sum<N0, N1toN...>
+ {
+ static constexpr auto value = N0 + sum<N1toN...>::value;
};
- typedef check<check<bool>> right_angle_brackets;
+ template <>
+ struct sum<>
+ {
+ static constexpr auto value = 0;
+ };
- int a;
- decltype(a) b;
+ static_assert(sum<>::value == 0, "");
+ static_assert(sum<1>::value == 1, "");
+ static_assert(sum<23>::value == 23, "");
+ static_assert(sum<1, 2>::value == 3, "");
+ static_assert(sum<5, 5, 11>::value == 21, "");
+ static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
- typedef check<int> check_type;
- check_type c;
- check_type&& cr = static_cast<check_type&&>(c);
+ }
- auto d = a;
- auto l = [](){};
+ // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
+ // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
+ // because of this.
+ namespace test_template_alias_sfinae
+ {
- // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
- // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function because of this
- namespace test_template_alias_sfinae {
- struct foo {};
+ struct foo {};
- template<typename T>
- using member = typename T::member_type;
+ template<typename T>
+ using member = typename T::member_type;
- template<typename T>
- void func(...) {}
+ template<typename T>
+ void func(...) {}
- template<typename T>
- void func(member<T>*) {}
+ template<typename T>
+ void func(member<T>*) {}
+
+ void test();
+
+ void test() { func<foo>(0); }
+
+ }
+
+} // namespace cxx11
+
+#endif // __cplusplus >= 201103L
- void test();
- void test() {
- func<foo>(0);
- }
- }
_ACEOF
if ac_fn_cxx_try_compile "$LINENO"
@@ -4555,14 +4777,21 @@ else $as_nop
eval $cachevar=no
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
- CXXFLAGS="$ac_save_CXXFLAGS"
+ CXX="$ac_save_CXX"
fi
eval ac_res=\$$cachevar
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
printf "%s\n" "$ac_res" >&6; }
- if eval test x\$$cachevar = xyes; then
- CXXFLAGS="$CXXFLAGS $switch"
- ac_success=yes
+ if eval test x\$$cachevar = xyes; then
+ CXX="$CXX $switch"
+ if test -n "$CXXCPP" ; then
+ CXXCPP="$CXXCPP $switch"
+ fi
+ ac_success=yes
+ break
+ fi
+ done
+ if test x$ac_success = xyes; then
break
fi
done
@@ -4577,21 +4806,19 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
if test x$ac_success = xno; then
as_fn_error $? "*** A compiler with support for C++11 language features is required." "$LINENO" 5
fi
- else
- if test x$ac_success = xno; then
- HAVE_CXX11=0
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5
+ fi
+ if test x$ac_success = xno; then
+ HAVE_CXX11=0
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: No compiler with C++11 support was found" >&5
printf "%s\n" "$as_me: No compiler with C++11 support was found" >&6;}
- else
- HAVE_CXX11=1
+ else
+ HAVE_CXX11=1
printf "%s\n" "#define HAVE_CXX11 1" >>confdefs.h
- fi
-
-
fi
+
case `pwd` in
*\ * | *\ *)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
@@ -4600,8 +4827,8 @@ esac
-macro_version='2.4.6'
-macro_revision='2.4.6'
+macro_version='2.4.7'
+macro_revision='2.4.7'
@@ -6159,13 +6386,13 @@ else
mingw*) lt_bad_file=conftest.nm/nofile ;;
*) lt_bad_file=/dev/null ;;
esac
- case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in
+ case `"$tmp_nm" -B $lt_bad_file 2>&1 | $SED '1q'` in
*$lt_bad_file* | *'Invalid file or object type'*)
lt_cv_path_NM="$tmp_nm -B"
break 2
;;
*)
- case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
+ case `"$tmp_nm" -p /dev/null 2>&1 | $SED '1q'` in
*/dev/null*)
lt_cv_path_NM="$tmp_nm -p"
break 2
@@ -6303,7 +6530,7 @@ esac
fi
fi
- case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in
+ case `$DUMPBIN -symbols -headers /dev/null 2>&1 | $SED '1q'` in
*COFF*)
DUMPBIN="$DUMPBIN -symbols -headers"
;;
@@ -6407,7 +6634,7 @@ else $as_nop
lt_cv_sys_max_cmd_len=8192;
;;
- bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*)
+ bitrig* | darwin* | dragonfly* | freebsd* | midnightbsd* | netbsd* | openbsd*)
# This has been around since 386BSD, at least. Likely further.
if test -x /sbin/sysctl; then
lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
@@ -6450,7 +6677,7 @@ else $as_nop
sysv5* | sco5v6* | sysv4.2uw2*)
kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
if test -n "$kargmax"; then
- lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
+ lt_cv_sys_max_cmd_len=`echo $kargmax | $SED 's/.*[ ]//'`
else
lt_cv_sys_max_cmd_len=32768
fi
@@ -6656,6 +6883,114 @@ esac
if test -n "$ac_tool_prefix"; then
+ # Extract the first word of "${ac_tool_prefix}file", so it can be a program name with args.
+set dummy ${ac_tool_prefix}file; 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_FILECMD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$FILECMD"; then
+ ac_cv_prog_FILECMD="$FILECMD" # 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_FILECMD="${ac_tool_prefix}file"
+ 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
+FILECMD=$ac_cv_prog_FILECMD
+if test -n "$FILECMD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $FILECMD" >&5
+printf "%s\n" "$FILECMD" >&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_FILECMD"; then
+ ac_ct_FILECMD=$FILECMD
+ # Extract the first word of "file", so it can be a program name with args.
+set dummy file; 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_FILECMD+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$ac_ct_FILECMD"; then
+ ac_cv_prog_ac_ct_FILECMD="$ac_ct_FILECMD" # 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_FILECMD="file"
+ 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_FILECMD=$ac_cv_prog_ac_ct_FILECMD
+if test -n "$ac_ct_FILECMD"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_FILECMD" >&5
+printf "%s\n" "$ac_ct_FILECMD" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+ if test "x$ac_ct_FILECMD" = x; then
+ FILECMD=":"
+ 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
+ FILECMD=$ac_ct_FILECMD
+ fi
+else
+ FILECMD="$ac_cv_prog_FILECMD"
+fi
+
+
+
+
+
+
+
+if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
set dummy ${ac_tool_prefix}objdump; ac_word=$2
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -6798,7 +7133,7 @@ beos*)
bsdi[45]*)
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
- lt_cv_file_magic_cmd='/usr/bin/file -L'
+ lt_cv_file_magic_cmd='$FILECMD -L'
lt_cv_file_magic_test_file=/shlib/libc.so
;;
@@ -6832,14 +7167,14 @@ darwin* | rhapsody*)
lt_cv_deplibs_check_method=pass_all
;;
-freebsd* | dragonfly*)
+freebsd* | dragonfly* | midnightbsd*)
if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
case $host_cpu in
i*86 )
# Not sure whether the presence of OpenBSD here was a mistake.
# Let's accept both of them until this is cleared up.
lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
- lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_cmd=$FILECMD
lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
;;
esac
@@ -6853,7 +7188,7 @@ haiku*)
;;
hpux10.20* | hpux11*)
- lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_cmd=$FILECMD
case $host_cpu in
ia64*)
lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
@@ -6900,7 +7235,7 @@ netbsd* | netbsdelf*-gnu)
newos6*)
lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
- lt_cv_file_magic_cmd=/usr/bin/file
+ lt_cv_file_magic_cmd=$FILECMD
lt_cv_file_magic_test_file=/usr/lib/libnls.so
;;
@@ -7274,13 +7609,29 @@ esac
fi
: ${AR=ar}
-: ${AR_FLAGS=cr}
+# Use ARFLAGS variable as AR's operation code to sync the variable naming with
+# Automake. If both AR_FLAGS and ARFLAGS are specified, AR_FLAGS should have
+# higher priority because thats what people were doing historically (setting
+# ARFLAGS for automake and AR_FLAGS for libtool). FIXME: Make the AR_FLAGS
+# variable obsoleted/removed.
+
+test ${AR_FLAGS+y} || AR_FLAGS=${ARFLAGS-cr}
+lt_ar_flags=$AR_FLAGS
+
+
+
+
+
+
+# Make AR_FLAGS overridable by 'make ARFLAGS='. Don't try to run-time override
+# by AR_FLAGS because that was never working and AR_FLAGS is about to die.
+
@@ -7697,7 +8048,7 @@ esac
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
# Gets list of data symbols to import.
- lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'"
+ lt_cv_sys_global_symbol_to_import="$SED -n -e 's/^I .* \(.*\)$/\1/p'"
# Adjust the below global symbol transforms to fixup imported variables.
lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'"
lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'"
@@ -7715,20 +8066,20 @@ fi
# Transform an extracted symbol line into a proper C declaration.
# Some systems (esp. on ia64) link data and code symbols differently,
# so use this general approach.
-lt_cv_sys_global_symbol_to_cdecl="sed -n"\
+lt_cv_sys_global_symbol_to_cdecl="$SED -n"\
$lt_cdecl_hook\
" -e 's/^T .* \(.*\)$/extern int \1();/p'"\
" -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'"
# Transform an extracted symbol line into symbol name and symbol address
-lt_cv_sys_global_symbol_to_c_name_address="sed -n"\
+lt_cv_sys_global_symbol_to_c_name_address="$SED -n"\
$lt_c_name_hook\
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
" -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'"
# Transform an extracted symbol line into symbol name with lib prefix and
# symbol address.
-lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\
+lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="$SED -n"\
$lt_c_name_lib_hook\
" -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\
" -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\
@@ -7752,7 +8103,7 @@ for ac_symprfx in "" "_"; do
if test "$lt_cv_nm_interface" = "MS dumpbin"; then
# Fake it for dumpbin and say T for any non-static function,
# D for any global variable and I for any imported variable.
- # Also find C++ and __fastcall symbols from MSVC++,
+ # Also find C++ and __fastcall symbols from MSVC++ or ICC,
# which start with @ or ?.
lt_cv_sys_global_symbol_pipe="$AWK '"\
" {last_section=section; section=\$ 3};"\
@@ -7770,9 +8121,9 @@ for ac_symprfx in "" "_"; do
" s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\
" ' prfx=^$ac_symprfx"
else
- lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
+ lt_cv_sys_global_symbol_pipe="$SED -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
fi
- lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'"
+ lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | $SED '/ __gnu_lto/d'"
# Check to see that the pipe works correctly.
pipe_works=no
@@ -7972,7 +8323,7 @@ case $with_sysroot in #(
fi
;; #(
/*)
- lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"`
+ lt_sysroot=`echo "$with_sysroot" | $SED -e "$sed_quote_subst"`
;; #(
no|'')
;; #(
@@ -8097,7 +8448,7 @@ ia64-*-hpux*)
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*ELF-32*)
HPUX_IA64_MODE=32
;;
@@ -8118,7 +8469,7 @@ ia64-*-hpux*)
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
if test yes = "$lt_cv_prog_gnu_ld"; then
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -melf32bsmip"
;;
@@ -8130,7 +8481,7 @@ ia64-*-hpux*)
;;
esac
else
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*32-bit*)
LD="${LD-ld} -32"
;;
@@ -8156,7 +8507,7 @@ mips64*-*linux*)
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
emul=elf
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*32-bit*)
emul="${emul}32"
;;
@@ -8164,7 +8515,7 @@ mips64*-*linux*)
emul="${emul}64"
;;
esac
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*MSB*)
emul="${emul}btsmip"
;;
@@ -8172,7 +8523,7 @@ mips64*-*linux*)
emul="${emul}ltsmip"
;;
esac
- case `/usr/bin/file conftest.$ac_objext` in
+ case `$FILECMD conftest.$ac_objext` in
*N32*)
emul="${emul}n32"
;;
@@ -8196,14 +8547,14 @@ s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- case `/usr/bin/file conftest.o` in
+ case `$FILECMD conftest.o` in
*32-bit*)
case $host in
x86_64-*kfreebsd*-gnu)
LD="${LD-ld} -m elf_i386_fbsd"
;;
x86_64-*linux*)
- case `/usr/bin/file conftest.o` in
+ case `$FILECMD conftest.o` in
*x86-64*)
LD="${LD-ld} -m elf32_x86_64"
;;
@@ -8311,7 +8662,7 @@ printf "%s\n" "$lt_cv_cc_needs_belf" >&6; }
ac_status=$?
printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
test $ac_status = 0; }; then
- case `/usr/bin/file conftest.o` in
+ case `$FILECMD conftest.o` in
*64-bit*)
case $lt_cv_prog_gnu_ld in
yes*)
@@ -9094,8 +9445,8 @@ int forced_loaded() { return 2;}
_LT_EOF
echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5
$LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5
- echo "$AR cr libconftest.a conftest.o" >&5
- $AR cr libconftest.a conftest.o 2>&5
+ echo "$AR $AR_FLAGS libconftest.a conftest.o" >&5
+ $AR $AR_FLAGS libconftest.a conftest.o 2>&5
echo "$RANLIB libconftest.a" >&5
$RANLIB libconftest.a 2>&5
cat > conftest.c << _LT_EOF
@@ -9122,17 +9473,12 @@ printf "%s\n" "$lt_cv_ld_force_load" >&6; }
_lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;;
darwin1.*)
_lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
- darwin*) # darwin 5.x on
- # if running on 10.5 or later, the deployment target defaults
- # to the OS version, if on x86, and 10.4, the deployment
- # target defaults to 10.4. Don't you love it?
- case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
- 10.0,*86*-darwin8*|10.0,*-darwin[912]*)
- _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
- 10.[012][,.]*)
- _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
- 10.*|11.*)
- _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
+ darwin*)
+ case $MACOSX_DEPLOYMENT_TARGET,$host in
+ 10.[012],*|,*powerpc*-darwin[5-8]*)
+ _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;;
+ *)
+ _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;;
esac
;;
esac
@@ -9530,8 +9876,8 @@ esac
ofile=libtool
can_build_shared=yes
-# All known linkers require a '.a' archive for static linking (except MSVC,
-# which needs '.lib').
+# All known linkers require a '.a' archive for static linking (except MSVC and
+# ICC, which need '.lib').
libext=a
with_gnu_ld=$lt_cv_prog_gnu_ld
@@ -10049,7 +10395,7 @@ lt_prog_compiler_static=
lt_prog_compiler_static='-qstaticlink'
;;
*)
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*)
# Sun Fortran 8.3 passes all unrecognized flags to the linker
lt_prog_compiler_pic='-KPIC'
@@ -10472,15 +10818,15 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
case $host_os in
cygwin* | mingw* | pw32* | cegcc*)
- # FIXME: the MSVC++ port hasn't been tested in a loooong time
+ # FIXME: the MSVC++ and ICC port hasn't been tested in a loooong time
# When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
+ # Microsoft Visual C++ or Intel C++ Compiler.
if test yes != "$GCC"; then
with_gnu_ld=no
fi
;;
interix*)
- # we just hope/assume this is gcc and not c89 (= MSVC++)
+ # we just hope/assume this is gcc and not c89 (= MSVC++ or ICC)
with_gnu_ld=yes
;;
openbsd* | bitrig*)
@@ -10535,7 +10881,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
whole_archive_flag_spec=
fi
supports_anon_versioning=no
- case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in
+ case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in
*GNU\ gold*) supports_anon_versioning=yes ;;
*\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
*\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
@@ -10647,6 +10993,7 @@ _LT_EOF
emximp -o $lib $output_objdir/$libname.def'
old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
enable_shared_with_static_runtimes=yes
+ file_list_spec='@'
;;
interix[3-9]*)
@@ -10661,7 +11008,7 @@ _LT_EOF
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
;;
gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
@@ -10704,7 +11051,7 @@ _LT_EOF
compiler_needs_object=yes
;;
esac
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*) # Sun C 5.9
whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive'
compiler_needs_object=yes
@@ -10716,13 +11063,14 @@ _LT_EOF
if test yes = "$supports_anon_versioning"; then
archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
fi
case $cc_basename in
tcc*)
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
export_dynamic_flag_spec='-rdynamic'
;;
xlf* | bgf* | bgxlf* | mpixlf*)
@@ -10732,7 +11080,7 @@ _LT_EOF
archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib'
if test yes = "$supports_anon_versioning"; then
archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
fi
@@ -10864,7 +11212,7 @@ _LT_EOF
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
else
- export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+ export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
fi
aix_use_runtimelinking=no
@@ -11135,12 +11483,12 @@ fi
cygwin* | mingw* | pw32* | cegcc*)
# When not using gcc, we currently assume that we are using
- # Microsoft Visual C++.
+ # Microsoft Visual C++ or Intel C++ Compiler.
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
case $cc_basename in
- cl*)
- # Native MSVC
+ cl* | icl*)
+ # Native MSVC or ICC
hardcode_libdir_flag_spec=' '
allow_undefined_flag=unsupported
always_export_symbols=yes
@@ -11181,7 +11529,7 @@ fi
fi'
;;
*)
- # Assume MSVC wrapper
+ # Assume MSVC and ICC wrapper
hardcode_libdir_flag_spec=' '
allow_undefined_flag=unsupported
# Tell ltmain to make .lib files, not .a files.
@@ -11222,8 +11570,8 @@ fi
output_verbose_link_cmd=func_echo_all
archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
- archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
- module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+ archive_expsym_cmds="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+ module_expsym_cmds="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
else
ld_shlibs=no
@@ -11257,7 +11605,7 @@ fi
;;
# FreeBSD 3 and greater uses gcc -shared to do shared libraries.
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
hardcode_libdir_flag_spec='-R$libdir'
hardcode_direct=yes
@@ -11438,6 +11786,7 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; }
# Fabrice Bellard et al's Tiny C Compiler
ld_shlibs=yes
archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
+ hardcode_libdir_flag_spec='$wl-rpath $wl$libdir'
;;
esac
;;
@@ -11509,6 +11858,7 @@ printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; }
emximp -o $lib $output_objdir/$libname.def'
old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
enable_shared_with_static_runtimes=yes
+ file_list_spec='@'
;;
osf3*)
@@ -12201,7 +12551,7 @@ cygwin* | mingw* | pw32* | cegcc*)
case $host_os in
cygwin*)
# Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"
;;
@@ -12211,14 +12561,14 @@ cygwin* | mingw* | pw32* | cegcc*)
;;
pw32*)
# pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
;;
esac
dynamic_linker='Win32 ld.exe'
;;
- *,cl*)
- # Native MSVC
+ *,cl* | *,icl*)
+ # Native MSVC or ICC
libname_spec='$name'
soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
library_names_spec='$libname.dll.lib'
@@ -12237,7 +12587,7 @@ cygwin* | mingw* | pw32* | cegcc*)
done
IFS=$lt_save_ifs
# Convert to MSYS style.
- sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
;;
cygwin*)
# Convert to unix form, then to dos form, then back to unix form
@@ -12274,7 +12624,7 @@ cygwin* | mingw* | pw32* | cegcc*)
;;
*)
- # Assume MSVC wrapper
+ # Assume MSVC and ICC wrapper
library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
dynamic_linker='Win32 ld.exe'
;;
@@ -12307,7 +12657,7 @@ dgux*)
shlibpath_var=LD_LIBRARY_PATH
;;
-freebsd* | dragonfly*)
+freebsd* | dragonfly* | midnightbsd*)
# DragonFly does not have aout. When/if they implement a new
# versioning mechanism, adjust this.
if test -x /usr/bin/objformat; then
@@ -13472,30 +13822,41 @@ striplib=
old_striplib=
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
printf %s "checking whether stripping libraries is possible... " >&6; }
-if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
- test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
- test -z "$striplib" && striplib="$STRIP --strip-unneeded"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+if test -z "$STRIP"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
else
-# FIXME - insert some real tests, host_os isn't really good enough
- case $host_os in
- darwin*)
- if test -n "$STRIP"; then
+ if $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
+ old_striplib="$STRIP --strip-debug"
+ striplib="$STRIP --strip-unneeded"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+printf "%s\n" "yes" >&6; }
+ else
+ case $host_os in
+ darwin*)
+ # FIXME - insert some real tests, host_os isn't really good enough
striplib="$STRIP -x"
old_striplib="$STRIP -S"
{ 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
+ ;;
+ freebsd*)
+ if $STRIP -V 2>&1 | $GREP "elftoolchain" >/dev/null; then
+ old_striplib="$STRIP --strip-debug"
+ striplib="$STRIP --strip-unneeded"
+ { 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; }
- fi
- ;;
- *)
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ fi
+ ;;
+ *)
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
- ;;
- esac
+ ;;
+ esac
+ fi
fi
@@ -14265,8 +14626,8 @@ fi
cygwin* | mingw* | pw32* | cegcc*)
case $GXX,$cc_basename in
- ,cl* | no,cl*)
- # Native MSVC
+ ,cl* | no,cl* | ,icl* | no,icl*)
+ # Native MSVC or ICC
# hardcode_libdir_flag_spec is actually meaningless, as there is
# no search path for DLLs.
hardcode_libdir_flag_spec_CXX=' '
@@ -14357,11 +14718,11 @@ fi
output_verbose_link_cmd=func_echo_all
archive_cmds_CXX="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil"
module_cmds_CXX="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil"
- archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
- module_expsym_cmds_CXX="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
+ archive_expsym_cmds_CXX="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil"
+ module_expsym_cmds_CXX="$SED -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil"
if test yes != "$lt_cv_apple_cc_single_mod"; then
archive_cmds_CXX="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil"
- archive_expsym_cmds_CXX="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
+ archive_expsym_cmds_CXX="$SED 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil"
fi
else
@@ -14396,6 +14757,7 @@ fi
emximp -o $lib $output_objdir/$libname.def'
old_archive_From_new_cmds_CXX='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def'
enable_shared_with_static_runtimes_CXX=yes
+ file_list_spec_CXX='@'
;;
dgux*)
@@ -14426,7 +14788,7 @@ fi
archive_cmds_need_lc_CXX=no
;;
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
# FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
# conventions
ld_shlibs_CXX=yes
@@ -14563,7 +14925,7 @@ fi
# 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
# time. Moving up from 0x10000000 also allows more sbrk(2) space.
archive_cmds_CXX='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
- archive_expsym_cmds_CXX='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
+ archive_expsym_cmds_CXX='$SED "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
;;
irix5* | irix6*)
case $cc_basename in
@@ -14703,13 +15065,13 @@ fi
archive_cmds_CXX='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib'
if test yes = "$supports_anon_versioning"; then
archive_expsym_cmds_CXX='echo "{ global:" > $output_objdir/$libname.ver~
- cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
+ cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
echo "local: *; };" >> $output_objdir/$libname.ver~
$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib'
fi
;;
*)
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*)
# Sun C++ 5.9
no_undefined_flag_CXX=' -zdefs'
@@ -15366,7 +15728,7 @@ lt_prog_compiler_static_CXX=
;;
esac
;;
- freebsd* | dragonfly*)
+ freebsd* | dragonfly* | midnightbsd*)
# FreeBSD uses GNU C++
;;
hpux9* | hpux10* | hpux11*)
@@ -15449,7 +15811,7 @@ lt_prog_compiler_static_CXX=
lt_prog_compiler_static_CXX='-qstaticlink'
;;
*)
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*)
# Sun C++ 5.9
lt_prog_compiler_pic_CXX='-KPIC'
@@ -15836,7 +16198,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
export_symbols_cmds_CXX='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols'
else
- export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
+ export_symbols_cmds_CXX='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "L") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols'
fi
;;
pw32*)
@@ -15844,7 +16206,7 @@ printf %s "checking whether the $compiler linker ($LD) supports shared libraries
;;
cygwin* | mingw* | cegcc*)
case $cc_basename in
- cl*)
+ cl* | icl*)
exclude_expsyms_CXX='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*'
;;
*)
@@ -16195,7 +16557,7 @@ cygwin* | mingw* | pw32* | cegcc*)
case $host_os in
cygwin*)
# Cygwin DLLs use 'cyg' prefix rather than 'lib'
- soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ soname_spec='`echo $libname | $SED -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
;;
mingw* | cegcc*)
@@ -16204,14 +16566,14 @@ cygwin* | mingw* | pw32* | cegcc*)
;;
pw32*)
# pw32 DLLs use 'pw' prefix rather than 'lib'
- library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
+ library_names_spec='`echo $libname | $SED -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
;;
esac
dynamic_linker='Win32 ld.exe'
;;
- *,cl*)
- # Native MSVC
+ *,cl* | *,icl*)
+ # Native MSVC or ICC
libname_spec='$name'
soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext'
library_names_spec='$libname.dll.lib'
@@ -16230,7 +16592,7 @@ cygwin* | mingw* | pw32* | cegcc*)
done
IFS=$lt_save_ifs
# Convert to MSYS style.
- sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
+ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'`
;;
cygwin*)
# Convert to unix form, then to dos form, then back to unix form
@@ -16267,7 +16629,7 @@ cygwin* | mingw* | pw32* | cegcc*)
;;
*)
- # Assume MSVC wrapper
+ # Assume MSVC and ICC wrapper
library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib'
dynamic_linker='Win32 ld.exe'
;;
@@ -16299,7 +16661,7 @@ dgux*)
shlibpath_var=LD_LIBRARY_PATH
;;
-freebsd* | dragonfly*)
+freebsd* | dragonfly* | midnightbsd*)
# DragonFly does not have aout. When/if they implement a new
# versioning mechanism, adjust this.
if test -x /usr/bin/objformat; then
@@ -16915,6 +17277,141 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
+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
+
+
+
+
ac_ext=c
@@ -16926,19 +17423,28 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
ax_pthread_ok=no
# We used to check for pthread.h first, but this fails if pthread.h
-# requires special compiler flags (e.g. on True64 or Sequent).
+# requires special compiler flags (e.g. on Tru64 or Sequent).
# It gets checked for in the link test anyway.
# First of all, check if the user has set any of the PTHREAD_LIBS,
# etcetera environment variables, and if threads linking works using
# them:
-if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
- save_CFLAGS="$CFLAGS"
+if test "x$PTHREAD_CFLAGS$PTHREAD_LIBS" != "x"; then
+ ax_pthread_save_CC="$CC"
+ ax_pthread_save_CFLAGS="$CFLAGS"
+ ax_pthread_save_LIBS="$LIBS"
+ if test "x$PTHREAD_CC" != "x"
+then :
+ CC="$PTHREAD_CC"
+fi
+ if test "x$PTHREAD_CXX" != "x"
+then :
+ CXX="$PTHREAD_CXX"
+fi
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
- save_LIBS="$LIBS"
LIBS="$PTHREAD_LIBS $LIBS"
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5
-printf %s "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; }
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS" >&5
+printf %s "checking for pthread_join using $CC $PTHREAD_CFLAGS $PTHREAD_LIBS... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@@ -16962,12 +17468,13 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
printf "%s\n" "$ax_pthread_ok" >&6; }
- if test x"$ax_pthread_ok" = xno; then
+ if test "x$ax_pthread_ok" = "xno"; then
PTHREAD_LIBS=""
PTHREAD_CFLAGS=""
fi
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
+ CC="$ax_pthread_save_CC"
+ CFLAGS="$ax_pthread_save_CFLAGS"
+ LIBS="$ax_pthread_save_LIBS"
fi
# We must check for the threads library under a number of different
@@ -16975,12 +17482,14 @@ fi
# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
# libraries is broken (non-POSIX).
-# Create a list of thread flags to try. Items starting with a "-" are
-# C compiler flags, and other items are library names, except for "none"
-# which indicates that we try without any flags at all, and "pthread-config"
-# which is a program returning the flags for the Pth emulation library.
+# Create a list of thread flags to try. Items with a "," contain both
+# C compiler flags (before ",") and linker flags (after ","). Other items
+# starting with a "-" are C compiler flags, and remaining items are
+# library names, except for "none" which indicates that we try without
+# any flags at all, and "pthread-config" which is a program returning
+# the flags for the Pth emulation library.
-ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
+ax_pthread_flags="pthreads none -Kthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
# The ordering *is* (sometimes) important. Some notes on the
# individual items follow:
@@ -16989,83 +17498,178 @@ ax_pthread_flags="pthreads none -Kthread -kthread lthread -pthread -pthreads -mt
# none: in case threads are in libc; should be tried before -Kthread and
# other compiler flags to prevent continual compiler warnings
# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
-# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
-# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
-# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
-# -pthreads: Solaris/gcc
-# -mthreads: Mingw32/gcc, Lynx/gcc
+# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads), Tru64
+# (Note: HP C rejects this with "bad form for `-t' option")
+# -pthreads: Solaris/gcc (Note: HP C also rejects)
# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
-# doesn't hurt to check since this sometimes defines pthreads too;
-# also defines -D_REENTRANT)
-# ... -mt is also the pthreads flag for HP/aCC
+# doesn't hurt to check since this sometimes defines pthreads and
+# -D_REENTRANT too), HP C (must be checked before -lpthread, which
+# is present but should not be used directly; and before -mthreads,
+# because the compiler interprets this as "-mt" + "-hreads")
+# -mthreads: Mingw32/gcc, Lynx/gcc
# pthread: Linux, etcetera
# --thread-safe: KAI C++
# pthread-config: use pthread-config program (for GNU Pth library)
-case ${host_os} in
+case $host_os in
+
+ freebsd*)
+
+ # -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
+ # lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
+
+ ax_pthread_flags="-kthread lthread $ax_pthread_flags"
+ ;;
+
+ hpux*)
+
+ # From the cc(1) man page: "[-mt] Sets various -D flags to enable
+ # multi-threading and also sets -lpthread."
+
+ ax_pthread_flags="-mt -pthread pthread $ax_pthread_flags"
+ ;;
+
+ openedition*)
+
+ # IBM z/OS requires a feature-test macro to be defined in order to
+ # enable POSIX threads at all, so give the user a hint if this is
+ # not set. (We don't define these ourselves, as they can affect
+ # other portions of the system API in unpredictable ways.)
+
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+
+# if !defined(_OPEN_THREADS) && !defined(_UNIX03_THREADS)
+ AX_PTHREAD_ZOS_MISSING
+# endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "AX_PTHREAD_ZOS_MISSING" >/dev/null 2>&1
+then :
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&5
+printf "%s\n" "$as_me: WARNING: IBM z/OS requires -D_OPEN_THREADS or -D_UNIX03_THREADS to enable pthreads support." >&2;}
+fi
+rm -rf conftest*
+
+ ;;
+
solaris*)
# On Solaris (at least, for some versions), libc contains stubbed
# (non-functional) versions of the pthreads routines, so link-based
- # tests will erroneously succeed. (We need to link with -pthreads/-mt/
- # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
- # a function called by this macro, so we could check for that, but
- # who knows whether they'll stub that too in a future libc.) So,
- # we'll just look for -pthreads and -lpthread first:
+ # tests will erroneously succeed. (N.B.: The stubs are missing
+ # pthread_cleanup_push, or rather a function called by this macro,
+ # so we could check for that, but who knows whether they'll stub
+ # that too in a future libc.) So we'll check first for the
+ # standard Solaris way of linking pthreads (-mt -lpthread).
- ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
- ;;
-
- darwin*)
- ax_pthread_flags="-pthread $ax_pthread_flags"
+ ax_pthread_flags="-mt,-lpthread pthread $ax_pthread_flags"
;;
esac
-# Clang doesn't consider unrecognized options an error unless we specify
-# -Werror. We throw in some extra Clang-specific options to ensure that
-# this doesn't happen for GCC, which also accepts -Werror.
+# Are we compiling with Clang?
-{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if compiler needs -Werror to reject unknown flags" >&5
-printf %s "checking if compiler needs -Werror to reject unknown flags... " >&6; }
-save_CFLAGS="$CFLAGS"
-ax_pthread_extra_flags="-Werror"
-CFLAGS="$CFLAGS $ax_pthread_extra_flags -Wunknown-warning-option -Wsizeof-array-argument"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $CC is Clang" >&5
+printf %s "checking whether $CC is Clang... " >&6; }
+if test ${ax_cv_PTHREAD_CLANG+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ax_cv_PTHREAD_CLANG=no
+ # Note that Autoconf sets GCC=yes for Clang as well as GCC
+ if test "x$GCC" = "xyes"; then
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
-int foo(void);
-int
-main (void)
-{
-foo()
- ;
- return 0;
-}
+/* Note: Clang 2.7 lacks __clang_[a-z]+__ */
+# if defined(__clang__) && defined(__llvm__)
+ AX_PTHREAD_CC_IS_CLANG
+# endif
+
_ACEOF
-if ac_fn_c_try_compile "$LINENO"
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ $EGREP "AX_PTHREAD_CC_IS_CLANG" >/dev/null 2>&1
then :
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-printf "%s\n" "yes" >&6; }
+ ax_cv_PTHREAD_CLANG=yes
+fi
+rm -rf conftest*
+
+ fi
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG" >&5
+printf "%s\n" "$ax_cv_PTHREAD_CLANG" >&6; }
+ax_pthread_clang="$ax_cv_PTHREAD_CLANG"
+
+
+# GCC generally uses -pthread, or -pthreads on some platforms (e.g. SPARC)
+
+# Note that for GCC and Clang -pthread generally implies -lpthread,
+# except when -nostdlib is passed.
+# This is problematic using libtool to build C++ shared libraries with pthread:
+# [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=25460
+# [2] https://bugzilla.redhat.com/show_bug.cgi?id=661333
+# [3] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=468555
+# To solve this, first try -pthread together with -lpthread for GCC
+
+if test "x$GCC" = "xyes"
+then :
+ ax_pthread_flags="-pthread,-lpthread -pthread -pthreads $ax_pthread_flags"
+fi
+
+# Clang takes -pthread (never supported any other flag), but we'll try with -lpthread first
+
+if test "x$ax_pthread_clang" = "xyes"
+then :
+ ax_pthread_flags="-pthread,-lpthread -pthread"
+fi
+
+
+# The presence of a feature test macro requesting re-entrant function
+# definitions is, on some systems, a strong hint that pthreads support is
+# correctly enabled
+
+case $host_os in
+ darwin* | hpux* | linux* | osf* | solaris*)
+ ax_pthread_check_macro="_REENTRANT"
+ ;;
+
+ aix*)
+ ax_pthread_check_macro="_THREAD_SAFE"
+ ;;
+
+ *)
+ ax_pthread_check_macro="--"
+ ;;
+esac
+if test "x$ax_pthread_check_macro" = "x--"
+then :
+ ax_pthread_check_cond=0
else $as_nop
- ax_pthread_extra_flags=
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
-printf "%s\n" "no" >&6; }
+ ax_pthread_check_cond="!defined($ax_pthread_check_macro)"
fi
-rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext
-CFLAGS="$save_CFLAGS"
-if test x"$ax_pthread_ok" = xno; then
-for flag in $ax_pthread_flags; do
- case $flag in
+if test "x$ax_pthread_ok" = "xno"; then
+for ax_pthread_try_flag in $ax_pthread_flags; do
+
+ case $ax_pthread_try_flag in
none)
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5
printf %s "checking whether pthreads work without any flags... " >&6; }
;;
+ *,*)
+ PTHREAD_CFLAGS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\1/"`
+ PTHREAD_LIBS=`echo $ax_pthread_try_flag | sed "s/^\(.*\),\(.*\)$/\2/"`
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"" >&5
+printf %s "checking whether pthreads work with \"$PTHREAD_CFLAGS\" and \"$PTHREAD_LIBS\"... " >&6; }
+ ;;
+
-*)
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5
-printf %s "checking whether pthreads work with $flag... " >&6; }
- PTHREAD_CFLAGS="$flag"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $ax_pthread_try_flag" >&5
+printf %s "checking whether pthreads work with $ax_pthread_try_flag... " >&6; }
+ PTHREAD_CFLAGS="$ax_pthread_try_flag"
;;
pthread-config)
@@ -17112,22 +17716,25 @@ printf "%s\n" "no" >&6; }
fi
- if test x"$ax_pthread_config" = xno; then continue; fi
+ if test "x$ax_pthread_config" = "xno"
+then :
+ continue
+fi
PTHREAD_CFLAGS="`pthread-config --cflags`"
PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
;;
*)
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5
-printf %s "checking for the pthreads library -l$flag... " >&6; }
- PTHREAD_LIBS="-l$flag"
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$ax_pthread_try_flag" >&5
+printf %s "checking for the pthreads library -l$ax_pthread_try_flag... " >&6; }
+ PTHREAD_LIBS="-l$ax_pthread_try_flag"
;;
esac
- save_LIBS="$LIBS"
- save_CFLAGS="$CFLAGS"
+ ax_pthread_save_CFLAGS="$CFLAGS"
+ ax_pthread_save_LIBS="$LIBS"
+ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
LIBS="$PTHREAD_LIBS $LIBS"
- CFLAGS="$CFLAGS $PTHREAD_CFLAGS $ax_pthread_extra_flags"
# Check for various functions. We must include pthread.h,
# since some functions may be macros. (On the Sequent, we
@@ -17138,10 +17745,20 @@ printf %s "checking for the pthreads library -l$flag... " >&6; }
# pthread_cleanup_push because it is one of the few pthread
# functions on Solaris that doesn't have a non-functional libc stub.
# We try pthread_create on general principles.
+
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <pthread.h>
- static void routine(void *a) { a = 0; }
+# if $ax_pthread_check_cond
+# error "$ax_pthread_check_macro must be defined"
+# endif
+ static void *some_global = NULL;
+ static void routine(void *a)
+ {
+ /* To avoid any unused-parameter or
+ unused-but-set-parameter warning. */
+ some_global = a;
+ }
static void *start_routine(void *a) { return a; }
int
main (void)
@@ -17163,78 +17780,195 @@ fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
+ CFLAGS="$ax_pthread_save_CFLAGS"
+ LIBS="$ax_pthread_save_LIBS"
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
printf "%s\n" "$ax_pthread_ok" >&6; }
- if test "x$ax_pthread_ok" = xyes; then
- break;
- fi
+ if test "x$ax_pthread_ok" = "xyes"
+then :
+ break
+fi
PTHREAD_LIBS=""
PTHREAD_CFLAGS=""
done
fi
+
+# Clang needs special handling, because older versions handle the -pthread
+# option in a rather... idiosyncratic way
+
+if test "x$ax_pthread_clang" = "xyes"; then
+
+ # Clang takes -pthread; it has never supported any other flag
+
+ # (Note 1: This will need to be revisited if a system that Clang
+ # supports has POSIX threads in a separate library. This tends not
+ # to be the way of modern systems, but it's conceivable.)
+
+ # (Note 2: On some systems, notably Darwin, -pthread is not needed
+ # to get POSIX threads support; the API is always present and
+ # active. We could reasonably leave PTHREAD_CFLAGS empty. But
+ # -pthread does define _REENTRANT, and while the Darwin headers
+ # ignore this macro, third-party headers might not.)
+
+ # However, older versions of Clang make a point of warning the user
+ # that, in an invocation where only linking and no compilation is
+ # taking place, the -pthread option has no effect ("argument unused
+ # during compilation"). They expect -pthread to be passed in only
+ # when source code is being compiled.
+ #
+ # Problem is, this is at odds with the way Automake and most other
+ # C build frameworks function, which is that the same flags used in
+ # compilation (CFLAGS) are also used in linking. Many systems
+ # supported by AX_PTHREAD require exactly this for POSIX threads
+ # support, and in fact it is often not straightforward to specify a
+ # flag that is used only in the compilation phase and not in
+ # linking. Such a scenario is extremely rare in practice.
+ #
+ # Even though use of the -pthread flag in linking would only print
+ # a warning, this can be a nuisance for well-run software projects
+ # that build with -Werror. So if the active version of Clang has
+ # this misfeature, we search for an option to squash it.
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread" >&5
+printf %s "checking whether Clang needs flag to prevent \"argument unused\" warning when linking with -pthread... " >&6; }
+if test ${ax_cv_PTHREAD_CLANG_NO_WARN_FLAG+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ax_cv_PTHREAD_CLANG_NO_WARN_FLAG=unknown
+ # Create an alternate version of $ac_link that compiles and
+ # links in two steps (.c -> .o, .o -> exe) instead of one
+ # (.c -> exe), because the warning occurs only in the second
+ # step
+ ax_pthread_save_ac_link="$ac_link"
+ ax_pthread_sed='s/conftest\.\$ac_ext/conftest.$ac_objext/g'
+ ax_pthread_link_step=`printf "%s\n" "$ac_link" | sed "$ax_pthread_sed"`
+ ax_pthread_2step_ac_link="($ac_compile) && (echo ==== >&5) && ($ax_pthread_link_step)"
+ ax_pthread_save_CFLAGS="$CFLAGS"
+ for ax_pthread_try in '' -Qunused-arguments -Wno-unused-command-line-argument unknown; do
+ if test "x$ax_pthread_try" = "xunknown"
+then :
+ break
+fi
+ CFLAGS="-Werror -Wunknown-warning-option $ax_pthread_try -pthread $ax_pthread_save_CFLAGS"
+ ac_link="$ax_pthread_save_ac_link"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void){return 0;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ ac_link="$ax_pthread_2step_ac_link"
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h. */
+int main(void){return 0;}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"
+then :
+ break
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.beam \
+ conftest$ac_exeext conftest.$ac_ext
+ done
+ ac_link="$ax_pthread_save_ac_link"
+ CFLAGS="$ax_pthread_save_CFLAGS"
+ if test "x$ax_pthread_try" = "x"
+then :
+ ax_pthread_try=no
+fi
+ ax_cv_PTHREAD_CLANG_NO_WARN_FLAG="$ax_pthread_try"
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&5
+printf "%s\n" "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" >&6; }
+
+ case "$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG" in
+ no | unknown) ;;
+ *) PTHREAD_CFLAGS="$ax_cv_PTHREAD_CLANG_NO_WARN_FLAG $PTHREAD_CFLAGS" ;;
+ esac
+
+fi # $ax_pthread_clang = yes
+
+
+
# Various other checks:
-if test "x$ax_pthread_ok" = xyes; then
- save_LIBS="$LIBS"
- LIBS="$PTHREAD_LIBS $LIBS"
- save_CFLAGS="$CFLAGS"
+if test "x$ax_pthread_ok" = "xyes"; then
+ ax_pthread_save_CFLAGS="$CFLAGS"
+ ax_pthread_save_LIBS="$LIBS"
CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
+ LIBS="$PTHREAD_LIBS $LIBS"
# Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
printf %s "checking for joinable pthread attribute... " >&6; }
- attr_name=unknown
- for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+if test ${ax_cv_PTHREAD_JOINABLE_ATTR+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ax_cv_PTHREAD_JOINABLE_ATTR=unknown
+ for ax_pthread_attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <pthread.h>
int
main (void)
{
-int attr = $attr; return attr /* ; */
+int attr = $ax_pthread_attr; return attr /* ; */
;
return 0;
}
_ACEOF
if ac_fn_c_try_link "$LINENO"
then :
- attr_name=$attr; break
+ ax_cv_PTHREAD_JOINABLE_ATTR=$ax_pthread_attr; break
fi
rm -f core conftest.err conftest.$ac_objext conftest.beam \
conftest$ac_exeext conftest.$ac_ext
- done
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5
-printf "%s\n" "$attr_name" >&6; }
- if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
+ done
-printf "%s\n" "#define PTHREAD_CREATE_JOINABLE $attr_name" >>confdefs.h
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_JOINABLE_ATTR" >&5
+printf "%s\n" "$ax_cv_PTHREAD_JOINABLE_ATTR" >&6; }
+ if test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xunknown" && \
+ test "x$ax_cv_PTHREAD_JOINABLE_ATTR" != "xPTHREAD_CREATE_JOINABLE" && \
+ test "x$ax_pthread_joinable_attr_defined" != "xyes"
+then :
- fi
+printf "%s\n" "#define PTHREAD_CREATE_JOINABLE $ax_cv_PTHREAD_JOINABLE_ATTR" >>confdefs.h
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5
-printf %s "checking if more special flags are required for pthreads... " >&6; }
- flag=no
- case ${host_os} in
- aix* | freebsd* | darwin*) flag="-D_THREAD_SAFE";;
- osf* | hpux*) flag="-D_REENTRANT";;
- solaris*)
- if test "$GCC" = "yes"; then
- flag="-D_REENTRANT"
- else
- # TODO: What about Clang on Solaris?
- flag="-mt -D_REENTRANT"
- fi
- ;;
- esac
- { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $flag" >&5
-printf "%s\n" "$flag" >&6; }
- if test "x$flag" != xno; then
- PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
- fi
+ ax_pthread_joinable_attr_defined=yes
+
+fi
+
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether more special flags are required for pthreads" >&5
+printf %s "checking whether more special flags are required for pthreads... " >&6; }
+if test ${ax_cv_PTHREAD_SPECIAL_FLAGS+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ ax_cv_PTHREAD_SPECIAL_FLAGS=no
+ case $host_os in
+ solaris*)
+ ax_cv_PTHREAD_SPECIAL_FLAGS="-D_POSIX_PTHREAD_SEMANTICS"
+ ;;
+ esac
+
+fi
+{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_SPECIAL_FLAGS" >&5
+printf "%s\n" "$ax_cv_PTHREAD_SPECIAL_FLAGS" >&6; }
+ if test "x$ax_cv_PTHREAD_SPECIAL_FLAGS" != "xno" && \
+ test "x$ax_pthread_special_flags_added" != "xyes"
+then :
+ PTHREAD_CFLAGS="$ax_cv_PTHREAD_SPECIAL_FLAGS $PTHREAD_CFLAGS"
+ ax_pthread_special_flags_added=yes
+fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for PTHREAD_PRIO_INHERIT" >&5
printf %s "checking for PTHREAD_PRIO_INHERIT... " >&6; }
@@ -17242,14 +17976,14 @@ if test ${ax_cv_PTHREAD_PRIO_INHERIT+y}
then :
printf %s "(cached) " >&6
else $as_nop
-
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include <pthread.h>
int
main (void)
{
int i = PTHREAD_PRIO_INHERIT;
+ return i;
;
return 0;
}
@@ -17266,31 +18000,44 @@ rm -f core conftest.err conftest.$ac_objext conftest.beam \
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ax_cv_PTHREAD_PRIO_INHERIT" >&5
printf "%s\n" "$ax_cv_PTHREAD_PRIO_INHERIT" >&6; }
- if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes"
+ if test "x$ax_cv_PTHREAD_PRIO_INHERIT" = "xyes" && \
+ test "x$ax_pthread_prio_inherit_defined" != "xyes"
then :
printf "%s\n" "#define HAVE_PTHREAD_PRIO_INHERIT 1" >>confdefs.h
+ ax_pthread_prio_inherit_defined=yes
+
fi
- LIBS="$save_LIBS"
- CFLAGS="$save_CFLAGS"
+ CFLAGS="$ax_pthread_save_CFLAGS"
+ LIBS="$ax_pthread_save_LIBS"
# More AIX lossage: compile with *_r variant
- if test "x$GCC" != xyes; then
+ if test "x$GCC" != "xyes"; then
case $host_os in
aix*)
case "x/$CC" in #(
x*/c89|x*/c89_128|x*/c99|x*/c99_128|x*/cc|x*/cc128|x*/xlc|x*/xlc_v6|x*/xlc128|x*/xlc128_v6) :
#handle absolute path differently from PATH based program lookup
- case "x$CC" in #(
+ case "x$CC" in #(
x/*) :
- if as_fn_executable_p ${CC}_r
+
+ if as_fn_executable_p ${CC}_r
then :
PTHREAD_CC="${CC}_r"
-fi ;; #(
+fi
+ if test "x${CXX}" != "x"
+then :
+ if as_fn_executable_p ${CXX}_r
+then :
+ PTHREAD_CXX="${CXX}_r"
+fi
+fi
+ ;; #(
*) :
- for ac_prog in ${CC}_r
+
+ for ac_prog in ${CC}_r
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
@@ -17337,8 +18084,62 @@ fi
test -n "$PTHREAD_CC" && break
done
test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
- ;;
-esac ;; #(
+
+ if test "x${CXX}" != "x"
+then :
+ for ac_prog in ${CXX}_r
+do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; 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_PTHREAD_CXX+y}
+then :
+ printf %s "(cached) " >&6
+else $as_nop
+ if test -n "$PTHREAD_CXX"; then
+ ac_cv_prog_PTHREAD_CXX="$PTHREAD_CXX" # 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_PTHREAD_CXX="$ac_prog"
+ 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
+PTHREAD_CXX=$ac_cv_prog_PTHREAD_CXX
+if test -n "$PTHREAD_CXX"; then
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CXX" >&5
+printf "%s\n" "$PTHREAD_CXX" >&6; }
+else
+ { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
+printf "%s\n" "no" >&6; }
+fi
+
+
+ test -n "$PTHREAD_CXX" && break
+done
+test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX"
+
+fi
+
+ ;;
+esac
+ ;; #(
*) :
;;
esac
@@ -17348,13 +18149,15 @@ esac
fi
test -n "$PTHREAD_CC" || PTHREAD_CC="$CC"
+test -n "$PTHREAD_CXX" || PTHREAD_CXX="$CXX"
+
# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
-if test x"$ax_pthread_ok" = xyes; then
+if test "x$ax_pthread_ok" = "xyes"; then
printf "%s\n" "#define HAVE_PTHREAD 1" >>confdefs.h
@@ -17793,9 +18596,9 @@ int main() {
pid_t child = clone(userfn, userst + 1024*1024, CLONE_NEWUSER|SIGCHLD, 0);
if (child < 0) return 1;
- sprintf(buffer, "/proc/%d/uid_map", child);
+ snprintf(buffer, sizeof(buffer), "/proc/%d/uid_map", child);
fd = open(buffer, O_CREAT|O_WRONLY|O_TRUNC, 0755);
- sprintf(buffer, "0 %d 1\n", getuid());
+ snprintf(buffer, sizeof(buffer), "0 %d 1\n", getuid());
write(fd, buffer, strlen(buffer));
close(fd);
@@ -17891,9 +18694,9 @@ int main() {
pid_t child = clone(fn, st + 1024*1024, CLONE_NEWUSER|SIGCHLD, 0);
if (child < 0) return 1;
- sprintf(buffer, "/proc/%d/uid_map", child);
+ snprintf(buffer, sizeof(buffer), "/proc/%d/uid_map", child);
fd = open(buffer, O_CREAT|O_WRONLY|O_TRUNC, 0755);
- sprintf(buffer, "0 %d 1\n", getuid());
+ snprintf(buffer, sizeof(buffer), "0 %d 1\n", getuid());
write(fd, buffer, strlen(buffer));
close(fd);
@@ -18711,6 +19514,7 @@ lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_q
lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`'
reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`'
reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`'
+FILECMD='`$ECHO "$FILECMD" | $SED "$delay_single_quote_subst"`'
OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`'
deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`'
file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`'
@@ -18719,6 +19523,7 @@ want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`'
DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`'
sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`'
AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`'
+lt_ar_flags='`$ECHO "$lt_ar_flags" | $SED "$delay_single_quote_subst"`'
AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`'
archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`'
STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`'
@@ -18893,6 +19698,7 @@ LN_S \
lt_SP2NL \
lt_NL2SP \
reload_flag \
+FILECMD \
OBJDUMP \
deplibs_check_method \
file_magic_cmd \
@@ -18901,7 +19707,6 @@ want_nocaseglob \
DLLTOOL \
sharedlib_from_linklib_cmd \
AR \
-AR_FLAGS \
archiver_list_spec \
STRIP \
RANLIB \
@@ -19887,6 +20692,9 @@ to_host_file_cmd=$lt_cv_to_host_file_cmd
# convert \$build files to toolchain format.
to_tool_file_cmd=$lt_cv_to_tool_file_cmd
+# A file(cmd) program that detects file types.
+FILECMD=$lt_FILECMD
+
# An object symbol dumper.
OBJDUMP=$lt_OBJDUMP
@@ -19911,8 +20719,11 @@ sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd
# The archiver.
AR=$lt_AR
+# Flags to create an archive (by configure).
+lt_ar_flags=$lt_ar_flags
+
# Flags to create an archive.
-AR_FLAGS=$lt_AR_FLAGS
+AR_FLAGS=\${ARFLAGS-"\$lt_ar_flags"}
# How to feed a file listing to the archiver.
archiver_list_spec=$lt_archiver_list_spec
@@ -20302,7 +21113,7 @@ ltmain=$ac_aux_dir/ltmain.sh
# if finds mixed CR/LF and LF-only lines. Since sed operates in
# text mode, it properly converts lines to CR/LF. This bash problem
# is reportedly fixed, but why not run on old versions too?
- sed '$q' "$ltmain" >> "$cfgfile" \
+ $SED '$q' "$ltmain" >> "$cfgfile" \
|| (rm -f "$cfgfile"; exit 1)
mv -f "$cfgfile" "$ofile" ||
diff --git a/test/configure.ac b/test/configure.ac
index 9ed28da..ea76bbd 100644
--- a/test/configure.ac
+++ b/test/configure.ac
@@ -1,3 +1,23 @@
+#############################################################
+#
+# Copyright (C) the Massachusetts Institute of Technology.
+# Copyright (C) Daniel Stenberg
+#
+# Permission to use, copy, modify, and distribute this
+# software and its documentation for any purpose and without
+# fee is hereby granted, 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.
+#
+# SPDX-License-Identifier: MIT
+#
+#############################################################
AC_PREREQ(2.57)
AC_INIT([c-ares-test],[-],[-])
AC_CONFIG_SRCDIR([ares-test.cc])
diff --git a/test/dns-dump.cc b/test/dns-dump.cc
index f00a2d4..80be76c 100644
--- a/test/dns-dump.cc
+++ b/test/dns-dump.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include <sys/types.h>
#include <fcntl.h>
#ifdef _MSC_VER
diff --git a/test/dns-proto-test.cc b/test/dns-proto-test.cc
index 3dadeee..6fa3093 100644
--- a/test/dns-proto-test.cc
+++ b/test/dns-proto-test.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#include "ares-test.h"
#include "dns-proto.h"
diff --git a/test/dns-proto.cc b/test/dns-proto.cc
index e827810..d6e9025 100644
--- a/test/dns-proto.cc
+++ b/test/dns-proto.cc
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
// Include ares internal file for DNS protocol details
#include "ares_setup.h"
@@ -16,7 +33,7 @@ std::string HexDump(std::vector<byte> data) {
std::stringstream ss;
for (size_t ii = 0; ii < data.size(); ii++) {
char buffer[2 + 1];
- sprintf(buffer, "%02x", data[ii]);
+ snprintf(buffer, sizeof(buffer), "%02x", data[ii]);
ss << buffer;
}
return ss.str();
@@ -159,17 +176,17 @@ std::string AddressToString(const void* vaddr, int len) {
std::stringstream ss;
if (len == 4) {
char buffer[4*4 + 3 + 1];
- sprintf(buffer, "%u.%u.%u.%u",
- (unsigned char)addr[0],
- (unsigned char)addr[1],
- (unsigned char)addr[2],
- (unsigned char)addr[3]);
+ snprintf(buffer, sizeof(buffer), "%u.%u.%u.%u",
+ (unsigned char)addr[0],
+ (unsigned char)addr[1],
+ (unsigned char)addr[2],
+ (unsigned char)addr[3]);
ss << buffer;
} else if (len == 16) {
for (int ii = 0; ii < 16; ii+=2) {
if (ii > 0) ss << ':';
char buffer[4 + 1];
- sprintf(buffer, "%02x%02x", (unsigned char)addr[ii], (unsigned char)addr[ii+1]);
+ snprintf(buffer, sizeof(buffer), "%02x%02x", (unsigned char)addr[ii], (unsigned char)addr[ii+1]);
ss << buffer;
}
} else {
@@ -479,6 +496,10 @@ std::vector<byte> EncodeString(const std::string& name) {
std::string label;
// TODO: cope with escapes
while (std::getline(ss, label, '.')) {
+ /* Label length of 0 indicates the end, and we always push an end
+ * terminator, so don't do it twice */
+ if (label.length() == 0)
+ break;
data.push_back(label.length());
data.insert(data.end(), label.begin(), label.end());
}
diff --git a/test/dns-proto.h b/test/dns-proto.h
index d8a8e57..2a95273 100644
--- a/test/dns-proto.h
+++ b/test/dns-proto.h
@@ -1,4 +1,21 @@
// -*- mode: c++ -*-
+/*
+ * Copyright (C) The c-ares project
+ *
+ * Permission to use, copy, modify, and distribute this
+ * software and its documentation for any purpose and without
+ * fee is hereby granted, 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.
+ *
+ * SPDX-License-Identifier: MIT
+ */
#ifndef DNS_PROTO_H
#define DNS_PROTO_H
// Utilities for processing DNS packet contents
@@ -16,237 +33,358 @@ namespace ares {
typedef unsigned char byte;
-std::string HexDump(std::vector<byte> data);
-std::string HexDump(const byte *data, int len);
-std::string HexDump(const char *data, int len);
+std::string HexDump(std::vector<byte> data);
+std::string HexDump(const byte *data, int len);
+std::string HexDump(const char *data, int len);
-std::string StatusToString(int status);
-std::string RcodeToString(int rcode);
-std::string RRTypeToString(int rrtype);
-std::string ClassToString(int qclass);
-std::string AddressToString(const void* addr, int len);
+std::string StatusToString(int status);
+std::string RcodeToString(int rcode);
+std::string RRTypeToString(int rrtype);
+std::string ClassToString(int qclass);
+std::string AddressToString(const void *addr, int len);
// Convert DNS protocol data to strings.
// Note that these functions are not defensive; they assume
// a validly formatted input, and so should not be used on
// externally-determined inputs.
-std::string PacketToString(const std::vector<byte>& packet);
-std::string QuestionToString(const std::vector<byte>& packet,
- const byte** data, int* len);
-std::string RRToString(const std::vector<byte>& packet,
- const byte** data, int* len);
+std::string PacketToString(const std::vector<byte> &packet);
+std::string QuestionToString(const std::vector<byte> &packet, const byte **data,
+ int *len);
+std::string RRToString(const std::vector<byte> &packet, const byte **data,
+ int *len);
// Manipulate DNS protocol data.
-void PushInt32(std::vector<byte>* data, int value);
-void PushInt16(std::vector<byte>* data, int value);
-std::vector<byte> EncodeString(const std::string& name);
+void PushInt32(std::vector<byte> *data, int value);
+void PushInt16(std::vector<byte> *data, int value);
+std::vector<byte> EncodeString(const std::string &name);
struct DNSQuestion {
- DNSQuestion(const std::string& name, int rrtype, int qclass)
- : name_(name), rrtype_(rrtype), qclass_(qclass) {}
- DNSQuestion(const std::string& name, int rrtype)
- : name_(name), rrtype_(rrtype), qclass_(C_IN) {}
- virtual ~DNSQuestion() {}
+ DNSQuestion(const std::string &name, int rrtype, int qclass)
+ : name_(name), rrtype_(rrtype), qclass_(qclass)
+ {
+ }
+
+ DNSQuestion(const std::string &name, int rrtype)
+ : name_(name), rrtype_(rrtype), qclass_(C_IN)
+ {
+ }
+
+ virtual ~DNSQuestion()
+ {
+ }
+
virtual std::vector<byte> data() const;
- std::string name_;
- int rrtype_;
- int qclass_;
+ std::string name_;
+ int rrtype_;
+ int qclass_;
};
struct DNSRR : public DNSQuestion {
- DNSRR(const std::string& name, int rrtype, int qclass, int ttl)
- : DNSQuestion(name, rrtype, qclass), ttl_(ttl) {}
- DNSRR(const std::string& name, int rrtype, int ttl)
- : DNSQuestion(name, rrtype), ttl_(ttl) {}
- virtual ~DNSRR() {}
+ DNSRR(const std::string &name, int rrtype, int qclass, int ttl)
+ : DNSQuestion(name, rrtype, qclass), ttl_(ttl)
+ {
+ }
+
+ DNSRR(const std::string &name, int rrtype, int ttl)
+ : DNSQuestion(name, rrtype), ttl_(ttl)
+ {
+ }
+
+ virtual ~DNSRR()
+ {
+ }
+
virtual std::vector<byte> data() const = 0;
- int ttl_;
+ int ttl_;
};
struct DNSAddressRR : public DNSRR {
- DNSAddressRR(const std::string& name, int rrtype, int ttl,
- const byte* addr, int addrlen)
- : DNSRR(name, rrtype, ttl), addr_(addr, addr + addrlen) {}
- DNSAddressRR(const std::string& name, int rrtype, int ttl,
- const std::vector<byte>& addr)
- : DNSRR(name, rrtype, ttl), addr_(addr) {}
+ DNSAddressRR(const std::string &name, int rrtype, int ttl, const byte *addr,
+ int addrlen)
+ : DNSRR(name, rrtype, ttl), addr_(addr, addr + addrlen)
+ {
+ }
+
+ DNSAddressRR(const std::string &name, int rrtype, int ttl,
+ const std::vector<byte> &addr)
+ : DNSRR(name, rrtype, ttl), addr_(addr)
+ {
+ }
+
virtual std::vector<byte> data() const;
- std::vector<byte> addr_;
+ std::vector<byte> addr_;
};
struct DNSARR : public DNSAddressRR {
- DNSARR(const std::string& name, int ttl, const byte* addr, int addrlen)
- : DNSAddressRR(name, T_A, ttl, addr, addrlen) {}
- DNSARR(const std::string& name, int ttl, const std::vector<byte>& addr)
- : DNSAddressRR(name, T_A, ttl, addr) {}
+ DNSARR(const std::string &name, int ttl, const byte *addr, int addrlen)
+ : DNSAddressRR(name, T_A, ttl, addr, addrlen)
+ {
+ }
+
+ DNSARR(const std::string &name, int ttl, const std::vector<byte> &addr)
+ : DNSAddressRR(name, T_A, ttl, addr)
+ {
+ }
};
struct DNSAaaaRR : public DNSAddressRR {
- DNSAaaaRR(const std::string& name, int ttl, const byte* addr, int addrlen)
- : DNSAddressRR(name, T_AAAA, ttl, addr, addrlen) {}
- DNSAaaaRR(const std::string& name, int ttl, const std::vector<byte>& addr)
- : DNSAddressRR(name, T_AAAA, ttl, addr) {}
+ DNSAaaaRR(const std::string &name, int ttl, const byte *addr, int addrlen)
+ : DNSAddressRR(name, T_AAAA, ttl, addr, addrlen)
+ {
+ }
+
+ DNSAaaaRR(const std::string &name, int ttl, const std::vector<byte> &addr)
+ : DNSAddressRR(name, T_AAAA, ttl, addr)
+ {
+ }
};
struct DNSSingleNameRR : public DNSRR {
- DNSSingleNameRR(const std::string& name, int rrtype, int ttl,
- const std::string& other)
- : DNSRR(name, rrtype, ttl), other_(other) {}
+ DNSSingleNameRR(const std::string &name, int rrtype, int ttl,
+ const std::string &other)
+ : DNSRR(name, rrtype, ttl), other_(other)
+ {
+ }
+
virtual std::vector<byte> data() const;
- std::string other_;
+ std::string other_;
};
struct DNSCnameRR : public DNSSingleNameRR {
- DNSCnameRR(const std::string& name, int ttl, const std::string& other)
- : DNSSingleNameRR(name, T_CNAME, ttl, other) {}
+ DNSCnameRR(const std::string &name, int ttl, const std::string &other)
+ : DNSSingleNameRR(name, T_CNAME, ttl, other)
+ {
+ }
};
struct DNSNsRR : public DNSSingleNameRR {
- DNSNsRR(const std::string& name, int ttl, const std::string& other)
- : DNSSingleNameRR(name, T_NS, ttl, other) {}
+ DNSNsRR(const std::string &name, int ttl, const std::string &other)
+ : DNSSingleNameRR(name, T_NS, ttl, other)
+ {
+ }
};
struct DNSPtrRR : public DNSSingleNameRR {
- DNSPtrRR(const std::string& name, int ttl, const std::string& other)
- : DNSSingleNameRR(name, T_PTR, ttl, other) {}
+ DNSPtrRR(const std::string &name, int ttl, const std::string &other)
+ : DNSSingleNameRR(name, T_PTR, ttl, other)
+ {
+ }
};
struct DNSTxtRR : public DNSRR {
- DNSTxtRR(const std::string& name, int ttl, const std::vector<std::string>& txt)
- : DNSRR(name, T_TXT, ttl), txt_(txt) {}
+ DNSTxtRR(const std::string &name, int ttl,
+ const std::vector<std::string> &txt)
+ : DNSRR(name, T_TXT, ttl), txt_(txt)
+ {
+ }
+
virtual std::vector<byte> data() const;
- std::vector<std::string> txt_;
+ std::vector<std::string> txt_;
};
struct DNSMxRR : public DNSRR {
- DNSMxRR(const std::string& name, int ttl, int pref, const std::string& other)
- : DNSRR(name, T_MX, ttl), pref_(pref), other_(other) {}
+ DNSMxRR(const std::string &name, int ttl, int pref, const std::string &other)
+ : DNSRR(name, T_MX, ttl), pref_(pref), other_(other)
+ {
+ }
+
virtual std::vector<byte> data() const;
- int pref_;
- std::string other_;
+ int pref_;
+ std::string other_;
};
struct DNSSrvRR : public DNSRR {
- DNSSrvRR(const std::string& name, int ttl,
- int prio, int weight, int port, const std::string& target)
- : DNSRR(name, T_SRV, ttl), prio_(prio), weight_(weight), port_(port), target_(target) {}
+ DNSSrvRR(const std::string &name, int ttl, int prio, int weight, int port,
+ const std::string &target)
+ : DNSRR(name, T_SRV, ttl), prio_(prio), weight_(weight), port_(port),
+ target_(target)
+ {
+ }
+
virtual std::vector<byte> data() const;
- int prio_;
- int weight_;
- int port_;
- std::string target_;
+ int prio_;
+ int weight_;
+ int port_;
+ std::string target_;
};
struct DNSUriRR : public DNSRR {
- DNSUriRR(const std::string& name, int ttl,
- int prio, int weight, const std::string& target)
- : DNSRR(name, T_URI, ttl), prio_(prio), weight_(weight), target_(target) {}
+ DNSUriRR(const std::string &name, int ttl, int prio, int weight,
+ const std::string &target)
+ : DNSRR(name, T_URI, ttl), prio_(prio), weight_(weight), target_(target)
+ {
+ }
+
virtual std::vector<byte> data() const;
- int prio_;
- int weight_;
- std::string target_;
+ int prio_;
+ int weight_;
+ std::string target_;
};
struct DNSSoaRR : public DNSRR {
- DNSSoaRR(const std::string& name, int ttl,
- const std::string& nsname, const std::string& rname,
- int serial, int refresh, int retry, int expire, int minimum)
- : DNSRR(name, T_SOA, ttl), nsname_(nsname), rname_(rname),
- serial_(serial), refresh_(refresh), retry_(retry),
- expire_(expire), minimum_(minimum) {}
+ DNSSoaRR(const std::string &name, int ttl, const std::string &nsname,
+ const std::string &rname, int serial, int refresh, int retry,
+ int expire, int minimum)
+ : DNSRR(name, T_SOA, ttl), nsname_(nsname), rname_(rname), serial_(serial),
+ refresh_(refresh), retry_(retry), expire_(expire), minimum_(minimum)
+ {
+ }
+
virtual std::vector<byte> data() const;
- std::string nsname_;
- std::string rname_;
- int serial_;
- int refresh_;
- int retry_;
- int expire_;
- int minimum_;
+ std::string nsname_;
+ std::string rname_;
+ int serial_;
+ int refresh_;
+ int retry_;
+ int expire_;
+ int minimum_;
};
struct DNSNaptrRR : public DNSRR {
- DNSNaptrRR(const std::string& name, int ttl,
- int order, int pref,
- const std::string& flags,
- const std::string& service,
- const std::string& regexp,
- const std::string& replacement)
- : DNSRR(name, T_NAPTR, ttl), order_(order), pref_(pref),
- flags_(flags), service_(service), regexp_(regexp), replacement_(replacement) {}
+ DNSNaptrRR(const std::string &name, int ttl, int order, int pref,
+ const std::string &flags, const std::string &service,
+ const std::string &regexp, const std::string &replacement)
+ : DNSRR(name, T_NAPTR, ttl), order_(order), pref_(pref), flags_(flags),
+ service_(service), regexp_(regexp), replacement_(replacement)
+ {
+ }
+
virtual std::vector<byte> data() const;
- int order_;
- int pref_;
- std::string flags_;
- std::string service_;
- std::string regexp_;
- std::string replacement_;
+ int order_;
+ int pref_;
+ std::string flags_;
+ std::string service_;
+ std::string regexp_;
+ std::string replacement_;
};
struct DNSOption {
- int code_;
+ int code_;
std::vector<byte> data_;
};
struct DNSOptRR : public DNSRR {
DNSOptRR(int extrcode, int udpsize)
- : DNSRR("", T_OPT, static_cast<int>(udpsize), extrcode) {}
+ : DNSRR("", T_OPT, static_cast<int>(udpsize), extrcode)
+ {
+ }
+
virtual std::vector<byte> data() const;
- std::vector<DNSOption> opts_;
+ std::vector<DNSOption> opts_;
};
struct DNSPacket {
DNSPacket()
- : qid_(0), response_(false), opcode_(O_QUERY),
- aa_(false), tc_(false), rd_(false), ra_(false),
- z_(false), ad_(false), cd_(false), rcode_(NOERROR) {}
+ : qid_(0), response_(false), opcode_(O_QUERY), aa_(false), tc_(false),
+ rd_(false), ra_(false), z_(false), ad_(false), cd_(false), rcode_(NOERROR)
+ {
+ }
+
// Convenience functions that take ownership of given pointers.
- DNSPacket& add_question(DNSQuestion *q) {
+ DNSPacket &add_question(DNSQuestion *q)
+ {
questions_.push_back(std::unique_ptr<DNSQuestion>(q));
return *this;
}
- DNSPacket& add_answer(DNSRR *q) {
+
+ DNSPacket &add_answer(DNSRR *q)
+ {
answers_.push_back(std::unique_ptr<DNSRR>(q));
return *this;
}
- DNSPacket& add_auth(DNSRR *q) {
+
+ DNSPacket &add_auth(DNSRR *q)
+ {
auths_.push_back(std::unique_ptr<DNSRR>(q));
return *this;
}
- DNSPacket& add_additional(DNSRR *q) {
+
+ DNSPacket &add_additional(DNSRR *q)
+ {
adds_.push_back(std::unique_ptr<DNSRR>(q));
return *this;
}
+
// Chainable setters.
- DNSPacket& set_qid(int qid) { qid_ = qid; return *this; }
- DNSPacket& set_response(bool v = true) { response_ = v; return *this; }
- DNSPacket& set_aa(bool v = true) { aa_ = v; return *this; }
- DNSPacket& set_tc(bool v = true) { tc_ = v; return *this; }
- DNSPacket& set_rd(bool v = true) { rd_ = v; return *this; }
- DNSPacket& set_ra(bool v = true) { ra_ = v; return *this; }
- DNSPacket& set_z(bool v = true) { z_ = v; return *this; }
- DNSPacket& set_ad(bool v = true) { ad_ = v; return *this; }
- DNSPacket& set_cd(bool v = true) { cd_ = v; return *this; }
- DNSPacket& set_rcode(int rcode) { rcode_ = rcode; return *this; }
+ DNSPacket &set_qid(int qid)
+ {
+ qid_ = qid;
+ return *this;
+ }
+
+ DNSPacket &set_response(bool v = true)
+ {
+ response_ = v;
+ return *this;
+ }
+
+ DNSPacket &set_aa(bool v = true)
+ {
+ aa_ = v;
+ return *this;
+ }
+
+ DNSPacket &set_tc(bool v = true)
+ {
+ tc_ = v;
+ return *this;
+ }
+
+ DNSPacket &set_rd(bool v = true)
+ {
+ rd_ = v;
+ return *this;
+ }
+
+ DNSPacket &set_ra(bool v = true)
+ {
+ ra_ = v;
+ return *this;
+ }
+
+ DNSPacket &set_z(bool v = true)
+ {
+ z_ = v;
+ return *this;
+ }
+
+ DNSPacket &set_ad(bool v = true)
+ {
+ ad_ = v;
+ return *this;
+ }
+
+ DNSPacket &set_cd(bool v = true)
+ {
+ cd_ = v;
+ return *this;
+ }
+
+ DNSPacket &set_rcode(int rcode)
+ {
+ rcode_ = rcode;
+ return *this;
+ }
// Return the encoded packet.
- std::vector<byte> data() const;
-
- int qid_;
- bool response_;
- int opcode_;
- bool aa_;
- bool tc_;
- bool rd_;
- bool ra_;
- bool z_;
- bool ad_;
- bool cd_;
- int rcode_;
+ std::vector<byte> data() const;
+
+ int qid_;
+ bool response_;
+ int opcode_;
+ bool aa_;
+ bool tc_;
+ bool rd_;
+ bool ra_;
+ bool z_;
+ bool ad_;
+ bool cd_;
+ int rcode_;
std::vector<std::unique_ptr<DNSQuestion>> questions_;
- std::vector<std::unique_ptr<DNSRR>> answers_;
- std::vector<std::unique_ptr<DNSRR>> auths_;
- std::vector<std::unique_ptr<DNSRR>> adds_;
+ std::vector<std::unique_ptr<DNSRR>> answers_;
+ std::vector<std::unique_ptr<DNSRR>> auths_;
+ std::vector<std::unique_ptr<DNSRR>> adds_;
};
} // namespace ares
diff --git a/test/fuzzcheck.sh b/test/fuzzcheck.sh
index 3a13766..1d09802 100755
--- a/test/fuzzcheck.sh
+++ b/test/fuzzcheck.sh
@@ -1,4 +1,6 @@
#!/bin/sh
+# Copyright (C) The c-ares project and its contributors
+# SPDX-License-Identifier: MIT
set -e
# Check that all of the base fuzzing corpus parse without errors
./aresfuzz fuzzinput/*
diff --git a/test/gmock-1.11.0/gmock-gtest-all.cc b/test/gmock-1.11.0/gmock-gtest-all.cc
index 6d86e6e..5b9d04c 100644
--- a/test/gmock-1.11.0/gmock-gtest-all.cc
+++ b/test/gmock-1.11.0/gmock-gtest-all.cc
@@ -26,6 +26,8 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// SPDX-License-Identifier: BSD-3-Clause
//
// Google C++ Testing and Mocking Framework (Google Test)
diff --git a/test/gmock-1.11.0/gmock/gmock.h b/test/gmock-1.11.0/gmock/gmock.h
index 9bb49d0..3deab27 100644
--- a/test/gmock-1.11.0/gmock/gmock.h
+++ b/test/gmock-1.11.0/gmock/gmock.h
@@ -26,6 +26,8 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// SPDX-License-Identifier: BSD-3-Clause
// Google Mock - a framework for writing C++ mock classes.
diff --git a/test/gmock-1.11.0/gtest/gtest.h b/test/gmock-1.11.0/gtest/gtest.h
index e749057..64ac6f3 100644
--- a/test/gmock-1.11.0/gtest/gtest.h
+++ b/test/gmock-1.11.0/gtest/gtest.h
@@ -26,6 +26,8 @@
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+//
+// SPDX-License-Identifier: BSD-3-Clause
//
// The Google C++ Testing and Mocking Framework (Google Test)
diff --git a/test/ltmain.sh b/test/ltmain.sh
index 21e5e07..9b12fbb 100755
--- a/test/ltmain.sh
+++ b/test/ltmain.sh
@@ -1,12 +1,12 @@
-#! /bin/sh
+#! /usr/bin/env sh
## DO NOT EDIT - This file generated from ./build-aux/ltmain.in
-## by inline-source v2014-01-03.01
+## by inline-source v2019-02-19.15
-# libtool (GNU libtool) 2.4.6
+# libtool (GNU libtool) 2.4.7
# Provide generalized library-building support services.
# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-# Copyright (C) 1996-2015 Free Software Foundation, Inc.
+# Copyright (C) 1996-2019, 2021-2022 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.
@@ -31,8 +31,8 @@
PROGRAM=libtool
PACKAGE=libtool
-VERSION="2.4.6 Debian-2.4.6-15"
-package_revision=2.4.6
+VERSION="2.4.7 Debian-2.4.7-5"
+package_revision=2.4.7
## ------ ##
@@ -64,34 +64,25 @@ package_revision=2.4.6
# libraries, which are installed to $pkgauxdir.
# Set a version string for this script.
-scriptversion=2015-01-20.17; # UTC
+scriptversion=2019-02-19.15; # UTC
# General shell script boiler plate, and helper functions.
# Written by Gary V. Vaughan, 2004
-# Copyright (C) 2004-2015 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.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 3 of the License, or
-# (at your option) any later version.
-
-# As a special exception to the GNU General Public License, if you distribute
-# this file as part of a program or library that is built using GNU Libtool,
-# you may include this file under the same distribution terms that you use
-# for the rest of that program.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU
-# General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# This is free software. There is NO warranty; not even for
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+# Copyright (C) 2004-2019, 2021 Bootstrap Authors
+#
+# This file is dual licensed under the terms of the MIT license
+# <https://opensource.org/license/MIT>, and GPL version 2 or later
+# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
+# these licenses when using or redistributing this software or any of
+# the files within it. See the URLs above, or the file `LICENSE`
+# included in the Bootstrap distribution for the full license texts.
-# Please report bugs or propose patches to gary@gnu.org.
+# Please report bugs or propose patches to:
+# <https://github.com/gnulib-modules/bootstrap/issues>
## ------ ##
@@ -139,9 +130,12 @@ do
_G_safe_locale=\"$_G_var=C; \$_G_safe_locale\"
fi"
done
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
+# These NLS vars are set unconditionally (bootstrap issue #24). Unset those
+# in case the environment reset is needed later and the $save_* variant is not
+# defined (see the code above).
+LC_ALL=C
+LANGUAGE=C
+export LANGUAGE LC_ALL
# Make sure IFS has a sensible default
sp=' '
@@ -159,6 +153,26 @@ if test "${PATH_SEPARATOR+set}" != set; then
fi
+# func_unset VAR
+# --------------
+# Portably unset VAR.
+# In some shells, an 'unset VAR' statement leaves a non-zero return
+# status if VAR is already unset, which might be problematic if the
+# statement is used at the end of a function (thus poisoning its return
+# value) or when 'set -e' is active (causing even a spurious abort of
+# the script in this case).
+func_unset ()
+{
+ { eval $1=; (eval unset $1) >/dev/null 2>&1 && eval unset $1 || : ; }
+}
+
+
+# Make sure CDPATH doesn't cause `cd` commands to output the target dir.
+func_unset CDPATH
+
+# Make sure ${,E,F}GREP behave sanely.
+func_unset GREP_OPTIONS
+
## ------------------------- ##
## Locate command utilities. ##
@@ -259,7 +273,7 @@ test -z "$SED" && {
rm -f conftest.in conftest.tmp conftest.nl conftest.out
}
- func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin
+ func_path_progs "sed gsed" func_check_prog_sed "$PATH:/usr/xpg4/bin"
rm -f conftest.sed
SED=$func_path_progs_result
}
@@ -295,7 +309,7 @@ test -z "$GREP" && {
rm -f conftest.in conftest.tmp conftest.nl conftest.out
}
- func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin
+ func_path_progs "grep ggrep" func_check_prog_grep "$PATH:/usr/xpg4/bin"
GREP=$func_path_progs_result
}
@@ -360,6 +374,35 @@ sed_double_backslash="\
s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g
s/\n//g"
+# require_check_ifs_backslash
+# ---------------------------
+# Check if we can use backslash as IFS='\' separator, and set
+# $check_ifs_backshlash_broken to ':' or 'false'.
+require_check_ifs_backslash=func_require_check_ifs_backslash
+func_require_check_ifs_backslash ()
+{
+ _G_save_IFS=$IFS
+ IFS='\'
+ _G_check_ifs_backshlash='a\\b'
+ for _G_i in $_G_check_ifs_backshlash
+ do
+ case $_G_i in
+ a)
+ check_ifs_backshlash_broken=false
+ ;;
+ '')
+ break
+ ;;
+ *)
+ check_ifs_backshlash_broken=:
+ break
+ ;;
+ esac
+ done
+ IFS=$_G_save_IFS
+ require_check_ifs_backslash=:
+}
+
## ----------------- ##
## Global variables. ##
@@ -580,16 +623,16 @@ if test yes = "$_G_HAVE_PLUSEQ_OP"; then
{
$debug_cmd
- func_quote_for_eval "$2"
- eval "$1+=\\ \$func_quote_for_eval_result"
+ func_quote_arg pretty "$2"
+ eval "$1+=\\ \$func_quote_arg_result"
}'
else
func_append_quoted ()
{
$debug_cmd
- func_quote_for_eval "$2"
- eval "$1=\$$1\\ \$func_quote_for_eval_result"
+ func_quote_arg pretty "$2"
+ eval "$1=\$$1\\ \$func_quote_arg_result"
}
fi
@@ -1091,85 +1134,203 @@ func_relative_path ()
}
-# func_quote_for_eval ARG...
-# --------------------------
-# Aesthetically quote ARGs to be evaled later.
-# This function returns two values:
-# i) func_quote_for_eval_result
-# double-quoted, suitable for a subsequent eval
-# ii) func_quote_for_eval_unquoted_result
-# has all characters that are still active within double
-# quotes backslashified.
-func_quote_for_eval ()
+# func_quote_portable EVAL ARG
+# ----------------------------
+# Internal function to portably implement func_quote_arg. Note that we still
+# keep attention to performance here so we as much as possible try to avoid
+# calling sed binary (so far O(N) complexity as long as func_append is O(1)).
+func_quote_portable ()
{
$debug_cmd
- func_quote_for_eval_unquoted_result=
- func_quote_for_eval_result=
- while test 0 -lt $#; do
- case $1 in
- *[\\\`\"\$]*)
- _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;;
- *)
- _G_unquoted_arg=$1 ;;
- esac
- if test -n "$func_quote_for_eval_unquoted_result"; then
- func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg"
- else
- func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg"
+ $require_check_ifs_backslash
+
+ func_quote_portable_result=$2
+
+ # one-time-loop (easy break)
+ while true
+ do
+ if $1; then
+ func_quote_portable_result=`$ECHO "$2" | $SED \
+ -e "$sed_double_quote_subst" -e "$sed_double_backslash"`
+ break
fi
- case $_G_unquoted_arg in
- # Double-quote args containing shell metacharacters to delay
- # word splitting, command substitution and variable expansion
- # for a subsequent eval.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, so we specify it separately.
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- _G_quoted_arg=\"$_G_unquoted_arg\"
+ # Quote for eval.
+ case $func_quote_portable_result in
+ *[\\\`\"\$]*)
+ # Fallback to sed for $func_check_bs_ifs_broken=:, or when the string
+ # contains the shell wildcard characters.
+ case $check_ifs_backshlash_broken$func_quote_portable_result in
+ :*|*[\[\*\?]*)
+ func_quote_portable_result=`$ECHO "$func_quote_portable_result" \
+ | $SED "$sed_quote_subst"`
+ break
+ ;;
+ esac
+
+ func_quote_portable_old_IFS=$IFS
+ for _G_char in '\' '`' '"' '$'
+ do
+ # STATE($1) PREV($2) SEPARATOR($3)
+ set start "" ""
+ func_quote_portable_result=dummy"$_G_char$func_quote_portable_result$_G_char"dummy
+ IFS=$_G_char
+ for _G_part in $func_quote_portable_result
+ do
+ case $1 in
+ quote)
+ func_append func_quote_portable_result "$3$2"
+ set quote "$_G_part" "\\$_G_char"
+ ;;
+ start)
+ set first "" ""
+ func_quote_portable_result=
+ ;;
+ first)
+ set quote "$_G_part" ""
+ ;;
+ esac
+ done
+ done
+ IFS=$func_quote_portable_old_IFS
;;
- *)
- _G_quoted_arg=$_G_unquoted_arg
- ;;
+ *) ;;
esac
-
- if test -n "$func_quote_for_eval_result"; then
- func_append func_quote_for_eval_result " $_G_quoted_arg"
- else
- func_append func_quote_for_eval_result "$_G_quoted_arg"
- fi
- shift
+ break
done
+
+ func_quote_portable_unquoted_result=$func_quote_portable_result
+ case $func_quote_portable_result in
+ # double-quote args containing shell metacharacters to delay
+ # word splitting, command substitution and variable expansion
+ # for a subsequent eval.
+ # many bourne shells cannot handle close brackets correctly
+ # in scan sets, so we specify it separately.
+ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
+ func_quote_portable_result=\"$func_quote_portable_result\"
+ ;;
+ esac
}
-# func_quote_for_expand ARG
-# -------------------------
-# Aesthetically quote ARG to be evaled later; same as above,
-# but do not quote variable references.
-func_quote_for_expand ()
-{
- $debug_cmd
+# func_quotefast_eval ARG
+# -----------------------
+# Quote one ARG (internal). This is equivalent to 'func_quote_arg eval ARG',
+# but optimized for speed. Result is stored in $func_quotefast_eval.
+if test xyes = `(x=; printf -v x %q yes; echo x"$x") 2>/dev/null`; then
+ printf -v _GL_test_printf_tilde %q '~'
+ if test '\~' = "$_GL_test_printf_tilde"; then
+ func_quotefast_eval ()
+ {
+ printf -v func_quotefast_eval_result %q "$1"
+ }
+ else
+ # Broken older Bash implementations. Make those faster too if possible.
+ func_quotefast_eval ()
+ {
+ case $1 in
+ '~'*)
+ func_quote_portable false "$1"
+ func_quotefast_eval_result=$func_quote_portable_result
+ ;;
+ *)
+ printf -v func_quotefast_eval_result %q "$1"
+ ;;
+ esac
+ }
+ fi
+else
+ func_quotefast_eval ()
+ {
+ func_quote_portable false "$1"
+ func_quotefast_eval_result=$func_quote_portable_result
+ }
+fi
- case $1 in
- *[\\\`\"]*)
- _G_arg=`$ECHO "$1" | $SED \
- -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;;
- *)
- _G_arg=$1 ;;
+
+# func_quote_arg MODEs ARG
+# ------------------------
+# Quote one ARG to be evaled later. MODEs argument may contain zero or more
+# specifiers listed below separated by ',' character. This function returns two
+# values:
+# i) func_quote_arg_result
+# double-quoted (when needed), suitable for a subsequent eval
+# ii) func_quote_arg_unquoted_result
+# has all characters that are still active within double
+# quotes backslashified. Available only if 'unquoted' is specified.
+#
+# Available modes:
+# ----------------
+# 'eval' (default)
+# - escape shell special characters
+# 'expand'
+# - the same as 'eval'; but do not quote variable references
+# 'pretty'
+# - request aesthetic output, i.e. '"a b"' instead of 'a\ b'. This might
+# be used later in func_quote to get output like: 'echo "a b"' instead
+# of 'echo a\ b'. This is slower than default on some shells.
+# 'unquoted'
+# - produce also $func_quote_arg_unquoted_result which does not contain
+# wrapping double-quotes.
+#
+# Examples for 'func_quote_arg pretty,unquoted string':
+#
+# string | *_result | *_unquoted_result
+# ------------+-----------------------+-------------------
+# " | \" | \"
+# a b | "a b" | a b
+# "a b" | "\"a b\"" | \"a b\"
+# * | "*" | *
+# z="${x-$y}" | "z=\"\${x-\$y}\"" | z=\"\${x-\$y}\"
+#
+# Examples for 'func_quote_arg pretty,unquoted,expand string':
+#
+# string | *_result | *_unquoted_result
+# --------------+---------------------+--------------------
+# z="${x-$y}" | "z=\"${x-$y}\"" | z=\"${x-$y}\"
+func_quote_arg ()
+{
+ _G_quote_expand=false
+ case ,$1, in
+ *,expand,*)
+ _G_quote_expand=:
+ ;;
esac
- case $_G_arg in
- # Double-quote args containing shell metacharacters to delay
- # word splitting and command substitution for a subsequent eval.
- # Many Bourne shells cannot handle close brackets correctly
- # in scan sets, so we specify it separately.
- *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
- _G_arg=\"$_G_arg\"
+ case ,$1, in
+ *,pretty,*|*,expand,*|*,unquoted,*)
+ func_quote_portable $_G_quote_expand "$2"
+ func_quote_arg_result=$func_quote_portable_result
+ func_quote_arg_unquoted_result=$func_quote_portable_unquoted_result
+ ;;
+ *)
+ # Faster quote-for-eval for some shells.
+ func_quotefast_eval "$2"
+ func_quote_arg_result=$func_quotefast_eval_result
;;
esac
+}
+
- func_quote_for_expand_result=$_G_arg
+# func_quote MODEs ARGs...
+# ------------------------
+# Quote all ARGs to be evaled later and join them into single command. See
+# func_quote_arg's description for more info.
+func_quote ()
+{
+ $debug_cmd
+ _G_func_quote_mode=$1 ; shift
+ func_quote_result=
+ while test 0 -lt $#; do
+ func_quote_arg "$_G_func_quote_mode" "$1"
+ if test -n "$func_quote_result"; then
+ func_append func_quote_result " $func_quote_arg_result"
+ else
+ func_append func_quote_result "$func_quote_arg_result"
+ fi
+ shift
+ done
}
@@ -1215,8 +1376,8 @@ func_show_eval ()
_G_cmd=$1
_G_fail_exp=${2-':'}
- func_quote_for_expand "$_G_cmd"
- eval "func_notquiet $func_quote_for_expand_result"
+ func_quote_arg pretty,expand "$_G_cmd"
+ eval "func_notquiet $func_quote_arg_result"
$opt_dry_run || {
eval "$_G_cmd"
@@ -1241,8 +1402,8 @@ func_show_eval_locale ()
_G_fail_exp=${2-':'}
$opt_quiet || {
- func_quote_for_expand "$_G_cmd"
- eval "func_echo $func_quote_for_expand_result"
+ func_quote_arg expand,pretty "$_G_cmd"
+ eval "func_echo $func_quote_arg_result"
}
$opt_dry_run || {
@@ -1369,30 +1530,26 @@ func_lt_ver ()
# End:
#! /bin/sh
-# Set a version string for this script.
-scriptversion=2015-10-07.11; # UTC
-
# A portable, pluggable option parser for Bourne shell.
# Written by Gary V. Vaughan, 2010
-# Copyright (C) 2010-2015 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.
-
-# This program is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
+# This is free software. There is NO warranty; not even for
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+#
+# Copyright (C) 2010-2019, 2021 Bootstrap Authors
+#
+# This file is dual licensed under the terms of the MIT license
+# <https://opensource.org/license/MIT>, and GPL version 2 or later
+# <http://www.gnu.org/licenses/gpl-2.0.html>. You must apply one of
+# these licenses when using or redistributing this software or any of
+# the files within it. See the URLs above, or the file `LICENSE`
+# included in the Bootstrap distribution for the full license texts.
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
+# Please report bugs or propose patches to:
+# <https://github.com/gnulib-modules/bootstrap/issues>
-# You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
-
-# Please report bugs or propose patches to gary@gnu.org.
+# Set a version string for this script.
+scriptversion=2019-02-19.15; # UTC
## ------ ##
@@ -1415,7 +1572,7 @@ scriptversion=2015-10-07.11; # UTC
#
# In order for the '--version' option to work, you will need to have a
# suitably formatted comment like the one at the top of this file
-# starting with '# Written by ' and ending with '# warranty; '.
+# starting with '# Written by ' and ending with '# Copyright'.
#
# For '-h' and '--help' to work, you will also need a one line
# description of your script's purpose in a comment directly above the
@@ -1427,7 +1584,7 @@ scriptversion=2015-10-07.11; # UTC
# to display verbose messages only when your user has specified
# '--verbose'.
#
-# After sourcing this file, you can plug processing for additional
+# After sourcing this file, you can plug in processing for additional
# options by amending the variables from the 'Configuration' section
# below, and following the instructions in the 'Option parsing'
# section further down.
@@ -1476,8 +1633,8 @@ fatal_help="Try '\$progname --help' for more information."
## ------------------------- ##
# This section contains functions for adding, removing, and running hooks
-# to the main code. A hook is just a named list of of function, that can
-# be run in order later on.
+# in the main code. A hook is just a list of function names that can be
+# run in order later on.
# func_hookable FUNC_NAME
# -----------------------
@@ -1510,7 +1667,8 @@ func_add_hook ()
# func_remove_hook FUNC_NAME HOOK_FUNC
# ------------------------------------
-# Remove HOOK_FUNC from the list of functions called by FUNC_NAME.
+# Remove HOOK_FUNC from the list of hook functions to be called by
+# FUNC_NAME.
func_remove_hook ()
{
$debug_cmd
@@ -1519,10 +1677,28 @@ func_remove_hook ()
}
+# func_propagate_result FUNC_NAME_A FUNC_NAME_B
+# ---------------------------------------------
+# If the *_result variable of FUNC_NAME_A _is set_, assign its value to
+# *_result variable of FUNC_NAME_B.
+func_propagate_result ()
+{
+ $debug_cmd
+
+ func_propagate_result_result=:
+ if eval "test \"\${${1}_result+set}\" = set"
+ then
+ eval "${2}_result=\$${1}_result"
+ else
+ func_propagate_result_result=false
+ fi
+}
+
+
# func_run_hooks FUNC_NAME [ARG]...
# ---------------------------------
# Run all hook functions registered to FUNC_NAME.
-# It is assumed that the list of hook functions contains nothing more
+# It's assumed that the list of hook functions contains nothing more
# than a whitespace-delimited list of legal shell function names, and
# no effort is wasted trying to catch shell meta-characters or preserve
# whitespace.
@@ -1534,22 +1710,19 @@ func_run_hooks ()
case " $hookable_fns " in
*" $1 "*) ;;
- *) func_fatal_error "'$1' does not support hook funcions.n" ;;
+ *) func_fatal_error "'$1' does not support hook functions." ;;
esac
eval _G_hook_fns=\$$1_hooks; shift
for _G_hook in $_G_hook_fns; do
- if eval $_G_hook '"$@"'; then
- # store returned options list back into positional
- # parameters for next 'cmd' execution.
- eval _G_hook_result=\$${_G_hook}_result
- eval set dummy "$_G_hook_result"; shift
- _G_rc_run_hooks=:
+ func_unset "${_G_hook}_result"
+ eval $_G_hook '${1+"$@"}'
+ func_propagate_result $_G_hook func_run_hooks
+ if $func_propagate_result_result; then
+ eval set dummy "$func_run_hooks_result"; shift
fi
done
-
- $_G_rc_run_hooks && func_run_hooks_result=$_G_hook_result
}
@@ -1559,14 +1732,16 @@ func_run_hooks ()
## --------------- ##
# In order to add your own option parsing hooks, you must accept the
-# full positional parameter list in your hook function, you may remove/edit
-# any options that you action, and then pass back the remaining unprocessed
-# options in '<hooked_function_name>_result', escaped suitably for
-# 'eval'. In this case you also must return $EXIT_SUCCESS to let the
-# hook's caller know that it should pay attention to
-# '<hooked_function_name>_result'. Returning $EXIT_FAILURE signalizes that
-# arguments are left untouched by the hook and therefore caller will ignore the
-# result variable.
+# full positional parameter list from your hook function. You may remove
+# or edit any options that you action, and then pass back the remaining
+# unprocessed options in '<hooked_function_name>_result', escaped
+# suitably for 'eval'.
+#
+# The '<hooked_function_name>_result' variable is automatically unset
+# before your hook gets called; for best performance, only set the
+# *_result variable when necessary (i.e. don't call the 'func_quote'
+# function unnecessarily because it can be an expensive operation on some
+# machines).
#
# Like this:
#
@@ -1578,11 +1753,8 @@ func_run_hooks ()
# usage_message=$usage_message'
# -s, --silent don'\''t print informational messages
# '
-# # No change in '$@' (ignored completely by this hook). There is
-# # no need to do the equivalent (but slower) action:
-# # func_quote_for_eval ${1+"$@"}
-# # my_options_prep_result=$func_quote_for_eval_result
-# false
+# # No change in '$@' (ignored completely by this hook). Leave
+# # my_options_prep_result variable intact.
# }
# func_add_hook func_options_prep my_options_prep
#
@@ -1593,7 +1765,7 @@ func_run_hooks ()
#
# args_changed=false
#
-# # Note that for efficiency, we parse as many options as we can
+# # Note that, for efficiency, we parse as many options as we can
# # recognise in a loop before passing the remainder back to the
# # caller on the first unrecognised argument we encounter.
# while test $# -gt 0; do
@@ -1610,18 +1782,17 @@ func_run_hooks ()
# args_changed=:
# ;;
# *) # Make sure the first unrecognised option "$_G_opt"
-# # is added back to "$@", we could need that later
-# # if $args_changed is true.
+# # is added back to "$@" in case we need it later,
+# # if $args_changed was set to 'true'.
# set dummy "$_G_opt" ${1+"$@"}; shift; break ;;
# esac
# done
#
+# # Only call 'func_quote' here if we processed at least one argument.
# if $args_changed; then
-# func_quote_for_eval ${1+"$@"}
-# my_silent_option_result=$func_quote_for_eval_result
+# func_quote eval ${1+"$@"}
+# my_silent_option_result=$func_quote_result
# fi
-#
-# $args_changed
# }
# func_add_hook func_parse_options my_silent_option
#
@@ -1632,8 +1803,6 @@ func_run_hooks ()
#
# $opt_silent && $opt_verbose && func_fatal_help "\
# '--silent' and '--verbose' options are mutually exclusive."
-#
-# false
# }
# func_add_hook func_validate_options my_option_validation
#
@@ -1649,13 +1818,8 @@ func_options_finish ()
{
$debug_cmd
- _G_func_options_finish_exit=false
- if func_run_hooks func_options ${1+"$@"}; then
- func_options_finish_result=$func_run_hooks_result
- _G_func_options_finish_exit=:
- fi
-
- $_G_func_options_finish_exit
+ func_run_hooks func_options ${1+"$@"}
+ func_propagate_result func_run_hooks func_options_finish
}
@@ -1668,28 +1832,27 @@ func_options ()
{
$debug_cmd
- _G_rc_options=false
+ _G_options_quoted=false
for my_func in options_prep parse_options validate_options options_finish
do
- if eval func_$my_func '${1+"$@"}'; then
- eval _G_res_var='$'"func_${my_func}_result"
- eval set dummy "$_G_res_var" ; shift
- _G_rc_options=:
+ func_unset func_${my_func}_result
+ func_unset func_run_hooks_result
+ eval func_$my_func '${1+"$@"}'
+ func_propagate_result func_$my_func func_options
+ if $func_propagate_result_result; then
+ eval set dummy "$func_options_result"; shift
+ _G_options_quoted=:
fi
done
- # Save modified positional parameters for caller. As a top-level
- # options-parser function we always need to set the 'func_options_result'
- # variable (regardless the $_G_rc_options value).
- if $_G_rc_options; then
- func_options_result=$_G_res_var
- else
- func_quote_for_eval ${1+"$@"}
- func_options_result=$func_quote_for_eval_result
- fi
-
- $_G_rc_options
+ $_G_options_quoted || {
+ # As we (func_options) are top-level options-parser function and
+ # nobody quoted "$@" for us yet, we need to do it explicitly for
+ # caller.
+ func_quote eval ${1+"$@"}
+ func_options_result=$func_quote_result
+ }
}
@@ -1699,8 +1862,7 @@ func_options ()
# Note that when calling hook functions, we pass through the list of
# positional parameters. If a hook function modifies that list, and
# needs to propagate that back to rest of this script, then the complete
-# modified list must be put in 'func_run_hooks_result' before
-# returning $EXIT_SUCCESS (otherwise $EXIT_FAILURE is returned).
+# modified list must be put in 'func_run_hooks_result' before returning.
func_hookable func_options_prep
func_options_prep ()
{
@@ -1710,14 +1872,8 @@ func_options_prep ()
opt_verbose=false
opt_warning_types=
- _G_rc_options_prep=false
- if func_run_hooks func_options_prep ${1+"$@"}; then
- _G_rc_options_prep=:
- # save modified positional parameters for caller
- func_options_prep_result=$func_run_hooks_result
- fi
-
- $_G_rc_options_prep
+ func_run_hooks func_options_prep ${1+"$@"}
+ func_propagate_result func_run_hooks func_options_prep
}
@@ -1729,27 +1885,32 @@ func_parse_options ()
{
$debug_cmd
- func_parse_options_result=
-
- _G_rc_parse_options=false
+ _G_parse_options_requote=false
# this just eases exit handling
while test $# -gt 0; do
# Defer to hook functions for initial option parsing, so they
# get priority in the event of reusing an option name.
- if func_run_hooks func_parse_options ${1+"$@"}; then
- eval set dummy "$func_run_hooks_result"; shift
- _G_rc_parse_options=:
+ func_run_hooks func_parse_options ${1+"$@"}
+ func_propagate_result func_run_hooks func_parse_options
+ if $func_propagate_result_result; then
+ eval set dummy "$func_parse_options_result"; shift
+ # Even though we may have changed "$@", we passed the "$@" array
+ # down into the hook and it quoted it for us (because we are in
+ # this if-branch). No need to quote it again.
+ _G_parse_options_requote=false
fi
# Break out of the loop if we already parsed every option.
test $# -gt 0 || break
+ # We expect that one of the options parsed in this function matches
+ # and thus we remove _G_opt from "$@" and need to re-quote.
_G_match_parse_options=:
_G_opt=$1
shift
case $_G_opt in
--debug|-x) debug_cmd='set -x'
- func_echo "enabling shell trace mode"
+ func_echo "enabling shell trace mode" >&2
$debug_cmd
;;
@@ -1760,7 +1921,7 @@ func_parse_options ()
--warnings|--warning|-W)
if test $# = 0 && func_missing_arg $_G_opt; then
- _G_rc_parse_options=:
+ _G_parse_options_requote=:
break
fi
case " $warning_categories $1" in
@@ -1815,7 +1976,7 @@ func_parse_options ()
shift
;;
- --) _G_rc_parse_options=: ; break ;;
+ --) _G_parse_options_requote=: ; break ;;
-*) func_fatal_help "unrecognised option: '$_G_opt'" ;;
*) set dummy "$_G_opt" ${1+"$@"}; shift
_G_match_parse_options=false
@@ -1823,17 +1984,16 @@ func_parse_options ()
;;
esac
- $_G_match_parse_options && _G_rc_parse_options=:
+ if $_G_match_parse_options; then
+ _G_parse_options_requote=:
+ fi
done
-
- if $_G_rc_parse_options; then
+ if $_G_parse_options_requote; then
# save modified positional parameters for caller
- func_quote_for_eval ${1+"$@"}
- func_parse_options_result=$func_quote_for_eval_result
+ func_quote eval ${1+"$@"}
+ func_parse_options_result=$func_quote_result
fi
-
- $_G_rc_parse_options
}
@@ -1846,21 +2006,14 @@ func_validate_options ()
{
$debug_cmd
- _G_rc_validate_options=false
-
# Display all warnings if -W was not given.
test -n "$opt_warning_types" || opt_warning_types=" $warning_categories"
- if func_run_hooks func_validate_options ${1+"$@"}; then
- # save modified positional parameters for caller
- func_validate_options_result=$func_run_hooks_result
- _G_rc_validate_options=:
- fi
+ func_run_hooks func_validate_options ${1+"$@"}
+ func_propagate_result func_run_hooks func_validate_options
# Bail if the options were screwed!
$exit_cmd $EXIT_FAILURE
-
- $_G_rc_validate_options
}
@@ -1916,8 +2069,8 @@ func_missing_arg ()
# func_split_equals STRING
# ------------------------
-# Set func_split_equals_lhs and func_split_equals_rhs shell variables after
-# splitting STRING at the '=' sign.
+# Set func_split_equals_lhs and func_split_equals_rhs shell variables
+# after splitting STRING at the '=' sign.
test -z "$_G_HAVE_XSI_OPS" \
&& (eval 'x=a/b/c;
test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \
@@ -1932,8 +2085,9 @@ then
func_split_equals_lhs=${1%%=*}
func_split_equals_rhs=${1#*=}
- test "x$func_split_equals_lhs" = "x$1" \
- && func_split_equals_rhs=
+ if test "x$func_split_equals_lhs" = "x$1"; then
+ func_split_equals_rhs=
+ fi
}'
else
# ...otherwise fall back to using expr, which is often a shell builtin.
@@ -1943,7 +2097,7 @@ else
func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'`
func_split_equals_rhs=
- test "x$func_split_equals_lhs" = "x$1" \
+ test "x$func_split_equals_lhs=" = "x$1" \
|| func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'`
}
fi #func_split_equals
@@ -1969,7 +2123,7 @@ else
{
$debug_cmd
- func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'`
+ func_split_short_opt_name=`expr "x$1" : 'x\(-.\)'`
func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'`
}
fi #func_split_short_opt
@@ -2011,31 +2165,44 @@ func_usage_message ()
# func_version
# ------------
# Echo version message to standard output and exit.
+# The version message is extracted from the calling file's header
+# comments, with leading '# ' stripped:
+# 1. First display the progname and version
+# 2. Followed by the header comment line matching /^# Written by /
+# 3. Then a blank line followed by the first following line matching
+# /^# Copyright /
+# 4. Immediately followed by any lines between the previous matches,
+# except lines preceding the intervening completely blank line.
+# For example, see the header comments of this file.
func_version ()
{
$debug_cmd
printf '%s\n' "$progname $scriptversion"
$SED -n '
- /(C)/!b go
- :more
- /\./!{
- N
- s|\n# | |
- b more
- }
- :go
- /^# Written by /,/# warranty; / {
- s|^# ||
- s|^# *$||
- s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
- p
+ /^# Written by /!b
+ s|^# ||; p; n
+
+ :fwd2blnk
+ /./ {
+ n
+ b fwd2blnk
}
- /^# Written by / {
- s|^# ||
- p
+ p; n
+
+ :holdwrnt
+ s|^# ||
+ s|^# *$||
+ /^Copyright /!{
+ /./H
+ n
+ b holdwrnt
}
- /^warranty; /q' < "$progpath"
+
+ s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2|
+ G
+ s|\(\n\)\n*|\1|g
+ p; q' < "$progpath"
exit $?
}
@@ -2045,12 +2212,12 @@ func_version ()
# mode: shell-script
# sh-indentation: 2
# eval: (add-hook 'before-save-hook 'time-stamp)
-# time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC"
+# time-stamp-pattern: "30/scriptversion=%:y-%02m-%02d.%02H; # UTC"
# time-stamp-time-zone: "UTC"
# End:
# Set a version string.
-scriptversion='(GNU libtool) 2.4.6'
+scriptversion='(GNU libtool) 2.4.7'
# func_echo ARG...
@@ -2141,7 +2308,7 @@ include the following information:
compiler: $LTCC
compiler flags: $LTCFLAGS
linker: $LD (gnu? $with_gnu_ld)
- version: $progname $scriptversion Debian-2.4.6-15
+ version: $progname $scriptversion Debian-2.4.7-5
automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q`
autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q`
@@ -2197,7 +2364,7 @@ fi
# a configuration failure hint, and exit.
func_fatal_configuration ()
{
- func__fatal_error ${1+"$@"} \
+ func_fatal_error ${1+"$@"} \
"See the $PACKAGE documentation for more information." \
"Fatal configuration error."
}
@@ -2345,6 +2512,8 @@ libtool_options_prep ()
_G_rc_lt_options_prep=:
+ _G_rc_lt_options_prep=:
+
# Shorthand for --mode=foo, only valid as the first argument
case $1 in
clean|clea|cle|cl)
@@ -2375,11 +2544,9 @@ libtool_options_prep ()
if $_G_rc_lt_options_prep; then
# Pass back the list of options.
- func_quote_for_eval ${1+"$@"}
- libtool_options_prep_result=$func_quote_for_eval_result
+ func_quote eval ${1+"$@"}
+ libtool_options_prep_result=$func_quote_result
fi
-
- $_G_rc_lt_options_prep
}
func_add_hook func_options_prep libtool_options_prep
@@ -2482,11 +2649,9 @@ libtool_parse_options ()
if $_G_rc_lt_parse_options; then
# save modified positional parameters for caller
- func_quote_for_eval ${1+"$@"}
- libtool_parse_options_result=$func_quote_for_eval_result
+ func_quote eval ${1+"$@"}
+ libtool_parse_options_result=$func_quote_result
fi
-
- $_G_rc_lt_parse_options
}
func_add_hook func_parse_options libtool_parse_options
@@ -2543,8 +2708,8 @@ libtool_validate_options ()
}
# Pass back the unparsed argument list
- func_quote_for_eval ${1+"$@"}
- libtool_validate_options_result=$func_quote_for_eval_result
+ func_quote eval ${1+"$@"}
+ libtool_validate_options_result=$func_quote_result
}
func_add_hook func_validate_options libtool_validate_options
@@ -3510,8 +3675,8 @@ func_mode_compile ()
esac
done
- func_quote_for_eval "$libobj"
- test "X$libobj" != "X$func_quote_for_eval_result" \
+ func_quote_arg pretty "$libobj"
+ test "X$libobj" != "X$func_quote_arg_result" \
&& $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
&& func_warning "libobj name '$libobj' may not contain shell special characters."
func_dirname_and_basename "$obj" "/" ""
@@ -3584,8 +3749,8 @@ compiler."
func_to_tool_file "$srcfile" func_convert_file_msys_to_w32
srcfile=$func_to_tool_file_result
- func_quote_for_eval "$srcfile"
- qsrcfile=$func_quote_for_eval_result
+ func_quote_arg pretty "$srcfile"
+ qsrcfile=$func_quote_arg_result
# Only build a PIC object if we are building libtool libraries.
if test yes = "$build_libtool_libs"; then
@@ -3740,7 +3905,8 @@ This mode accepts the following additional options:
-prefer-non-pic try to build non-PIC objects only
-shared do not build a '.o' file suitable for static linking
-static only build a '.o' file suitable for static linking
- -Wc,FLAG pass FLAG directly to the compiler
+ -Wc,FLAG
+ -Xcompiler FLAG pass FLAG directly to the compiler
COMPILE-COMMAND is a command to be used in creating a 'standard' object file
from the given SOURCEFILE.
@@ -3846,6 +4012,8 @@ The following components of LINK-COMMAND are treated specially:
-weak LIBNAME declare that the target provides the LIBNAME interface
-Wc,FLAG
-Xcompiler FLAG pass linker-specific FLAG directly to the compiler
+ -Wa,FLAG
+ -Xassembler FLAG pass linker-specific FLAG directly to the assembler
-Wl,FLAG
-Xlinker FLAG pass linker-specific FLAG directly to the linker
-XCClinker FLAG pass link-specific FLAG to the compiler driver (CC)
@@ -4188,8 +4356,8 @@ func_mode_install ()
case $nonopt in *shtool*) :;; *) false;; esac
then
# Aesthetically quote it.
- func_quote_for_eval "$nonopt"
- install_prog="$func_quote_for_eval_result "
+ func_quote_arg pretty "$nonopt"
+ install_prog="$func_quote_arg_result "
arg=$1
shift
else
@@ -4199,8 +4367,8 @@ func_mode_install ()
# The real first argument should be the name of the installation program.
# Aesthetically quote it.
- func_quote_for_eval "$arg"
- func_append install_prog "$func_quote_for_eval_result"
+ func_quote_arg pretty "$arg"
+ func_append install_prog "$func_quote_arg_result"
install_shared_prog=$install_prog
case " $install_prog " in
*[\\\ /]cp\ *) install_cp=: ;;
@@ -4257,12 +4425,12 @@ func_mode_install ()
esac
# Aesthetically quote the argument.
- func_quote_for_eval "$arg"
- func_append install_prog " $func_quote_for_eval_result"
+ func_quote_arg pretty "$arg"
+ func_append install_prog " $func_quote_arg_result"
if test -n "$arg2"; then
- func_quote_for_eval "$arg2"
+ func_quote_arg pretty "$arg2"
fi
- func_append install_shared_prog " $func_quote_for_eval_result"
+ func_append install_shared_prog " $func_quote_arg_result"
done
test -z "$install_prog" && \
@@ -4273,8 +4441,8 @@ func_mode_install ()
if test -n "$install_override_mode" && $no_mode; then
if $install_cp; then :; else
- func_quote_for_eval "$install_override_mode"
- func_append install_shared_prog " -m $func_quote_for_eval_result"
+ func_quote_arg pretty "$install_override_mode"
+ func_append install_shared_prog " -m $func_quote_arg_result"
fi
fi
@@ -4570,8 +4738,8 @@ func_mode_install ()
relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'`
$opt_quiet || {
- func_quote_for_expand "$relink_command"
- eval "func_echo $func_quote_for_expand_result"
+ func_quote_arg expand,pretty "$relink_command"
+ eval "func_echo $func_quote_arg_result"
}
if eval "$relink_command"; then :
else
@@ -5350,7 +5518,8 @@ else
if test \"\$libtool_execute_magic\" != \"$magic\"; then
file=\"\$0\""
- qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"`
+ func_quote_arg pretty "$ECHO"
+ qECHO=$func_quote_arg_result
$ECHO "\
# A function that is used when there is no print builtin or printf.
@@ -5360,7 +5529,7 @@ func_fallback_echo ()
\$1
_LTECHO_EOF'
}
- ECHO=\"$qECHO\"
+ ECHO=$qECHO
fi
# Very basic option parsing. These options are (a) specific to
@@ -6703,9 +6872,9 @@ func_mode_link ()
while test "$#" -gt 0; do
arg=$1
shift
- func_quote_for_eval "$arg"
- qarg=$func_quote_for_eval_unquoted_result
- func_append libtool_args " $func_quote_for_eval_result"
+ func_quote_arg pretty,unquoted "$arg"
+ qarg=$func_quote_arg_unquoted_result
+ func_append libtool_args " $func_quote_arg_result"
# If the previous option needs an argument, assign it.
if test -n "$prev"; then
@@ -6941,6 +7110,13 @@ func_mode_link ()
prev=
continue
;;
+ xassembler)
+ func_append compiler_flags " -Xassembler $qarg"
+ prev=
+ func_append compile_command " -Xassembler $qarg"
+ func_append finalize_command " -Xassembler $qarg"
+ continue
+ ;;
xcclinker)
func_append linker_flags " $qarg"
func_append compiler_flags " $qarg"
@@ -7111,7 +7287,7 @@ func_mode_link ()
# These systems don't actually have a C library (as such)
test X-lc = "X$arg" && continue
;;
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
# Do not include libc due to us having libc/libc_r.
test X-lc = "X$arg" && continue
;;
@@ -7131,7 +7307,7 @@ func_mode_link ()
esac
elif test X-lc_r = "X$arg"; then
case $host in
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*)
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig* | *-*-midnightbsd*)
# Do not include libc_r directly, use -pthread flag.
continue
;;
@@ -7161,8 +7337,20 @@ func_mode_link ()
prev=xcompiler
continue
;;
-
- -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \
+ # Solaris ld rejects as of 11.4. Refer to Oracle bug 22985199.
+ -pthread)
+ case $host in
+ *solaris2*) ;;
+ *)
+ case "$new_inherited_linker_flags " in
+ *" $arg "*) ;;
+ * ) func_append new_inherited_linker_flags " $arg" ;;
+ esac
+ ;;
+ esac
+ continue
+ ;;
+ -mt|-mthreads|-kthread|-Kthread|-pthreads|--thread-safe \
|-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*)
func_append compiler_flags " $arg"
func_append compile_command " $arg"
@@ -7303,9 +7491,9 @@ func_mode_link ()
save_ifs=$IFS; IFS=,
for flag in $args; do
IFS=$save_ifs
- func_quote_for_eval "$flag"
- func_append arg " $func_quote_for_eval_result"
- func_append compiler_flags " $func_quote_for_eval_result"
+ func_quote_arg pretty "$flag"
+ func_append arg " $func_quote_arg_result"
+ func_append compiler_flags " $func_quote_arg_result"
done
IFS=$save_ifs
func_stripname ' ' '' "$arg"
@@ -7319,16 +7507,21 @@ func_mode_link ()
save_ifs=$IFS; IFS=,
for flag in $args; do
IFS=$save_ifs
- func_quote_for_eval "$flag"
- func_append arg " $wl$func_quote_for_eval_result"
- func_append compiler_flags " $wl$func_quote_for_eval_result"
- func_append linker_flags " $func_quote_for_eval_result"
+ func_quote_arg pretty "$flag"
+ func_append arg " $wl$func_quote_arg_result"
+ func_append compiler_flags " $wl$func_quote_arg_result"
+ func_append linker_flags " $func_quote_arg_result"
done
IFS=$save_ifs
func_stripname ' ' '' "$arg"
arg=$func_stripname_result
;;
+ -Xassembler)
+ prev=xassembler
+ continue
+ ;;
+
-Xcompiler)
prev=xcompiler
continue
@@ -7346,8 +7539,8 @@ func_mode_link ()
# -msg_* for osf cc
-msg_*)
- func_quote_for_eval "$arg"
- arg=$func_quote_for_eval_result
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
;;
# Flags to be passed through unchanged, with rationale:
@@ -7370,12 +7563,13 @@ func_mode_link ()
# -fuse-ld=* Linker select flags for GCC
# -static-* direct GCC to link specific libraries statically
# -fcilkplus Cilk Plus language extension features for C/C++
+ # -Wa,* Pass flags directly to the assembler
-64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
-t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \
-O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \
- -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus)
- func_quote_for_eval "$arg"
- arg=$func_quote_for_eval_result
+ -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus|-Wa,*)
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
func_append compile_command " $arg"
func_append finalize_command " $arg"
func_append compiler_flags " $arg"
@@ -7396,15 +7590,15 @@ func_mode_link ()
continue
else
# Otherwise treat like 'Some other compiler flag' below
- func_quote_for_eval "$arg"
- arg=$func_quote_for_eval_result
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
fi
;;
# Some other compiler flag.
-* | +*)
- func_quote_for_eval "$arg"
- arg=$func_quote_for_eval_result
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
;;
*.$objext)
@@ -7524,8 +7718,8 @@ func_mode_link ()
*)
# Unknown arguments in both finalize_command and compile_command need
# to be aesthetically quoted because they are evaled later.
- func_quote_for_eval "$arg"
- arg=$func_quote_for_eval_result
+ func_quote_arg pretty "$arg"
+ arg=$func_quote_arg_result
;;
esac # arg
@@ -8733,7 +8927,7 @@ func_mode_link ()
test CXX = "$tagname" && {
case $host_os in
linux*)
- case `$CC -V 2>&1 | sed 5q` in
+ case `$CC -V 2>&1 | $SED 5q` in
*Sun\ C*) # Sun C++ 5.9
func_suncc_cstd_abi
@@ -8906,7 +9100,7 @@ func_mode_link ()
#
case $version_type in
# correct linux to gnu/linux during the next big refactor
- darwin|freebsd-elf|linux|osf|windows|none)
+ darwin|freebsd-elf|linux|midnightbsd-elf|osf|windows|none)
func_arith $number_major + $number_minor
current=$func_arith_result
age=$number_minor
@@ -9000,7 +9194,7 @@ func_mode_link ()
versuffix=.$current.$revision
;;
- freebsd-elf)
+ freebsd-elf | midnightbsd-elf)
func_arith $current - $age
major=.$func_arith_result
versuffix=$major.$age.$revision
@@ -9226,7 +9420,7 @@ func_mode_link ()
*-*-netbsd*)
# Don't link with libc until the a.out ld.so is fixed.
;;
- *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
+ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-midnightbsd*)
# Do not include libc due to us having libc/libc_r.
;;
*-*-sco3.2v5* | *-*-sco5v6*)
@@ -10037,8 +10231,8 @@ EOF
for cmd in $concat_cmds; do
IFS=$save_ifs
$opt_quiet || {
- func_quote_for_expand "$cmd"
- eval "func_echo $func_quote_for_expand_result"
+ func_quote_arg expand,pretty "$cmd"
+ eval "func_echo $func_quote_arg_result"
}
$opt_dry_run || eval "$cmd" || {
lt_exit=$?
@@ -10131,8 +10325,8 @@ EOF
eval cmd=\"$cmd\"
IFS=$save_ifs
$opt_quiet || {
- func_quote_for_expand "$cmd"
- eval "func_echo $func_quote_for_expand_result"
+ func_quote_arg expand,pretty "$cmd"
+ eval "func_echo $func_quote_arg_result"
}
$opt_dry_run || eval "$cmd" || {
lt_exit=$?
@@ -10606,12 +10800,13 @@ EOF
elif eval var_value=\$$var; test -z "$var_value"; then
relink_command="$var=; export $var; $relink_command"
else
- func_quote_for_eval "$var_value"
- relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ func_quote_arg pretty "$var_value"
+ relink_command="$var=$func_quote_arg_result; export $var; $relink_command"
fi
done
- relink_command="(cd `pwd`; $relink_command)"
- relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+ func_quote eval cd "`pwd`"
+ func_quote_arg pretty,unquoted "($func_quote_result; $relink_command)"
+ relink_command=$func_quote_arg_unquoted_result
fi
# Only actually do things if not in dry run mode.
@@ -10851,13 +11046,15 @@ EOF
elif eval var_value=\$$var; test -z "$var_value"; then
relink_command="$var=; export $var; $relink_command"
else
- func_quote_for_eval "$var_value"
- relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
+ func_quote_arg pretty,unquoted "$var_value"
+ relink_command="$var=$func_quote_arg_unquoted_result; export $var; $relink_command"
fi
done
# Quote the link command for shipping.
- relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
- relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"`
+ func_quote eval cd "`pwd`"
+ relink_command="($func_quote_result; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
+ func_quote_arg pretty,unquoted "$relink_command"
+ relink_command=$func_quote_arg_unquoted_result
if test yes = "$hardcode_automatic"; then
relink_command=
fi