diff options
-rw-r--r-- | NEWS | 192 | ||||
-rw-r--r-- | README | 27 | ||||
-rwxr-xr-x | config.guess | 312 | ||||
-rwxr-xr-x | config.sub | 647 | ||||
-rwxr-xr-x | configure | 32 | ||||
-rw-r--r-- | configure.ac | 6 | ||||
-rw-r--r-- | doc/reference.conf | 38 | ||||
-rw-r--r-- | ltmain.sh | 10 | ||||
-rw-r--r-- | m4/ax_arg_openssl.m4 | 2 | ||||
-rw-r--r-- | m4/libtool.m4 | 6 | ||||
-rw-r--r-- | src/Makefile.am | 1 | ||||
-rw-r--r-- | src/Makefile.in | 1 | ||||
-rw-r--r-- | src/config-lexer.c | 1039 | ||||
-rw-r--r-- | src/config-lexer.l | 4 | ||||
-rw-r--r-- | src/config-parser.c | 1705 | ||||
-rw-r--r-- | src/config-parser.h | 279 | ||||
-rw-r--r-- | src/config-parser.y | 39 | ||||
-rw-r--r-- | src/config.c | 8 | ||||
-rw-r--r-- | src/config.h | 6 | ||||
-rw-r--r-- | src/irc.c | 104 | ||||
-rw-r--r-- | src/libopm/src/config.c | 33 | ||||
-rw-r--r-- | src/libopm/src/libopm.c | 66 | ||||
-rw-r--r-- | src/libopm/src/libopm.h | 3 | ||||
-rw-r--r-- | src/patchlevel.h | 2 | ||||
-rw-r--r-- | src/scan.c | 2 | ||||
-rw-r--r-- | src/serno.h | 1 |
26 files changed, 2467 insertions, 2098 deletions
@@ -1,160 +1,160 @@ +-- Noteworthy changes in version 1.1.9 (2020-11-16) +* Implemented support for loading a user-provided private key and tls client + certificate. The `irc::rsa_private_key_file`and `irc::tls_certificate_file` + configuration directives have been added for this. + As a side effect this now allows HOPM to use certificate fingerprints for + NickServ authentication +* The `vhost` configuration directive found in the irc {} and scanner {} blocks + has been renamed to `bind` + + -- Noteworthy changes in version 1.1.8 (2020-07-05) -o) Minimum supported OpenSSL version is 1.1.1 now -o) Experimental TLS support for the irc client part has been implemented. We - only do TLSv1.2 and higher -o) The irc::tls and irc::tls_hostname_verification configuration directives - have been added -o) A possible out-of-bounds write in the irc parser logic has been fixed +* Minimum supported OpenSSL version is 1.1.1 now +* Experimental TLS support for the irc client part has been implemented. We + only do TLSv1.2 and higher +* The `irc::tls` and `irc::tls_hostname_verification` configuration directives + have been added +* A possible out-of-bounds write in the irc parser logic has been fixed -- Noteworthy changes in version 1.1.7 (2020-04-19) -o) Fixed github issue #31: hopm attempts to open stderr for logging in - non-debug/fork mode which can cause hopm to exit silently +* Fixed github issue #31: hopm attempts to open stderr for logging in + non-debug/fork mode which can cause hopm to exit silently -- Noteworthy changes in version 1.1.6 (2019-04-21) -o) Fixed issue with ssh banner scans where hopm would test connections only - against the 'target_string' that's defined last in the scanner{} block -o) Minimum supported OpenSSL version is 1.0.1f now +* Fixed issue with ssh banner scans where hopm would test connections only + against the `target_string` that's defined last in the scanner{} block +* Minimum supported OpenSSL version is 1.0.1f now -- Noteworthy changes in version 1.1.5 (2018-10-14) -o) The ':', and ',' nickname delimiters work again -o) Fixed a bug where the hopm process couldn't be restarted under certain - conditions -o) The hopm process can now be restarted from the command line via "kill -HUP" -o) Added --enable-efence switch to allow easy linking with the - electric fence memory debugger library -o) Implemented proper support to kill users with vulnerable SSH versions by - version announcement. Patch provided by falsovsky (Pedro de Oliveira). See - doc/reference.conf for more information. -o) Minimum supported OpenSSL version is 1.0.1d now +* The `:`, and `,` nickname delimiters work again +* Fixed a bug where the hopm process couldn't be restarted under certain + conditions +* The hopm process can now be restarted from the command line via `kill -HUP` +* Added `--enable-efence` switch to allow easy linking with the + electric fence memory debugger library +* Implemented proper support to kill users with vulnerable SSH versions by + version announcement. Patch provided by falsovsky (Pedro de Oliveira). See + `doc/reference.conf` for more information. +* Minimum supported OpenSSL version is 1.0.1d now -- Noteworthy changes in version 1.1.4 (2017-04-05) -o) IPv6 blacklist support has been implemented -o) The CHECK command now accepts IPv6 addresses -o) The negative cache has been rewritten to use latest Net::Patricia - C sources and does support IPv6 now -o) Further code cleanups and optimizations +* IPv6 blacklist support has been implemented +* The `CHECK` command now accepts IPv6 addresses +* The negative cache has been rewritten to use latest Net::Patricia C sources + and does support IPv6 now -- Noteworthy changes in version 1.1.3 (2016-09-26) -o) Allow inclusion of other configuration files in the main hopm.conf - file. See doc/reference.conf for further information on how to use - the new .include configuration directive. +* Allow inclusion of other configuration files in the main `hopm.conf` file. + See `doc/reference.conf` for further information on how to use the new + `.include` configuration directive. -- Noteworthy changes in version 1.1.2 (2016-05-15) -o) Fixed archaic bug which can cause the scanner to either detect nothing or - to detect everything and therefore even kill legit clients +* Fixed archaic bug which can cause the scanner to either detect nothing or to + detect everything and therefore even kill legit clients -- Noteworthy changes in version 1.1.1 (2016-01-03) -o) Added 'command_queue_size', 'command_interval', and 'command_timeout', - configuration directives to the options {} block. See doc/reference.conf - for more information. -o) Various updates to the reference.conf; added updated 'connregex' directives - for ircd-hybrid in conjunction with user mode +F (far connect notices), and - UnrealIRCd 4.0.0, which now uses a different format for connect notices -o) Minor code cleanups +* Added `command_queue_size`, `command_interval`, and `command_timeout`, + configuration directives to the options {} block. See `doc/reference.conf` + for more information. +* Various updates to the `reference.conf`; added updated `connregex` directives + for ircd-hybrid in conjunction with user mode +F (far connect notices), and + UnrealIRCd 4.0.0, which now uses a different format for connect notices -- Noteworthy changes in version 1.1.0 (2015-08-07) -o) options::pidfile and options::scanlog can now be relative pathnames -o) Due to security reasons the PROTOCOLS command has been removed again +* `options::pidfile` and `options::scanlog` can now be relative pathnames +* Due to security reasons the `PROTOCOLS` command has been removed again -- Noteworthy changes in version 1.1.0beta1 (2015-07-02) -o) Added HTTPS support for SSL/TLS-enabled HTTP proxies which seem to be - used quite a lot on IRC nowadays. LibreSSL or OpenSSL 0.9.8o and above - is required for this to work. -o) Added new HTTPS and HTTPSPOST protocol configuration directives to the - scanner {} block. +* Added HTTPS support for SSL/TLS-enabled HTTP proxies which seem to be used + quite a lot on IRC nowadays. LibreSSL or OpenSSL 0.9.8o and above is required + for this to work. +* Added new `HTTPS` and `HTTPSPOST` protocol configuration directives to the + scanner {} block -- Noteworthy changes in version 1.0.8 (2015-06-25) -o) Added options::reconnectinterval configuration option. See doc/reference.conf - for more information. -o) Added options::dns_timeout configuration option. See doc/reference.conf - for more information. -o) Further modernizations and cleanups to the build system -o) HOPM now compiles with -fstack-protector-strong and -fstack-protector, - respectively, depending on what the compiler supports -o) Added --enable-assert switch to ./configure. assert() statements are now - disabled by default and can be enabled with ./configure --enable-assert -o) Added --enable-warnings switch to ./configure, which enables various - compiler warnings if supported by the compiler +* Added `options::reconnectinterval` configuration option. See `doc/reference.conf` + for more information. +* Added `options::dns_timeout` configuration option. See `doc/reference.conf` + for more information. +* Further modernizations and cleanups to the build system +* HOPM now compiles with `-fstack-protector-strong` and `-fstack-protector`, + respectively, depending on what the compiler supports +* Added `--enable-assert` switch to `./configure`. assert() statements are now + disabled by default and can be enabled with `./configure --enable-assert` +* Added `--enable-warnings` switch to `./configure`, which enables various + compiler warnings if supported by the compiler -- Noteworthy changes in version 1.0.7 (2015-06-06) -o) HOPM can now detect Dreamboxes with default root passwords -o) Fixed bug where the configuration parser would report syntax errors - with invalid line numbers when there are multi-line C-style - comments in the config file -o) Minor code cleanups +* HOPM can now detect Dreamboxes with default root passwords +* Fixed bug where the configuration parser would report syntax errors with + invalid line numbers when there are multi-line C-style comments in the + config file -- Noteworthy changes in version 1.0.6 (2015-05-27) -o) HOPM now catches MikroTik HttpProxies +* HOPM now catches MikroTik HttpProxies -- Noteworthy changes in version 1.0.5 (2015-05-04) -o) Fixed bug where HOPM couldn't connect to the server specified - in the irc {} block on some OS +* Fixed bug where HOPM couldn't connect to the server specified in the irc {} + block on some OS -- Noteworthy changes in version 1.0.4 (2015-03-17) -o) Log timestamp format is ISO8601 now -o) Added 'protocols' command which dumps a list of configured scanners - and their associated protocols/ports to a channel -o) Code cleanups and performance improvements +* Log timestamp format is ISO8601 now +* Added `protocols` command which dumps a list of configured scanners and their + associated protocols/ports to a channel -- Noteworthy changes in version 1.0.3 (2015-01-28) -o) Fixed bug where HOPM wouldn't try re-connecting to the server in - case the connection got lost -o) Added irc::notice configuration option +* Fixed bug where HOPM wouldn't try re-connecting to the server in case the + connection got lost +* Added `irc::notice` configuration option -- Noteworthy changes in version 1.0.2 (2015-01-12) -o) Added options::negcache_rebuild configuration option -o) Added basic IPv6 support allowing HOPM to bind and - connect to IPv6 addresses -o) Many code cleanups and optimizations +* Added `options::negcache_rebuild` configuration option +* Added basic IPv6 support allowing HOPM to bind and connect to IPv6 addresses -- Noteworthy changes in version 1.0.1 (2015-01-06) -o) Fixed build on OS X -o) More code cleanups, no user-visible changes +* Fixed build on OS X -- Noteworthy changes in version 1.0.0 (2015-01-03) -o) Minor stabilization and performance improvements +* Minor stabilization and performance improvements -- Noteworthy changes in version 1.0.0beta2 (2014-12-31) -o) Added irc::readtimeout configuration option -o) Many code cleanups and optimizations -o) Worked towards IPv6 support -o) Fixed reference.conf from causing syntax errors -o) HOPM now uses poll() for I/O event notification instead of select() +* Added `irc::readtimeout` configuration option +* Worked towards IPv6 support +* Fixed `reference.conf` from causing syntax errors +* HOPM now uses poll() for I/O event notification instead of select() -- Noteworthy changes in version 1.0.0beta1 (2014-12-25) -######################################################################## -o) NOTE: this is the first release of the hybrid open proxy monitor (HOPM) - fully based off the discontinued blitzed open proxy monitor (BOPM) 3.1.3 -######################################################################## -o) Modernized and cleaned up build system -o) Modernized the example configuration file. Removed/updated blacklist entries. -o) The configuration parser now does support time and size units -o) The configuration parser now does support c++ style comments -o) Fixed a memory leak in conjunction with manual scans -o) Fixed weird behaviour in the command parser -o) Code hardening. Replaced occurences of strcpy/strcat with strlcpy/strlcat, etc. -o) Various code cleanups and optimizations -o) The irc::away configuration option is now optional +* **NOTE:** this is the first release of the hybrid open proxy monitor (HOPM) + fully based off the discontinued blitzed open proxy monitor (BOPM) 3.1.3 +* Modernized and cleaned up build system +* Modernized the example configuration file. Removed/updated blacklist entries. +* The configuration parser now does support time and size units +* The configuration parser now does support c++ style comments +* Fixed a memory leak in conjunction with manual scans +* Fixed weird behaviour in the command parser +* Code hardening. Replaced occurences of strcpy/strcat with strlcpy/strlcat, etc. +* Various code cleanups and optimizations +* The `irc::away` configuration option is now optional -------------------------------------------------------------------------------- @@ -3,7 +3,7 @@ Introduction HOPM (Hybrid Open Proxy Monitor) is an open-proxy monitoring bot designed to monitor an individual server (all servers on the network have to run their own -bot if the IRCD does not support `farconnect` user mode) with a local +bot if the IRCD does not support the "far connect" user mode) with a local operator {} block and monitor connections. When a client connects to a server, HOPM will scan the connection for insecure proxies. Insecure proxies are determined by attempting to connect the proxy back to another host (usually the @@ -21,7 +21,7 @@ Requirements * An IRCD, which presents connection notices in a format, which HOPM recognizes; * A host with full connectivity for all the ports you wish to scan. i.e. is NOT -transparently proxied -- many domestic Internet connections have port 80 +transparently proxied -- many domestic internet connections have port 80 transparently proxied and this produces completely unpredictable results, sometimes as severe as 100% of clients being K:lined; @@ -45,19 +45,19 @@ Compatibility * Charybdis 3.4.x HOPM is easily suitable for any other IRCD with little modification (`connregex` -in hopm.conf). However, if an IRCD does not send IP addresses in a connection +in `hopm.conf`). However, if an IRCD does not send IP addresses in a connection notice, HOPM will not work. Command-line options ==================== -`-c <name>` Configuration filename. By default, HOPM reads hopm.conf, - `-c foo` will cause HOPM to read foo.conf. The primary use for +`-c <name>` Configuration filename. By default, HOPM reads `hopm.conf`, + `-c foo` will cause HOPM to read `foo.conf`. The primary use for this is to run multiple HOPM from one directory. -`-d` Debug mode. HOPM will not fork and will write logs to stderr. - Multiple -d increase debug level. +`-d` Debug mode. HOPM will not fork and will write logs to `stderr`. + Multiple `-d` increase debug level. Operator channel commands @@ -65,23 +65,23 @@ Operator channel commands `<bot> check <host> [scanner]` Manually scans host for insecure proxies and outputs all errors. If scanner is not given, - HOPM will scan on all scanners.NOTE: this will - NOT add a kline if it finds a proxy. + HOPM will scan on all scanners. NOTE: this will + not add a kline if it finds a proxy. `<bot> stats` Outputs scan stats, uptime and connection count. `<bot> fdstat` Outputs info about file descriptors in use. -Also, if several HOPM are present in one channel, they will all respond to !all, +Also, if several HOPM are present in one channel, they will all respond to `!all`, for example `!all stats`. Rehashing HOPM ============== -A /quote KILL on HOPM will cause the process to restart, rehashing the +A `/quote KILL` on HOPM will cause the process to restart, rehashing the configuration file and ending all queued scans. The same can be achieved -with "kill -HUP" from the command line. +with `kill -HUP` from the command line. Logging @@ -92,7 +92,7 @@ which by default can be found at `$HOME/hopm/var/log/hopm.log`. There is also a configuration option, `scanlog`, to log all proxy scans initiated, which can be quite useful if you receive an abuse report related to portscanning. -These log files, especially the scan.log, can grow quite large. It is suggested +These log files, especially the `scan.log`, can grow quite large. It is suggested that you arrange for these files to be rotated periodically. You should send a `USR1` signal to HOPM after moving its logfiles -- this will cause HOPM to reopen those files. @@ -101,6 +101,7 @@ reopen those files. Contact information =================== +* Home page: https://www.ircd-hybrid.org * Bug reports: bugs@ircd-hybrid.org * IRC: #ircd-coders on irc.ircd-hybrid.org * GitHub: https://github.com/ircd-hybrid/hopm diff --git a/config.guess b/config.guess index 4cd9454..0fc11ed 100755 --- a/config.guess +++ b/config.guess @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2019 Free Software Foundation, Inc. +# Copyright 1992-2020 Free Software Foundation, Inc. -timestamp='2019-04-28' +timestamp='2020-11-07' # 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 @@ -32,7 +32,7 @@ timestamp='2019-04-28' # Please send patches to <config-patches@gnu.org>. -me=`echo "$0" | sed -e 's,.*/,,'` +me=$(echo "$0" | sed -e 's,.*/,,') usage="\ Usage: $0 [OPTION] @@ -50,7 +50,7 @@ version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2019 Free Software Foundation, Inc. +Copyright 1992-2020 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." @@ -99,9 +99,11 @@ tmp= 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 - { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$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" 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 ; } @@ -129,10 +131,10 @@ 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_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown +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_VERSION=$( (uname -v) 2>/dev/null) || UNAME_VERSION=unknown case "$UNAME_SYSTEM" in Linux|GNU|GNU/*) @@ -148,17 +150,15 @@ Linux|GNU|GNU/*) #elif defined(__dietlibc__) LIBC=dietlibc #else + #include <stdarg.h> + #ifdef __DEFINED_va_list + LIBC=musl + #else LIBC=gnu #endif + #endif EOF - eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`" - - # 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 - fi + eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g')" ;; esac @@ -177,19 +177,20 @@ 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 || \ + UNAME_MACHINE_ARCH=$( (uname -p 2>/dev/null || \ "/sbin/$sysctl" 2>/dev/null || \ "/usr/sbin/$sysctl" 2>/dev/null || \ - echo unknown)` + echo unknown)) case "$UNAME_MACHINE_ARCH" in + aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; 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'` + 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="$UNAME_MACHINE_ARCH"-unknown ;; @@ -220,7 +221,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in case "$UNAME_MACHINE_ARCH" in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' - abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` + abi=$(echo "$UNAME_MACHINE_ARCH" | sed -e "$expr") ;; esac # The OS release @@ -233,7 +234,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in release='-gnu' ;; *) - release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` + release=$(echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2) ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: @@ -242,15 +243,15 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in echo "$machine-${os}${release}${abi-}" exit ;; *:Bitrig:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` + UNAME_MACHINE_ARCH=$(arch | sed 's/Bitrig.//') echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE" exit ;; *:OpenBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` + UNAME_MACHINE_ARCH=$(arch | sed 's/OpenBSD.//') echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE" exit ;; *:LibertyBSD:*:*) - UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + UNAME_MACHINE_ARCH=$(arch | sed 's/^.*BSD\.//') echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE" exit ;; *:MidnightBSD:*:*) @@ -262,6 +263,9 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:SolidBSD:*:*) echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE" exit ;; + *:OS108:*:*) + echo "$UNAME_MACHINE"-unknown-os108_"$UNAME_RELEASE" + exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd"$UNAME_RELEASE" exit ;; @@ -271,26 +275,29 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in *:Sortix:*:*) echo "$UNAME_MACHINE"-unknown-sortix exit ;; + *:Twizzler:*:*) + echo "$UNAME_MACHINE"-unknown-twizzler + exit ;; *:Redox:*:*) echo "$UNAME_MACHINE"-unknown-redox exit ;; mips:OSF1:*.*) - echo mips-dec-osf1 - exit ;; + echo mips-dec-osf1 + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` + UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $3}') ;; *5.*) - UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + UNAME_RELEASE=$(/usr/sbin/sizer -v | awk '{print $4}') ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # 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` + ALPHA_CPU_TYPE=$(/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1) case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE=alpha ;; @@ -328,7 +335,7 @@ 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`" + 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 @@ -362,7 +369,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in exit ;; 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 + if test "$( (/bin/universe) 2>/dev/null)" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd @@ -375,17 +382,17 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) - case `/usr/bin/uname -p` in + case $(/usr/bin/uname -p) in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) - echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" + echo "$UNAME_MACHINE"-ibm-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" exit ;; sun4H:SunOS:5.*:*) - echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + echo sparc-hal-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) - echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`" + echo sparc-sun-solaris2"$(echo "$UNAME_RELEASE" | sed -e 's/[^.]*//')" exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux"$UNAME_RELEASE" @@ -396,7 +403,7 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in # 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) | \ grep IS_64BIT_ARCH >/dev/null @@ -404,30 +411,30 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in SUN_ARCH=x86_64 fi fi - echo "$SUN_ARCH"-pc-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + echo "$SUN_ARCH"-pc-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; 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/[^.]*//'`" + echo sparc-sun-solaris3"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; sun4*:SunOS:*:*) - case "`/usr/bin/arch -k`" in + case "$(/usr/bin/arch -k)" in Series*|S4*) - UNAME_RELEASE=`uname -v` + 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/-/_/'`" + echo sparc-sun-sunos"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/')" exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos"$UNAME_RELEASE" exit ;; sun*:*:4.2BSD:*) - UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` + 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" ;; @@ -507,8 +514,8 @@ case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && - dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && - SYSTEM_NAME=`"$dummy" "$dummyarg"` && + 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 ;; @@ -535,11 +542,11 @@ EOF exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures - UNAME_PROCESSOR=`/usr/bin/uname -p` - if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ] + UNAME_PROCESSOR=$(/usr/bin/uname -p) + 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" else @@ -563,17 +570,17 @@ EOF echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) - echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`" + echo mips-sgi-irix"$(echo "$UNAME_RELEASE"|sed -e 's/-/_/g')" exit ;; ????????: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 ' + exit ;; # Note that: echo "'$(uname -s)'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) - if [ -x /usr/bin/oslevel ] ; then - IBM_REV=`/usr/bin/oslevel` + if test -x /usr/bin/oslevel ; then + IBM_REV=$(/usr/bin/oslevel) else IBM_REV="$UNAME_VERSION.$UNAME_RELEASE" fi @@ -593,7 +600,7 @@ EOF exit(0); } EOF - if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` + if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") then echo "$SYSTEM_NAME" else @@ -606,15 +613,15 @@ EOF fi exit ;; *:AIX:*:[4567]) - IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` + 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 IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi - if [ -x /usr/bin/lslpp ] ; then - IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | - awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` + 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" fi @@ -642,14 +649,14 @@ EOF echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) - HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + 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 - sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` - sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` + 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 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 @@ -661,7 +668,7 @@ EOF esac ;; esac fi - if [ "$HP_ARCH" = "" ]; then + if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" @@ -696,11 +703,11 @@ EOF exit (0); } EOF - (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` + (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=$("$dummy") test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ "$HP_ARCH" = hppa2.0w ] + if test "$HP_ARCH" = hppa2.0w then set_cc_for_build @@ -724,7 +731,7 @@ EOF echo "$HP_ARCH"-hp-hpux"$HPUX_REV" exit ;; ia64:HP-UX:*:*) - HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'` + HPUX_REV=$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//') echo ia64-hp-hpux"$HPUX_REV" exit ;; 3050*:HI-UX:*:*) @@ -754,7 +761,7 @@ EOF exit (0); } EOF - $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && + $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=$("$dummy") && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; @@ -774,7 +781,7 @@ EOF echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) - if [ -x /usr/sbin/sysversion ] ; then + if test -x /usr/sbin/sysversion ; then echo "$UNAME_MACHINE"-unknown-osf1mk else echo "$UNAME_MACHINE"-unknown-osf1 @@ -823,14 +830,14 @@ EOF echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/' exit ;; 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/ /_/'` + 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 ;; 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/ /_/'` + 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 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) @@ -843,25 +850,25 @@ EOF echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE" exit ;; arm:FreeBSD:*:*) - UNAME_PROCESSOR=`uname -p` + 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 - echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi + echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabi else - echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf + echo "${UNAME_PROCESSOR}"-unknown-freebsd"$(echo ${UNAME_RELEASE}|sed -e 's/[-(].*//')"-gnueabihf fi exit ;; *:FreeBSD:*:*) - UNAME_PROCESSOR=`/usr/bin/uname -p` + UNAME_PROCESSOR=$(/usr/bin/uname -p) 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/[-(].*//'`" + echo "$UNAME_PROCESSOR"-unknown-freebsd"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')" exit ;; i*:CYGWIN*:*) echo "$UNAME_MACHINE"-pc-cygwin @@ -897,15 +904,15 @@ EOF echo x86_64-pc-cygwin exit ;; prep*:SunOS:5.*:*) - echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`" + echo powerpcle-unknown-solaris2"$(echo "$UNAME_RELEASE"|sed -e 's/[^.]*//')" exit ;; *:GNU:*:*) # the GNU system - echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`" + echo "$(echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,')-unknown-$LIBC$(echo "$UNAME_RELEASE"|sed -e 's,/.*$,,')" exit ;; *: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" + echo "$UNAME_MACHINE-unknown-$(echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]")$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')-$LIBC" exit ;; *:Minix:*:*) echo "$UNAME_MACHINE"-unknown-minix @@ -918,7 +925,7 @@ EOF echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" exit ;; 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 ;; @@ -1027,7 +1034,7 @@ EOF #endif #endif EOF - eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'`" + eval "$($CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI')" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) @@ -1047,7 +1054,7 @@ EOF exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level - case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in + 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" ;; @@ -1087,7 +1094,17 @@ EOF echo "$UNAME_MACHINE"-dec-linux-"$LIBC" exit ;; x86_64:Linux:*:*) - 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 + echo "$UNAME_MACHINE"-pc-linux-"$LIBCABI" exit ;; xtensa*:Linux:*:*) echo "$UNAME_MACHINE"-unknown-linux-"$LIBC" @@ -1127,7 +1144,7 @@ EOF echo "$UNAME_MACHINE"-pc-msdosdjgpp exit ;; i*86:*:4.*:*) - UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` + 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" else @@ -1136,7 +1153,7 @@ EOF exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. - case `/bin/uname -X | grep "^Machine"` in + case $(/bin/uname -X | grep "^Machine") in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; @@ -1145,10 +1162,10 @@ EOF exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then - UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` + UNAME_REL=$(sed -n 's/.*Version //p' </usr/options/cb.name) echo "$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/.*= //')` + UNAME_REL=$( (/bin/uname -X|grep Release|sed -e 's/.*= //')) (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 @@ -1198,7 +1215,7 @@ EOF 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) OS_REL='' test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ @@ -1209,7 +1226,7 @@ EOF NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ - && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` + && OS_REL=.$(sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ @@ -1242,7 +1259,7 @@ EOF exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then - UNAME_MACHINE=`(uname -p) 2>/dev/null` + UNAME_MACHINE=$( (uname -p) 2>/dev/null) echo "$UNAME_MACHINE"-sni-sysv4 else echo ns32k-sni-sysv @@ -1276,7 +1293,7 @@ EOF echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) - if [ -d /usr/nec ]; then + if test -d /usr/nec; then echo mips-nec-sysv"$UNAME_RELEASE" else echo mips-unknown-sysv"$UNAME_RELEASE" @@ -1324,44 +1341,48 @@ EOF *:Rhapsody:*:*) echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE" exit ;; + arm64:Darwin:*:*) + echo aarch64-apple-darwin"$UNAME_RELEASE" + exit ;; *:Darwin:*:*) - UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown - 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 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) - UNAME_PROCESSOR=`uname -p` + UNAME_PROCESSOR=$(uname -p) if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc @@ -1429,10 +1450,10 @@ EOF echo mips-sei-seiux"$UNAME_RELEASE" exit ;; *:DragonFly:*:*) - echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`" + echo "$UNAME_MACHINE"-unknown-dragonfly"$(echo "$UNAME_RELEASE"|sed -e 's/[-(].*//')" exit ;; *:*VMS:*:*) - UNAME_MACHINE=`(uname -p) 2>/dev/null` + UNAME_MACHINE=$( (uname -p) 2>/dev/null) case "$UNAME_MACHINE" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; @@ -1442,7 +1463,7 @@ EOF echo i386-pc-xenix exit ;; i*86:skyos:*:*) - echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`" + echo "$UNAME_MACHINE"-pc-skyos"$(echo "$UNAME_RELEASE" | sed -e 's/ .*$//')" exit ;; i*86:rdos:*:*) echo "$UNAME_MACHINE"-pc-rdos @@ -1500,7 +1521,7 @@ main () #define __ARCHITECTURE__ "m68k" #endif int version; - version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; + 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 @@ -1592,7 +1613,7 @@ main () } EOF -$CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`$dummy` && +$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. @@ -1620,6 +1641,12 @@ 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 and https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub +EOF + +year=$(echo $timestamp | sed 's,-.*,,') +# shellcheck disable=SC2003 +if test "$(expr "$(date +%Y)" - "$year")" -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 @@ -1627,26 +1654,27 @@ provide the necessary information to handle your system. config.guess timestamp = $timestamp -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` +uname -m = $( (uname -m) 2>/dev/null || echo unknown) +uname -r = $( (uname -r) 2>/dev/null || echo unknown) +uname -s = $( (uname -s) 2>/dev/null || echo unknown) +uname -v = $( (uname -v) 2>/dev/null || echo unknown) -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null` +/usr/bin/uname -p = $( (/usr/bin/uname -p) 2>/dev/null) +/bin/uname -X = $( (/bin/uname -X) 2>/dev/null) -hostinfo = `(hostinfo) 2>/dev/null` -/bin/universe = `(/bin/universe) 2>/dev/null` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` -/bin/arch = `(/bin/arch) 2>/dev/null` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` +hostinfo = $( (hostinfo) 2>/dev/null) +/bin/universe = $( (/bin/universe) 2>/dev/null) +/usr/bin/arch -k = $( (/usr/bin/arch -k) 2>/dev/null) +/bin/arch = $( (/bin/arch) 2>/dev/null) +/usr/bin/oslevel = $( (/usr/bin/oslevel) 2>/dev/null) +/usr/convex/getsysinfo = $( (/usr/convex/getsysinfo) 2>/dev/null) UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF +fi exit 1 @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2019 Free Software Foundation, Inc. +# Copyright 1992-2020 Free Software Foundation, Inc. -timestamp='2019-01-05' +timestamp='2020-11-07' # 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 @@ -50,7 +50,7 @@ timestamp='2019-01-05' # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. -me=`echo "$0" | sed -e 's,.*/,,'` +me=$(echo "$0" | sed -e 's,.*/,,') usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS @@ -67,7 +67,7 @@ Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.sub ($timestamp) -Copyright 1992-2019 Free Software Foundation, Inc. +Copyright 1992-2020 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." @@ -124,28 +124,27 @@ case $1 in ;; *-*-*-*) basic_machine=$field1-$field2 - os=$field3-$field4 + basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in - nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \ - | linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \ + 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 - os=$maybe_os + basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown - os=linux-android + basic_os=linux-android ;; *) basic_machine=$field1-$field2 - os=$field3 + basic_os=$field3 ;; esac ;; @@ -154,7 +153,7 @@ case $1 in case $field1-$field2 in decstation-3100) basic_machine=mips-dec - os= + basic_os= ;; *-*) # Second component is usually, but not always the OS @@ -162,7 +161,7 @@ case $1 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 - os=$field2 + basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ @@ -175,11 +174,11 @@ case $1 in | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 - os= + basic_os= ;; *) basic_machine=$field1 - os=$field2 + basic_os=$field2 ;; esac ;; @@ -191,450 +190,451 @@ case $1 in case $field1 in 386bsd) basic_machine=i386-pc - os=bsd + basic_os=bsd ;; a29khif) basic_machine=a29k-amd - os=udi + basic_os=udi ;; adobe68k) basic_machine=m68010-adobe - os=scout + basic_os=scout ;; alliant) basic_machine=fx80-alliant - os= + basic_os= ;; altos | altos3068) basic_machine=m68k-altos - os= + basic_os= ;; am29k) basic_machine=a29k-none - os=bsd + basic_os=bsd ;; amdahl) basic_machine=580-amdahl - os=sysv + basic_os=sysv ;; amiga) basic_machine=m68k-unknown - os= + basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown - os=amigaos + basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown - os=sysv4 + basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo - os=sysv + basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo - os=bsd + basic_os=bsd ;; aros) basic_machine=i386-pc - os=aros + basic_os=aros ;; aux) basic_machine=m68k-apple - os=aux + basic_os=aux ;; balance) basic_machine=ns32k-sequent - os=dynix + basic_os=dynix ;; blackfin) basic_machine=bfin-unknown - os=linux + basic_os=linux ;; cegcc) basic_machine=arm-unknown - os=cegcc + basic_os=cegcc ;; convex-c1) basic_machine=c1-convex - os=bsd + basic_os=bsd ;; convex-c2) basic_machine=c2-convex - os=bsd + basic_os=bsd ;; convex-c32) basic_machine=c32-convex - os=bsd + basic_os=bsd ;; convex-c34) basic_machine=c34-convex - os=bsd + basic_os=bsd ;; convex-c38) basic_machine=c38-convex - os=bsd + basic_os=bsd ;; cray) basic_machine=j90-cray - os=unicos + basic_os=unicos ;; crds | unos) basic_machine=m68k-crds - os= + basic_os= ;; da30) basic_machine=m68k-da30 - os= + basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec - os= + basic_os= ;; delta88) basic_machine=m88k-motorola - os=sysv3 + basic_os=sysv3 ;; dicos) basic_machine=i686-pc - os=dicos + basic_os=dicos ;; djgpp) basic_machine=i586-pc - os=msdosdjgpp + basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd - os=ebmon + basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson - os=ose + basic_os=ose ;; gmicro) basic_machine=tron-gmicro - os=sysv + basic_os=sysv ;; go32) basic_machine=i386-pc - os=go32 + basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi - os=hms + basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi - os=xray + basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi - os=hms + basic_os=hms ;; harris) basic_machine=m88k-harris - os=sysv3 + basic_os=sysv3 ;; - hp300) + hp300 | hp300hpux) basic_machine=m68k-hp + basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp - os=bsd - ;; - hp300hpux) - basic_machine=m68k-hp - os=hpux + basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp - os=osf + basic_os=osf ;; hppro) basic_machine=hppa1.1-hp - os=proelf + basic_os=proelf ;; i386mach) basic_machine=i386-mach - os=mach - ;; - vsta) - basic_machine=i386-pc - os=vsta + basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi - os=sysv + basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown - os=linux + basic_os=linux ;; magnum | m3230) basic_machine=mips-mips - os=sysv + basic_os=sysv ;; merlin) basic_machine=ns32k-utek - os=sysv + basic_os=sysv ;; mingw64) basic_machine=x86_64-pc - os=mingw64 + basic_os=mingw64 ;; mingw32) basic_machine=i686-pc - os=mingw32 + basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown - os=mingw32ce + basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k - os=coff + basic_os=coff ;; morphos) basic_machine=powerpc-unknown - os=morphos + basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown - os=moxiebox + basic_os=moxiebox ;; msdos) basic_machine=i386-pc - os=msdos + basic_os=msdos ;; msys) basic_machine=i686-pc - os=msys + basic_os=msys ;; mvs) basic_machine=i370-ibm - os=mvs + basic_os=mvs ;; nacl) basic_machine=le32-unknown - os=nacl + basic_os=nacl ;; ncr3000) basic_machine=i486-ncr - os=sysv4 + basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc - os=netbsd + basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel - os=linux + basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony - os=newsos + basic_os=newsos ;; news1000) basic_machine=m68030-sony - os=newsos + basic_os=newsos ;; necv70) basic_machine=v70-nec - os=sysv + basic_os=sysv ;; nh3000) basic_machine=m68k-harris - os=cxux + basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris - os=cxux + basic_os=cxux ;; nindy960) basic_machine=i960-intel - os=nindy + basic_os=nindy ;; mon960) basic_machine=i960-intel - os=mon960 + basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq - os=nonstopux + basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm - os=os400 + basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson - os=ose + basic_os=ose ;; os68k) basic_machine=m68k-none - os=os68k + basic_os=os68k ;; paragon) basic_machine=i860-intel - os=osf + basic_os=osf ;; parisc) basic_machine=hppa-unknown - os=linux + basic_os=linux + ;; + psp) + basic_machine=mipsallegrexel-sony + basic_os=psp ;; pw32) basic_machine=i586-unknown - os=pw32 + basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc - os=rdos + basic_os=rdos ;; rdos32) basic_machine=i386-pc - os=rdos + basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k - os=coff + basic_os=coff ;; sa29200) basic_machine=a29k-amd - os=udi + basic_os=udi ;; sei) basic_machine=mips-sei - os=seiux + basic_os=seiux ;; sequent) basic_machine=i386-sequent - os= + basic_os= ;; sps7) basic_machine=m68k-bull - os=sysv2 + basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem - os= + basic_os= ;; stratus) basic_machine=i860-stratus - os=sysv4 + basic_os=sysv4 ;; sun2) basic_machine=m68000-sun - os= + basic_os= ;; sun2os3) basic_machine=m68000-sun - os=sunos3 + basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun - os=sunos4 + basic_os=sunos4 ;; sun3) basic_machine=m68k-sun - os= + basic_os= ;; sun3os3) basic_machine=m68k-sun - os=sunos3 + basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun - os=sunos4 + basic_os=sunos4 ;; sun4) basic_machine=sparc-sun - os= + basic_os= ;; sun4os3) basic_machine=sparc-sun - os=sunos3 + basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun - os=sunos4 + basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun - os=solaris2 + basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun - os= + basic_os= ;; sv1) basic_machine=sv1-cray - os=unicos + basic_os=unicos ;; symmetry) basic_machine=i386-sequent - os=dynix + basic_os=dynix ;; t3e) basic_machine=alphaev5-cray - os=unicos + basic_os=unicos ;; t90) basic_machine=t90-cray - os=unicos + basic_os=unicos ;; toad1) basic_machine=pdp10-xkl - os=tops20 + basic_os=tops20 ;; tpf) basic_machine=s390x-ibm - os=tpf + basic_os=tpf ;; udi29k) basic_machine=a29k-amd - os=udi + basic_os=udi ;; ultra3) basic_machine=a29k-nyu - os=sym1 + basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec - os=none + basic_os=none ;; vaxv) basic_machine=vax-dec - os=sysv + basic_os=sysv ;; vms) basic_machine=vax-dec - os=vms + basic_os=vms + ;; + vsta) + basic_machine=i386-pc + basic_os=vsta ;; vxworks960) basic_machine=i960-wrs - os=vxworks + basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs - os=vxworks + basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs - os=vxworks + basic_os=vxworks ;; xbox) basic_machine=i686-pc - os=mingw32 + basic_os=mingw32 ;; ymp) basic_machine=ymp-cray - os=unicos + basic_os=unicos ;; *) basic_machine=$1 - os= + basic_os= ;; esac ;; @@ -686,17 +686,17 @@ case $basic_machine in bluegene*) cpu=powerpc vendor=ibm - os=cnk + basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec - os=tops10 + basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec - os=tops20 + basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) @@ -706,7 +706,7 @@ case $basic_machine in dpx2*) cpu=m68k vendor=bull - os=sysv3 + basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k @@ -715,7 +715,7 @@ case $basic_machine in elxsi) cpu=elxsi vendor=elxsi - os=${os:-bsd} + basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 @@ -728,7 +728,7 @@ case $basic_machine in h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi - os=hiuxwe2 + basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 @@ -769,38 +769,38 @@ case $basic_machine in vendor=hp ;; i*86v32) - cpu=`echo "$1" | sed -e 's/86.*/86/'` + cpu=$(echo "$1" | sed -e 's/86.*/86/') vendor=pc - os=sysv32 + basic_os=sysv32 ;; i*86v4*) - cpu=`echo "$1" | sed -e 's/86.*/86/'` + cpu=$(echo "$1" | sed -e 's/86.*/86/') vendor=pc - os=sysv4 + basic_os=sysv4 ;; i*86v) - cpu=`echo "$1" | sed -e 's/86.*/86/'` + cpu=$(echo "$1" | sed -e 's/86.*/86/') vendor=pc - os=sysv + basic_os=sysv ;; i*86sol2) - cpu=`echo "$1" | sed -e 's/86.*/86/'` + cpu=$(echo "$1" | sed -e 's/86.*/86/') vendor=pc - os=solaris2 + basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray - os=${os:-unicos} + basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi - case $os in + case $basic_os in irix*) ;; *) - os=irix4 + basic_os=irix4 ;; esac ;; @@ -811,26 +811,26 @@ case $basic_machine in *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari - os=mint + basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony - os=newsos + basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next - case $os in + case $basic_os in openstep*) ;; nextstep*) ;; ns2*) - os=nextstep2 + basic_os=nextstep2 ;; *) - os=nextstep3 + basic_os=nextstep3 ;; esac ;; @@ -841,12 +841,12 @@ case $basic_machine in op50n-* | op60c-*) cpu=hppa1.1 vendor=oki - os=proelf + basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi - os=hiuxwe2 + basic_os=hiuxwe2 ;; pbd) cpu=sparc @@ -883,12 +883,12 @@ case $basic_machine in sde) cpu=mipsisa32 vendor=sde - os=${os:-elf} + basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs - os=vxworks + basic_os=vxworks ;; tower | tower-32) cpu=m68k @@ -905,7 +905,7 @@ case $basic_machine in w89k-*) cpu=hppa1.1 vendor=winbond - os=proelf + basic_os=proelf ;; none) cpu=none @@ -917,7 +917,7 @@ case $basic_machine in ;; leon-*|leon[3-9]-*) cpu=sparc - vendor=`echo "$basic_machine" | sed 's/-.*//'` + vendor=$(echo "$basic_machine" | sed 's/-.*//') ;; *-*) @@ -958,11 +958,11 @@ case $cpu-$vendor in # some cases the only manufacturer, in others, it is the most popular. craynv-unknown) vendor=cray - os=${os:-unicosmp} + basic_os=${basic_os:-unicosmp} ;; c90-unknown | c90-cray) vendor=cray - os=${os:-unicos} + basic_os=${Basic_os:-unicos} ;; fx80-unknown) vendor=alliant @@ -1006,7 +1006,7 @@ case $cpu-$vendor in dpx20-unknown | dpx20-bull) cpu=rs6000 vendor=bull - os=${os:-bosx} + basic_os=${basic_os:-bosx} ;; # Here we normalize CPU types irrespective of the vendor @@ -1015,7 +1015,7 @@ case $cpu-$vendor in ;; blackfin-*) cpu=bfin - os=linux + basic_os=linux ;; c54x-*) cpu=tic54x @@ -1028,7 +1028,7 @@ case $cpu-$vendor in ;; e500v[12]-*) cpu=powerpc - os=$os"spe" + basic_os=${basic_os}"spe" ;; mips3*-*) cpu=mips64 @@ -1038,7 +1038,7 @@ case $cpu-$vendor in ;; m68knommu-*) cpu=m68k - os=linux + basic_os=linux ;; m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*) cpu=s12z @@ -1048,7 +1048,7 @@ case $cpu-$vendor in ;; parisc-*) cpu=hppa - os=linux + basic_os=linux ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) cpu=i586 @@ -1084,7 +1084,7 @@ case $cpu-$vendor in cpu=mipsisa64sb1el ;; sh5e[lb]-*) - cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'` + cpu=$(echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/') ;; spur-*) cpu=spur @@ -1102,13 +1102,16 @@ case $cpu-$vendor in cpu=x86_64 ;; xscale-* | xscalee[bl]-*) - cpu=`echo "$cpu" | sed 's/^xscale/arm/'` + cpu=$(echo "$cpu" | sed 's/^xscale/arm/') + ;; + arm64-*) + cpu=aarch64 ;; # Recognize the canonical CPU Types that limit and/or modify the # company names they are paired with. cr16-*) - os=${os:-elf} + basic_os=${basic_os:-elf} ;; crisv32-* | etraxfs*-*) cpu=crisv32 @@ -1119,7 +1122,7 @@ case $cpu-$vendor in vendor=axis ;; crx-*) - os=${os:-elf} + basic_os=${basic_os:-elf} ;; neo-tandem) cpu=neo @@ -1141,16 +1144,12 @@ case $cpu-$vendor in cpu=nsx vendor=tandem ;; - s390-*) - cpu=s390 - vendor=ibm - ;; - s390x-*) - cpu=s390x - vendor=ibm + mipsallegrexel-sony) + cpu=mipsallegrexel + vendor=sony ;; tile*-*) - os=${os:-linux-gnu} + basic_os=${basic_os:-linux-gnu} ;; *) @@ -1167,12 +1166,12 @@ case $cpu-$vendor in | am33_2.0 \ | amdgcn \ | arc | arceb \ - | arm | arm[lb]e | arme[lb] | armv* \ + | arm | arm[lb]e | arme[lb] | armv* \ | avr | avr32 \ | asmjs \ | ba \ | be32 | be64 \ - | bfin | bs2000 \ + | bfin | bpf | bs2000 \ | c[123]* | c30 | [cjt]90 | c4x \ | c8051 | clipper | craynv | csky | cydra \ | d10v | d30v | dlx | dsp16xx \ @@ -1232,6 +1231,7 @@ case $cpu-$vendor in | pyramid \ | riscv | riscv32 | riscv64 \ | 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 \ @@ -1278,8 +1278,47 @@ 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 caes, 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 + IFS="-" read kernel os <<EOF +$basic_os +EOF + ;; + # 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. @@ -1291,7 +1330,7 @@ case $os in os=cnk ;; solaris1 | solaris1.*) - os=`echo $os | sed -e 's|solaris1|sunos4|'` + os=$(echo $os | sed -e 's|solaris1|sunos4|') ;; solaris) os=solaris2 @@ -1299,9 +1338,6 @@ case $os in unixware*) os=sysv4.2uw ;; - gnu/linux*) - os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` - ;; # es1800 is here to avoid being matched by es* (a different OS) es1800*) os=ose @@ -1323,12 +1359,9 @@ case $os in os=sco3.2v4 ;; sco3.2.[4-9]*) - os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` + os=$(echo $os | sed -e 's/sco3.2./sco3.2v/') ;; - sco3.2v[4-9]* | sco5v6*) - # Don't forget version if it is 3.2v4 or newer. - ;; - scout) + sco*v* | scout) # Don't match below ;; sco*) @@ -1337,78 +1370,26 @@ case $os in psos*) os=psos ;; - # 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* | esix* | 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* | isc* | rtu* | xenix* \ - | 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* | hcos* \ - | chorusrdb* | cegcc* | glidix* \ - | cygwin* | msys* | pe* | 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* | amdhsa* | unleashed* | emscripten* | wasi*) - # Remember, each alternative MUST END IN *, to match a version number. - ;; qnx*) - case $cpu in - x86 | i*86) - ;; - *) - os=nto-$os - ;; - esac + os=qnx ;; hiux*) os=hiuxwe2 ;; - nto-qnx*) - ;; - nto*) - os=`echo $os | sed -e 's|nto|nto-qnx|'` - ;; - sim | xray | os68k* | v88r* \ - | windows* | osx | abug | netware* | os9* \ - | macos* | mpw* | magic* | mmixware* | mon960* | lnews*) - ;; - linux-dietlibc) - os=linux-dietlibc - ;; - linux*) - os=`echo $os | sed -e 's|linux|linux-gnu|'` - ;; lynx*178) os=lynxos178 ;; lynx*5) os=lynxos5 ;; + lynxos*) + # don't get caught up in next wildcard + ;; lynx*) os=lynxos ;; - mac*) - os=`echo "$os" | sed -e 's|mac|macos|'` + mac[0-9]*) + os=$(echo "$os" | sed -e 's|mac|macos|') ;; opened*) os=openedition @@ -1417,10 +1398,10 @@ case $os in os=os400 ;; sunos5*) - os=`echo "$os" | sed -e 's|sunos5|solaris2|'` + os=$(echo "$os" | sed -e 's|sunos5|solaris2|') ;; sunos6*) - os=`echo "$os" | sed -e 's|sunos6|solaris3|'` + os=$(echo "$os" | sed -e 's|sunos6|solaris3|') ;; wince*) os=wince @@ -1452,12 +1433,9 @@ case $os in ns2) os=nextstep2 ;; - nsk*) - os=nsk - ;; # Preserve the version number of sinix5. sinix5.*) - os=`echo $os | sed -e 's|sinix|sysv|'` + os=$(echo $os | sed -e 's|sinix|sysv|') ;; sinix*) os=sysv4 @@ -1480,18 +1458,12 @@ case $os in sysvr4) os=sysv4 ;; - # This must come after sysvr4. - sysv*) - ;; ose*) os=ose ;; *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) os=mint ;; - zvmoe) - os=zvmoe - ;; dicos*) os=dicos ;; @@ -1508,19 +1480,11 @@ case $os in ;; esac ;; - nacl*) - ;; - ios) - ;; - none) - ;; - *-eabi) - ;; *) - 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. @@ -1533,6 +1497,7 @@ else # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. +kernel= case $cpu-$vendor in score-*) os=elf @@ -1544,7 +1509,8 @@ case $cpu-$vendor in os=riscix1.2 ;; arm*-rebel) - os=linux + kernel=linux + os=gnu ;; arm*-semi) os=aout @@ -1710,84 +1676,173 @@ case $cpu-$vendor in os=none ;; esac + fi +# Now, validate our (potentially fixed-up) OS. +case $os in + # Sometimes we do "kernel-abi", so those need to count as OSes. + musl* | newlib* | uclibc*) + ;; + # Likewise for "kernel-libc" + eabi | eabihf | gnueabi | gnueabihf) + ;; + # 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* | 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* \ + | 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*) + ;; + # 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-uclibc* ) + ;; + uclinux-uclibc* ) + ;; + -dietlibc* | -newlib* | -musl* | -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*) + ;; + 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. case $vendor in unknown) - case $os in - riscix*) + 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 ;; - clix*) + *-clix*) vendor=intergraph ;; - mvs* | opened*) + *-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 ;; esac -echo "$cpu-$vendor-$os" +echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: @@ -1,7 +1,7 @@ #! /bin/sh -# From configure.ac Id: configure.ac 9327 2020-03-29 13:15:12Z michael . +# From configure.ac Id: configure.ac 9677 2020-10-24 11:10:13Z michael . # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for hopm 1.1.8. +# Generated by GNU Autoconf 2.69 for hopm 1.1.9. # # Report bugs to <bugs@ircd-hybrid.org>. # @@ -591,8 +591,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='hopm' PACKAGE_TARNAME='hopm' -PACKAGE_VERSION='1.1.8' -PACKAGE_STRING='hopm 1.1.8' +PACKAGE_VERSION='1.1.9' +PACKAGE_STRING='hopm 1.1.9' PACKAGE_BUGREPORT='bugs@ircd-hybrid.org' PACKAGE_URL='' @@ -1341,7 +1341,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 hopm 1.1.8 to adapt to many kinds of systems. +\`configure' configures hopm 1.1.9 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1412,7 +1412,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of hopm 1.1.8:";; + short | recursive ) echo "Configuration of hopm 1.1.9:";; esac cat <<\_ACEOF @@ -1537,7 +1537,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -hopm configure 1.1.8 +hopm configure 1.1.9 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1815,7 +1815,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 hopm $as_me 1.1.8, which was +It was created by hopm $as_me 1.1.9, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2678,7 +2678,7 @@ fi # Define the identity of the package. PACKAGE='hopm' - VERSION='1.1.8' + VERSION='1.1.9' cat >>confdefs.h <<_ACEOF @@ -5691,7 +5691,7 @@ esac fi : ${AR=ar} -: ${AR_FLAGS=cru} +: ${AR_FLAGS=cr} @@ -7412,8 +7412,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 cru libconftest.a conftest.o" >&5 - $AR cru libconftest.a conftest.o 2>&5 + echo "$AR cr libconftest.a conftest.o" >&5 + $AR cr libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF @@ -12668,8 +12668,8 @@ $as_echo "disabled" >&6; } fi if test "$cf_enable_openssl" != "no"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LibreSSL" >&5 -$as_echo_n "checking for LibreSSL... " >&6; } + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LibreSSL, or OpenSSL 1.1.1 and above" >&5 +$as_echo_n "checking for LibreSSL, or OpenSSL 1.1.1 and above... " >&6; } if test "$cross_compiling" = yes; then : cf_openssl_version_ok=no else @@ -15480,7 +15480,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 hopm $as_me 1.1.8, which was +This file was extended by hopm $as_me 1.1.9, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -15546,7 +15546,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -hopm config.status 1.1.8 +hopm config.status 1.1.9 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index ded84eb..f742140 100644 --- a/configure.ac +++ b/configure.ac @@ -3,11 +3,11 @@ dnl Process this file with autoconf to produce a configure script. AC_REVISION([$Id$]) AC_PREREQ(2.69) -AC_INIT([hopm], [1.1.8], [bugs@ircd-hybrid.org]) -AM_INIT_AUTOMAKE(1.15) +AC_INIT([hopm], [1.1.9], [bugs@ircd-hybrid.org]) +AM_INIT_AUTOMAKE(1.16.1) AM_MAINTAINER_MODE AC_CONFIG_SRCDIR(src/opercmd.h) -AC_CONFIG_HEADER(src/setup.h) +AC_CONFIG_HEADERS(src/setup.h) AC_CONFIG_MACRO_DIR([m4]) AC_PREFIX_DEFAULT([\${HOME}/hopm]) diff --git a/doc/reference.conf b/doc/reference.conf index 69eb210..65a1b6c 100644 --- a/doc/reference.conf +++ b/doc/reference.conf @@ -101,12 +101,12 @@ irc { * IP address to bind to for the IRC connection. You only need to * use this if you wish HOPM to use a particular interface * (virtual host, IP alias, ...) when connecting to the IRC server. - * There is another "vhost" setting in the scan {} block below for + * There is another "bind" setting in the scan {} block below for * the actual portscans. Note that this directive expects an IP address, * not a hostname. Please leave this commented out if you do not * understand what it does, as most people don't need it. */ -# vhost = "0.0.0.0"; +# bind = "0.0.0.0"; /* * Nickname for HOPM to use. @@ -148,6 +148,23 @@ irc { tls = no; /* + * rsa_private_key_file: the path to the file containing the RSA key. + * + * Once the RSA key is generated, it is highly recommended to lock down + * its file permissions: + * + * chown <ircd-user>.<ircd.group> rsa.key + * chmod 0600 rsa.key + */ +# rsa_private_key_file = "etc/rsa.key"; + + /* + * tls_certificate_file: the path to the file containing our + * TLS certificate for encrypted client connection. + */ +# tls_certificate_file = "etc/cert.pem"; + + /* * Checks if the host name defined above matches the identity in the * certificate. */ @@ -350,7 +367,7 @@ irc { */ - /* dnsbl.dronebl.org - http://dronebl.org */ + /* dnsbl.dronebl.org - https://dronebl.org */ # blacklist { /* The DNS name of the blacklist */ # name = "dnsbl.dronebl.org"; @@ -382,7 +399,7 @@ irc { /* * The actual values returned by the dnsbl.dronebl.org blacklist as - * documented at http://dronebl.org/docs/howtouse + * documented at https://dronebl.org/docs/howtouse */ # reply { # 2 = "Sample data used for heuristical analysis"; @@ -400,7 +417,8 @@ irc { # 15 = "Compromised router / gateway"; # 16 = "Autorooting worms"; # 17 = "Automatically determined botnet IPs (experimental)"; -# 18 = "DNS/MX type hostname detected on IRC"; +# 18 = "Possibly compromised DNS/MX type hostname detected on IRC"; +# 19 = "Abused VPN Service"; # 255 = "Uncategorized threat class"; # }; @@ -408,7 +426,7 @@ irc { * The kline message sent for this specific blacklist, remember to put * the removal method in this. */ -# kline = "KLINE 180 *@%i :You have a host listed in the DroneBL. For more information, visit http://dronebl.org/lookup_branded?ip=%i&network=Network"; +# kline = "KLINE 180 *@%i :You have a host listed in the DroneBL. For more information, visit https://dronebl.org/lookup_branded?ip=%i&network=Network"; # }; @@ -426,7 +444,7 @@ irc { # 5 = "Drones / Flooding"; # }; -# kline = "KLINE 180 *@%i :Blacklisted proxy found. For more information, visit http://rbl.efnetrbl.org/?i=%i"; +# kline = "KLINE 180 *@%i :Blacklisted proxy found. For more information, visit https://rbl.efnetrbl.org/?i=%i"; # }; @@ -441,7 +459,7 @@ irc { # 1 = "TOR"; # }; -# kline = "KLINE 180 *@%i :TOR exit node found. For more information, visit http://rbl.efnetrbl.org/?i=%i"; +# kline = "KLINE 180 *@%i :TOR exit node found. For more information, visit https://rbl.efnetrbl.org/?i=%i"; # }; /* @@ -577,7 +595,7 @@ scanner { * If you don't understand what this means, please leave this * commented out, as this is a major source of support queries! */ -# vhost = "127.0.0.1"; +# bind = "127.0.0.1"; /* * Maximum file descriptors this scanner can use. Remember that there @@ -717,7 +735,7 @@ scanner { * they will override the defaults set in the first scanner * for this and subsequent scanners defined in the config file * This affects the following options: - * fd, vhost, target_ip, target_port, target_string, timeout and + * fd, bind, target_ip, target_port, target_string, timeout and * max_read. */ }; @@ -31,7 +31,7 @@ PROGRAM=libtool PACKAGE=libtool -VERSION="2.4.6 Debian-2.4.6-10" +VERSION="2.4.6 Debian-2.4.6-14" package_revision=2.4.6 @@ -387,7 +387,7 @@ EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # -# debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name +# debug_cmd='echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: @@ -2141,7 +2141,7 @@ include the following information: compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) - version: $progname $scriptversion Debian-2.4.6-10 + version: $progname $scriptversion Debian-2.4.6-14 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` @@ -7368,10 +7368,12 @@ func_mode_link () # -stdlib=* select c++ std lib with clang # -fsanitize=* Clang/GCC memory and address sanitizer # -fuse-ld=* Linker select flags for GCC + # -static-* direct GCC to link specific libraries statically + # -fcilkplus Cilk Plus language extension features for C/C++ -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=*) + -specs=*|-fsanitize=*|-fuse-ld=*|-static-*|-fcilkplus) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" diff --git a/m4/ax_arg_openssl.m4 b/m4/ax_arg_openssl.m4 index 7391873..e172e16 100644 --- a/m4/ax_arg_openssl.m4 +++ b/m4/ax_arg_openssl.m4 @@ -61,7 +61,7 @@ else fi AS_IF([test "$cf_enable_openssl" != "no"], - [AC_MSG_CHECKING(for LibreSSL, or OpenSSL 1.1.1 and above) + [AC_MSG_CHECKING([for LibreSSL, or OpenSSL 1.1.1 and above]) AC_RUN_IFELSE([ AC_LANG_PROGRAM([ #include <openssl/opensslv.h> diff --git a/m4/libtool.m4 b/m4/libtool.m4 index 9d6dd9f..a6d21ae 100644 --- a/m4/libtool.m4 +++ b/m4/libtool.m4 @@ -1041,8 +1041,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 cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD - $AR cru libconftest.a conftest.o 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 "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF @@ -1492,7 +1492,7 @@ need_locks=$enable_libtool_lock m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} -: ${AR_FLAGS=cru} +: ${AR_FLAGS=cr} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) diff --git a/src/Makefile.am b/src/Makefile.am index ec9337c..858547d 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -39,7 +39,6 @@ hopm_SOURCES = compat.c \ patricia.h \ scan.c \ scan.h \ - serno.h \ stats.c \ stats.h diff --git a/src/Makefile.in b/src/Makefile.in index e0bb65e..5da1450 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -421,7 +421,6 @@ hopm_SOURCES = compat.c \ patricia.h \ scan.c \ scan.h \ - serno.h \ stats.c \ stats.h diff --git a/src/config-lexer.c b/src/config-lexer.c index 7ede571..4987d2a 100644 --- a/src/config-lexer.c +++ b/src/config-lexer.c @@ -355,8 +355,8 @@ static void yynoreturn yy_fatal_error ( const char* msg ); (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 110 -#define YY_END_OF_BUFFER 111 +#define YY_NUM_RULES 112 +#define YY_END_OF_BUFFER 113 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -364,63 +364,66 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[493] = +static const flex_int16_t yy_accept[526] = { 0, - 7, 7, 0, 0, 111, 109, 7, 6, 109, 8, - 109, 109, 9, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 109, 109, 109, 109, 109, 109, 109, - 109, 109, 109, 3, 4, 3, 7, 6, 0, 10, - 8, 0, 1, 8, 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, - 0, 0, 0, 87, 0, 0, 0, 0, 92, 0, - 0, 0, 0, 0, 0, 107, 0, 105, 0, 0, + 7, 7, 0, 0, 113, 111, 7, 6, 111, 8, + 111, 111, 9, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 111, 111, 111, 111, 111, 111, 111, 111, + 111, 111, 3, 4, 3, 7, 6, 0, 10, 8, + 0, 1, 8, 9, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 26, 0, 0, + 0, 0, 0, 89, 0, 0, 0, 0, 94, 0, + 0, 0, 0, 0, 0, 109, 0, 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 74, 0, 0, 0, 0, 0, 0, 0, 0, 29, - 0, 31, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 108, 0, 42, 0, 0, + 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, + 30, 0, 32, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 110, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 102, 0, 0, 61, 0, 0, 0, - 0, 0, 0, 0, 104, 0, 0, 12, 0, 0, - 82, 0, 0, 0, 73, 0, 0, 0, 0, 0, - 76, 93, 0, 27, 28, 0, 0, 0, 32, 0, - 0, 0, 0, 34, 0, 35, 0, 38, 0, 41, - - 0, 0, 0, 0, 47, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 103, - 63, 64, 0, 72, 0, 68, 0, 0, 0, 0, - 81, 0, 0, 0, 0, 0, 0, 0, 0, 106, - 75, 0, 95, 0, 86, 0, 30, 0, 91, 0, - 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 52, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 66, 71, 0, 67, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 24, 0, 0, 26, 85, 0, 0, 90, 0, 78, + 0, 0, 0, 0, 0, 104, 0, 0, 63, 0, + 0, 0, 0, 0, 0, 106, 0, 0, 12, 0, + 14, 0, 84, 0, 0, 0, 75, 0, 0, 0, + 0, 0, 78, 95, 0, 28, 29, 0, 0, 0, + 33, 0, 0, 0, 0, 35, 0, 36, 0, 39, - 69, 0, 0, 40, 0, 0, 0, 0, 0, 0, - 0, 0, 100, 0, 0, 80, 0, 56, 97, 98, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 15, + 0, 42, 0, 0, 0, 0, 48, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 105, 66, 67, 74, 0, 70, 0, 0, + 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, + 0, 108, 77, 0, 97, 0, 88, 0, 31, 0, + 93, 0, 0, 72, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 53, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 73, + 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 25, 0, 0, 27, 87, 0, 0, + + 92, 0, 80, 71, 0, 0, 41, 0, 0, 0, + 0, 0, 0, 0, 0, 102, 0, 0, 0, 82, + 0, 58, 99, 100, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 16, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 79, 0, 0, + 44, 0, 46, 47, 0, 0, 0, 0, 0, 55, + 56, 81, 0, 0, 62, 0, 0, 0, 101, 0, + 0, 0, 0, 0, 0, 0, 24, 0, 0, 103, + 96, 0, 86, 34, 91, 37, 40, 45, 49, 0, + 51, 0, 0, 57, 0, 0, 0, 0, 0, 68, + + 0, 0, 0, 0, 0, 15, 0, 0, 0, 20, + 0, 0, 0, 98, 85, 90, 0, 0, 0, 0, + 59, 0, 0, 0, 0, 0, 5, 0, 5, 0, + 0, 0, 0, 0, 23, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, + 21, 22, 0, 50, 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 77, 0, 0, 43, 0, 45, 46, 0, - 0, 0, 0, 53, 54, 79, 0, 0, 60, 0, - 0, 99, 0, 0, 0, 0, 0, 0, 0, 23, - 0, 0, 101, 94, 0, 84, 33, 89, 36, 39, - 44, 48, 0, 50, 0, 55, 0, 0, 0, 0, - 65, 0, 0, 0, 0, 0, 14, 0, 0, 0, - - 19, 0, 0, 0, 96, 83, 88, 0, 0, 0, - 57, 0, 0, 0, 0, 5, 0, 5, 0, 0, - 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 13, 0, 0, 0, 20, 21, 0, - 49, 0, 58, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 59, - 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, - 18, 0, 0, 0, 16, 0, 37, 0, 0, 0, - 51, 0, 17, 0, 0, 0, 0, 0, 0, 0, - 62, 0 + 0, 0, 0, 0, 0, 0, 0, 61, 0, 0, + 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 19, 0, 0, 0, 0, 0, 17, 0, 38, + 0, 0, 0, 0, 0, 52, 0, 0, 0, 18, + 0, 0, 0, 0, 0, 0, 54, 64, 0, 0, + 0, 0, 0, 65, 0 } ; static const YY_CHAR yy_ec[256] = @@ -466,243 +469,259 @@ static const YY_CHAR yy_meta[66] = 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[499] = +static const flex_int16_t yy_base[532] = { 0, - 0, 0, 63, 64, 963, 972, 957, 0, 68, 0, - 45, 67, 67, 56, 65, 59, 68, 45, 70, 56, - 93, 107, 144, 112, 116, 184, 74, 151, 227, 54, - 69, 128, 119, 972, 972, 950, 954, 0, 93, 972, - 0, 112, 972, 0, 207, 136, 140, 147, 160, 143, - 163, 161, 144, 152, 176, 178, 181, 972, 177, 187, - 187, 192, 211, 192, 193, 209, 212, 208, 198, 222, - 217, 237, 221, 228, 234, 226, 243, 972, 253, 235, - 243, 262, 251, 255, 282, 253, 273, 290, 275, 272, - 265, 275, 270, 269, 275, 291, 287, 297, 292, 316, - - 972, 307, 295, 294, 915, 317, 316, 311, 313, 313, - 312, 333, 331, 325, 321, 323, 326, 333, 132, 972, - 326, 972, 334, 336, 343, 911, 335, 354, 337, 357, - 345, 364, 367, 362, 364, 972, 359, 972, 368, 360, - 376, 378, 366, 367, 383, 375, 380, 373, 380, 383, - 396, 380, 395, 972, 399, 402, 910, 404, 409, 399, - 403, 412, 417, 408, 972, 417, 424, 972, 410, 424, - 418, 424, 437, 422, 972, 430, 438, 431, 430, 441, - 431, 443, 433, 972, 972, 448, 457, 461, 972, 451, - 468, 472, 457, 972, 469, 972, 479, 463, 479, 972, - - 472, 466, 475, 481, 972, 477, 474, 482, 483, 473, - 493, 498, 488, 492, 500, 492, 508, 504, 512, 972, - 972, 512, 507, 510, 528, 514, 513, 516, 525, 529, - 972, 536, 529, 538, 909, 541, 538, 546, 530, 972, - 972, 536, 538, 551, 539, 537, 972, 557, 545, 541, - 565, 554, 574, 573, 575, 568, 570, 568, 575, 587, - 583, 592, 581, 972, 578, 583, 594, 596, 600, 585, - 94, 586, 588, 595, 612, 972, 972, 595, 972, 611, - 599, 612, 615, 618, 626, 625, 627, 625, 625, 624, - 972, 624, 630, 972, 972, 626, 646, 972, 630, 633, - - 972, 644, 636, 972, 636, 640, 648, 656, 651, 654, - 655, 664, 972, 667, 659, 663, 673, 972, 972, 972, - 908, 665, 667, 676, 684, 685, 905, 681, 678, 972, - 903, 692, 681, 685, 692, 698, 681, 686, 688, 704, - 708, 708, 972, 712, 697, 972, 715, 972, 972, 710, - 721, 723, 730, 972, 972, 972, 723, 731, 972, 717, - 732, 972, 765, 735, 728, 729, 742, 727, 742, 972, - 745, 751, 972, 972, 750, 752, 972, 753, 255, 972, - 972, 972, 759, 972, 759, 972, 764, 766, 762, 772, - 972, 802, 235, 212, 785, 766, 972, 776, 773, 785, - - 972, 786, 791, 782, 972, 972, 972, 786, 788, 800, - 972, 793, 796, 815, 220, 188, 177, 176, 805, 805, - 802, 817, 811, 972, 806, 808, 825, 812, 819, 814, - 828, 826, 831, 972, 836, 825, 841, 972, 972, 848, - 972, 833, 972, 841, 850, 849, 844, 857, 851, 848, - 864, 863, 101, 849, 853, 97, 855, 868, 862, 972, - 861, 972, 882, 866, 866, 878, 869, 887, 882, 888, - 972, 894, 901, 887, 972, 881, 972, 896, 903, 908, - 972, 908, 972, 908, 917, 920, 903, 916, 912, 914, - 972, 972, 967, 133, 969, 132, 100, 97 - + 0, 0, 63, 64, 1026, 1038, 1023, 0, 68, 0, + 45, 67, 67, 56, 65, 59, 68, 45, 71, 63, + 97, 111, 148, 116, 113, 188, 65, 155, 231, 53, + 124, 101, 1038, 1038, 1016, 1020, 0, 98, 1038, 0, + 105, 1038, 0, 168, 131, 140, 155, 157, 171, 155, + 176, 168, 154, 164, 180, 182, 179, 1038, 171, 173, + 180, 188, 207, 188, 196, 210, 215, 207, 202, 226, + 221, 240, 225, 232, 238, 224, 239, 1038, 268, 231, + 240, 258, 247, 258, 281, 256, 276, 277, 288, 282, + 278, 272, 280, 275, 274, 280, 292, 295, 294, 323, + + 1038, 306, 297, 292, 981, 321, 325, 324, 317, 320, + 321, 318, 335, 337, 327, 325, 327, 330, 337, 351, + 1038, 329, 1038, 338, 340, 347, 980, 340, 365, 348, + 368, 356, 371, 374, 370, 372, 1038, 365, 1038, 375, + 368, 381, 382, 370, 371, 387, 379, 384, 377, 979, + 384, 386, 400, 384, 399, 1038, 404, 413, 978, 415, + 420, 410, 418, 422, 415, 1038, 422, 429, 1038, 416, + 1038, 428, 421, 427, 440, 425, 1038, 432, 442, 433, + 432, 444, 432, 462, 433, 1038, 1038, 451, 455, 458, + 1038, 453, 467, 477, 462, 1038, 476, 1038, 484, 468, + + 485, 1038, 476, 469, 478, 484, 1038, 480, 476, 484, + 486, 476, 496, 487, 502, 491, 496, 504, 504, 519, + 515, 528, 1038, 1038, 519, 515, 536, 520, 520, 524, + 530, 533, 1038, 540, 533, 542, 976, 545, 542, 550, + 534, 1038, 1038, 540, 541, 555, 543, 541, 1038, 562, + 556, 552, 576, 565, 581, 580, 583, 576, 576, 575, + 583, 592, 587, 596, 585, 1038, 582, 584, 589, 599, + 601, 605, 591, 94, 593, 593, 612, 605, 625, 1038, + 609, 1038, 629, 617, 626, 628, 629, 637, 635, 638, + 635, 635, 634, 1038, 631, 636, 1038, 1038, 632, 652, + + 1038, 636, 638, 1038, 650, 643, 1038, 646, 648, 657, + 666, 664, 668, 673, 682, 1038, 679, 682, 675, 675, + 685, 1038, 1038, 1038, 975, 677, 681, 681, 688, 696, + 697, 974, 690, 687, 1038, 973, 702, 691, 695, 701, + 707, 693, 698, 703, 718, 726, 727, 1038, 732, 718, + 1038, 736, 1038, 1038, 730, 739, 740, 743, 727, 1038, + 1038, 1038, 739, 742, 1038, 733, 734, 749, 1038, 774, + 749, 745, 742, 773, 745, 755, 1038, 763, 770, 1038, + 1038, 769, 772, 1038, 773, 972, 1038, 1038, 1038, 779, + 1038, 777, 796, 1038, 783, 785, 781, 793, 790, 1038, + + 821, 1007, 996, 803, 783, 1038, 793, 787, 803, 1038, + 801, 812, 807, 1038, 1038, 1038, 817, 815, 827, 818, + 1038, 823, 824, 836, 842, 271, 264, 229, 222, 832, + 832, 827, 843, 837, 1038, 831, 832, 847, 835, 842, + 851, 838, 849, 850, 852, 856, 1038, 868, 859, 881, + 1038, 1038, 885, 1038, 869, 188, 1038, 876, 889, 888, + 883, 878, 891, 883, 878, 895, 891, 895, 902, 145, + 880, 885, 111, 887, 899, 892, 905, 1038, 892, 895, + 1038, 916, 907, 912, 927, 918, 916, 936, 939, 934, + 937, 1038, 943, 947, 108, 105, 932, 1038, 925, 1038, + + 941, 947, 948, 946, 951, 1038, 949, 950, 954, 1038, + 950, 951, 954, 963, 964, 974, 1038, 1038, 982, 971, + 982, 978, 980, 1038, 1038, 1033, 140, 1035, 137, 136, + 97 } ; -static const flex_int16_t yy_def[499] = +static const flex_int16_t yy_def[532] = { 0, - 492, 1, 493, 493, 492, 492, 492, 494, 495, 496, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 494, 495, 492, - 496, 492, 492, 496, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 497, 498, 492, 492, 492, 492, 492, 492, - - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 497, 497, 498, 498, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 0, 492, 492, 492, 492, 492, 492 - + 525, 1, 526, 526, 525, 525, 525, 527, 528, 529, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 527, 528, 525, 529, + 525, 525, 529, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + + 525, 530, 531, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 530, 530, 531, 531, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 0, 525, 525, 525, 525, 525, + 525 } ; -static const flex_int16_t yy_nxt[1038] = +static const flex_int16_t yy_nxt[1104] = { 0, 6, 7, 8, 9, 10, 6, 11, 12, 13, 13, 13, 13, 6, 6, 14, 15, 16, 17, 18, 19, 6, 20, 21, 22, 6, 23, 24, 25, 26, 6, - 27, 28, 29, 30, 31, 32, 6, 33, 6, 6, + 27, 28, 29, 30, 6, 31, 6, 32, 6, 6, 14, 15, 16, 17, 18, 19, 6, 20, 21, 22, 6, 23, 24, 25, 26, 6, 27, 28, 29, 30, - 31, 32, 6, 33, 6, 35, 35, 42, 36, 36, - 40, 40, 43, 46, 44, 45, 45, 45, 45, 48, - 51, 56, 53, 59, 57, 96, 52, 58, 60, 49, - 97, 47, 85, 42, 54, 40, 40, 417, 55, 46, - - 415, 86, 50, 319, 320, 48, 51, 56, 53, 59, - 57, 96, 52, 58, 60, 49, 97, 47, 85, 61, - 54, 62, 64, 63, 55, 65, 73, 86, 50, 66, - 74, 67, 41, 38, 75, 77, 464, 100, 102, 76, - 461, 184, 78, 185, 79, 61, 98, 62, 64, 63, - 99, 65, 73, 103, 104, 66, 74, 67, 68, 69, - 75, 77, 70, 100, 102, 76, 71, 87, 78, 88, - 79, 72, 98, 105, 106, 107, 99, 108, 89, 103, - 104, 111, 90, 112, 68, 69, 109, 110, 70, 418, - 418, 416, 71, 87, 113, 88, 114, 72, 80, 105, - - 106, 107, 81, 108, 89, 115, 82, 111, 90, 112, - 116, 83, 109, 110, 84, 45, 45, 45, 45, 117, - 113, 118, 114, 416, 80, 418, 119, 120, 81, 121, - 122, 115, 82, 123, 124, 127, 116, 83, 416, 125, - 84, 91, 128, 129, 126, 117, 132, 118, 133, 92, - 134, 93, 119, 120, 130, 121, 122, 94, 135, 123, - 124, 127, 136, 131, 95, 125, 140, 91, 128, 129, - 126, 137, 132, 141, 133, 92, 134, 93, 138, 142, - 130, 143, 144, 94, 135, 139, 148, 149, 136, 131, - 95, 153, 140, 154, 408, 155, 145, 137, 146, 141, - - 156, 157, 158, 159, 138, 142, 150, 143, 144, 160, - 147, 139, 148, 149, 161, 162, 151, 153, 163, 154, - 152, 155, 145, 166, 146, 167, 156, 157, 158, 159, - 164, 168, 150, 170, 171, 160, 147, 172, 173, 174, - 161, 162, 151, 175, 163, 178, 152, 165, 176, 166, - 179, 167, 180, 181, 182, 183, 164, 168, 186, 170, - 171, 187, 188, 172, 173, 174, 189, 191, 192, 175, - 193, 178, 177, 165, 176, 194, 179, 195, 180, 181, - 182, 183, 196, 197, 186, 198, 199, 187, 188, 200, - 201, 202, 189, 191, 192, 203, 193, 204, 205, 206, - - 207, 194, 209, 195, 210, 211, 212, 208, 196, 197, - 213, 198, 199, 214, 215, 200, 201, 202, 216, 217, - 218, 203, 220, 204, 205, 206, 207, 221, 209, 222, - 210, 211, 212, 208, 223, 224, 213, 225, 226, 214, - 215, 227, 228, 229, 216, 217, 218, 230, 220, 231, - 232, 233, 234, 221, 235, 222, 238, 236, 239, 240, - 223, 224, 241, 225, 226, 244, 245, 227, 228, 229, - 237, 242, 246, 230, 243, 231, 232, 233, 234, 247, - 235, 248, 238, 236, 239, 240, 249, 250, 241, 251, - 252, 244, 245, 253, 254, 255, 237, 242, 246, 256, - - 243, 257, 258, 259, 260, 247, 261, 248, 262, 263, - 264, 265, 249, 250, 268, 251, 252, 269, 270, 253, - 254, 255, 266, 271, 267, 256, 272, 257, 258, 259, - 260, 273, 261, 274, 262, 263, 264, 265, 275, 276, - 268, 277, 278, 269, 270, 279, 280, 281, 266, 271, - 267, 282, 272, 283, 284, 285, 286, 273, 288, 274, - 289, 290, 291, 292, 275, 276, 293, 277, 278, 294, - 295, 279, 280, 281, 296, 297, 298, 282, 299, 283, - 284, 285, 286, 300, 288, 301, 289, 290, 291, 292, - 302, 303, 293, 304, 305, 294, 295, 306, 307, 308, - - 296, 297, 298, 309, 299, 310, 311, 312, 313, 300, - 314, 301, 315, 316, 317, 318, 302, 303, 321, 304, - 305, 322, 323, 306, 307, 308, 324, 325, 326, 309, - 327, 310, 311, 312, 313, 328, 314, 329, 315, 316, - 317, 318, 330, 331, 321, 332, 333, 322, 323, 335, - 336, 337, 324, 325, 326, 338, 327, 339, 340, 334, - 341, 328, 342, 329, 343, 344, 345, 346, 330, 331, - 347, 332, 333, 348, 349, 335, 336, 337, 350, 351, - 352, 338, 353, 339, 340, 334, 341, 354, 342, 355, - 343, 344, 345, 346, 356, 357, 347, 359, 360, 348, - - 349, 361, 362, 363, 350, 351, 352, 365, 353, 366, - 368, 369, 370, 354, 371, 355, 372, 373, 374, 375, - 356, 357, 376, 359, 360, 377, 378, 361, 362, 363, - 379, 380, 381, 365, 382, 366, 368, 369, 370, 383, - 371, 384, 372, 373, 374, 375, 385, 386, 376, 390, - 391, 377, 378, 387, 395, 396, 379, 380, 381, 388, - 382, 397, 389, 401, 398, 383, 392, 384, 393, 402, - 403, 399, 385, 386, 400, 390, 391, 394, 404, 387, - 395, 396, 405, 406, 407, 388, 409, 397, 389, 401, - 398, 410, 411, 412, 413, 402, 403, 399, 414, 419, - - 400, 420, 421, 392, 404, 393, 422, 423, 405, 406, - 407, 424, 409, 425, 394, 426, 427, 410, 411, 412, - 413, 428, 429, 430, 414, 419, 431, 420, 421, 432, - 433, 434, 422, 423, 435, 436, 437, 424, 438, 425, - 439, 426, 427, 440, 441, 442, 443, 428, 429, 430, - 444, 445, 431, 446, 447, 432, 433, 434, 448, 449, - 435, 436, 437, 450, 438, 451, 439, 452, 453, 440, - 441, 442, 443, 454, 455, 456, 444, 445, 457, 446, - 447, 458, 459, 460, 448, 449, 462, 463, 465, 450, - 466, 451, 467, 452, 453, 468, 469, 470, 471, 454, - - 455, 456, 472, 473, 457, 474, 475, 458, 459, 460, - 476, 477, 462, 463, 465, 478, 466, 479, 467, 480, - 481, 468, 469, 470, 471, 482, 483, 484, 472, 473, - 485, 474, 475, 486, 487, 488, 476, 477, 489, 490, - 491, 478, 367, 479, 364, 480, 481, 358, 287, 219, - 190, 482, 483, 484, 169, 37, 485, 101, 37, 486, - 487, 488, 492, 492, 489, 490, 491, 34, 34, 39, - 39, 5, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492 + 6, 31, 6, 32, 6, 34, 34, 41, 35, 35, + 39, 39, 42, 45, 43, 44, 44, 44, 44, 47, + 51, 56, 53, 85, 97, 57, 52, 48, 58, 49, + 59, 46, 86, 41, 54, 60, 87, 428, 55, 45, + + 39, 39, 50, 323, 324, 47, 51, 56, 53, 85, + 97, 57, 52, 48, 58, 49, 59, 46, 86, 100, + 54, 60, 87, 61, 55, 62, 64, 63, 50, 65, + 73, 102, 77, 66, 74, 67, 426, 40, 75, 78, + 37, 79, 98, 76, 503, 100, 99, 502, 103, 61, + 483, 62, 64, 63, 104, 65, 73, 102, 77, 66, + 74, 67, 68, 69, 75, 78, 70, 79, 98, 76, + 71, 88, 99, 89, 103, 72, 44, 44, 44, 44, + 104, 105, 90, 106, 480, 107, 91, 108, 68, 69, + 109, 112, 70, 110, 111, 113, 71, 88, 114, 89, + + 115, 72, 80, 116, 117, 118, 81, 105, 90, 106, + 82, 107, 91, 108, 119, 83, 109, 112, 84, 110, + 111, 113, 120, 121, 114, 122, 115, 467, 80, 116, + 117, 118, 81, 123, 124, 429, 82, 125, 126, 128, + 119, 83, 429, 127, 84, 92, 129, 130, 120, 121, + 133, 122, 134, 93, 135, 94, 136, 131, 137, 123, + 124, 95, 141, 125, 126, 128, 132, 427, 96, 127, + 142, 92, 129, 130, 427, 143, 133, 144, 134, 93, + 135, 94, 136, 131, 137, 145, 138, 95, 141, 149, + 150, 151, 132, 139, 96, 146, 142, 147, 155, 156, + + 140, 143, 157, 144, 152, 158, 159, 160, 161, 148, + 162, 145, 138, 163, 153, 149, 150, 151, 154, 139, + 164, 146, 167, 147, 155, 156, 140, 168, 157, 169, + 152, 158, 159, 160, 161, 148, 162, 165, 171, 163, + 153, 172, 173, 174, 154, 175, 164, 176, 167, 177, + 178, 180, 181, 168, 166, 169, 182, 183, 184, 185, + 186, 188, 187, 165, 171, 189, 190, 172, 173, 174, + 191, 175, 193, 176, 179, 177, 178, 180, 181, 194, + 166, 195, 182, 183, 184, 185, 196, 188, 197, 198, + 199, 189, 190, 200, 201, 202, 191, 203, 193, 204, + + 205, 206, 207, 208, 209, 194, 211, 195, 212, 213, + 215, 210, 196, 216, 197, 198, 199, 217, 218, 200, + 201, 202, 219, 203, 220, 204, 205, 206, 207, 208, + 209, 221, 211, 223, 212, 213, 215, 210, 224, 216, + 225, 226, 227, 217, 218, 228, 229, 230, 219, 231, + 220, 232, 233, 234, 235, 236, 237, 221, 240, 223, + 241, 238, 242, 243, 224, 246, 225, 226, 227, 247, + 248, 228, 229, 230, 239, 231, 249, 232, 233, 234, + 235, 236, 237, 250, 240, 251, 241, 238, 242, 243, + 244, 246, 252, 245, 253, 247, 248, 254, 255, 256, + + 239, 257, 249, 258, 259, 260, 261, 262, 263, 250, + 264, 251, 265, 266, 267, 268, 244, 271, 252, 245, + 253, 272, 273, 254, 255, 256, 269, 257, 270, 258, + 259, 260, 261, 262, 263, 274, 264, 275, 265, 266, + 267, 268, 276, 271, 277, 279, 280, 272, 273, 278, + 281, 282, 269, 283, 270, 284, 285, 286, 287, 288, + 289, 274, 291, 275, 292, 293, 294, 295, 276, 296, + 277, 279, 280, 297, 298, 278, 281, 282, 299, 283, + 300, 284, 285, 286, 287, 288, 289, 301, 291, 302, + 292, 293, 294, 295, 303, 296, 304, 305, 306, 297, + + 298, 307, 308, 309, 299, 310, 300, 311, 312, 313, + 314, 315, 316, 301, 317, 302, 318, 319, 320, 321, + 303, 322, 304, 305, 306, 325, 326, 307, 308, 309, + 327, 310, 328, 311, 312, 313, 314, 315, 316, 329, + 317, 330, 318, 319, 320, 321, 331, 322, 332, 333, + 334, 325, 326, 335, 336, 337, 327, 338, 328, 340, + 341, 342, 343, 344, 345, 329, 346, 330, 347, 348, + 339, 349, 331, 350, 332, 333, 334, 351, 352, 335, + 336, 337, 353, 338, 354, 340, 341, 342, 343, 344, + 345, 355, 346, 356, 347, 348, 339, 349, 357, 350, + + 358, 359, 360, 351, 352, 361, 362, 363, 353, 365, + 354, 366, 367, 368, 369, 370, 372, 355, 373, 356, + 375, 376, 377, 378, 357, 379, 358, 359, 360, 380, + 381, 361, 362, 363, 382, 365, 383, 366, 367, 368, + 369, 370, 372, 384, 373, 385, 375, 376, 377, 378, + 386, 379, 387, 388, 389, 380, 381, 390, 391, 392, + 382, 393, 383, 394, 395, 398, 399, 400, 404, 384, + 396, 385, 405, 397, 406, 401, 386, 402, 387, 388, + 389, 410, 411, 390, 391, 392, 403, 393, 412, 394, + 395, 398, 399, 400, 404, 407, 396, 413, 405, 397, + + 406, 414, 408, 415, 416, 409, 418, 410, 411, 419, + 420, 421, 422, 423, 412, 424, 425, 430, 431, 432, + 433, 407, 401, 413, 402, 434, 435, 414, 408, 415, + 416, 409, 418, 403, 436, 419, 420, 421, 422, 423, + 437, 424, 425, 430, 431, 432, 433, 438, 439, 440, + 441, 434, 435, 442, 443, 444, 445, 446, 447, 448, + 436, 449, 450, 451, 452, 453, 437, 454, 455, 456, + 457, 458, 459, 438, 439, 440, 441, 460, 461, 442, + 443, 444, 445, 446, 447, 448, 462, 449, 450, 451, + 452, 453, 463, 454, 455, 456, 457, 458, 459, 464, + + 465, 466, 468, 460, 461, 469, 470, 471, 472, 473, + 474, 475, 462, 476, 477, 478, 479, 481, 463, 482, + 484, 485, 486, 487, 488, 464, 465, 466, 468, 489, + 490, 469, 470, 471, 472, 473, 474, 475, 491, 476, + 477, 478, 479, 481, 492, 482, 484, 485, 486, 487, + 488, 493, 494, 495, 496, 489, 490, 497, 498, 499, + 500, 501, 504, 505, 491, 506, 507, 508, 509, 510, + 492, 511, 512, 513, 514, 515, 516, 493, 494, 495, + 496, 517, 518, 497, 498, 499, 500, 501, 504, 505, + 519, 506, 507, 508, 509, 510, 520, 511, 512, 513, + + 514, 515, 516, 521, 522, 523, 524, 517, 518, 429, + 427, 417, 374, 371, 364, 290, 519, 222, 214, 192, + 170, 36, 520, 101, 36, 525, 525, 525, 525, 521, + 522, 523, 524, 33, 33, 38, 38, 5, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + + 525, 525, 525 } ; -static const flex_int16_t yy_chk[1038] = +static const flex_int16_t yy_chk[1104] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -712,112 +731,120 @@ static const flex_int16_t yy_chk[1038] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, 11, 3, 4, 9, 9, 12, 14, 12, 13, 13, 13, 13, 15, - 16, 18, 17, 20, 19, 30, 16, 19, 20, 15, - 31, 14, 27, 11, 17, 39, 39, 498, 17, 14, - - 497, 27, 15, 271, 271, 15, 16, 18, 17, 20, - 19, 30, 16, 19, 20, 15, 31, 14, 27, 21, - 17, 21, 22, 21, 17, 22, 24, 27, 15, 22, - 24, 22, 496, 494, 24, 25, 456, 33, 42, 24, - 453, 119, 25, 119, 25, 21, 32, 21, 22, 21, - 32, 22, 24, 46, 47, 22, 24, 22, 23, 23, - 24, 25, 23, 33, 42, 24, 23, 28, 25, 28, - 25, 23, 32, 48, 49, 50, 32, 51, 28, 46, - 47, 53, 28, 54, 23, 23, 52, 52, 23, 418, - 417, 416, 23, 28, 55, 28, 56, 23, 26, 48, - - 49, 50, 26, 51, 28, 57, 26, 53, 28, 54, - 59, 26, 52, 52, 26, 45, 45, 45, 45, 60, - 55, 61, 56, 415, 26, 394, 62, 63, 26, 64, - 65, 57, 26, 66, 67, 69, 59, 26, 393, 68, - 26, 29, 70, 71, 68, 60, 73, 61, 74, 29, - 75, 29, 62, 63, 72, 64, 65, 29, 76, 66, - 67, 69, 77, 72, 29, 68, 80, 29, 70, 71, - 68, 79, 73, 81, 74, 29, 75, 29, 79, 82, - 72, 83, 84, 29, 76, 79, 86, 87, 77, 72, - 29, 89, 80, 90, 379, 91, 85, 79, 85, 81, - - 92, 93, 94, 95, 79, 82, 88, 83, 84, 96, - 85, 79, 86, 87, 97, 98, 88, 89, 99, 90, - 88, 91, 85, 102, 85, 103, 92, 93, 94, 95, - 100, 104, 88, 106, 107, 96, 85, 108, 109, 110, - 97, 98, 88, 111, 99, 113, 88, 100, 112, 102, - 114, 103, 115, 116, 117, 118, 100, 104, 121, 106, - 107, 123, 124, 108, 109, 110, 125, 127, 128, 111, - 129, 113, 112, 100, 112, 130, 114, 131, 115, 116, - 117, 118, 132, 133, 121, 134, 135, 123, 124, 137, - 139, 140, 125, 127, 128, 141, 129, 142, 143, 144, - - 145, 130, 146, 131, 147, 148, 149, 145, 132, 133, - 150, 134, 135, 151, 152, 137, 139, 140, 153, 155, - 156, 141, 158, 142, 143, 144, 145, 159, 146, 160, - 147, 148, 149, 145, 161, 162, 150, 163, 164, 151, - 152, 166, 167, 169, 153, 155, 156, 170, 158, 171, - 172, 173, 174, 159, 176, 160, 178, 177, 179, 180, - 161, 162, 181, 163, 164, 183, 186, 166, 167, 169, - 177, 182, 187, 170, 182, 171, 172, 173, 174, 188, - 176, 190, 178, 177, 179, 180, 191, 192, 181, 193, - 195, 183, 186, 197, 198, 199, 177, 182, 187, 201, - - 182, 202, 203, 204, 206, 188, 207, 190, 208, 209, - 210, 211, 191, 192, 213, 193, 195, 214, 215, 197, - 198, 199, 212, 216, 212, 201, 217, 202, 203, 204, - 206, 218, 207, 219, 208, 209, 210, 211, 222, 223, - 213, 224, 225, 214, 215, 226, 227, 228, 212, 216, - 212, 229, 217, 230, 232, 233, 234, 218, 236, 219, - 237, 238, 239, 242, 222, 223, 243, 224, 225, 244, - 245, 226, 227, 228, 246, 248, 249, 229, 250, 230, - 232, 233, 234, 251, 236, 252, 237, 238, 239, 242, - 253, 254, 243, 255, 256, 244, 245, 257, 258, 259, - - 246, 248, 249, 260, 250, 261, 262, 263, 265, 251, - 266, 252, 267, 268, 269, 270, 253, 254, 272, 255, - 256, 273, 274, 257, 258, 259, 275, 278, 280, 260, - 281, 261, 262, 263, 265, 282, 266, 283, 267, 268, - 269, 270, 284, 285, 272, 286, 287, 273, 274, 288, - 289, 290, 275, 278, 280, 292, 281, 293, 296, 287, - 297, 282, 299, 283, 300, 302, 303, 305, 284, 285, - 306, 286, 287, 307, 308, 288, 289, 290, 309, 310, - 311, 292, 312, 293, 296, 287, 297, 314, 299, 315, - 300, 302, 303, 305, 316, 317, 306, 322, 323, 307, - - 308, 324, 325, 326, 309, 310, 311, 328, 312, 329, - 332, 333, 334, 314, 335, 315, 336, 337, 338, 339, - 316, 317, 340, 322, 323, 341, 342, 324, 325, 326, - 344, 345, 347, 328, 350, 329, 332, 333, 334, 351, - 335, 352, 336, 337, 338, 339, 353, 357, 340, 360, - 361, 341, 342, 358, 364, 365, 344, 345, 347, 358, - 350, 366, 358, 368, 367, 351, 363, 352, 363, 369, - 371, 367, 353, 357, 367, 360, 361, 363, 372, 358, - 364, 365, 375, 376, 378, 358, 383, 366, 358, 368, - 367, 385, 387, 388, 389, 369, 371, 367, 390, 395, - - 367, 396, 398, 392, 372, 392, 399, 400, 375, 376, - 378, 402, 383, 403, 392, 404, 408, 385, 387, 388, - 389, 409, 410, 412, 390, 395, 413, 396, 398, 414, - 419, 420, 399, 400, 421, 422, 423, 402, 425, 403, - 426, 404, 408, 427, 428, 429, 430, 409, 410, 412, - 431, 432, 413, 433, 435, 414, 419, 420, 436, 437, - 421, 422, 423, 440, 425, 442, 426, 444, 445, 427, - 428, 429, 430, 446, 447, 448, 431, 432, 449, 433, - 435, 450, 451, 452, 436, 437, 454, 455, 457, 440, - 458, 442, 459, 444, 445, 461, 463, 464, 465, 446, - - 447, 448, 466, 467, 449, 468, 469, 450, 451, 452, - 470, 472, 454, 455, 457, 473, 458, 474, 459, 476, - 478, 461, 463, 464, 465, 479, 480, 482, 466, 467, - 484, 468, 469, 485, 486, 487, 470, 472, 488, 489, - 490, 473, 331, 474, 327, 476, 478, 321, 235, 157, - 126, 479, 480, 482, 105, 37, 484, 36, 7, 485, - 486, 487, 5, 0, 488, 489, 490, 493, 493, 495, - 495, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492, 492, 492, 492, - 492, 492, 492, 492, 492, 492, 492 + 16, 18, 17, 27, 30, 19, 16, 15, 19, 15, + 20, 14, 27, 11, 17, 20, 27, 531, 17, 14, + + 38, 38, 15, 274, 274, 15, 16, 18, 17, 27, + 30, 19, 16, 15, 19, 15, 20, 14, 27, 32, + 17, 20, 27, 21, 17, 21, 22, 21, 15, 22, + 24, 41, 25, 22, 24, 22, 530, 529, 24, 25, + 527, 25, 31, 24, 496, 32, 31, 495, 45, 21, + 473, 21, 22, 21, 46, 22, 24, 41, 25, 22, + 24, 22, 23, 23, 24, 25, 23, 25, 31, 24, + 23, 28, 31, 28, 45, 23, 44, 44, 44, 44, + 46, 47, 28, 48, 470, 49, 28, 50, 23, 23, + 51, 53, 23, 52, 52, 54, 23, 28, 55, 28, + + 56, 23, 26, 57, 59, 60, 26, 47, 28, 48, + 26, 49, 28, 50, 61, 26, 51, 53, 26, 52, + 52, 54, 62, 63, 55, 64, 56, 456, 26, 57, + 59, 60, 26, 65, 66, 429, 26, 67, 68, 69, + 61, 26, 428, 68, 26, 29, 70, 71, 62, 63, + 73, 64, 74, 29, 75, 29, 76, 72, 77, 65, + 66, 29, 80, 67, 68, 69, 72, 427, 29, 68, + 81, 29, 70, 71, 426, 82, 73, 83, 74, 29, + 75, 29, 76, 72, 77, 84, 79, 29, 80, 86, + 87, 88, 72, 79, 29, 85, 81, 85, 90, 91, + + 79, 82, 92, 83, 89, 93, 94, 95, 96, 85, + 97, 84, 79, 98, 89, 86, 87, 88, 89, 79, + 99, 85, 102, 85, 90, 91, 79, 103, 92, 104, + 89, 93, 94, 95, 96, 85, 97, 100, 106, 98, + 89, 107, 108, 109, 89, 110, 99, 111, 102, 112, + 113, 114, 115, 103, 100, 104, 116, 117, 118, 119, + 120, 122, 120, 100, 106, 124, 125, 107, 108, 109, + 126, 110, 128, 111, 113, 112, 113, 114, 115, 129, + 100, 130, 116, 117, 118, 119, 131, 122, 132, 133, + 134, 124, 125, 135, 136, 138, 126, 140, 128, 141, + + 142, 143, 144, 145, 146, 129, 147, 130, 148, 149, + 151, 146, 131, 152, 132, 133, 134, 153, 154, 135, + 136, 138, 155, 140, 157, 141, 142, 143, 144, 145, + 146, 158, 147, 160, 148, 149, 151, 146, 161, 152, + 162, 163, 164, 153, 154, 165, 167, 168, 155, 170, + 157, 172, 173, 174, 175, 176, 178, 158, 180, 160, + 181, 179, 182, 183, 161, 185, 162, 163, 164, 188, + 189, 165, 167, 168, 179, 170, 190, 172, 173, 174, + 175, 176, 178, 192, 180, 193, 181, 179, 182, 183, + 184, 185, 194, 184, 195, 188, 189, 197, 199, 200, + + 179, 201, 190, 203, 204, 205, 206, 208, 209, 192, + 210, 193, 211, 212, 213, 214, 184, 216, 194, 184, + 195, 217, 218, 197, 199, 200, 215, 201, 215, 203, + 204, 205, 206, 208, 209, 219, 210, 220, 211, 212, + 213, 214, 221, 216, 222, 225, 226, 217, 218, 222, + 227, 228, 215, 229, 215, 230, 231, 232, 234, 235, + 236, 219, 238, 220, 239, 240, 241, 244, 221, 245, + 222, 225, 226, 246, 247, 222, 227, 228, 248, 229, + 250, 230, 231, 232, 234, 235, 236, 251, 238, 252, + 239, 240, 241, 244, 253, 245, 254, 255, 256, 246, + + 247, 257, 258, 259, 248, 260, 250, 261, 262, 263, + 264, 265, 267, 251, 268, 252, 269, 270, 271, 272, + 253, 273, 254, 255, 256, 275, 276, 257, 258, 259, + 277, 260, 278, 261, 262, 263, 264, 265, 267, 279, + 268, 281, 269, 270, 271, 272, 283, 273, 284, 285, + 286, 275, 276, 287, 288, 289, 277, 290, 278, 291, + 292, 293, 295, 296, 299, 279, 300, 281, 302, 303, + 290, 305, 283, 306, 284, 285, 286, 308, 309, 287, + 288, 289, 310, 290, 311, 291, 292, 293, 295, 296, + 299, 312, 300, 313, 302, 303, 290, 305, 314, 306, + + 315, 317, 318, 308, 309, 319, 320, 321, 310, 326, + 311, 327, 328, 329, 330, 331, 333, 312, 334, 313, + 337, 338, 339, 340, 314, 341, 315, 317, 318, 342, + 343, 319, 320, 321, 344, 326, 345, 327, 328, 329, + 330, 331, 333, 346, 334, 347, 337, 338, 339, 340, + 349, 341, 350, 352, 355, 342, 343, 356, 357, 358, + 344, 359, 345, 363, 364, 366, 367, 368, 371, 346, + 364, 347, 372, 364, 373, 370, 349, 370, 350, 352, + 355, 375, 376, 356, 357, 358, 370, 359, 378, 363, + 364, 366, 367, 368, 371, 374, 364, 379, 372, 364, + + 373, 382, 374, 383, 385, 374, 390, 375, 376, 392, + 393, 395, 396, 397, 378, 398, 399, 404, 405, 407, + 408, 374, 401, 379, 401, 409, 411, 382, 374, 383, + 385, 374, 390, 401, 412, 392, 393, 395, 396, 397, + 413, 398, 399, 404, 405, 407, 408, 417, 418, 419, + 420, 409, 411, 422, 423, 424, 425, 430, 431, 432, + 412, 433, 434, 436, 437, 438, 413, 439, 440, 441, + 442, 443, 444, 417, 418, 419, 420, 445, 446, 422, + 423, 424, 425, 430, 431, 432, 448, 433, 434, 436, + 437, 438, 449, 439, 440, 441, 442, 443, 444, 450, + + 453, 455, 458, 445, 446, 459, 460, 461, 462, 463, + 464, 465, 448, 466, 467, 468, 469, 471, 449, 472, + 474, 475, 476, 477, 479, 450, 453, 455, 458, 480, + 482, 459, 460, 461, 462, 463, 464, 465, 483, 466, + 467, 468, 469, 471, 484, 472, 474, 475, 476, 477, + 479, 485, 486, 487, 488, 480, 482, 489, 490, 491, + 493, 494, 497, 499, 483, 501, 502, 503, 504, 505, + 484, 507, 508, 509, 511, 512, 513, 485, 486, 487, + 488, 514, 515, 489, 490, 491, 493, 494, 497, 499, + 516, 501, 502, 503, 504, 505, 519, 507, 508, 509, + + 511, 512, 513, 520, 521, 522, 523, 514, 515, 403, + 402, 386, 336, 332, 325, 237, 516, 159, 150, 127, + 105, 36, 519, 35, 7, 5, 0, 0, 0, 520, + 521, 522, 523, 526, 526, 528, 528, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + 525, 525, 525, 525, 525, 525, 525, 525, 525, 525, + + 525, 525, 525 } ; static yy_state_type yy_last_accepting_state; @@ -909,8 +936,8 @@ conf_yy_fatal_error(const char *msg) { return 0; } -#line 913 "config-lexer.c" -#line 914 "config-lexer.c" +#line 940 "config-lexer.c" +#line 941 "config-lexer.c" #define INITIAL 0 #define IN_COMMENT 1 @@ -1129,7 +1156,7 @@ YY_DECL #line 88 "config-lexer.l" -#line 1133 "config-lexer.c" +#line 1160 "config-lexer.c" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -1162,13 +1189,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 493 ) + if ( yy_current_state >= 526 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 492 ); + while ( yy_current_state != 525 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -1302,357 +1329,357 @@ YY_RULE_SETUP case 14: YY_RULE_SETUP #line 145 "config-lexer.l" -{ return BLACKLIST; } +{ return BIND; } YY_BREAK case 15: YY_RULE_SETUP #line 146 "config-lexer.l" -{ return CHANNEL; } +{ return BLACKLIST; } YY_BREAK case 16: YY_RULE_SETUP #line 147 "config-lexer.l" -{ return COMMAND_INTERVAL; } +{ return CHANNEL; } YY_BREAK case 17: YY_RULE_SETUP #line 148 "config-lexer.l" -{ return COMMAND_QUEUE_SIZE; } +{ return COMMAND_INTERVAL; } YY_BREAK case 18: YY_RULE_SETUP #line 149 "config-lexer.l" -{ return COMMAND_TIMEOUT; } +{ return COMMAND_QUEUE_SIZE; } YY_BREAK case 19: YY_RULE_SETUP #line 150 "config-lexer.l" -{ return CONNREGEX; } +{ return COMMAND_TIMEOUT; } YY_BREAK case 20: YY_RULE_SETUP #line 151 "config-lexer.l" -{ return DNS_FDLIMIT; } +{ return CONNREGEX; } YY_BREAK case 21: YY_RULE_SETUP #line 152 "config-lexer.l" -{ return DNS_TIMEOUT; } +{ return DNS_FDLIMIT; } YY_BREAK case 22: YY_RULE_SETUP #line 153 "config-lexer.l" -{ return DNSBL_FROM; } +{ return DNS_TIMEOUT; } YY_BREAK case 23: YY_RULE_SETUP #line 154 "config-lexer.l" -{ return DNSBL_TO; } +{ return DNSBL_FROM; } YY_BREAK case 24: YY_RULE_SETUP #line 155 "config-lexer.l" -{ return EXEMPT; } +{ return DNSBL_TO; } YY_BREAK case 25: YY_RULE_SETUP #line 156 "config-lexer.l" -{ return FD; } +{ return EXEMPT; } YY_BREAK case 26: YY_RULE_SETUP #line 157 "config-lexer.l" -{ return INVITE; } +{ return FD; } YY_BREAK case 27: YY_RULE_SETUP #line 158 "config-lexer.l" -{ return IPV4; } +{ return INVITE; } YY_BREAK case 28: YY_RULE_SETUP #line 159 "config-lexer.l" -{ return IPV6; } +{ return IPV4; } YY_BREAK case 29: YY_RULE_SETUP #line 160 "config-lexer.l" -{ return IRC; } +{ return IPV6; } YY_BREAK case 30: YY_RULE_SETUP #line 161 "config-lexer.l" -{ return KLINE; } +{ return IRC; } YY_BREAK case 31: YY_RULE_SETUP #line 162 "config-lexer.l" -{ return KEY; } +{ return KLINE; } YY_BREAK case 32: YY_RULE_SETUP #line 163 "config-lexer.l" -{ return MASK; } +{ return KEY; } YY_BREAK case 33: YY_RULE_SETUP #line 164 "config-lexer.l" -{ return MAX_READ; } +{ return MASK; } YY_BREAK case 34: YY_RULE_SETUP #line 165 "config-lexer.l" -{ return MODE; } +{ return MAX_READ; } YY_BREAK case 35: YY_RULE_SETUP #line 166 "config-lexer.l" -{ return NAME; } +{ return MODE; } YY_BREAK case 36: YY_RULE_SETUP #line 167 "config-lexer.l" -{ return NEGCACHE; } +{ return NAME; } YY_BREAK case 37: YY_RULE_SETUP #line 168 "config-lexer.l" -{ return NEGCACHE_REBUILD; } +{ return NEGCACHE; } YY_BREAK case 38: YY_RULE_SETUP #line 169 "config-lexer.l" -{ return NICK; } +{ return NEGCACHE_REBUILD; } YY_BREAK case 39: YY_RULE_SETUP #line 170 "config-lexer.l" -{ return NICKSERV; } +{ return NICK; } YY_BREAK case 40: YY_RULE_SETUP #line 171 "config-lexer.l" -{ return NOTICE; } +{ return NICKSERV; } YY_BREAK case 41: YY_RULE_SETUP #line 172 "config-lexer.l" -{ return OPER; } +{ return NOTICE; } YY_BREAK case 42: YY_RULE_SETUP #line 173 "config-lexer.l" -{ return OPM; } +{ return OPER; } YY_BREAK case 43: YY_RULE_SETUP #line 174 "config-lexer.l" -{ return OPTIONS; } +{ return OPM; } YY_BREAK case 44: YY_RULE_SETUP #line 175 "config-lexer.l" -{ return PASSWORD; } +{ return OPTIONS; } YY_BREAK case 45: YY_RULE_SETUP #line 176 "config-lexer.l" -{ return PERFORM; } +{ return PASSWORD; } YY_BREAK case 46: YY_RULE_SETUP #line 177 "config-lexer.l" -{ return PIDFILE; } +{ return PERFORM; } YY_BREAK case 47: YY_RULE_SETUP #line 178 "config-lexer.l" -{ return PORT; } +{ return PIDFILE; } YY_BREAK case 48: YY_RULE_SETUP #line 179 "config-lexer.l" -{ return PROTOCOL; } +{ return PORT; } YY_BREAK case 49: YY_RULE_SETUP #line 180 "config-lexer.l" -{ return READTIMEOUT; } +{ return PROTOCOL; } YY_BREAK case 50: YY_RULE_SETUP #line 181 "config-lexer.l" -{ return REALNAME; } +{ return READTIMEOUT; } YY_BREAK case 51: YY_RULE_SETUP #line 182 "config-lexer.l" -{ return RECONNECTINTERVAL; } +{ return REALNAME; } YY_BREAK case 52: YY_RULE_SETUP #line 183 "config-lexer.l" -{ return REPLY; } +{ return RECONNECTINTERVAL; } YY_BREAK case 53: YY_RULE_SETUP #line 184 "config-lexer.l" -{ return SCANLOG; } +{ return REPLY; } YY_BREAK case 54: YY_RULE_SETUP #line 185 "config-lexer.l" -{ return SCANNER; } +{ return RSA_PRIVATE_KEY_FILE; } YY_BREAK case 55: YY_RULE_SETUP #line 186 "config-lexer.l" -{ return SENDMAIL; } +{ return SCANLOG; } YY_BREAK case 56: YY_RULE_SETUP #line 187 "config-lexer.l" -{ return SERVER; } +{ return SCANNER; } YY_BREAK case 57: YY_RULE_SETUP #line 188 "config-lexer.l" -{ return TARGET_IP; } +{ return SENDMAIL; } YY_BREAK case 58: YY_RULE_SETUP #line 189 "config-lexer.l" -{ return TARGET_PORT; } +{ return SERVER; } YY_BREAK case 59: YY_RULE_SETUP #line 190 "config-lexer.l" -{ return TARGET_STRING;} +{ return TARGET_IP; } YY_BREAK case 60: YY_RULE_SETUP #line 191 "config-lexer.l" -{ return TIMEOUT; } +{ return TARGET_PORT; } YY_BREAK case 61: YY_RULE_SETUP #line 192 "config-lexer.l" -{ return TLS; } +{ return TARGET_STRING;} YY_BREAK case 62: YY_RULE_SETUP #line 193 "config-lexer.l" -{ return TLS_HOSTNAME_VERIFICATION; } +{ return TIMEOUT; } YY_BREAK case 63: YY_RULE_SETUP #line 194 "config-lexer.l" -{ return TYPE; } +{ return TLS; } YY_BREAK case 64: YY_RULE_SETUP #line 195 "config-lexer.l" -{ return USER; } +{ return TLS_CERTIFICATE_FILE; } YY_BREAK case 65: YY_RULE_SETUP #line 196 "config-lexer.l" -{ return USERNAME; } +{ return TLS_HOSTNAME_VERIFICATION; } YY_BREAK case 66: YY_RULE_SETUP #line 197 "config-lexer.l" -{ return VHOST; } +{ return TYPE; } YY_BREAK case 67: YY_RULE_SETUP -#line 199 "config-lexer.l" -{ return YEARS; } +#line 198 "config-lexer.l" +{ return USER; } YY_BREAK case 68: YY_RULE_SETUP -#line 200 "config-lexer.l" -{ return YEARS; } +#line 199 "config-lexer.l" +{ return USERNAME; } YY_BREAK case 69: YY_RULE_SETUP #line 201 "config-lexer.l" -{ return MONTHS; } +{ return YEARS; } YY_BREAK case 70: YY_RULE_SETUP #line 202 "config-lexer.l" -{ return MONTHS; } +{ return YEARS; } YY_BREAK case 71: YY_RULE_SETUP #line 203 "config-lexer.l" -{ return WEEKS; } +{ return MONTHS; } YY_BREAK case 72: YY_RULE_SETUP #line 204 "config-lexer.l" -{ return WEEKS; } +{ return MONTHS; } YY_BREAK case 73: YY_RULE_SETUP #line 205 "config-lexer.l" -{ return DAYS; } +{ return WEEKS; } YY_BREAK case 74: YY_RULE_SETUP #line 206 "config-lexer.l" -{ return DAYS; } +{ return WEEKS; } YY_BREAK case 75: YY_RULE_SETUP #line 207 "config-lexer.l" -{ return HOURS; } +{ return DAYS; } YY_BREAK case 76: YY_RULE_SETUP #line 208 "config-lexer.l" -{ return HOURS; } +{ return DAYS; } YY_BREAK case 77: YY_RULE_SETUP #line 209 "config-lexer.l" -{ return MINUTES; } +{ return HOURS; } YY_BREAK case 78: YY_RULE_SETUP #line 210 "config-lexer.l" -{ return MINUTES; } +{ return HOURS; } YY_BREAK case 79: YY_RULE_SETUP #line 211 "config-lexer.l" -{ return SECONDS; } +{ return MINUTES; } YY_BREAK case 80: YY_RULE_SETUP #line 212 "config-lexer.l" -{ return SECONDS; } +{ return MINUTES; } YY_BREAK case 81: YY_RULE_SETUP -#line 214 "config-lexer.l" -{ return BYTES; } +#line 213 "config-lexer.l" +{ return SECONDS; } YY_BREAK case 82: YY_RULE_SETUP -#line 215 "config-lexer.l" -{ return BYTES; } +#line 214 "config-lexer.l" +{ return SECONDS; } YY_BREAK case 83: YY_RULE_SETUP #line 216 "config-lexer.l" -{ return KBYTES; } +{ return BYTES; } YY_BREAK case 84: YY_RULE_SETUP #line 217 "config-lexer.l" -{ return KBYTES; } +{ return BYTES; } YY_BREAK case 85: YY_RULE_SETUP @@ -1672,12 +1699,12 @@ YY_RULE_SETUP case 88: YY_RULE_SETUP #line 221 "config-lexer.l" -{ return MBYTES; } +{ return KBYTES; } YY_BREAK case 89: YY_RULE_SETUP #line 222 "config-lexer.l" -{ return MBYTES; } +{ return KBYTES; } YY_BREAK case 90: YY_RULE_SETUP @@ -1696,147 +1723,157 @@ YY_RULE_SETUP YY_BREAK case 93: YY_RULE_SETUP +#line 226 "config-lexer.l" +{ return MBYTES; } + YY_BREAK +case 94: +YY_RULE_SETUP #line 227 "config-lexer.l" +{ return MBYTES; } + YY_BREAK +case 95: +YY_RULE_SETUP +#line 229 "config-lexer.l" { yylval.number = OPM_TYPE_HTTP; return PROTOCOLTYPE; } YY_BREAK -case 94: +case 96: YY_RULE_SETUP -#line 232 "config-lexer.l" +#line 234 "config-lexer.l" { yylval.number = OPM_TYPE_HTTPPOST; return PROTOCOLTYPE; } YY_BREAK -case 95: +case 97: YY_RULE_SETUP -#line 237 "config-lexer.l" +#line 239 "config-lexer.l" { yylval.number = OPM_TYPE_HTTPS; return PROTOCOLTYPE; } YY_BREAK -case 96: +case 98: YY_RULE_SETUP -#line 242 "config-lexer.l" +#line 244 "config-lexer.l" { yylval.number = OPM_TYPE_HTTPSPOST; return PROTOCOLTYPE; } YY_BREAK -case 97: +case 99: YY_RULE_SETUP -#line 247 "config-lexer.l" +#line 249 "config-lexer.l" { yylval.number = OPM_TYPE_SOCKS4; return PROTOCOLTYPE; } YY_BREAK -case 98: +case 100: YY_RULE_SETUP -#line 252 "config-lexer.l" +#line 254 "config-lexer.l" { yylval.number = OPM_TYPE_SOCKS5; return PROTOCOLTYPE; } YY_BREAK -case 99: +case 101: YY_RULE_SETUP -#line 257 "config-lexer.l" +#line 259 "config-lexer.l" { yylval.number = OPM_TYPE_WINGATE; return PROTOCOLTYPE; } YY_BREAK -case 100: +case 102: YY_RULE_SETUP -#line 262 "config-lexer.l" +#line 264 "config-lexer.l" { yylval.number = OPM_TYPE_ROUTER; return PROTOCOLTYPE; } YY_BREAK -case 101: +case 103: YY_RULE_SETUP -#line 267 "config-lexer.l" +#line 269 "config-lexer.l" { yylval.number = OPM_TYPE_DREAMBOX; return PROTOCOLTYPE; } YY_BREAK -case 102: +case 104: YY_RULE_SETUP -#line 273 "config-lexer.l" +#line 275 "config-lexer.l" { yylval.number = OPM_TYPE_SSH; return PROTOCOLTYPE; } YY_BREAK -case 103: +case 105: YY_RULE_SETUP -#line 278 "config-lexer.l" +#line 280 "config-lexer.l" { yylval.number=1; return NUMBER; } YY_BREAK -case 104: +case 106: YY_RULE_SETUP -#line 282 "config-lexer.l" +#line 284 "config-lexer.l" { yylval.number=1; return NUMBER; } YY_BREAK -case 105: +case 107: YY_RULE_SETUP -#line 286 "config-lexer.l" +#line 288 "config-lexer.l" { yylval.number=1; return NUMBER; } YY_BREAK -case 106: +case 108: YY_RULE_SETUP -#line 293 "config-lexer.l" +#line 295 "config-lexer.l" { yylval.number=0; return NUMBER; } YY_BREAK -case 107: +case 109: YY_RULE_SETUP -#line 298 "config-lexer.l" +#line 300 "config-lexer.l" { yylval.number=0; return NUMBER; } YY_BREAK -case 108: +case 110: YY_RULE_SETUP -#line 303 "config-lexer.l" +#line 305 "config-lexer.l" { yylval.number=0; return NUMBER; } YY_BREAK -case 109: +case 111: YY_RULE_SETUP -#line 308 "config-lexer.l" +#line 310 "config-lexer.l" { return yytext[0]; } YY_BREAK case YY_STATE_EOF(INITIAL): -#line 309 "config-lexer.l" +#line 311 "config-lexer.l" { if (conf_eof()) yyterminate(); } YY_BREAK -case 110: +case 112: YY_RULE_SETUP -#line 311 "config-lexer.l" +#line 313 "config-lexer.l" ECHO; YY_BREAK -#line 1840 "config-lexer.c" +#line 1877 "config-lexer.c" case YY_END_OF_BUFFER: { @@ -2132,7 +2169,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 493 ) + if ( yy_current_state >= 526 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -2160,11 +2197,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 493 ) + if ( yy_current_state >= 526 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 492); + yy_is_jam = (yy_current_state == 525); return yy_is_jam ? 0 : yy_current_state; } @@ -2803,7 +2840,7 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 311 "config-lexer.l" +#line 313 "config-lexer.l" static void diff --git a/src/config-lexer.l b/src/config-lexer.l index 58fa98e..e7a9afc 100644 --- a/src/config-lexer.l +++ b/src/config-lexer.l @@ -142,6 +142,7 @@ include \.include{WS}(\<.*\>|\".*\") ADDRESS_FAMILY { return ADDRESS_FAMILY; } AWAY { return AWAY; } BAN_UNKNOWN { return BAN_UNKNOWN; } +BIND { return BIND; } BLACKLIST { return BLACKLIST; } CHANNEL { return CHANNEL; } COMMAND_INTERVAL { return COMMAND_INTERVAL; } @@ -181,6 +182,7 @@ READTIMEOUT { return READTIMEOUT; } REALNAME { return REALNAME; } RECONNECTINTERVAL { return RECONNECTINTERVAL; } REPLY { return REPLY; } +RSA_PRIVATE_KEY_FILE { return RSA_PRIVATE_KEY_FILE; } SCANLOG { return SCANLOG; } SCANNER { return SCANNER; } SENDMAIL { return SENDMAIL; } @@ -190,11 +192,11 @@ TARGET_PORT { return TARGET_PORT; } TARGET_STRING { return TARGET_STRING;} TIMEOUT { return TIMEOUT; } TLS { return TLS; } +TLS_CERTIFICATE_FILE { return TLS_CERTIFICATE_FILE; } TLS_HOSTNAME_VERIFICATION { return TLS_HOSTNAME_VERIFICATION; } TYPE { return TYPE; } USER { return USER; } USERNAME { return USERNAME; } -VHOST { return VHOST; } years { return YEARS; } year { return YEARS; } diff --git a/src/config-parser.c b/src/config-parser.c index 221da4b..f9802a4 100644 --- a/src/config-parser.c +++ b/src/config-parser.c @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.3.2. */ +/* A Bison parser, made by GNU Bison 3.5.1. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -48,7 +48,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.3.2" +#define YYBISON_VERSION "3.5.1" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -66,7 +66,7 @@ /* First part of user prologue. */ -#line 21 "config-parser.y" /* yacc.c:337 */ +#line 21 "config-parser.y" #include <string.h> @@ -78,7 +78,17 @@ int yylex(void); static void *tmp; /* Variable to temporarily hold nodes before insertion to list */ -#line 82 "config-parser.c" /* yacc.c:337 */ +#line 82 "config-parser.c" + +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast<Type> (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus @@ -99,8 +109,8 @@ static void *tmp; /* Variable to temporarily hold nodes before insertion to lis # define YYERROR_VERBOSE 0 #endif -/* In a future release of Bison, this section will be replaced - by #include "y.tab.h". */ +/* Use api.header.include to #include this header + instead of duplicating it here. */ #ifndef YY_YY_CONFIG_PARSER_H_INCLUDED # define YY_YY_CONFIG_PARSER_H_INCLUDED /* Debug traces. */ @@ -119,158 +129,161 @@ extern int yydebug; ADDRESS_FAMILY = 258, AWAY = 259, BAN_UNKNOWN = 260, - BLACKLIST = 261, - BYTES = 262, - KBYTES = 263, - MBYTES = 264, - CHANNEL = 265, - COMMAND_INTERVAL = 266, - COMMAND_QUEUE_SIZE = 267, - COMMAND_TIMEOUT = 268, - CONNREGEX = 269, - DNS_FDLIMIT = 270, - DNS_TIMEOUT = 271, - DNSBL_FROM = 272, - DNSBL_TO = 273, - EXEMPT = 274, - FD = 275, - INVITE = 276, - IPV4 = 277, - IPV6 = 278, - IRC = 279, - KLINE = 280, - KEY = 281, - MASK = 282, - MAX_READ = 283, - MODE = 284, - NAME = 285, - NEGCACHE = 286, - NEGCACHE_REBUILD = 287, - NICK = 288, - NICKSERV = 289, - NOTICE = 290, - OPER = 291, - OPM = 292, - OPTIONS = 293, - PASSWORD = 294, - PERFORM = 295, - PIDFILE = 296, - PORT = 297, - PROTOCOL = 298, - READTIMEOUT = 299, - REALNAME = 300, - RECONNECTINTERVAL = 301, - REPLY = 302, - SCANLOG = 303, - SCANNER = 304, - SECONDS = 305, - MINUTES = 306, - HOURS = 307, - DAYS = 308, - WEEKS = 309, - MONTHS = 310, - YEARS = 311, - SENDMAIL = 312, - SERVER = 313, - TARGET_IP = 314, - TARGET_PORT = 315, - TARGET_STRING = 316, - TIMEOUT = 317, - TLS = 318, - TLS_HOSTNAME_VERIFICATION = 319, - TYPE = 320, - USERNAME = 321, - USER = 322, - VHOST = 323, - NUMBER = 324, - STRING = 325, - PROTOCOLTYPE = 326 + BIND = 261, + BLACKLIST = 262, + BYTES = 263, + KBYTES = 264, + MBYTES = 265, + CHANNEL = 266, + COMMAND_INTERVAL = 267, + COMMAND_QUEUE_SIZE = 268, + COMMAND_TIMEOUT = 269, + CONNREGEX = 270, + DNS_FDLIMIT = 271, + DNS_TIMEOUT = 272, + DNSBL_FROM = 273, + DNSBL_TO = 274, + EXEMPT = 275, + FD = 276, + INVITE = 277, + IPV4 = 278, + IPV6 = 279, + IRC = 280, + KLINE = 281, + KEY = 282, + MASK = 283, + MAX_READ = 284, + MODE = 285, + NAME = 286, + NEGCACHE = 287, + NEGCACHE_REBUILD = 288, + NICK = 289, + NICKSERV = 290, + NOTICE = 291, + OPER = 292, + OPM = 293, + OPTIONS = 294, + PASSWORD = 295, + PERFORM = 296, + PIDFILE = 297, + PORT = 298, + PROTOCOL = 299, + RSA_PRIVATE_KEY_FILE = 300, + READTIMEOUT = 301, + REALNAME = 302, + RECONNECTINTERVAL = 303, + REPLY = 304, + SCANLOG = 305, + SCANNER = 306, + SECONDS = 307, + MINUTES = 308, + HOURS = 309, + DAYS = 310, + WEEKS = 311, + MONTHS = 312, + YEARS = 313, + SENDMAIL = 314, + SERVER = 315, + TARGET_IP = 316, + TARGET_PORT = 317, + TARGET_STRING = 318, + TIMEOUT = 319, + TLS = 320, + TLS_CERTIFICATE_FILE = 321, + TLS_HOSTNAME_VERIFICATION = 322, + TYPE = 323, + USERNAME = 324, + USER = 325, + NUMBER = 326, + STRING = 327, + PROTOCOLTYPE = 328 }; #endif /* Tokens. */ #define ADDRESS_FAMILY 258 #define AWAY 259 #define BAN_UNKNOWN 260 -#define BLACKLIST 261 -#define BYTES 262 -#define KBYTES 263 -#define MBYTES 264 -#define CHANNEL 265 -#define COMMAND_INTERVAL 266 -#define COMMAND_QUEUE_SIZE 267 -#define COMMAND_TIMEOUT 268 -#define CONNREGEX 269 -#define DNS_FDLIMIT 270 -#define DNS_TIMEOUT 271 -#define DNSBL_FROM 272 -#define DNSBL_TO 273 -#define EXEMPT 274 -#define FD 275 -#define INVITE 276 -#define IPV4 277 -#define IPV6 278 -#define IRC 279 -#define KLINE 280 -#define KEY 281 -#define MASK 282 -#define MAX_READ 283 -#define MODE 284 -#define NAME 285 -#define NEGCACHE 286 -#define NEGCACHE_REBUILD 287 -#define NICK 288 -#define NICKSERV 289 -#define NOTICE 290 -#define OPER 291 -#define OPM 292 -#define OPTIONS 293 -#define PASSWORD 294 -#define PERFORM 295 -#define PIDFILE 296 -#define PORT 297 -#define PROTOCOL 298 -#define READTIMEOUT 299 -#define REALNAME 300 -#define RECONNECTINTERVAL 301 -#define REPLY 302 -#define SCANLOG 303 -#define SCANNER 304 -#define SECONDS 305 -#define MINUTES 306 -#define HOURS 307 -#define DAYS 308 -#define WEEKS 309 -#define MONTHS 310 -#define YEARS 311 -#define SENDMAIL 312 -#define SERVER 313 -#define TARGET_IP 314 -#define TARGET_PORT 315 -#define TARGET_STRING 316 -#define TIMEOUT 317 -#define TLS 318 -#define TLS_HOSTNAME_VERIFICATION 319 -#define TYPE 320 -#define USERNAME 321 -#define USER 322 -#define VHOST 323 -#define NUMBER 324 -#define STRING 325 -#define PROTOCOLTYPE 326 +#define BIND 261 +#define BLACKLIST 262 +#define BYTES 263 +#define KBYTES 264 +#define MBYTES 265 +#define CHANNEL 266 +#define COMMAND_INTERVAL 267 +#define COMMAND_QUEUE_SIZE 268 +#define COMMAND_TIMEOUT 269 +#define CONNREGEX 270 +#define DNS_FDLIMIT 271 +#define DNS_TIMEOUT 272 +#define DNSBL_FROM 273 +#define DNSBL_TO 274 +#define EXEMPT 275 +#define FD 276 +#define INVITE 277 +#define IPV4 278 +#define IPV6 279 +#define IRC 280 +#define KLINE 281 +#define KEY 282 +#define MASK 283 +#define MAX_READ 284 +#define MODE 285 +#define NAME 286 +#define NEGCACHE 287 +#define NEGCACHE_REBUILD 288 +#define NICK 289 +#define NICKSERV 290 +#define NOTICE 291 +#define OPER 292 +#define OPM 293 +#define OPTIONS 294 +#define PASSWORD 295 +#define PERFORM 296 +#define PIDFILE 297 +#define PORT 298 +#define PROTOCOL 299 +#define RSA_PRIVATE_KEY_FILE 300 +#define READTIMEOUT 301 +#define REALNAME 302 +#define RECONNECTINTERVAL 303 +#define REPLY 304 +#define SCANLOG 305 +#define SCANNER 306 +#define SECONDS 307 +#define MINUTES 308 +#define HOURS 309 +#define DAYS 310 +#define WEEKS 311 +#define MONTHS 312 +#define YEARS 313 +#define SENDMAIL 314 +#define SERVER 315 +#define TARGET_IP 316 +#define TARGET_PORT 317 +#define TARGET_STRING 318 +#define TIMEOUT 319 +#define TLS 320 +#define TLS_CERTIFICATE_FILE 321 +#define TLS_HOSTNAME_VERIFICATION 322 +#define TYPE 323 +#define USERNAME 324 +#define USER 325 +#define NUMBER 326 +#define STRING 327 +#define PROTOCOLTYPE 328 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - union YYSTYPE { -#line 93 "config-parser.y" /* yacc.c:352 */ +#line 95 "config-parser.y" int number; char *string; -#line 272 "config-parser.c" /* yacc.c:352 */ -}; +#line 285 "config-parser.c" +}; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -289,28 +302,75 @@ int yyparse (void); # undef short #endif -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + <limits.h> and (if available) <stdint.h> are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include <limits.h> /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include <stdint.h> /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif #endif -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; #else -typedef unsigned short yytype_uint16; +typedef short yytype_int16; +#endif + +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; +#else +typedef short yytype_uint8; #endif -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; #else -typedef short yytype_int16; +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include <stddef.h> /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif #endif #ifndef YYSIZE_T @@ -318,7 +378,7 @@ typedef short yytype_int16; # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else @@ -326,7 +386,19 @@ typedef short yytype_int16; # endif #endif -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + +/* Stored state numbers (used for stacks). */ +typedef yytype_int16 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS @@ -340,22 +412,20 @@ typedef short yytype_int16; # endif #endif -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) +#ifndef YY_ATTRIBUTE_PURE +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else -# define YY_ATTRIBUTE(Spec) /* empty */ +# define YY_ATTRIBUTE_PURE # endif #endif -#ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) -#endif - #ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) +# else +# define YY_ATTRIBUTE_UNUSED +# endif #endif /* Suppress unused-variable warnings by "using" E. */ @@ -367,11 +437,11 @@ typedef short yytype_int16; #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value @@ -384,6 +454,20 @@ typedef short yytype_int16; # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + + +#define YY_ASSERT(E) ((void) (0 && (E))) #if ! defined yyoverflow || YYERROR_VERBOSE @@ -460,17 +544,17 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss_alloc; + yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 @@ -483,11 +567,11 @@ union yyalloc # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ - YYSIZE_T yynewbytes; \ + YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) @@ -499,12 +583,12 @@ union yyalloc # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ - YYSIZE_T yyi; \ + YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ @@ -516,42 +600,43 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 355 +#define YYLAST 374 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 78 +#define YYNTOKENS 80 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 92 +#define YYNNTS 94 /* YYNRULES -- Number of rules. */ -#define YYNRULES 174 +#define YYNRULES 178 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 380 +#define YYNSTATES 390 #define YYUNDEFTOK 2 -#define YYMAXUTOK 326 +#define YYMAXUTOK 328 + /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ - ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + (0 <= (YYX) && (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex. */ -static const yytype_uint8 yytranslate[] = +static const yytype_int8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 77, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 76, 74, - 2, 75, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 79, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 78, 76, + 2, 77, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 72, 2, 73, 2, 2, 2, 2, + 2, 2, 2, 74, 2, 75, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -571,31 +656,31 @@ static const yytype_uint8 yytranslate[] = 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, - 65, 66, 67, 68, 69, 70, 71 + 65, 66, 67, 68, 69, 70, 71, 72, 73 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = -{ - 0, 108, 108, 109, 112, 113, 114, 115, 116, 117, - 119, 119, 120, 121, 122, 123, 124, 125, 126, 127, - 130, 130, 131, 132, 133, 134, 139, 141, 142, 144, - 145, 146, 147, 148, 149, 150, 151, 152, 153, 155, - 160, 165, 171, 176, 181, 187, 192, 197, 204, 206, - 207, 209, 210, 211, 212, 213, 214, 215, 216, 217, - 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, - 228, 229, 231, 237, 243, 249, 255, 261, 267, 273, - 278, 283, 288, 293, 298, 303, 308, 314, 320, 326, - 332, 341, 341, 354, 355, 357, 358, 359, 361, 369, - 377, 388, 388, 398, 399, 401, 402, 403, 405, 412, - 422, 422, 457, 458, 460, 461, 462, 463, 464, 465, - 466, 467, 468, 469, 471, 479, 487, 495, 508, 515, - 522, 529, 536, 552, 554, 555, 557, 558, 559, 560, - 561, 563, 569, 575, 584, 584, 600, 601, 603, 604, - 605, 606, 607, 608, 609, 611, 620, 619, 627, 627, - 628, 633, 640, 648, 660, 667, 669, 670, 672, 686, - 688, 689, 691, 692, 694 +static const yytype_int16 yyrline[] = +{ + 0, 110, 110, 111, 114, 115, 116, 117, 118, 119, + 121, 121, 122, 123, 124, 125, 126, 127, 128, 129, + 132, 132, 133, 134, 135, 136, 141, 143, 144, 146, + 147, 148, 149, 150, 151, 152, 153, 154, 155, 157, + 162, 167, 173, 178, 183, 189, 194, 199, 206, 208, + 209, 211, 212, 213, 214, 215, 216, 217, 218, 219, + 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, + 230, 231, 232, 233, 235, 241, 247, 253, 259, 265, + 271, 277, 282, 287, 292, 297, 304, 310, 315, 320, + 325, 331, 337, 343, 349, 358, 358, 371, 372, 374, + 375, 376, 378, 386, 394, 405, 405, 415, 416, 418, + 419, 420, 422, 429, 439, 439, 474, 475, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 488, 496, + 504, 512, 525, 532, 539, 546, 553, 569, 571, 572, + 574, 575, 576, 577, 578, 580, 586, 592, 601, 601, + 617, 618, 620, 621, 622, 623, 624, 625, 626, 628, + 637, 636, 644, 644, 645, 650, 657, 665, 677, 684, + 686, 687, 689, 703, 705, 706, 708, 709, 711 }; #endif @@ -605,32 +690,34 @@ static const yytype_uint16 yyrline[] = static const char *const yytname[] = { "$end", "error", "$undefined", "ADDRESS_FAMILY", "AWAY", "BAN_UNKNOWN", - "BLACKLIST", "BYTES", "KBYTES", "MBYTES", "CHANNEL", "COMMAND_INTERVAL", - "COMMAND_QUEUE_SIZE", "COMMAND_TIMEOUT", "CONNREGEX", "DNS_FDLIMIT", - "DNS_TIMEOUT", "DNSBL_FROM", "DNSBL_TO", "EXEMPT", "FD", "INVITE", - "IPV4", "IPV6", "IRC", "KLINE", "KEY", "MASK", "MAX_READ", "MODE", - "NAME", "NEGCACHE", "NEGCACHE_REBUILD", "NICK", "NICKSERV", "NOTICE", - "OPER", "OPM", "OPTIONS", "PASSWORD", "PERFORM", "PIDFILE", "PORT", - "PROTOCOL", "READTIMEOUT", "REALNAME", "RECONNECTINTERVAL", "REPLY", - "SCANLOG", "SCANNER", "SECONDS", "MINUTES", "HOURS", "DAYS", "WEEKS", - "MONTHS", "YEARS", "SENDMAIL", "SERVER", "TARGET_IP", "TARGET_PORT", - "TARGET_STRING", "TIMEOUT", "TLS", "TLS_HOSTNAME_VERIFICATION", "TYPE", - "USERNAME", "USER", "VHOST", "NUMBER", "STRING", "PROTOCOLTYPE", "'{'", - "'}'", "';'", "'='", "':'", "','", "$accept", "config", "config_items", - "timespec_", "timespec", "sizespec_", "sizespec", "options_entry", - "options_items", "options_item", "options_negcache", - "options_negcache_rebuild", "options_pidfile", "options_dns_fdlimit", - "options_dns_timeout", "options_scanlog", "options_command_queue_size", + "BIND", "BLACKLIST", "BYTES", "KBYTES", "MBYTES", "CHANNEL", + "COMMAND_INTERVAL", "COMMAND_QUEUE_SIZE", "COMMAND_TIMEOUT", "CONNREGEX", + "DNS_FDLIMIT", "DNS_TIMEOUT", "DNSBL_FROM", "DNSBL_TO", "EXEMPT", "FD", + "INVITE", "IPV4", "IPV6", "IRC", "KLINE", "KEY", "MASK", "MAX_READ", + "MODE", "NAME", "NEGCACHE", "NEGCACHE_REBUILD", "NICK", "NICKSERV", + "NOTICE", "OPER", "OPM", "OPTIONS", "PASSWORD", "PERFORM", "PIDFILE", + "PORT", "PROTOCOL", "RSA_PRIVATE_KEY_FILE", "READTIMEOUT", "REALNAME", + "RECONNECTINTERVAL", "REPLY", "SCANLOG", "SCANNER", "SECONDS", "MINUTES", + "HOURS", "DAYS", "WEEKS", "MONTHS", "YEARS", "SENDMAIL", "SERVER", + "TARGET_IP", "TARGET_PORT", "TARGET_STRING", "TIMEOUT", "TLS", + "TLS_CERTIFICATE_FILE", "TLS_HOSTNAME_VERIFICATION", "TYPE", "USERNAME", + "USER", "NUMBER", "STRING", "PROTOCOLTYPE", "'{'", "'}'", "';'", "'='", + "':'", "','", "$accept", "config", "config_items", "timespec_", + "timespec", "sizespec_", "sizespec", "options_entry", "options_items", + "options_item", "options_negcache", "options_negcache_rebuild", + "options_pidfile", "options_dns_fdlimit", "options_dns_timeout", + "options_scanlog", "options_command_queue_size", "options_command_interval", "options_command_timeout", "irc_entry", "irc_items", "irc_item", "irc_away", "irc_kline", "irc_mode", "irc_nick", "irc_nickserv", "irc_oper", "irc_password", "irc_perform", "irc_notice", - "irc_port", "irc_tls", "irc_tls_hostname_verification", + "irc_port", "irc_tls", "irc_rsa_private_key_file", + "irc_tls_certificate_file", "irc_tls_hostname_verification", "irc_readtimeout", "irc_reconnectinterval", "irc_realname", "irc_server", - "irc_username", "irc_vhost", "irc_connregex", "channel_entry", "$@1", + "irc_username", "irc_bind", "irc_connregex", "channel_entry", "$@1", "channel_items", "channel_item", "channel_name", "channel_key", "channel_invite", "user_entry", "$@2", "user_items", "user_item", "user_mask", "user_scanner", "scanner_entry", "$@3", "scanner_items", - "scanner_item", "scanner_name", "scanner_vhost", "scanner_target_ip", + "scanner_item", "scanner_name", "scanner_bind", "scanner_target_ip", "scanner_target_string", "scanner_fd", "scanner_target_port", "scanner_timeout", "scanner_max_read", "scanner_protocol", "opm_entry", "opm_items", "opm_item", "opm_dnsbl_from", "opm_dnsbl_to", @@ -646,7 +733,7 @@ static const char *const yytname[] = # ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ -static const yytype_uint16 yytoknum[] = +static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, @@ -655,62 +742,63 @@ static const yytype_uint16 yytoknum[] = 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, - 325, 326, 123, 125, 59, 61, 58, 44 + 325, 326, 327, 328, 123, 125, 59, 61, 58, 44 }; # endif -#define YYPACT_NINF -304 +#define YYPACT_NINF (-209) -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-304))) +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF -145 +#define YYTABLE_NINF (-149) -#define yytable_value_is_error(Yytable_value) \ +#define yytable_value_is_error(Yyn) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { - -304, 164, -304, -65, -56, -52, -48, -304, -304, -304, - -304, -37, -304, -6, -304, -304, 10, 123, 83, 183, - -23, -22, -304, -13, 4, -304, -304, -304, -5, 1, - 7, 11, 17, 18, 20, 27, 28, 29, 33, 34, - 36, 39, 41, 43, 47, 50, 51, 0, -304, -304, - -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, - -304, -304, -304, -304, -304, -304, -304, -304, -304, 59, - -304, 56, 60, 61, 73, -304, -304, -304, -304, -304, - 69, -304, 63, 66, 68, 70, 74, 75, 78, 79, - 85, 40, -304, -304, -304, -304, -304, -304, -304, -304, - -304, -304, 93, 150, 64, 92, -304, 101, 103, 104, - 106, 107, 112, 115, 120, 122, 127, 131, 134, 135, - 134, 136, 138, 139, 146, 147, 98, -304, 132, 149, - 151, 152, 153, -304, 148, 134, 154, 134, 156, 134, - 134, 134, 158, 159, 172, -304, -304, 155, 173, 5, - -304, -304, -304, -304, 174, 175, 177, 178, 179, 180, - 181, 184, 185, 37, -304, -304, -304, -304, -304, -304, - -304, -304, -304, -304, 187, -304, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 182, 199, 200, - 201, 202, 203, 204, 205, 206, -304, -18, 207, 208, - 209, -304, 114, 210, 211, 212, 213, 214, 215, 216, - 217, 218, -304, 223, 224, 221, -304, 157, 227, 228, - 176, 229, 231, 232, 134, 233, 230, -304, -304, -304, - -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, - 134, 134, 134, 134, 134, 134, 134, -304, -304, -304, - -304, -304, -304, -304, -304, -304, -304, 222, 226, 234, - 102, -304, -304, -304, -304, -304, -304, -304, -304, -304, - 235, 236, 237, 186, 238, 82, -304, -304, -304, -304, - -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, - -304, -304, 240, 241, -304, 242, 52, 243, 244, 245, - 246, 248, 249, 250, 251, -304, -304, -304, -304, -304, - -304, -304, -304, 256, 257, 258, 255, -304, 259, 239, - 260, 261, 263, 265, 262, -304, -304, -304, -304, 227, - 227, 227, -304, -304, -304, -304, 264, -304, -304, -304, - -304, -304, 266, 267, 268, -304, 25, 269, 270, 271, - 272, -60, -304, 274, -304, -304, -304, -304, 275, -304, - -304, -304, -304, -304, -59, -304, -304, -304, -304, 276, - 277, -304, -304, -304, -304, 25, 278, -304, -304, -304 + -209, 77, -209, -69, -67, -61, -49, -209, -209, -209, + -209, -28, -209, -7, -209, -209, 63, 116, 71, 183, + -25, -17, -209, 10, 30, -209, -209, -209, 15, 23, + 27, 41, 42, 44, 49, 59, 60, 61, 62, 64, + 66, 67, 68, 70, 72, 96, 97, 98, 101, 0, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, 75, -209, 102, 110, 112, 9, -209, + -209, -209, -209, -209, 92, -209, 114, 117, 121, 124, + 125, 127, 135, 136, 137, 38, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, 31, 159, 36, 78, + -209, 120, 145, 146, 147, 154, 155, 156, 157, 158, + 160, 162, 122, 163, 165, 166, 165, 167, 169, 170, + 172, 173, 161, -209, 174, 175, 177, 178, 168, -209, + 179, 165, 180, 165, 181, 165, 165, 165, 182, 184, + 185, -209, -209, 164, 186, 28, -209, -209, -209, -209, + 187, 188, 189, 190, 191, 192, 193, 194, 195, 32, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + 197, -209, 198, 199, 200, 201, 202, 203, 204, 205, + 206, 207, 208, 209, 210, 153, 211, 212, 213, 214, + 215, 216, 217, 218, -209, -19, 219, 220, 221, -209, + 109, 222, 223, 224, 225, 226, 227, 228, 229, 230, + -209, 235, 236, 233, -209, 238, 240, 241, 242, 243, + 245, 244, 246, 165, 237, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + 165, 165, 165, 165, 165, 165, 165, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, 247, 248, 249, + -13, -209, -209, -209, -209, -209, -209, -209, -209, -209, + 250, 251, 252, 256, 254, 80, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, 257, 258, -209, 259, 260, 115, 261, 262, + 263, 264, 266, 267, 268, -209, -209, -209, -209, -209, + -209, -209, -209, 273, 274, 275, 272, -209, 255, 278, + 279, 280, 282, 283, 281, -209, -209, -209, -209, -209, + 241, 241, 241, -209, -209, -209, -209, 285, -209, -209, + -209, -209, 284, 286, 287, -209, 50, 288, 289, 290, + 277, -51, -209, 291, -209, -209, -209, -209, 292, -209, + -209, -209, -209, -209, 22, -209, -209, -209, -209, 297, + 294, -209, -209, -209, -209, 50, 295, -209, -209, -209 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -718,74 +806,75 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_uint8 yydefact[] = { - 2, 101, 1, 0, 0, 0, 0, 3, 5, 4, + 2, 105, 1, 0, 0, 0, 0, 3, 5, 4, 7, 0, 8, 0, 6, 9, 0, 0, 0, 0, - 0, 0, 173, 0, 0, 171, 172, 71, 0, 0, + 0, 0, 177, 0, 0, 175, 176, 73, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 50, 51, 53, 56, 54, 55, 57, 58, 70, 71, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 52, 72, 0, 144, 0, 0, 0, 0, 139, + 140, 141, 142, 143, 0, 38, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 28, 29, 30, 31, + 32, 33, 34, 35, 36, 37, 0, 0, 0, 0, + 174, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 49, 0, 0, 0, 0, 0, 138, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 27, 111, 0, 0, 0, 108, 109, 110, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 50, 51, - 53, 56, 54, 55, 57, 58, 68, 69, 59, 60, - 61, 62, 63, 64, 65, 66, 67, 52, 70, 0, - 140, 0, 0, 0, 0, 135, 136, 137, 138, 139, - 0, 38, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 28, 29, 30, 31, 32, 33, 34, 35, - 36, 37, 0, 0, 0, 0, 170, 0, 0, 0, + 117, 118, 119, 121, 123, 120, 122, 125, 126, 124, + 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, + 0, 0, 0, 0, 48, 0, 0, 0, 0, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, - 0, 0, 0, 134, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 27, 107, 0, 0, 0, - 104, 105, 106, 123, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 113, 114, 115, 117, 119, 116, - 118, 121, 122, 120, 0, 169, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 10, 0, 0, - 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, - 0, 133, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 26, 0, 0, 0, 103, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 112, 174, 72, - 90, 73, 74, 75, 76, 80, 77, 78, 79, 81, - 10, 10, 10, 10, 10, 10, 10, 12, 11, 84, - 86, 85, 87, 82, 83, 88, 89, 0, 0, 0, - 0, 94, 95, 96, 97, 141, 142, 143, 154, 156, - 0, 0, 0, 0, 0, 0, 147, 148, 149, 151, - 150, 152, 153, 46, 45, 47, 42, 43, 39, 40, - 41, 44, 0, 0, 102, 0, 20, 0, 0, 0, - 0, 0, 0, 0, 0, 111, 13, 14, 15, 16, - 17, 18, 19, 0, 0, 0, 0, 93, 0, 0, - 0, 0, 0, 0, 0, 146, 108, 109, 128, 20, - 20, 20, 22, 21, 131, 124, 0, 126, 129, 127, - 130, 125, 0, 0, 0, 92, 0, 0, 0, 0, - 0, 0, 167, 0, 145, 23, 24, 25, 0, 100, - 99, 98, 160, 161, 0, 159, 164, 162, 155, 0, - 0, 166, 163, 132, 157, 0, 0, 165, 158, 168 + 26, 0, 0, 0, 107, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 116, 178, 74, 93, 94, + 75, 76, 77, 78, 82, 79, 80, 81, 83, 85, + 10, 10, 10, 10, 10, 10, 10, 12, 11, 88, + 90, 89, 91, 84, 86, 87, 92, 0, 0, 0, + 0, 98, 99, 100, 101, 145, 146, 147, 158, 160, + 0, 0, 0, 0, 0, 0, 151, 152, 153, 155, + 154, 156, 157, 46, 45, 47, 42, 43, 39, 40, + 41, 44, 0, 0, 106, 0, 0, 20, 0, 0, + 0, 0, 0, 0, 0, 115, 13, 14, 15, 16, + 17, 18, 19, 0, 0, 0, 0, 97, 0, 0, + 0, 0, 0, 0, 0, 150, 112, 113, 129, 132, + 20, 20, 20, 22, 21, 135, 128, 0, 130, 133, + 131, 134, 0, 0, 0, 96, 0, 0, 0, 0, + 0, 0, 171, 0, 149, 23, 24, 25, 0, 104, + 103, 102, 164, 165, 0, 163, 168, 166, 159, 0, + 0, 170, 167, 136, 161, 0, 0, 169, 162, 172 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -304, -304, -304, -1, -118, -303, 87, -304, -304, 166, - -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, - -304, 290, -304, -304, -304, -304, -304, -304, -304, -304, - -304, -304, -304, -304, -304, -304, -304, -304, -304, -304, - -304, -304, -304, -304, 46, -304, -304, -304, -304, -304, - -304, 170, -304, -304, -304, -304, -304, 144, -304, -304, - -304, -304, -304, -304, -304, -304, -304, -304, -304, 279, - -304, -304, -304, -304, -304, -304, 80, -304, -304, -304, - -304, -36, -304, -304, -304, -304, -304, 3, -304, -304, - 314, -304 + -209, -209, -209, -84, -124, -208, 4, -209, -209, 151, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, 270, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, -209, -209, -209, -209, -209, -15, -209, -209, -209, + -209, -209, -209, 103, -209, -209, -209, -209, -209, 88, + -209, -209, -209, -209, -209, -209, -209, -209, -209, -209, + -209, 296, -209, -209, -209, -209, -209, -209, -26, -209, + -209, -209, -209, -125, -209, -209, -209, -209, -209, -99, + -209, -209, 298, -209 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 7, 247, 248, 332, 333, 8, 91, 92, - 93, 94, 95, 96, 97, 98, 99, 100, 101, 9, - 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, - 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, - 67, 68, 69, 260, 261, 262, 263, 264, 10, 11, - 149, 150, 151, 152, 12, 13, 163, 164, 165, 166, - 167, 168, 169, 170, 171, 172, 173, 14, 74, 75, - 76, 77, 78, 79, 80, 275, 276, 277, 278, 318, - 364, 365, 279, 280, 281, 282, 351, 352, 15, 24, - 25, 26 + -1, 1, 7, 257, 258, 343, 344, 8, 95, 96, + 97, 98, 99, 100, 101, 102, 103, 104, 105, 9, + 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, + 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, + 69, 70, 71, 72, 73, 270, 271, 272, 273, 274, + 10, 11, 155, 156, 157, 158, 12, 13, 169, 170, + 171, 172, 173, 174, 175, 176, 177, 178, 179, 14, + 78, 79, 80, 81, 82, 83, 84, 285, 286, 287, + 288, 328, 374, 375, 289, 290, 291, 292, 361, 362, + 15, 24, 25, 26 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -793,153 +882,158 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 188, 27, 190, 257, 28, 22, 146, 16, 258, 350, - -91, 22, 259, 370, 29, 374, 17, 203, 375, 205, - 18, 207, 208, 209, 19, 30, 355, 356, 357, 31, - 20, 23, 147, 32, 33, 34, 35, 23, 153, 36, - 37, 81, 38, 21, 39, 40, 41, 362, 363, 102, - 103, 82, 83, 84, 148, 85, 86, 154, 42, 329, - 330, 331, 104, 43, 44, 155, 45, 156, 46, 128, - 107, 87, 88, 126, 70, 134, 108, 105, 215, -144, - 157, 89, 109, 268, 70, 269, 110, 270, 90, -144, - 71, 72, 111, 112, 146, 113, 158, 159, 160, 161, - 71, 72, 114, 115, 116, 162, 303, 271, 117, 118, - 226, 119, 272, 144, 120, 268, 121, 269, 122, 270, - 147, 296, 123, 257, 27, 124, 125, 28, 258, 273, - 73, 129, 259, -91, 174, 130, 131, 29, 135, 271, - 73, 136, 148, 137, 272, 138, 132, 274, 30, 139, - 140, 153, 31, 141, 142, 324, 32, 33, 34, 35, - 143, 273, 36, 37, 2, 38, 175, 39, 40, 41, - 154, 176, 196, 177, 178, 316, 179, 180, 155, 274, - 156, 42, 181, 3, 81, 182, 43, 44, 4, 45, - 183, 46, 184, 157, 82, 83, 84, 185, 85, 86, - 186, 5, 6, 187, 197, 189, 191, 192, 193, 158, - 159, 160, 161, -110, 87, 88, 194, 195, 162, 198, - 202, 199, 200, 204, 89, 206, 295, 201, 210, 211, - 213, 90, 240, 241, 242, 243, 244, 245, 246, 306, - 307, 308, 309, 310, 311, 312, 212, 299, 214, 217, - 218, 187, 219, 220, 221, 222, 223, 145, 322, 224, - 225, 228, 229, 230, 231, 232, 233, 234, 235, 236, - 237, 238, 239, 249, 250, 251, 252, 253, 254, 255, - 256, 265, 266, 267, 283, 284, 285, 286, 287, 288, - 289, 290, 291, 292, 293, 294, 296, 313, 298, 300, - 301, 314, 302, 304, 305, 297, 317, 227, 347, 315, - 319, 320, 321, 323, 326, 327, 328, 334, 335, 216, - 337, 336, 338, 339, 340, 341, 342, 343, 344, 345, - 348, 349, 350, 358, 346, 353, 354, 127, 106, 378, - 359, 360, 361, 366, 367, 368, 376, 369, 372, 373, - 0, 377, 379, 133, 371, 325 + 196, 27, 198, 267, 28, 16, 29, 17, 268, 267, + 74, -95, 269, 18, 268, 30, -148, 211, 269, 213, + 360, 215, 216, 217, 380, 19, 31, 75, 76, 152, + 32, 22, 152, 159, 33, 34, 35, 36, 160, 85, + 37, 38, 20, 39, 21, 40, 41, 42, 43, 106, + 86, 87, 88, 161, 89, 90, 153, 107, 23, 153, + 44, 162, 326, 163, 22, 45, 46, 47, 77, 48, + 91, 92, 74, 372, 373, 132, 164, 2, -148, 154, + 93, 278, 154, 279, 138, 280, 134, 108, 94, 75, + 76, 23, 111, 165, 166, 167, 168, 3, 384, 140, + 112, 385, 4, 223, 113, 109, 281, 234, 180, 314, + 278, 282, 279, 150, 280, 5, 6, 27, 114, 115, + 28, 116, 29, 340, 341, 342, 117, -95, -114, 283, + 77, 30, 365, 366, 367, 281, 118, 119, 120, 121, + 282, 122, 31, 123, 124, 125, 32, 126, 284, 127, + 33, 34, 35, 36, 181, 334, 37, 38, 283, 39, + 159, 40, 41, 42, 43, 160, 316, 317, 318, 319, + 320, 321, 322, 128, 129, 130, 44, 284, 131, 135, + 161, 45, 46, 47, 85, 48, 307, 136, 162, 137, + 163, 141, 182, 193, 142, 86, 87, 88, 143, 89, + 90, 144, 145, 164, 146, 250, 251, 252, 253, 254, + 255, 256, 147, 148, 149, 91, 92, 183, 184, 185, + 165, 166, 167, 168, 195, 93, 186, 187, 188, 189, + 190, 308, 191, 94, 192, 194, 195, 204, 197, 199, + 200, 221, 201, 202, 209, 203, 151, 206, 205, 207, + 208, 212, 214, 210, 218, 327, 219, 235, 224, 335, + 388, 220, 381, 222, 225, 226, 227, 228, 229, 230, + 231, 232, 233, 236, 237, 238, 239, 240, 241, 242, + 243, 244, 245, 246, 247, 248, 249, 259, 260, 261, + 262, 263, 264, 265, 266, 275, 276, 277, 293, 294, + 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 305, 306, 307, 315, 309, 312, 310, 311, 313, 133, + 0, 0, 110, 0, 323, 324, 325, 329, 330, 331, + 332, 333, 356, 336, 337, 338, 339, 345, 346, 0, + 348, 347, 349, 350, 351, 352, 353, 354, 355, 357, + 0, 358, 359, 360, 379, 363, 368, 364, 0, 0, + 369, 0, 370, 371, 376, 377, 378, 382, 383, 386, + 387, 389, 0, 0, 139 }; static const yytype_int16 yycheck[] = { - 118, 1, 120, 21, 4, 1, 1, 72, 26, 69, - 10, 1, 30, 73, 14, 74, 72, 135, 77, 137, - 72, 139, 140, 141, 72, 25, 329, 330, 331, 29, - 67, 27, 27, 33, 34, 35, 36, 27, 1, 39, - 40, 1, 42, 49, 44, 45, 46, 22, 23, 72, - 72, 11, 12, 13, 49, 15, 16, 20, 58, 7, - 8, 9, 75, 63, 64, 28, 66, 30, 68, 10, - 75, 31, 32, 73, 1, 6, 75, 73, 73, 6, - 43, 41, 75, 1, 1, 3, 75, 5, 48, 6, - 17, 18, 75, 75, 1, 75, 59, 60, 61, 62, - 17, 18, 75, 75, 75, 68, 224, 25, 75, 75, - 73, 75, 30, 73, 75, 1, 75, 3, 75, 5, - 27, 69, 75, 21, 1, 75, 75, 4, 26, 47, - 57, 75, 30, 10, 70, 75, 75, 14, 75, 25, - 57, 75, 49, 75, 30, 75, 73, 65, 25, 75, - 75, 1, 29, 75, 75, 73, 33, 34, 35, 36, - 75, 47, 39, 40, 0, 42, 74, 44, 45, 46, - 20, 70, 74, 70, 70, 73, 70, 70, 28, 65, - 30, 58, 70, 19, 1, 70, 63, 64, 24, 66, - 70, 68, 70, 43, 11, 12, 13, 70, 15, 16, - 69, 37, 38, 69, 72, 70, 70, 69, 69, 59, - 60, 61, 62, 49, 31, 32, 70, 70, 68, 70, - 72, 70, 70, 69, 41, 69, 69, 74, 70, 70, - 75, 48, 50, 51, 52, 53, 54, 55, 56, 240, - 241, 242, 243, 244, 245, 246, 74, 71, 75, 75, - 75, 69, 75, 75, 75, 75, 75, 91, 72, 75, - 75, 74, 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 74, 70, 70, 74, 69, 75, 70, 70, - 69, 75, 70, 70, 74, 218, 260, 163, 69, 75, - 75, 75, 75, 75, 74, 74, 74, 74, 74, 149, - 74, 76, 74, 74, 74, 74, 70, 70, 70, 74, - 70, 70, 69, 69, 75, 70, 74, 47, 24, 375, - 74, 74, 74, 74, 74, 74, 70, 75, 74, 74, - -1, 74, 74, 74, 351, 275 + 124, 1, 126, 22, 4, 74, 6, 74, 27, 22, + 1, 11, 31, 74, 27, 15, 7, 141, 31, 143, + 71, 145, 146, 147, 75, 74, 26, 18, 19, 1, + 30, 1, 1, 1, 34, 35, 36, 37, 6, 1, + 40, 41, 70, 43, 51, 45, 46, 47, 48, 74, + 12, 13, 14, 21, 16, 17, 28, 74, 28, 28, + 60, 29, 75, 31, 1, 65, 66, 67, 59, 69, + 32, 33, 1, 23, 24, 75, 44, 0, 7, 51, + 42, 1, 51, 3, 75, 5, 11, 77, 50, 18, + 19, 28, 77, 61, 62, 63, 64, 20, 76, 7, + 77, 79, 25, 75, 77, 75, 26, 75, 72, 233, + 1, 31, 3, 75, 5, 38, 39, 1, 77, 77, + 4, 77, 6, 8, 9, 10, 77, 11, 51, 49, + 59, 15, 340, 341, 342, 26, 77, 77, 77, 77, + 31, 77, 26, 77, 77, 77, 30, 77, 68, 77, + 34, 35, 36, 37, 76, 75, 40, 41, 49, 43, + 1, 45, 46, 47, 48, 6, 250, 251, 252, 253, + 254, 255, 256, 77, 77, 77, 60, 68, 77, 77, + 21, 65, 66, 67, 1, 69, 71, 77, 29, 77, + 31, 77, 72, 71, 77, 12, 13, 14, 77, 16, + 17, 77, 77, 44, 77, 52, 53, 54, 55, 56, + 57, 58, 77, 77, 77, 32, 33, 72, 72, 72, + 61, 62, 63, 64, 71, 42, 72, 72, 72, 72, + 72, 227, 72, 50, 72, 72, 71, 76, 72, 72, + 71, 77, 72, 71, 76, 72, 95, 72, 74, 72, + 72, 71, 71, 74, 72, 270, 72, 169, 155, 285, + 385, 76, 361, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 72, 72, 76, + 72, 71, 71, 76, 72, 71, 73, 72, 72, 49, + -1, -1, 24, -1, 77, 77, 77, 77, 77, 77, + 74, 77, 77, 76, 76, 76, 76, 76, 76, -1, + 76, 78, 76, 76, 76, 72, 72, 72, 76, 71, + -1, 72, 72, 71, 77, 72, 71, 76, -1, -1, + 76, -1, 76, 76, 76, 76, 76, 76, 76, 72, + 76, 76, -1, -1, 78 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { - 0, 79, 0, 19, 24, 37, 38, 80, 85, 97, - 126, 127, 132, 133, 145, 166, 72, 72, 72, 72, - 67, 49, 1, 27, 167, 168, 169, 1, 4, 14, - 25, 29, 33, 34, 35, 36, 39, 40, 42, 44, - 45, 46, 58, 63, 64, 66, 68, 98, 99, 100, + 0, 81, 0, 20, 25, 38, 39, 82, 87, 99, + 130, 131, 136, 137, 149, 170, 74, 74, 74, 74, + 70, 51, 1, 28, 171, 172, 173, 1, 4, 6, + 15, 26, 30, 34, 35, 36, 37, 40, 41, 43, + 45, 46, 47, 48, 60, 65, 66, 67, 69, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, - 1, 17, 18, 57, 146, 147, 148, 149, 150, 151, - 152, 1, 11, 12, 13, 15, 16, 31, 32, 41, - 48, 86, 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 72, 72, 75, 73, 168, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 73, 99, 10, 75, - 75, 75, 73, 147, 6, 75, 75, 75, 75, 75, - 75, 75, 75, 75, 73, 87, 1, 27, 49, 128, - 129, 130, 131, 1, 20, 28, 30, 43, 59, 60, - 61, 62, 68, 134, 135, 136, 137, 138, 139, 140, - 141, 142, 143, 144, 70, 74, 70, 70, 70, 70, - 70, 70, 70, 70, 70, 70, 69, 69, 82, 70, - 82, 70, 69, 69, 70, 70, 74, 72, 70, 70, - 70, 74, 72, 82, 69, 82, 69, 82, 82, 82, - 70, 70, 74, 75, 75, 73, 129, 75, 75, 75, - 75, 75, 75, 75, 75, 75, 73, 135, 74, 74, - 74, 74, 74, 74, 74, 74, 74, 74, 74, 74, - 50, 51, 52, 53, 54, 55, 56, 81, 82, 74, - 74, 74, 74, 74, 74, 74, 74, 21, 26, 30, - 121, 122, 123, 124, 125, 74, 74, 74, 1, 3, - 5, 25, 30, 47, 65, 153, 154, 155, 156, 160, - 161, 162, 163, 74, 74, 74, 74, 74, 74, 74, - 74, 74, 70, 70, 74, 69, 69, 84, 70, 71, - 70, 69, 70, 82, 70, 74, 81, 81, 81, 81, - 81, 81, 81, 75, 75, 75, 73, 122, 157, 75, - 75, 75, 72, 75, 73, 154, 74, 74, 74, 7, - 8, 9, 83, 84, 74, 74, 76, 74, 74, 74, - 74, 74, 70, 70, 70, 74, 75, 69, 70, 70, - 69, 164, 165, 70, 74, 83, 83, 83, 69, 74, - 74, 74, 22, 23, 158, 159, 74, 74, 74, 75, - 73, 165, 74, 74, 74, 77, 70, 74, 159, 74 + 121, 122, 123, 124, 1, 18, 19, 59, 150, 151, + 152, 153, 154, 155, 156, 1, 12, 13, 14, 16, + 17, 32, 33, 42, 50, 88, 89, 90, 91, 92, + 93, 94, 95, 96, 97, 98, 74, 74, 77, 75, + 172, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 77, 77, 75, 101, 11, 77, 77, 77, 75, 151, + 7, 77, 77, 77, 77, 77, 77, 77, 77, 77, + 75, 89, 1, 28, 51, 132, 133, 134, 135, 1, + 6, 21, 29, 31, 44, 61, 62, 63, 64, 138, + 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, + 72, 76, 72, 72, 72, 72, 72, 72, 72, 72, + 72, 72, 72, 71, 72, 71, 84, 72, 84, 72, + 71, 72, 71, 72, 76, 74, 72, 72, 72, 76, + 74, 84, 71, 84, 71, 84, 84, 84, 72, 72, + 76, 77, 77, 75, 133, 77, 77, 77, 77, 77, + 77, 77, 77, 77, 75, 139, 76, 76, 76, 76, + 76, 76, 76, 76, 76, 76, 76, 76, 76, 76, + 52, 53, 54, 55, 56, 57, 58, 83, 84, 76, + 76, 76, 76, 76, 76, 76, 76, 22, 27, 31, + 125, 126, 127, 128, 129, 76, 76, 76, 1, 3, + 5, 26, 31, 49, 68, 157, 158, 159, 160, 164, + 165, 166, 167, 76, 76, 76, 76, 76, 76, 76, + 76, 76, 72, 72, 76, 72, 71, 71, 86, 72, + 73, 72, 71, 72, 84, 76, 83, 83, 83, 83, + 83, 83, 83, 77, 77, 77, 75, 126, 161, 77, + 77, 77, 74, 77, 75, 158, 76, 76, 76, 76, + 8, 9, 10, 85, 86, 76, 76, 78, 76, 76, + 76, 76, 72, 72, 72, 76, 77, 71, 72, 72, + 71, 168, 169, 72, 76, 85, 85, 85, 71, 76, + 76, 76, 23, 24, 162, 163, 76, 76, 76, 77, + 75, 169, 76, 76, 76, 79, 72, 76, 163, 76 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { - 0, 78, 79, 79, 80, 80, 80, 80, 80, 80, - 81, 81, 82, 82, 82, 82, 82, 82, 82, 82, - 83, 83, 84, 84, 84, 84, 85, 86, 86, 87, - 87, 87, 87, 87, 87, 87, 87, 87, 87, 88, - 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, - 98, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 99, 99, 99, 99, 99, 99, 99, 99, - 99, 99, 100, 101, 102, 103, 104, 105, 106, 107, + 0, 80, 81, 81, 82, 82, 82, 82, 82, 82, + 83, 83, 84, 84, 84, 84, 84, 84, 84, 84, + 85, 85, 86, 86, 86, 86, 87, 88, 88, 89, + 89, 89, 89, 89, 89, 89, 89, 89, 89, 90, + 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, + 100, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 101, 101, 101, 101, 101, 101, + 101, 101, 101, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, - 118, 120, 119, 121, 121, 122, 122, 122, 123, 124, - 125, 127, 126, 128, 128, 129, 129, 129, 130, 131, - 133, 132, 134, 134, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 136, 137, 138, 139, 140, 141, - 142, 143, 144, 145, 146, 146, 147, 147, 147, 147, - 147, 148, 149, 150, 152, 151, 153, 153, 154, 154, - 154, 154, 154, 154, 154, 155, 157, 156, 158, 158, - 159, 159, 160, 161, 162, 163, 164, 164, 165, 166, - 167, 167, 168, 168, 169 + 118, 119, 120, 121, 122, 124, 123, 125, 125, 126, + 126, 126, 127, 128, 129, 131, 130, 132, 132, 133, + 133, 133, 134, 135, 137, 136, 138, 138, 139, 139, + 139, 139, 139, 139, 139, 139, 139, 139, 140, 141, + 142, 143, 144, 145, 146, 147, 148, 149, 150, 150, + 151, 151, 151, 151, 151, 152, 153, 154, 156, 155, + 157, 157, 158, 158, 158, 158, 158, 158, 158, 159, + 161, 160, 162, 162, 163, 163, 164, 165, 166, 167, + 168, 168, 169, 170, 171, 171, 172, 172, 173 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = +static const yytype_int8 yyr2[] = { 0, 2, 0, 2, 1, 1, 1, 1, 1, 1, 0, 1, 2, 3, 3, 3, 3, 3, 3, 3, @@ -948,17 +1042,17 @@ static const yytype_uint8 yyr2[] = 4, 4, 4, 4, 4, 4, 4, 4, 5, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 0, 6, 2, 1, 1, 1, 1, 4, 4, - 4, 0, 6, 2, 1, 1, 1, 1, 4, 4, - 0, 6, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, 4, - 4, 4, 6, 5, 2, 1, 1, 1, 1, 1, - 1, 4, 4, 4, 0, 6, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 4, 0, 5, 3, 1, - 1, 1, 4, 4, 4, 5, 2, 1, 4, 5, - 2, 1, 1, 1, 4 + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 0, 6, 2, 1, 1, + 1, 1, 4, 4, 4, 0, 6, 2, 1, 1, + 1, 1, 4, 4, 0, 6, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, + 4, 4, 4, 4, 4, 4, 6, 5, 2, 1, + 1, 1, 1, 1, 1, 4, 4, 4, 0, 6, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 4, + 0, 5, 3, 1, 1, 1, 4, 4, 4, 5, + 2, 1, 4, 5, 2, 1, 1, 1, 4 }; @@ -1044,7 +1138,9 @@ yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) if (yytype < YYNTOKENS) YYPRINT (yyo, yytoknum[yytype], *yyvaluep); # endif + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_END } @@ -1068,7 +1164,7 @@ yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep) `------------------------------------------------------------------*/ static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@ -1091,19 +1187,19 @@ do { \ `------------------------------------------------*/ static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule) +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule) { - unsigned long yylno = yyrline[yyrule]; + int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, - yystos[yyssp[yyi + 1 - yynrhs]], + yystos[+yyssp[yyi + 1 - yynrhs]], &yyvsp[(yyi + 1) - (yynrhs)] ); YYFPRINTF (stderr, "\n"); @@ -1148,13 +1244,13 @@ int yydebug; # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen +# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S))) # else /* Return the length of YYSTR. */ -static YYSIZE_T +static YYPTRDIFF_T yystrlen (const char *yystr) { - YYSIZE_T yylen; + YYPTRDIFF_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; @@ -1190,12 +1286,12 @@ yystpcpy (char *yydest, const char *yysrc) backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ -static YYSIZE_T +static YYPTRDIFF_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { - YYSIZE_T yyn = 0; + YYPTRDIFF_T yyn = 0; char const *yyp = yystr; for (;;) @@ -1226,10 +1322,10 @@ yytnamerr (char *yyres, const char *yystr) do_not_strip_quotes: ; } - if (! yyres) + if (yyres) + return yystpcpy (yyres, yystr) - yyres; + else return yystrlen (yystr); - - return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres); } # endif @@ -1242,19 +1338,19 @@ yytnamerr (char *yyres, const char *yystr) *YYMSG_ALLOC to the required number of bytes. Return 2 if the required number of bytes is too large to store. */ static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) +yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg, + yy_state_t *yyssp, int yytoken) { - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); - YYSIZE_T yysize = yysize0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; /* Internationalized format string. */ const char *yyformat = YY_NULLPTR; - /* Arguments of yyformat. */ + /* Arguments of yyformat: reported tokens (one for the "unexpected", + one per "expected"). */ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ + /* Actual size of YYARG. */ int yycount = 0; + /* Cumulated lengths of YYARG. */ + YYPTRDIFF_T yysize = 0; /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then @@ -1281,7 +1377,9 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, */ if (yytoken != YYEMPTY) { - int yyn = yypact[*yyssp]; + int yyn = yypact[+*yyssp]; + YYPTRDIFF_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); + yysize = yysize0; yyarg[yycount++] = yytname[yytoken]; if (!yypact_value_is_default (yyn)) { @@ -1306,7 +1404,8 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, } yyarg[yycount++] = yytname[yyx]; { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); + YYPTRDIFF_T yysize1 + = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) yysize = yysize1; else @@ -1333,7 +1432,9 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, } { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); + /* Don't count the "%s"s in the final size, but reserve room for + the terminator. */ + YYPTRDIFF_T yysize1 = yysize + (yystrlen (yyformat) - 2 * yycount) + 1; if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) yysize = yysize1; else @@ -1363,8 +1464,8 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, } else { - yyp++; - yyformat++; + ++yyp; + ++yyformat; } } return 0; @@ -1407,7 +1508,7 @@ int yynerrs; int yyparse (void) { - int yystate; + yy_state_fast_t yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; @@ -1419,16 +1520,16 @@ yyparse (void) to reallocate them elsewhere. */ /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss; + yy_state_t *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; - YYSIZE_T yystacksize; + YYPTRDIFF_T yystacksize; int yyn; int yyresult; @@ -1442,7 +1543,7 @@ yyparse (void) /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; + YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf; #endif #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) @@ -1474,10 +1575,14 @@ yynewstate: /*--------------------------------------------------------------------. -| yynewstate -- set current state (the top of the stack) to yystate. | +| yysetstate -- set current state (the top of the stack) to yystate. | `--------------------------------------------------------------------*/ yysetstate: - *yyssp = (yytype_int16) yystate; + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) #if !defined yyoverflow && !defined YYSTACK_RELOCATE @@ -1485,23 +1590,23 @@ yysetstate: #else { /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1); + YYPTRDIFF_T yysize = yyssp - yyss + 1; # if defined yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ + yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; @@ -1515,9 +1620,10 @@ yysetstate: yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; + yy_state_t *yyss1 = yyss; union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); @@ -1531,16 +1637,16 @@ yysetstate: yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long) yystacksize)); + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; } #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); - if (yystate == YYFINAL) YYACCEPT; @@ -1600,15 +1706,13 @@ yybackup: /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END + /* Discard the shifted token. */ + yychar = YYEMPTY; goto yynewstate; @@ -1643,331 +1747,349 @@ yyreduce: YY_REDUCE_PRINT (yyn); switch (yyn) { - case 10: -#line 119 "config-parser.y" /* yacc.c:1652 */ - { (yyval.number) = 0; } -#line 1650 "config-parser.c" /* yacc.c:1652 */ + case 10: +#line 121 "config-parser.y" + { (yyval.number) = 0; } +#line 1754 "config-parser.c" break; case 12: -#line 120 "config-parser.y" /* yacc.c:1652 */ - { (yyval.number) = (yyvsp[-1].number) + (yyvsp[0].number); } -#line 1656 "config-parser.c" /* yacc.c:1652 */ +#line 122 "config-parser.y" + { (yyval.number) = (yyvsp[-1].number) + (yyvsp[0].number); } +#line 1760 "config-parser.c" break; case 13: -#line 121 "config-parser.y" /* yacc.c:1652 */ - { (yyval.number) = (yyvsp[-2].number) + (yyvsp[0].number); } -#line 1662 "config-parser.c" /* yacc.c:1652 */ +#line 123 "config-parser.y" + { (yyval.number) = (yyvsp[-2].number) + (yyvsp[0].number); } +#line 1766 "config-parser.c" break; case 14: -#line 122 "config-parser.y" /* yacc.c:1652 */ - { (yyval.number) = (yyvsp[-2].number) * 60 + (yyvsp[0].number); } -#line 1668 "config-parser.c" /* yacc.c:1652 */ +#line 124 "config-parser.y" + { (yyval.number) = (yyvsp[-2].number) * 60 + (yyvsp[0].number); } +#line 1772 "config-parser.c" break; case 15: -#line 123 "config-parser.y" /* yacc.c:1652 */ - { (yyval.number) = (yyvsp[-2].number) * 60 * 60 + (yyvsp[0].number); } -#line 1674 "config-parser.c" /* yacc.c:1652 */ +#line 125 "config-parser.y" + { (yyval.number) = (yyvsp[-2].number) * 60 * 60 + (yyvsp[0].number); } +#line 1778 "config-parser.c" break; case 16: -#line 124 "config-parser.y" /* yacc.c:1652 */ - { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 + (yyvsp[0].number); } -#line 1680 "config-parser.c" /* yacc.c:1652 */ +#line 126 "config-parser.y" + { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 + (yyvsp[0].number); } +#line 1784 "config-parser.c" break; case 17: -#line 125 "config-parser.y" /* yacc.c:1652 */ - { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 * 7 + (yyvsp[0].number); } -#line 1686 "config-parser.c" /* yacc.c:1652 */ +#line 127 "config-parser.y" + { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 * 7 + (yyvsp[0].number); } +#line 1790 "config-parser.c" break; case 18: -#line 126 "config-parser.y" /* yacc.c:1652 */ - { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 * 7 * 4 + (yyvsp[0].number); } -#line 1692 "config-parser.c" /* yacc.c:1652 */ +#line 128 "config-parser.y" + { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 * 7 * 4 + (yyvsp[0].number); } +#line 1796 "config-parser.c" break; case 19: -#line 127 "config-parser.y" /* yacc.c:1652 */ - { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 * 365 + (yyvsp[0].number); } -#line 1698 "config-parser.c" /* yacc.c:1652 */ +#line 129 "config-parser.y" + { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 * 365 + (yyvsp[0].number); } +#line 1802 "config-parser.c" break; case 20: -#line 130 "config-parser.y" /* yacc.c:1652 */ - { (yyval.number) = 0; } -#line 1704 "config-parser.c" /* yacc.c:1652 */ +#line 132 "config-parser.y" + { (yyval.number) = 0; } +#line 1808 "config-parser.c" break; case 22: -#line 131 "config-parser.y" /* yacc.c:1652 */ - { (yyval.number) = (yyvsp[-1].number) + (yyvsp[0].number); } -#line 1710 "config-parser.c" /* yacc.c:1652 */ +#line 133 "config-parser.y" + { (yyval.number) = (yyvsp[-1].number) + (yyvsp[0].number); } +#line 1814 "config-parser.c" break; case 23: -#line 132 "config-parser.y" /* yacc.c:1652 */ - { (yyval.number) = (yyvsp[-2].number) + (yyvsp[0].number); } -#line 1716 "config-parser.c" /* yacc.c:1652 */ +#line 134 "config-parser.y" + { (yyval.number) = (yyvsp[-2].number) + (yyvsp[0].number); } +#line 1820 "config-parser.c" break; case 24: -#line 133 "config-parser.y" /* yacc.c:1652 */ - { (yyval.number) = (yyvsp[-2].number) * 1024 + (yyvsp[0].number); } -#line 1722 "config-parser.c" /* yacc.c:1652 */ +#line 135 "config-parser.y" + { (yyval.number) = (yyvsp[-2].number) * 1024 + (yyvsp[0].number); } +#line 1826 "config-parser.c" break; case 25: -#line 134 "config-parser.y" /* yacc.c:1652 */ - { (yyval.number) = (yyvsp[-2].number) * 1024 * 1024 + (yyvsp[0].number); } -#line 1728 "config-parser.c" /* yacc.c:1652 */ +#line 136 "config-parser.y" + { (yyval.number) = (yyvsp[-2].number) * 1024 * 1024 + (yyvsp[0].number); } +#line 1832 "config-parser.c" break; case 39: -#line 156 "config-parser.y" /* yacc.c:1652 */ - { +#line 158 "config-parser.y" +{ OptionsItem.negcache = (yyvsp[-1].number); } -#line 1736 "config-parser.c" /* yacc.c:1652 */ +#line 1840 "config-parser.c" break; case 40: -#line 161 "config-parser.y" /* yacc.c:1652 */ - { +#line 163 "config-parser.y" +{ OptionsItem.negcache_rebuild = (yyvsp[-1].number); } -#line 1744 "config-parser.c" /* yacc.c:1652 */ +#line 1848 "config-parser.c" break; case 41: -#line 166 "config-parser.y" /* yacc.c:1652 */ - { +#line 168 "config-parser.y" +{ xfree(OptionsItem.pidfile); OptionsItem.pidfile = xstrdup((yyvsp[-1].string)); } -#line 1753 "config-parser.c" /* yacc.c:1652 */ +#line 1857 "config-parser.c" break; case 42: -#line 172 "config-parser.y" /* yacc.c:1652 */ - { +#line 174 "config-parser.y" +{ OptionsItem.dns_fdlimit = (yyvsp[-1].number); } -#line 1761 "config-parser.c" /* yacc.c:1652 */ +#line 1865 "config-parser.c" break; case 43: -#line 177 "config-parser.y" /* yacc.c:1652 */ - { +#line 179 "config-parser.y" +{ OptionsItem.dns_timeout = (yyvsp[-1].number); } -#line 1769 "config-parser.c" /* yacc.c:1652 */ +#line 1873 "config-parser.c" break; case 44: -#line 182 "config-parser.y" /* yacc.c:1652 */ - { +#line 184 "config-parser.y" +{ xfree(OptionsItem.scanlog); OptionsItem.scanlog = xstrdup((yyvsp[-1].string)); } -#line 1778 "config-parser.c" /* yacc.c:1652 */ +#line 1882 "config-parser.c" break; case 45: -#line 188 "config-parser.y" /* yacc.c:1652 */ - { +#line 190 "config-parser.y" +{ OptionsItem.command_queue_size = (yyvsp[-1].number); } -#line 1786 "config-parser.c" /* yacc.c:1652 */ +#line 1890 "config-parser.c" break; case 46: -#line 193 "config-parser.y" /* yacc.c:1652 */ - { +#line 195 "config-parser.y" +{ OptionsItem.command_interval = (yyvsp[-1].number); } -#line 1794 "config-parser.c" /* yacc.c:1652 */ +#line 1898 "config-parser.c" break; case 47: -#line 198 "config-parser.y" /* yacc.c:1652 */ - { +#line 200 "config-parser.y" +{ OptionsItem.command_timeout = (yyvsp[-1].number); } -#line 1802 "config-parser.c" /* yacc.c:1652 */ +#line 1906 "config-parser.c" break; - case 72: -#line 232 "config-parser.y" /* yacc.c:1652 */ - { + case 74: +#line 236 "config-parser.y" +{ xfree(IRCItem.away); IRCItem.away = xstrdup((yyvsp[-1].string)); } -#line 1811 "config-parser.c" /* yacc.c:1652 */ +#line 1915 "config-parser.c" break; - case 73: -#line 238 "config-parser.y" /* yacc.c:1652 */ - { + case 75: +#line 242 "config-parser.y" +{ xfree(IRCItem.kline); IRCItem.kline = xstrdup((yyvsp[-1].string)); } -#line 1820 "config-parser.c" /* yacc.c:1652 */ +#line 1924 "config-parser.c" break; - case 74: -#line 244 "config-parser.y" /* yacc.c:1652 */ - { + case 76: +#line 248 "config-parser.y" +{ xfree(IRCItem.mode); IRCItem.mode = xstrdup((yyvsp[-1].string)); } -#line 1829 "config-parser.c" /* yacc.c:1652 */ +#line 1933 "config-parser.c" break; - case 75: -#line 250 "config-parser.y" /* yacc.c:1652 */ - { + case 77: +#line 254 "config-parser.y" +{ xfree(IRCItem.nick); IRCItem.nick = xstrdup((yyvsp[-1].string)); } -#line 1838 "config-parser.c" /* yacc.c:1652 */ +#line 1942 "config-parser.c" break; - case 76: -#line 256 "config-parser.y" /* yacc.c:1652 */ - { + case 78: +#line 260 "config-parser.y" +{ xfree(IRCItem.nickserv); IRCItem.nickserv = xstrdup((yyvsp[-1].string)); } -#line 1847 "config-parser.c" /* yacc.c:1652 */ +#line 1951 "config-parser.c" break; - case 77: -#line 262 "config-parser.y" /* yacc.c:1652 */ - { + case 79: +#line 266 "config-parser.y" +{ xfree(IRCItem.oper); IRCItem.oper = xstrdup((yyvsp[-1].string)); } -#line 1856 "config-parser.c" /* yacc.c:1652 */ +#line 1960 "config-parser.c" break; - case 78: -#line 268 "config-parser.y" /* yacc.c:1652 */ - { + case 80: +#line 272 "config-parser.y" +{ xfree(IRCItem.password); IRCItem.password = xstrdup((yyvsp[-1].string)); } -#line 1865 "config-parser.c" /* yacc.c:1652 */ +#line 1969 "config-parser.c" break; - case 79: -#line 274 "config-parser.y" /* yacc.c:1652 */ - { + case 81: +#line 278 "config-parser.y" +{ list_add(xstrdup((yyvsp[-1].string)), node_create(), &IRCItem.performs); } -#line 1873 "config-parser.c" /* yacc.c:1652 */ +#line 1977 "config-parser.c" break; - case 80: -#line 279 "config-parser.y" /* yacc.c:1652 */ - { + case 82: +#line 283 "config-parser.y" +{ list_add(xstrdup((yyvsp[-1].string)), node_create(), &IRCItem.notices); } -#line 1881 "config-parser.c" /* yacc.c:1652 */ +#line 1985 "config-parser.c" break; - case 81: -#line 284 "config-parser.y" /* yacc.c:1652 */ - { + case 83: +#line 288 "config-parser.y" +{ IRCItem.port = (yyvsp[-1].number); } -#line 1889 "config-parser.c" /* yacc.c:1652 */ +#line 1993 "config-parser.c" break; - case 82: -#line 289 "config-parser.y" /* yacc.c:1652 */ - { + case 84: +#line 293 "config-parser.y" +{ IRCItem.tls = (yyvsp[-1].number); } -#line 1897 "config-parser.c" /* yacc.c:1652 */ +#line 2001 "config-parser.c" break; - case 83: -#line 294 "config-parser.y" /* yacc.c:1652 */ - { + case 85: +#line 298 "config-parser.y" +{ + xfree(IRCItem.rsa_private_key_file); + IRCItem.rsa_private_key_file = xstrdup((yyvsp[-1].string)); +} +#line 2010 "config-parser.c" + break; + + case 86: +#line 305 "config-parser.y" +{ + xfree(IRCItem.tls_certificate_file); + IRCItem.tls_certificate_file = xstrdup((yyvsp[-1].string)); +} +#line 2019 "config-parser.c" + break; + + case 87: +#line 311 "config-parser.y" +{ IRCItem.tls_hostname_verification = (yyvsp[-1].number); } -#line 1905 "config-parser.c" /* yacc.c:1652 */ +#line 2027 "config-parser.c" break; - case 84: -#line 299 "config-parser.y" /* yacc.c:1652 */ - { + case 88: +#line 316 "config-parser.y" +{ IRCItem.readtimeout = (yyvsp[-1].number); } -#line 1913 "config-parser.c" /* yacc.c:1652 */ +#line 2035 "config-parser.c" break; - case 85: -#line 304 "config-parser.y" /* yacc.c:1652 */ - { + case 89: +#line 321 "config-parser.y" +{ IRCItem.reconnectinterval = (yyvsp[-1].number); } -#line 1921 "config-parser.c" /* yacc.c:1652 */ +#line 2043 "config-parser.c" break; - case 86: -#line 309 "config-parser.y" /* yacc.c:1652 */ - { + case 90: +#line 326 "config-parser.y" +{ xfree(IRCItem.realname); IRCItem.realname = xstrdup((yyvsp[-1].string)); } -#line 1930 "config-parser.c" /* yacc.c:1652 */ +#line 2052 "config-parser.c" break; - case 87: -#line 315 "config-parser.y" /* yacc.c:1652 */ - { + case 91: +#line 332 "config-parser.y" +{ xfree(IRCItem.server); IRCItem.server = xstrdup((yyvsp[-1].string)); } -#line 1939 "config-parser.c" /* yacc.c:1652 */ +#line 2061 "config-parser.c" break; - case 88: -#line 321 "config-parser.y" /* yacc.c:1652 */ - { + case 92: +#line 338 "config-parser.y" +{ xfree(IRCItem.username); IRCItem.username = xstrdup((yyvsp[-1].string)); } -#line 1948 "config-parser.c" /* yacc.c:1652 */ +#line 2070 "config-parser.c" break; - case 89: -#line 327 "config-parser.y" /* yacc.c:1652 */ - { - xfree(IRCItem.vhost); - IRCItem.vhost = xstrdup((yyvsp[-1].string)); + case 93: +#line 344 "config-parser.y" +{ + xfree(IRCItem.bind); + IRCItem.bind = xstrdup((yyvsp[-1].string)); } -#line 1957 "config-parser.c" /* yacc.c:1652 */ +#line 2079 "config-parser.c" break; - case 90: -#line 333 "config-parser.y" /* yacc.c:1652 */ - { + case 94: +#line 350 "config-parser.y" +{ xfree(IRCItem.connregex); IRCItem.connregex = xstrdup((yyvsp[-1].string)); } -#line 1966 "config-parser.c" /* yacc.c:1652 */ +#line 2088 "config-parser.c" break; - case 91: -#line 341 "config-parser.y" /* yacc.c:1652 */ - { + case 95: +#line 358 "config-parser.y" +{ struct ChannelConf *item; item = xcalloc(sizeof(*item)); @@ -1978,45 +2100,45 @@ yyreduce: list_add(item, &item->node, &IRCItem.channels); tmp = item; } -#line 1982 "config-parser.c" /* yacc.c:1652 */ +#line 2104 "config-parser.c" break; - case 98: -#line 362 "config-parser.y" /* yacc.c:1652 */ - { + case 102: +#line 379 "config-parser.y" +{ struct ChannelConf *item = tmp; xfree(item->name); item->name = xstrdup((yyvsp[-1].string)); } -#line 1993 "config-parser.c" /* yacc.c:1652 */ +#line 2115 "config-parser.c" break; - case 99: -#line 370 "config-parser.y" /* yacc.c:1652 */ - { + case 103: +#line 387 "config-parser.y" +{ struct ChannelConf *item = tmp; xfree(item->key); item->key = xstrdup((yyvsp[-1].string)); } -#line 2004 "config-parser.c" /* yacc.c:1652 */ +#line 2126 "config-parser.c" break; - case 100: -#line 378 "config-parser.y" /* yacc.c:1652 */ - { + case 104: +#line 395 "config-parser.y" +{ struct ChannelConf *item = tmp; xfree(item->invite); item->invite = xstrdup((yyvsp[-1].string)); } -#line 2015 "config-parser.c" /* yacc.c:1652 */ +#line 2137 "config-parser.c" break; - case 101: -#line 388 "config-parser.y" /* yacc.c:1652 */ - { + case 105: +#line 405 "config-parser.y" +{ struct UserConf *item; item = xcalloc(sizeof(*item)); @@ -2024,32 +2146,32 @@ yyreduce: list_add(item, &item->node, &UserItemList); tmp = item; } -#line 2028 "config-parser.c" /* yacc.c:1652 */ +#line 2150 "config-parser.c" break; - case 108: -#line 406 "config-parser.y" /* yacc.c:1652 */ - { + case 112: +#line 423 "config-parser.y" +{ struct UserConf *item = tmp; list_add(xstrdup((yyvsp[-1].string)), node_create(), &item->masks); } -#line 2038 "config-parser.c" /* yacc.c:1652 */ +#line 2160 "config-parser.c" break; - case 109: -#line 413 "config-parser.y" /* yacc.c:1652 */ - { + case 113: +#line 430 "config-parser.y" +{ struct UserConf *item = tmp; list_add(xstrdup((yyvsp[-1].string)), node_create(), &item->scanners); } -#line 2048 "config-parser.c" /* yacc.c:1652 */ +#line 2170 "config-parser.c" break; - case 110: -#line 422 "config-parser.y" /* yacc.c:1652 */ - { + case 114: +#line 439 "config-parser.y" +{ struct ScannerConf *item, *olditem; item = xcalloc(sizeof(*item)); @@ -2061,7 +2183,7 @@ yyreduce: { olditem = ScannerItemList.tail->data; - item->vhost = xstrdup(olditem->vhost); + item->bind = xstrdup(olditem->bind); item->fd = olditem->fd; item->target_ip = xstrdup(olditem->target_ip); item->target_port = olditem->target_port; @@ -2071,7 +2193,7 @@ yyreduce: } else { - item->vhost = xstrdup("0.0.0.0"); + item->bind = xstrdup("0.0.0.0"); item->fd = 512; item->target_ip = xstrdup("127.0.0.1"); item->target_port = 6667; @@ -2082,45 +2204,45 @@ yyreduce: list_add(item, &item->node, &ScannerItemList); tmp = item; } -#line 2086 "config-parser.c" /* yacc.c:1652 */ +#line 2208 "config-parser.c" break; - case 124: -#line 472 "config-parser.y" /* yacc.c:1652 */ - { + case 128: +#line 489 "config-parser.y" +{ struct ScannerConf *item = tmp; xfree(item->name); item->name = xstrdup((yyvsp[-1].string)); } -#line 2097 "config-parser.c" /* yacc.c:1652 */ +#line 2219 "config-parser.c" break; - case 125: -#line 480 "config-parser.y" /* yacc.c:1652 */ - { + case 129: +#line 497 "config-parser.y" +{ struct ScannerConf *item = tmp; - xfree(item->vhost); - item->vhost = xstrdup((yyvsp[-1].string)); + xfree(item->bind); + item->bind = xstrdup((yyvsp[-1].string)); } -#line 2108 "config-parser.c" /* yacc.c:1652 */ +#line 2230 "config-parser.c" break; - case 126: -#line 488 "config-parser.y" /* yacc.c:1652 */ - { + case 130: +#line 505 "config-parser.y" +{ struct ScannerConf *item = tmp; xfree(item->target_ip); item->target_ip = xstrdup((yyvsp[-1].string)); } -#line 2119 "config-parser.c" /* yacc.c:1652 */ +#line 2241 "config-parser.c" break; - case 127: -#line 496 "config-parser.y" /* yacc.c:1652 */ - { + case 131: +#line 513 "config-parser.y" +{ struct ScannerConf *item = tmp; if (item->target_string_created == 0) @@ -2131,52 +2253,52 @@ yyreduce: list_add(xstrdup((yyvsp[-1].string)), node_create(), &item->target_string); } -#line 2135 "config-parser.c" /* yacc.c:1652 */ +#line 2257 "config-parser.c" break; - case 128: -#line 509 "config-parser.y" /* yacc.c:1652 */ - { + case 132: +#line 526 "config-parser.y" +{ struct ScannerConf *item = tmp; item->fd = (yyvsp[-1].number); } -#line 2145 "config-parser.c" /* yacc.c:1652 */ +#line 2267 "config-parser.c" break; - case 129: -#line 516 "config-parser.y" /* yacc.c:1652 */ - { + case 133: +#line 533 "config-parser.y" +{ struct ScannerConf *item = tmp; item->target_port = (yyvsp[-1].number); } -#line 2155 "config-parser.c" /* yacc.c:1652 */ +#line 2277 "config-parser.c" break; - case 130: -#line 523 "config-parser.y" /* yacc.c:1652 */ - { + case 134: +#line 540 "config-parser.y" +{ struct ScannerConf *item = tmp; item->timeout = (yyvsp[-1].number); } -#line 2165 "config-parser.c" /* yacc.c:1652 */ +#line 2287 "config-parser.c" break; - case 131: -#line 530 "config-parser.y" /* yacc.c:1652 */ - { + case 135: +#line 547 "config-parser.y" +{ struct ScannerConf *item = tmp; item->max_read = (yyvsp[-1].number); } -#line 2175 "config-parser.c" /* yacc.c:1652 */ +#line 2297 "config-parser.c" break; - case 132: -#line 537 "config-parser.y" /* yacc.c:1652 */ - { + case 136: +#line 554 "config-parser.y" +{ struct ProtocolConf *item; struct ScannerConf *item2; @@ -2188,39 +2310,39 @@ yyreduce: list_add(item, node_create(), &item2->protocols); } -#line 2192 "config-parser.c" /* yacc.c:1652 */ +#line 2314 "config-parser.c" break; - case 141: -#line 564 "config-parser.y" /* yacc.c:1652 */ - { + case 145: +#line 581 "config-parser.y" +{ xfree(OpmItem.dnsbl_from); OpmItem.dnsbl_from = xstrdup((yyvsp[-1].string)); } -#line 2201 "config-parser.c" /* yacc.c:1652 */ +#line 2323 "config-parser.c" break; - case 142: -#line 570 "config-parser.y" /* yacc.c:1652 */ - { + case 146: +#line 587 "config-parser.y" +{ xfree(OpmItem.dnsbl_to); OpmItem.dnsbl_to = xstrdup((yyvsp[-1].string)); } -#line 2210 "config-parser.c" /* yacc.c:1652 */ +#line 2332 "config-parser.c" break; - case 143: -#line 576 "config-parser.y" /* yacc.c:1652 */ - { + case 147: +#line 593 "config-parser.y" +{ xfree(OpmItem.sendmail); OpmItem.sendmail = xstrdup((yyvsp[-1].string)); } -#line 2219 "config-parser.c" /* yacc.c:1652 */ +#line 2341 "config-parser.c" break; - case 144: -#line 584 "config-parser.y" /* yacc.c:1652 */ - { + case 148: +#line 601 "config-parser.y" +{ struct BlacklistConf *item; item = xcalloc(sizeof(*item)); @@ -2234,65 +2356,65 @@ yyreduce: tmp = item; } -#line 2238 "config-parser.c" /* yacc.c:1652 */ +#line 2360 "config-parser.c" break; - case 155: -#line 612 "config-parser.y" /* yacc.c:1652 */ - { + case 159: +#line 629 "config-parser.y" +{ struct BlacklistConf *item = tmp; xfree(item->name); item->name = xstrdup((yyvsp[-1].string)); } -#line 2249 "config-parser.c" /* yacc.c:1652 */ +#line 2371 "config-parser.c" break; - case 156: -#line 620 "config-parser.y" /* yacc.c:1652 */ - { + case 160: +#line 637 "config-parser.y" +{ struct BlacklistConf *item = tmp; item->ipv4 = 0; item->ipv6 = 0; } -#line 2260 "config-parser.c" /* yacc.c:1652 */ +#line 2382 "config-parser.c" break; - case 160: -#line 629 "config-parser.y" /* yacc.c:1652 */ - { + case 164: +#line 646 "config-parser.y" +{ struct BlacklistConf *item = tmp; item->ipv4 = 1; } -#line 2270 "config-parser.c" /* yacc.c:1652 */ +#line 2392 "config-parser.c" break; - case 161: -#line 634 "config-parser.y" /* yacc.c:1652 */ - { + case 165: +#line 651 "config-parser.y" +{ struct BlacklistConf *item = tmp; item->ipv6 = 1; } -#line 2280 "config-parser.c" /* yacc.c:1652 */ +#line 2402 "config-parser.c" break; - case 162: -#line 641 "config-parser.y" /* yacc.c:1652 */ - { + case 166: +#line 658 "config-parser.y" +{ struct BlacklistConf *item = tmp; xfree(item->kline); item->kline = xstrdup((yyvsp[-1].string)); } -#line 2291 "config-parser.c" /* yacc.c:1652 */ +#line 2413 "config-parser.c" break; - case 163: -#line 649 "config-parser.y" /* yacc.c:1652 */ - { + case 167: +#line 666 "config-parser.y" +{ struct BlacklistConf *item = tmp; if (strcmp("A record bitmask", (yyvsp[-1].string)) == 0) @@ -2302,22 +2424,22 @@ yyreduce: else yyerror("Unknown blacklist type defined"); } -#line 2306 "config-parser.c" /* yacc.c:1652 */ +#line 2428 "config-parser.c" break; - case 164: -#line 661 "config-parser.y" /* yacc.c:1652 */ - { + case 168: +#line 678 "config-parser.y" +{ struct BlacklistConf *item = tmp; item->ban_unknown = (yyvsp[-1].number); } -#line 2316 "config-parser.c" /* yacc.c:1652 */ +#line 2438 "config-parser.c" break; - case 168: -#line 673 "config-parser.y" /* yacc.c:1652 */ - { + case 172: +#line 690 "config-parser.y" +{ struct BlacklistReplyConf *item; struct BlacklistConf *blacklist = tmp; @@ -2327,19 +2449,20 @@ yyreduce: list_add(item, node_create(), &blacklist->reply); } -#line 2331 "config-parser.c" /* yacc.c:1652 */ +#line 2453 "config-parser.c" break; - case 174: -#line 695 "config-parser.y" /* yacc.c:1652 */ - { + case 178: +#line 712 "config-parser.y" +{ list_add(xstrdup((yyvsp[-1].string)), node_create(), &ExemptItem.masks); } -#line 2339 "config-parser.c" /* yacc.c:1652 */ +#line 2461 "config-parser.c" break; -#line 2343 "config-parser.c" /* yacc.c:1652 */ +#line 2465 "config-parser.c" + default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -2402,7 +2525,7 @@ yyerrlab: { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); + yymsg = YY_CAST (char *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc))); if (!yymsg) { yymsg = yymsgbuf; @@ -2557,7 +2680,7 @@ yyreturn: while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp); + yystos[+*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow @@ -2570,5 +2693,5 @@ yyreturn: #endif return yyresult; } -#line 699 "config-parser.y" /* yacc.c:1918 */ +#line 716 "config-parser.y" diff --git a/src/config-parser.h b/src/config-parser.h index 3ccde31..66ca320 100644 --- a/src/config-parser.h +++ b/src/config-parser.h @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.3.2. */ +/* A Bison parser, made by GNU Bison 3.5.1. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2019 Free Software Foundation, + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -52,158 +52,161 @@ extern int yydebug; ADDRESS_FAMILY = 258, AWAY = 259, BAN_UNKNOWN = 260, - BLACKLIST = 261, - BYTES = 262, - KBYTES = 263, - MBYTES = 264, - CHANNEL = 265, - COMMAND_INTERVAL = 266, - COMMAND_QUEUE_SIZE = 267, - COMMAND_TIMEOUT = 268, - CONNREGEX = 269, - DNS_FDLIMIT = 270, - DNS_TIMEOUT = 271, - DNSBL_FROM = 272, - DNSBL_TO = 273, - EXEMPT = 274, - FD = 275, - INVITE = 276, - IPV4 = 277, - IPV6 = 278, - IRC = 279, - KLINE = 280, - KEY = 281, - MASK = 282, - MAX_READ = 283, - MODE = 284, - NAME = 285, - NEGCACHE = 286, - NEGCACHE_REBUILD = 287, - NICK = 288, - NICKSERV = 289, - NOTICE = 290, - OPER = 291, - OPM = 292, - OPTIONS = 293, - PASSWORD = 294, - PERFORM = 295, - PIDFILE = 296, - PORT = 297, - PROTOCOL = 298, - READTIMEOUT = 299, - REALNAME = 300, - RECONNECTINTERVAL = 301, - REPLY = 302, - SCANLOG = 303, - SCANNER = 304, - SECONDS = 305, - MINUTES = 306, - HOURS = 307, - DAYS = 308, - WEEKS = 309, - MONTHS = 310, - YEARS = 311, - SENDMAIL = 312, - SERVER = 313, - TARGET_IP = 314, - TARGET_PORT = 315, - TARGET_STRING = 316, - TIMEOUT = 317, - TLS = 318, - TLS_HOSTNAME_VERIFICATION = 319, - TYPE = 320, - USERNAME = 321, - USER = 322, - VHOST = 323, - NUMBER = 324, - STRING = 325, - PROTOCOLTYPE = 326 + BIND = 261, + BLACKLIST = 262, + BYTES = 263, + KBYTES = 264, + MBYTES = 265, + CHANNEL = 266, + COMMAND_INTERVAL = 267, + COMMAND_QUEUE_SIZE = 268, + COMMAND_TIMEOUT = 269, + CONNREGEX = 270, + DNS_FDLIMIT = 271, + DNS_TIMEOUT = 272, + DNSBL_FROM = 273, + DNSBL_TO = 274, + EXEMPT = 275, + FD = 276, + INVITE = 277, + IPV4 = 278, + IPV6 = 279, + IRC = 280, + KLINE = 281, + KEY = 282, + MASK = 283, + MAX_READ = 284, + MODE = 285, + NAME = 286, + NEGCACHE = 287, + NEGCACHE_REBUILD = 288, + NICK = 289, + NICKSERV = 290, + NOTICE = 291, + OPER = 292, + OPM = 293, + OPTIONS = 294, + PASSWORD = 295, + PERFORM = 296, + PIDFILE = 297, + PORT = 298, + PROTOCOL = 299, + RSA_PRIVATE_KEY_FILE = 300, + READTIMEOUT = 301, + REALNAME = 302, + RECONNECTINTERVAL = 303, + REPLY = 304, + SCANLOG = 305, + SCANNER = 306, + SECONDS = 307, + MINUTES = 308, + HOURS = 309, + DAYS = 310, + WEEKS = 311, + MONTHS = 312, + YEARS = 313, + SENDMAIL = 314, + SERVER = 315, + TARGET_IP = 316, + TARGET_PORT = 317, + TARGET_STRING = 318, + TIMEOUT = 319, + TLS = 320, + TLS_CERTIFICATE_FILE = 321, + TLS_HOSTNAME_VERIFICATION = 322, + TYPE = 323, + USERNAME = 324, + USER = 325, + NUMBER = 326, + STRING = 327, + PROTOCOLTYPE = 328 }; #endif /* Tokens. */ #define ADDRESS_FAMILY 258 #define AWAY 259 #define BAN_UNKNOWN 260 -#define BLACKLIST 261 -#define BYTES 262 -#define KBYTES 263 -#define MBYTES 264 -#define CHANNEL 265 -#define COMMAND_INTERVAL 266 -#define COMMAND_QUEUE_SIZE 267 -#define COMMAND_TIMEOUT 268 -#define CONNREGEX 269 -#define DNS_FDLIMIT 270 -#define DNS_TIMEOUT 271 -#define DNSBL_FROM 272 -#define DNSBL_TO 273 -#define EXEMPT 274 -#define FD 275 -#define INVITE 276 -#define IPV4 277 -#define IPV6 278 -#define IRC 279 -#define KLINE 280 -#define KEY 281 -#define MASK 282 -#define MAX_READ 283 -#define MODE 284 -#define NAME 285 -#define NEGCACHE 286 -#define NEGCACHE_REBUILD 287 -#define NICK 288 -#define NICKSERV 289 -#define NOTICE 290 -#define OPER 291 -#define OPM 292 -#define OPTIONS 293 -#define PASSWORD 294 -#define PERFORM 295 -#define PIDFILE 296 -#define PORT 297 -#define PROTOCOL 298 -#define READTIMEOUT 299 -#define REALNAME 300 -#define RECONNECTINTERVAL 301 -#define REPLY 302 -#define SCANLOG 303 -#define SCANNER 304 -#define SECONDS 305 -#define MINUTES 306 -#define HOURS 307 -#define DAYS 308 -#define WEEKS 309 -#define MONTHS 310 -#define YEARS 311 -#define SENDMAIL 312 -#define SERVER 313 -#define TARGET_IP 314 -#define TARGET_PORT 315 -#define TARGET_STRING 316 -#define TIMEOUT 317 -#define TLS 318 -#define TLS_HOSTNAME_VERIFICATION 319 -#define TYPE 320 -#define USERNAME 321 -#define USER 322 -#define VHOST 323 -#define NUMBER 324 -#define STRING 325 -#define PROTOCOLTYPE 326 +#define BIND 261 +#define BLACKLIST 262 +#define BYTES 263 +#define KBYTES 264 +#define MBYTES 265 +#define CHANNEL 266 +#define COMMAND_INTERVAL 267 +#define COMMAND_QUEUE_SIZE 268 +#define COMMAND_TIMEOUT 269 +#define CONNREGEX 270 +#define DNS_FDLIMIT 271 +#define DNS_TIMEOUT 272 +#define DNSBL_FROM 273 +#define DNSBL_TO 274 +#define EXEMPT 275 +#define FD 276 +#define INVITE 277 +#define IPV4 278 +#define IPV6 279 +#define IRC 280 +#define KLINE 281 +#define KEY 282 +#define MASK 283 +#define MAX_READ 284 +#define MODE 285 +#define NAME 286 +#define NEGCACHE 287 +#define NEGCACHE_REBUILD 288 +#define NICK 289 +#define NICKSERV 290 +#define NOTICE 291 +#define OPER 292 +#define OPM 293 +#define OPTIONS 294 +#define PASSWORD 295 +#define PERFORM 296 +#define PIDFILE 297 +#define PORT 298 +#define PROTOCOL 299 +#define RSA_PRIVATE_KEY_FILE 300 +#define READTIMEOUT 301 +#define REALNAME 302 +#define RECONNECTINTERVAL 303 +#define REPLY 304 +#define SCANLOG 305 +#define SCANNER 306 +#define SECONDS 307 +#define MINUTES 308 +#define HOURS 309 +#define DAYS 310 +#define WEEKS 311 +#define MONTHS 312 +#define YEARS 313 +#define SENDMAIL 314 +#define SERVER 315 +#define TARGET_IP 316 +#define TARGET_PORT 317 +#define TARGET_STRING 318 +#define TIMEOUT 319 +#define TLS 320 +#define TLS_CERTIFICATE_FILE 321 +#define TLS_HOSTNAME_VERIFICATION 322 +#define TYPE 323 +#define USERNAME 324 +#define USER 325 +#define NUMBER 326 +#define STRING 327 +#define PROTOCOLTYPE 328 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - union YYSTYPE { -#line 93 "config-parser.y" /* yacc.c:1921 */ +#line 95 "config-parser.y" int number; char *string; -#line 205 "config-parser.h" /* yacc.c:1921 */ -}; +#line 208 "config-parser.h" +}; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 diff --git a/src/config-parser.y b/src/config-parser.y index f66513b..6db1406 100644 --- a/src/config-parser.y +++ b/src/config-parser.y @@ -33,6 +33,7 @@ static void *tmp; /* Variable to temporarily hold nodes before insertion to lis %token ADDRESS_FAMILY %token AWAY %token BAN_UNKNOWN +%token BIND %token BLACKLIST %token BYTES KBYTES MBYTES %token CHANNEL @@ -69,6 +70,7 @@ static void *tmp; /* Variable to temporarily hold nodes before insertion to lis %token PIDFILE %token PORT %token PROTOCOL +%token RSA_PRIVATE_KEY_FILE %token READTIMEOUT %token REALNAME %token RECONNECTINTERVAL @@ -83,11 +85,11 @@ static void *tmp; /* Variable to temporarily hold nodes before insertion to lis %token TARGET_STRING %token TIMEOUT %token TLS +%token TLS_CERTIFICATE_FILE %token TLS_HOSTNAME_VERIFICATION %token TYPE %token USERNAME %token USER -%token VHOST %union { @@ -216,13 +218,15 @@ irc_item: irc_away | irc_password | irc_port | irc_tls | + irc_rsa_private_key_file | + irc_tls_certificate_file | irc_tls_hostname_verification | irc_readtimeout | irc_reconnectinterval | irc_realname | irc_server | irc_username | - irc_vhost | + irc_bind | irc_perform | irc_notice | channel_entry | @@ -290,6 +294,19 @@ irc_tls: TLS '=' NUMBER ';' IRCItem.tls = $3; }; +irc_rsa_private_key_file: RSA_PRIVATE_KEY_FILE '=' STRING ';' +{ + xfree(IRCItem.rsa_private_key_file); + IRCItem.rsa_private_key_file = xstrdup($3); +}; + + +irc_tls_certificate_file: TLS_CERTIFICATE_FILE '=' STRING ';' +{ + xfree(IRCItem.tls_certificate_file); + IRCItem.tls_certificate_file = xstrdup($3); +}; + irc_tls_hostname_verification: TLS_HOSTNAME_VERIFICATION '=' NUMBER ';' { IRCItem.tls_hostname_verification = $3; @@ -323,10 +340,10 @@ irc_username: USERNAME '=' STRING ';' IRCItem.username = xstrdup($3); }; -irc_vhost: VHOST '=' STRING ';' +irc_bind: BIND '=' STRING ';' { - xfree(IRCItem.vhost); - IRCItem.vhost = xstrdup($3); + xfree(IRCItem.bind); + IRCItem.bind = xstrdup($3); }; irc_connregex: CONNREGEX '=' STRING ';' @@ -431,7 +448,7 @@ scanner_entry: { olditem = ScannerItemList.tail->data; - item->vhost = xstrdup(olditem->vhost); + item->bind = xstrdup(olditem->bind); item->fd = olditem->fd; item->target_ip = xstrdup(olditem->target_ip); item->target_port = olditem->target_port; @@ -441,7 +458,7 @@ scanner_entry: } else { - item->vhost = xstrdup("0.0.0.0"); + item->bind = xstrdup("0.0.0.0"); item->fd = 512; item->target_ip = xstrdup("127.0.0.1"); item->target_port = 6667; @@ -458,7 +475,7 @@ scanner_items: scanner_items scanner_item | scanner_item; scanner_item: scanner_name | - scanner_vhost | + scanner_bind | scanner_fd | scanner_target_ip | scanner_target_port | @@ -476,12 +493,12 @@ scanner_name: NAME '=' STRING ';' item->name = xstrdup($3); }; -scanner_vhost: VHOST '=' STRING ';' +scanner_bind: BIND '=' STRING ';' { struct ScannerConf *item = tmp; - xfree(item->vhost); - item->vhost = xstrdup($3); + xfree(item->bind); + item->bind = xstrdup($3); }; scanner_target_ip: TARGET_IP '=' STRING ';' diff --git a/src/config.c b/src/config.c index 70129b0..30a02ed 100644 --- a/src/config.c +++ b/src/config.c @@ -52,14 +52,11 @@ static void config_setup(void) { /* Setup irc {} block defaults */ - IRCItem.mode = xstrdup("+c"); IRCItem.nick = xstrdup("hopm"); IRCItem.port = 6667; - IRCItem.tls = 0; IRCItem.tls_hostname_verification = 1; IRCItem.readtimeout = 900; IRCItem.reconnectinterval = 30; - IRCItem.oper = xstrdup("undefined"); IRCItem.username = xstrdup("hopm"); IRCItem.realname = xstrdup("Hybrid Open Proxy Monitor"); IRCItem.server = xstrdup("irc.example.org"); @@ -70,7 +67,6 @@ config_setup(void) OptionsItem.command_queue_size = 64; OptionsItem.command_interval = 10; OptionsItem.command_timeout = 180; - OptionsItem.negcache = 0; /* 0 disabled negcache */ OptionsItem.negcache_rebuild = 43200; OptionsItem.pidfile = xstrdup("hopm.pid"); OptionsItem.dns_fdlimit = 50; @@ -97,8 +93,8 @@ config_load(const char *filename) yyparse(); fclose(conf_file); - scan_init(); /* Initialize the scanners once we have the configuration */ - stats_init(); /* Initialize stats (UPTIME) */ + scan_init(); /* Initialize the scanners once we have the configuration */ + stats_init(); /* Initialize stats (UPTIME) */ firedns_init(); /* Initialize adns */ } diff --git a/src/config.h b/src/config.h index 5302262..da468a5 100644 --- a/src/config.h +++ b/src/config.h @@ -40,10 +40,12 @@ struct IRCConf int port; int tls; int tls_hostname_verification; + char *rsa_private_key_file; + char *tls_certificate_file; time_t readtimeout; time_t reconnectinterval; char *password; - char *vhost; + char *bind; char *nickserv; char *oper; char *mode; @@ -88,7 +90,7 @@ struct ScannerConf node_t node; /**< List node; linked into ScannerItemList */ char *name; list_t protocols; - char *vhost; + char *bind; int fd; char *target_ip; int target_port; @@ -54,7 +54,6 @@ #include "negcache.h" #include "memory.h" #include "main.h" -#include "serno.h" /* @@ -66,7 +65,8 @@ static unsigned int IRC_RAW_LEN; /* Position of IRC_RAW static int IRC_FD = -1; /* File descriptor for IRC client */ static struct sockaddr_storage IRC_SVR; /* Sock Address Struct for IRC server */ -static socklen_t svr_addrlen; +static socklen_t IRC_SVR_LEN; +static char IRC_SVR_STR[INET6_ADDRSTRLEN]; static time_t IRC_LAST; /* Last full line of data from irc server */ static time_t IRC_LASTRECONNECT; /* Time of last reconnection */ @@ -119,17 +119,19 @@ m_perform(char *parv[], unsigned int parc, const char *msg, const char *source_p { node_t *node; - log_printf("IRC -> Connected to %s/%d", IRCItem.server, IRCItem.port); + log_printf("IRC -> Connected to %s[%s]:%i", IRC_SVR_STR, IRCItem.server, IRCItem.port); /* Identify to nickserv if needed */ if (!EmptyString(IRCItem.nickserv)) irc_send("%s", IRCItem.nickserv); /* Oper */ - irc_send("OPER %s", IRCItem.oper); + if (!EmptyString(IRCItem.oper)) + irc_send("OPER %s", IRCItem.oper); /* Set modes */ - irc_send("MODE %s %s", IRCItem.nick, IRCItem.mode); + if (!EmptyString(IRCItem.mode)) + irc_send("MODE %s %s", IRCItem.nick, IRCItem.mode); /* Set Away */ if (!EmptyString(IRCItem.away)) @@ -213,8 +215,8 @@ static void m_ctcp(char *parv[], unsigned int parc, const char *msg, const char *source_p) { if (strncasecmp(parv[3], "\001VERSION\001", 9) == 0) - irc_send("NOTICE %s :\001VERSION Hybrid Open Proxy Monitor %s(%s)\001", - source_p, VERSION, SERIALNUM); + irc_send("NOTICE %s :\001VERSION Hybrid Open Proxy Monitor %s\001", + source_p, VERSION); } /* m_privmsg @@ -468,38 +470,64 @@ userinfo_create(const char *source) static void irc_init(void) { + int n; const void *address; + struct addrinfo hints, *res = NULL; assert(IRC_FD == -1); memset(&IRC_SVR, 0, sizeof(IRC_SVR)); + if (!EmptyString(IRCItem.bind)) + { + memset(&hints, 0, sizeof(hints)); + + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_NUMERICHOST; + + n = getaddrinfo(IRCItem.bind, NULL, &hints, &res); + if (n) + { + log_printf("IRC -> getaddrinfo() error: %s", gai_strerror(n)); + exit(EXIT_FAILURE); + } + } + /* Resolve IRC host. */ - if ((address = firedns_resolveip6(IRCItem.server))) + if ((res == NULL || res->ai_family == AF_INET6) && (address = firedns_resolveip6(IRCItem.server))) { struct sockaddr_in6 *in = (struct sockaddr_in6 *)&IRC_SVR; - svr_addrlen = sizeof(*in); + IRC_SVR_LEN = sizeof(*in); IRC_SVR.ss_family = AF_INET6; in->sin6_port = htons(IRCItem.port); memcpy(&in->sin6_addr, address, sizeof(in->sin6_addr)); } - else if ((address = firedns_resolveip4(IRCItem.server))) + else if ((res == NULL || res->ai_family == AF_INET) && (address = firedns_resolveip4(IRCItem.server))) { struct sockaddr_in *in = (struct sockaddr_in *)&IRC_SVR; - svr_addrlen = sizeof(*in); + IRC_SVR_LEN = sizeof(*in); IRC_SVR.ss_family = AF_INET; in->sin_port = htons(IRCItem.port); memcpy(&in->sin_addr, address, sizeof(in->sin_addr)); } else { - log_printf("IRC -> firedns_resolveip(\"%s\"): %s", IRCItem.server, + log_printf("IRC -> Error resolving host '%s': %s", IRCItem.server, firedns_strerror(firedns_errno)); exit(EXIT_FAILURE); } + n = getnameinfo((const struct sockaddr *)&IRC_SVR, IRC_SVR_LEN, IRC_SVR_STR, + sizeof(IRC_SVR_STR), NULL, 0, NI_NUMERICHOST); + if (n) + { + log_printf("IRC -> getnameinfo() error: %s", gai_strerror(n)); + exit(EXIT_FAILURE); + } + /* Request file desc for IRC client socket */ IRC_FD = socket(IRC_SVR.ss_family, SOCK_STREAM, 0); @@ -510,25 +538,11 @@ irc_init(void) } /* Bind */ - if (!EmptyString(IRCItem.vhost)) + if (res) { - struct addrinfo hints, *res; - - memset(&hints, 0, sizeof(hints)); - - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - hints.ai_flags = AI_NUMERICHOST; - - int n = getaddrinfo(IRCItem.vhost, NULL, &hints, &res); - if (n) + if (bind(IRC_FD, res->ai_addr, res->ai_addrlen)) { - log_printf("IRC -> error binding to %s: %s", IRCItem.vhost, gai_strerror(n)); - exit(EXIT_FAILURE); - } - else if (bind(IRC_FD, res->ai_addr, res->ai_addrlen)) - { - log_printf("IRC -> error binding to %s: %s", IRCItem.vhost, strerror(errno)); + log_printf("IRC -> error binding to %s: %s", IRCItem.bind, strerror(errno)); exit(EXIT_FAILURE); } @@ -551,6 +565,31 @@ irc_init(void) exit(EXIT_FAILURE); } + if (!EmptyString(IRCItem.rsa_private_key_file) && + !EmptyString(IRCItem.tls_certificate_file)) + { + if (SSL_CTX_use_certificate_chain_file(ssl_ctx, IRCItem.tls_certificate_file) != 1) + { + log_printf("IRC -> couldn't load client certificate from %s: %s", + IRCItem.tls_certificate_file, ERR_error_string(ERR_get_error(), NULL)); + exit(EXIT_FAILURE); + } + + if (SSL_CTX_use_PrivateKey_file(ssl_ctx, IRCItem.rsa_private_key_file, SSL_FILETYPE_PEM) != 1) + { + log_printf("IRC -> couldn't load private key from %s: %s", + IRCItem.rsa_private_key_file, ERR_error_string(ERR_get_error(), NULL)); + exit(EXIT_FAILURE); + } + + if (SSL_CTX_check_private_key(ssl_ctx) != 1) + { + log_printf("IRC -> Private key does not match the client certificate: %s", + ERR_error_string(ERR_get_error(), NULL)); + exit(EXIT_FAILURE); + } + } + SSL_CTX_set_min_proto_version(ssl_ctx, TLS1_2_VERSION); SSL_CTX_set_default_verify_paths(ssl_ctx); } @@ -635,8 +674,10 @@ irc_connect(void) irc_init(); + log_printf("IRC -> Attempting to connect to %s[%s]:%i", IRC_SVR_STR, IRCItem.server, IRCItem.port); + /* Connect to IRC server as client. */ - if (connect(IRC_FD, (struct sockaddr *)&IRC_SVR, svr_addrlen) == -1) + if (connect(IRC_FD, (struct sockaddr *)&IRC_SVR, IRC_SVR_LEN) == -1) { log_printf("IRC -> connect(): error connecting to %s: %s", IRCItem.server, strerror(errno)); @@ -828,7 +869,7 @@ irc_read(void) /* Reset counter. */ IRC_RAW_LEN = 0; - break; + return; } if (c != '\0') @@ -842,7 +883,6 @@ irc_read(void) irc_close(); IRC_RAW_LEN = 0; - return; } } diff --git a/src/libopm/src/config.c b/src/libopm/src/config.c index dfc4c48..f2d8279 100644 --- a/src/libopm/src/config.c +++ b/src/libopm/src/config.c @@ -24,8 +24,10 @@ #include "setup.h" #include <stdlib.h> +#include <string.h> #include <sys/types.h> #include <sys/socket.h> +#include <netdb.h> #include <netinet/in.h> #include <arpa/inet.h> @@ -62,7 +64,7 @@ static const OPM_CONFIG_HASH_T HASH[] = OPM_CONFIG_T * libopm_config_create(void) { - const unsigned int num = sizeof(HASH) / sizeof(OPM_CONFIG_HASH_T); + const unsigned int num = sizeof(HASH) / sizeof(HASH[0]); OPM_CONFIG_T *ret; ret = libopm_calloc(sizeof(OPM_CONFIG_T)); @@ -91,7 +93,7 @@ libopm_config_create(void) break; case OPM_TYPE_ADDRESS: - ret->vars[i] = libopm_calloc(sizeof(struct sockaddr_in)); + ret->vars[i] = libopm_calloc(sizeof(struct sockaddr_storage)); break; case OPM_TYPE_STRINGLIST: @@ -119,7 +121,7 @@ libopm_config_create(void) void libopm_config_free(OPM_CONFIG_T *config) { - const unsigned int num = sizeof(HASH) / sizeof(OPM_CONFIG_HASH_T); + const unsigned int num = sizeof(HASH) / sizeof(HASH[0]); OPM_NODE_T *p, *next; OPM_LIST_T *list; @@ -168,7 +170,7 @@ libopm_config_free(OPM_CONFIG_T *config) OPM_ERR_T libopm_config_set(OPM_CONFIG_T *config, unsigned int key, const void *value) { - const unsigned int num = sizeof(HASH) / sizeof(OPM_CONFIG_HASH_T); + const unsigned int num = sizeof(HASH) / sizeof(HASH[0]); OPM_NODE_T *node; if (key >= num) @@ -188,10 +190,29 @@ libopm_config_set(OPM_CONFIG_T *config, unsigned int key, const void *value) break; case OPM_TYPE_ADDRESS: - if (inet_pton(AF_INET, value, &(((struct sockaddr_in *)config->vars[key])->sin_addr)) <= 0) + { + struct addrinfo hints, *res; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_NUMERICHOST; + + if (getaddrinfo(value, NULL, &hints, &res) || res->ai_family != AF_INET) /* XXX: v4 only for now */ + { + if (res) + freeaddrinfo(res); + return OPM_ERR_BADVALUE; /* Return appropriate err code */ + } + + struct sockaddr_storage *const addr = config->vars[key]; + memcpy(addr, res->ai_addr, res->ai_addrlen); + addr->ss_family = res->ai_family; + freeaddrinfo(res); break; + } case OPM_TYPE_STRINGLIST: node = libopm_node_create(libopm_strdup(value)); @@ -218,7 +239,7 @@ libopm_config_set(OPM_CONFIG_T *config, unsigned int key, const void *value) int libopm_config_gettype(int key) { - const unsigned int num = sizeof(HASH) / sizeof(OPM_CONFIG_HASH_T); + const unsigned int num = sizeof(HASH) / sizeof(HASH[0]); for (unsigned int i = 0; i < num; ++i) if (HASH[i].key == key) diff --git a/src/libopm/src/libopm.c b/src/libopm/src/libopm.c index 89b376f..d6118ff 100644 --- a/src/libopm/src/libopm.c +++ b/src/libopm/src/libopm.c @@ -29,10 +29,14 @@ #include <fcntl.h> #include <string.h> #include <stdlib.h> +#include <assert.h> #include <poll.h> #ifdef HAVE_LIBCRYPTO #include <openssl/ssl.h> #endif +#include <sys/types.h> +#include <sys/socket.h> +#include <netdb.h> #include "config.h" #include "libopm.h" @@ -392,24 +396,39 @@ libopm_protocol_config_free(OPM_PROTOCOL_CONFIG_T *protocol) OPM_ERR_T opm_scan(OPM_T *scanner, OPM_REMOTE_T *remote) { - OPM_SCAN_T *scan; /* New scan for OPM_T */ OPM_NODE_T *node; /* Node we'll add scan to when we link it to scans */ - struct in_addr in; + struct addrinfo hints, *res; if (LIST_SIZE(&scanner->protocols) == 0 && LIST_SIZE(&remote->protocols) == 0) return OPM_ERR_NOPROTOCOLS; + memset(&hints, 0, sizeof(hints)); + + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + hints.ai_flags = AI_NUMERICHOST; + /* * XXX: libopm ideally shouldn't see an IP address in string representation. * Could have been stuffed into the _OPM_REMOTE struct by the caller that * already does getaddrinfo() anyway. */ - if (inet_pton(AF_INET, remote->ip, &in) <= 0) + if (getaddrinfo(remote->ip, NULL, &hints, &res) || res->ai_family != AF_INET) /* XXX: only do v4 for now */ + { + if (res) + freeaddrinfo(res); + return OPM_ERR_BADADDR; + } + + OPM_SCAN_T *scan = libopm_scan_create(scanner, remote); - scan = libopm_scan_create(scanner, remote); - memcpy(&scan->addr.sin_addr, &in, sizeof(scan->addr.sin_addr)); + memcpy(&scan->addr, res->ai_addr, res->ai_addrlen); + scan->addr.ss_family = res->ai_family; + scan->addr_len = res->ai_addrlen; + + freeaddrinfo(res); node = libopm_node_create(scan); libopm_list_add(&scanner->queue, node); @@ -891,19 +910,16 @@ libopm_check_closed(OPM_T *scanner) static void libopm_do_connect(OPM_T * scanner, OPM_SCAN_T *scan, OPM_CONNECTION_T *conn) { - struct sockaddr_in *bind_ip; - struct sockaddr_in *addr; /* Outgoing host */ - struct sockaddr_in local_addr; /* For binding */ - - addr = &scan->addr; /* Already have the IP in byte format from opm_scan */ - addr->sin_family = AF_INET; - addr->sin_port = htons(conn->port); + assert(scan->addr.ss_family == AF_INET); - bind_ip = (struct sockaddr_in *)libopm_config(scanner->config, OPM_CONFIG_BIND_IP); + if (scan->addr.ss_family == AF_INET6) + ((struct sockaddr_in6 *)&scan->addr)->sin6_port = htons(conn->port); + else + ((struct sockaddr_in *)&scan->addr)->sin_port = htons(conn->port); - conn->fd = socket(AF_INET, SOCK_STREAM, 0); scanner->fd_use++; /* Increase file descriptor use */ + conn->fd = socket(scan->addr.ss_family, SOCK_STREAM, 0); if (conn->fd == -1) { libopm_do_callback(scanner, libopm_setup_remote(scan->remote, conn), OPM_CALLBACK_ERROR, OPM_ERR_NOFD); @@ -911,15 +927,25 @@ libopm_do_connect(OPM_T * scanner, OPM_SCAN_T *scan, OPM_CONNECTION_T *conn) return; } + struct sockaddr_storage *bind_ip = libopm_config(scanner->config, OPM_CONFIG_BIND_IP); if (bind_ip) { - memset(&local_addr, 0, sizeof(local_addr)); + size_t addr_len; - local_addr.sin_addr.s_addr = bind_ip->sin_addr.s_addr; - local_addr.sin_family = AF_INET; - local_addr.sin_port = htons(0); + if (bind_ip->ss_family == AF_INET6) + { + struct sockaddr_in6 *in = (struct sockaddr_in6 *)bind_ip; + in->sin6_port = htons(0); + addr_len = sizeof(*in); + } + else + { + struct sockaddr_in *in = (struct sockaddr_in *)bind_ip; + in->sin_port = htons(0); + addr_len = sizeof(*in); + } - if (bind(conn->fd, (struct sockaddr *)&local_addr, sizeof(local_addr)) == -1) + if (bind(conn->fd, (const struct sockaddr *)bind_ip, addr_len) == -1) { libopm_do_callback(scanner, libopm_setup_remote(scan->remote, conn), OPM_CALLBACK_ERROR, OPM_ERR_BIND); conn->state = OPM_STATE_CLOSED; @@ -930,7 +956,7 @@ libopm_do_connect(OPM_T * scanner, OPM_SCAN_T *scan, OPM_CONNECTION_T *conn) /* Set socket non blocking */ fcntl(conn->fd, F_SETFL, O_NONBLOCK); - connect(conn->fd, (struct sockaddr *)addr, sizeof(*addr)); + connect(conn->fd, (const struct sockaddr *)&scan->addr, scan->addr_len); #ifdef HAVE_LIBCRYPTO if (conn->protocol->use_tls) diff --git a/src/libopm/src/libopm.h b/src/libopm/src/libopm.h index ca03512..1e0a9cb 100644 --- a/src/libopm/src/libopm.h +++ b/src/libopm/src/libopm.h @@ -29,7 +29,8 @@ typedef int OPM_PROXYREAD_T (OPM_T *, OPM_SCAN_T *, OPM_CONNECTION_T *); struct _OPM_SCAN { - struct sockaddr_in addr; /* Address in byte order of remote client */ + struct sockaddr_storage addr; /* Address in byte order of remote client */ + size_t addr_len; OPM_REMOTE_T *remote; /* Pointed to the OPM_REMOTE_T for this scan, passed by client */ OPM_LIST_T connections; /* List of individual connections of this scan (1 for each protocol) */ }; diff --git a/src/patchlevel.h b/src/patchlevel.h index e432bae..415cdac 100644 --- a/src/patchlevel.h +++ b/src/patchlevel.h @@ -4,5 +4,5 @@ */ #ifndef PATCHLEVEL -#define PATCHLEVEL "hopm-1.1.8" +#define PATCHLEVEL "hopm-1.1.9" #endif @@ -217,7 +217,7 @@ scan_init(void) opm_config(scs->scanner, OPM_CONFIG_SCAN_PORT, &sc->target_port); opm_config(scs->scanner, OPM_CONFIG_TIMEOUT, &sc->timeout); opm_config(scs->scanner, OPM_CONFIG_MAX_READ, &sc->max_read); - opm_config(scs->scanner, OPM_CONFIG_BIND_IP, sc->vhost); + opm_config(scs->scanner, OPM_CONFIG_BIND_IP, sc->bind); /* add target strings */ LIST_FOREACH(p2, sc->target_string.head) diff --git a/src/serno.h b/src/serno.h deleted file mode 100644 index bdad155..0000000 --- a/src/serno.h +++ /dev/null @@ -1 +0,0 @@ -#define SERIALNUM "SVN" |