Browse Source

Import upstream version 25

Alexander Barton 5 years ago
parent
commit
3fafaf1490
61 changed files with 1060 additions and 664 deletions
  1. 2 0
      .mailmap
  2. 9 4
      AUTHORS
  3. 66 1
      ChangeLog
  4. 1 1
      INSTALL
  5. 1 0
      Makefile.in
  6. 37 1
      NEWS
  7. 1 1
      README
  8. 297 283
      config.guess
  9. 118 142
      config.sub
  10. 53 16
      configure
  11. 58 11
      configure.ac
  12. 58 11
      configure.ng
  13. 1 0
      contrib/Debian/Makefile.in
  14. 12 0
      contrib/Debian/changelog
  15. 1 0
      contrib/MacOSX/Makefile.in
  16. 1 0
      contrib/MacOSX/ngIRCd.pmdoc/Makefile.in
  17. 1 0
      contrib/MacOSX/ngIRCd.xcodeproj/Makefile.in
  18. 42 85
      contrib/MacOSX/ngIRCd.xcodeproj/project.pbxproj
  19. 2 1
      contrib/Makefile.am
  20. 3 1
      contrib/Makefile.in
  21. 3 0
      contrib/README
  22. 61 0
      contrib/ngircd.logcheck
  23. 1 1
      contrib/ngircd.spec
  24. 6 5
      doc/HowToRelease.txt
  25. 1 0
      doc/Makefile.in
  26. 26 13
      doc/Platforms.txt
  27. 4 1
      doc/Protocol.txt
  28. 8 0
      doc/Services.txt
  29. 7 1
      doc/sample-ngircd.conf.tmpl
  30. 1 0
      doc/src/Makefile.in
  31. 14 7
      install-sh
  32. 1 0
      man/Makefile.in
  33. 1 1
      man/ngircd.8.tmpl
  34. 8 2
      man/ngircd.conf.5.tmpl
  35. 1 0
      src/Makefile.in
  36. 1 0
      src/ipaddr/Makefile.in
  37. 1 0
      src/ngircd/Makefile.in
  38. 4 0
      src/ngircd/conf-ssl.h
  39. 18 6
      src/ngircd/conf.c
  40. 3 0
      src/ngircd/conf.h
  41. 11 2
      src/ngircd/conn-func.c
  42. 2 1
      src/ngircd/conn-ssl.c
  43. 11 8
      src/ngircd/conn.c
  44. 12 6
      src/ngircd/irc-channel.c
  45. 2 2
      src/ngircd/irc-login.c
  46. 2 3
      src/ngircd/irc-write.c
  47. 21 14
      src/ngircd/irc.c
  48. 5 5
      src/ngircd/lists.c
  49. 2 2
      src/ngircd/match.c
  50. 2 2
      src/ngircd/ngircd.c
  51. 2 2
      src/ngircd/op.c
  52. 16 11
      src/ngircd/parse.c
  53. 6 3
      src/ngircd/resolve.c
  54. 7 1
      src/portab/Makefile.am
  55. 11 3
      src/portab/Makefile.in
  56. 7 1
      src/portab/Makefile.ng
  57. 1 0
      src/testsuite/Makefile.in
  58. 1 0
      src/testsuite/ngircd-test1.conf
  59. 1 0
      src/testsuite/ngircd-test2.conf
  60. 1 0
      src/tool/Makefile.in
  61. 3 3
      src/tool/tool.c

+ 2 - 0
.mailmap

@@ -11,4 +11,6 @@ Dana Dahlstrom <dana+ngIRCd@cs.ucsd.edu> <dana+70@cs.ucsd.edu>
 
 
 DNS <dns@rbose.org>
 DNS <dns@rbose.org>
 
 
+Götz Hoffart <goetz@hoffart.de>
+
 LucentW <lucent@zebes.info> <LucentW@users.noreply.github.com>
 LucentW <lucent@zebes.info> <LucentW@users.noreply.github.com>

+ 9 - 4
AUTHORS

@@ -2,7 +2,7 @@
                      ngIRCd - Next Generation IRC Server
                      ngIRCd - Next Generation IRC Server
                            http://ngircd.barton.de/
                            http://ngircd.barton.de/
 
 
-               (c)2001-2017 Alexander Barton and Contributors.
+               (c)2001-2019 Alexander Barton and Contributors.
                ngIRCd is free software and published under the
                ngIRCd is free software and published under the
                    terms of the GNU General Public License.
                    terms of the GNU General Public License.
 
 
@@ -13,7 +13,7 @@ Note:
 If you have comments, patches or something else, please feel free to post
 If you have comments, patches or something else, please feel free to post
 a mail to the ngIRCd mailing list: <ngircd-ml@ngircd.barton.de> (please see
 a mail to the ngIRCd mailing list: <ngircd-ml@ngircd.barton.de> (please see
 <http://ngircd.barton.de/support.php> for details) or join the ngIRCd IRC
 <http://ngircd.barton.de/support.php> for details) or join the ngIRCd IRC
-channel: <irc://irc.barton.de/ngircd>.
+channel "#ngircd" on irc.barton.de: <irc://irc.barton.de/ngircd>.
 
 
 Don't mail the people listed here directly, if possible!
 Don't mail the people listed here directly, if possible!
 
 
@@ -29,6 +29,7 @@ Contributors
 Ali Shemiran <ashemira@ucsd.edu>
 Ali Shemiran <ashemira@ucsd.edu>
 Ask Bjørn Hansen <ask@develooper.com>
 Ask Bjørn Hansen <ask@develooper.com>
 Benjamin Pineau <ben@zouh.org>
 Benjamin Pineau <ben@zouh.org>
+Bernd Kuhls <bernd.kuhls@t-online.de>
 Brandon Beresini <beresini@google.com>
 Brandon Beresini <beresini@google.com>
 Brett Smith <brett@w3.org>
 Brett Smith <brett@w3.org>
 Brian Collins <bricollins@gmail.com>
 Brian Collins <bricollins@gmail.com>
@@ -41,25 +42,29 @@ DNS <dns@rbose.org>
 Eric Grunow <egrunow@ucsd.edu>
 Eric Grunow <egrunow@ucsd.edu>
 Federico G. Schwindt <fgsch@lodoss.net>
 Federico G. Schwindt <fgsch@lodoss.net>
 Gabor Adam Toth <tg@tgbit.net>
 Gabor Adam Toth <tg@tgbit.net>
-Goetz Hoffart <goetz@hoffart.de>
+Götz Hoffart <goetz@hoffart.de>
 Ian Chard <ian@chard.org>
 Ian Chard <ian@chard.org>
 Ilja Osthoff <i.osthoff@gmx.net>
 Ilja Osthoff <i.osthoff@gmx.net>
+ItsOnlyBinary <ItsOnlyBinary@users.noreply.github.com>
+James Lu <james@overdrivenetworks.com>
 Jari Aalto <jari.aalto@cante.net>
 Jari Aalto <jari.aalto@cante.net>
 LucentW <lucent@zebes.info>
 LucentW <lucent@zebes.info>
 Mantas Mikulėnas <grawity@gmail.com>
 Mantas Mikulėnas <grawity@gmail.com>
 Neale Pickett <neale@woozle.org>
 Neale Pickett <neale@woozle.org>
 Peter Powell <petpow@saberuk.com>
 Peter Powell <petpow@saberuk.com>
 Rolf Eike Beer <eike@sf-mail.de>
 Rolf Eike Beer <eike@sf-mail.de>
+Rosen Penev <rosenp@gmail.com>
 Roy Sindre Norangshol <roy.sindre@norangshol.no>
 Roy Sindre Norangshol <roy.sindre@norangshol.no>
 Scott Perry <scperry@ucsd.edu>
 Scott Perry <scperry@ucsd.edu>
 Sean Reifschneider <jafo-rpms@tummy.com>
 Sean Reifschneider <jafo-rpms@tummy.com>
 Sebastian Köhler <sebkoehler@whoami.org.uk>
 Sebastian Köhler <sebkoehler@whoami.org.uk>
+shankari <shankari@eecs.berkeley.edu>
 Tassilo Schweyer <dev@welterde.de>
 Tassilo Schweyer <dev@welterde.de>
 Tom Ryder <tom@sanctum.geek.nz>
 Tom Ryder <tom@sanctum.geek.nz>
 Unit 193 <unit193@ubuntu.com>
 Unit 193 <unit193@ubuntu.com>
 William Pitcock <nenolod@dereferenced.org>
 William Pitcock <nenolod@dereferenced.org>
-Yecheng Fu <cofyc.jackson@gmail.com>
 xor <xorboy@gmail.com>
 xor <xorboy@gmail.com>
+Yecheng Fu <cofyc.jackson@gmail.com>
 
 
 
 
 Code snippets
 Code snippets

+ 66 - 1
ChangeLog

@@ -2,13 +2,78 @@
                      ngIRCd - Next Generation IRC Server
                      ngIRCd - Next Generation IRC Server
                            http://ngircd.barton.de/
                            http://ngircd.barton.de/
 
 
-               (c)2001-2017 Alexander Barton and Contributors.
+               (c)2001-2019 Alexander Barton and Contributors.
                ngIRCd is free software and published under the
                ngIRCd is free software and published under the
                    terms of the GNU General Public License.
                    terms of the GNU General Public License.
 
 
                                -- ChangeLog --
                                -- ChangeLog --
 
 
 
 
+ngIRCd 25 (2019-01-23)
+
+  - Fix documentation of MotdPhrase length, which actually is 126 characters:
+    update sample configuration file as well as the man page. Thanks to
+    shankari <shankari@eecs.berkeley.edu>.
+    Closes #254.
+  - Implement new configuration option "MaxPenaltyTime", which configures the
+    maximum penalty time increase in seconds, per penalty event. Set to -1 for
+    no limit (the default), 0 to disable penalties altogether. ngIRCd doesn't
+    use penalty increases higher than 2 seconds during normal operation, so
+    values higher than 1 rarely make sense.
+    Disabling (or reducing) penalties can greatly speed up "make check" runs
+    for example, see below, but are mostly a debugging feature and normally
+    not meant to be used on production systems!
+    Some example timings running "make check" from my macOS workstation:
+     - MaxPenaltyTime not set: 4:41,79s
+     - "MaxPenaltyTime = 1":   3:14,71s
+     - "MaxPenaltyTime = 0":     25,46s
+    Closes #249 and #251.
+  - Fix compilation without deprecated OpenSSL APIs. Thanks to Rosen Penev
+    <rosenp@gmail.com> for the patch!
+    Closes #252.
+  - Update Xcode project for latest Xcode version (10.0)
+  - Fix some compiler warnings of Apple Xcode/Clang
+  - Allow a 5th parameter in WEBIRC. Thanks to "ItsOnlyBinary".
+    Closes #247.
+  - Update some more documentation files and source code comments.
+  - Platforms.txt: Add and update systems.
+
+  ngIRCd 25~rc1 (2018-08-11)
+  - Update config.guess (2018-03-08) and config.sub (2018-03-08) files.
+  - Correctly retry to establish an outgoing connections when forking of the
+    resolver sub-process failed (for example because of lack of free memory).
+    Until now, such a connection was never retried once this error was hit.
+    Thanks to Robert Obermeier for reporting this bug!
+    Closes #243.
+  - Fix a "use after free" bug which can be triggered on a newly established
+    connection when the daemon handles an ERROR command received from the peer
+    during client login. Thanks a lot to Joseph Bisch <joseph.bisch@gmail.com>
+    for discovering and reporting this issue!
+  - Only send TOPIC updates to a channel when the topic actually changed:
+    This prevents the channel from becoming flooded by unnecessary TOPIC update
+    messages, that can happen when IRC services try to enforce a certain topic
+    but which is already set (at least on the local server), for example.
+    Therefore still forward it to all servers, but don't inform local clients
+    (still update setter and timestamp information, though).
+  - Update Xcode project for latest Xcode version (9.2). This includes adding
+    missing and deleting obsolete file references.
+  - Handle user mode "C" ("Only users that share a channel are allowed to send
+    messages") like user mode "b" ("block private messages and notices"): allow
+    messages from servers, services, and IRC Operators, too. Change proposed by
+    "wowaname" back in 2015 in #ngircd, thanks!
+  - Fix some compiler warnings.
+  - Add contrib/ngircd.logcheck: Some sample logcheck(8) rules.
+  - Allow IRC Ops and remote servers to KILL service clients: such clients
+    behave like regular users, therefore IRC operators and servers should be
+    able to KILL them: for example to resolve nick collisions.
+    Closes #242.
+  - Don't forward KILLs to other servers if they've been blocked locally:
+    This prevents clients from killing IRC services, for example.
+    Closes #238 and #239.
+  - Fix a cross-compiler issue related to the Get_Error() function.
+    Closes #240 and #241.
+  - Update ./doc/Services.txt, enhance configuration examples.
+
 ngIRCd 24 (2017-01-20)
 ngIRCd 24 (2017-01-20)
 
 
   - Make sure that ./contrib/platformtest.sh aborts when ./autogen.sh fails.
   - Make sure that ./contrib/platformtest.sh aborts when ./autogen.sh fails.

+ 1 - 1
INSTALL

@@ -2,7 +2,7 @@
                      ngIRCd - Next Generation IRC Server
                      ngIRCd - Next Generation IRC Server
                            http://ngircd.barton.de/
                            http://ngircd.barton.de/
 
 
-               (c)2001-2017 Alexander Barton and Contributors.
+               (c)2001-2019 Alexander Barton and Contributors.
                ngIRCd is free software and published under the
                ngIRCd is free software and published under the
                    terms of the GNU General Public License.
                    terms of the GNU General Public License.
 
 

+ 1 - 0
Makefile.in

@@ -236,6 +236,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 srcdir = @srcdir@

+ 37 - 1
NEWS

@@ -2,12 +2,48 @@
                      ngIRCd - Next Generation IRC Server
                      ngIRCd - Next Generation IRC Server
                            http://ngircd.barton.de/
                            http://ngircd.barton.de/
 
 
-               (c)2001-2017 Alexander Barton and Contributors.
+               (c)2001-2019 Alexander Barton and Contributors.
                ngIRCd is free software and published under the
                ngIRCd is free software and published under the
                    terms of the GNU General Public License.
                    terms of the GNU General Public License.
 
 
                                   -- NEWS --
                                   -- NEWS --
 
 
+ngIRCd 25 (2019-01-23)
+
+  - Implement new configuration option "MaxPenaltyTime", which configures the
+    maximum penalty time increase in seconds, per penalty event. Set to -1 for
+    no limit (the default), 0 to disable penalties altogether. ngIRCd doesn't
+    use penalty increases higher than 2 seconds during normal operation, so
+    values higher than 1 rarely make sense.
+    Disabling (or reducing) penalties can greatly speed up "make check" runs
+    for example, see below, but are mostly a debugging feature and normally
+    not meant to be used on production systems!
+    Some example timings running "make check" from my macOS workstation:
+     - MaxPenaltyTime not set: 4:41,79s
+     - "MaxPenaltyTime = 1":   3:14,71s
+     - "MaxPenaltyTime = 0":     25,46s
+    Closes #249 and #251.
+  - Update Xcode project for latest Xcode version (10.0)
+  - Allow a 5th parameter in WEBIRC. Thanks to "ItsOnlyBinary".
+    Closes #247.
+
+  ngIRCd 25~rc1 (2018-08-11)
+  - Only send TOPIC updates to a channel when the topic actually changed:
+    This prevents the channel from becoming flooded by unecessary TOPIC update
+    messages, that can happen when IRC services try to enforce a certain topic
+    but which is already set (at least on the local server), for example.
+    Therefore still forward it to all servers, but don't inform local clients
+    (still update setter and timestamp information, though!).
+  - Update Xcode project for latest Xcode version (9.2). This includes adding
+    missing and deleting obsolete file references.
+  - Handle user mode "C" ("Only users that share a channel are allowed to send
+    messages") like user mode "b" ("block private messages and notices"): allow
+    messages from servers, services, and IRC Operators, too. Change proposed by
+    "wowaname" back in 2015 in #ngircd, thanks!
+  - Allow IRC Ops and remote servers to KILL service clients: such clients
+    behave like regular users, therefore IRC operators and servers should be
+    able to KILL them: for example to resolve nick collisions.
+    Closes #242.
 
 
 ngIRCd 24 (2017-01-20)
 ngIRCd 24 (2017-01-20)
 
 

+ 1 - 1
README

@@ -2,7 +2,7 @@
                      ngIRCd - Next Generation IRC Server
                      ngIRCd - Next Generation IRC Server
                            http://ngircd.barton.de/
                            http://ngircd.barton.de/
 
 
-               (c)2001-2017 Alexander Barton and Contributors.
+               (c)2001-2019 Alexander Barton and Contributors.
                ngIRCd is free software and published under the
                ngIRCd is free software and published under the
                    terms of the GNU General Public License.
                    terms of the GNU General Public License.
 
 

File diff suppressed because it is too large
+ 297 - 283
config.guess


+ 118 - 142
config.sub

@@ -1,8 +1,8 @@
 #! /bin/sh
 #! /bin/sh
 # Configuration validation subroutine script.
 # Configuration validation subroutine script.
-#   Copyright 1992-2016 Free Software Foundation, Inc.
+#   Copyright 1992-2018 Free Software Foundation, Inc.
 
 
-timestamp='2016-11-04'
+timestamp='2018-03-08'
 
 
 # This file is free software; you can redistribute it and/or modify it
 # 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
 # under the terms of the GNU General Public License as published by
@@ -15,7 +15,7 @@ timestamp='2016-11-04'
 # General Public License for more details.
 # General Public License for more details.
 #
 #
 # You should have received a copy of the GNU General Public License
 # You should have received a copy of the GNU General Public License
-# along with this program; if not, see <http://www.gnu.org/licenses/>.
+# along with this program; if not, see <https://www.gnu.org/licenses/>.
 #
 #
 # As a special exception to the GNU General Public License, if you
 # As a special exception to the GNU General Public License, if you
 # distribute this file as part of a program that contains a
 # distribute this file as part of a program that contains a
@@ -33,7 +33,7 @@ timestamp='2016-11-04'
 # Otherwise, we print the canonical config type on stdout and succeed.
 # Otherwise, we print the canonical config type on stdout and succeed.
 
 
 # You can get the latest version of this script from:
 # You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 
 # This file is supposed to be the same for all GNU packages
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
 # and recognize all the CPU types, system types and aliases
@@ -57,7 +57,7 @@ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
 
 
 Canonicalize a configuration name.
 Canonicalize a configuration name.
 
 
-Operation modes:
+Options:
   -h, --help         print this help, then exit
   -h, --help         print this help, then exit
   -t, --time-stamp   print date of last modification, then exit
   -t, --time-stamp   print date of last modification, then exit
   -v, --version      print version number, then exit
   -v, --version      print version number, then exit
@@ -67,7 +67,7 @@ Report bugs and patches to <config-patches@gnu.org>."
 version="\
 version="\
 GNU config.sub ($timestamp)
 GNU config.sub ($timestamp)
 
 
-Copyright 1992-2016 Free Software Foundation, Inc.
+Copyright 1992-2018 Free Software Foundation, Inc.
 
 
 This is free software; see the source for copying conditions.  There is NO
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -94,7 +94,7 @@ while test $# -gt 0 ; do
 
 
     *local*)
     *local*)
        # First pass through any local machine types.
        # First pass through any local machine types.
-       echo $1
+       echo "$1"
        exit ;;
        exit ;;
 
 
     * )
     * )
@@ -112,7 +112,7 @@ esac
 
 
 # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
 # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
 # Here we must recognize all the valid KERNEL-OS combinations.
 # Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+maybe_os=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
 case $maybe_os in
 case $maybe_os in
   nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
   nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
   linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
   linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
@@ -120,16 +120,16 @@ case $maybe_os in
   kopensolaris*-gnu* | cloudabi*-eabi* | \
   kopensolaris*-gnu* | cloudabi*-eabi* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     os=-$maybe_os
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
     ;;
     ;;
   android-linux)
   android-linux)
     os=-linux-android
     os=-linux-android
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
+    basic_machine=`echo "$1" | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
     ;;
     ;;
   *)
   *)
-    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
-    if [ $basic_machine != $1 ]
-    then os=`echo $1 | sed 's/.*-/-/'`
+    basic_machine=`echo "$1" | sed 's/-[^-]*$//'`
+    if [ "$basic_machine" != "$1" ]
+    then os=`echo "$1" | sed 's/.*-/-/'`
     else os=; fi
     else os=; fi
     ;;
     ;;
 esac
 esac
@@ -178,44 +178,44 @@ case $os in
 		;;
 		;;
 	-sco6)
 	-sco6)
 		os=-sco5v6
 		os=-sco5v6
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
 		;;
 		;;
 	-sco5)
 	-sco5)
 		os=-sco3.2v5
 		os=-sco3.2v5
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
 		;;
 		;;
 	-sco4)
 	-sco4)
 		os=-sco3.2v4
 		os=-sco3.2v4
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
 		;;
 		;;
 	-sco3.2.[4-9]*)
 	-sco3.2.[4-9]*)
 		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
 		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
 		;;
 		;;
 	-sco3.2v[4-9]*)
 	-sco3.2v[4-9]*)
 		# Don't forget version if it is 3.2v4 or newer.
 		# Don't forget version if it is 3.2v4 or newer.
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
 		;;
 		;;
 	-sco5v6*)
 	-sco5v6*)
 		# Don't forget version if it is 3.2v4 or newer.
 		# Don't forget version if it is 3.2v4 or newer.
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
 		;;
 		;;
 	-sco*)
 	-sco*)
 		os=-sco3.2v2
 		os=-sco3.2v2
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
 		;;
 		;;
 	-udk*)
 	-udk*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
 		;;
 		;;
 	-isc)
 	-isc)
 		os=-isc2.2
 		os=-isc2.2
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
 		;;
 		;;
 	-clix*)
 	-clix*)
 		basic_machine=clipper-intergraph
 		basic_machine=clipper-intergraph
 		;;
 		;;
 	-isc*)
 	-isc*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		basic_machine=`echo "$1" | sed -e 's/86-.*/86-pc/'`
 		;;
 		;;
 	-lynx*178)
 	-lynx*178)
 		os=-lynxos178
 		os=-lynxos178
@@ -227,10 +227,7 @@ case $os in
 		os=-lynxos
 		os=-lynxos
 		;;
 		;;
 	-ptx*)
 	-ptx*)
-		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
-		;;
-	-windowsnt*)
-		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		basic_machine=`echo "$1" | sed -e 's/86-.*/86-sequent/'`
 		;;
 		;;
 	-psos*)
 	-psos*)
 		os=-psos
 		os=-psos
@@ -263,7 +260,7 @@ case $basic_machine in
 	| fido | fr30 | frv | ft32 \
 	| fido | fr30 | frv | ft32 \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
 	| hexagon \
 	| hexagon \
-	| i370 | i860 | i960 | ia64 \
+	| i370 | i860 | i960 | ia16 | ia64 \
 	| ip2k | iq2000 \
 	| ip2k | iq2000 \
 	| k1om \
 	| k1om \
 	| le32 | le64 \
 	| le32 | le64 \
@@ -299,7 +296,7 @@ case $basic_machine in
 	| nios | nios2 | nios2eb | nios2el \
 	| nios | nios2 | nios2eb | nios2el \
 	| ns16k | ns32k \
 	| ns16k | ns32k \
 	| open8 | or1k | or1knd | or32 \
 	| open8 | or1k | or1knd | or32 \
-	| pdp10 | pdp11 | pj | pjl \
+	| pdp10 | pj | pjl \
 	| powerpc | powerpc64 | powerpc64le | powerpcle \
 	| powerpc | powerpc64 | powerpc64le | powerpcle \
 	| pru \
 	| pru \
 	| pyramid \
 	| pyramid \
@@ -315,7 +312,7 @@ case $basic_machine in
 	| ubicom32 \
 	| ubicom32 \
 	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
 	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
 	| visium \
 	| visium \
-	| we32k \
+	| wasm32 \
 	| x86 | xc16x | xstormy16 | xtensa \
 	| x86 | xc16x | xstormy16 | xtensa \
 	| z8k | z80)
 	| z8k | z80)
 		basic_machine=$basic_machine-unknown
 		basic_machine=$basic_machine-unknown
@@ -336,7 +333,7 @@ case $basic_machine in
 		basic_machine=$basic_machine-unknown
 		basic_machine=$basic_machine-unknown
 		os=-none
 		os=-none
 		;;
 		;;
-	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65)
 		;;
 		;;
 	ms1)
 	ms1)
 		basic_machine=mt-unknown
 		basic_machine=mt-unknown
@@ -365,7 +362,7 @@ case $basic_machine in
 	  ;;
 	  ;;
 	# Object if more than one company name word.
 	# Object if more than one company name word.
 	*-*-*)
 	*-*-*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2
 		exit 1
 		exit 1
 		;;
 		;;
 	# Recognize the basic CPU types with company name.
 	# Recognize the basic CPU types with company name.
@@ -388,7 +385,7 @@ case $basic_machine in
 	| h8300-* | h8500-* \
 	| h8300-* | h8500-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
 	| hexagon-* \
 	| hexagon-* \
-	| i*86-* | i860-* | i960-* | ia64-* \
+	| i*86-* | i860-* | i960-* | ia16-* | ia64-* \
 	| ip2k-* | iq2000-* \
 	| ip2k-* | iq2000-* \
 	| k1om-* \
 	| k1om-* \
 	| le32-* | le64-* \
 	| le32-* | le64-* \
@@ -446,6 +443,7 @@ case $basic_machine in
 	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
 	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
 	| vax-* \
 	| vax-* \
 	| visium-* \
 	| visium-* \
+	| wasm32-* \
 	| we32k-* \
 	| we32k-* \
 	| x86-* | x86_64-* | xc16x-* | xps100-* \
 	| x86-* | x86_64-* | xc16x-* | xps100-* \
 	| xstormy16-* | xtensa*-* \
 	| xstormy16-* | xtensa*-* \
@@ -459,7 +457,7 @@ case $basic_machine in
 	# Recognize the various machine names and aliases which stand
 	# Recognize the various machine names and aliases which stand
 	# for a CPU type and a company and sometimes even an OS.
 	# for a CPU type and a company and sometimes even an OS.
 	386bsd)
 	386bsd)
-		basic_machine=i386-unknown
+		basic_machine=i386-pc
 		os=-bsd
 		os=-bsd
 		;;
 		;;
 	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
 	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
@@ -493,7 +491,7 @@ case $basic_machine in
 		basic_machine=x86_64-pc
 		basic_machine=x86_64-pc
 		;;
 		;;
 	amd64-*)
 	amd64-*)
-		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		basic_machine=x86_64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
 		;;
 		;;
 	amdahl)
 	amdahl)
 		basic_machine=580-amdahl
 		basic_machine=580-amdahl
@@ -538,7 +536,7 @@ case $basic_machine in
 		os=-linux
 		os=-linux
 		;;
 		;;
 	blackfin-*)
 	blackfin-*)
-		basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
+		basic_machine=bfin-`echo "$basic_machine" | sed 's/^[^-]*-//'`
 		os=-linux
 		os=-linux
 		;;
 		;;
 	bluegene*)
 	bluegene*)
@@ -546,13 +544,13 @@ case $basic_machine in
 		os=-cnk
 		os=-cnk
 		;;
 		;;
 	c54x-*)
 	c54x-*)
-		basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		basic_machine=tic54x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
 		;;
 		;;
 	c55x-*)
 	c55x-*)
-		basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		basic_machine=tic55x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
 		;;
 		;;
 	c6x-*)
 	c6x-*)
-		basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
+		basic_machine=tic6x-`echo "$basic_machine" | sed 's/^[^-]*-//'`
 		;;
 		;;
 	c90)
 	c90)
 		basic_machine=c90-cray
 		basic_machine=c90-cray
@@ -641,7 +639,7 @@ case $basic_machine in
 		basic_machine=rs6000-bull
 		basic_machine=rs6000-bull
 		os=-bosx
 		os=-bosx
 		;;
 		;;
-	dpx2* | dpx2*-bull)
+	dpx2*)
 		basic_machine=m68k-bull
 		basic_machine=m68k-bull
 		os=-sysv3
 		os=-sysv3
 		;;
 		;;
@@ -650,7 +648,7 @@ case $basic_machine in
 		os=$os"spe"
 		os=$os"spe"
 		;;
 		;;
 	e500v[12]-*)
 	e500v[12]-*)
-		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
 		os=$os"spe"
 		os=$os"spe"
 		;;
 		;;
 	ebmon29k)
 	ebmon29k)
@@ -742,9 +740,6 @@ case $basic_machine in
 	hp9k8[0-9][0-9] | hp8[0-9][0-9])
 	hp9k8[0-9][0-9] | hp8[0-9][0-9])
 		basic_machine=hppa1.0-hp
 		basic_machine=hppa1.0-hp
 		;;
 		;;
-	hppa-next)
-		os=-nextstep3
-		;;
 	hppaosf)
 	hppaosf)
 		basic_machine=hppa1.1-hp
 		basic_machine=hppa1.1-hp
 		os=-osf
 		os=-osf
@@ -757,26 +752,26 @@ case $basic_machine in
 		basic_machine=i370-ibm
 		basic_machine=i370-ibm
 		;;
 		;;
 	i*86v32)
 	i*86v32)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
 		os=-sysv32
 		os=-sysv32
 		;;
 		;;
 	i*86v4*)
 	i*86v4*)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
 		os=-sysv4
 		os=-sysv4
 		;;
 		;;
 	i*86v)
 	i*86v)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
 		os=-sysv
 		os=-sysv
 		;;
 		;;
 	i*86sol2)
 	i*86sol2)
-		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		basic_machine=`echo "$1" | sed -e 's/86.*/86-pc/'`
 		os=-solaris2
 		os=-solaris2
 		;;
 		;;
 	i386mach)
 	i386mach)
 		basic_machine=i386-mach
 		basic_machine=i386-mach
 		os=-mach
 		os=-mach
 		;;
 		;;
-	i386-vsta | vsta)
+	vsta)
 		basic_machine=i386-unknown
 		basic_machine=i386-unknown
 		os=-vsta
 		os=-vsta
 		;;
 		;;
@@ -795,19 +790,16 @@ case $basic_machine in
 		os=-sysv
 		os=-sysv
 		;;
 		;;
 	leon-*|leon[3-9]-*)
 	leon-*|leon[3-9]-*)
-		basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
+		basic_machine=sparc-`echo "$basic_machine" | sed 's/-.*//'`
 		;;
 		;;
 	m68knommu)
 	m68knommu)
 		basic_machine=m68k-unknown
 		basic_machine=m68k-unknown
 		os=-linux
 		os=-linux
 		;;
 		;;
 	m68knommu-*)
 	m68knommu-*)
-		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
+		basic_machine=m68k-`echo "$basic_machine" | sed 's/^[^-]*-//'`
 		os=-linux
 		os=-linux
 		;;
 		;;
-	m88k-omron*)
-		basic_machine=m88k-omron
-		;;
 	magnum | m3230)
 	magnum | m3230)
 		basic_machine=mips-mips
 		basic_machine=mips-mips
 		os=-sysv
 		os=-sysv
@@ -839,10 +831,10 @@ case $basic_machine in
 		os=-mint
 		os=-mint
 		;;
 		;;
 	mips3*-*)
 	mips3*-*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+		basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`
 		;;
 		;;
 	mips3*)
 	mips3*)
-		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+		basic_machine=`echo "$basic_machine" | sed -e 's/mips3/mips64/'`-unknown
 		;;
 		;;
 	monitor)
 	monitor)
 		basic_machine=m68k-rom68k
 		basic_machine=m68k-rom68k
@@ -861,7 +853,7 @@ case $basic_machine in
 		os=-msdos
 		os=-msdos
 		;;
 		;;
 	ms1-*)
 	ms1-*)
-		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
+		basic_machine=`echo "$basic_machine" | sed -e 's/ms1-/mt-/'`
 		;;
 		;;
 	msys)
 	msys)
 		basic_machine=i686-pc
 		basic_machine=i686-pc
@@ -903,7 +895,7 @@ case $basic_machine in
 		basic_machine=v70-nec
 		basic_machine=v70-nec
 		os=-sysv
 		os=-sysv
 		;;
 		;;
-	next | m*-next )
+	next | m*-next)
 		basic_machine=m68k-next
 		basic_machine=m68k-next
 		case $os in
 		case $os in
 		    -nextstep* )
 		    -nextstep* )
@@ -948,6 +940,12 @@ case $basic_machine in
 	nsr-tandem)
 	nsr-tandem)
 		basic_machine=nsr-tandem
 		basic_machine=nsr-tandem
 		;;
 		;;
+	nsv-tandem)
+		basic_machine=nsv-tandem
+		;;
+	nsx-tandem)
+		basic_machine=nsx-tandem
+		;;
 	op50n-* | op60c-*)
 	op50n-* | op60c-*)
 		basic_machine=hppa1.1-oki
 		basic_machine=hppa1.1-oki
 		os=-proelf
 		os=-proelf
@@ -980,7 +978,7 @@ case $basic_machine in
 		os=-linux
 		os=-linux
 		;;
 		;;
 	parisc-*)
 	parisc-*)
-		basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
+		basic_machine=hppa-`echo "$basic_machine" | sed 's/^[^-]*-//'`
 		os=-linux
 		os=-linux
 		;;
 		;;
 	pbd)
 	pbd)
@@ -996,7 +994,7 @@ case $basic_machine in
 		basic_machine=i386-pc
 		basic_machine=i386-pc
 		;;
 		;;
 	pc98-*)
 	pc98-*)
-		basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
+		basic_machine=i386-`echo "$basic_machine" | sed 's/^[^-]*-//'`
 		;;
 		;;
 	pentium | p5 | k5 | k6 | nexgen | viac3)
 	pentium | p5 | k5 | k6 | nexgen | viac3)
 		basic_machine=i586-pc
 		basic_machine=i586-pc
@@ -1011,16 +1009,16 @@ case $basic_machine in
 		basic_machine=i786-pc
 		basic_machine=i786-pc
 		;;
 		;;
 	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
 	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		basic_machine=i586-`echo "$basic_machine" | sed 's/^[^-]*-//'`
 		;;
 		;;
 	pentiumpro-* | p6-* | 6x86-* | athlon-*)
 	pentiumpro-* | p6-* | 6x86-* | athlon-*)
-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
 		;;
 		;;
 	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
 	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
-		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		basic_machine=i686-`echo "$basic_machine" | sed 's/^[^-]*-//'`
 		;;
 		;;
 	pentium4-*)
 	pentium4-*)
-		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+		basic_machine=i786-`echo "$basic_machine" | sed 's/^[^-]*-//'`
 		;;
 		;;
 	pn)
 	pn)
 		basic_machine=pn-gould
 		basic_machine=pn-gould
@@ -1030,23 +1028,23 @@ case $basic_machine in
 	ppc | ppcbe)	basic_machine=powerpc-unknown
 	ppc | ppcbe)	basic_machine=powerpc-unknown
 		;;
 		;;
 	ppc-* | ppcbe-*)
 	ppc-* | ppcbe-*)
-		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		basic_machine=powerpc-`echo "$basic_machine" | sed 's/^[^-]*-//'`
 		;;
 		;;
 	ppcle | powerpclittle)
 	ppcle | powerpclittle)
 		basic_machine=powerpcle-unknown
 		basic_machine=powerpcle-unknown
 		;;
 		;;
 	ppcle-* | powerpclittle-*)
 	ppcle-* | powerpclittle-*)
-		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		basic_machine=powerpcle-`echo "$basic_machine" | sed 's/^[^-]*-//'`
 		;;
 		;;
 	ppc64)	basic_machine=powerpc64-unknown
 	ppc64)	basic_machine=powerpc64-unknown
 		;;
 		;;
-	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+	ppc64-*) basic_machine=powerpc64-`echo "$basic_machine" | sed 's/^[^-]*-//'`
 		;;
 		;;
 	ppc64le | powerpc64little)
 	ppc64le | powerpc64little)
 		basic_machine=powerpc64le-unknown
 		basic_machine=powerpc64le-unknown
 		;;
 		;;
 	ppc64le-* | powerpc64little-*)
 	ppc64le-* | powerpc64little-*)
-		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		basic_machine=powerpc64le-`echo "$basic_machine" | sed 's/^[^-]*-//'`
 		;;
 		;;
 	ps2)
 	ps2)
 		basic_machine=i386-ibm
 		basic_machine=i386-ibm
@@ -1100,17 +1098,10 @@ case $basic_machine in
 	sequent)
 	sequent)
 		basic_machine=i386-sequent
 		basic_machine=i386-sequent
 		;;
 		;;
-	sh)
-		basic_machine=sh-hitachi
-		os=-hms
-		;;
 	sh5el)
 	sh5el)
 		basic_machine=sh5le-unknown
 		basic_machine=sh5le-unknown
 		;;
 		;;
-	sh64)
-		basic_machine=sh64-unknown
-		;;
-	sparclite-wrs | simso-wrs)
+	simso-wrs)
 		basic_machine=sparclite-wrs
 		basic_machine=sparclite-wrs
 		os=-vxworks
 		os=-vxworks
 		;;
 		;;
@@ -1129,7 +1120,7 @@ case $basic_machine in
 		os=-sysv4
 		os=-sysv4
 		;;
 		;;
 	strongarm-* | thumb-*)
 	strongarm-* | thumb-*)
-		basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
+		basic_machine=arm-`echo "$basic_machine" | sed 's/^[^-]*-//'`
 		;;
 		;;
 	sun2)
 	sun2)
 		basic_machine=m68000-sun
 		basic_machine=m68000-sun
@@ -1251,6 +1242,9 @@ case $basic_machine in
 		basic_machine=hppa1.1-winbond
 		basic_machine=hppa1.1-winbond
 		os=-proelf
 		os=-proelf
 		;;
 		;;
+	x64)
+		basic_machine=x86_64-pc
+		;;
 	xbox)
 	xbox)
 		basic_machine=i686-pc
 		basic_machine=i686-pc
 		os=-mingw32
 		os=-mingw32
@@ -1259,20 +1253,12 @@ case $basic_machine in
 		basic_machine=xps100-honeywell
 		basic_machine=xps100-honeywell
 		;;
 		;;
 	xscale-* | xscalee[bl]-*)
 	xscale-* | xscalee[bl]-*)
-		basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
+		basic_machine=`echo "$basic_machine" | sed 's/^xscale/arm/'`
 		;;
 		;;
 	ymp)
 	ymp)
 		basic_machine=ymp-cray
 		basic_machine=ymp-cray
 		os=-unicos
 		os=-unicos
 		;;
 		;;
-	z8k-*-coff)
-		basic_machine=z8k-unknown
-		os=-sim
-		;;
-	z80-*-coff)
-		basic_machine=z80-unknown
-		os=-sim
-		;;
 	none)
 	none)
 		basic_machine=none-none
 		basic_machine=none-none
 		os=-none
 		os=-none
@@ -1301,10 +1287,6 @@ case $basic_machine in
 	vax)
 	vax)
 		basic_machine=vax-dec
 		basic_machine=vax-dec
 		;;
 		;;
-	pdp10)
-		# there are many clones, so DEC is not a safe bet
-		basic_machine=pdp10-unknown
-		;;
 	pdp11)
 	pdp11)
 		basic_machine=pdp11-dec
 		basic_machine=pdp11-dec
 		;;
 		;;
@@ -1314,9 +1296,6 @@ case $basic_machine in
 	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
 	sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
 		basic_machine=sh-unknown
 		basic_machine=sh-unknown
 		;;
 		;;
-	sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
-		basic_machine=sparc-sun
-		;;
 	cydra)
 	cydra)
 		basic_machine=cydra-cydrome
 		basic_machine=cydra-cydrome
 		;;
 		;;
@@ -1336,7 +1315,7 @@ case $basic_machine in
 		# Make sure to match an already-canonicalized machine name.
 		# Make sure to match an already-canonicalized machine name.
 		;;
 		;;
 	*)
 	*)
-		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		echo Invalid configuration \`"$1"\': machine \`"$basic_machine"\' not recognized 1>&2
 		exit 1
 		exit 1
 		;;
 		;;
 esac
 esac
@@ -1344,10 +1323,10 @@ esac
 # Here we canonicalize certain aliases for manufacturers.
 # Here we canonicalize certain aliases for manufacturers.
 case $basic_machine in
 case $basic_machine in
 	*-digital*)
 	*-digital*)
-		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		basic_machine=`echo "$basic_machine" | sed 's/digital.*/dec/'`
 		;;
 		;;
 	*-commodore*)
 	*-commodore*)
-		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		basic_machine=`echo "$basic_machine" | sed 's/commodore.*/cbm/'`
 		;;
 		;;
 	*)
 	*)
 		;;
 		;;
@@ -1358,8 +1337,8 @@ esac
 if [ x"$os" != x"" ]
 if [ x"$os" != x"" ]
 then
 then
 case $os in
 case $os in
-	# First match some system type aliases
-	# that might get confused with valid system types.
+	# First match some system type aliases that might get confused
+	# with valid system types.
 	# -solaris* is a basic system type, with this one exception.
 	# -solaris* is a basic system type, with this one exception.
 	-auroraux)
 	-auroraux)
 		os=-auroraux
 		os=-auroraux
@@ -1370,18 +1349,19 @@ case $os in
 	-solaris)
 	-solaris)
 		os=-solaris2
 		os=-solaris2
 		;;
 		;;
-	-svr4*)
-		os=-sysv4
-		;;
 	-unixware*)
 	-unixware*)
 		os=-sysv4.2uw
 		os=-sysv4.2uw
 		;;
 		;;
 	-gnu/linux*)
 	-gnu/linux*)
 		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
 		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
 		;;
 		;;
-	# First accept the basic system types.
+	# es1800 is here to avoid being matched by es* (a different OS)
+	-es1800*)
+		os=-ose
+		;;
+	# Now accept the basic system types.
 	# The portable systems comes first.
 	# The portable systems comes first.
-	# Each alternative MUST END IN A *, to match a version number.
+	# Each alternative MUST end in a * to match a version number.
 	# -sysv* is not here because it comes later, after sysvr4.
 	# -sysv* is not here because it comes later, after sysvr4.
 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
 	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
 	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
@@ -1391,25 +1371,26 @@ case $os in
 	      | -aos* | -aros* | -cloudabi* | -sortix* \
 	      | -aos* | -aros* | -cloudabi* | -sortix* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
+	      | -hiux* | -knetbsd* | -mirbsd* | -netbsd* \
 	      | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
 	      | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
 	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
 	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-	      | -chorusos* | -chorusrdb* | -cegcc* \
+	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* | -hcos* \
+	      | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \
 	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
 	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
 	      | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
 	      | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
 	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
 	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
 	      | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
 	      | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
-	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* \
 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+	      | -morphos* | -superux* | -rtmk* | -windiss* \
 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
 	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
 	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
-	      | -onefs* | -tirtos* | -phoenix* | -fuchsia*)
+	      | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox* | -bme* \
+	      | -midnightbsd*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 		;;
 	-qnx*)
 	-qnx*)
@@ -1426,12 +1407,12 @@ case $os in
 	-nto*)
 	-nto*)
 		os=`echo $os | sed -e 's|nto|nto-qnx|'`
 		os=`echo $os | sed -e 's|nto|nto-qnx|'`
 		;;
 		;;
-	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
+	-sim | -xray | -os68k* | -v88r* \
+	      | -windows* | -osx | -abug | -netware* | -os9* \
 	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
 	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
 		;;
 		;;
 	-mac*)
 	-mac*)
-		os=`echo $os | sed -e 's|mac|macos|'`
+		os=`echo "$os" | sed -e 's|mac|macos|'`
 		;;
 		;;
 	-linux-dietlibc)
 	-linux-dietlibc)
 		os=-linux-dietlibc
 		os=-linux-dietlibc
@@ -1440,10 +1421,10 @@ case $os in
 		os=`echo $os | sed -e 's|linux|linux-gnu|'`
 		os=`echo $os | sed -e 's|linux|linux-gnu|'`
 		;;
 		;;
 	-sunos5*)
 	-sunos5*)
-		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
 		;;
 		;;
 	-sunos6*)
 	-sunos6*)
-		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
 		;;
 		;;
 	-opened*)
 	-opened*)
 		os=-openedition
 		os=-openedition
@@ -1454,12 +1435,6 @@ case $os in
 	-wince*)
 	-wince*)
 		os=-wince
 		os=-wince
 		;;
 		;;
-	-osfrose*)
-		os=-osfrose
-		;;
-	-osf*)
-		os=-osf
-		;;
 	-utek*)
 	-utek*)
 		os=-bsd
 		os=-bsd
 		;;
 		;;
@@ -1484,7 +1459,7 @@ case $os in
 	-nova*)
 	-nova*)
 		os=-rtmk-nova
 		os=-rtmk-nova
 		;;
 		;;
-	-ns2 )
+	-ns2)
 		os=-nextstep2
 		os=-nextstep2
 		;;
 		;;
 	-nsk*)
 	-nsk*)
@@ -1506,7 +1481,7 @@ case $os in
 	-oss*)
 	-oss*)
 		os=-sysv3
 		os=-sysv3
 		;;
 		;;
-	-svr4)
+	-svr4*)
 		os=-sysv4
 		os=-sysv4
 		;;
 		;;
 	-svr3)
 	-svr3)
@@ -1521,24 +1496,28 @@ case $os in
 	-ose*)
 	-ose*)
 		os=-ose
 		os=-ose
 		;;
 		;;
-	-es1800*)
-		os=-ose
-		;;
-	-xenix)
-		os=-xenix
-		;;
 	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
 	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
 		os=-mint
 		os=-mint
 		;;
 		;;
-	-aros*)
-		os=-aros
-		;;
 	-zvmoe)
 	-zvmoe)
 		os=-zvmoe
 		os=-zvmoe
 		;;
 		;;
 	-dicos*)
 	-dicos*)
 		os=-dicos
 		os=-dicos
 		;;
 		;;
+	-pikeos*)
+		# Until real need of OS specific support for
+		# particular features comes up, bare metal
+		# configurations are quite functional.
+		case $basic_machine in
+		    arm*)
+			os=-eabi
+			;;
+		    *)
+			os=-elf
+			;;
+		esac
+		;;
 	-nacl*)
 	-nacl*)
 		;;
 		;;
 	-ios)
 	-ios)
@@ -1548,7 +1527,7 @@ case $os in
 	*)
 	*)
 		# Get rid of the `-' at the beginning of $os.
 		# Get rid of the `-' at the beginning of $os.
 		os=`echo $os | sed 's/[^-]*-//'`
 		os=`echo $os | sed 's/[^-]*-//'`
-		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+		echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2
 		exit 1
 		exit 1
 		;;
 		;;
 esac
 esac
@@ -1638,12 +1617,12 @@ case $basic_machine in
 	sparc-* | *-sun)
 	sparc-* | *-sun)
 		os=-sunos4.1.1
 		os=-sunos4.1.1
 		;;
 		;;
+	pru-*)
+		os=-elf
+		;;
 	*-be)
 	*-be)
 		os=-beos
 		os=-beos
 		;;
 		;;
-	*-haiku)
-		os=-haiku
-		;;
 	*-ibm)
 	*-ibm)
 		os=-aix
 		os=-aix
 		;;
 		;;
@@ -1683,7 +1662,7 @@ case $basic_machine in
 	m88k-omron*)
 	m88k-omron*)
 		os=-luna
 		os=-luna
 		;;
 		;;
-	*-next )
+	*-next)
 		os=-nextstep
 		os=-nextstep
 		;;
 		;;
 	*-sequent)
 	*-sequent)
@@ -1698,9 +1677,6 @@ case $basic_machine in
 	i370-*)
 	i370-*)
 		os=-mvs
 		os=-mvs
 		;;
 		;;
-	*-next)
-		os=-nextstep3
-		;;
 	*-gould)
 	*-gould)
 		os=-sysv
 		os=-sysv
 		;;
 		;;
@@ -1810,15 +1786,15 @@ case $basic_machine in
 				vendor=stratus
 				vendor=stratus
 				;;
 				;;
 		esac
 		esac
-		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		basic_machine=`echo "$basic_machine" | sed "s/unknown/$vendor/"`
 		;;
 		;;
 esac
 esac
 
 
-echo $basic_machine$os
+echo "$basic_machine$os"
 exit
 exit
 
 
 # Local variables:
 # Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
+# eval: (add-hook 'before-save-hook 'time-stamp)
 # time-stamp-start: "timestamp='"
 # time-stamp-start: "timestamp='"
 # time-stamp-format: "%:y-%02m-%02d"
 # time-stamp-format: "%:y-%02m-%02d"
 # time-stamp-end: "'"
 # time-stamp-end: "'"

+ 53 - 16
configure

@@ -1,6 +1,6 @@
 #! /bin/sh
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for ngIRCd 24.
+# Generated by GNU Autoconf 2.69 for ngIRCd 25.
 #
 #
 # Report bugs to <ngircd-ml@ngircd.barton.de>.
 # Report bugs to <ngircd-ml@ngircd.barton.de>.
 #
 #
@@ -580,8 +580,8 @@ MAKEFLAGS=
 # Identity of this package.
 # Identity of this package.
 PACKAGE_NAME='ngIRCd'
 PACKAGE_NAME='ngIRCd'
 PACKAGE_TARNAME='ngircd'
 PACKAGE_TARNAME='ngircd'
-PACKAGE_VERSION='24'
-PACKAGE_STRING='ngIRCd 24'
+PACKAGE_VERSION='25'
+PACKAGE_STRING='ngIRCd 25'
 PACKAGE_BUGREPORT='ngircd-ml@ngircd.barton.de'
 PACKAGE_BUGREPORT='ngircd-ml@ngircd.barton.de'
 PACKAGE_URL='http://ngircd.barton.de/'
 PACKAGE_URL='http://ngircd.barton.de/'
 
 
@@ -708,6 +708,7 @@ infodir
 docdir
 docdir
 oldincludedir
 oldincludedir
 includedir
 includedir
+runstatedir
 localstatedir
 localstatedir
 sharedstatedir
 sharedstatedir
 sysconfdir
 sysconfdir
@@ -798,6 +799,7 @@ datadir='${datarootdir}'
 sysconfdir='${prefix}/etc'
 sysconfdir='${prefix}/etc'
 sharedstatedir='${prefix}/com'
 sharedstatedir='${prefix}/com'
 localstatedir='${prefix}/var'
 localstatedir='${prefix}/var'
+runstatedir='${localstatedir}/run'
 includedir='${prefix}/include'
 includedir='${prefix}/include'
 oldincludedir='/usr/include'
 oldincludedir='/usr/include'
 docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
 docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
@@ -1050,6 +1052,15 @@ do
   | -silent | --silent | --silen | --sile | --sil)
   | -silent | --silent | --silen | --sile | --sil)
     silent=yes ;;
     silent=yes ;;
 
 
+  -runstatedir | --runstatedir | --runstatedi | --runstated \
+  | --runstate | --runstat | --runsta | --runst | --runs \
+  | --run | --ru | --r)
+    ac_prev=runstatedir ;;
+  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
+  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
+  | --run=* | --ru=* | --r=*)
+    runstatedir=$ac_optarg ;;
+
   -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
   -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
     ac_prev=sbindir ;;
     ac_prev=sbindir ;;
   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
   -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
@@ -1187,7 +1198,7 @@ fi
 for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
 for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
 		datadir sysconfdir sharedstatedir localstatedir includedir \
 		datadir sysconfdir sharedstatedir localstatedir includedir \
 		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
 		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-		libdir localedir mandir
+		libdir localedir mandir runstatedir
 do
 do
   eval ac_val=\$$ac_var
   eval ac_val=\$$ac_var
   # Remove trailing slashes.
   # Remove trailing slashes.
@@ -1300,7 +1311,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # 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.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
   cat <<_ACEOF
-\`configure' configures ngIRCd 24 to adapt to many kinds of systems.
+\`configure' configures ngIRCd 25 to adapt to many kinds of systems.
 
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
 
@@ -1340,6 +1351,7 @@ Fine tuning of the installation directories:
   --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
   --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
   --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
   --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
   --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
   --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
+  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
   --libdir=DIR            object code libraries [EPREFIX/lib]
   --libdir=DIR            object code libraries [EPREFIX/lib]
   --includedir=DIR        C header files [PREFIX/include]
   --includedir=DIR        C header files [PREFIX/include]
   --oldincludedir=DIR     C header files for non-gcc [/usr/include]
   --oldincludedir=DIR     C header files for non-gcc [/usr/include]
@@ -1370,7 +1382,7 @@ fi
 
 
 if test -n "$ac_init_help"; then
 if test -n "$ac_init_help"; then
   case $ac_init_help in
   case $ac_init_help in
-     short | recursive ) echo "Configuration of ngIRCd 24:";;
+     short | recursive ) echo "Configuration of ngIRCd 25:";;
    esac
    esac
   cat <<\_ACEOF
   cat <<\_ACEOF
 
 
@@ -1483,7 +1495,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
 if $ac_init_version; then
   cat <<\_ACEOF
   cat <<\_ACEOF
-ngIRCd configure 24
+ngIRCd configure 25
 generated by GNU Autoconf 2.69
 generated by GNU Autoconf 2.69
 
 
 Copyright (C) 2012 Free Software Foundation, Inc.
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2017,7 +2029,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 running configure, to aid debugging if configure makes a mistake.
 
 
-It was created by ngIRCd $as_me 24, which was
+It was created by ngIRCd $as_me 25, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
 
   $ $0 $@
   $ $0 $@
@@ -2934,7 +2946,7 @@ fi
 
 
 # Define the identity of the package.
 # Define the identity of the package.
  PACKAGE='ngircd'
  PACKAGE='ngircd'
- VERSION='24'
+ VERSION='25'
 
 
 
 
 cat >>confdefs.h <<_ACEOF
 cat >>confdefs.h <<_ACEOF
@@ -5469,8 +5481,16 @@ fi
 
 
 # Required header files
 # Required header files
 for ac_header in  \
 for ac_header in  \
-	fcntl.h netdb.h netinet/in.h stdlib.h string.h \
-	strings.h sys/socket.h sys/time.h sys/types.h unistd.h \
+		fcntl.h \
+		netdb.h \
+		netinet/in.h \
+		stdlib.h \
+		string.h \
+		strings.h \
+		sys/socket.h \
+		sys/time.h \
+		sys/types.h \
+		unistd.h \
 
 
 do :
 do :
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
   as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
@@ -6131,9 +6151,26 @@ done
 
 
 # Required functions
 # Required functions
 for ac_func in  \
 for ac_func in  \
-	alarm dup2 endpwent gethostbyaddr gethostbyname gethostname \
-	gettimeofday inet_ntoa memmove memset setsid socket strcasecmp \
-	strchr strcspn strerror strncasecmp strrchr strspn strstr \
+		alarm \
+		dup2 \
+		endpwent \
+		gethostbyaddr \
+		gethostbyname \
+		gethostname \
+		gettimeofday \
+		inet_ntoa \
+		memmove \
+		memset \
+		setsid \
+		socket \
+		strcasecmp \
+		strchr \
+		strcspn \
+		strerror \
+		strncasecmp \
+		strrchr \
+		strspn \
+		strstr \
 
 
 do :
 do :
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
   as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
@@ -8098,7 +8135,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 # values after options handling.
 ac_log="
 ac_log="
-This file was extended by ngIRCd $as_me 24, which was
+This file was extended by ngIRCd $as_me 25, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
 
   CONFIG_FILES    = $CONFIG_FILES
   CONFIG_FILES    = $CONFIG_FILES
@@ -8165,7 +8202,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
 ac_cs_version="\\
-ngIRCd config.status 24
+ngIRCd config.status 25
 configured by $0, generated by GNU Autoconf 2.69,
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
   with options \\"\$ac_cs_config\\"
 
 

+ 58 - 11
configure.ac

@@ -154,15 +154,30 @@ AC_HEADER_TIME
 
 
 # Required header files
 # Required header files
 AC_CHECK_HEADERS([ \
 AC_CHECK_HEADERS([ \
-	fcntl.h netdb.h netinet/in.h stdlib.h string.h \
-	strings.h sys/socket.h sys/time.h sys/types.h unistd.h \
+		fcntl.h \
+		netdb.h \
+		netinet/in.h \
+		stdlib.h \
+		string.h \
+		strings.h \
+		sys/socket.h \
+		sys/time.h \
+		sys/types.h \
+		unistd.h \
 	],,AC_MSG_ERROR([required C header missing!]))
 	],,AC_MSG_ERROR([required C header missing!]))
 
 
 # Optional header files
 # Optional header files
 AC_CHECK_HEADERS_ONCE([ \
 AC_CHECK_HEADERS_ONCE([ \
-	arpa/inet.h inttypes.h malloc.h netinet/in_systm.h netinet/ip.h \
-	stdbool.h stddef.h stdint.h varargs.h \
-	])
+	arpa/inet.h \
+	inttypes.h \
+	malloc.h \
+	netinet/in_systm.h \
+	netinet/ip.h \
+	stdbool.h \
+	stddef.h \
+	stdint.h \
+	varargs.h \
+])
 
 
 # -- Datatypes --
 # -- Datatypes --
 
 
@@ -212,17 +227,49 @@ AC_FUNC_STRFTIME
 
 
 # Required functions
 # Required functions
 AC_CHECK_FUNCS([ \
 AC_CHECK_FUNCS([ \
-	alarm dup2 endpwent gethostbyaddr gethostbyname gethostname \
-	gettimeofday inet_ntoa memmove memset setsid socket strcasecmp \
-	strchr strcspn strerror strncasecmp strrchr strspn strstr \
+		alarm \
+		dup2 \
+		endpwent \
+		gethostbyaddr \
+		gethostbyname \
+		gethostname \
+		gettimeofday \
+		inet_ntoa \
+		memmove \
+		memset \
+		setsid \
+		socket \
+		strcasecmp \
+		strchr \
+		strcspn \
+		strerror \
+		strncasecmp \
+		strrchr \
+		strspn \
+		strstr \
 	],,
 	],,
 	AC_MSG_ERROR([required function missing!]))
 	AC_MSG_ERROR([required function missing!]))
 
 
 # Optional functions
 # Optional functions
 AC_CHECK_FUNCS_ONCE([
 AC_CHECK_FUNCS_ONCE([
-	arc4random arc4random_stir gai_strerror getnameinfo inet_aton \
-	setgroups sigaction sigprocmask snprintf strdup strlcat strlcpy \
-	strndup strtok_r unsetenv vsnprintf waitpid])
+	arc4random \
+	arc4random_stir \
+	gai_strerror \
+	getnameinfo \
+	inet_aton \
+	setgroups \
+	sigaction \
+	sigprocmask \
+	snprintf \
+	strdup \
+	strlcat \
+	strlcpy \
+	strndup \
+	strtok_r \
+	unsetenv \
+	vsnprintf \
+	waitpid \
+])
 
 
 WORKING_GETADDRINFO
 WORKING_GETADDRINFO
 
 

+ 58 - 11
configure.ng

@@ -154,15 +154,30 @@ AC_HEADER_TIME
 
 
 # Required header files
 # Required header files
 AC_CHECK_HEADERS([ \
 AC_CHECK_HEADERS([ \
-	fcntl.h netdb.h netinet/in.h stdlib.h string.h \
-	strings.h sys/socket.h sys/time.h sys/types.h unistd.h \
+		fcntl.h \
+		netdb.h \
+		netinet/in.h \
+		stdlib.h \
+		string.h \
+		strings.h \
+		sys/socket.h \
+		sys/time.h \
+		sys/types.h \
+		unistd.h \
 	],,AC_MSG_ERROR([required C header missing!]))
 	],,AC_MSG_ERROR([required C header missing!]))
 
 
 # Optional header files
 # Optional header files
 AC_CHECK_HEADERS_ONCE([ \
 AC_CHECK_HEADERS_ONCE([ \
-	arpa/inet.h inttypes.h malloc.h netinet/in_systm.h netinet/ip.h \
-	stdbool.h stddef.h stdint.h varargs.h \
-	])
+	arpa/inet.h \
+	inttypes.h \
+	malloc.h \
+	netinet/in_systm.h \
+	netinet/ip.h \
+	stdbool.h \
+	stddef.h \
+	stdint.h \
+	varargs.h \
+])
 
 
 # -- Datatypes --
 # -- Datatypes --
 
 
@@ -212,17 +227,49 @@ AC_FUNC_STRFTIME
 
 
 # Required functions
 # Required functions
 AC_CHECK_FUNCS([ \
 AC_CHECK_FUNCS([ \
-	alarm dup2 endpwent gethostbyaddr gethostbyname gethostname \
-	gettimeofday inet_ntoa memmove memset setsid socket strcasecmp \
-	strchr strcspn strerror strncasecmp strrchr strspn strstr \
+		alarm \
+		dup2 \
+		endpwent \
+		gethostbyaddr \
+		gethostbyname \
+		gethostname \
+		gettimeofday \
+		inet_ntoa \
+		memmove \
+		memset \
+		setsid \
+		socket \
+		strcasecmp \
+		strchr \
+		strcspn \
+		strerror \
+		strncasecmp \
+		strrchr \
+		strspn \
+		strstr \
 	],,
 	],,
 	AC_MSG_ERROR([required function missing!]))
 	AC_MSG_ERROR([required function missing!]))
 
 
 # Optional functions
 # Optional functions
 AC_CHECK_FUNCS_ONCE([
 AC_CHECK_FUNCS_ONCE([
-	arc4random arc4random_stir gai_strerror getnameinfo inet_aton \
-	setgroups sigaction sigprocmask snprintf strdup strlcat strlcpy \
-	strndup strtok_r unsetenv vsnprintf waitpid])
+	arc4random \
+	arc4random_stir \
+	gai_strerror \
+	getnameinfo \
+	inet_aton \
+	setgroups \
+	sigaction \
+	sigprocmask \
+	snprintf \
+	strdup \
+	strlcat \
+	strlcpy \
+	strndup \
+	strtok_r \
+	unsetenv \
+	vsnprintf \
+	waitpid \
+])
 
 
 WORKING_GETADDRINFO
 WORKING_GETADDRINFO
 
 

+ 1 - 0
contrib/Debian/Makefile.in

@@ -177,6 +177,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 srcdir = @srcdir@

+ 12 - 0
contrib/Debian/changelog

@@ -1,3 +1,15 @@
+ngircd (25-0ab1) unstable; urgency=low
+
+  * New "upstream" release: ngIRCd 25.
+
+ -- Alexander Barton <alex@barton.de>  Wed, 23 Jan 2019 23:13:03 +0100
+
+ngircd (25~rc1-0ab1) unstable; urgency=low
+
+  * New "upstream" release candidate 1 for ngIRCd Release 25.
+
+ -- Alexander Barton <alex@barton.de>  Sat, 11 Aug 2018 21:35:08 +0200
+
 ngircd (24-0ab1) unstable; urgency=low
 ngircd (24-0ab1) unstable; urgency=low
 
 
   * New "upstream" release: ngIRCd 24.
   * New "upstream" release: ngIRCd 24.

+ 1 - 0
contrib/MacOSX/Makefile.in

@@ -217,6 +217,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 srcdir = @srcdir@

+ 1 - 0
contrib/MacOSX/ngIRCd.pmdoc/Makefile.in

@@ -177,6 +177,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 srcdir = @srcdir@

+ 1 - 0
contrib/MacOSX/ngIRCd.xcodeproj/Makefile.in

@@ -177,6 +177,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 srcdir = @srcdir@

+ 42 - 85
contrib/MacOSX/ngIRCd.xcodeproj/project.pbxproj

@@ -51,18 +51,6 @@
 		FAE5CC2E0CF2308A007D69B6 /* numeric.c in Sources */ = {isa = PBXBuildFile; fileRef = FAE5CC2D0CF2308A007D69B6 /* numeric.c */; };
 		FAE5CC2E0CF2308A007D69B6 /* numeric.c in Sources */ = {isa = PBXBuildFile; fileRef = FAE5CC2D0CF2308A007D69B6 /* numeric.c */; };
 /* End PBXBuildFile section */
 /* End PBXBuildFile section */
 
 
-/* Begin PBXCopyFilesBuildPhase section */
-		8DD76FAF0486AB0100D96B5E /* CopyFiles */ = {
-			isa = PBXCopyFilesBuildPhase;
-			buildActionMask = 8;
-			dstPath = /usr/share/man/man1/;
-			dstSubfolderSpec = 0;
-			files = (
-			);
-			runOnlyForDeploymentPostprocessing = 1;
-		};
-/* End PBXCopyFilesBuildPhase section */
-
 /* Begin PBXFileReference section */
 /* Begin PBXFileReference section */
 		FA18A63E16CEDDCE00132F66 /* configure.ng */ = {isa = PBXFileReference; lastKnownFileType = text; name = configure.ng; path = ../../configure.ng; sourceTree = "<group>"; };
 		FA18A63E16CEDDCE00132F66 /* configure.ng */ = {isa = PBXFileReference; lastKnownFileType = text; name = configure.ng; path = ../../configure.ng; sourceTree = "<group>"; };
 		FA18A63F16CEDE2300132F66 /* ngircd.service */ = {isa = PBXFileReference; lastKnownFileType = text; path = ngircd.service; sourceTree = "<group>"; };
 		FA18A63F16CEDE2300132F66 /* ngircd.service */ = {isa = PBXFileReference; lastKnownFileType = text; path = ngircd.service; sourceTree = "<group>"; };
@@ -203,11 +191,12 @@
 		FA322DC00CEF77CB001761B3 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; sourceTree = "<absolute>"; };
 		FA322DC00CEF77CB001761B3 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; sourceTree = "<absolute>"; };
 		FA407F2C0DB159F400271AF1 /* ng_ipaddr.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = ng_ipaddr.c; path = ipaddr/ng_ipaddr.c; sourceTree = "<group>"; };
 		FA407F2C0DB159F400271AF1 /* ng_ipaddr.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = ng_ipaddr.c; path = ipaddr/ng_ipaddr.c; sourceTree = "<group>"; };
 		FA407F2D0DB159F400271AF1 /* ng_ipaddr.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = ng_ipaddr.h; path = ipaddr/ng_ipaddr.h; sourceTree = "<group>"; };
 		FA407F2D0DB159F400271AF1 /* ng_ipaddr.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = ng_ipaddr.h; path = ipaddr/ng_ipaddr.h; sourceTree = "<group>"; };
-		FA407F380DB15AC700271AF1 /* GIT.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = GIT.txt; sourceTree = "<group>"; };
 		FA4B08E513E7F8FB00765BA3 /* ngircd-bsd.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "ngircd-bsd.sh"; sourceTree = "<group>"; };
 		FA4B08E513E7F8FB00765BA3 /* ngircd-bsd.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "ngircd-bsd.sh"; sourceTree = "<group>"; };
 		FA4B08E613E7F91700765BA3 /* ngIRCd-Logo.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "ngIRCd-Logo.gif"; sourceTree = "<group>"; };
 		FA4B08E613E7F91700765BA3 /* ngIRCd-Logo.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = "ngIRCd-Logo.gif"; sourceTree = "<group>"; };
 		FA4B08E713E7F91700765BA3 /* ngircd-redhat.init */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "ngircd-redhat.init"; sourceTree = "<group>"; };
 		FA4B08E713E7F91700765BA3 /* ngircd-redhat.init */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = "ngircd-redhat.init"; sourceTree = "<group>"; };
 		FA4B08E813E7F91C00765BA3 /* platformtest.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = platformtest.sh; sourceTree = "<group>"; };
 		FA4B08E813E7F91C00765BA3 /* platformtest.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = platformtest.sh; sourceTree = "<group>"; };
+		FA4B4F542055B47C00A04296 /* ngircd.logcheck */ = {isa = PBXFileReference; lastKnownFileType = text; path = ngircd.logcheck; sourceTree = "<group>"; };
+		FA4B4F552055B4C800A04296 /* source */ = {isa = PBXFileReference; lastKnownFileType = folder; path = source; sourceTree = "<group>"; };
 		FA4F1659164836B100DBD011 /* irc-metadata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "irc-metadata.c"; sourceTree = "<group>"; };
 		FA4F1659164836B100DBD011 /* irc-metadata.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "irc-metadata.c"; sourceTree = "<group>"; };
 		FA4F165C164836BF00DBD011 /* irc-metadata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "irc-metadata.h"; sourceTree = "<group>"; };
 		FA4F165C164836BF00DBD011 /* irc-metadata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "irc-metadata.h"; sourceTree = "<group>"; };
 		FA6BBC5F1605F0AB0004247A /* conn-encoding.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "conn-encoding.c"; sourceTree = "<group>"; };
 		FA6BBC5F1605F0AB0004247A /* conn-encoding.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "conn-encoding.c"; sourceTree = "<group>"; };
@@ -488,6 +477,7 @@
 				FA4B08E513E7F8FB00765BA3 /* ngircd-bsd.sh */,
 				FA4B08E513E7F8FB00765BA3 /* ngircd-bsd.sh */,
 				FA4B08E613E7F91700765BA3 /* ngIRCd-Logo.gif */,
 				FA4B08E613E7F91700765BA3 /* ngIRCd-Logo.gif */,
 				FA4B08E713E7F91700765BA3 /* ngircd-redhat.init */,
 				FA4B08E713E7F91700765BA3 /* ngircd-redhat.init */,
+				FA4B4F542055B47C00A04296 /* ngircd.logcheck */,
 				FA18A63F16CEDE2300132F66 /* ngircd.service */,
 				FA18A63F16CEDE2300132F66 /* ngircd.service */,
 				FA18A64016CEDE2300132F66 /* ngircd.socket */,
 				FA18A64016CEDE2300132F66 /* ngircd.socket */,
 				FA322D940CEF7523001761B3 /* ngircd.spec */,
 				FA322D940CEF7523001761B3 /* ngircd.spec */,
@@ -511,6 +501,7 @@
 				FA18A64116CEDE3500132F66 /* ngircd.pam */,
 				FA18A64116CEDE3500132F66 /* ngircd.pam */,
 				FA322D710CEF7523001761B3 /* ngircd.postinst */,
 				FA322D710CEF7523001761B3 /* ngircd.postinst */,
 				FA322D720CEF7523001761B3 /* rules */,
 				FA322D720CEF7523001761B3 /* rules */,
+				FA4B4F552055B4C800A04296 /* source */,
 			);
 			);
 			path = Debian;
 			path = Debian;
 			sourceTree = "<group>";
 			sourceTree = "<group>";
@@ -546,7 +537,6 @@
 				FA18A64416CEDFCE00132F66 /* Commands.txt */,
 				FA18A64416CEDFCE00132F66 /* Commands.txt */,
 				FAE22BD415270EA300F1A5AB /* Contributing.txt */,
 				FAE22BD415270EA300F1A5AB /* Contributing.txt */,
 				FA322D9A0CEF752C001761B3 /* FAQ.txt */,
 				FA322D9A0CEF752C001761B3 /* FAQ.txt */,
-				FA407F380DB15AC700271AF1 /* GIT.txt */,
 				FAE22BD515270EB500F1A5AB /* HowToRelease.txt */,
 				FAE22BD515270EB500F1A5AB /* HowToRelease.txt */,
 				FAE22BD615270EB500F1A5AB /* Modes.txt */,
 				FAE22BD615270EB500F1A5AB /* Modes.txt */,
 				FAE22BD715270EB500F1A5AB /* PAM.txt */,
 				FAE22BD715270EB500F1A5AB /* PAM.txt */,
@@ -617,7 +607,6 @@
 			buildPhases = (
 			buildPhases = (
 				8DD76FAB0486AB0100D96B5E /* Sources */,
 				8DD76FAB0486AB0100D96B5E /* Sources */,
 				8DD76FAD0486AB0100D96B5E /* Frameworks */,
 				8DD76FAD0486AB0100D96B5E /* Frameworks */,
-				8DD76FAF0486AB0100D96B5E /* CopyFiles */,
 			);
 			);
 			buildRules = (
 			buildRules = (
 			);
 			);
@@ -635,7 +624,7 @@
 		08FB7793FE84155DC02AAC07 /* Project object */ = {
 		08FB7793FE84155DC02AAC07 /* Project object */ = {
 			isa = PBXProject;
 			isa = PBXProject;
 			attributes = {
 			attributes = {
-				LastUpgradeCheck = 0800;
+				LastUpgradeCheck = 1000;
 			};
 			};
 			buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "ngIRCd" */;
 			buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "ngIRCd" */;
 			compatibilityVersion = "Xcode 3.2";
 			compatibilityVersion = "Xcode 3.2";
@@ -715,113 +704,81 @@
 		1DEB928708733DD80010E9CD /* Default */ = {
 		1DEB928708733DD80010E9CD /* Default */ = {
 			isa = XCBuildConfiguration;
 			isa = XCBuildConfiguration;
 			buildSettings = {
 			buildSettings = {
-				GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
-				GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
-				GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
-				GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
-				GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
-				GCC_WARN_MISSING_PARENTHESES = YES;
-				GCC_WARN_PEDANTIC = YES;
-				GCC_WARN_SHADOW = YES;
-				GCC_WARN_SIGN_COMPARE = YES;
-				GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = YES;
-				GCC_WARN_UNKNOWN_PRAGMAS = YES;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_LABEL = YES;
-				GCC_WARN_UNUSED_PARAMETER = YES;
-				GCC_WARN_UNUSED_VALUE = YES;
-				INSTALL_PATH = /usr/local/bin;
-				PRODUCT_NAME = ngircd;
 			};
 			};
 			name = Default;
 			name = Default;
 		};
 		};
 		1DEB928B08733DD80010E9CD /* Default */ = {
 		1DEB928B08733DD80010E9CD /* Default */ = {
 			isa = XCBuildConfiguration;
 			isa = XCBuildConfiguration;
 			buildSettings = {
 			buildSettings = {
-				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_WARN_ASSIGN_ENUM = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
 				CLANG_WARN_EMPTY_BODY = YES;
 				CLANG_WARN_EMPTY_BODY = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
 				CLANG_WARN_INFINITE_RECURSION = YES;
 				CLANG_WARN_INFINITE_RECURSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_SEMICOLON_BEFORE_METHOD_BODY = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-				CODE_SIGN_IDENTITY = "";
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				GCC_NO_COMMON_BLOCKS = NO;
-				GCC_VERSION = "";
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
+				GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
+				GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
+				GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
+				GCC_WARN_PEDANTIC = YES;
+				GCC_WARN_SHADOW = YES;
+				GCC_WARN_SIGN_COMPARE = YES;
 				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_LABEL = YES;
+				GCC_WARN_UNUSED_PARAMETER = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				MACOSX_DEPLOYMENT_TARGET = 10.6;
 				MACOSX_DEPLOYMENT_TARGET = 10.6;
-				SDKROOT = "";
+				PRODUCT_NAME = ngircd;
 			};
 			};
 			name = Default;
 			name = Default;
 		};
 		};
 		FAB0570C105D917F006AF9E2 /* Debug */ = {
 		FAB0570C105D917F006AF9E2 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			isa = XCBuildConfiguration;
 			buildSettings = {
 			buildSettings = {
-				CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
-				CLANG_WARN_BOOL_CONVERSION = YES;
-				CLANG_WARN_CONSTANT_CONVERSION = YES;
+				ALWAYS_SEARCH_USER_PATHS = NO;
+				CLANG_WARN_ASSIGN_ENUM = YES;
+				CLANG_WARN_COMMA = YES;
+				CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
 				CLANG_WARN_EMPTY_BODY = YES;
 				CLANG_WARN_EMPTY_BODY = YES;
-				CLANG_WARN_ENUM_CONVERSION = YES;
 				CLANG_WARN_INFINITE_RECURSION = YES;
 				CLANG_WARN_INFINITE_RECURSION = YES;
-				CLANG_WARN_INT_CONVERSION = YES;
-				CLANG_WARN_SUSPICIOUS_MOVE = YES;
+				CLANG_WARN_SEMICOLON_BEFORE_METHOD_BODY = YES;
+				CLANG_WARN_STRICT_PROTOTYPES = YES;
+				CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
 				CLANG_WARN_UNREACHABLE_CODE = YES;
 				CLANG_WARN_UNREACHABLE_CODE = YES;
-				CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
-				ENABLE_STRICT_OBJC_MSGSEND = YES;
-				ENABLE_TESTABILITY = YES;
-				GCC_DEBUGGING_SYMBOLS = full;
-				GCC_NO_COMMON_BLOCKS = NO;
-				GCC_OPTIMIZATION_LEVEL = 0;
-				GCC_VERSION = "";
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
 				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+				GCC_WARN_ABOUT_MISSING_FIELD_INITIALIZERS = YES;
+				GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
+				GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
 				GCC_WARN_ABOUT_RETURN_TYPE = YES;
-				GCC_WARN_UNDECLARED_SELECTOR = YES;
+				GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
+				GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
+				GCC_WARN_PEDANTIC = YES;
+				GCC_WARN_SHADOW = YES;
+				GCC_WARN_SIGN_COMPARE = YES;
 				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 				GCC_WARN_UNINITIALIZED_AUTOS = YES;
 				GCC_WARN_UNUSED_FUNCTION = YES;
 				GCC_WARN_UNUSED_FUNCTION = YES;
+				GCC_WARN_UNUSED_LABEL = YES;
+				GCC_WARN_UNUSED_PARAMETER = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				GCC_WARN_UNUSED_VARIABLE = YES;
 				MACOSX_DEPLOYMENT_TARGET = 10.6;
 				MACOSX_DEPLOYMENT_TARGET = 10.6;
 				ONLY_ACTIVE_ARCH = YES;
 				ONLY_ACTIVE_ARCH = YES;
+				PRODUCT_NAME = ngircd;
 				SDKROOT = "";
 				SDKROOT = "";
+				STRIP_INSTALLED_PRODUCT = NO;
 			};
 			};
 			name = Debug;
 			name = Debug;
 		};
 		};
 		FAB0570D105D917F006AF9E2 /* Debug */ = {
 		FAB0570D105D917F006AF9E2 /* Debug */ = {
 			isa = XCBuildConfiguration;
 			isa = XCBuildConfiguration;
 			buildSettings = {
 			buildSettings = {
-				GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
-				GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
-				GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
-				GCC_WARN_ABOUT_MISSING_NEWLINE = YES;
-				GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES;
-				GCC_WARN_CHECK_SWITCH_STATEMENTS = YES;
-				GCC_WARN_FOUR_CHARACTER_CONSTANTS = YES;
-				GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES;
-				GCC_WARN_MISSING_PARENTHESES = YES;
-				GCC_WARN_PEDANTIC = YES;
-				GCC_WARN_SHADOW = YES;
-				GCC_WARN_SIGN_COMPARE = YES;
-				GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES;
-				GCC_WARN_UNINITIALIZED_AUTOS = NO;
-				GCC_WARN_UNKNOWN_PRAGMAS = YES;
-				GCC_WARN_UNUSED_FUNCTION = YES;
-				GCC_WARN_UNUSED_LABEL = YES;
-				GCC_WARN_UNUSED_PARAMETER = YES;
-				GCC_WARN_UNUSED_VALUE = YES;
-				INSTALL_PATH = /usr/local/bin;
-				PRODUCT_NAME = ngircd;
 			};
 			};
 			name = Debug;
 			name = Debug;
 		};
 		};

+ 2 - 1
contrib/Makefile.am

@@ -1,6 +1,6 @@
 #
 #
 # ngIRCd -- The Next Generation IRC Daemon
 # ngIRCd -- The Next Generation IRC Daemon
-# Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors
+# Copyright (c)2001-2017 Alexander Barton (alex@barton.de) and Contributors
 #
 #
 # This program is free software; you can redistribute it and/or modify
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # it under the terms of the GNU General Public License as published by
@@ -16,6 +16,7 @@ EXTRA_DIST = README \
 	ngircd-bsd.sh \
 	ngircd-bsd.sh \
 	ngIRCd-Logo.gif \
 	ngIRCd-Logo.gif \
 	ngircd-redhat.init \
 	ngircd-redhat.init \
+	ngircd.logcheck \
 	ngircd.service \
 	ngircd.service \
 	ngircd.socket \
 	ngircd.socket \
 	ngircd.spec \
 	ngircd.spec \

+ 3 - 1
contrib/Makefile.in

@@ -17,7 +17,7 @@
 
 
 #
 #
 # ngIRCd -- The Next Generation IRC Daemon
 # ngIRCd -- The Next Generation IRC Daemon
-# Copyright (c)2001-2013 Alexander Barton (alex@barton.de) and Contributors
+# Copyright (c)2001-2017 Alexander Barton (alex@barton.de) and Contributors
 #
 #
 # This program is free software; you can redistribute it and/or modify
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # it under the terms of the GNU General Public License as published by
@@ -217,6 +217,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 srcdir = @srcdir@
@@ -231,6 +232,7 @@ EXTRA_DIST = README \
 	ngircd-bsd.sh \
 	ngircd-bsd.sh \
 	ngIRCd-Logo.gif \
 	ngIRCd-Logo.gif \
 	ngircd-redhat.init \
 	ngircd-redhat.init \
+	ngircd.logcheck \
 	ngircd.service \
 	ngircd.service \
 	ngircd.socket \
 	ngircd.socket \
 	ngircd.spec \
 	ngircd.spec \

+ 3 - 0
contrib/README

@@ -27,6 +27,9 @@ ngircd-bsd.sh
 ngircd-redhat.init
 ngircd-redhat.init
  - Start/stop script for RedHat-based distributions (like CentOS).
  - Start/stop script for RedHat-based distributions (like CentOS).
 
 
+ngircd.logcheck
+ - Sample rules for logcheck(8) to ignore "normal" log messages of ngIRCd.
+
 ngircd.service
 ngircd.service
  - systemd(8) service unit configuration file.
  - systemd(8) service unit configuration file.
 
 

+ 61 - 0
contrib/ngircd.logcheck

@@ -0,0 +1,61 @@
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Accepted connection [0-9]+ from ".*:[0-9]+" on socket [0-9]+\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Can't resolve address ".*": Name or service not known \[.*\]\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Can't resolve ".*": host not found$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Can't resolve ".*": Name or service not known$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Can't resolve ".*": No address associated with hostname$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): Can't connect\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): Client closed connection\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): Got QUIT command\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): Read error\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): SSL accept error, closing socket\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client ".*" unregistered (connection [0-9]+): Timeout\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): Timeout\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Client unregistered \(connection [0-9]+\): Write error\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Connection [0-9]+: initialized SSL3\.0 using cipher .*\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Connection [0-9]+: initialized TLS1\.[012] using cipher .*\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Connection [0-9]+: initialized TLSv1\.[012] using cipher .*\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Connection [0-9]+: initialized TLSv1 using cipher .*\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Connection [0-9]+ \(socket [0-9]+\) with ".*:[0-9]+" established\. Now logging in \.\.\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Connection [0-9]+ with ".*:[0-9]+" closed \(in: .*, out: .*\)\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Enabled link compression \(zlib\) on connection [0-9]+\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Establishing connection for ".*" to ".*:[0-9]+" \(.*\), socket [0-9]+ \.\.\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: IDENT lookup for connection [0-9]+: ".*"\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: IDENT lookup for connection [0-9]+: no result\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Now listening on .*:[0-9]+ \(socket [0-9]+\)\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: OpenSSL .* initialized\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Possible forgery: .* resolved to ".*", which has no IP address!$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Preparing to establish a new server link for ".*" \.\.\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Read error on connection [0-9]+ \(socket [0-9]+\): Connection reset by peer!$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Server ".*" registered \(via .*, connected to .*, [0-9]+ hops\)\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Server ".*" unregistered: .* .*\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Server ".*" unregistered: ".*" \(SQUIT from .*\)\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down all listening sockets \([0-9]+ total\) \.\.\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Can't connect\) with ".*:[0-9]+" \.\.\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Client closed connection\) with ".*:[0-9]+" \.\.\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Got QUIT command\) with ".*:[0-9]+" \.\.\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Ping timeout: [0-9]+ seconds\) with ".*:[0-9]+" \.\.\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Read error\) with ".*:[0-9]+" \.\.\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Server going down\) with ".*:[0-9]+" \.\.\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(SSL accept error, closing socket\) with ".*:[0-9]+" \.\.\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Timeout\) with ".*:[0-9]+" \.\.\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Shutting down connection [0-9]+ \(Write error\) with ".*:[0-9]+" \.\.\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL connection [0-9]+ shutting down \.\.\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL connection [0-9]+ with ".*:[0-9]+" established\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL connection on socket [0-9]+ failed!$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL error: A TLS packet with unexpected length was received\. \[ConnSSL_Read\]\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL error: A TLS packet with unexpected length was received\. \[gnutls_handshake\]\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL error: Broken pipe \[in ConnSSL_Write\(\)\]!$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL error: Connection reset by peer \[in ConnSSL_Read\(\)\]!$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL error: Connection reset by peer \[in SSL_connect\(\)\]!$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: SSL protocol error: SSL_accept \(.*\)$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" changed nick \(connection [0-9]+\): ".*" -> ".*"\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" registered \(connection [0-9]+\)\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" unregistered \(connection [0-9]+\): Client closed connection\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" unregistered \(connection [0-9]+\): Got QUIT command\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" unregistered \(connection [0-9]+\): Ping timeout: [0-9]+ seconds\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" unregistered \(connection [0-9]+\): Read error\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: User ".*!.*@.*" unregistered \(connection [0-9]+\): Server going down\.$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: warning: can't get client address: Connection reset by peer$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: warning: /etc/hosts\.allow, line [0-9]+: can't verify hostname: getaddrinfo\(.*, AF_INET\) failed$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Write error on connection [0-9]+ \(socket [0-9]+\): Broken pipe!$
+^\w{3} [ :0-9]{11} [._[:alnum:]-]+ ngircd\[[0-9]+\]: Write error on connection [0-9]+ \(socket [0-9]+\): Connection reset by peer!$

+ 1 - 1
contrib/ngircd.spec

@@ -1,5 +1,5 @@
 %define name    ngircd
 %define name    ngircd
-%define version 24
+%define version 25
 %define release 1
 %define release 1
 %define prefix  %{_prefix}
 %define prefix  %{_prefix}
 
 

+ 6 - 5
doc/HowToRelease.txt

@@ -2,7 +2,7 @@
                      ngIRCd - Next Generation IRC Server
                      ngIRCd - Next Generation IRC Server
                            http://ngircd.barton.de/
                            http://ngircd.barton.de/
 
 
-               (c)2001-2017 Alexander Barton and Contributors.
+               (c)2001-2019 Alexander Barton and Contributors.
                ngIRCd is free software and published under the
                ngIRCd is free software and published under the
                    terms of the GNU General Public License.
                    terms of the GNU General Public License.
 
 
@@ -65,15 +65,16 @@ h) Run "./autogen.sh" to update the ./configure script with the correct
 
 
 i) Run "./configure" to rebuild all generated Makefiles.
 i) Run "./configure" to rebuild all generated Makefiles.
 
 
-j) Run "make distcheck" to generate the distribution archives.
+j) Run "make distcheck" (and "make dist-tarZ dist-xz") to generate all of the
+   distribution archives.
 
 
 k) Sign the distribution archive(s) using GnuPG: "gpg -b <archivefile>"
 k) Sign the distribution archive(s) using GnuPG: "gpg -b <archivefile>"
 
 
 l) Upload and distribute the newly generated ngIRCd release archive(s)
 l) Upload and distribute the newly generated ngIRCd release archive(s)
-   and GnuPG signatures.
+   and GnuPG signatures (to the website, its mirrors, and GitHub).
 
 
-m) Write an announcement to the mailing list, freshmeat, Twitter, ...
+m) Update the ngIRCd website and its mirrors!
 
 
-n) Update the list of releases in our bug tracker.
+n) Write an announcement to the mailing list, Twitter, ...
 
 
 o) Relax :-)
 o) Relax :-)

+ 1 - 0
doc/Makefile.in

@@ -217,6 +217,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 srcdir = @srcdir@

+ 26 - 13
doc/Platforms.txt

@@ -2,7 +2,7 @@
                      ngIRCd - Next Generation IRC Server
                      ngIRCd - Next Generation IRC Server
                            http://ngircd.barton.de/
                            http://ngircd.barton.de/
 
 
-               (c)2001-2016 Alexander Barton and Contributors.
+               (c)2001-2019 Alexander Barton and Contributors.
                ngIRCd is free software and published under the
                ngIRCd is free software and published under the
                    terms of the GNU General Public License.
                    terms of the GNU General Public License.
 
 
@@ -45,7 +45,7 @@ i386/pc/linux-gnu           gcc 4.1.2    13~rc1     08-12-05 alex     Y Y Y Y 1
 i386/pc/linux-gnu           gcc 4.4.5    22~rc1-3   14-10-10 alex     Y Y Y Y 1
 i386/pc/linux-gnu           gcc 4.4.5    22~rc1-3   14-10-10 alex     Y Y Y Y 1
 i386/pc/minix               clang 3.4    23         16-01-06 goetz    Y Y N Y
 i386/pc/minix               clang 3.4    23         16-01-06 goetz    Y Y N Y
 i386/pc/solaris2.9          gcc 3.2.2    CVSHEAD    04-02-24 alex     Y Y Y Y
 i386/pc/solaris2.9          gcc 3.2.2    CVSHEAD    04-02-24 alex     Y Y Y Y
-i386/pc/solaris2.11         gcc 4.8.2    23         16-02-07 goetz    Y Y Y Y 4
+i386/pc/solaris2.11         gcc 4.8.2    24         17-01-21 goetz    Y Y Y Y 4
 i386/unknown/freebsd5.2.1   gcc 3.3.3    0.8.0      04-05-30 alex     Y Y Y Y
 i386/unknown/freebsd5.2.1   gcc 3.3.3    0.8.0      04-05-30 alex     Y Y Y Y
 i386/unknown/freebsd6.2     gcc 3.4.6    20~rc1     12-11-13 alex     Y Y Y Y 3
 i386/unknown/freebsd6.2     gcc 3.4.6    20~rc1     12-11-13 alex     Y Y Y Y 3
 i386/unknown/freebsd7.3     gcc 4.2.1    24~rc1-7   17-01-20 alex     Y Y Y Y 3
 i386/unknown/freebsd7.3     gcc 4.2.1    24~rc1-7   17-01-20 alex     Y Y Y Y 3
@@ -78,6 +78,7 @@ m68k/apple/aux3.1.1         gcc 2.7.2    19         12-02-26 alex     Y Y N Y
 m68k/apple/aux3.1.1         Orig. A/UX   19         12-02-26 alex     Y Y N Y 2
 m68k/apple/aux3.1.1         Orig. A/UX   19         12-02-26 alex     Y Y N Y 2
 m68k/hp/hp-ux9.10           Orig. HPUX   0.7.x-CVS  03-04-30 goetz    Y Y Y Y
 m68k/hp/hp-ux9.10           Orig. HPUX   0.7.x-CVS  03-04-30 goetz    Y Y Y Y
 m88k/dg/dgux5.4R3.10        gcc 2.5.8    CVSHEAD    04-03-15 alex     Y Y ? ?
 m88k/dg/dgux5.4R3.10        gcc 2.5.8    CVSHEAD    04-03-15 alex     Y Y ? ?
+mipsel/openwrt/linux-uclibc gcc 4.8      24~9-g619a 18-01-28 goetz    - - - Y 6
 mipsel/unknown/linux-gnu    gcc 4.1.2    18         11-07-05 goetz    Y Y N Y 1
 mipsel/unknown/linux-gnu    gcc 4.1.2    18         11-07-05 goetz    Y Y N Y 1
 mipsel/unknown/linux-gnu    gcc 4.4.5    21         13-11-24 goetz    Y Y Y Y 1
 mipsel/unknown/linux-gnu    gcc 4.4.5    21         13-11-24 goetz    Y Y Y Y 1
 powerpc/apple/darwin6.8     gcc 3.1      21         14-01-03 goetz    Y Y Y Y
 powerpc/apple/darwin6.8     gcc 3.1      21         14-01-03 goetz    Y Y Y Y
@@ -95,12 +96,16 @@ x86_64/apple/darwin12.3.0   gcc 4.2.1    20.2       13-04-01 alex     Y Y Y Y 3
 x86_64/apple/darwin13.0.0   A-clang 5.0  21         14-01-02 alex     Y Y Y Y 3
 x86_64/apple/darwin13.0.0   A-clang 5.0  21         14-01-02 alex     Y Y Y Y 3
 x86_64/apple/darwin14.5.0   A-clang 6.1  23~rc1     15-09-06 alex     Y Y Y Y 3
 x86_64/apple/darwin14.5.0   A-clang 6.1  23~rc1     15-09-06 alex     Y Y Y Y 3
 x86_64/apple/darwin15.6.0   A-clang 8.0  23~38-g455 16-11-04 alex     Y Y Y Y 3
 x86_64/apple/darwin15.6.0   A-clang 8.0  23~38-g455 16-11-04 alex     Y Y Y Y 3
-x86_64/apple/darwin16.3.0   A-clang 8.0  24~rc1-7   17-01-20 alex     Y Y Y Y 3
+x86_64/apple/darwin16.5.0   A-clang 8.1  25~rc1-7-g 18-11-04 alex     Y Y Y Y 3
+x86_64/apple/darwin17.7.0   A-clang 10.0 25~rc1     18-11-04 alex     Y Y Y Y 3
+x86_64/apple/darwin18.2.0   A-clang 10.0 25~rc1-11  19-01-23 alex     Y Y Y Y 3
 x86_64/unknown/dragonfly3.4 gcc 4.7.2    21         13-11-12 goetz    Y Y N Y 3
 x86_64/unknown/dragonfly3.4 gcc 4.7.2    21         13-11-12 goetz    Y Y N Y 3
 x86_64/unkn./freebsd8.1-gnu gcc 4.4.5    19         12-02-26 alex     Y Y Y Y 3
 x86_64/unkn./freebsd8.1-gnu gcc 4.4.5    19         12-02-26 alex     Y Y Y Y 3
 x86_64/unknown/freebsd8.4   gcc 4.2.1    24~rc1-7   17-01-20 alex     Y Y Y Y 3
 x86_64/unknown/freebsd8.4   gcc 4.2.1    24~rc1-7   17-01-20 alex     Y Y Y Y 3
 x86_64/unknown/freebsd9.2   gcc 4.2.1    22~rc1-3   14-10-10 alex     Y Y Y Y 3
 x86_64/unknown/freebsd9.2   gcc 4.2.1    22~rc1-3   14-10-10 alex     Y Y Y Y 3
-x86_64/unknown/freebsd10.0  F-clang 3.3  22~rc1-3   14-10-10 alex     Y Y Y Y 3
+x86_64/unknown/freebsd10.3  F-clang 3.4  24         17-01-20 goetz    Y Y Y Y 3
+x86_64/unknown/freebsd11.0  F-clang 3.8  24         17-01-21 goetz    Y Y Y Y 3
+x86_64/unknown/haiku        gcc 7.3.0    25~rc1-11  19-01-06 alex     Y Y N Y
 x86_64/unknown/linux-gnu    clang 3.3    21         14-01-07 alex     Y Y Y Y 1
 x86_64/unknown/linux-gnu    clang 3.3    21         14-01-07 alex     Y Y Y Y 1
 x86_64/unknown/linux-gnu    clang 3.4    22~rc1-3   14-10-11 alex     Y Y Y Y 1
 x86_64/unknown/linux-gnu    clang 3.4    22~rc1-3   14-10-11 alex     Y Y Y Y 1
 x86_64/pc/linux-gnu         gcc 4.4.5    24~rc1-7   17-01-20 alex     Y Y Y Y 1
 x86_64/pc/linux-gnu         gcc 4.4.5    24~rc1-7   17-01-20 alex     Y Y Y Y 1
@@ -108,8 +113,9 @@ x86_64/unknown/linux-gnu    gcc 4.7.2    23~rc1-3   15-11-15 alex     Y Y Y Y 1
 x86_64/pc/linux-gnu         gcc 4.8.4    24~rc1-7   17-01-20 alex     Y Y Y Y 1
 x86_64/pc/linux-gnu         gcc 4.8.4    24~rc1-7   17-01-20 alex     Y Y Y Y 1
 x86_64/pc/linux-gnu         gcc 4.9.2    24~rc1-7   17-01-20 alex     Y Y Y Y 1
 x86_64/pc/linux-gnu         gcc 4.9.2    24~rc1-7   17-01-20 alex     Y Y Y Y 1
 x86_64/unknown/linux-gnu    gcc 5.3.0    23         15-12-14 goetz    Y Y Y Y 1
 x86_64/unknown/linux-gnu    gcc 5.3.0    23         15-12-14 goetz    Y Y Y Y 1
+x86_64/pc/linux-gnu [WSL]   gcc 5.4.0    24         18-03-07 goetz    Y Y y Y 7
 x86_64/pc/linux-gnu         gcc 6.2.1    24~rc1-7   17-01-20 alex     Y Y Y Y 1
 x86_64/pc/linux-gnu         gcc 6.2.1    24~rc1-7   17-01-20 alex     Y Y Y Y 1
-x86_64/pc/linux-gnu         gcc 6.3.1    24~rc1-7   17-01-20 alex     Y Y Y Y 1
+x86_64/pc/linux-gnu         gcc 6.3.0    25~rc1-11  19-01-23 alex     Y Y Y Y 1
 x86_64/unknown/linux-gnu    icc 16       23         16-01-13 goetz    Y Y Y Y 1
 x86_64/unknown/linux-gnu    icc 16       23         16-01-13 goetz    Y Y Y Y 1
 x86_64/unknown/linux-gnu    nwcc 0.8.2   21         13-12-01 goetz    Y Y Y Y 1
 x86_64/unknown/linux-gnu    nwcc 0.8.2   21         13-12-01 goetz    Y Y Y Y 1
 x86_64/unknown/linux-gnu    Open64       21.1       14-03-27 goetz    Y Y Y Y 1
 x86_64/unknown/linux-gnu    Open64       21.1       14-03-27 goetz    Y Y Y Y 1
@@ -124,14 +130,15 @@ x86_64/unknown/openbsd5.5   gcc 4.2.1    22~rc1-3   14-10-10 alex     Y Y Y Y 3
 ~~~~~~~
 ~~~~~~~
 
 
 (1) */*/linux-gnu (Linux platforms):
 (1) */*/linux-gnu (Linux platforms):
-    ngIRCd has been tested with various Linux distributions, such as SuSE,
-    RedHat, Debian, and Gentoo using Kernels 2.2.x, 2.4.x and 2.6.x with
-    various versions of the GNU C compiler (starting with 2.95.x and up to
-    version 4.3.x). The eldest glibc used was glibc-2.0.7. ngIRCd compiled
-    and run on all these systems without problems.
-    Actual Linux kernels (2.6.x) and glibc's support the epoll() IO interface.
-
-(2) This compiler is an pre-ANSI C compiler, therefore the source code is
+    ngIRCd has been tested with various Linux distributions, such as ArchLinux,
+    Debian, Gentoo, Red Hat (Fedora) and SuSE using Linux kernels 2.2.x, 2.4.x,
+    2.6.x, 3.x, and 4.x, with various versions of the GNU C compiler (starting
+    with 2.95.x) and Clang. The eldest glibc used was glibc-2.0.7.
+    ngIRCd compiled and ran on all of these systems successfully.
+    Current Linux kernels (starting with 2.6.x) and glibc's support the more
+    efficient epoll() IO interface, see (5) below.
+
+(2) This compiler is a pre-ANSI C compiler (K&R), therefore the source code is
     automatically converted using the included ansi2knr tool while building.
     automatically converted using the included ansi2knr tool while building.
 
 
 (3) Using the kqueue() IO interface.
 (3) Using the kqueue() IO interface.
@@ -139,3 +146,9 @@ x86_64/unknown/openbsd5.5   gcc 4.2.1    22~rc1-3   14-10-10 alex     Y Y Y Y 3
 (4) Using the /dev/poll IO interface.
 (4) Using the /dev/poll IO interface.
 
 
 (5) Using the epoll() IO interface.
 (5) Using the epoll() IO interface.
+
+(6) ngIRCd has been cross-compiled with gcc 4.8 on Ubuntu x86-64 for
+    MIPSEL Linux OpenWRT distribution (uclibc), for the target computer
+    Vocore2, where the created binary ran well.
+
+(7) This actually is Windows 10 running Windows Subsystem for Linux (WSL).

+ 4 - 1
doc/Protocol.txt

@@ -176,7 +176,7 @@ channel mode). In this case <limit> should be "0".
 II.4 Update webchat/proxy client information
 II.4 Update webchat/proxy client information
 
 
      Command: WEBIRC
      Command: WEBIRC
-  Parameters: <password> <username> <hostname> <ip-address>
+  Parameters: <password> <username> <hostname> <ip-address> [<ignored>]
      Used by: unregistered clients only
      Used by: unregistered clients only
 
 
 The WEBIRC command is used by some Web-to-IRC gateways to set the correct
 The WEBIRC command is used by some Web-to-IRC gateways to set the correct
@@ -186,6 +186,9 @@ first command sent to the server, even before USER and NICK commands!
 The <password> must be set in the server configuration file to prevent
 The <password> must be set in the server configuration file to prevent
 unauthorized clients to fake their identity; it is an arbitrary string.
 unauthorized clients to fake their identity; it is an arbitrary string.
 
 
+Optionally, a 5th parameter is accepted to comply with an IRCv3 extension,
+see <https://github.com/ircv3/ircv3-ideas/issues/12>, but ignored.
+
 
 
 II.5 Client character encoding conversion
 II.5 Client character encoding conversion
 
 

+ 8 - 0
doc/Services.txt

@@ -34,6 +34,10 @@ services instead of regular IRC users.
 
 
 Example:
 Example:
 
 
+  [GLOBAL]
+     Name = server.irc.net
+     Ports = 6667
+
   [SERVER]
   [SERVER]
      Name = services.irc.net
      Name = services.irc.net
      MyPassword = 123abc
      MyPassword = 123abc
@@ -104,6 +108,10 @@ The following settings need to be in atheme.conf:
 
 
   loadmodule "modules/protocol/ngircd";
   loadmodule "modules/protocol/ngircd";
 
 
+  serverinfo {
+	name = "services.irc.net";
+  }
+
   uplink "server.irc.net" {
   uplink "server.irc.net" {
 	password = "123abc";
 	password = "123abc";
 	port = 6667;
 	port = 6667;

+ 7 - 1
doc/sample-ngircd.conf.tmpl

@@ -51,7 +51,7 @@
 	# be shown to all users connecting to the server:
 	# be shown to all users connecting to the server:
 	;MotdFile = :ETCDIR:/ngircd.motd
 	;MotdFile = :ETCDIR:/ngircd.motd
 
 
-	# A simple Phrase (<256 chars) if you don't want to use a motd file.
+	# A simple Phrase (<127 chars) if you don't want to use a motd file.
 	;MotdPhrase = "Hello world!"
 	;MotdPhrase = "Hello world!"
 
 
 	# The name of the IRC network to which this server belongs. This name
 	# The name of the IRC network to which this server belongs. This name
@@ -117,6 +117,12 @@
 	# maximum nickname length!
 	# maximum nickname length!
 	;MaxNickLength = 9
 	;MaxNickLength = 9
 
 
+	# Maximum penalty time increase in seconds, per penalty event. Set to -1
+	# for no limit (the default), 0 to disable penalties altogether. The
+	# daemon doesn't use penalty increases higher than 2 seconds during
+	# normal operation, so values greater than 1 rarely make sense.
+	;MaxPenaltyTime = -1
+
 	# Maximum number of channels returned in response to a /list
 	# Maximum number of channels returned in response to a /list
 	# command (0: unlimited):
 	# command (0: unlimited):
 	;MaxListSize = 100
 	;MaxListSize = 100

+ 1 - 0
doc/src/Makefile.in

@@ -177,6 +177,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 srcdir = @srcdir@

+ 14 - 7
install-sh

@@ -345,34 +345,41 @@ do
 	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
 	    # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
 	    ;;
 	    ;;
 	  *)
 	  *)
+	    # $RANDOM is not portable (e.g. dash);  use it when possible to
+	    # lower collision chance
 	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
 	    tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-	    trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
+	    trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
 
 
+	    # As "mkdir -p" follows symlinks and we work in /tmp possibly;  so
+	    # create the $tmpdir first (and fail if unsuccessful) to make sure
+	    # that nobody tries to guess the $tmpdir name.
 	    if (umask $mkdir_umask &&
 	    if (umask $mkdir_umask &&
-		exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
+	        $mkdirprog $mkdir_mode "$tmpdir" &&
+	        exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
 	    then
 	    then
 	      if test -z "$dir_arg" || {
 	      if test -z "$dir_arg" || {
 		   # Check for POSIX incompatibilities with -m.
 		   # Check for POSIX incompatibilities with -m.
 		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
 		   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
 		   # other-writeable bit of parent directory when it shouldn't.
 		   # other-writeable bit of parent directory when it shouldn't.
 		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
 		   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-		   ls_ld_tmpdir=`ls -ld "$tmpdir"`
+		   test_tmpdir="$tmpdir/a"
+		   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
 		   case $ls_ld_tmpdir in
 		   case $ls_ld_tmpdir in
 		     d????-?r-*) different_mode=700;;
 		     d????-?r-*) different_mode=700;;
 		     d????-?--*) different_mode=755;;
 		     d????-?--*) different_mode=755;;
 		     *) false;;
 		     *) false;;
 		   esac &&
 		   esac &&
-		   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
-		     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
+		   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+		     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
 		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
 		     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
 		   }
 		   }
 		 }
 		 }
 	      then posix_mkdir=:
 	      then posix_mkdir=:
 	      fi
 	      fi
-	      rmdir "$tmpdir/d" "$tmpdir"
+	      rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
 	    else
 	    else
 	      # Remove any dirs left behind by ancient mkdir implementations.
 	      # Remove any dirs left behind by ancient mkdir implementations.
-	      rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
+	      rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
 	    fi
 	    fi
 	    trap '' 0;;
 	    trap '' 0;;
 	esac;;
 	esac;;

+ 1 - 0
man/Makefile.in

@@ -209,6 +209,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 srcdir = @srcdir@

+ 1 - 1
man/ngircd.8.tmpl

@@ -1,7 +1,7 @@
 .\"
 .\"
 .\" ngircd(8) manual page template
 .\" ngircd(8) manual page template
 .\"
 .\"
-.TH ngircd 8 "Jan 2017" ngIRCd "ngIRCd Manual"
+.TH ngircd 8 "Jan 2019" ngIRCd "ngIRCd Manual"
 .SH NAME
 .SH NAME
 ngIRCd \- the "next generation" IRC daemon
 ngIRCd \- the "next generation" IRC daemon
 .SH SYNOPSIS
 .SH SYNOPSIS

+ 8 - 2
man/ngircd.conf.5.tmpl

@@ -1,7 +1,7 @@
 .\"
 .\"
 .\" ngircd.conf(5) manual page template
 .\" ngircd.conf(5) manual page template
 .\"
 .\"
-.TH ngircd.conf 5 "Jan 2017" ngIRCd "ngIRCd Manual"
+.TH ngircd.conf 5 "Jan 2019" ngIRCd "ngIRCd Manual"
 .SH NAME
 .SH NAME
 ngircd.conf \- configuration file of ngIRCd
 ngircd.conf \- configuration file of ngIRCd
 .SH SYNOPSIS
 .SH SYNOPSIS
@@ -125,7 +125,7 @@ take effect when ngircd starts up or is instructed to re-read its
 configuration file.
 configuration file.
 .TP
 .TP
 \fBMotdPhrase\fR (string)
 \fBMotdPhrase\fR (string)
-A simple Phrase (<256 chars) if you don't want to use a MOTD file.
+A simple Phrase (<127 chars) if you don't want to use a MOTD file.
 .TP
 .TP
 \fBNetwork\fR (string)
 \fBNetwork\fR (string)
 The name of the IRC network to which this server belongs. This name is
 The name of the IRC network to which this server belongs. This name is
@@ -201,6 +201,12 @@ Maximum length of an user nickname (Default: 9, as in RFC 2812). Please
 note that all servers in an IRC network MUST use the same maximum nickname
 note that all servers in an IRC network MUST use the same maximum nickname
 length!
 length!
 .TP
 .TP
+\fBMaxPenaltyTime\fR (number)
+Maximum penalty time increase in seconds, per penalty event. Set to -1 for no
+limit (the default), 0 to disable penalties altogether. ngIRCd doesn't use
+penalty increases higher than 2 seconds during normal operation, so values
+greater than 1 rarely make sense.
+.TP
 \fBMaxListSize\fR (number)
 \fBMaxListSize\fR (number)
 Maximum number of channels returned in response to a LIST command. Default: 100.
 Maximum number of channels returned in response to a LIST command. Default: 100.
 .TP
 .TP

+ 1 - 0
src/Makefile.in

@@ -220,6 +220,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 srcdir = @srcdir@

+ 1 - 0
src/ipaddr/Makefile.in

@@ -201,6 +201,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 srcdir = @srcdir@

+ 1 - 0
src/ngircd/Makefile.in

@@ -234,6 +234,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 srcdir = @srcdir@

+ 4 - 0
src/ngircd/conf-ssl.h

@@ -13,6 +13,10 @@
 #ifdef HAVE_LIBSSL
 #ifdef HAVE_LIBSSL
 #define SSL_SUPPORT
 #define SSL_SUPPORT
 #include <openssl/ssl.h>
 #include <openssl/ssl.h>
+#if OPENSSL_VERSION_NUMBER < 0x10100000L
+#define OpenSSL_version SSLeay_version
+#define OPENSSL_VERSION SSLEAY_VERSION
+#endif
 #endif
 #endif
 #ifdef HAVE_LIBGNUTLS
 #ifdef HAVE_LIBGNUTLS
 #define SSL_SUPPORT
 #define SSL_SUPPORT

+ 18 - 6
src/ngircd/conf.c

@@ -1,6 +1,6 @@
 /*
 /*
  * ngIRCd -- The Next Generation IRC Daemon
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by
@@ -388,6 +388,7 @@ Conf_Test( void )
 	printf("  MaxConnectionsIP = %d\n", Conf_MaxConnectionsIP);
 	printf("  MaxConnectionsIP = %d\n", Conf_MaxConnectionsIP);
 	printf("  MaxJoins = %d\n", Conf_MaxJoins > 0 ? Conf_MaxJoins : -1);
 	printf("  MaxJoins = %d\n", Conf_MaxJoins > 0 ? Conf_MaxJoins : -1);
 	printf("  MaxNickLength = %u\n", Conf_MaxNickLength - 1);
 	printf("  MaxNickLength = %u\n", Conf_MaxNickLength - 1);
+	printf("  MaxPenaltyTime = %ld\n", Conf_MaxPenaltyTime);
 	printf("  MaxListSize = %d\n", Conf_MaxListSize);
 	printf("  MaxListSize = %d\n", Conf_MaxListSize);
 	printf("  PingTimeout = %d\n", Conf_PingTimeout);
 	printf("  PingTimeout = %d\n", Conf_PingTimeout);
 	printf("  PongTimeout = %d\n", Conf_PongTimeout);
 	printf("  PongTimeout = %d\n", Conf_PongTimeout);
@@ -711,7 +712,6 @@ Conf_NickIsService(int ConfServer, const char *Nick)
 /**
 /**
  * Check if the given nickname is blocked for "normal client" use.
  * Check if the given nickname is blocked for "normal client" use.
  *
  *
- * @param ConfServer The server index or NONE to check all configured servers.
  * @param Nick The nickname to check.
  * @param Nick The nickname to check.
  * @returns true if the given nickname belongs to an "IRC service".
  * @returns true if the given nickname belongs to an "IRC service".
  */
  */
@@ -766,6 +766,7 @@ Set_Defaults(bool InitServers)
 	Conf_MaxConnectionsIP = 5;
 	Conf_MaxConnectionsIP = 5;
 	Conf_MaxJoins = 10;
 	Conf_MaxJoins = 10;
 	Conf_MaxNickLength = CLIENT_NICK_LEN_DEFAULT;
 	Conf_MaxNickLength = CLIENT_NICK_LEN_DEFAULT;
+	Conf_MaxPenaltyTime = -1;
 	Conf_MaxListSize = 100;
 	Conf_MaxListSize = 100;
 	Conf_PingTimeout = 120;
 	Conf_PingTimeout = 120;
 	Conf_PongTimeout = 20;
 	Conf_PongTimeout = 20;
@@ -845,7 +846,7 @@ no_listenports(void)
  *
  *
  * This function is used to read the MOTD and help text file, for example.
  * This function is used to read the MOTD and help text file, for example.
  *
  *
- * @param filename	Name of the file to read.
+ * @param Filename	Name of the file to read.
  * @return		true, when the file has been read in.
  * @return		true, when the file has been read in.
  */
  */
 static bool
 static bool
@@ -887,9 +888,9 @@ Read_TextFile(const char *Filename, const char *Name, array *Destination)
  * Please note that this function uses exit(1) on fatal errors and therefore
  * Please note that this function uses exit(1) on fatal errors and therefore
  * can result in ngIRCd terminating!
  * can result in ngIRCd terminating!
  *
  *
- * @param ngircd_starting	Flag indicating if ngIRCd is starting or not.
- * @returns			true when the configuration file has been read
- *				successfully; false otherwise.
+ * @param IsStarting	Flag indicating if ngIRCd is starting or not.
+ * @returns		true when the configuration file has been read
+ *			successfully; false otherwise.
  */
  */
 static bool
 static bool
 Read_Config(bool TestOnly, bool IsStarting)
 Read_Config(bool TestOnly, bool IsStarting)
@@ -1642,6 +1643,12 @@ Handle_LIMITS(const char *File, int Line, char *Var, char *Arg)
 			Config_Error_NaN(File, Line, Var);
 			Config_Error_NaN(File, Line, Var);
 		return;
 		return;
 	}
 	}
+	if (strcasecmp(Var, "MaxPenaltyTime") == 0) {
+		Conf_MaxPenaltyTime = atol(Arg);
+		if (Conf_MaxPenaltyTime < -1)
+			Conf_MaxPenaltyTime = -1;	/* "unlimited" */
+		return;
+	}
 	if (strcasecmp(Var, "PingTimeout") == 0) {
 	if (strcasecmp(Var, "PingTimeout") == 0) {
 		Conf_PingTimeout = atoi(Arg);
 		Conf_PingTimeout = atoi(Arg);
 		if (Conf_PingTimeout < 5) {
 		if (Conf_PingTimeout < 5) {
@@ -2282,6 +2289,11 @@ Validate_Config(bool Configtest, bool Rehash)
 			     "This server uses PAM, \"Password\" in [Global] section will be ignored!");
 			     "This server uses PAM, \"Password\" in [Global] section will be ignored!");
 #endif
 #endif
 
 
+	if (Conf_MaxPenaltyTime != -1)
+		Config_Error(LOG_WARNING,
+			     "Maximum penalty increase ('MaxPenaltyTime') is set to %ld, this is not recommended!",
+			     Conf_MaxPenaltyTime);
+
 #ifdef DEBUG
 #ifdef DEBUG
 	servers = servers_once = 0;
 	servers = servers_once = 0;
 	for (i = 0; i < MAX_SERVERS; i++) {
 	for (i = 0; i < MAX_SERVERS; i++) {

+ 3 - 0
src/ngircd/conf.h

@@ -239,6 +239,9 @@ GLOBAL unsigned int Conf_MaxNickLength;
 /** Maximum number of channels returned to /list */
 /** Maximum number of channels returned to /list */
 GLOBAL int Conf_MaxListSize;
 GLOBAL int Conf_MaxListSize;
 
 
+/** Maximium seconds to add per "penalty". -1 = unlimited. */
+GLOBAL time_t Conf_MaxPenaltyTime;
+
 #ifndef STRICT_RFC
 #ifndef STRICT_RFC
 
 
 /** Require "AUTH PING-PONG" on login */
 /** Require "AUTH PING-PONG" on login */

+ 11 - 2
src/ngircd/conn-func.c

@@ -1,6 +1,6 @@
 /*
 /*
  * ngIRCd -- The Next Generation IRC Daemon
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by
@@ -26,6 +26,7 @@
 #endif
 #endif
 #include "conn.h"
 #include "conn.h"
 
 
+#include "conf.h"
 #include "conn-func.h"
 #include "conn-func.h"
 
 
 /**
 /**
@@ -85,7 +86,7 @@ Conn_LastPing( CONN_ID Idx )
  * is read. This function only increases the penalty, it is not possible to
  * is read. This function only increases the penalty, it is not possible to
  * decrease the penalty time.
  * decrease the penalty time.
  *
  *
- * @param Idex Connection index.
+ * @param Idx Connection index.
  * @param Seconds Seconds to add.
  * @param Seconds Seconds to add.
  * @see Conn_ResetPenalty
  * @see Conn_ResetPenalty
  */
  */
@@ -97,6 +98,14 @@ Conn_SetPenalty(CONN_ID Idx, time_t Seconds)
 	assert(Idx > NONE);
 	assert(Idx > NONE);
 	assert(Seconds >= 0);
 	assert(Seconds >= 0);
 
 
+	/* Limit new penalty to maximum configured, when less than 10 seconds. *
+	   The latter is used to limit brute force attacks, therefore we don't *
+	   want to limit that! */
+	if (Conf_MaxPenaltyTime >= 0
+	    && Seconds > Conf_MaxPenaltyTime
+	    && Seconds < 10)
+		Seconds = Conf_MaxPenaltyTime;
+
 	t = time(NULL);
 	t = time(NULL);
 	if (My_Connections[Idx].delaytime < t)
 	if (My_Connections[Idx].delaytime < t)
 		My_Connections[Idx].delaytime = t;
 		My_Connections[Idx].delaytime = t;

+ 2 - 1
src/ngircd/conn-ssl.c

@@ -42,6 +42,7 @@ extern struct SSLOptions Conf_SSLOptions;
 #ifdef HAVE_LIBSSL
 #ifdef HAVE_LIBSSL
 #include <openssl/err.h>
 #include <openssl/err.h>
 #include <openssl/rand.h>
 #include <openssl/rand.h>
+#include <openssl/dh.h>
 
 
 static SSL_CTX * ssl_ctx;
 static SSL_CTX * ssl_ctx;
 static DH *dh_params;
 static DH *dh_params;
@@ -326,7 +327,7 @@ ConnSSL_InitLibrary( void )
 			   Verify_openssl);
 			   Verify_openssl);
 	SSL_CTX_free(ssl_ctx);
 	SSL_CTX_free(ssl_ctx);
 	ssl_ctx = newctx;
 	ssl_ctx = newctx;
-	Log(LOG_INFO, "%s initialized.", SSLeay_version(SSLEAY_VERSION));
+	Log(LOG_INFO, "%s initialized.", OpenSSL_version(OPENSSL_VERSION));
 	return true;
 	return true;
 out:
 out:
 	SSL_CTX_free(newctx);
 	SSL_CTX_free(newctx);

+ 11 - 8
src/ngircd/conn.c

@@ -1,6 +1,6 @@
 /*
 /*
  * ngIRCd -- The Next Generation IRC Daemon
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by
@@ -556,8 +556,8 @@ InitSinaddrListenAddr(ng_ipaddr_t *addr, const char *listen_addrstr, UINT16 Port
 	if (!ret) {
 	if (!ret) {
 		assert(listen_addrstr);
 		assert(listen_addrstr);
 		Log(LOG_CRIT,
 		Log(LOG_CRIT,
-		    "Can't bind to [%s]:%u: can't convert ip address \"%s\"!",
-		    listen_addrstr, Port, listen_addrstr);
+		    "Can't listen on [%s]:%u: Failed to parse IP address!",
+		    listen_addrstr, Port);
 	}
 	}
 	return ret;
 	return ret;
 }
 }
@@ -1081,9 +1081,9 @@ Conn_Close(CONN_ID Idx, const char *LogMsg, const char *FwdMsg, bool InformClien
 		 * the calculation of in_p and out_p: in_z_k and out_z_k
 		 * the calculation of in_p and out_p: in_z_k and out_z_k
 		 * are non-zero, that's guaranteed by the protocol until
 		 * are non-zero, that's guaranteed by the protocol until
 		 * compression can be enabled. */
 		 * compression can be enabled. */
-		if (! in_z_k)
+		if (in_z_k <= 0)
 			in_z_k = in_k;
 			in_z_k = in_k;
-		if (! out_z_k)
+		if (out_z_k <= 0)
 			out_z_k = out_k;
 			out_z_k = out_k;
 		in_p = (int)(( in_k * 100 ) / in_z_k );
 		in_p = (int)(( in_k * 100 ) / in_z_k );
 		out_p = (int)(( out_k * 100 ) / out_z_k );
 		out_p = (int)(( out_k * 100 ) / out_z_k );
@@ -1918,8 +1918,11 @@ Check_Servers(void)
 		Conf_Server[i].lasttry = time_now;
 		Conf_Server[i].lasttry = time_now;
 		Conf_Server[i].conn_id = SERVER_WAIT;
 		Conf_Server[i].conn_id = SERVER_WAIT;
 		assert(Proc_GetPipeFd(&Conf_Server[i].res_stat) < 0);
 		assert(Proc_GetPipeFd(&Conf_Server[i].res_stat) < 0);
-		Resolve_Name(&Conf_Server[i].res_stat, Conf_Server[i].host,
-			     cb_Connect_to_Server);
+
+		/* Start resolver subprocess ... */
+		if (!Resolve_Name(&Conf_Server[i].res_stat, Conf_Server[i].host,
+				  cb_Connect_to_Server))
+			Conf_Server[i].conn_id = NONE;
 	}
 	}
 } /* Check_Servers */
 } /* Check_Servers */
 
 
@@ -2399,7 +2402,7 @@ Conn_GetFromProc(int fd)
  * @param Reason The reason, see THROTTLE_xxx constants.
  * @param Reason The reason, see THROTTLE_xxx constants.
  * @param Idx The connection index.
  * @param Idx The connection index.
  * @param Client The client of this connection.
  * @param Client The client of this connection.
- * @param Seconds The time to delay this connection.
+ * @param Value The time to delay this connection.
  */
  */
 static void
 static void
 Throttle_Connection(const CONN_ID Idx, CLIENT *Client, const int Reason,
 Throttle_Connection(const CONN_ID Idx, CLIENT *Client, const int Reason,

+ 12 - 6
src/ngircd/irc-channel.c

@@ -1,6 +1,6 @@
 /*
 /*
  * ngIRCd -- The Next Generation IRC Daemon
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by
@@ -497,7 +497,7 @@ IRC_TOPIC( CLIENT *Client, REQUEST *Req )
 		topic_power = true;
 		topic_power = true;
 
 
 	if (Req->argc == 1) {
 	if (Req->argc == 1) {
-		/* Request actual topic */
+		/* Request current topic */
 		topic = Channel_Topic(chan);
 		topic = Channel_Topic(chan);
 		if (*topic) {
 		if (*topic) {
 			r = IRC_WriteStrClient(from, RPL_TOPIC_MSG,
 			r = IRC_WriteStrClient(from, RPL_TOPIC_MSG,
@@ -532,8 +532,6 @@ IRC_TOPIC( CLIENT *Client, REQUEST *Req )
 						  Channel_Name(chan));
 						  Channel_Name(chan));
 	}
 	}
 
 
-	/* Set new topic */
-	Channel_SetTopic(chan, from, Req->argv[1]);
 	LogDebug("%s \"%s\" set topic on \"%s\": %s",
 	LogDebug("%s \"%s\" set topic on \"%s\": %s",
 		 Client_TypeText(from), Client_Mask(from), Channel_Name(chan),
 		 Client_TypeText(from), Client_Mask(from), Channel_Name(chan),
 		 Req->argv[1][0] ? Req->argv[1] : "<none>");
 		 Req->argv[1][0] ? Req->argv[1] : "<none>");
@@ -545,9 +543,17 @@ IRC_TOPIC( CLIENT *Client, REQUEST *Req )
 	if (!Channel_IsLocal(chan))
 	if (!Channel_IsLocal(chan))
 		IRC_WriteStrServersPrefix(Client, from, "TOPIC %s :%s",
 		IRC_WriteStrServersPrefix(Client, from, "TOPIC %s :%s",
 					  Req->argv[0], Req->argv[1]);
 					  Req->argv[0], Req->argv[1]);
-	IRC_WriteStrChannelPrefix(Client, chan, from, false, "TOPIC %s :%s",
-				  Req->argv[0], Req->argv[1]);
 
 
+	/* Infrom local clients, but only when the topic really changed. */
+	if (strcmp(Req->argv[1], Channel_Topic(chan)) != 0)
+		IRC_WriteStrChannelPrefix(Client, chan, from, false,
+					    "TOPIC %s :%s", Req->argv[0],
+					    Req->argv[1]);
+
+	/* Update topic, setter, and timestamp. */
+	Channel_SetTopic(chan, from, Req->argv[1]);
+
+	/* Send confirmation when the local client is a user. */
 	if (Client_Type(Client) == CLIENT_USER)
 	if (Client_Type(Client) == CLIENT_USER)
 		return IRC_WriteStrClientPrefix(Client, Client, "TOPIC %s :%s",
 		return IRC_WriteStrClientPrefix(Client, Client, "TOPIC %s :%s",
 						Req->argv[0], Req->argv[1]);
 						Req->argv[0], Req->argv[1]);

+ 2 - 2
src/ngircd/irc-login.c

@@ -1,6 +1,6 @@
 /*
 /*
  * ngIRCd -- The Next Generation IRC Daemon
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by
@@ -89,7 +89,7 @@ IRC_PASS( CLIENT *Client, REQUEST *Req )
 
 
 	/* Protocol version */
 	/* Protocol version */
 	if (Req->argc >= 2 && strlen(Req->argv[1]) >= 4) {
 	if (Req->argc >= 2 && strlen(Req->argv[1]) >= 4) {
-		int c2, c4;
+		char c2, c4;
 
 
 		c2 = Req->argv[1][2];
 		c2 = Req->argv[1][2];
 		c4 = Req->argv[1][4];
 		c4 = Req->argv[1][4];

+ 2 - 3
src/ngircd/irc-write.c

@@ -1,6 +1,6 @@
 /*
 /*
  * ngIRCd -- The Next Generation IRC Daemon
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by
@@ -380,11 +380,10 @@ va_dcl
  * Send a message to all the servers in the network using a specific prefix
  * Send a message to all the servers in the network using a specific prefix
  * and matching a "client flag" using a callback function.
  * and matching a "client flag" using a callback function.
  *
  *
- * @param Client The sending client, excluded while forwarding the message.
+ * @param ExceptOf The sending client, excluded while forwarding the message.
  * @param Prefix The prefix to use.
  * @param Prefix The prefix to use.
  * @param Flag Client flag that must be set on the target.
  * @param Flag Client flag that must be set on the target.
  * @param callback Callback function.
  * @param callback Callback function.
- * @param Format Format string.
  */
  */
 GLOBAL void
 GLOBAL void
 IRC_WriteStrServersPrefixFlag_CB(CLIENT *ExceptOf, CLIENT *Prefix, char Flag,
 IRC_WriteStrServersPrefixFlag_CB(CLIENT *ExceptOf, CLIENT *Prefix, char Flag,

+ 21 - 14
src/ngircd/irc.c

@@ -1,6 +1,6 @@
 /*
 /*
  * ngIRCd -- The Next Generation IRC Daemon
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by
@@ -112,7 +112,7 @@ IRC_ERROR(CLIENT *Client, REQUEST *Req)
 	}
 	}
 
 
 	if (Client_Conn(Client) != NONE) {
 	if (Client_Conn(Client) != NONE) {
-		Client_Destroy(Client, NULL, msg, false);
+		Conn_Close(Client_Conn(Client), NULL, msg, false);
 		return DISCONNECTED;
 		return DISCONNECTED;
 	}
 	}
 
 
@@ -362,12 +362,8 @@ IRC_KillClient(CLIENT *Client, CLIENT *From, const char *Nick, const char *Reaso
 		return CONNECTED;
 		return CONNECTED;
 	}
 	}
 
 
-	/* Inform other servers */
-	IRC_WriteStrServersPrefix(From ? Client : NULL,
-				  From ? From : Client_ThisServer(),
-				  "KILL %s :%s", Nick, Reason);
-
-	if (Client_Type(c) != CLIENT_USER && Client_Type(c) != CLIENT_GOTNICK) {
+	if (Client_Type(c) != CLIENT_USER && Client_Type(c) != CLIENT_GOTNICK
+	    && Client_Type(c) != CLIENT_SERVICE) {
 		/* Target of this KILL is not a regular user, this is
 		/* Target of this KILL is not a regular user, this is
 		 * invalid! So we ignore this case if we received a
 		 * invalid! So we ignore this case if we received a
 		 * regular KILL from the network and try to kill the
 		 * regular KILL from the network and try to kill the
@@ -388,6 +384,12 @@ IRC_KillClient(CLIENT *Client, CLIENT *From, const char *Nick, const char *Reaso
 		    Client_Type(c), Nick);
 		    Client_Type(c), Nick);
 	}
 	}
 
 
+	/* Inform other servers */
+	IRC_WriteStrServersPrefix(From ? Client : NULL,
+				  From ? From : Client_ThisServer(),
+				  "KILL %s :%s", Nick, Reason);
+
+
 	/* Save ID of this connection */
 	/* Save ID of this connection */
 	if (Client)
 	if (Client)
 		my_conn = Client_Conn(Client);
 		my_conn = Client_Conn(Client);
@@ -413,7 +415,7 @@ IRC_KillClient(CLIENT *Client, CLIENT *From, const char *Nick, const char *Reaso
  * Send help for a given topic to the client.
  * Send help for a given topic to the client.
  *
  *
  * @param Client The client requesting help.
  * @param Client The client requesting help.
- * @param Topoc The help topic requested.
+ * @param Topic The help topic requested.
  * @return CONNECTED or DISCONNECTED.
  * @return CONNECTED or DISCONNECTED.
  */
  */
 static bool
 static bool
@@ -481,11 +483,8 @@ Help(CLIENT *Client, const char *Topic)
  * @return Pointer to static (global) string buffer.
  * @return Pointer to static (global) string buffer.
  */
  */
 static char *
 static char *
-#ifdef ZLIB
+#if defined(SSL_SUPPORT) || defined(ZLIB)
 Option_String(CONN_ID Idx)
 Option_String(CONN_ID Idx)
-#else
-Option_String(UNUSED CONN_ID Idx)
-#endif
 {
 {
 	static char option_txt[8];
 	static char option_txt[8];
 	UINT16 options;
 	UINT16 options;
@@ -505,6 +504,11 @@ Option_String(UNUSED CONN_ID Idx)
 #endif
 #endif
 
 
 	return option_txt;
 	return option_txt;
+#else
+Option_String(UNUSED CONN_ID Idx)
+{
+	return "";
+#endif
 } /* Option_String */
 } /* Option_String */
 
 
 /**
 /**
@@ -690,7 +694,10 @@ Send_Message(CLIENT * Client, REQUEST * Req, int ForceType, bool SendErrors)
 				goto send_next_target;
 				goto send_next_target;
 			}
 			}
 
 
-			if (Client_HasMode(cl, 'C')) {
+			if (Client_HasMode(cl, 'C') &&
+			    !Client_HasMode(from, 'o') &&
+			    !(Client_Type(from) == CLIENT_SERVER) &&
+			    !(Client_Type(from) == CLIENT_SERVICE)) {
 				cl2chan = Channel_FirstChannelOf(cl);
 				cl2chan = Channel_FirstChannelOf(cl);
 				while (cl2chan) {
 				while (cl2chan) {
 					chan = Channel_GetChannel(cl2chan);
 					chan = Channel_GetChannel(cl2chan);

+ 5 - 5
src/ngircd/lists.c

@@ -1,6 +1,6 @@
 /*
 /*
  * ngIRCd -- The Next Generation IRC Daemon
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by
@@ -39,7 +39,7 @@ struct list_elem {
 /**
 /**
  * Get IRC mask stored in list element.
  * Get IRC mask stored in list element.
  *
  *
- * @param list_elem List element.
+ * @param e List element.
  * @return Pointer to IRC mask
  * @return Pointer to IRC mask
  */
  */
 GLOBAL const char *
 GLOBAL const char *
@@ -52,7 +52,7 @@ Lists_GetMask(const struct list_elem *e)
 /**
 /**
  * Get optional "reason" text stored in list element.
  * Get optional "reason" text stored in list element.
  *
  *
- * @param list_elem List element.
+ * @param e List element.
  * @return Pointer to "reason" text or empty string ("").
  * @return Pointer to "reason" text or empty string ("").
  */
  */
 GLOBAL const char *
 GLOBAL const char *
@@ -65,7 +65,7 @@ Lists_GetReason(const struct list_elem *e)
 /**
 /**
  * Get "validity" value stored in list element.
  * Get "validity" value stored in list element.
  *
  *
- * @param list_elem List element.
+ * @param e List element.
  * @return Validity: 0=unlimited, >0 until this time stamp.
  * @return Validity: 0=unlimited, >0 until this time stamp.
  */
  */
 GLOBAL time_t
 GLOBAL time_t
@@ -78,7 +78,7 @@ Lists_GetValidity(const struct list_elem *e)
 /**
 /**
  * Get "onlyonce" value stored in list element.
  * Get "onlyonce" value stored in list element.
  *
  *
- * @param list_elem List element.
+ * @param e List element.
  * @return True if the element was stored for single use, false otherwise.
  * @return True if the element was stored for single use, false otherwise.
  */
  */
 GLOBAL bool
 GLOBAL bool

+ 2 - 2
src/ngircd/match.c

@@ -1,6 +1,6 @@
 /*
 /*
  * ngIRCd -- The Next Generation IRC Daemon
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by
@@ -77,7 +77,7 @@ MatchCaseInsensitive(const char *Pattern, const char *String)
 /**
 /**
  * Match string with pattern case-insensitive.
  * Match string with pattern case-insensitive.
  *
  *
- * @param pattern Pattern to match with
+ * @param Pattern Pattern to match with
  * @param String Input string, at most COMMAND_LEN-1 characters long
  * @param String Input string, at most COMMAND_LEN-1 characters long
  * @param Separator Character separating the individual patterns in the list
  * @param Separator Character separating the individual patterns in the list
  * @return true if pattern matches
  * @return true if pattern matches

+ 2 - 2
src/ngircd/ngircd.c

@@ -1,6 +1,6 @@
 /*
 /*
  * ngIRCd -- The Next Generation IRC Daemon
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2017 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2019 Alexander Barton (alex@barton.de) and Contributors.
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by
@@ -451,7 +451,7 @@ static void
 Show_Version( void )
 Show_Version( void )
 {
 {
 	puts( NGIRCd_Version );
 	puts( NGIRCd_Version );
-	puts( "Copyright (c)2001-2017 Alexander Barton (<alex@barton.de>) and Contributors." );
+	puts( "Copyright (c)2001-2019 Alexander Barton (<alex@barton.de>) and Contributors." );
 	puts( "Homepage: <http://ngircd.barton.de/>\n" );
 	puts( "Homepage: <http://ngircd.barton.de/>\n" );
 	puts( "This is free software; see the source for copying conditions. There is NO" );
 	puts( "This is free software; see the source for copying conditions. There is NO" );
 	puts( "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." );
 	puts( "warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." );

+ 2 - 2
src/ngircd/op.c

@@ -1,6 +1,6 @@
 /*
 /*
  * ngIRCd -- The Next Generation IRC Daemon
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by
@@ -58,7 +58,7 @@ Op_NoPrivileges(CLIENT * Client, REQUEST * Req)
  * Check that the originator of a request is an IRC operator and allowed
  * Check that the originator of a request is an IRC operator and allowed
  * to administer this server.
  * to administer this server.
  *
  *
- * @param CLient Client from which the command has been received.
+ * @param Client Client from which the command has been received.
  * @param Req Request structure.
  * @param Req Request structure.
  * @return CLIENT structure of the client that initiated the command or
  * @return CLIENT structure of the client that initiated the command or
  *	   NULL if client is not allowed to execute operator commands.
  *	   NULL if client is not allowed to execute operator commands.

+ 16 - 11
src/ngircd/parse.c

@@ -1,6 +1,6 @@
 /*
 /*
  * ngIRCd -- The Next Generation IRC Daemon
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2015 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by
@@ -111,7 +111,7 @@ static COMMAND My_Commands[] =
 	_CMD("USERS", IRC_USERS, CLIENT_USER|CLIENT_SERVER, 0, -1, 0),
 	_CMD("USERS", IRC_USERS, CLIENT_USER|CLIENT_SERVER, 0, -1, 0),
 	_CMD("VERSION", IRC_VERSION, CLIENT_USER|CLIENT_SERVER, 0, 1, 1),
 	_CMD("VERSION", IRC_VERSION, CLIENT_USER|CLIENT_SERVER, 0, 1, 1),
 	_CMD("WALLOPS", IRC_WALLOPS, CLIENT_USER|CLIENT_SERVER, 1, 1, 0),
 	_CMD("WALLOPS", IRC_WALLOPS, CLIENT_USER|CLIENT_SERVER, 1, 1, 0),
-	_CMD("WEBIRC", IRC_WEBIRC, CLIENT_UNKNOWN, 4, 4, 0),
+	_CMD("WEBIRC", IRC_WEBIRC, CLIENT_UNKNOWN, 4, 5, 0),
 	_CMD("WHO", IRC_WHO, CLIENT_USER, 0, 2, 1),
 	_CMD("WHO", IRC_WHO, CLIENT_USER, 0, 2, 1),
 	_CMD("WHOIS", IRC_WHOIS, CLIENT_USER|CLIENT_SERVER, 0, -1, 1),
 	_CMD("WHOIS", IRC_WHOIS, CLIENT_USER|CLIENT_SERVER, 0, -1, 1),
 	_CMD("WHOWAS", IRC_WHOWAS, CLIENT_USER|CLIENT_SERVER, 0, -1, 0),
 	_CMD("WHOWAS", IRC_WHOWAS, CLIENT_USER|CLIENT_SERVER, 0, -1, 0),
@@ -169,8 +169,8 @@ Parse_GetCommandStruct( void )
  *
  *
  * @param Idx Index of the connection from which the command has been received.
  * @param Idx Index of the connection from which the command has been received.
  * @param Request NULL terminated line of text (the "command").
  * @param Request NULL terminated line of text (the "command").
- * @return true on success (valid command or "regular" error), false if a
- * 	fatal error occurred and the connection has been shut down.
+ * @return CONNECTED on success (valid command or "regular" error), DISCONNECTED
+ *	if a fatal error occurred and the connection has been shut down.
  */
  */
 GLOBAL bool
 GLOBAL bool
 Parse_Request( CONN_ID Idx, char *Request )
 Parse_Request( CONN_ID Idx, char *Request )
@@ -257,11 +257,14 @@ Parse_Request( CONN_ID Idx, char *Request )
 		}
 		}
 	}
 	}
 
 
-	if( ! Validate_Prefix( Idx, &req, &closed )) return ! closed;
-	if( ! Validate_Command( Idx, &req, &closed )) return ! closed;
-	if( ! Validate_Args( Idx, &req, &closed )) return ! closed;
+	if(!Validate_Prefix(Idx, &req, &closed))
+		return !closed;
+	if(!Validate_Command(Idx, &req, &closed))
+		return !closed;
+	if(!Validate_Args(Idx, &req, &closed))
+		return !closed;
 
 
-	return Handle_Request( Idx, &req );
+	return Handle_Request(Idx, &req);
 } /* Parse_Request */
 } /* Parse_Request */
 
 
 
 
@@ -490,7 +493,7 @@ static bool
 Handle_Request( CONN_ID Idx, REQUEST *Req )
 Handle_Request( CONN_ID Idx, REQUEST *Req )
 {
 {
 	CLIENT *client;
 	CLIENT *client;
-	bool result = true;
+	bool result = CONNECTED;
 	int client_type;
 	int client_type;
 	COMMAND *cmd;
 	COMMAND *cmd;
 
 
@@ -546,6 +549,8 @@ Handle_Request( CONN_ID Idx, REQUEST *Req )
 			cmd->lcount++;
 			cmd->lcount++;
 		else
 		else
 			cmd->rcount++;
 			cmd->rcount++;
+
+		/* Return result of command (CONNECTED/DISCONNECTED). */
 		return result;
 		return result;
 	}
 	}
 
 
@@ -554,13 +559,13 @@ Handle_Request( CONN_ID Idx, REQUEST *Req )
 	    client_type != CLIENT_SERVICE )
 	    client_type != CLIENT_SERVICE )
 		return true;
 		return true;
 
 
-	/* Unknown command and registered connection: generate error: */
 	LogDebug("Connection %d: Unknown command \"%s\", %d %s,%s prefix.",
 	LogDebug("Connection %d: Unknown command \"%s\", %d %s,%s prefix.",
 			Client_Conn( client ), Req->command, Req->argc,
 			Client_Conn( client ), Req->command, Req->argc,
 			Req->argc == 1 ? "parameter" : "parameters",
 			Req->argc == 1 ? "parameter" : "parameters",
 			Req->prefix ? "" : " no" );
 			Req->prefix ? "" : " no" );
 
 
-	if (Client_Type(client) != CLIENT_SERVER)
+	/* Unknown command and registered connection: generate error: */
+	if (client_type != CLIENT_SERVER)
 		result = IRC_WriteErrClient(client, ERR_UNKNOWNCOMMAND_MSG,
 		result = IRC_WriteErrClient(client, ERR_UNKNOWNCOMMAND_MSG,
 				Client_ID(client), Req->command);
 				Client_ID(client), Req->command);
 
 

+ 6 - 3
src/ngircd/resolve.c

@@ -108,9 +108,8 @@ Resolve_Name( PROC_STAT *s, const char *Host, void (*cbfunc)(int, short))
 	return false;
 	return false;
 } /* Resolve_Name */
 } /* Resolve_Name */
 
 
-
-#if !defined(HAVE_GETADDRINFO) || !defined(HAVE_GETNAMEINFO)
-#if !defined(WANT_IPV6) && defined(h_errno)
+#if !defined(HAVE_WORKING_GETADDRINFO) || !defined(HAVE_GETNAMEINFO)
+#ifdef h_errno
 static char *
 static char *
 Get_Error( int H_Error )
 Get_Error( int H_Error )
 {
 {
@@ -233,7 +232,11 @@ ReverseLookup(const ng_ipaddr_t *IpAddr, char *resbuf, size_t reslen)
  * @return true if lookup successful, false if domain name not found
  * @return true if lookup successful, false if domain name not found
  */
  */
 static bool
 static bool
+#ifdef HAVE_WORKING_GETADDRINFO
 ForwardLookup(const char *hostname, array *IpAddr, int af)
 ForwardLookup(const char *hostname, array *IpAddr, int af)
+#else
+ForwardLookup(const char *hostname, array *IpAddr, UNUSED int af)
+#endif
 {
 {
 	ng_ipaddr_t addr;
 	ng_ipaddr_t addr;
 
 

+ 7 - 1
src/portab/Makefile.am

@@ -15,7 +15,13 @@ EXTRA_DIST = Makefile.ng
 
 
 noinst_LIBRARIES = libngportab.a
 noinst_LIBRARIES = libngportab.a
 
 
-libngportab_a_SOURCES = strdup.c strndup.c strlcpy.c strtok_r.c vsnprintf.c waitpid.c
+libngportab_a_SOURCES = \
+	strdup.c \
+	strlcpy.c \
+	strndup.c \
+	strtok_r.c \
+	vsnprintf.c \
+	waitpid.c
 
 
 check_PROGRAMS = portabtest
 check_PROGRAMS = portabtest
 
 

+ 11 - 3
src/portab/Makefile.in

@@ -87,8 +87,8 @@ am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
 am__v_at_0 = @
 am__v_at_0 = @
 libngportab_a_AR = $(AR) $(ARFLAGS)
 libngportab_a_AR = $(AR) $(ARFLAGS)
 libngportab_a_LIBADD =
 libngportab_a_LIBADD =
-am_libngportab_a_OBJECTS = strdup$U.$(OBJEXT) strndup$U.$(OBJEXT) \
-	strlcpy$U.$(OBJEXT) strtok_r$U.$(OBJEXT) vsnprintf$U.$(OBJEXT) \
+am_libngportab_a_OBJECTS = strdup$U.$(OBJEXT) strlcpy$U.$(OBJEXT) \
+	strndup$U.$(OBJEXT) strtok_r$U.$(OBJEXT) vsnprintf$U.$(OBJEXT) \
 	waitpid$U.$(OBJEXT)
 	waitpid$U.$(OBJEXT)
 libngportab_a_OBJECTS = $(am_libngportab_a_OBJECTS)
 libngportab_a_OBJECTS = $(am_libngportab_a_OBJECTS)
 am_portabtest_OBJECTS = portabtest$U.$(OBJEXT)
 am_portabtest_OBJECTS = portabtest$U.$(OBJEXT)
@@ -231,6 +231,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 srcdir = @srcdir@
@@ -242,7 +243,14 @@ top_srcdir = @top_srcdir@
 AUTOMAKE_OPTIONS = ansi2knr
 AUTOMAKE_OPTIONS = ansi2knr
 EXTRA_DIST = Makefile.ng
 EXTRA_DIST = Makefile.ng
 noinst_LIBRARIES = libngportab.a
 noinst_LIBRARIES = libngportab.a
-libngportab_a_SOURCES = strdup.c strndup.c strlcpy.c strtok_r.c vsnprintf.c waitpid.c
+libngportab_a_SOURCES = \
+	strdup.c \
+	strlcpy.c \
+	strndup.c \
+	strtok_r.c \
+	vsnprintf.c \
+	waitpid.c
+
 portabtest_SOURCES = portabtest.c
 portabtest_SOURCES = portabtest.c
 portabtest_LDFLAGS = -L.
 portabtest_LDFLAGS = -L.
 portabtest_LDADD = -lngportab
 portabtest_LDADD = -lngportab

+ 7 - 1
src/portab/Makefile.ng

@@ -15,7 +15,13 @@ EXTRA_DIST = Makefile.ng
 
 
 noinst_LIBRARIES = libngportab.a
 noinst_LIBRARIES = libngportab.a
 
 
-libngportab_a_SOURCES = strdup.c strndup.c strlcpy.c strtok_r.c vsnprintf.c waitpid.c
+libngportab_a_SOURCES = \
+	strdup.c \
+	strlcpy.c \
+	strndup.c \
+	strtok_r.c \
+	vsnprintf.c \
+	waitpid.c
 
 
 check_PROGRAMS = portabtest
 check_PROGRAMS = portabtest
 
 

+ 1 - 0
src/testsuite/Makefile.in

@@ -192,6 +192,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 srcdir = @srcdir@

+ 1 - 0
src/testsuite/ngircd-test1.conf

@@ -12,6 +12,7 @@
 [Limits]
 [Limits]
 	MaxConnectionsIP = 0
 	MaxConnectionsIP = 0
 	MaxJoins = 4
 	MaxJoins = 4
+	MaxPenaltyTime = 1
 
 
 [Options]
 [Options]
 	OperCanUseMode = yes
 	OperCanUseMode = yes

+ 1 - 0
src/testsuite/ngircd-test2.conf

@@ -12,6 +12,7 @@
 [Limits]
 [Limits]
 	MaxConnectionsIP = 0
 	MaxConnectionsIP = 0
 	MaxJoins = 4
 	MaxJoins = 4
+	MaxPenaltyTime = 1
 
 
 [Options]
 [Options]
 	OperCanUseMode = yes
 	OperCanUseMode = yes

+ 1 - 0
src/tool/Makefile.in

@@ -207,6 +207,7 @@ pdfdir = @pdfdir@
 prefix = @prefix@
 prefix = @prefix@
 program_transform_name = @program_transform_name@
 program_transform_name = @program_transform_name@
 psdir = @psdir@
 psdir = @psdir@
+runstatedir = @runstatedir@
 sbindir = @sbindir@
 sbindir = @sbindir@
 sharedstatedir = @sharedstatedir@
 sharedstatedir = @sharedstatedir@
 srcdir = @srcdir@
 srcdir = @srcdir@

+ 3 - 3
src/tool/tool.c

@@ -1,6 +1,6 @@
 /*
 /*
  * ngIRCd -- The Next Generation IRC Daemon
  * ngIRCd -- The Next Generation IRC Daemon
- * Copyright (c)2001-2014 Alexander Barton (alex@barton.de) and Contributors.
+ * Copyright (c)2001-2018 Alexander Barton (alex@barton.de) and Contributors.
  *
  *
  * This program is free software; you can redistribute it and/or modify
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
  * it under the terms of the GNU General Public License as published by
@@ -82,7 +82,7 @@ ngt_UpperStr(char *String)
 
 
 	ptr = String;
 	ptr = String;
 	while(*ptr) {
 	while(*ptr) {
-		*ptr = toupper((int)*ptr);
+		*ptr = (char)toupper(*ptr);
 		ptr++;
 		ptr++;
 	}
 	}
 	return String;
 	return String;
@@ -101,7 +101,7 @@ ngt_LowerStr(char *String)
 
 
 	ptr = String;
 	ptr = String;
 	while(*ptr) {
 	while(*ptr) {
-		*ptr = tolower((int)*ptr);
+		*ptr = (char)tolower(*ptr);
 		ptr++;
 		ptr++;
 	}
 	}
 	return String;
 	return String;