diff -Nru ircd-hybrid-8.2.22+dfsg.1/aclocal.m4 ircd-hybrid-8.2.24+dfsg.1/aclocal.m4 --- ircd-hybrid-8.2.22+dfsg.1/aclocal.m4 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/aclocal.m4 2018-04-04 22:33:37.000000000 +0000 @@ -1,6 +1,6 @@ -# generated automatically by aclocal 1.15 -*- Autoconf -*- +# generated automatically by aclocal 1.15.1 -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2017 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -20,7 +20,7 @@ If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) -# Copyright (C) 2002-2014 Free Software Foundation, Inc. +# Copyright (C) 2002-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -35,7 +35,7 @@ [am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. -m4_if([$1], [1.15], [], +m4_if([$1], [1.15.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) @@ -51,14 +51,14 @@ # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -[AM_AUTOMAKE_VERSION([1.15])dnl +[AM_AUTOMAKE_VERSION([1.15.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -110,7 +110,7 @@ # AM_CONDITIONAL -*- Autoconf -*- -# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# Copyright (C) 1997-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -141,7 +141,7 @@ Usually this means the macro was only invoked conditionally.]]) fi])]) -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -332,7 +332,7 @@ # Generate code to set up dependency tracking. -*- Autoconf -*- -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -408,7 +408,7 @@ # Do all the work for Automake. -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -605,7 +605,7 @@ done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -626,7 +626,7 @@ fi AC_SUBST([install_sh])]) -# Copyright (C) 2003-2014 Free Software Foundation, Inc. +# Copyright (C) 2003-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -645,7 +645,7 @@ rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) -# Copyright (C) 1998-2014 Free Software Foundation, Inc. +# Copyright (C) 1998-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -666,7 +666,7 @@ # Add --enable-maintainer-mode option to configure. -*- Autoconf -*- # From Jim Meyering -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -701,7 +701,7 @@ # Check to see how 'make' treats includes. -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -751,7 +751,7 @@ # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- -# Copyright (C) 1997-2014 Free Software Foundation, Inc. +# Copyright (C) 1997-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -790,7 +790,7 @@ # Helper functions for option handling. -*- Autoconf -*- -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -819,7 +819,7 @@ AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -866,7 +866,7 @@ # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -885,7 +885,7 @@ # Check to make sure that the build environment is sane. -*- Autoconf -*- -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -966,7 +966,7 @@ rm -f conftest.file ]) -# Copyright (C) 2009-2014 Free Software Foundation, Inc. +# Copyright (C) 2009-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1026,7 +1026,7 @@ _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) -# Copyright (C) 2001-2014 Free Software Foundation, Inc. +# Copyright (C) 2001-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1054,7 +1054,7 @@ INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) -# Copyright (C) 2006-2014 Free Software Foundation, Inc. +# Copyright (C) 2006-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1073,7 +1073,7 @@ # Check how to create a tarball. -*- Autoconf -*- -# Copyright (C) 2004-2014 Free Software Foundation, Inc. +# Copyright (C) 2004-2017 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -1204,21 +1204,20 @@ AC_SUBST([am__untar]) ]) # _AM_PROG_TAR -m4_include([m4/ac_define_dir.m4]) m4_include([m4/ax_append_compile_flags.m4]) m4_include([m4/ax_append_flag.m4]) m4_include([m4/ax_arg_enable_assert.m4]) m4_include([m4/ax_arg_enable_debugging.m4]) +m4_include([m4/ax_arg_enable_efence.m4]) m4_include([m4/ax_arg_enable_warnings.m4]) m4_include([m4/ax_arg_gnutls.m4]) m4_include([m4/ax_arg_ioloop_mechanism.m4]) -m4_include([m4/ax_arg_libgeoip.m4]) m4_include([m4/ax_arg_openssl.m4]) m4_include([m4/ax_check_compile_flag.m4]) +m4_include([m4/ax_define_dir.m4]) +m4_include([m4/ax_gcc_stack_protect.m4]) m4_include([m4/ax_library_net.m4]) -m4_include([m4/ax_mempool_chunksizes.m4]) m4_include([m4/ax_require_defined.m4]) -m4_include([m4/gcc_stack_protect.m4]) m4_include([m4/libtool.m4]) m4_include([m4/ltargz.m4]) m4_include([m4/ltdl.m4]) diff -Nru ircd-hybrid-8.2.22+dfsg.1/AUTHORS ircd-hybrid-8.2.24+dfsg.1/AUTHORS --- ircd-hybrid-8.2.22+dfsg.1/AUTHORS 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/AUTHORS 2018-04-04 22:33:37.000000000 +0000 @@ -1,4 +1,4 @@ -$Id: AUTHORS 7698 2016-09-04 15:45:49Z michael $ +$Id: AUTHORS 8158 2017-04-08 19:40:45Z michael $ The hybrid team is a group of ircd coders who were frustrated with the instability and all-out "dirtiness" of the EFnet ircds @@ -48,7 +48,7 @@ madmax, Paul Lomax metalrock, Jack Low r0d3nt, Andrew Strutt -Riedel, Dennis Vink +Riedel, Dennis Vink scuzzy, David Todd spookey, David Colburn TimeMr14C, Yusuf Iskenderoglu diff -Nru ircd-hybrid-8.2.22+dfsg.1/ChangeLog ircd-hybrid-8.2.24+dfsg.1/ChangeLog --- ircd-hybrid-8.2.22+dfsg.1/ChangeLog 2017-03-26 15:38:05.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/ChangeLog 2018-04-04 22:34:21.000000000 +0000 @@ -1,3 +1,1349 @@ +2018-04-04 18:21:06 michael + + * [r8492] /ircd-hybrid/branches/8.2.x/modules/m_unresv.c: + - m_unresv.c: stylistic changes + +2018-04-04 18:02:18 michael + + * [r8490] /ircd-hybrid/branches/8.2.x/NEWS, + /ircd-hybrid/branches/8.2.x/modules/m_stats.c, + /ircd-hybrid/branches/8.2.x/src/numeric.c: + - pseudo {} blocks aka services aliases are now reported via "STATS s" + +2018-04-04 17:50:38 michael + + * [r8489] /ircd-hybrid/branches/8.2.x/NEWS: + - Update NEWS file + +2018-04-04 12:55:58 michael + + * [r8487] /ircd-hybrid/branches/8.2.x/modules/m_knock.c: + - m_knock.c: avoid indexing parv[] multiple times + +2018-04-04 11:13:05 michael + + * [r8486] /ircd-hybrid/branches/8.2.x/include/client_svstag.h, + /ircd-hybrid/branches/8.2.x/src/client_svstag.c: + - propset + +2018-04-04 11:07:19 michael + + * [r8483] /ircd-hybrid/branches/8.2.x/include/client.h, + /ircd-hybrid/branches/8.2.x/include/client_svstag.h, + /ircd-hybrid/branches/8.2.x/modules/core/m_mode.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_server.c, + /ircd-hybrid/branches/8.2.x/modules/m_oper.c, + /ircd-hybrid/branches/8.2.x/modules/m_svsmode.c, + /ircd-hybrid/branches/8.2.x/modules/m_svstag.c, + /ircd-hybrid/branches/8.2.x/modules/m_whois.c, + /ircd-hybrid/branches/8.2.x/src/Makefile.am, + /ircd-hybrid/branches/8.2.x/src/Makefile.in, + /ircd-hybrid/branches/8.2.x/src/client.c, + /ircd-hybrid/branches/8.2.x/src/client_svstag.c: + - Move svstag related code into its own files + +2018-04-04 10:19:08 michael + + * [r8482] /ircd-hybrid/branches/8.2.x/NEWS: + - Update NEWS file + +2018-04-04 10:17:30 michael + + * [r8480] /ircd-hybrid/branches/8.2.x/modules/m_whois.c: + - m_whois.c:whois_person(): services clients are now tagged with 'is a Network Service' in "WHOIS" + +2018-04-03 13:03:30 michael + + * [r8478] /ircd-hybrid/branches/8.2.x/doc/modes.txt, + /ircd-hybrid/branches/8.2.x/help/cmode, + /ircd-hybrid/branches/8.2.x/include/channel_mode.h, + /ircd-hybrid/branches/8.2.x/include/conf.h, + /ircd-hybrid/branches/8.2.x/include/dbuf.h, + /ircd-hybrid/branches/8.2.x/include/packet.h, + /ircd-hybrid/branches/8.2.x/include/parse.h, + /ircd-hybrid/branches/8.2.x/include/restart.h, + /ircd-hybrid/branches/8.2.x/include/send.h, + /ircd-hybrid/branches/8.2.x/include/user.h: + - Documentation changes + +2018-04-03 09:57:57 michael + + * [r8477] /ircd-hybrid/branches/8.2.x/configure: + - autoreconf + +2018-04-03 09:57:34 michael + + * [r8476] /ircd-hybrid/branches/8.2.x/configure.ac: + - configure.ac: remove -fno-strict-aliasing from cflags + +2018-04-03 08:54:41 michael + + * [r8472] /ircd-hybrid/branches/8.2.x/src/conf_gecos.c, + /ircd-hybrid/branches/8.2.x/src/conf_resv.c: + - conf_gecos.c, conf_resv.c: stylistic changes + +2018-04-03 08:48:39 michael + + * [r8471] /ircd-hybrid/branches/8.2.x/configure.ac, + /ircd-hybrid/branches/8.2.x/doc/modes.txt, + /ircd-hybrid/branches/8.2.x/include/patchlevel.h: + - Bump version to ircd-hybrid-8.2.24 + +2018-04-03 08:05:14 michael + + * [r8469] /ircd-hybrid/branches/8.2.x/src/auth.c: + - auth.c: deduplicate; minor cleanups + +2018-04-03 07:21:48 michael + + * [r8467] /ircd-hybrid/branches/8.2.x/NEWS, + /ircd-hybrid/branches/8.2.x/doc/modes.txt, + /ircd-hybrid/branches/8.2.x/help/cmode, + /ircd-hybrid/branches/8.2.x/include/channel_mode.h, + /ircd-hybrid/branches/8.2.x/include/numeric.h, + /ircd-hybrid/branches/8.2.x/modules/core/m_nick.c, + /ircd-hybrid/branches/8.2.x/src/channel_mode.c, + /ircd-hybrid/branches/8.2.x/src/conf.c, + /ircd-hybrid/branches/8.2.x/src/numeric.c: + - Implemented channel mode 'N' which prevents users from changing their nick while in a channel with that mode set + +2018-04-02 10:04:25 michael + + * [r8465] /ircd-hybrid/branches/8.2.x/src/s_bsd_epoll.c: + - s_bsd_epoll.c:comm_setselect(): add assert() + +2018-04-01 08:33:22 michael + + * [r8463] /ircd-hybrid/branches/8.2.x/modules/m_svskill.c: + - m_svskill.c: cleanup ms_svskill(). args_min is 3 now. A TS argument is now always required, but it can be 0 + +2018-03-31 11:42:41 michael + + * [r8461] /ircd-hybrid/branches/8.2.x/src/conf_pseudo.c: + - conf_pseudo.c:pseudo_message_handler(): stylistic changes + +2018-03-31 11:36:09 michael + + * [r8460] /ircd-hybrid/branches/8.2.x/src/conf_parser.c, + /ircd-hybrid/branches/8.2.x/src/conf_parser.h: + - Recreate conf_parser + +2018-03-31 11:33:39 michael + + * [r8457] /ircd-hybrid/branches/8.2.x/include/conf_pseudo.h, + /ircd-hybrid/branches/8.2.x/modules/m_stats.c, + /ircd-hybrid/branches/8.2.x/src/conf.c, + /ircd-hybrid/branches/8.2.x/src/conf_parser.y, + /ircd-hybrid/branches/8.2.x/src/conf_pseudo.c: + - Move pseudot_stats() to m_stats.c + +2018-03-30 12:51:40 michael + + * [r8456] /ircd-hybrid/branches/8.2.x/NEWS: + - Update NEWS file + +2018-03-30 12:44:59 michael + + * [r8454] /ircd-hybrid/branches/8.2.x/modules/m_stats.c: + - m_stats.c:stats_tab[]: who would have thought that R comes right after Q + +2018-03-30 12:41:25 michael + + * [r8452] /ircd-hybrid/branches/8.2.x/include/conf_pseudo.h, + /ircd-hybrid/branches/8.2.x/include/numeric.h, + /ircd-hybrid/branches/8.2.x/modules/m_stats.c, + /ircd-hybrid/branches/8.2.x/src/conf_pseudo.c, + /ircd-hybrid/branches/8.2.x/src/numeric.c: + - Report configured pseudo {} blocks in '/stats R'. For now we use the numeric 227. Maybe there's some other numeric that's more suitable for this. + +2018-03-30 11:15:01 michael + + * [r8450] /ircd-hybrid/branches/8.2.x/src/conf.c: + - conf.c:clear_out_old_conf(): free ConfigServerHide.hidden_name + +2018-03-30 07:40:13 michael + + * [r8448] /ircd-hybrid/branches/8.2.x/modules/core/m_die.c, + /ircd-hybrid/branches/8.2.x/modules/m_restart.c: + - m_die(), m_restart(): don't give any hints about how to use this command if missing the server name parameter. Just send ERR_NEEDMOREPARAMS. + +2018-03-30 07:36:06 michael + + * [r8446] /ircd-hybrid/branches/8.2.x/src/channel.c, + /ircd-hybrid/branches/8.2.x/src/channel_mode.c, + /ircd-hybrid/branches/8.2.x/src/client.c: + - Stylistic changes + +2018-03-30 07:07:19 michael + + * [r8445] /ircd-hybrid/branches/8.2.x/configure: + - autoreconf + +2018-03-30 07:06:14 michael + + * [r8442] /ircd-hybrid/branches/8.2.x/m4/ax_arg_enable_warnings.m4: + - ax_arg_enable_warnings.m4: add -Wshift-negative-value + +2018-03-29 09:14:41 michael + + * [r8440] /ircd-hybrid/branches/8.2.x/modules/m_ison.c, + /ircd-hybrid/branches/8.2.x/modules/m_userhost.c: + - m_ison(), m_userhost(): const correctness + +2018-03-29 09:05:42 michael + + * [r8438] /ircd-hybrid/branches/8.2.x/include/channel.h, + /ircd-hybrid/branches/8.2.x/modules/core/m_server.c, + /ircd-hybrid/branches/8.2.x/modules/m_stats.c, + /ircd-hybrid/branches/8.2.x/src/channel.c, + /ircd-hybrid/branches/8.2.x/src/channel_mode.c, + /ircd-hybrid/branches/8.2.x/src/user.c: + - Add channel_get_list() to channel.c which should be used when accessing channel_list outside of channel.c + +2018-03-29 05:04:53 michael + + * [r8436] /ircd-hybrid/branches/8.2.x/include/client.h, + /ircd-hybrid/branches/8.2.x/include/conf.h, + /ircd-hybrid/branches/8.2.x/include/conf_class.h, + /ircd-hybrid/branches/8.2.x/include/irc_string.h, + /ircd-hybrid/branches/8.2.x/include/motd.h, + /ircd-hybrid/branches/8.2.x/include/server.h, + /ircd-hybrid/branches/8.2.x/include/server_capab.h, + /ircd-hybrid/branches/8.2.x/include/watch.h, + /ircd-hybrid/branches/8.2.x/include/whowas.h, + /ircd-hybrid/branches/8.2.x/modules/core/m_kill.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_nick.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_server.c, + /ircd-hybrid/branches/8.2.x/modules/m_cap.c, + /ircd-hybrid/branches/8.2.x/modules/m_globops.c, + /ircd-hybrid/branches/8.2.x/modules/m_invite.c, + /ircd-hybrid/branches/8.2.x/modules/m_ison.c, + /ircd-hybrid/branches/8.2.x/modules/m_pong.c, + /ircd-hybrid/branches/8.2.x/modules/m_stats.c, + /ircd-hybrid/branches/8.2.x/modules/m_svinfo.c, + /ircd-hybrid/branches/8.2.x/modules/m_svshost.c, + /ircd-hybrid/branches/8.2.x/modules/m_svsjoin.c, + /ircd-hybrid/branches/8.2.x/modules/m_svskill.c, + /ircd-hybrid/branches/8.2.x/modules/m_svspart.c, + /ircd-hybrid/branches/8.2.x/modules/m_svstag.c, + /ircd-hybrid/branches/8.2.x/modules/m_tburst.c, + /ircd-hybrid/branches/8.2.x/modules/m_user.c, + /ircd-hybrid/branches/8.2.x/modules/m_userhost.c, + /ircd-hybrid/branches/8.2.x/modules/m_wallops.c, + /ircd-hybrid/branches/8.2.x/modules/m_watch.c, + /ircd-hybrid/branches/8.2.x/modules/m_who.c, + /ircd-hybrid/branches/8.2.x/src/channel.c, + /ircd-hybrid/branches/8.2.x/src/client.c, + /ircd-hybrid/branches/8.2.x/src/conf_class.c, + /ircd-hybrid/branches/8.2.x/src/conf_parser.c, + /ircd-hybrid/branches/8.2.x/src/conf_parser.y, + /ircd-hybrid/branches/8.2.x/src/event.c, + /ircd-hybrid/branches/8.2.x/src/hostmask.c, + /ircd-hybrid/branches/8.2.x/src/motd.c, + /ircd-hybrid/branches/8.2.x/src/parse.c, + /ircd-hybrid/branches/8.2.x/src/res.c, + /ircd-hybrid/branches/8.2.x/src/server.c, + /ircd-hybrid/branches/8.2.x/src/user.c, + /ircd-hybrid/branches/8.2.x/tools/mkpasswd.c: + - Stylistic changes + +2018-03-27 16:14:06 michael + + * [r8434] /ircd-hybrid/branches/8.2.x/src/conf_gecos.c: + - conf_gecos.c: remove unused header include + +2018-03-27 16:10:09 michael + + * [r8432] /ircd-hybrid/branches/8.2.x/include/conf_service.h, + /ircd-hybrid/branches/8.2.x/modules/core/m_server.c, + /ircd-hybrid/branches/8.2.x/src/conf_service.c: + - Allow a matching function to be passed to conf_service.c:service_find() + +2018-03-27 14:48:40 michael + + * [r8430] /ircd-hybrid/branches/8.2.x/include/auth.h, + /ircd-hybrid/branches/8.2.x/include/channel.h, + /ircd-hybrid/branches/8.2.x/include/channel_mode.h, + /ircd-hybrid/branches/8.2.x/include/client.h, + /ircd-hybrid/branches/8.2.x/include/conf.h, + /ircd-hybrid/branches/8.2.x/include/conf_cluster.h, + /ircd-hybrid/branches/8.2.x/include/conf_shared.h, + /ircd-hybrid/branches/8.2.x/include/s_bsd.h, + /ircd-hybrid/branches/8.2.x/include/send.h, + /ircd-hybrid/branches/8.2.x/include/server_capab.h, + /ircd-hybrid/branches/8.2.x/modules/core/m_kick.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_kill.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_mode.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_tmode.c, + /ircd-hybrid/branches/8.2.x/modules/m_accept.c, + /ircd-hybrid/branches/8.2.x/modules/m_cap.c, + /ircd-hybrid/branches/8.2.x/modules/m_close.c, + /ircd-hybrid/branches/8.2.x/modules/m_connect.c, + /ircd-hybrid/branches/8.2.x/modules/m_dline.c, + /ircd-hybrid/branches/8.2.x/modules/m_kline.c, + /ircd-hybrid/branches/8.2.x/modules/m_knock.c, + /ircd-hybrid/branches/8.2.x/modules/m_links.c, + /ircd-hybrid/branches/8.2.x/modules/m_map.c, + /ircd-hybrid/branches/8.2.x/modules/m_oper.c, + /ircd-hybrid/branches/8.2.x/modules/m_resv.c, + /ircd-hybrid/branches/8.2.x/modules/m_topic.c, + /ircd-hybrid/branches/8.2.x/modules/m_unresv.c, + /ircd-hybrid/branches/8.2.x/modules/m_whois.c, + /ircd-hybrid/branches/8.2.x/modules/m_xline.c, + /ircd-hybrid/branches/8.2.x/src/auth.c, + /ircd-hybrid/branches/8.2.x/src/channel.c, + /ircd-hybrid/branches/8.2.x/src/channel_mode.c, + /ircd-hybrid/branches/8.2.x/src/client.c, + /ircd-hybrid/branches/8.2.x/src/conf_class.c, + /ircd-hybrid/branches/8.2.x/src/modules.c, + /ircd-hybrid/branches/8.2.x/src/parse.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd_devpoll.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd_epoll.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd_kqueue.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd_poll.c: + - Stylistic changes + +2018-03-26 05:09:47 michael + + * [r8427] /ircd-hybrid/branches/8.2.x/NEWS: + - Update NEWS file + +2018-03-25 13:45:13 michael + + * [r8425] /ircd-hybrid/branches/8.2.x/include/server.h, + /ircd-hybrid/branches/8.2.x/modules/core/m_server.c, + /ircd-hybrid/branches/8.2.x/modules/m_connect.c, + /ircd-hybrid/branches/8.2.x/src/ircd.c, + /ircd-hybrid/branches/8.2.x/src/server.c: + - Rename some functions to comply with naming convention + +2018-03-24 15:12:29 michael + + * [r8424] /ircd-hybrid/branches/8.2.x/modules/core/m_server.c: + - m_server.c:ms_sid(): removed outdated/invalid comment + +2018-03-24 14:54:45 michael + + * [r8421] /ircd-hybrid/branches/8.2.x/modules/core/m_server.c: + - m_server.c:ms_sid(): use source_p->from instead of client_p + +2018-03-24 14:49:50 michael + + * [r8420] /ircd-hybrid/branches/8.2.x/modules/core/m_server.c: + - m_server.c:server_estab(): removed outdated/invalid comment + +2018-03-24 14:39:47 michael + + * [r8417] /ircd-hybrid/branches/8.2.x/doc/technical/fd-management.txt, + /ircd-hybrid/branches/8.2.x/doc/technical/hostmask.txt, + /ircd-hybrid/branches/8.2.x/doc/technical/index.txt, + /ircd-hybrid/branches/8.2.x/doc/technical/network.txt, + /ircd-hybrid/branches/8.2.x/doc/technical/send.txt: + - Remove fd-management.txt hostmask.txt index.txt network.txt send.txt from doc/technical/ + +2018-03-24 14:37:03 michael + + * [r8415] /ircd-hybrid/branches/8.2.x/include/server_capab.h, + /ircd-hybrid/branches/8.2.x/src/server_capab.c: + - Remove CHW and HOPS server capabilities. These are mandatory for quite some time now. + +2018-03-22 14:09:06 michael + + * [r8413] /ircd-hybrid/branches/8.2.x/include/s_bsd.h, + /ircd-hybrid/branches/8.2.x/src/client.c, + /ircd-hybrid/branches/8.2.x/src/ircd.c, + /ircd-hybrid/branches/8.2.x/src/packet.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd_devpoll.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd_epoll.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd_kqueue.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd_poll.c, + /ircd-hybrid/branches/8.2.x/src/send.c: + - Rename some functions to comply with naming convention + +2018-03-21 13:19:52 michael + + * [r8411] /ircd-hybrid/branches/8.2.x/src/ircd_signal.c: + - ircd_signal.c:setup_signals(): use NULL instead of 0 as third argument for sigaction() + +2018-03-21 12:57:55 michael + + * [r8410] /ircd-hybrid/branches/8.2.x/NEWS: + - Update NEWS file + +2018-03-21 12:55:20 michael + + * [r8408] /ircd-hybrid/branches/8.2.x/modules/m_stats.c: + - m_stats.c:stats_tstats(): fixed 'unknown closes' statistic; minor cleanup + +2018-03-19 15:39:50 michael + + * [r8406] /ircd-hybrid/branches/8.2.x/modules/m_userhost.c: + - m_userhost.c:m_userhost(): removed pointless MyConnect() test which is a lazylink leftover + +2018-03-19 15:33:39 michael + + * [r8404] /ircd-hybrid/branches/8.2.x/modules/m_userhost.c: + - m_userhost.c:m_userhost(): changed size of 'response' buffer to something more sane + +2018-03-18 15:14:25 michael + + * [r8402] /ircd-hybrid/branches/8.2.x/src/server.c: + - server.c:serv_connect_callback, finish_ssl_server_handshake: cleanups; immediately continue with read_packet() + +2018-03-18 12:49:08 michael + + * [r8400] /ircd-hybrid/branches/8.2.x/src/client.c: + - client.c:client_free(): remove some assert() that are now no longer valid + +2018-03-18 10:42:53 michael + + * [r8398] /ircd-hybrid/branches/8.2.x/src/client.c: + - client.c:dead_link_on_read(): replace two report_error with a sendto_realops_flags/ilog combo + +2018-03-18 09:47:47 michael + + * [r8396] /ircd-hybrid/branches/8.2.x/src/list.c: + - list.c: revert 'dlinkDelete(): reset m->data as well' + +2018-03-18 09:13:20 michael + + * [r8394] /ircd-hybrid/branches/8.2.x/include/conf.h, + /ircd-hybrid/branches/8.2.x/modules/core/m_mode.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_server.c, + /ircd-hybrid/branches/8.2.x/modules/m_oper.c, + /ircd-hybrid/branches/8.2.x/modules/m_svsmode.c, + /ircd-hybrid/branches/8.2.x/src/client.c, + /ircd-hybrid/branches/8.2.x/src/conf.c, + /ircd-hybrid/branches/8.2.x/src/server.c: + - Rename attach_conf() -> conf_attach(), detach_conf() -> conf_detach(); clean up documentation + +2018-03-18 08:53:46 michael + + * [r8392] /ircd-hybrid/branches/8.2.x/include/s_bsd.h, + /ircd-hybrid/branches/8.2.x/src/client.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd.c: + - Move close_connection() from s_bsd.c to client.c + +2018-03-17 17:43:52 michael + + * [r8390] /ircd-hybrid/branches/8.2.x/include/conf.h, + /ircd-hybrid/branches/8.2.x/modules/m_connect.c, + /ircd-hybrid/branches/8.2.x/modules/m_set.c, + /ircd-hybrid/branches/8.2.x/src/conf.c, + /ircd-hybrid/branches/8.2.x/src/server.c: + - Clean up some awful CONF_SERVER handling in serv_connect() + +2018-03-16 16:23:06 michael + + * [r8388] /ircd-hybrid/branches/8.2.x/src/hash.c: + - hash.c:free_list_task(): properly unlink nodes from their lists even though memory is freed solely for debugging purposes + +2018-03-16 16:10:18 michael + + * [r8386] /ircd-hybrid/branches/8.2.x/Makefile.in, + /ircd-hybrid/branches/8.2.x/aclocal.m4, + /ircd-hybrid/branches/8.2.x/config.h.in, + /ircd-hybrid/branches/8.2.x/configure, + /ircd-hybrid/branches/8.2.x/doc/Makefile.in, + /ircd-hybrid/branches/8.2.x/help/Makefile.in, + /ircd-hybrid/branches/8.2.x/libltdl/Makefile.in, + /ircd-hybrid/branches/8.2.x/modules/Makefile.in, + /ircd-hybrid/branches/8.2.x/modules/core/Makefile.in, + /ircd-hybrid/branches/8.2.x/modules/extra/Makefile.in, + /ircd-hybrid/branches/8.2.x/src/Makefile.in, + /ircd-hybrid/branches/8.2.x/tools/Makefile.in: + - autoreconf + +2018-03-16 16:06:38 michael + + * [r8384] /ircd-hybrid/branches/8.2.x/INSTALL, + /ircd-hybrid/branches/8.2.x/NEWS, + /ircd-hybrid/branches/8.2.x/configure.ac, + /ircd-hybrid/branches/8.2.x/include/channel.h, + /ircd-hybrid/branches/8.2.x/include/dbuf.h, + /ircd-hybrid/branches/8.2.x/include/list.h, + /ircd-hybrid/branches/8.2.x/include/mempool.h, + /ircd-hybrid/branches/8.2.x/include/userhost.h, + /ircd-hybrid/branches/8.2.x/include/watch.h, + /ircd-hybrid/branches/8.2.x/include/whowas.h, + /ircd-hybrid/branches/8.2.x/m4/ax_arg_disable_mempool.m4, + /ircd-hybrid/branches/8.2.x/m4/ax_mempool_chunksizes.m4, + /ircd-hybrid/branches/8.2.x/src/Makefile.am, + /ircd-hybrid/branches/8.2.x/src/auth.c, + /ircd-hybrid/branches/8.2.x/src/channel.c, + /ircd-hybrid/branches/8.2.x/src/channel_mode.c, + /ircd-hybrid/branches/8.2.x/src/client.c, + /ircd-hybrid/branches/8.2.x/src/dbuf.c, + /ircd-hybrid/branches/8.2.x/src/ipcache.c, + /ircd-hybrid/branches/8.2.x/src/ircd.c, + /ircd-hybrid/branches/8.2.x/src/list.c, + /ircd-hybrid/branches/8.2.x/src/mempool.c, + /ircd-hybrid/branches/8.2.x/src/res.c, + /ircd-hybrid/branches/8.2.x/src/userhost.c, + /ircd-hybrid/branches/8.2.x/src/watch.c, + /ircd-hybrid/branches/8.2.x/src/whowas.c: + - Rip out mempool + +2018-03-14 10:11:26 michael + + * [r8382] /ircd-hybrid/branches/8.2.x/src/s_bsd_epoll.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd_kqueue.c: + - s_bsd_epoll.c, s_bsd_kqueue.c: make use of epoll_event.data.ptr and kevent.udata + +2018-03-12 15:23:29 michael + + * [r8380] /ircd-hybrid/branches/8.2.x/include/defaults.h: + - defaults.h: change NETWORK_NAME_DEFAULT and NETWORK_DESC_DEFAULT + +2018-03-11 10:56:39 michael + + * [r8378] /ircd-hybrid/branches/8.2.x/include/fdlist.h, + /ircd-hybrid/branches/8.2.x/modules/m_stats.c, + /ircd-hybrid/branches/8.2.x/src/fdlist.c: + - Move fd_dump() to m_stats.c; rename it to stats_fdlist() + +2018-03-10 14:44:11 michael + + * [r8376] /ircd-hybrid/branches/8.2.x/src/client.c: + - client.c: moved clear_invite_list(), and del_all_accepts() calls from exit_one_client() to exit_client() + +2018-03-10 13:27:33 michael + + * [r8375] /ircd-hybrid/branches/8.2.x/NEWS: + - Update NEWS file + +2018-03-09 15:39:53 michael + + * [r8374] /ircd-hybrid/branches/8.2.x/NEWS: + - Update NEWS + +2018-03-09 15:06:45 michael + + * [r8372] /ircd-hybrid/branches/8.2.x/include/client.h, + /ircd-hybrid/branches/8.2.x/modules/core/m_mode.c, + /ircd-hybrid/branches/8.2.x/modules/m_oper.c, + /ircd-hybrid/branches/8.2.x/modules/m_svsmode.c, + /ircd-hybrid/branches/8.2.x/modules/m_svstag.c, + /ircd-hybrid/branches/8.2.x/src/client.c: + - Fixed bug spotted by Erick J. Velez where ircd would not remove RPL_WHOISOPERATOR based svstags when deoppering. + +2018-03-07 13:56:54 michael + + * [r8371] /ircd-hybrid/branches/8.2.x/Makefile.in, + /ircd-hybrid/branches/8.2.x/aclocal.m4, + /ircd-hybrid/branches/8.2.x/configure, + /ircd-hybrid/branches/8.2.x/doc/Makefile.in, + /ircd-hybrid/branches/8.2.x/help/Makefile.in, + /ircd-hybrid/branches/8.2.x/libltdl/Makefile.in, + /ircd-hybrid/branches/8.2.x/modules/Makefile.in, + /ircd-hybrid/branches/8.2.x/modules/core/Makefile.in, + /ircd-hybrid/branches/8.2.x/modules/extra/Makefile.in, + /ircd-hybrid/branches/8.2.x/src/Makefile.in, + /ircd-hybrid/branches/8.2.x/tools/Makefile.in: + - autoreconf + +2018-03-07 13:55:29 michael + + * [r8368] /ircd-hybrid/branches/8.2.x/configure.ac, + /ircd-hybrid/branches/8.2.x/m4/ax_gcc_stack_protect.m4, + /ircd-hybrid/branches/8.2.x/m4/gcc_stack_protect.m4: + - Move 'gcc_stack_protect' to 'ax_gcc_stack_protect' + +2018-03-05 14:51:02 michael + + * [r8366] /ircd-hybrid/branches/8.2.x/include/channel.h, + /ircd-hybrid/branches/8.2.x/modules/core/m_join.c, + /ircd-hybrid/branches/8.2.x/src/channel.c: + - "JOIN 0" is now no longer supported + +2018-03-04 12:59:06 michael + + * [r8364] /ircd-hybrid/branches/8.2.x/src/fdlist.c: + - fdlist.c: remove unused header includes + +2018-03-04 09:26:48 michael + + * [r8362] /ircd-hybrid/branches/8.2.x/src/res.c: + - res.c:restart_resolver(): Added sanity test. ResolverFileDescriptor might be NULL at this point + +2018-03-04 09:22:26 michael + + * [r8360] /ircd-hybrid/branches/8.2.x/src/auth.c: + - auth.c: added some assert() + +2018-03-04 09:19:00 michael + + * [r8358] /ircd-hybrid/branches/8.2.x/INSTALL, + /ircd-hybrid/branches/8.2.x/README: + - Update INSTALL and README + +2018-03-04 08:57:37 michael + + * [r8357] /ircd-hybrid/branches/8.2.x/Makefile.in, + /ircd-hybrid/branches/8.2.x/aclocal.m4, + /ircd-hybrid/branches/8.2.x/configure, + /ircd-hybrid/branches/8.2.x/doc/Makefile.in, + /ircd-hybrid/branches/8.2.x/help/Makefile.in, + /ircd-hybrid/branches/8.2.x/libltdl/Makefile.in, + /ircd-hybrid/branches/8.2.x/modules/Makefile.in, + /ircd-hybrid/branches/8.2.x/modules/core/Makefile.in, + /ircd-hybrid/branches/8.2.x/modules/extra/Makefile.in, + /ircd-hybrid/branches/8.2.x/src/Makefile.in, + /ircd-hybrid/branches/8.2.x/tools/Makefile.in: + - autoreconf + +2018-03-04 08:55:42 michael + + * [r8354] /ircd-hybrid/branches/8.2.x/configure.ac, + /ircd-hybrid/branches/8.2.x/m4/ac_define_dir.m4, + /ircd-hybrid/branches/8.2.x/m4/ax_define_dir.m4: + - Moved AC_DEFINE_DIR to AX_DEFINE_DIR + +2018-03-04 08:52:56 michael + + * [r8353] /ircd-hybrid/branches/8.2.x/configure.ac, + /ircd-hybrid/branches/8.2.x/include/patchlevel.h: + - Bump version to ircd-hybrid 8.2.23 + +2018-03-04 08:36:42 michael + + * [r8352] /ircd-hybrid/branches/8.2.x/NEWS: + - Update NEWS file + +2018-03-04 08:27:17 michael + + * [r8350] /ircd-hybrid/branches/8.2.x/src/mempool.c: + - mempool.c:mp_pool_init(): fixed compile warning with --disable-mempool + +2018-03-04 08:23:49 michael + + * [r8348] /ircd-hybrid/branches/8.2.x/include/fdlist.h, + /ircd-hybrid/branches/8.2.x/modules/m_svsmode.c, + /ircd-hybrid/branches/8.2.x/src/auth.c, + /ircd-hybrid/branches/8.2.x/src/ipcache.c, + /ircd-hybrid/branches/8.2.x/src/listener.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd.c, + /ircd-hybrid/branches/8.2.x/src/send.c: + - Style corrections + +2018-03-03 19:17:21 michael + + * [r8346] /ircd-hybrid/branches/8.2.x/src/auth.c: + - auth.c:make_auth(): fixes to previous commit + +2018-03-03 19:05:53 michael + + * [r8344] /ircd-hybrid/branches/8.2.x/src/auth.c: + - auth.c:make_auth(): properly assign 'auth' to 'auth->client->connection->auth' + +2018-03-03 18:22:31 michael + + * [r8343] /ircd-hybrid/branches/8.2.x/src/s_bsd_kqueue.c: + - s_bsd_kqueue.c:comm_select(): fixed another compile error + +2018-03-03 18:13:13 michael + + * [r8340] /ircd-hybrid/branches/8.2.x/src/s_bsd_kqueue.c: + - s_bsd_kqueue.c:comm_select(): fixed build + +2018-03-03 17:26:59 michael + + * [r8338] /ircd-hybrid/branches/8.2.x/include/auth.h, + /ircd-hybrid/branches/8.2.x/include/client.h, + /ircd-hybrid/branches/8.2.x/include/fdlist.h, + /ircd-hybrid/branches/8.2.x/include/listener.h, + /ircd-hybrid/branches/8.2.x/include/s_bsd.h, + /ircd-hybrid/branches/8.2.x/modules/core/m_nick.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_server.c, + /ircd-hybrid/branches/8.2.x/modules/m_svsnick.c, + /ircd-hybrid/branches/8.2.x/src/auth.c, + /ircd-hybrid/branches/8.2.x/src/client.c, + /ircd-hybrid/branches/8.2.x/src/conf_cluster.c, + /ircd-hybrid/branches/8.2.x/src/fdlist.c, + /ircd-hybrid/branches/8.2.x/src/listener.c, + /ircd-hybrid/branches/8.2.x/src/packet.c, + /ircd-hybrid/branches/8.2.x/src/parse.c, + /ircd-hybrid/branches/8.2.x/src/res.c, + /ircd-hybrid/branches/8.2.x/src/restart.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd_devpoll.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd_epoll.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd_kqueue.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd_poll.c, + /ircd-hybrid/branches/8.2.x/src/send.c, + /ircd-hybrid/branches/8.2.x/src/server.c, + /ircd-hybrid/branches/8.2.x/src/user.c: + - Restore fd_table. No longer allocate fde_t items from within any other structures like the AuthRequest, or Connection structure + - struct AuthRequest once again is no longer allocated from within the Connection structure + +2018-03-01 18:06:33 michael + + * [r8336] /ircd-hybrid/branches/8.2.x/src/client.c: + - client.c:client_free(): fixed assert() broken by previous commit + +2018-03-01 17:11:29 michael + + * [r8334] /ircd-hybrid/branches/8.2.x/src/client.c: + - client.c:client_free(): inspect most of the relevant 'struct Client' and 'struct Connection' members + +2018-03-01 15:40:30 michael + + * [r8332] /ircd-hybrid/branches/8.2.x/include/client.h: + - client.h: removed 'country_id' libgeoip leftover from Client struct + +2018-02-28 16:33:00 michael + + * [r8331] /ircd-hybrid/branches/8.2.x/Makefile.in, + /ircd-hybrid/branches/8.2.x/aclocal.m4, + /ircd-hybrid/branches/8.2.x/configure, + /ircd-hybrid/branches/8.2.x/doc/Makefile.in, + /ircd-hybrid/branches/8.2.x/help/Makefile.in, + /ircd-hybrid/branches/8.2.x/libltdl/Makefile.in, + /ircd-hybrid/branches/8.2.x/modules/Makefile.in, + /ircd-hybrid/branches/8.2.x/modules/core/Makefile.in, + /ircd-hybrid/branches/8.2.x/modules/extra/Makefile.in, + /ircd-hybrid/branches/8.2.x/src/Makefile.in, + /ircd-hybrid/branches/8.2.x/tools/Makefile.in: + - autoreconf + +2018-02-28 16:30:39 michael + + * [r8328] /ircd-hybrid/branches/8.2.x/configure.ac, + /ircd-hybrid/branches/8.2.x/m4/ax_arg_enable_efence.m4: + - Add --enable-efence switch to allow easy linking with the electric fence memory debugger library + +2018-02-28 14:53:28 michael + + * [r8327] /ircd-hybrid/branches/8.2.x/Makefile.in, + /ircd-hybrid/branches/8.2.x/aclocal.m4, + /ircd-hybrid/branches/8.2.x/config.h.in, + /ircd-hybrid/branches/8.2.x/configure, + /ircd-hybrid/branches/8.2.x/doc/Makefile.in, + /ircd-hybrid/branches/8.2.x/help/Makefile.in, + /ircd-hybrid/branches/8.2.x/libltdl/Makefile.in, + /ircd-hybrid/branches/8.2.x/modules/Makefile.in, + /ircd-hybrid/branches/8.2.x/modules/core/Makefile.in, + /ircd-hybrid/branches/8.2.x/modules/extra/Makefile.in, + /ircd-hybrid/branches/8.2.x/src/Makefile.in, + /ircd-hybrid/branches/8.2.x/tools/Makefile.in: + - autoreconf + +2018-02-28 14:52:14 michael + + * [r8324] /ircd-hybrid/branches/8.2.x/configure.ac, + /ircd-hybrid/branches/8.2.x/m4/ax_arg_disable_mempool.m4, + /ircd-hybrid/branches/8.2.x/src/mempool.c: + - The memory pooling allocator can be disabled with the --disable-mempool switch now + +2018-02-28 14:15:53 michael + + * [r8323] /ircd-hybrid/branches/8.2.x/m4/ax_append_compile_flags.m4: + - ax_append_compile_flags.m4: update to latest version + +2018-02-28 14:13:09 michael + + * [r8320] /ircd-hybrid/branches/8.2.x/m4/ax_arg_enable_warnings.m4: + - ax_arg_enable_warnings.m4: add -Wduplicated-cond + +2018-02-28 12:59:31 michael + + * [r8319] /ircd-hybrid/branches/8.2.x/NEWS: + - Update NEWS file + +2018-02-28 12:49:36 michael + + * [r8317] /ircd-hybrid/branches/8.2.x/src/conf_lexer.c, + /ircd-hybrid/branches/8.2.x/src/conf_parser.c, + /ircd-hybrid/branches/8.2.x/src/conf_parser.h: + - Recreate parser files + +2018-02-28 12:48:39 michael + + * [r8316] /ircd-hybrid/branches/8.2.x/Makefile.in, + /ircd-hybrid/branches/8.2.x/aclocal.m4, + /ircd-hybrid/branches/8.2.x/compile, + /ircd-hybrid/branches/8.2.x/config.guess, + /ircd-hybrid/branches/8.2.x/config.h.in, + /ircd-hybrid/branches/8.2.x/config.sub, + /ircd-hybrid/branches/8.2.x/configure, + /ircd-hybrid/branches/8.2.x/depcomp, + /ircd-hybrid/branches/8.2.x/doc/Makefile.in, + /ircd-hybrid/branches/8.2.x/help/Makefile.in, + /ircd-hybrid/branches/8.2.x/install-sh, + /ircd-hybrid/branches/8.2.x/libltdl/Makefile.in, + /ircd-hybrid/branches/8.2.x/missing, + /ircd-hybrid/branches/8.2.x/modules/Makefile.in, + /ircd-hybrid/branches/8.2.x/modules/core/Makefile.in, + /ircd-hybrid/branches/8.2.x/modules/extra/Makefile.in, + /ircd-hybrid/branches/8.2.x/src/Makefile.in, + /ircd-hybrid/branches/8.2.x/tools/Makefile.in, + /ircd-hybrid/branches/8.2.x/ylwrap: + - autoreconf + +2018-02-28 12:45:36 michael + + * [r8313] /ircd-hybrid/branches/8.2.x/configure.ac, + /ircd-hybrid/branches/8.2.x/doc/reference.conf, + /ircd-hybrid/branches/8.2.x/include/conf.h, + /ircd-hybrid/branches/8.2.x/include/conf_resv.h, + /ircd-hybrid/branches/8.2.x/include/ircd.h, + /ircd-hybrid/branches/8.2.x/include/stdinc.h, + /ircd-hybrid/branches/8.2.x/m4/ax_arg_libgeoip.m4, + /ircd-hybrid/branches/8.2.x/modules/m_info.c, + /ircd-hybrid/branches/8.2.x/src/conf.c, + /ircd-hybrid/branches/8.2.x/src/conf_lexer.l, + /ircd-hybrid/branches/8.2.x/src/conf_parser.y, + /ircd-hybrid/branches/8.2.x/src/conf_resv.c, + /ircd-hybrid/branches/8.2.x/src/ircd.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd.c: + - Remove experimental libgeoip support + +2018-02-28 11:55:22 michael + + * [r8312] /ircd-hybrid/branches/8.2.x/src/client.c: + - client.c:client_free(): set client_p->connection = NULL after freeing it + +2018-02-28 11:45:52 michael + + * [r8309] /ircd-hybrid/branches/8.2.x/modules/core/m_server.c, + /ircd-hybrid/branches/8.2.x/modules/m_list.c, + /ircd-hybrid/branches/8.2.x/modules/m_stats.c, + /ircd-hybrid/branches/8.2.x/src/conf.c, + /ircd-hybrid/branches/8.2.x/src/conf_class.c, + /ircd-hybrid/branches/8.2.x/src/hostmask.c, + /ircd-hybrid/branches/8.2.x/src/listener.c, + /ircd-hybrid/branches/8.2.x/src/modules.c, + /ircd-hybrid/branches/8.2.x/src/motd.c, + /ircd-hybrid/branches/8.2.x/src/parse.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd.c, + /ircd-hybrid/branches/8.2.x/src/server.c: + - Clean up remaining sizeof() to sizeof(variable) + +2018-02-27 16:19:41 michael + + * [r8308] /ircd-hybrid/branches/8.2.x/src/s_bsd.c: + - s_bsd.c: removed useless auth.h header include + +2018-02-27 16:17:58 michael + + * [r8305] /ircd-hybrid/branches/8.2.x/include/auth.h, + /ircd-hybrid/branches/8.2.x/src/auth.c: + - auth.h, auth.c: reformating; rename some functions to comply with naming convention + +2018-02-27 15:05:22 michael + + * [r8303] /ircd-hybrid/branches/8.2.x/include/auth.h, + /ircd-hybrid/branches/8.2.x/src/auth.c: + - auth.h, auth.c: made release_auth_client() 'static'; removed declaration in auth.h + +2018-02-25 09:44:54 michael + + * [r8301] /ircd-hybrid/branches/8.2.x/modules/m_help.c: + - m_help.c:do_help(): silence some valgrind warning + +2018-02-25 08:05:30 michael + + * [r8299] /ircd-hybrid/branches/8.2.x/src/auth.c: + - auth.c:auth_delete(): clear AM_DOING_AUTH, and AM_DNS_PENDING flags as appropriate + +2018-02-25 06:15:28 michael + + * [r8297] /ircd-hybrid/branches/8.2.x/src/auth.c: + - auth.c:release_auth_client(): use the AddFlag macro + +2018-02-25 05:19:58 michael + + * [r8295] /ircd-hybrid/branches/8.2.x/src/list.c: + - list.c:dlinkDelete(): added assert() + +2018-02-25 04:48:15 michael + + * [r8293] /ircd-hybrid/branches/8.2.x/src/client.c: + - client.c:exit_client(): added assert(); style correction + +2018-02-25 04:38:11 michael + + * [r8291] /ircd-hybrid/branches/8.2.x/src/client.c: + - client.c:exit_aborted_clients(): deduplicate + +2018-02-25 04:33:47 michael + + * [r8289] /ircd-hybrid/branches/8.2.x/src/list.c: + - list.c:dlinkDelete(): reset m->data as well + +2018-02-24 15:10:04 michael + + * [r8287] /ircd-hybrid/branches/8.2.x/src/client.c: + - client.c:client_free(): fixed compile error introduced by previous changes + +2018-02-24 14:41:44 michael + + * [r8285] /ircd-hybrid/branches/8.2.x/src/client.c: + - client.c:client_free(): sprinkle some assert() + +2018-02-24 11:48:07 michael + + * [r8283] /ircd-hybrid/branches/8.2.x/src/mempool.c: + - mempool.c:mp_pool_new(): minor clarification in some debug log message + +2018-02-23 12:24:01 michael + + * [r8281] /ircd-hybrid/branches/8.2.x/src/ircd.c: + - ircd.c:main(): show 'ircd_version' and 'serno' in 'Server ready' message + +2018-02-20 14:30:33 michael + + * [r8280] /ircd-hybrid/branches/8.2.x/INSTALL, + /ircd-hybrid/branches/8.2.x/doc/ircd.8, + /ircd-hybrid/branches/8.2.x/doc/kline.txt, + /ircd-hybrid/branches/8.2.x/doc/reference.conf, + /ircd-hybrid/branches/8.2.x/doc/resv.txt, + /ircd-hybrid/branches/8.2.x/doc/serverhide.txt, + /ircd-hybrid/branches/8.2.x/include/auth.h, + /ircd-hybrid/branches/8.2.x/include/channel.h, + /ircd-hybrid/branches/8.2.x/include/channel_mode.h, + /ircd-hybrid/branches/8.2.x/include/client.h, + /ircd-hybrid/branches/8.2.x/include/conf.h, + /ircd-hybrid/branches/8.2.x/include/conf_class.h, + /ircd-hybrid/branches/8.2.x/include/conf_cluster.h, + /ircd-hybrid/branches/8.2.x/include/conf_db.h, + /ircd-hybrid/branches/8.2.x/include/conf_gecos.h, + /ircd-hybrid/branches/8.2.x/include/conf_pseudo.h, + /ircd-hybrid/branches/8.2.x/include/conf_resv.h, + /ircd-hybrid/branches/8.2.x/include/conf_service.h, + /ircd-hybrid/branches/8.2.x/include/conf_shared.h, + /ircd-hybrid/branches/8.2.x/include/dbuf.h, + /ircd-hybrid/branches/8.2.x/include/defaults.h, + /ircd-hybrid/branches/8.2.x/include/event.h, + /ircd-hybrid/branches/8.2.x/include/fdlist.h, + /ircd-hybrid/branches/8.2.x/include/hash.h, + /ircd-hybrid/branches/8.2.x/include/hostmask.h, + /ircd-hybrid/branches/8.2.x/include/id.h, + /ircd-hybrid/branches/8.2.x/include/ipcache.h, + /ircd-hybrid/branches/8.2.x/include/irc_string.h, + /ircd-hybrid/branches/8.2.x/include/ircd.h, + /ircd-hybrid/branches/8.2.x/include/ircd_defs.h, + /ircd-hybrid/branches/8.2.x/include/ircd_getopt.h, + /ircd-hybrid/branches/8.2.x/include/ircd_signal.h, + /ircd-hybrid/branches/8.2.x/include/isupport.h, + /ircd-hybrid/branches/8.2.x/include/list.h, + /ircd-hybrid/branches/8.2.x/include/listener.h, + /ircd-hybrid/branches/8.2.x/include/log.h, + /ircd-hybrid/branches/8.2.x/include/memory.h, + /ircd-hybrid/branches/8.2.x/include/mempool.h, + /ircd-hybrid/branches/8.2.x/include/misc.h, + /ircd-hybrid/branches/8.2.x/include/modules.h, + /ircd-hybrid/branches/8.2.x/include/motd.h, + /ircd-hybrid/branches/8.2.x/include/numeric.h, + /ircd-hybrid/branches/8.2.x/include/packet.h, + /ircd-hybrid/branches/8.2.x/include/parse.h, + /ircd-hybrid/branches/8.2.x/include/patchlevel.h, + /ircd-hybrid/branches/8.2.x/include/res.h, + /ircd-hybrid/branches/8.2.x/include/restart.h, + /ircd-hybrid/branches/8.2.x/include/s_bsd.h, + /ircd-hybrid/branches/8.2.x/include/send.h, + /ircd-hybrid/branches/8.2.x/include/server.h, + /ircd-hybrid/branches/8.2.x/include/server_capab.h, + /ircd-hybrid/branches/8.2.x/include/tls.h, + /ircd-hybrid/branches/8.2.x/include/tls_gnutls.h, + /ircd-hybrid/branches/8.2.x/include/tls_none.h, + /ircd-hybrid/branches/8.2.x/include/tls_openssl.h, + /ircd-hybrid/branches/8.2.x/include/user.h, + /ircd-hybrid/branches/8.2.x/include/userhost.h, + /ircd-hybrid/branches/8.2.x/include/watch.h, + /ircd-hybrid/branches/8.2.x/include/whowas.h, + /ircd-hybrid/branches/8.2.x/modules/core/m_bmask.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_die.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_error.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_join.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_kick.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_kill.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_message.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_mode.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_nick.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_part.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_quit.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_server.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_sjoin.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_squit.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_tmode.c, + /ircd-hybrid/branches/8.2.x/modules/extra/m_opme.c, + /ircd-hybrid/branches/8.2.x/modules/m_accept.c, + /ircd-hybrid/branches/8.2.x/modules/m_admin.c, + /ircd-hybrid/branches/8.2.x/modules/m_away.c, + /ircd-hybrid/branches/8.2.x/modules/m_cap.c, + /ircd-hybrid/branches/8.2.x/modules/m_capab.c, + /ircd-hybrid/branches/8.2.x/modules/m_certfp.c, + /ircd-hybrid/branches/8.2.x/modules/m_close.c, + /ircd-hybrid/branches/8.2.x/modules/m_connect.c, + /ircd-hybrid/branches/8.2.x/modules/m_dline.c, + /ircd-hybrid/branches/8.2.x/modules/m_encap.c, + /ircd-hybrid/branches/8.2.x/modules/m_eob.c, + /ircd-hybrid/branches/8.2.x/modules/m_etrace.c, + /ircd-hybrid/branches/8.2.x/modules/m_globops.c, + /ircd-hybrid/branches/8.2.x/modules/m_hash.c, + /ircd-hybrid/branches/8.2.x/modules/m_help.c, + /ircd-hybrid/branches/8.2.x/modules/m_info.c, + /ircd-hybrid/branches/8.2.x/modules/m_invite.c, + /ircd-hybrid/branches/8.2.x/modules/m_ison.c, + /ircd-hybrid/branches/8.2.x/modules/m_kline.c, + /ircd-hybrid/branches/8.2.x/modules/m_knock.c, + /ircd-hybrid/branches/8.2.x/modules/m_links.c, + /ircd-hybrid/branches/8.2.x/modules/m_list.c, + /ircd-hybrid/branches/8.2.x/modules/m_locops.c, + /ircd-hybrid/branches/8.2.x/modules/m_lusers.c, + /ircd-hybrid/branches/8.2.x/modules/m_map.c, + /ircd-hybrid/branches/8.2.x/modules/m_module.c, + /ircd-hybrid/branches/8.2.x/modules/m_motd.c, + /ircd-hybrid/branches/8.2.x/modules/m_names.c, + /ircd-hybrid/branches/8.2.x/modules/m_oper.c, + /ircd-hybrid/branches/8.2.x/modules/m_pass.c, + /ircd-hybrid/branches/8.2.x/modules/m_ping.c, + /ircd-hybrid/branches/8.2.x/modules/m_pong.c, + /ircd-hybrid/branches/8.2.x/modules/m_post.c, + /ircd-hybrid/branches/8.2.x/modules/m_rehash.c, + /ircd-hybrid/branches/8.2.x/modules/m_restart.c, + /ircd-hybrid/branches/8.2.x/modules/m_resv.c, + /ircd-hybrid/branches/8.2.x/modules/m_set.c, + /ircd-hybrid/branches/8.2.x/modules/m_stats.c, + /ircd-hybrid/branches/8.2.x/modules/m_svinfo.c, + /ircd-hybrid/branches/8.2.x/modules/m_svshost.c, + /ircd-hybrid/branches/8.2.x/modules/m_svsjoin.c, + /ircd-hybrid/branches/8.2.x/modules/m_svskill.c, + /ircd-hybrid/branches/8.2.x/modules/m_svsmode.c, + /ircd-hybrid/branches/8.2.x/modules/m_svsnick.c, + /ircd-hybrid/branches/8.2.x/modules/m_svspart.c, + /ircd-hybrid/branches/8.2.x/modules/m_svstag.c, + /ircd-hybrid/branches/8.2.x/modules/m_tburst.c, + /ircd-hybrid/branches/8.2.x/modules/m_time.c, + /ircd-hybrid/branches/8.2.x/modules/m_topic.c, + /ircd-hybrid/branches/8.2.x/modules/m_trace.c, + /ircd-hybrid/branches/8.2.x/modules/m_undline.c, + /ircd-hybrid/branches/8.2.x/modules/m_unkline.c, + /ircd-hybrid/branches/8.2.x/modules/m_unresv.c, + /ircd-hybrid/branches/8.2.x/modules/m_unxline.c, + /ircd-hybrid/branches/8.2.x/modules/m_user.c, + /ircd-hybrid/branches/8.2.x/modules/m_userhost.c, + /ircd-hybrid/branches/8.2.x/modules/m_version.c, + /ircd-hybrid/branches/8.2.x/modules/m_wallops.c, + /ircd-hybrid/branches/8.2.x/modules/m_watch.c, + /ircd-hybrid/branches/8.2.x/modules/m_webirc.c, + /ircd-hybrid/branches/8.2.x/modules/m_who.c, + /ircd-hybrid/branches/8.2.x/modules/m_whois.c, + /ircd-hybrid/branches/8.2.x/modules/m_whowas.c, + /ircd-hybrid/branches/8.2.x/modules/m_xline.c, + /ircd-hybrid/branches/8.2.x/src/auth.c, + /ircd-hybrid/branches/8.2.x/src/channel.c, + /ircd-hybrid/branches/8.2.x/src/channel_mode.c, + /ircd-hybrid/branches/8.2.x/src/client.c, + /ircd-hybrid/branches/8.2.x/src/conf.c, + /ircd-hybrid/branches/8.2.x/src/conf_class.c, + /ircd-hybrid/branches/8.2.x/src/conf_cluster.c, + /ircd-hybrid/branches/8.2.x/src/conf_db.c, + /ircd-hybrid/branches/8.2.x/src/conf_gecos.c, + /ircd-hybrid/branches/8.2.x/src/conf_lexer.c, + /ircd-hybrid/branches/8.2.x/src/conf_lexer.l, + /ircd-hybrid/branches/8.2.x/src/conf_parser.y, + /ircd-hybrid/branches/8.2.x/src/conf_pseudo.c, + /ircd-hybrid/branches/8.2.x/src/conf_resv.c, + /ircd-hybrid/branches/8.2.x/src/conf_service.c, + /ircd-hybrid/branches/8.2.x/src/conf_shared.c, + /ircd-hybrid/branches/8.2.x/src/dbuf.c, + /ircd-hybrid/branches/8.2.x/src/event.c, + /ircd-hybrid/branches/8.2.x/src/fdlist.c, + /ircd-hybrid/branches/8.2.x/src/getopt.c, + /ircd-hybrid/branches/8.2.x/src/hash.c, + /ircd-hybrid/branches/8.2.x/src/hostmask.c, + /ircd-hybrid/branches/8.2.x/src/id.c, + /ircd-hybrid/branches/8.2.x/src/ipcache.c, + /ircd-hybrid/branches/8.2.x/src/irc_string.c, + /ircd-hybrid/branches/8.2.x/src/ircd.c, + /ircd-hybrid/branches/8.2.x/src/ircd_signal.c, + /ircd-hybrid/branches/8.2.x/src/isupport.c, + /ircd-hybrid/branches/8.2.x/src/list.c, + /ircd-hybrid/branches/8.2.x/src/listener.c, + /ircd-hybrid/branches/8.2.x/src/log.c, + /ircd-hybrid/branches/8.2.x/src/match.c, + /ircd-hybrid/branches/8.2.x/src/memory.c, + /ircd-hybrid/branches/8.2.x/src/mempool.c, + /ircd-hybrid/branches/8.2.x/src/misc.c, + /ircd-hybrid/branches/8.2.x/src/modules.c, + /ircd-hybrid/branches/8.2.x/src/motd.c, + /ircd-hybrid/branches/8.2.x/src/numeric.c, + /ircd-hybrid/branches/8.2.x/src/packet.c, + /ircd-hybrid/branches/8.2.x/src/parse.c, + /ircd-hybrid/branches/8.2.x/src/res.c, + /ircd-hybrid/branches/8.2.x/src/restart.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd_devpoll.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd_epoll.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd_kqueue.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd_poll.c, + /ircd-hybrid/branches/8.2.x/src/send.c, + /ircd-hybrid/branches/8.2.x/src/server.c, + /ircd-hybrid/branches/8.2.x/src/server_capab.c, + /ircd-hybrid/branches/8.2.x/src/tls_gnutls.c, + /ircd-hybrid/branches/8.2.x/src/tls_none.c, + /ircd-hybrid/branches/8.2.x/src/tls_openssl.c, + /ircd-hybrid/branches/8.2.x/src/user.c, + /ircd-hybrid/branches/8.2.x/src/userhost.c, + /ircd-hybrid/branches/8.2.x/src/version.c, + /ircd-hybrid/branches/8.2.x/src/watch.c, + /ircd-hybrid/branches/8.2.x/src/whowas.c: + - Update copyright years + +2018-02-20 14:15:42 michael + + * [r8277] /ircd-hybrid/branches/8.2.x/modules/m_trace.c: + - m_trace.c:do_trace(): 'tab' should be const here + +2017-09-27 14:53:35 michael + + * [r8275] /ircd-hybrid/branches/8.2.x/src/channel.c: + - channel.c:check_spambot_warning(): stylistic changes; improve readability + +2017-09-27 14:45:32 michael + + * [r8273] /ircd-hybrid/branches/8.2.x/src/channel.c: + - channel.c:check_spambot_warning(): remove extraneous parentheses + +2017-07-19 14:59:12 michael + + * [r8271] /ircd-hybrid/branches/8.2.x/INSTALL: + - Update INSTALL file; clarification on the --enable-debugging switch. + +2017-06-23 13:21:09 michael + + * [r8269] /ircd-hybrid/branches/8.2.x/src/motd.c: + - motd.c:motd_lookup(): fixed indentation + +2017-06-19 12:46:47 michael + + * [r8268] /ircd-hybrid/branches/8.2.x/NEWS: + - Update NEWS file + +2017-06-03 16:28:31 michael + + * [r8266] /ircd-hybrid/branches/8.2.x/modules/m_webirc.c: + - m_webirc.c: from p4: don't allow ips to begin with : + +2017-06-03 16:11:14 michael + + * [r8264] /ircd-hybrid/branches/8.2.x/src/s_bsd.c: + - s_bsd.c: from p4: add_connection(): clean up logic for ips beginning with : + +2017-05-25 12:09:00 michael + + * [r8262] /ircd-hybrid/branches/8.2.x/modules/m_trace.c: + - m_trace.c:do_trace(): restore H6 behavior where the RPL_TRACECLASS list would be sent only on a full TRACE list + +2017-05-25 11:47:57 michael + + * [r8261] /ircd-hybrid/branches/8.2.x/modules/m_encap.c: + - m_encap.c: fixed comments + +2017-05-25 11:47:09 michael + + * [r8258] /ircd-hybrid/branches/8.2.x/modules/m_etrace.c: + - m_etrace.c:do_etrace(): cleanups + +2017-05-25 08:19:01 michael + + * [r8256] /ircd-hybrid/branches/8.2.x/modules/m_trace.c: + - m_trace.c:do_trace(): cleanup/deduplicate + +2017-05-24 13:08:16 michael + + * [r8254] /ircd-hybrid/branches/8.2.x/src/numeric.c, + /ircd-hybrid/branches/8.2.x/src/user.c: + - Change RPL_WELCOME to rfc2812 style now that we have the realhost information in Client::realhost + +2017-05-22 15:28:52 michael + + * [r8252] /ircd-hybrid/branches/8.2.x/include/s_bsd.h, + /ircd-hybrid/branches/8.2.x/src/listener.c, + /ircd-hybrid/branches/8.2.x/src/s_bsd.c: + - Have s_bsd.c:comm_accept() take a fde_t pointer instead of a struct Listener + +2017-05-20 12:40:35 michael + + * [r8250] /ircd-hybrid/branches/8.2.x/src/channel_mode.c: + - channel_mode.c:set_channel_mode(): use explicit NULL + +2017-05-15 13:19:19 michael + + * [r8248] /ircd-hybrid/branches/8.2.x/modules/m_encap.c: + - m_encap.c: documenting + +2017-05-15 13:07:41 michael + + * [r8244] /ircd-hybrid/branches/8.2.x/src/conf_lexer.c: + - flex 2.6.4 + +2017-04-19 09:13:31 michael + + * [r8242] /ircd-hybrid/branches/8.2.x/modules/m_webirc.c: + - m_webirc.c:mr_webirc(): set source_p->realhost here too + +2017-04-17 05:32:37 michael + + * [r8226] /ircd-hybrid/branches/8.2.x/src/channel_mode.c: + - channel_mode.c:channel_modes(): fixed invalid test + +2017-04-16 08:53:37 michael + + * [r8222] /ircd-hybrid/branches/8.2.x/src/client.c, + /ircd-hybrid/branches/8.2.x/src/user.c: + - client.c, user.c: show the real host in client connect/exit notices + +2017-04-16 08:31:33 michael + + * [r8219] /ircd-hybrid/branches/8.2.x/src/auth.c: + - auth.c: add documentation + +2017-04-16 08:18:38 michael + + * [r8216] /ircd-hybrid/branches/8.2.x/src/auth.c, + /ircd-hybrid/branches/8.2.x/src/user.c: + - auth.c: have auth_dns_callback() to check for invalid hostnames rather than in user.c:register_local_user() + +2017-04-16 07:53:54 michael + + * [r8215] /ircd-hybrid/branches/8.2.x/NEWS: + - Update NEWS file + +2017-04-16 07:42:51 michael + + * [r8213] /ircd-hybrid/branches/8.2.x/include/client.h, + /ircd-hybrid/branches/8.2.x/include/server_capab.h, + /ircd-hybrid/branches/8.2.x/include/whowas.h, + /ircd-hybrid/branches/8.2.x/modules/core/m_nick.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_server.c, + /ircd-hybrid/branches/8.2.x/modules/m_whois.c, + /ircd-hybrid/branches/8.2.x/modules/m_whowas.c, + /ircd-hybrid/branches/8.2.x/src/auth.c, + /ircd-hybrid/branches/8.2.x/src/server_capab.c, + /ircd-hybrid/branches/8.2.x/src/user.c, + /ircd-hybrid/branches/8.2.x/src/whowas.c: + - Store real host information in Client.realhost and extend the UID message to send the actual host. + This allows operators to see the real host of a client in /whois and /whowas. + +2017-04-16 06:50:08 michael + + * [r8212] /ircd-hybrid/branches/8.2.x/include/client.h: + - client.h: remove outdated comment on Client.host + +2017-04-16 06:45:01 michael + + * [r8209] /ircd-hybrid/branches/8.2.x/doc/modes.txt, + /ircd-hybrid/branches/8.2.x/help/umode, + /ircd-hybrid/branches/8.2.x/include/client.h, + /ircd-hybrid/branches/8.2.x/include/user.h, + /ircd-hybrid/branches/8.2.x/modules/core/m_mode.c, + /ircd-hybrid/branches/8.2.x/modules/m_svshost.c, + /ircd-hybrid/branches/8.2.x/modules/m_svsmode.c, + /ircd-hybrid/branches/8.2.x/src/user.c: + - Remove UMODE_HIDDENHOST as we don't need a separat mode for that + +2017-04-15 13:48:41 michael + + * [r8195] /ircd-hybrid/branches/8.2.x/include/user.h: + - user.h: remove prototypes for functions that no longer exist + +2017-04-09 12:15:45 michael + + * [r8171] /ircd-hybrid/branches/8.2.x/include/server_capab.h, + /ircd-hybrid/branches/8.2.x/src/server_capab.c: + - server_capab.h, server_capab.c: propset + +2017-04-09 12:13:28 michael + + * [r8169] /ircd-hybrid/branches/8.2.x/include/server_capab.h, + /ircd-hybrid/branches/8.2.x/src/server_capab.c: + - Add server_capab files + +2017-04-09 12:10:57 michael + + * [r8168] /ircd-hybrid/branches/8.2.x/configure, + /ircd-hybrid/branches/8.2.x/src/Makefile.in: + - autoreconf + +2017-04-09 12:08:02 michael + + * [r8165] /ircd-hybrid/branches/8.2.x/include/server.h, + /ircd-hybrid/branches/8.2.x/modules/core/m_server.c, + /ircd-hybrid/branches/8.2.x/modules/m_capab.c, + /ircd-hybrid/branches/8.2.x/modules/m_dline.c, + /ircd-hybrid/branches/8.2.x/modules/m_encap.c, + /ircd-hybrid/branches/8.2.x/modules/m_kline.c, + /ircd-hybrid/branches/8.2.x/modules/m_knock.c, + /ircd-hybrid/branches/8.2.x/modules/m_locops.c, + /ircd-hybrid/branches/8.2.x/modules/m_resv.c, + /ircd-hybrid/branches/8.2.x/modules/m_stats.c, + /ircd-hybrid/branches/8.2.x/modules/m_tburst.c, + /ircd-hybrid/branches/8.2.x/modules/m_undline.c, + /ircd-hybrid/branches/8.2.x/modules/m_unkline.c, + /ircd-hybrid/branches/8.2.x/modules/m_unresv.c, + /ircd-hybrid/branches/8.2.x/modules/m_unxline.c, + /ircd-hybrid/branches/8.2.x/modules/m_xline.c, + /ircd-hybrid/branches/8.2.x/src/Makefile.am, + /ircd-hybrid/branches/8.2.x/src/conf_cluster.c, + /ircd-hybrid/branches/8.2.x/src/ircd.c, + /ircd-hybrid/branches/8.2.x/src/send.c, + /ircd-hybrid/branches/8.2.x/src/server.c: + - Move all CAPAB related code to server_capab.c, and server_capab.h + +2017-04-09 07:28:10 michael + + * [r8162] /ircd-hybrid/branches/8.2.x/src/irc_string.c: + - irc_string.c: sync strlcpy() and strlcat() with latest versions from openbsd + +2017-04-09 06:24:20 michael + + * [r8159] /ircd-hybrid/branches/8.2.x/src/channel_mode.c: + - channel_mode.c: replace some two-case switches with just a small if/else if + +2017-04-08 15:40:45 michael + + * [r8158] /ircd-hybrid/branches/8.2.x/AUTHORS, + /ircd-hybrid/branches/8.2.x/src/version.c: + - Update Riedel's email address + +2017-04-01 16:06:13 michael + + * [r8096] /ircd-hybrid/branches/8.2.x/src/channel_mode.c: + - channel_mode.c:chm_simple(): drop redundant mode changes; deduplicate + +2017-03-29 09:47:08 michael + + * [r8094] /ircd-hybrid/branches/8.2.x/include/channel_mode.h, + /ircd-hybrid/branches/8.2.x/src/channel_mode.c: + - Fixed NULL pointer dereference in chm_nosuch() + +2017-03-29 09:17:20 michael + + * [r8093] /ircd-hybrid/branches/8.2.x/src/channel_mode.c: + - channel_mode.c:cmode_tab[]: use designated initializers + +2017-03-29 08:49:28 michael + + * [r8090] /ircd-hybrid/branches/8.2.x/include/channel_mode.h, + /ircd-hybrid/branches/8.2.x/modules/core/m_join.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_sjoin.c, + /ircd-hybrid/branches/8.2.x/src/channel_mode.c: + - Get rid of chm_registered() and chm_simple_oper() + +2017-03-29 08:21:50 michael + + * [r8088] /ircd-hybrid/branches/8.2.x/include/channel_mode.h, + /ircd-hybrid/branches/8.2.x/modules/core/m_join.c, + /ircd-hybrid/branches/8.2.x/modules/core/m_sjoin.c, + /ircd-hybrid/branches/8.2.x/src/channel_mode.c, + /ircd-hybrid/branches/8.2.x/src/ircd.c: + - Cleanup channel mode table handling + 2017-03-26 06:54:53 michael * [r8085] /ircd-hybrid/branches/8.2.x/NEWS: diff -Nru ircd-hybrid-8.2.22+dfsg.1/compile ircd-hybrid-8.2.24+dfsg.1/compile --- ircd-hybrid-8.2.22+dfsg.1/compile 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/compile 2018-04-04 22:33:37.000000000 +0000 @@ -1,9 +1,9 @@ #! /bin/sh # Wrapper for compilers which do not understand '-c -o'. -scriptversion=2012-10-14.11; # UTC +scriptversion=2016-01-11.22; # UTC -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2017 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify @@ -255,7 +255,8 @@ echo "compile $scriptversion" exit $? ;; - cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) + cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ + icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac @@ -342,6 +343,6 @@ # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff -Nru ircd-hybrid-8.2.22+dfsg.1/config.guess ircd-hybrid-8.2.24+dfsg.1/config.guess --- ircd-hybrid-8.2.22+dfsg.1/config.guess 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/config.guess 2018-04-04 22:33:37.000000000 +0000 @@ -1,8 +1,8 @@ #! /bin/sh # Attempt to guess a canonical system name. -# Copyright 1992-2014 Free Software Foundation, Inc. +# Copyright 1992-2017 Free Software Foundation, Inc. -timestamp='2014-11-04' +timestamp='2017-05-27' # 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 @@ -27,7 +27,7 @@ # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: -# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD +# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess # # Please send patches to . @@ -50,7 +50,7 @@ GNU config.guess ($timestamp) Originally written by Per Bothner. -Copyright 1992-2014 Free Software Foundation, Inc. +Copyright 1992-2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -168,19 +168,29 @@ # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" - UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ - /usr/sbin/$sysctl 2>/dev/null || echo unknown)` + UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ + /sbin/$sysctl 2>/dev/null || \ + /usr/sbin/$sysctl 2>/dev/null || \ + echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; + earmv*) + arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'` + endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'` + machine=${arch}${endian}-unknown + ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched - # to ELF recently, or will in the future. + # to ELF recently (or will in the future) and ABI. case "${UNAME_MACHINE_ARCH}" in + earm*) + os=netbsdelf + ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ @@ -197,6 +207,13 @@ os=netbsd ;; esac + # Determine ABI tags. + case "${UNAME_MACHINE_ARCH}" in + earm*) + expr='s/^earmv[0-9]/-eabi/;s/eb$//' + abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"` + ;; + esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need @@ -207,13 +224,13 @@ release='-gnu' ;; *) - release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` + release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. - echo "${machine}-${os}${release}" + echo "${machine}-${os}${release}${abi}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` @@ -223,6 +240,10 @@ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; + *:LibertyBSD:*:*) + UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` + echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE} + exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; @@ -235,6 +256,9 @@ *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; + *:Sortix:*:*) + echo ${UNAME_MACHINE}-unknown-sortix + exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) @@ -251,42 +275,42 @@ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV4.5 (21064)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") - UNAME_MACHINE="alpha" ;; + UNAME_MACHINE=alpha ;; "EV5 (21164)") - UNAME_MACHINE="alphaev5" ;; + UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") - UNAME_MACHINE="alphaev56" ;; + UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") - UNAME_MACHINE="alphapca56" ;; + UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") - UNAME_MACHINE="alphapca57" ;; + UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") - UNAME_MACHINE="alphaev6" ;; + UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") - UNAME_MACHINE="alphaev67" ;; + UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") - UNAME_MACHINE="alphaev68" ;; + UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") - UNAME_MACHINE="alphaev69" ;; + UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") - UNAME_MACHINE="alphaev7" ;; + UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") - UNAME_MACHINE="alphaev79" ;; + UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 @@ -359,16 +383,16 @@ exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build - SUN_ARCH="i386" + SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then - SUN_ARCH="x86_64" + SUN_ARCH=x86_64 fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` @@ -393,7 +417,7 @@ exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` - test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 + test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} @@ -618,13 +642,13 @@ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in - 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 - 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 + 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 + 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in - 32) HP_ARCH="hppa2.0n" ;; - 64) HP_ARCH="hppa2.0w" ;; - '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 + 32) HP_ARCH=hppa2.0n ;; + 64) HP_ARCH=hppa2.0w ;; + '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi @@ -663,11 +687,11 @@ exit (0); } EOF - (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` + (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac - if [ ${HP_ARCH} = "hppa2.0w" ] + if [ ${HP_ARCH} = hppa2.0w ] then eval $set_cc_for_build @@ -680,12 +704,12 @@ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 - if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | + if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then - HP_ARCH="hppa2.0w" + HP_ARCH=hppa2.0w else - HP_ARCH="hppa64" + HP_ARCH=hppa64 fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} @@ -790,14 +814,14 @@ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) - FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) - FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` - FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) @@ -813,10 +837,11 @@ UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) - echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; - *) - echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; + UNAME_PROCESSOR=x86_64 ;; + i386) + UNAME_PROCESSOR=i586 ;; esac + echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin @@ -879,7 +904,7 @@ exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland - echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} + echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix @@ -902,7 +927,7 @@ EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 - if test "$?" = 0 ; then LIBC="gnulibc1" ; fi + if test "$?" = 0 ; then LIBC=gnulibc1 ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) @@ -933,6 +958,9 @@ crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; + e2k:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; @@ -945,6 +973,9 @@ ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; + k1om:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; @@ -970,6 +1001,9 @@ eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; + mips64el:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; @@ -1002,6 +1036,9 @@ ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; + riscv32:Linux:*:* | riscv64:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; @@ -1021,7 +1058,7 @@ echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) - echo ${UNAME_MACHINE}-unknown-linux-${LIBC} + echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} @@ -1100,7 +1137,7 @@ # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub - # prints for the "djgpp" host, or else GDB configury will decide that + # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; @@ -1249,6 +1286,9 @@ SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; + SX-ACE:SUPER-UX:*:*) + echo sxace-nec-superux${UNAME_RELEASE} + exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; @@ -1262,16 +1302,23 @@ UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then - if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then + if [ "$CC_FOR_BUILD" != no_compiler_found ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ - (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ - grep IS_64BIT_ARCH >/dev/null + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi + # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc + if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ + (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ + grep IS_PPC >/dev/null + then + UNAME_PROCESSOR=powerpc + fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub @@ -1286,7 +1333,7 @@ exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` - if test "$UNAME_PROCESSOR" = "x86"; then + if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi @@ -1295,15 +1342,18 @@ *:QNX:*:4*) echo i386-pc-qnx exit ;; - NEO-?:NONSTOP_KERNEL:*:*) + NEO-*:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; - NSR-?:NONSTOP_KERNEL:*:*) + NSR-*:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; + NSX-*:NONSTOP_KERNEL:*:*) + echo nsx-tandem-nsk${UNAME_RELEASE} + exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; @@ -1317,7 +1367,7 @@ # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. - if test "$cputype" = "386"; then + if test "$cputype" = 386; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" @@ -1359,7 +1409,7 @@ echo i386-pc-xenix exit ;; i*86:skyos:*:*) - echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' + echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'` exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos @@ -1370,23 +1420,25 @@ x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; + amd64:Isilon\ OneFS:*:*) + echo x86_64-unknown-onefs + exit ;; esac cat >&2 < in order to provide the needed -information to handle your system. +If $0 has already been updated, send the following data and any +information you think might be pertinent to config-patches@gnu.org to +provide the necessary information to handle your system. config.guess timestamp = $timestamp diff -Nru ircd-hybrid-8.2.22+dfsg.1/config.h.in ircd-hybrid-8.2.24+dfsg.1/config.h.in --- ircd-hybrid-8.2.22+dfsg.1/config.h.in 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/config.h.in 2018-04-04 22:33:37.000000000 +0000 @@ -82,9 +82,6 @@ /* Define if libdlloader will be built on this platform */ #undef HAVE_LIBDLLOADER -/* Define to 1 if libGeoIP (-lGeoIP) is available. */ -#undef HAVE_LIBGEOIP - /* Define to 1 if you have the `gnutls' library (-lgnutls). */ #undef HAVE_LIBGNUTLS @@ -197,48 +194,6 @@ /* Define to the shared archive member specification, say "(shr.o)". */ #undef LT_SHARED_LIB_MEMBER -/* Size of the auth mempool chunk. */ -#undef MP_CHUNK_SIZE_AUTH - -/* Size of the ban mempool chunk. */ -#undef MP_CHUNK_SIZE_BAN - -/* Size of the channel mempool chunk. */ -#undef MP_CHUNK_SIZE_CHANNEL - -/* Size of the client mempool chunk. */ -#undef MP_CHUNK_SIZE_CLIENT - -/* Size of the connection mempool chunk. */ -#undef MP_CHUNK_SIZE_CONNECTION - -/* Size of the dbuf mempool chunk. */ -#undef MP_CHUNK_SIZE_DBUF - -/* Size of the dlink_node mempool chunk. */ -#undef MP_CHUNK_SIZE_DNODE - -/* Size of the dns mempool chunk. */ -#undef MP_CHUNK_SIZE_DNS - -/* Size of the invite mempool chunk. */ -#undef MP_CHUNK_SIZE_INVITE - -/* Size of the ip_entry mempool chunk. */ -#undef MP_CHUNK_SIZE_IP_ENTRY - -/* Size of the channel-member mempool chunk. */ -#undef MP_CHUNK_SIZE_MEMBER - -/* Size of the userhost mempool chunk. */ -#undef MP_CHUNK_SIZE_USERHOST - -/* Size of the watch mempool chunk. */ -#undef MP_CHUNK_SIZE_WATCH - -/* Size of the Whowas mempool chunk. */ -#undef MP_CHUNK_SIZE_WHOWAS - /* Define to disable assert() statements. */ #undef NDEBUG diff -Nru ircd-hybrid-8.2.22+dfsg.1/config.sub ircd-hybrid-8.2.24+dfsg.1/config.sub --- ircd-hybrid-8.2.22+dfsg.1/config.sub 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/config.sub 2018-04-04 22:33:37.000000000 +0000 @@ -1,8 +1,8 @@ #! /bin/sh # Configuration validation subroutine script. -# Copyright 1992-2014 Free Software Foundation, Inc. +# Copyright 1992-2017 Free Software Foundation, Inc. -timestamp='2014-12-03' +timestamp='2017-04-02' # 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 @@ -33,7 +33,7 @@ # Otherwise, we print the canonical config type on stdout and succeed. # 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;hb=HEAD +# http://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 # and recognize all the CPU types, system types and aliases @@ -53,8 +53,7 @@ me=`echo "$0" | sed -e 's,.*/,,'` usage="\ -Usage: $0 [OPTION] CPU-MFR-OPSYS - $0 [OPTION] ALIAS +Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. @@ -68,7 +67,7 @@ version="\ GNU config.sub ($timestamp) -Copyright 1992-2014 Free Software Foundation, Inc. +Copyright 1992-2017 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." @@ -117,8 +116,8 @@ case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ - knetbsd*-gnu* | netbsd*-gnu* | \ - kopensolaris*-gnu* | \ + knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \ + kopensolaris*-gnu* | cloudabi*-eabi* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` @@ -255,15 +254,16 @@ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ + | ba \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ - | epiphany \ - | fido | fr30 | frv \ + | e2k | epiphany \ + | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ - | i370 | i860 | i960 | ia64 \ + | i370 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ @@ -301,11 +301,12 @@ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ + | pru \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ - | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ + | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ @@ -314,6 +315,7 @@ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ + | wasm32 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) @@ -376,17 +378,18 @@ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ + | ba-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ - | elxsi-* \ + | e2k-* | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ - | i*86-* | i860-* | i960-* | ia64-* \ + | i*86-* | i860-* | i960-* | ia16-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ @@ -427,13 +430,15 @@ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ + | pru-* \ | pyramid-* \ + | riscv32-* | riscv64-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ - | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ @@ -442,6 +447,7 @@ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ + | wasm32-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ @@ -518,6 +524,9 @@ basic_machine=i386-pc os=-aros ;; + asmjs) + basic_machine=asmjs-unknown + ;; aux) basic_machine=m68k-apple os=-aux @@ -638,6 +647,14 @@ basic_machine=m68k-bull os=-sysv3 ;; + e500v[12]) + basic_machine=powerpc-unknown + os=$os"spe" + ;; + e500v[12]-*) + basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` + os=$os"spe" + ;; ebmon29k) basic_machine=a29k-amd os=-ebmon @@ -933,6 +950,9 @@ nsr-tandem) basic_machine=nsr-tandem ;; + nsx-tandem) + basic_machine=nsx-tandem + ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf @@ -1017,7 +1037,7 @@ ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - ppcle | powerpclittle | ppc-le | powerpc-little) + ppcle | powerpclittle) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) @@ -1027,7 +1047,7 @@ ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; - ppc64le | powerpc64little | ppc64-le | powerpc64-little) + ppc64le | powerpc64little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) @@ -1228,6 +1248,9 @@ basic_machine=a29k-wrs os=-vxworks ;; + wasm32) + basic_machine=wasm32-unknown + ;; w65*) basic_machine=w65-wdc os=-none @@ -1373,18 +1396,18 @@ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ - | -aos* | -aros* \ + | -aos* | -aros* | -cloudabi* | -sortix* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ - | -bitrig* | -openbsd* | -solidbsd* \ + | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ - | -chorusos* | -chorusrdb* | -cegcc* \ + | -chorusos* | -chorusrdb* | -cegcc* | -glidix* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ + | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ @@ -1393,7 +1416,8 @@ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ - | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) + | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \ + | -onefs* | -tirtos* | -phoenix* | -fuchsia* | -redox*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1525,6 +1549,8 @@ ;; -nacl*) ;; + -ios) + ;; -none) ;; *) @@ -1620,6 +1646,9 @@ sparc-* | *-sun) os=-sunos4.1.1 ;; + pru-*) + os=-elf + ;; *-be) os=-beos ;; diff -Nru ircd-hybrid-8.2.22+dfsg.1/configure ircd-hybrid-8.2.24+dfsg.1/configure --- ircd-hybrid-8.2.22+dfsg.1/configure 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/configure 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ #! /bin/sh -# From configure.ac Id: configure.ac 8008 2017-03-14 18:34:59Z michael . +# From configure.ac Id: configure.ac 8476 2018-04-03 13:57:34Z michael . # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for ircd-hybrid 8.2.22. +# Generated by GNU Autoconf 2.69 for ircd-hybrid 8.2.24. # # Report bugs to . # @@ -593,8 +593,8 @@ # Identity of this package. PACKAGE_NAME='ircd-hybrid' PACKAGE_TARNAME='ircd-hybrid' -PACKAGE_VERSION='8.2.22' -PACKAGE_STRING='ircd-hybrid 8.2.22' +PACKAGE_VERSION='8.2.24' +PACKAGE_STRING='ircd-hybrid 8.2.24' PACKAGE_BUGREPORT='bugs@ircd-hybrid.org' PACKAGE_URL='' @@ -812,9 +812,9 @@ enable_assert enable_debugging enable_warnings +enable_efence enable_openssl enable_gnutls -enable_libgeoip ' ac_precious_vars='build_alias host_alias @@ -1368,7 +1368,7 @@ # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures ircd-hybrid 8.2.22 to adapt to many kinds of systems. +\`configure' configures ircd-hybrid 8.2.24 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1438,7 +1438,7 @@ if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of ircd-hybrid 8.2.22:";; + short | recursive ) echo "Configuration of ircd-hybrid 8.2.24:";; esac cat <<\_ACEOF @@ -1468,11 +1468,12 @@ --enable-assert Enable assert() statements --enable-debugging Enable debugging. --enable-warnings Enable compiler warnings. + --enable-efence Enable linking with Electric Fence 'efence' memory + debugger library. --enable-openssl=DIR Enable LibreSSL/OpenSSL support (DIR optional). --disable-openssl Disable LibreSSL/OpenSSL support. --enable-gnutls Enable GnuTLS support. --disable-gnutls Disable GnuTLS support. - --disable-libgeoip Disable GeoIP support Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -1573,7 +1574,7 @@ test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -ircd-hybrid configure 8.2.22 +ircd-hybrid configure 8.2.24 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2042,7 +2043,7 @@ This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by ircd-hybrid $as_me 8.2.22, which was +It was created by ircd-hybrid $as_me 8.2.24, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2913,7 +2914,7 @@ # Define the identity of the package. PACKAGE='ircd-hybrid' - VERSION='8.2.22' + VERSION='8.2.24' cat >>confdefs.h <<_ACEOF @@ -13726,82 +13727,6 @@ fi - - - - -for flag in -fno-strict-aliasing; do - as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 -$as_echo_n "checking whether C compiler accepts $flag... " >&6; } -if eval \${$as_CACHEVAR+:} false; then : - $as_echo_n "(cached) " >&6 -else - - ax_check_save_flags=$CFLAGS - CFLAGS="$CFLAGS $flag" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - eval "$as_CACHEVAR=yes" -else - eval "$as_CACHEVAR=no" -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - CFLAGS=$ax_check_save_flags -fi -eval ac_res=\$$as_CACHEVAR - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 -$as_echo "$ac_res" >&6; } -if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : - -if ${CFLAGS+:} false; then : - - case " $CFLAGS " in #( - *" $flag "*) : - { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5 - (: CFLAGS already contains $flag) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } ;; #( - *) : - - as_fn_append CFLAGS " $flag" - { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 - (: CFLAGS="$CFLAGS") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - ;; -esac - -else - - CFLAGS=$flag - { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 - (: CFLAGS="$CFLAGS") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - -fi - -else - : -fi - -done - - ac_fn_c_check_func "$LINENO" "getaddrinfo" "ac_cv_func_getaddrinfo" if test "x$ac_cv_func_getaddrinfo" = xyes; then : @@ -14323,52 +14248,6 @@ fi -# Define various chunk sizes for the pooling allocator - - -$as_echo "#define MP_CHUNK_SIZE_CHANNEL 1024*1024" >>confdefs.h - - -$as_echo "#define MP_CHUNK_SIZE_MEMBER 2048*1024" >>confdefs.h - - -$as_echo "#define MP_CHUNK_SIZE_BAN 1024*1024" >>confdefs.h - - -$as_echo "#define MP_CHUNK_SIZE_INVITE 4*1024" >>confdefs.h - - -$as_echo "#define MP_CHUNK_SIZE_CLIENT 1024*1024" >>confdefs.h - - -$as_echo "#define MP_CHUNK_SIZE_CONNECTION 512*1024" >>confdefs.h - - -$as_echo "#define MP_CHUNK_SIZE_DNODE 32*1024" >>confdefs.h - - -$as_echo "#define MP_CHUNK_SIZE_DBUF 512*1024" >>confdefs.h - - -$as_echo "#define MP_CHUNK_SIZE_AUTH 128*1024" >>confdefs.h - - -$as_echo "#define MP_CHUNK_SIZE_DNS 64*1024" >>confdefs.h - - -$as_echo "#define MP_CHUNK_SIZE_WATCH 8*1024" >>confdefs.h - - -$as_echo "#define MP_CHUNK_SIZE_USERHOST 128*1024" >>confdefs.h - - -$as_echo "#define MP_CHUNK_SIZE_IP_ENTRY 128*1024" >>confdefs.h - - -$as_echo "#define MP_CHUNK_SIZE_WHOWAS 256*1024" >>confdefs.h - - - # Argument processing. desired_iopoll_mechanism="none" @@ -15049,6 +14928,81 @@ +for flag in -Wduplicated-cond; do + as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 +$as_echo_n "checking whether C compiler accepts $flag... " >&6; } +if eval \${$as_CACHEVAR+:} false; then : + $as_echo_n "(cached) " >&6 +else + + ax_check_save_flags=$CFLAGS + CFLAGS="$CFLAGS $flag" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_CACHEVAR=yes" +else + eval "$as_CACHEVAR=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS=$ax_check_save_flags +fi +eval ac_res=\$$as_CACHEVAR + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : + +if ${CFLAGS+:} false; then : + + case " $CFLAGS " in #( + *" $flag "*) : + { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5 + (: CFLAGS already contains $flag) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } ;; #( + *) : + + as_fn_append CFLAGS " $flag" + { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 + (: CFLAGS="$CFLAGS") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + ;; +esac + +else + + CFLAGS=$flag + { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 + (: CFLAGS="$CFLAGS") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + +fi + +else + : +fi + +done + + + + + for flag in -Wempty-body; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 @@ -16099,6 +16053,81 @@ +for flag in -Wshift-negative-value; do + as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 +$as_echo_n "checking whether C compiler accepts $flag... " >&6; } +if eval \${$as_CACHEVAR+:} false; then : + $as_echo_n "(cached) " >&6 +else + + ax_check_save_flags=$CFLAGS + CFLAGS="$CFLAGS $flag" + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_compile "$LINENO"; then : + eval "$as_CACHEVAR=yes" +else + eval "$as_CACHEVAR=no" +fi +rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext + CFLAGS=$ax_check_save_flags +fi +eval ac_res=\$$as_CACHEVAR + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 +$as_echo "$ac_res" >&6; } +if eval test \"x\$"$as_CACHEVAR"\" = x"yes"; then : + +if ${CFLAGS+:} false; then : + + case " $CFLAGS " in #( + *" $flag "*) : + { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS already contains \$flag"; } >&5 + (: CFLAGS already contains $flag) 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } ;; #( + *) : + + as_fn_append CFLAGS " $flag" + { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 + (: CFLAGS="$CFLAGS") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + ;; +esac + +else + + CFLAGS=$flag + { { $as_echo "$as_me:${as_lineno-$LINENO}: : CFLAGS=\"\$CFLAGS\""; } >&5 + (: CFLAGS="$CFLAGS") 2>&5 + ac_status=$? + $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 + test $ac_status = 0; } + +fi + +else + : +fi + +done + + + + + for flag in -Wsign-compare; do as_CACHEVAR=`$as_echo "ax_cv_check_cflags__$flag" | $as_tr_sh` { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler accepts $flag" >&5 @@ -16474,6 +16503,81 @@ fi + # Check whether --enable-efence was given. +if test "${enable_efence+set}" = set; then : + enableval=$enable_efence; efence="$enableval" +else + efence="no" +fi + + + if test "$efence" = "yes"; then : + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing EF_Print" >&5 +$as_echo_n "checking for library containing EF_Print... " >&6; } +if ${ac_cv_search_EF_Print+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_func_search_save_LIBS=$LIBS +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char EF_Print (); +int +main () +{ +return EF_Print (); + ; + return 0; +} +_ACEOF +for ac_lib in '' efence; do + if test -z "$ac_lib"; then + ac_res="none required" + else + ac_res=-l$ac_lib + LIBS="-l$ac_lib $ac_func_search_save_LIBS" + fi + if ac_fn_c_try_link "$LINENO"; then : + ac_cv_search_EF_Print=$ac_res +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext + if ${ac_cv_search_EF_Print+:} false; then : + break +fi +done +if ${ac_cv_search_EF_Print+:} false; then : + +else + ac_cv_search_EF_Print=no +fi +rm conftest.$ac_ext +LIBS=$ac_func_search_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_EF_Print" >&5 +$as_echo "$ac_cv_search_EF_Print" >&6; } +ac_res=$ac_cv_search_EF_Print +if test "$ac_res" != no; then : + test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" + +else + { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +as_fn_error $? "Electric Fence 'efence' library not found +See \`config.log' for more details" "$LINENO" 5; } +fi + + +fi + + # Check whether --enable-openssl was given. if test "${enable_openssl+set}" = set; then : enableval=$enable_openssl; cf_enable_openssl=$enableval @@ -16767,77 +16871,6 @@ fi - # Check whether --enable-libgeoip was given. -if test "${enable_libgeoip+set}" = set; then : - enableval=$enable_libgeoip; -else - ac_fn_c_check_header_mongrel "$LINENO" "GeoIP.h" "ac_cv_header_GeoIP_h" "$ac_includes_default" -if test "x$ac_cv_header_GeoIP_h" = xyes; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing GeoIP_id_by_ipnum_v6_gl" >&5 -$as_echo_n "checking for library containing GeoIP_id_by_ipnum_v6_gl... " >&6; } -if ${ac_cv_search_GeoIP_id_by_ipnum_v6_gl+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_func_search_save_LIBS=$LIBS -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -/* Override any GCC internal prototype to avoid an error. - Use char because int might match the return type of a GCC - builtin and then its argument prototype would still apply. */ -#ifdef __cplusplus -extern "C" -#endif -char GeoIP_id_by_ipnum_v6_gl (); -int -main () -{ -return GeoIP_id_by_ipnum_v6_gl (); - ; - return 0; -} -_ACEOF -for ac_lib in '' GeoIP; do - if test -z "$ac_lib"; then - ac_res="none required" - else - ac_res=-l$ac_lib - LIBS="-l$ac_lib $ac_func_search_save_LIBS" - fi - if ac_fn_c_try_link "$LINENO"; then : - ac_cv_search_GeoIP_id_by_ipnum_v6_gl=$ac_res -fi -rm -f core conftest.err conftest.$ac_objext \ - conftest$ac_exeext - if ${ac_cv_search_GeoIP_id_by_ipnum_v6_gl+:} false; then : - break -fi -done -if ${ac_cv_search_GeoIP_id_by_ipnum_v6_gl+:} false; then : - -else - ac_cv_search_GeoIP_id_by_ipnum_v6_gl=no -fi -rm conftest.$ac_ext -LIBS=$ac_func_search_save_LIBS -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_GeoIP_id_by_ipnum_v6_gl" >&5 -$as_echo "$ac_cv_search_GeoIP_id_by_ipnum_v6_gl" >&6; } -ac_res=$ac_cv_search_GeoIP_id_by_ipnum_v6_gl -if test "$ac_res" != no; then : - test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" - -$as_echo "#define HAVE_LIBGEOIP 1" >>confdefs.h - -fi - -fi - - -fi - - - prefix_NONE= exec_prefix_NONE= @@ -17487,7 +17520,7 @@ # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by ircd-hybrid $as_me 8.2.22, which was +This file was extended by ircd-hybrid $as_me 8.2.24, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -17553,7 +17586,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -ircd-hybrid config.status 8.2.22 +ircd-hybrid config.status 8.2.24 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff -Nru ircd-hybrid-8.2.22+dfsg.1/configure.ac ircd-hybrid-8.2.24+dfsg.1/configure.ac --- ircd-hybrid-8.2.22+dfsg.1/configure.ac 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/configure.ac 2018-04-04 22:33:37.000000000 +0000 @@ -1,9 +1,9 @@ dnl Process this file with autoconf to produce a configure script. -AC_REVISION([$Id: configure.ac 8037 2017-03-17 22:28:04Z michael $]) +AC_REVISION([$Id: configure.ac 8476 2018-04-03 13:57:34Z michael $]) AC_PREREQ(2.69) -AC_INIT([ircd-hybrid], [8.2.22], [bugs@ircd-hybrid.org]) +AC_INIT([ircd-hybrid], [8.2.24], [bugs@ircd-hybrid.org]) AM_INIT_AUTOMAKE(1.15 subdir-objects) AM_MAINTAINER_MODE AC_CONFIG_MACRO_DIR([m4]) @@ -25,10 +25,8 @@ LIBTOOL="$LIBTOOL --silent" # Checks for libraries. -GCC_STACK_PROTECT_CC -GCC_STACK_PROTECT_LIB - -AX_APPEND_COMPILE_FLAGS([-fno-strict-aliasing]) +AX_GCC_STACK_PROTECT_CC +AX_GCC_STACK_PROTECT_LIB AX_LIBRARY_NET # Checks for typedefs, structures, and compiler characteristics. @@ -48,23 +46,20 @@ AC_SEARCH_LIBS(crypt, crypt) -# Define various chunk sizes for the pooling allocator -AX_MEMPOOL_CHUNKSIZES - # Argument processing. AX_ARG_IOLOOP_MECHANISM AX_ARG_ENABLE_ASSERT AX_ARG_ENABLE_DEBUGGING AX_ARG_ENABLE_WARNINGS +AX_ARG_ENABLE_EFENCE AX_ARG_OPENSSL AX_ARG_GNUTLS -AX_ARG_LIBGEOIP -AC_DEFINE_DIR([PREFIX],[prefix],[Set to prefix.]) -AC_DEFINE_DIR([SYSCONFDIR],[sysconfdir],[Set to sysconfdir.]) -AC_DEFINE_DIR([LIBDIR],[libdir],[Set to libdir.]) -AC_DEFINE_DIR([DATADIR],[datadir],[Set to datadir.]) -AC_DEFINE_DIR([LOCALSTATEDIR],[localstatedir],[Set to localstatedir.]) +AX_DEFINE_DIR([PREFIX],[prefix],[Set to prefix.]) +AX_DEFINE_DIR([SYSCONFDIR],[sysconfdir],[Set to sysconfdir.]) +AX_DEFINE_DIR([LIBDIR],[libdir],[Set to libdir.]) +AX_DEFINE_DIR([DATADIR],[datadir],[Set to datadir.]) +AX_DEFINE_DIR([LOCALSTATEDIR],[localstatedir],[Set to localstatedir.]) AC_CONFIG_FILES( \ Makefile \ diff -Nru ircd-hybrid-8.2.22+dfsg.1/debian/changelog ircd-hybrid-8.2.24+dfsg.1/debian/changelog --- ircd-hybrid-8.2.22+dfsg.1/debian/changelog 2017-08-22 23:23:06.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/debian/changelog 2018-04-06 21:58:00.000000000 +0000 @@ -1,3 +1,15 @@ +ircd-hybrid (1:8.2.24+dfsg.1-1) unstable; urgency=medium + + * New upstream release + - update config file from new reference.conf + * d/rules: Remove reference to non-existence get-orig-source target + * Update Standards-Version + * Don't run chown in recursive mode in maintainer scripts, fixing + Lintian check maintainer-script-should-not-use-recursive-chown-or-chmod + * Update Vcs-* fields to salsa + + -- Dominic Hargreaves Fri, 06 Apr 2018 22:58:00 +0100 + ircd-hybrid (1:8.2.22+dfsg.1-1) unstable; urgency=medium * New upstream release diff -Nru ircd-hybrid-8.2.22+dfsg.1/debian/control ircd-hybrid-8.2.24+dfsg.1/debian/control --- ircd-hybrid-8.2.22+dfsg.1/debian/control 2017-08-22 23:21:58.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/debian/control 2018-04-06 21:57:48.000000000 +0000 @@ -12,10 +12,10 @@ libgnutls28-dev, Build-Conflicts: autoconf2.13 Maintainer: Dominic Hargreaves -Standards-Version: 4.1.0 +Standards-Version: 4.1.4 Homepage: http://ircd-hybrid.com/ -Vcs-Browser: https://anonscm.debian.org/gitweb/?p=users/dom/ircd-hybrid.git -Vcs-Git: https://anonscm.debian.org/git/users/dom/ircd-hybrid.git +Vcs-Browser: https://salsa.debian.org/dom/ircd-hybrid +Vcs-Git: https://salsa.debian.org/dom/ircd-hybrid.git Package: ircd-hybrid Architecture: any diff -Nru ircd-hybrid-8.2.22+dfsg.1/debian/.git-dpm ircd-hybrid-8.2.24+dfsg.1/debian/.git-dpm --- ircd-hybrid-8.2.22+dfsg.1/debian/.git-dpm 2017-08-22 23:21:58.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/debian/.git-dpm 2018-04-05 18:24:26.000000000 +0000 @@ -1,8 +1,8 @@ # see git-dpm(1) from git-dpm package -5686cbeed6816454f2ad44d778a970e06c1e7f43 -5686cbeed6816454f2ad44d778a970e06c1e7f43 -c59662119a12823eb8392d101bfe2070a926e5d4 -c59662119a12823eb8392d101bfe2070a926e5d4 -ircd-hybrid_8.2.22+dfsg.1.orig.tar.gz -3385d94a5353b4413e7b79a54cde04876ab732d2 -1125334 +c35988c7895ac3880117ecf36c1aa8e6ef87a774 +c35988c7895ac3880117ecf36c1aa8e6ef87a774 +c9dc9b2fd617d8b533dab41e5b0dd02ac8423de5 +c9dc9b2fd617d8b533dab41e5b0dd02ac8423de5 +ircd-hybrid_8.2.24+dfsg.1.orig.tar.gz +18f856ed26c4ae078c3946783d22adbcc8cda4ce +1115162 diff -Nru ircd-hybrid-8.2.22+dfsg.1/debian/ircd.conf ircd-hybrid-8.2.24+dfsg.1/debian/ircd.conf --- ircd-hybrid-8.2.22+dfsg.1/debian/ircd.conf 2017-08-22 23:21:58.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/debian/ircd.conf 2018-04-05 18:41:06.000000000 +0000 @@ -1,9 +1,9 @@ /* * This is an example configuration file for ircd-hybrid * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * - * $Id: reference.conf 8045 2017-03-18 18:05:41Z michael $ + * $Id: reference.conf 8313 2018-02-28 17:45:36Z michael $ * * This version has been customized for Debian. */ @@ -107,30 +107,6 @@ max_topic_length = 300; /* - * libgeoip_database_options: used to control the libGeoIP database handling. - * - * Available options: - * - * standard - Read database from file system. This uses the least memory. - * memory_cache - Load database into memory. Provides faster performance but - * uses more memory. - * mmap_cache - Load database into mmap shared memory. - * check_cache - Check for updated database. If database has been updated, - * reload file handle and/or memory cache. - */ -# libgeoip_database_options = memory_cache, check_cache; - - /* - * libgeoip_ipv4_database_file: the path to the GeoIP IPv4 database file. - */ -# libgeoip_ipv4_database_file = "etc/GeoIP.dat"; - - /* - * libgeoip_ipv6_database_file: the path to the GeoIP IPv6 database file. - */ -# libgeoip_ipv6_database_file = "etc/GeoIPv6.dat"; - - /* * rsa_private_key_file: the path to the file containing the RSA key. * * Example commands to store a 2048 bit RSA key in rsa.key: @@ -831,11 +807,10 @@ # reason = "Channel is reserved for Finnish inhabitants"; # # /* -# * exempt: can be either a ISO 3166 alpha-2 two letter country -# * code, or a nick!user@host mask. CIDR is supported. Exempt +# * exempt: nick!user@host mask. CIDR is supported. Exempt # * entries can be stacked. # */ -# exempt = "FI"; +# exempt = "*@*.sexy"; #}; /* diff -Nru ircd-hybrid-8.2.22+dfsg.1/debian/ircd-hybrid.postinst ircd-hybrid-8.2.24+dfsg.1/debian/ircd-hybrid.postinst --- ircd-hybrid-8.2.22+dfsg.1/debian/ircd-hybrid.postinst 2017-08-22 23:21:58.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/debian/ircd-hybrid.postinst 2018-04-05 18:41:06.000000000 +0000 @@ -36,7 +36,7 @@ echo "ircd.key not found in /etc/ircd-hybrid!" echo "Generating SSL private key ..." openssl genrsa -out /etc/ircd-hybrid/key/ircd.key 2048 - chown -R irc:irc /etc/ircd-hybrid/key + chown irc:irc /etc/ircd-hybrid/key/ircd.key echo "Correcting permissions..." chmod 0600 /etc/ircd-hybrid/key/ircd.key echo "ircd.key generated in /etc/ircd-hybrid/key/" diff -Nru ircd-hybrid-8.2.22+dfsg.1/debian/patches/fhs_comply.patch ircd-hybrid-8.2.24+dfsg.1/debian/patches/fhs_comply.patch --- ircd-hybrid-8.2.22+dfsg.1/debian/patches/fhs_comply.patch 2017-08-22 23:21:58.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/debian/patches/fhs_comply.patch 2018-04-05 18:24:26.000000000 +0000 @@ -1,4 +1,4 @@ -From 07f79c54d2306c7838db4e3216bc1f34d366889d Mon Sep 17 00:00:00 2001 +From ac656c702b1863915b733012dd45e78acf77175f Mon Sep 17 00:00:00 2001 From: Dominic Hargreaves Date: Sat, 12 Jan 2013 00:24:56 +0000 Subject: Adjust paths for Debian/FHS @@ -11,7 +11,7 @@ 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/defaults.h b/include/defaults.h -index 3e9b8b0..73ad12f 100644 +index 3f22387..e5ba81f 100644 --- a/include/defaults.h +++ b/include/defaults.h @@ -50,25 +50,25 @@ @@ -48,7 +48,7 @@ /* * This file is included to supply default values for things which diff --git a/src/Makefile.am b/src/Makefile.am -index 9acb834..dbbc612 100644 +index 804cbd3..ae35047 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,6 +1,6 @@ diff -Nru ircd-hybrid-8.2.22+dfsg.1/debian/patches/no_ltdl_build.patch ircd-hybrid-8.2.24+dfsg.1/debian/patches/no_ltdl_build.patch --- ircd-hybrid-8.2.22+dfsg.1/debian/patches/no_ltdl_build.patch 2017-08-22 23:21:58.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/debian/patches/no_ltdl_build.patch 2018-04-05 18:24:26.000000000 +0000 @@ -1,4 +1,4 @@ -From 74649f032064be6e2fcf09b7a127fd6caaa54b2b Mon Sep 17 00:00:00 2001 +From c9c85c528c2572a47bd2b763f89769b5aeac04cb Mon Sep 17 00:00:00 2001 From: Dominic Hargreaves Date: Sun, 8 Sep 2013 10:58:57 +0100 Subject: Don't build bundled libltdl diff -Nru ircd-hybrid-8.2.22+dfsg.1/debian/patches/patchlevel_debian.patch ircd-hybrid-8.2.24+dfsg.1/debian/patches/patchlevel_debian.patch --- ircd-hybrid-8.2.22+dfsg.1/debian/patches/patchlevel_debian.patch 2017-08-22 23:21:58.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/debian/patches/patchlevel_debian.patch 2018-04-05 18:24:26.000000000 +0000 @@ -1,4 +1,4 @@ -From f7c1f7be5ff6dee550970a40f7b24e4ca135a13c Mon Sep 17 00:00:00 2001 +From 1a37dc763f5ab63fcf1d25bb49cedca74a6c2115 Mon Sep 17 00:00:00 2001 From: Dominic Hargreaves Date: Sun, 30 Dec 2012 20:36:40 +0000 Subject: Patchlevel for Debian package. @@ -11,14 +11,14 @@ 1 file changed, 1 insertion(+) diff --git a/include/patchlevel.h b/include/patchlevel.h -index 35b7aba..aba362e 100644 +index f8824d6..99070d8 100644 --- a/include/patchlevel.h +++ b/include/patchlevel.h @@ -24,6 +24,7 @@ - * \version $Id: patchlevel.h 8008 2017-03-14 18:34:59Z michael $ + * \version $Id: patchlevel.h 8471 2018-04-03 12:48:39Z michael $ */ +#include "patchlevel-debian.h" #ifndef PATCHLEVEL - #define PATCHLEVEL "hybrid-8.2.22" + #define PATCHLEVEL "hybrid-8.2.24" #endif diff -Nru ircd-hybrid-8.2.22+dfsg.1/debian/patches/reproducible_date_time.patch ircd-hybrid-8.2.24+dfsg.1/debian/patches/reproducible_date_time.patch --- ircd-hybrid-8.2.22+dfsg.1/debian/patches/reproducible_date_time.patch 2017-08-22 23:21:58.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/debian/patches/reproducible_date_time.patch 2018-04-05 18:24:26.000000000 +0000 @@ -1,4 +1,4 @@ -From 5686cbeed6816454f2ad44d778a970e06c1e7f43 Mon Sep 17 00:00:00 2001 +From c35988c7895ac3880117ecf36c1aa8e6ef87a774 Mon Sep 17 00:00:00 2001 From: Dominic Hargreaves Date: Wed, 2 Sep 2015 22:15:22 +0100 Subject: Allow the build date/time to be overridden by BUILD_DATE @@ -22,7 +22,7 @@ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/Makefile.am b/src/Makefile.am -index dbbc612..10295e1 100644 +index ae35047..334f206 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -2,9 +2,11 @@ AUTOMAKE_OPTIONS = foreign @@ -39,10 +39,10 @@ ircd_LDADD = $(LIBLTDL) ircd_DEPENDENCIES = $(LTDLDEPS) diff --git a/src/user.c b/src/user.c -index 6297874..1784114 100644 +index 9f6b161..c4fba24 100644 --- a/src/user.c +++ b/src/user.c -@@ -243,7 +243,11 @@ introduce_client(struct Client *client_p) +@@ -254,7 +254,11 @@ introduce_client(struct Client *client_p) static void user_welcome(struct Client *client_p) { diff -Nru ircd-hybrid-8.2.22+dfsg.1/debian/prep-new-tarball ircd-hybrid-8.2.24+dfsg.1/debian/prep-new-tarball --- ircd-hybrid-8.2.22+dfsg.1/debian/prep-new-tarball 2017-08-22 23:21:58.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/debian/prep-new-tarball 2018-04-05 18:24:26.000000000 +0000 @@ -16,7 +16,7 @@ tar zxf $ORIG_FILE UNPACK_NAME=$(ls) cd $UNPACK_NAME -rm -f doc/technical/draft-mitchell-irc-capabilities-01.txt \ +rm doc/technical/draft-mitchell-irc-capabilities-01.txt \ doc/technical/rfc1459.txt \ doc/technical/rfc2812.txt \ doc/technical/rfc2813.txt diff -Nru ircd-hybrid-8.2.22+dfsg.1/debian/rules ircd-hybrid-8.2.24+dfsg.1/debian/rules --- ircd-hybrid-8.2.22+dfsg.1/debian/rules 2017-08-22 23:21:58.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/debian/rules 2018-04-05 18:41:06.000000000 +0000 @@ -2,7 +2,6 @@ # debian/rules file for ircd-hybrid, # created by Joshua Kwan for ircd-hybrid-7.0.x, # modified by Aurélien GÉRÔME for ircd-hybrid-7.2.2. -# Note that the get-orig-source target depends on wget. export CFLAGS = -g export BUILD_DATE = $(shell LC_ALL=C date -u --date="`dpkg-parsechangelog -SDate`" +'%B %-e %Y at %T%z') diff -Nru ircd-hybrid-8.2.22+dfsg.1/depcomp ircd-hybrid-8.2.24+dfsg.1/depcomp --- ircd-hybrid-8.2.22+dfsg.1/depcomp 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/depcomp 2018-04-04 22:33:37.000000000 +0000 @@ -1,9 +1,9 @@ #! /bin/sh # depcomp - compile a program generating dependencies as side-effects -scriptversion=2013-05-30.07; # UTC +scriptversion=2016-01-11.22; # UTC -# Copyright (C) 1999-2014 Free Software Foundation, Inc. +# Copyright (C) 1999-2017 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -786,6 +786,6 @@ # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff -Nru ircd-hybrid-8.2.22+dfsg.1/doc/ircd.8 ircd-hybrid-8.2.24+dfsg.1/doc/ircd.8 --- ircd-hybrid-8.2.22+dfsg.1/doc/ircd.8 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/doc/ircd.8 2018-04-04 22:33:34.000000000 +0000 @@ -1,5 +1,5 @@ .\" @(#)ircd.8 7b10 25 Oct 2001 -.\" $Id: ircd.8 7925 2016-12-31 13:57:24Z michael $ +.\" $Id: ircd.8 8280 2018-02-20 19:30:33Z michael $ .TH IRCD 8 "22 October 2015" "ircd-hybrid" .SH NAME ircd \- ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon @@ -90,7 +90,7 @@ .LP (c) 1988-1991 Jarkko Oikarinen .LP -(c) 1997-2017 ircd-hybrid development team +(c) 1997-2018 ircd-hybrid development team .LP For full COPYRIGHT, see the COPYING file within the IRC source package. .LP diff -Nru ircd-hybrid-8.2.22+dfsg.1/doc/kline.txt ircd-hybrid-8.2.24+dfsg.1/doc/kline.txt --- ircd-hybrid-8.2.22+dfsg.1/doc/kline.txt 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/doc/kline.txt 2018-04-04 22:33:34.000000000 +0000 @@ -1,8 +1,8 @@ /* doc/kline.txt - Overview of the remote kline system * - * Copyright (c) 2005-2017 ircd-hybrid development team + * Copyright (c) 2005-2018 ircd-hybrid development team * - * $Id: kline.txt 7925 2016-12-31 13:57:24Z michael $ + * $Id: kline.txt 8280 2018-02-20 19:30:33Z michael $ */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/doc/Makefile.in ircd-hybrid-8.2.24+dfsg.1/doc/Makefile.in --- ircd-hybrid-8.2.22+dfsg.1/doc/Makefile.in 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/doc/Makefile.in 2018-04-04 22:33:34.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -90,21 +90,20 @@ host_triplet = @host@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \ - $(top_srcdir)/m4/ax_append_compile_flags.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_arg_enable_assert.m4 \ $(top_srcdir)/m4/ax_arg_enable_debugging.m4 \ + $(top_srcdir)/m4/ax_arg_enable_efence.m4 \ $(top_srcdir)/m4/ax_arg_enable_warnings.m4 \ $(top_srcdir)/m4/ax_arg_gnutls.m4 \ $(top_srcdir)/m4/ax_arg_ioloop_mechanism.m4 \ - $(top_srcdir)/m4/ax_arg_libgeoip.m4 \ $(top_srcdir)/m4/ax_arg_openssl.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ + $(top_srcdir)/m4/ax_define_dir.m4 \ + $(top_srcdir)/m4/ax_gcc_stack_protect.m4 \ $(top_srcdir)/m4/ax_library_net.m4 \ - $(top_srcdir)/m4/ax_mempool_chunksizes.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ - $(top_srcdir)/m4/gcc_stack_protect.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltargz.m4 \ $(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ diff -Nru ircd-hybrid-8.2.22+dfsg.1/doc/modes.txt ircd-hybrid-8.2.24+dfsg.1/doc/modes.txt --- ircd-hybrid-8.2.22+dfsg.1/doc/modes.txt 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/doc/modes.txt 2018-04-04 22:33:34.000000000 +0000 @@ -3,7 +3,7 @@ Upon connecting to the IRC server, you will see something like this: -irc.ircd-hybrid.org hybrid-8.2.22 DFGHRSWabcdefgijklnopqrsuwxy bchiklmnoprstuveCILMORST bkloveIh +irc.ircd-hybrid.org hybrid-8.2.24 DFGHRSWabcdefgijklnopqrsuwy bchiklmnoprstuveCILMNORST bkloveIh These describe the user modes, channel modes, and channel modes that require arguments that are available to the user. @@ -39,8 +39,6 @@ +u - unauth - See unauthorized client notices +w - wallop - See server generated WALLOPS +W - webirc - User is connected using a webirc gateway -+x - hiddenhost - User's host has been spoofed by services. - This mode can be set by servers and services only. +y - spy - See ADMIN, LINKS, MOTD, STATS, TRACE notices Channel Modes: @@ -50,36 +48,36 @@ +C - noctcps - Prevent users from sending CTCPs to the channel +e - exempt - Exemption from bans +h - halfop - Half-Op status -+I - invex - Invite exceptions, nick!user@host does not need to be - explicitly INVITE'd into the channel before being able - JOIN ++I - invex - Invite exceptions, nick!user@host does not need to be explicitly INVITE'd + into the channel before being able JOIN +i - invite - Invite only +k - key - Key/password for the channel +l - limit - Limit the number of users in a channel +m - moderated - Users without +v/h/o cannot send text to the channel -+L - extlimit - Channel can make use of the extended ban list limit. Can be set only by irc-operators. ++L - extlimit - Channel can make use of the extended ban list limit. Can be set only by irc-operators, + servers and services. +M - modreg - Unregistered/unidentified clients cannot send text to the channel ++N - nonickchange - This will prevent any user who isn't opped or half-opped (+o/+h) from changing their + nick while in the channel. +n - noexternal - Users must be in the channel to send text to it +o - chanop - Full operator status +O - operonly - This mode will prevent anyone who hasn't obtained irc-operator status from joining the - channel. Can be set only by irc-operators. -+p - private - Private is obsolete, this now restricts KNOCK, and can be - set at the same time as +s. + channel. Can be set only by irc-operators, servers and services. ++p - private - Private is obsolete, this now restricts KNOCK, and can be set at the same time as +s. +r - registered - Channel has been registered. Can be set only by servers and services. +R - regonly - Only registered clients may join a channel with that mode set +s - secret - The channel does not show up on NAMES or LIST or in the WHOIS channel list unless you are a member of the channel -+S - sslonly - This mode will prevent anyone who isn't securely connected - via SSL/TLS from joining the channel. ++S - sslonly - This mode will prevent anyone who isn't securely connected via SSL/TLS from joining + the channel. +t - topic - Only chanops and halfops can change the topic -+u - hidebmasks - Hides +b/+e/+I mode changes and lists to everyone except - channel ops, and half-ops (+o/+h) ++u - hidebmasks - Hides +b/+e/+I mode changes and lists to everyone except channel ops, and + half-ops (+o/+h) +T - nonotice - Users without +v/h/o cannot send NOTICEs to the channel -+v - voice - Can speak in a moderated channel, and is exempt from flood - restrictions ++v - voice - Can speak in a moderated channel, and is exempt from flood restrictions The third part of the 004 numeric lists channel modes that require arguments. Currently these are bkloveIh. -# $Id: modes.txt 8054 2017-03-22 17:53:55Z michael $ +# $Id: modes.txt 8478 2018-04-03 17:03:30Z michael $ diff -Nru ircd-hybrid-8.2.22+dfsg.1/doc/reference.conf ircd-hybrid-8.2.24+dfsg.1/doc/reference.conf --- ircd-hybrid-8.2.22+dfsg.1/doc/reference.conf 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/doc/reference.conf 2018-04-04 22:33:34.000000000 +0000 @@ -1,9 +1,9 @@ /* * This is an example configuration file for ircd-hybrid * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * - * $Id: reference.conf 8045 2017-03-18 18:05:41Z michael $ + * $Id: reference.conf 8313 2018-02-28 17:45:36Z michael $ */ /* @@ -105,30 +105,6 @@ max_topic_length = 160; /* - * libgeoip_database_options: used to control the libGeoIP database handling. - * - * Available options: - * - * standard - Read database from file system. This uses the least memory. - * memory_cache - Load database into memory. Provides faster performance but - * uses more memory. - * mmap_cache - Load database into mmap shared memory. - * check_cache - Check for updated database. If database has been updated, - * reload file handle and/or memory cache. - */ -# libgeoip_database_options = memory_cache, check_cache; - - /* - * libgeoip_ipv4_database_file: the path to the GeoIP IPv4 database file. - */ -# libgeoip_ipv4_database_file = "etc/GeoIP.dat"; - - /* - * libgeoip_ipv6_database_file: the path to the GeoIP IPv6 database file. - */ -# libgeoip_ipv6_database_file = "etc/GeoIPv6.dat"; - - /* * rsa_private_key_file: the path to the file containing the RSA key. * * Example commands to store a 2048 bit RSA key in rsa.key: @@ -822,11 +798,10 @@ reason = "Channel is reserved for Finnish inhabitants"; /* - * exempt: can be either a ISO 3166 alpha-2 two letter country - * code, or a nick!user@host mask. CIDR is supported. Exempt + * exempt: nick!user@host mask. CIDR is supported. Exempt * entries can be stacked. */ - exempt = "FI"; + exempt = "*@*.sexy"; }; /* diff -Nru ircd-hybrid-8.2.22+dfsg.1/doc/resv.txt ircd-hybrid-8.2.24+dfsg.1/doc/resv.txt --- ircd-hybrid-8.2.22+dfsg.1/doc/resv.txt 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/doc/resv.txt 2018-04-04 22:33:34.000000000 +0000 @@ -2,9 +2,9 @@ * doc/resv.txt - Overview of the resv system * Lee Hardy * - * Copyright (c) 2001-2017 ircd-hybrid development team + * Copyright (c) 2001-2018 ircd-hybrid development team * - * $Id: resv.txt 7925 2016-12-31 13:57:24Z michael $ + * $Id: resv.txt 8280 2018-02-20 19:30:33Z michael $ */ RESV diff -Nru ircd-hybrid-8.2.22+dfsg.1/doc/serverhide.txt ircd-hybrid-8.2.24+dfsg.1/doc/serverhide.txt --- ircd-hybrid-8.2.22+dfsg.1/doc/serverhide.txt 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/doc/serverhide.txt 2018-04-04 22:33:34.000000000 +0000 @@ -1,8 +1,8 @@ Server Hide Reference - $Id: serverhide.txt 7925 2016-12-31 13:57:24Z michael $ + $Id: serverhide.txt 8280 2018-02-20 19:30:33Z michael $ - Copyright (c) 2001-2017 ircd-hybrid development team + Copyright (c) 2001-2018 ircd-hybrid development team ---------------------------------------------------------------------- diff -Nru ircd-hybrid-8.2.22+dfsg.1/doc/technical/fd-management.txt ircd-hybrid-8.2.24+dfsg.1/doc/technical/fd-management.txt --- ircd-hybrid-8.2.22+dfsg.1/doc/technical/fd-management.txt 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/doc/technical/fd-management.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,47 +0,0 @@ -Overview of the filedescriptor subsystem -Adrian Chadd - -$Id: fd-management.txt 7667 2016-07-20 17:09:36Z michael $ - - -Filedescriptor lists --------------------- - -The filedescriptor list is managed through the routines in fdlist.c . -These include: - -fd_open() - tag an FD as "open" and active -fd_close() - tag an FD as "closed" and close() the filedescriptor -fd_note() - update the filedescriptor tag - -You can get the current list of open filedescriptors through /stats F as -an oper. - - - -FD lists --------- - -The FD list support is very alpha. There are a few lists defined: - -typedef enum fdlist_t { - FDLIST_NONE, - FDLIST_SERVICE, - FDLIST_SERVER, - FDLIST_IDLECLIENT, - FDLIST_BUSYCLIENT, - FDLIST_MAX -} fdlist_t; - -FDLIST_NONE Not on any list (ie close()d) -FDLIST_SERVICE A service - listen() sockets, resolver, etc -FDLIST_SERVER Server connections -FDLIST_IDLECLIENT An idle client -FDLIST_BUSYCLIENT A busy client -FDLIST_MAX Used for bounds checking - -The idea is that the SERVICE sockets need polling frequently, the SERVER -sockets also need polling frequently, BUSYCLIENT is for busy clients -which need frequent polling (eg we're trying to write to them), and -IDLECLIENT is for clients which we don't need to poll frequently. -THIS hasn't been decided upon yet. diff -Nru ircd-hybrid-8.2.22+dfsg.1/doc/technical/hostmask.txt ircd-hybrid-8.2.24+dfsg.1/doc/technical/hostmask.txt --- ircd-hybrid-8.2.22+dfsg.1/doc/technical/hostmask.txt 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/doc/technical/hostmask.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,136 +0,0 @@ -The Hostmask and Netmask System -Copyright(c) 2001 by Andrew Miller(A1kmm) - -$Id: hostmask.txt 7667 2016-07-20 17:09:36Z michael $ ------------------------------------------------------------------------- - -Contents :: -============ -* Section 1: Motivation -* Section 2: Underlying Mechanism - - 2.1: General Overview - - 2.2: IPv4 Netmasks - - 2.3: IPv6 Netmasks - - 2.4: Hostmasks -* Section 3: Exposed Abstraction Layer - - 3.1: Parsing Masks - - 3.2: Adding Configuration Items - - 3.3: Initialising or Rehashing - - 3.4: Finding IP/Hostname Confs - - 3.5: Deleting Entries - - 3.6: Reporting Entries - -Section 1: Motivation -===================== - -Looking up configuration hostnames and IP addresses (such as for I-Lines -and K-Lines) needs to be implemented efficiently. It turns out a hash -based algorithm like that employed here performs very will on the average -case, which is what we should be the most concerned about. A profiling -comparison with the mtre code using data from a real network confirmed -that this algorithm performs much better. - - -Section 2: Underlying Mechanism -=============================== - -2.1: General Overview ---------------------- - -In short, a hash-table with linked lists for buckets is used to locate -the correct hostname/netmask entries. In order to support CIDR IPs and -wildcard masks, the entire key cannot be hashed, and there is a need to -rehash. The means for deciding how much to hash differs between the -hostmasks and IPv4/6 netmasks. - -2.2: IPv4 Netmasks ------------------- - -In order to hash IPv4 netmasks for addition to the hash, the mask is first -processed into a 32-bit address and a number of bits is used. All unused -bits are set to 0. The mask could be in these forms: - -1.2.3.4 => 1.2.3.4 : 32 -1.2.3.* => 1.2.3.0 : 24 -1.2.*.* => 1.2.0.0 : 16 -1.2.3.64/26 => 1.2.3.64 : 26 - -The number of whole bytes is then calculated, and only those bytes are -hashed (e.g. 1.2.3.64/26 and 1.2.3.0/24 hash the same). When a complete -IPv4 address is given so that an IPv4 match can be found the entire IP -address is first hashed, and then looked up in the table. Then the most -significant three bytes are hashed, followed by the most significant two, -the most significant one, and finally the "identity hash" bucket is -searched (to match masks like 192/7). - -2.3: IPv6 Netmasks ------------------- - -As per the IPv4 netmasks, except that instead of rehashing with one byte -granularity, a 16-bit (two byte) granularity is used, as 16 rehashes is -considered too great a fixed offset to be justified for a (possible) -slight reduction in hash collisions. - -2.4: Hostmasks --------------- - -On adding a hostmask to the hash, all of the hostmask right of the next -dot after the last wildcard character in the string is hashed, or in the -case that there are no wildcards in the hostmask, the entire string is -hashed. - -On searching for a hostmask match, the entire hostname is hashed, followed -by the entire hostmask after the first dot, followed by the entire hostmask -after the second dot, and so on. Finally the "identity hash" bucket is checked -to catch hostnames like *test*. - -Section 3: Exposed Abstraction Layer -==================================== - -Section 3.1: Parsing Masks --------------------------- - -Call "parse_netmask()" with the netmask and a pointer to an irc_inaddr -structure to be filled in, as well as a pointer to an integer where the -number of bits will be placed. - -Always check the return value, if it returns HM_MOST, it means that the -mask is probably a hostmask. If it returns HM_IPV4, it means it was an -IPv4 address. If it returns HM_IPV6, it means it was an IPv6 address. -If parse_netmask() returns HM_MOST however, no change is made to the -irc_inaddr structure or the number of bits. - -Section 3.2: Adding Configuration Items ---------------------------------------- - -Call "add_conf_by_address()" with the hostname or IP mask, the username, -and the ConfItem* to associate with this mask. - -Section 3.3: Initialising and Rehashing ---------------------------------------- - -To initialise, call "init_host_hash()". This only needs to be done once -on start-up. On rehash, to wipe out the old unwanted configuration, and -free them if there are no references to them, call -"clear_out_address_conf()". - -Section 3.4: Finding IP/Hostname Confs ---------------------------------------- - -Call "find_address_conf()" with the hostname, the username, the address, -the address family and the client-supplied password. To find a D-Line, -call "find_dline()" with the address and address family. - -Section 3.5: Deleted Entries ----------------------------- - -Call "delete_one_address_conf()" with the hostname and the ConfItem*. - -Section 3.6: Reporting Entries ------------------------------- - -Call "report_dlines()", "report_exemptlines()", "report_Klines()", or -"report_Ilines()" with the client pointer to report to. Note these walk -the hash, which is inefficient, but these are not called often enough -to justify the memory and maintenance clockcycles to for more efficient -data structuring. diff -Nru ircd-hybrid-8.2.22+dfsg.1/doc/technical/index.txt ircd-hybrid-8.2.24+dfsg.1/doc/technical/index.txt --- ircd-hybrid-8.2.22+dfsg.1/doc/technical/index.txt 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/doc/technical/index.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,15 +0,0 @@ -$Id: index.txt 7667 2016-07-20 17:09:36Z michael $ ------------------------------------------------ - -Technical Documentation for ircd-hybrid-8 - -fd-management.txt - Outline of the file descriptor management system -hostmask.txt - Outline of hostmask handling -network.txt - Outline of the network traffic subsystem -rfc1459.txt - The IRC RFC -rfc2812.txt - The IRC Client RFC -rfc2813.txt - The IRC Server RFC -send.txt - Document on all of the send_to functions -ts3.txt - TSora Version 3 Protocol -ts5.txt - TSora Version 5 Protocol -ts6.txt - TSora Version 6 Protocol diff -Nru ircd-hybrid-8.2.22+dfsg.1/doc/technical/network.txt ircd-hybrid-8.2.24+dfsg.1/doc/technical/network.txt --- ircd-hybrid-8.2.22+dfsg.1/doc/technical/network.txt 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/doc/technical/network.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,99 +0,0 @@ -Overview of the network subsystem -Adrian Chadd - -$Id: network.txt 7667 2016-07-20 17:09:36Z michael $ - -This document is an overview of the new and hopefully improved network -subsystem. - -The code is based loosely upon the network core found in the Squid web cache -server, with some optimizations for ircd-specific IO patterns. - -Filedescriptor IO ------------------ - -Filedescriptor IO is initiated using comm_setselect(). comm_setselect() -registers interest in reading from or writing to a file descriptor. -When a filedescriptor is ready for the required IO a callback is called -from the IO loop. - -The comm_setselect() usage is: - -void -comm_setselect(int fd, fdlist_t list, int type, PF *callback, void *cbdata, - int timeout) - -where: - fd filedescriptor - list Which list the FD should be put on - type IO type. Can currently include: - COMM_SELECT_READ - register for read - COMM_SELECT_WRITE - register for write - callback Function to call when the FD is ready - cbdata Data to be passed to above function - timeout Update the timeout value. 0 is "don't update". - - -A typical use is: - -.. - -/* Register interest in the FD for a read event */ -comm_setselect(fd, FDLIST_SERVICE, COMM_SELECT_READ, read_callback, read_data, - 0); - -.. - -(FD becomes ready for read in the IO loop) - -void -read_callback(int fd, void *data) -{ - /* called when the FD becomes ready for read */ - retval = read(fd, buf, len); - - .. - /* Ok, we need to read some more when its ready */ - comm_setselect(fd, FDLIST_SERVICE, COMM_SELECT_READ, read_callback, data, - 0); -} - -Socket timeouts ---------------- - -A "socket timeout" is a callback registered to be called when a certain -amount of time has elapsed. Think of it as an event, but against a FD. - -A good example of socket timeouts is in the comm_connect_tcp() code. -When the connect() begins, comm_settimeout() is called to call -comm_connect_timeout() if the timeout occurs. Once the connect() completes, -comm_settimeout() is called with a timeout of 0 and callback of NULL -to deregister the timeout. If the timeout occurs, comm_connect_timeout() -is called and the connection attempt is aborted. - - - - -Functions ---------- - -comm_open() - a socket() wrapper, enforcing fd limitations and tagging the - file descriptor with a note - -comm_accept() - an accept() wrapper, enforcing fd limitations and tagging - the file descriptor with a note - -comm_connect_tcp() - attempt an async connect(). Handles DNS lookups if - required, and will call the given callback at completion or error - -comm_settimeout() - set a callback to be called after a given time period. - This is good to implement things like PING checks and connect() timeouts. - -Notes: - -* All socket creation should go through comm_open() / comm_accept(). -* All socket closing should go through fd_close(). comm_close() isn't - implemented yet. -* comm_connect_tcp() is your best friend. :-) -* *ALL* network sockets should be non-blocking. If your OS doesn't support - non-blocking sockets, you shouldn't be here. diff -Nru ircd-hybrid-8.2.22+dfsg.1/doc/technical/send.txt ircd-hybrid-8.2.24+dfsg.1/doc/technical/send.txt --- ircd-hybrid-8.2.22+dfsg.1/doc/technical/send.txt 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/doc/technical/send.txt 1970-01-01 00:00:00.000000000 +0000 @@ -1,262 +0,0 @@ -PREFIXES -======== - - Server prefixes are the ":%s" strings at the beginning of messages. -They are used by servers to route the message properly and by servers to -local clients to update their idea of who is whom. - -":nick!user@host" is a prefix ":name" where name is either a nick -or name of a server is another valid prefix. - -Typical prefix for a local client to a channel: - -":Dianora!db@irc.db.net" - -for a prefix to a remote server: -":Dianora" - -e.g. as seen locally on a channel: - -":Dianora!db@irc.db.net PRIVMSG #us-opers :ON TOP OF ...\r\n" - -e.g. as seen sent to a remote server: -":Dianora PRIVMSG #us-opers :ON TOP OF ...\r\n" - - It has been argued that full prefixes sent locally are a waste of bandwidth -(Isomer from Undernet has argued this). i.e. instead of sending: -":nick!user@host" for a local prefix, one could just send ":nick".. -Unfortunately, this breaks many clients badly. Personally I feel that -until clients are updated to understand that a full prefix isn't always -going to be sent, that this should be held off on. - - As much as possible, prefix generation is now moved "upstairs" as -much as possible. i.e. if its known its a local client only, then the -onus of the prefix generation, is the users, not hidden in send.c -This allows somewhat faster code to be written, as the prefix doesn't -have to be regenerated over and over again. - - Prefixes aren't sent in all cases, such as a new user using NICK -A prefix is needed when it must be routed. - -i.e. - -NICK newnick - - There is obviously no prefix needed from a locally connected client. - - - -FUNCTIONS -========= - -sendto_one() - Should be used for _local_ clients only - it expects the prefix to be pre-built by user. - - usage - sendto_one(struct Client *to, char *pattern, ...); - - typical use: - - sendto_one(acptr,":%s NOTICE %s :I'm tired", me.name); - Note: This was from a server "me" hence only one - name in prefix. - - This would be an example of a client sptr, noticing - acptr IF acptr is known to be a local client: - - sendto_one(acptr,":%s!%s@%s NOTICE %s :You there?", - sptr->name, - sptr->username, - sptr->host, - acptr->name); - -sendto_channel_butone() - - This function sends a var args message to a channel globally, - except to the client specified as "one", the prefix - is built by this function on the fly as it has to - be sent both to local clients on this server and to - remote servers. +D clients are omitted, as this is used - only for PRIVMSG/NOTICE. - - usage - sendto_channel_butone(struct Client *one, - struct Client *from, - struct Channel *chptr, - const char *pattern, ... ); - - sendto_channel_butone(cptr, sptr, chptr - "PRIVMSG %s :HI!", - chptr->chname); - - e.g. if channel message is coming from "cptr" - it must not be sent back to cptr. - - -sendto_ll_serv_butone(struct Client *one, struct Client *sptr, int add, - const char *pattern, ...) - - - This function is almost identical to sendto_channel_butone - however, it will also not send on a nick as given by sptr, - if target server does not "know" about it. - As the name implies, it is used for "lazylinks" - -sendto_server() - - This function sends specified var args message - to all connected servers except the client "one" - - chptr can be NULL, in which case it goes to server - - caps is a set of CAPS to send =to= - - nocaps is a set of CAPS to not send =to= - - usage - sendto_server(struct Client *one, - struct Channel *chptr, - unsigned long caps, - unsigned long nocaps, - unsigned long llflags, - const char *pattern, ... ); - - -sendto_common_channels_local() - - This function is used only by m_nick and exit_one_client - its used to propagate nick changes to all channels user - is in, and QUIT messages to all channels user is in. - As it only sends to local clients, prefix generation - is left to the user. It also sends the message to the - user if the user isn't on any channels. - - usage - sendto_common_channels_local(struct Client *user, - const char *pattern, - ...); - -sendto_channel_local() - - This function is used only to send locally, never - to remote servers. This is useful when removing - local chanops, or adding a local chanop. MODE/SJOIN - sent to remote server allows that server to propagate - mode changes to its clients locally. If nodeaf is YES, - +D clients are omitted (used for delivering WALLCHOPS). - - usage - sendto_channel_local(type, nodeaf, - struct Channel *chptr, - const char *pattern, ... ); - - - prefix must be pre-built. type is a flag - denoting ONE of - ALL_MEMBERS - all members locally are sent to - NON_CHANOPS - only non-chanops see this - ONLY_CHANOPS_VOICED - both chanops and voiced see this - ONLY_CHANOPS - only chanops see this - - -sendto_match_butone() -match_it() - both only used for the old style oper masking - i.e. /msg #hostmask which in hyb7 is /msg $#hostmask - or /msg $servermask in hyb7 /msg $$servermask - - usage - match_it(struct Client *one, - const char *mask, - int what); - - one is the client to match on either hostmask or servermask - mask is the actual mask - what is either MATCH_HOST or MATCH_SERVER - - usage - sendto_match_butone(struct Client *one, - struct Client *from, - char *mark, - int what, - const char *pattern, ... ); - -sendto_channel_remote() - - Is only used to send a message to a remote server - - -sendto_match_cap_servs() - - Is used only to send MODE lists to remote server - who are capable of it. i.e. MODE #channel +e nick!user@host - -sendto_match_noncap_servs() - - Is used only to send MODE lists to remote servers that - are not capable of it. i.e. MODE #channel +o nick - - This allows you to send a MODE #channel +h nick via - sendto_match_cap_servs and MODE #channel +o nick to - servers which don't support it. - -sendto_anywhere() - - Allows the sending of a message to any client on the net - without knowing whether its local or remote. The penalty - is the calculation of a run-time prefix. - It is less efficient then sendto_one() - - usage - sendto_anywhere(struct Client *to, - struct Client *from, - const char *pattern, ...); - - e.g. - sendto_anywhere(acptr, sptr, - "PRIVMSG Larz :Hi, Where ever you are"); - -sendto_realops_flags() - - combines old sendto_realops and sendto_realops_flags - sends specified message to opers locally only - depending on two flags, UMODE i.e. +y +d or UMODE_SERVNOTICE - or special case, UMODE_ALL (see client.h UMODE flags ) - to send to any oper. The second flag gives the level - of whom to send the messages to, OPERS, ADMINS only or both. - (See send.h for those flags) - - usage - sendto_realops_flags(int umode, int level, - const char *pattern, ... ); - - e.g. - sendto_realops_flags(UMODE_ALL, L_ALL, - "Don't eat the yellow snow"); - -sendto_wallops_flags() - - sends specified message to opers locally, - depending on flags. used for messages that need - to be in wallops form - - usage - sendto_wall_flags(int flags, - struct Client *, const char *patterm ...); - - e.g. - sendto_wallops_flags(UMODE_WALLOP, - sptr, "Message"); - -ts_warn() - Only used to send warning messages to all opers - without flooding them with warnings. - It limits the number of warnings to no more than 5 - every 5 seconds. It probably can go away now. - - usage - ts_warn(const char *pattern, ... ); - -*** LOCAL HELPER FUNCTIONS (static) *** - -send_format() - Used to format a varargs buffer into given buffer - returns length of buffer built, enforces RFC1459 length - limits and appends \r\n as per rfc. - - usage - send_format(char *sendbuf, - const char *pattern, ... ); - -send_message() - - This local function does the actual send of message - - usage: send_message(struct Client *to, char *msg, int len); - - The message has to be pre-formatted and the length - must be pre-calculated. - -send_message_remote() - - This local function does the actual send of message to - remote clients - - usage: send_message_remote(struct Client *to, - struct Client *from, char *msg, int len); - - The message has to be pre-formatted and the length - must be pre-calculated. - - --- Diane Bruce - -$Id: send.txt 7667 2016-07-20 17:09:36Z michael $ diff -Nru ircd-hybrid-8.2.22+dfsg.1/help/cmode ircd-hybrid-8.2.24+dfsg.1/help/cmode --- ircd-hybrid-8.2.22+dfsg.1/help/cmode 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/help/cmode 2018-04-04 22:33:37.000000000 +0000 @@ -42,14 +42,17 @@ +C - 'No CTCPs'. Prevent users from sending CTCPs to the channel. +L - 'Large ban list'. Channel can make use of the extended ban list - limit. Can be set only by irc-operators. + limit. Can be set only by irc-operators, servers and services. +M - 'Modreg'. Unregistered/unidentified clients cannot send text to the channel + +N - 'No nick changes'. This will prevent any user who isn't opped or + half-opped (+o/+h) from changing their nick while in the channel. + +O - 'IRCOps only'. This will prevent anyone who hasn't obtained irc-operator status from joining your channel. Can be set only - by irc-operators. + by irc-operators, servers and services. +R - 'Registered only'. Only registered clients may join a channel with that mode set diff -Nru ircd-hybrid-8.2.22+dfsg.1/help/Makefile.in ircd-hybrid-8.2.24+dfsg.1/help/Makefile.in --- ircd-hybrid-8.2.22+dfsg.1/help/Makefile.in 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/help/Makefile.in 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -90,21 +90,20 @@ host_triplet = @host@ subdir = help ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \ - $(top_srcdir)/m4/ax_append_compile_flags.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_arg_enable_assert.m4 \ $(top_srcdir)/m4/ax_arg_enable_debugging.m4 \ + $(top_srcdir)/m4/ax_arg_enable_efence.m4 \ $(top_srcdir)/m4/ax_arg_enable_warnings.m4 \ $(top_srcdir)/m4/ax_arg_gnutls.m4 \ $(top_srcdir)/m4/ax_arg_ioloop_mechanism.m4 \ - $(top_srcdir)/m4/ax_arg_libgeoip.m4 \ $(top_srcdir)/m4/ax_arg_openssl.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ + $(top_srcdir)/m4/ax_define_dir.m4 \ + $(top_srcdir)/m4/ax_gcc_stack_protect.m4 \ $(top_srcdir)/m4/ax_library_net.m4 \ - $(top_srcdir)/m4/ax_mempool_chunksizes.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ - $(top_srcdir)/m4/gcc_stack_protect.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltargz.m4 \ $(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ diff -Nru ircd-hybrid-8.2.22+dfsg.1/help/umode ircd-hybrid-8.2.24+dfsg.1/help/umode --- ircd-hybrid-8.2.22+dfsg.1/help/umode 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/help/umode 2018-04-04 22:33:37.000000000 +0000 @@ -16,8 +16,6 @@ * k - Can see server kill messages. * f - Can see 'auth {} block is full' notices. * F - Can see remote client connection/quit notices. - x - User's host has been spoofed by services. - This mode can be set by servers and services only. * y - Can see stats/links/admin requests to name a few. * d - Can see server debug messages. * n - Can see client nick changes. diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/auth.h ircd-hybrid-8.2.24+dfsg.1/include/auth.h --- ircd-hybrid-8.2.22+dfsg.1/include/auth.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/auth.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -20,8 +20,8 @@ */ /*! \file auth.h - * \brief A header for the ident functions. - * \version $Id: auth.h 7954 2017-03-04 19:37:07Z michael $ + * \brief Interface for DNS and ident lookups. + * \version $Id: auth.h 8430 2018-03-27 18:48:40Z michael $ */ #ifndef INCLUDED_auth_h @@ -32,15 +32,10 @@ enum { - AM_IN_AUTH = 0x00000001U, - AM_DOING_AUTH = 0x00000002U, - AM_DNS_PENDING = 0x00000004U + AM_DOING_AUTH = 1 << 0, + AM_DNS_PENDING = 1 << 1 }; -#define SetInAuth(x) ((x)->flags |= AM_IN_AUTH) -#define ClearInAuth(x) ((x)->flags &= ~AM_IN_AUTH) -#define IsInAuth(x) ((x)->flags & AM_IN_AUTH) - #define SetDNSPending(x) ((x)->flags |= AM_DNS_PENDING) #define ClearDNSPending(x) ((x)->flags &= ~AM_DNS_PENDING) #define IsDNSPending(x) ((x)->flags & AM_DNS_PENDING) @@ -57,12 +52,11 @@ dlink_node node; /**< Doubly linked list node. */ unsigned int flags; /**< Current state of request. */ struct Client *client; /**< Pointer to Client structure for request. */ - fde_t fd; /**< File descriptor for identd queries. */ + fde_t *fd; /**< File descriptor for identd queries. */ uintmax_t timeout; /**< Time when query expires. */ }; extern void auth_init(void); extern void auth_start(struct Client *); extern void auth_delete(struct AuthRequest *); -extern void release_auth_client(struct AuthRequest *); #endif diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/channel.h ircd-hybrid-8.2.24+dfsg.1/include/channel.h --- ircd-hybrid-8.2.22+dfsg.1/include/channel.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/channel.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file channel.h * \brief Responsible for managing channels, members, bans and topics - * \version $Id: channel.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: channel.h 8438 2018-03-29 13:05:42Z michael $ */ #ifndef INCLUDED_channel_h @@ -38,8 +38,8 @@ enum { - MSG_FLOOD_NOTICED = 0x00000001U, - JOIN_FLOOD_NOTICED = 0x00000002U + MSG_FLOOD_NOTICED = 1 << 0, + JOIN_FLOOD_NOTICED = 1 << 1 }; #define SetFloodNoticed(x) ((x)->flags |= MSG_FLOOD_NOTICED) @@ -129,26 +129,24 @@ uintmax_t when; /**< Time the invite has been created */ }; -extern dlink_list channel_list; +extern const dlink_list *channel_get_list(void); extern int channel_check_name(const char *, const int); extern int can_send(struct Channel *, struct Client *, struct Membership *, const char *, int); extern int is_banned(const struct Channel *, const struct Client *); extern int has_member_flags(const struct Membership *, const unsigned int); extern void channel_do_join(struct Client *, char *, char *); -extern void channel_do_join_0(struct Client *); extern void channel_do_part(struct Client *, char *, const char *); extern void remove_ban(struct Ban *, dlink_list *); -extern void channel_init(void); extern void add_user_to_channel(struct Channel *, struct Client *, unsigned int, int); extern void remove_user_from_channel(struct Membership *); extern void channel_member_names(struct Client *, struct Channel *, int); extern void add_invite(struct Channel *, struct Client *); extern void del_invite(struct Invite *); extern void clear_invite_list(dlink_list *); -extern void channel_send_modes(struct Client *, struct Channel *); -extern void channel_modes(struct Channel *, struct Client *, char *, char *); +extern void channel_send_modes(struct Client *, const struct Channel *); +extern void channel_modes(const struct Channel *, const struct Client *, char *, char *); extern void check_spambot_warning(struct Client *, const char *); extern void channel_free(struct Channel *); extern void channel_set_topic(struct Channel *, const char *, const char *, uintmax_t, int); @@ -156,5 +154,5 @@ extern const char *get_member_status(const struct Membership *, const int); extern struct Channel *channel_make(const char *); -extern struct Membership *find_channel_link(struct Client *, struct Channel *); -#endif +extern struct Membership *find_channel_link(const struct Client *, const struct Channel *); +#endif /* INCLUDED_channel_h */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/channel_mode.h ircd-hybrid-8.2.24+dfsg.1/include/channel_mode.h --- ircd-hybrid-8.2.22+dfsg.1/include/channel_mode.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/channel_mode.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file channel_mode.h * \brief Includes channel mode related definitions and structures. - * \version $Id: channel_mode.h 8045 2017-03-18 18:05:41Z michael $ + * \version $Id: channel_mode.h 8478 2018-04-03 17:03:30Z michael $ */ #ifndef INCLUDED_channel_mode_h @@ -63,36 +63,37 @@ /* Channel related flags */ enum { - CHFL_CHANOP = 0x00000001U, /* Channel operator */ - CHFL_HALFOP = 0x00000002U, /* Channel half op */ - CHFL_VOICE = 0x00000004U, /* the power to speak */ - CHFL_BAN = 0x00000008U, /* ban channel flag */ - CHFL_EXCEPTION = 0x00000010U, /* exception to ban channel flag */ - CHFL_INVEX = 0x00000020U, + CHFL_CHANOP = 1 << 0, /* Channel operator */ + CHFL_HALFOP = 1 << 1, /* Channel half op */ + CHFL_VOICE = 1 << 2, /* the power to speak */ + CHFL_BAN = 1 << 3, /* ban channel flag */ + CHFL_EXCEPTION = 1 << 4, /* exception to ban channel flag */ + CHFL_INVEX = 1 << 5, /* Cache flags for silence on ban */ - CHFL_BAN_CHECKED = 0x00000040U, - CHFL_BAN_SILENCED = 0x00000080U + CHFL_BAN_CHECKED = 1 << 6, + CHFL_BAN_SILENCED = 1 << 7 }; /* channel modes ONLY */ enum { - MODE_PRIVATE = 0x00000001U, /**< */ - MODE_SECRET = 0x00000002U, /**< Channel does not show up on NAMES or LIST */ - MODE_MODERATED = 0x00000004U, /**< Users without +v/+h/+o cannot send text to the channel */ - MODE_TOPICLIMIT = 0x00000008U, /**< Only chanops can change the topic */ - MODE_INVITEONLY = 0x00000010U, /**< Only invited users may join this channel */ - MODE_NOPRIVMSGS = 0x00000020U, /**< Users must be in the channel to send text to it */ - MODE_SSLONLY = 0x00000040U, /**< Prevents anyone who isn't connected via SSL/TLS from joining the channel */ - MODE_OPERONLY = 0x00000080U, /**< Prevents anyone who hasn't obtained IRC operator status from joining the channel */ - MODE_REGISTERED = 0x00000100U, /**< Channel has been registered with ChanServ */ - MODE_REGONLY = 0x00000200U, /**< Only registered clients may join a channel with that mode set */ - MODE_NOCTRL = 0x00000400U, /**< Prevents users from sending messages containing control codes to the channel */ - MODE_MODREG = 0x00000800U, /**< Unregistered/unidentified clients cannot send text to the channel */ - MODE_NOCTCP = 0x00001000U, /**< Clients cannot send CTCP messages to the channel */ - MODE_NONOTICE = 0x00002000U, /**< Clients cannot send NOTICE to the channel */ - MODE_HIDEBMASKS = 0x00004000U, /**< Hides +b/+e/+I lists/changes for non-chanops everywhere */ - MODE_EXTLIMIT = 0x00008000U /**< Channel can make use of the extended ban list limit */ + MODE_PRIVATE = 1 << 0, /**< */ + MODE_SECRET = 1 << 1, /**< Channel does not show up on NAMES or LIST */ + MODE_MODERATED = 1 << 2, /**< Users without +v/+h/+o cannot send text to the channel */ + MODE_TOPICLIMIT = 1 << 3, /**< Only chanops can change the topic */ + MODE_INVITEONLY = 1 << 4, /**< Only invited users may join this channel */ + MODE_NOPRIVMSGS = 1 << 5, /**< Users must be in the channel to send text to it */ + MODE_SSLONLY = 1 << 6, /**< Prevents anyone who isn't connected via SSL/TLS from joining the channel */ + MODE_OPERONLY = 1 << 7, /**< Prevents anyone who hasn't obtained IRC operator status from joining the channel */ + MODE_REGISTERED = 1 << 8, /**< Channel has been registered with ChanServ */ + MODE_REGONLY = 1 << 9, /**< Only registered clients may join a channel with that mode set */ + MODE_NOCTRL = 1 << 10, /**< Prevents users from sending messages containing control codes to the channel */ + MODE_MODREG = 1 << 11, /**< Unregistered/unidentified clients cannot send text to the channel */ + MODE_NOCTCP = 1 << 12, /**< Clients cannot send CTCP messages to the channel */ + MODE_NONOTICE = 1 << 13, /**< Clients cannot send NOTICE to the channel */ + MODE_HIDEBMASKS = 1 << 14, /**< Hides +b/+e/+I lists/changes for non-chanops everywhere */ + MODE_EXTLIMIT = 1 << 15, /**< Channel can make use of the extended ban list limit */ + MODE_NONICKCHANGE = 1 << 16 /**< User is prevented from changing their nick while in this channel */ }; #define HasCMode(x, y) ((x)->mode.mode & (y)) @@ -105,14 +106,6 @@ /* knock is forbidden, halfops can't kick/deop other halfops. */ #define PrivateChannel(x) (((x)->mode.mode & MODE_PRIVATE)) -struct ChannelMode -{ - void (*func)(struct Client *, - struct Channel *, int, int *, char **, - int *, int, int, char, unsigned int); - unsigned int d; -}; - struct ChModeChange { char letter; @@ -122,17 +115,23 @@ unsigned int flags; }; -struct mode_letter +struct chan_mode { - const unsigned int mode; const unsigned char letter; + const unsigned int mode; + const unsigned int only_opers; + const unsigned int only_servers; + void (*func)(struct Client *, + struct Channel *, int, int *, char **, int *, + int, int, const char, const struct chan_mode *); }; -extern const struct mode_letter chan_modes[]; -extern const struct ChannelMode ModeTable[]; +extern const struct chan_mode *cmode_map[]; +extern const struct chan_mode cmode_tab[]; +extern void channel_mode_init(void); extern int add_id(struct Client *, struct Channel *, char *, unsigned int); -extern void set_channel_mode(struct Client *, struct Channel *, +extern void channel_mode_set(struct Client *, struct Channel *, struct Membership *, int, char **); extern void clear_ban_cache_list(dlink_list *); #endif /* INCLUDED_channel_mode_h */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/client.h ircd-hybrid-8.2.24+dfsg.1/include/client.h --- ircd-hybrid-8.2.22+dfsg.1/include/client.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/client.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file client.h * \brief Header including structures, macros and prototypes for client handling - * \version $Id: client.h 7996 2017-03-14 13:17:39Z michael $ + * \version $Id: client.h 8483 2018-04-04 15:07:19Z michael $ */ @@ -41,19 +41,19 @@ */ enum { - STAT_CONNECTING = 0x00000001U, - STAT_HANDSHAKE = 0x00000002U, - STAT_ME = 0x00000004U, - STAT_UNKNOWN = 0x00000008U, - STAT_SERVER = 0x00000010U, - STAT_CLIENT = 0x00000020U + STAT_CONNECTING = 1, + STAT_HANDSHAKE, + STAT_ME, + STAT_UNKNOWN, + STAT_SERVER, + STAT_CLIENT }; enum { - REG_NEED_USER = 0x00000001U, /**< User must send USER command */ - REG_NEED_NICK = 0x00000002U, /**< User must send NICK command */ - REG_NEED_CAP = 0x00000004U, /**< In middle of CAP negotiations */ + REG_NEED_USER = 1 << 0, /**< User must send USER command */ + REG_NEED_NICK = 1 << 1, /**< User must send NICK command */ + REG_NEED_CAP = 1 << 2, /**< In middle of CAP negotiations */ REG_INIT = REG_NEED_USER | REG_NEED_NICK }; @@ -98,13 +98,13 @@ enum { - CAP_MULTI_PREFIX = 0x00000001U, /**< ircv3.1 multi-prefix client capability */ - CAP_AWAY_NOTIFY = 0x00000002U, /**< ircv3.1 away-notify client capability */ - CAP_UHNAMES = 0x00000004U, /**< ircv3.2 userhost-in-names client capability */ - CAP_EXTENDED_JOIN = 0x00000008U, /**< ircv3.1 extended-join client capability */ - CAP_ACCOUNT_NOTIFY = 0x00000010U, /**< ircv3.1 account-notify client capability */ - CAP_INVITE_NOTIFY = 0x00000020U, /**< ircv3.2 invite-notify client capability */ - CAP_CHGHOST = 0x00000040U /**< ircv3.2 chghost client capability */ + CAP_MULTI_PREFIX = 1 << 0, /**< ircv3.1 multi-prefix client capability */ + CAP_AWAY_NOTIFY = 1 << 1, /**< ircv3.1 away-notify client capability */ + CAP_UHNAMES = 1 << 2, /**< ircv3.2 userhost-in-names client capability */ + CAP_EXTENDED_JOIN = 1 << 3, /**< ircv3.1 extended-join client capability */ + CAP_ACCOUNT_NOTIFY = 1 << 4, /**< ircv3.1 account-notify client capability */ + CAP_INVITE_NOTIFY = 1 << 5, /**< ircv3.2 invite-notify client capability */ + CAP_CHGHOST = 1 << 6 /**< ircv3.2 chghost client capability */ }; #define HasCap(x, y) ((x)->connection->cap_active & (y)) @@ -113,31 +113,31 @@ /* housekeeping flags */ enum { - FLAGS_PINGSENT = 0x00000001U, /**< Unreplied ping sent */ - FLAGS_DEADSOCKET = 0x00000002U, /**< Local socket is dead--Exiting soon */ - FLAGS_KILLED = 0x00000004U, /**< Prevents "QUIT" from being sent for this */ - FLAGS_CLOSING = 0x00000008U, /**< Set when closing to suppress errors */ - FLAGS_GOTID = 0x00000010U, /**< Successful ident lookup achieved */ - FLAGS_SENDQEX = 0x00000020U, /**< Sendq exceeded */ - FLAGS_IPHASH = 0x00000040U, /**< Iphashed this client */ - FLAGS_MARK = 0x00000080U, /**< Marked client */ - FLAGS_CANFLOOD = 0x00000100U, /**< Client has the ability to flood */ - FLAGS_EXEMPTKLINE = 0x00000200U, /**< Client is exempt from k-lines */ - FLAGS_NOLIMIT = 0x00000400U, /**< Client is exempt from limits */ - FLAGS_PING_COOKIE = 0x00000800U, /**< PING Cookie */ - FLAGS_FLOODDONE = 0x00001000U, /**< Flood grace period has been ended. */ - FLAGS_EOB = 0x00002000U, /**< Server has sent us an EOB */ - FLAGS_HIDDEN = 0x00004000U, /**< A hidden server. Not shown in /links */ - FLAGS_BLOCKED = 0x00008000U, /**< Must wait for COMM_SELECT_WRITE */ - FLAGS_USERHOST = 0x00010000U, /**< Client is in userhost hash */ - FLAGS_EXEMPTRESV = 0x00020000U, /**< Client is exempt from RESV */ - FLAGS_GOTUSER = 0x00040000U, /**< If we received a USER command */ - FLAGS_FINISHED_AUTH = 0x00080000U, /**< Client has been released from auth */ - FLAGS_FLOOD_NOTICED = 0x00100000U, /**< Notice to opers about this flooder has been sent */ - FLAGS_SERVICE = 0x00200000U, /**< Client/server is a network service */ - FLAGS_SSL = 0x00400000U, /**< User is connected via TLS/SSL */ - FLAGS_SQUIT = 0x00800000U, - FLAGS_EXEMPTXLINE = 0x01000000U /**< Client is exempt from x-lines */ + FLAGS_PINGSENT = 1 << 0, /**< Unreplied ping sent */ + FLAGS_DEADSOCKET = 1 << 1, /**< Local socket is dead--Exiting soon */ + FLAGS_KILLED = 1 << 2, /**< Prevents "QUIT" from being sent for this */ + FLAGS_CLOSING = 1 << 3, /**< Set when closing to suppress errors */ + FLAGS_GOTID = 1 << 4, /**< Successful ident lookup achieved */ + FLAGS_SENDQEX = 1 << 5, /**< Sendq exceeded */ + FLAGS_IPHASH = 1 << 6, /**< Iphashed this client */ + FLAGS_MARK = 1 << 7, /**< Marked client */ + FLAGS_CANFLOOD = 1 << 8, /**< Client has the ability to flood */ + FLAGS_EXEMPTKLINE = 1 << 9, /**< Client is exempt from k-lines */ + FLAGS_NOLIMIT = 1 << 10, /**< Client is exempt from limits */ + FLAGS_PING_COOKIE = 1 << 11, /**< PING Cookie */ + FLAGS_FLOODDONE = 1 << 12, /**< Flood grace period has been ended. */ + FLAGS_EOB = 1 << 13, /**< Server has sent us an EOB */ + FLAGS_HIDDEN = 1 << 14, /**< A hidden server. Not shown in /links */ + FLAGS_BLOCKED = 1 << 15, /**< Must wait for COMM_SELECT_WRITE */ + FLAGS_USERHOST = 1 << 16, /**< Client is in userhost hash */ + FLAGS_EXEMPTRESV = 1 << 17, /**< Client is exempt from RESV */ + FLAGS_GOTUSER = 1 << 18, /**< If we received a USER command */ + FLAGS_FINISHED_AUTH = 1 << 19, /**< Client has been released from auth */ + FLAGS_FLOOD_NOTICED = 1 << 20, /**< Notice to opers about this flooder has been sent */ + FLAGS_SERVICE = 1 << 21, /**< Client/server is a network service */ + FLAGS_SSL = 1 << 22, /**< User is connected via TLS/SSL */ + FLAGS_SQUIT = 1 << 23, + FLAGS_EXEMPTXLINE = 1 << 24 /**< Client is exempt from x-lines */ }; #define HasFlag(x, y) ((x)->flags & (y)) @@ -148,34 +148,33 @@ /* umodes, settable flags */ enum { - UMODE_SERVNOTICE = 0x00000001U, /**< Server notices such as kill */ - UMODE_CCONN = 0x00000002U, /**< Can see client connection notices */ - UMODE_REJ = 0x00000004U, /**< Bot Rejections */ - UMODE_SKILL = 0x00000008U, /**< Server Killed */ - UMODE_FULL = 0x00000010U, /**< Full messages */ - UMODE_SPY = 0x00000020U, /**< See STATS / LINKS */ - UMODE_DEBUG = 0x00000040U, /**< 'debugging' info */ - UMODE_NCHANGE = 0x00000080U, /**< Nick change notice */ - UMODE_WALLOP = 0x00000100U, /**< Send wallops to them */ - UMODE_INVISIBLE = 0x00000200U, /**< Makes user invisible */ - UMODE_BOTS = 0x00000400U, /**< Shows bots */ - UMODE_EXTERNAL = 0x00000800U, /**< Show servers introduced and splitting */ - UMODE_CALLERID = 0x00001000U, /**< Block unless caller id's */ - UMODE_SOFTCALLERID = 0x00002000U, /**< Block unless on common channel */ - UMODE_UNAUTH = 0x00004000U, /**< Show unauth connects here */ - UMODE_LOCOPS = 0x00008000U, /**< Can see LOCOPS messages */ - UMODE_DEAF = 0x00010000U, /**< Don't receive channel messages */ - UMODE_REGISTERED = 0x00020000U, /**< User has identified for that nick. */ - UMODE_REGONLY = 0x00040000U, /**< Only registered nicks may PM */ - UMODE_HIDDEN = 0x00080000U, /**< IRC operator status is hidden */ - UMODE_OPER = 0x00100000U, /**< IRC operator */ - UMODE_ADMIN = 0x00200000U, /**< Admin on server */ - UMODE_FARCONNECT = 0x00400000U, /**< Can see remote client connects/exits */ - UMODE_HIDDENHOST = 0x00800000U, /**< User's host is hidden */ - UMODE_SSL = 0x01000000U, /**< User is connected via TLS/SSL */ - UMODE_WEBIRC = 0x02000000U, /**< User connected via a webirc gateway */ - UMODE_HIDEIDLE = 0x04000000U, /**< Hides idle and signon time in WHOIS */ - UMODE_HIDECHANS = 0x08000000U /**< Hides channel list in WHOIS */ + UMODE_SERVNOTICE = 1 << 0, /**< Server notices such as kill */ + UMODE_CCONN = 1 << 1, /**< Can see client connection notices */ + UMODE_REJ = 1 << 2, /**< Bot Rejections */ + UMODE_SKILL = 1 << 3, /**< Server Killed */ + UMODE_FULL = 1 << 4, /**< Full messages */ + UMODE_SPY = 1 << 5, /**< See STATS / LINKS */ + UMODE_DEBUG = 1 << 6, /**< 'debugging' info */ + UMODE_NCHANGE = 1 << 7, /**< Nick change notice */ + UMODE_WALLOP = 1 << 8, /**< Send wallops to them */ + UMODE_INVISIBLE = 1 << 9, /**< Makes user invisible */ + UMODE_BOTS = 1 << 10, /**< Shows bots */ + UMODE_EXTERNAL = 1 << 11, /**< Show servers introduced and splitting */ + UMODE_CALLERID = 1 << 12, /**< Block unless caller id's */ + UMODE_SOFTCALLERID = 1 << 13, /**< Block unless on common channel */ + UMODE_UNAUTH = 1 << 14, /**< Show unauth connects here */ + UMODE_LOCOPS = 1 << 15, /**< Can see LOCOPS messages */ + UMODE_DEAF = 1 << 16, /**< Don't receive channel messages */ + UMODE_REGISTERED = 1 << 17, /**< User has identified for that nick. */ + UMODE_REGONLY = 1 << 18, /**< Only registered nicks may PM */ + UMODE_HIDDEN = 1 << 19, /**< IRC operator status is hidden */ + UMODE_OPER = 1 << 20, /**< IRC operator */ + UMODE_ADMIN = 1 << 21, /**< Admin on server */ + UMODE_FARCONNECT = 1 << 22, /**< Can see remote client connects/exits */ + UMODE_SSL = 1 << 23, /**< User is connected via TLS/SSL */ + UMODE_WEBIRC = 1 << 24, /**< User connected via a webirc gateway */ + UMODE_HIDEIDLE = 1 << 25, /**< Hides idle and signon time in WHOIS */ + UMODE_HIDECHANS = 1 << 26 /**< Hides channel list in WHOIS */ }; #define HasUMode(x, y) ((x)->umodes & (y)) @@ -186,35 +185,35 @@ /** irc-operator privilege flags */ enum { - OPER_FLAG_ADMIN = 0x00000001U, /**< Oper can set user mode +a */ - OPER_FLAG_CLOSE = 0x00000002U, /**< Oper can use CLOSE command */ - OPER_FLAG_CONNECT = 0x00000004U, /**< Oper can do local CONNECT */ - OPER_FLAG_CONNECT_REMOTE = 0x00000008U, /**< Oper can do remote CONNECT */ - OPER_FLAG_DIE = 0x00000010U, /**< Oper can use DIE command */ - OPER_FLAG_DLINE = 0x00000020U, /**< Oper can use DLINE command */ - OPER_FLAG_GLOBOPS = 0x00000040U, /**< Oper can use GLOBOPS command */ - OPER_FLAG_JOIN_RESV = 0x00000080U, /**< Oper can use JOIN on resv {} channels */ - OPER_FLAG_KILL = 0x00000100U, /**< Oper can KILL local users */ - OPER_FLAG_KILL_REMOTE = 0x00000200U, /**< Oper can KILL remote users */ - OPER_FLAG_KLINE = 0x00000400U, /**< Oper can use KLINE command */ - OPER_FLAG_LOCOPS = 0x00000800U, /**< Oper can use LOCOPS command */ - OPER_FLAG_MODULE = 0x00001000U, /**< Oper can use MODULE command */ - OPER_FLAG_NICK_RESV = 0x00002000U, /**< Oper can use NICK on resv {} nicks */ - OPER_FLAG_OPME = 0x00004000U, /**< Oper can use OPME command */ - OPER_FLAG_REHASH = 0x00008000U, /**< Oper can use REHASH command */ - OPER_FLAG_REHASH_REMOTE = 0x00010000U, /**< Oper can do remote REHASH command */ - OPER_FLAG_REMOTEBAN = 0x00020000U, /**< Oper can set remote bans */ - OPER_FLAG_RESTART = 0x00040000U, /**< Oper can use RESTART command */ - OPER_FLAG_RESV = 0x00080000U, /**< Oper can use RESV command */ - OPER_FLAG_SET = 0x00100000U, /**< Oper can use SET command */ - OPER_FLAG_SQUIT = 0x00200000U, /**< Oper can do local SQUIT */ - OPER_FLAG_SQUIT_REMOTE = 0x00400000U, /**< Oper can do remote SQUIT */ - OPER_FLAG_UNDLINE = 0x00800000U, /**< Oper can use UNDLINE command */ - OPER_FLAG_UNKLINE = 0x01000000U, /**< Oper can use UNKLINE command */ - OPER_FLAG_UNRESV = 0x02000000U, /**< Oper can use UNRESV command */ - OPER_FLAG_UNXLINE = 0x04000000U, /**< Oper can use UNXLINE command */ - OPER_FLAG_WALLOPS = 0x08000000U, /**< Oper can use WALLOPS command */ - OPER_FLAG_XLINE = 0x10000000U /**< Oper can use XLINE command */ + OPER_FLAG_ADMIN = 1 << 0, /**< Oper can set user mode +a */ + OPER_FLAG_CLOSE = 1 << 1, /**< Oper can use CLOSE command */ + OPER_FLAG_CONNECT = 1 << 2, /**< Oper can do local CONNECT */ + OPER_FLAG_CONNECT_REMOTE = 1 << 3, /**< Oper can do remote CONNECT */ + OPER_FLAG_DIE = 1 << 4, /**< Oper can use DIE command */ + OPER_FLAG_DLINE = 1 << 5, /**< Oper can use DLINE command */ + OPER_FLAG_GLOBOPS = 1 << 6, /**< Oper can use GLOBOPS command */ + OPER_FLAG_JOIN_RESV = 1 << 7, /**< Oper can use JOIN on resv {} channels */ + OPER_FLAG_KILL = 1 << 8, /**< Oper can KILL local users */ + OPER_FLAG_KILL_REMOTE = 1 << 9, /**< Oper can KILL remote users */ + OPER_FLAG_KLINE = 1 << 10, /**< Oper can use KLINE command */ + OPER_FLAG_LOCOPS = 1 << 11, /**< Oper can use LOCOPS command */ + OPER_FLAG_MODULE = 1 << 12, /**< Oper can use MODULE command */ + OPER_FLAG_NICK_RESV = 1 << 13, /**< Oper can use NICK on resv {} nicks */ + OPER_FLAG_OPME = 1 << 14, /**< Oper can use OPME command */ + OPER_FLAG_REHASH = 1 << 15, /**< Oper can use REHASH command */ + OPER_FLAG_REHASH_REMOTE = 1 << 16, /**< Oper can do remote REHASH command */ + OPER_FLAG_REMOTEBAN = 1 << 17, /**< Oper can set remote bans */ + OPER_FLAG_RESTART = 1 << 18, /**< Oper can use RESTART command */ + OPER_FLAG_RESV = 1 << 19, /**< Oper can use RESV command */ + OPER_FLAG_SET = 1 << 20, /**< Oper can use SET command */ + OPER_FLAG_SQUIT = 1 << 21, /**< Oper can do local SQUIT */ + OPER_FLAG_SQUIT_REMOTE = 1 << 22, /**< Oper can do remote SQUIT */ + OPER_FLAG_UNDLINE = 1 << 23, /**< Oper can use UNDLINE command */ + OPER_FLAG_UNKLINE = 1 << 24, /**< Oper can use UNKLINE command */ + OPER_FLAG_UNRESV = 1 << 25, /**< Oper can use UNRESV command */ + OPER_FLAG_UNXLINE = 1 << 26, /**< Oper can use UNXLINE command */ + OPER_FLAG_WALLOPS = 1 << 27, /**< Oper can use WALLOPS command */ + OPER_FLAG_XLINE = 1 << 28 /**< Oper can use XLINE command */ }; #define HasOFlag(x, y) ((x)->connection->operflags & (y)) @@ -252,35 +251,27 @@ /*! \brief addr_mask_type enumeration */ enum addr_mask_type { - HIDE_IP, /**< IP is hidden. Resolved hostname is shown instead */ - SHOW_IP, /**< IP is shown. No parts of it are hidden or masked */ - MASK_IP /**< IP is masked. 255.255.255.255 is shown instead */ -}; - -struct ServicesTag -{ - dlink_node node; - char *tag; - unsigned int numeric; - unsigned int umodes; + HIDE_IP, /**< IP is hidden. Resolved hostname is shown instead */ + SHOW_IP, /**< IP is shown. No parts of it are hidden or masked */ + MASK_IP /**< IP is masked. 255.255.255.255 is shown instead */ }; /*! \brief Server structure */ struct Server { - dlink_list server_list; /**< Servers on this server */ - dlink_list client_list; /**< Clients on this server */ - char by[NICKLEN + 1]; /**< Who activated this connection */ + dlink_list server_list; /**< Servers on this server */ + dlink_list client_list; /**< Clients on this server */ + char by[NICKLEN + 1]; /**< Who activated this connection */ }; /*! \brief ListTask structure */ struct ListTask { dlink_node node; /**< Embedded list node used to link into listing_client_list */ - dlink_list show_mask; /**< Channels to show */ - dlink_list hide_mask; /**< Channels to hide */ + dlink_list show_mask; /**< Channels to show */ + dlink_list hide_mask; /**< Channels to hide */ - unsigned int hash_index; /**< The hash bucket we are currently in */ + unsigned int hash_index; /**< The hash bucket we are currently in */ unsigned int users_min; unsigned int users_max; unsigned int created_min; @@ -341,7 +332,7 @@ uintmax_t last_attempt; /**< Last time the AWAY/INVITE/KNOCK/NICK request was issued */ } away, invite, knock, nick; - struct AuthRequest auth; + struct AuthRequest *auth; struct Listener *listener; /**< Listener accepted from */ dlink_list acceptlist; /**< Clients I'll allow to talk to me */ dlink_list watches; /**< Chain of Watch pointer blocks */ @@ -349,9 +340,8 @@ dlink_list invited; /**< Chain of invite pointer blocks */ struct irc_ssaddr ip; int aftype; /**< Makes life easier for DNS res in IPV6 */ - int country_id; /**< ID corresponding to a ISO 3166 country code */ - fde_t fd; + fde_t *fd; /* Anti-flood stuff. We track how many messages were parsed and how * many we were allowed in the current second, and apply a simple @@ -404,14 +394,21 @@ char username[USERLEN + 1]; /* client's username */ /* - * client->host contains the resolved name or ip address - * as a string for the user, it may be fiddled with for oper spoofing etc. - * once it's changed the *real* address goes away. This should be - * considered a read-only field after the client has registered. + * client->host contains the resolved name or ip address as a string + * for the user, it may be fiddled with for oper spoofing etc. + * once it's changed the *real* address goes away. */ char host[HOSTLEN + 1]; /* client's hostname */ /* + * client->realhost contains the resolved name or ip address as a string + * for the user. Once a client has registered, this field should be + * considered read-only. + */ + char realhost[HOSTLEN + 1]; /* client's real hostname */ + + + /* * client->info for unix clients will normally contain the info from the * gcos field in /etc/passwd but anything can go here. */ @@ -442,8 +439,6 @@ extern struct split_nuh_item *find_accept(const char *, const char *, const char *, struct Client *, int (*)(const char *, const char *)); -extern void client_attach_svstag(struct Client *, unsigned int, const char *, const char *); -extern void client_clear_svstags(struct Client *); extern void del_accept(struct split_nuh_item *, struct Client *); extern void del_all_accepts(struct Client *); extern void exit_client(struct Client *, const char *); @@ -458,5 +453,4 @@ extern struct Client *find_chasing(struct Client *, const char *); extern struct Client *find_person(const struct Client *, const char *); extern const char *client_get_name(const struct Client *, enum addr_mask_type); - -#endif /* INCLUDED_client_h */ +#endif /* INCLUDED_client_h */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/client_svstag.h ircd-hybrid-8.2.24+dfsg.1/include/client_svstag.h --- ircd-hybrid-8.2.22+dfsg.1/include/client_svstag.h 1970-01-01 00:00:00.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/client_svstag.h 2018-04-04 22:33:36.000000000 +0000 @@ -0,0 +1,41 @@ +/* + * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) + * + * Copyright (c) 2015-2018 ircd-hybrid development team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + */ + +/*! \file client_svstag.h + * \brief Controls SVSTAGS. + * \version $Id: client_svstag.h 8486 2018-04-04 15:13:05Z michael $ + */ + +#ifndef INCLUDED_client_svstag_h +#define INCLUDED_client_svstag_h + +struct ServicesTag +{ + dlink_node node; + char *tag; + unsigned int numeric; + unsigned int umodes; +}; + +extern void svstag_detach(dlink_list *, unsigned int); +extern void svstag_attach(dlink_list *, unsigned int, const char *, const char *); +extern void svstag_clear_list(dlink_list *); +#endif /* INCLUDED_client_svstag_h */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/conf_class.h ircd-hybrid-8.2.24+dfsg.1/include/conf_class.h --- ircd-hybrid-8.2.22+dfsg.1/include/conf_class.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/conf_class.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file * \brief Configuration managment for class{} blocks - * \version $Id: conf_class.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: conf_class.h 8436 2018-03-29 09:04:53Z michael $ */ @@ -64,7 +64,7 @@ extern struct ClassItem *class_default; extern struct ClassItem *class_make(void); -extern const struct ClassItem *get_class_ptr(const dlink_list *const); +extern const struct ClassItem *class_get_ptr(const dlink_list *const); extern const dlink_list *class_get_list(void); extern void class_free(struct ClassItem *const); extern void class_init(void); @@ -79,4 +79,4 @@ extern int cidr_limit_reached(int, struct irc_ssaddr *, struct ClassItem *); extern void remove_from_cidr_check(struct irc_ssaddr *, struct ClassItem *); extern void rebuild_cidr_list(struct ClassItem *); -#endif +#endif /* INCLUDED_conf_class_h */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/conf_cluster.h ircd-hybrid-8.2.24+dfsg.1/include/conf_cluster.h --- ircd-hybrid-8.2.22+dfsg.1/include/conf_cluster.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/conf_cluster.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file conf_cluster.h * \brief Implements cluster {} block configuration management. - * \version $Id: conf_cluster.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: conf_cluster.h 8430 2018-03-27 18:48:40Z michael $ */ #ifndef INCLUDED_conf_cluster_h @@ -29,17 +29,17 @@ enum { - CLUSTER_KLINE = 0x00000001U, - CLUSTER_UNKLINE = 0x00000002U, - CLUSTER_XLINE = 0x00000004U, - CLUSTER_UNXLINE = 0x00000008U, - CLUSTER_RESV = 0x00000010U, - CLUSTER_UNRESV = 0x00000020U, - CLUSTER_LOCOPS = 0x00000040U, - CLUSTER_DLINE = 0x00000080U, - CLUSTER_UNDLINE = 0x00000100U, - CLUSTER_REHASH = 0x00000200U, - CLUSTER_ALL = 0xFFFFFFFFU + CLUSTER_KLINE = 1 << 0, + CLUSTER_UNKLINE = 1 << 1, + CLUSTER_XLINE = 1 << 2, + CLUSTER_UNXLINE = 1 << 3, + CLUSTER_RESV = 1 << 4, + CLUSTER_UNRESV = 1 << 5, + CLUSTER_LOCOPS = 1 << 6, + CLUSTER_DLINE = 1 << 7, + CLUSTER_UNDLINE = 1 << 8, + CLUSTER_REHASH = 1 << 9, + CLUSTER_ALL = UINT_MAX }; struct ClusterItem diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/conf_db.h ircd-hybrid-8.2.24+dfsg.1/include/conf_db.h --- ircd-hybrid-8.2.22+dfsg.1/include/conf_db.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/conf_db.h 2018-04-04 22:33:36.000000000 +0000 @@ -2,7 +2,7 @@ * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * * Copyright (c) 1996-2009 by Andrew Church - * Copyright (c) 2012-2017 ircd-hybrid development team + * Copyright (c) 2012-2018 ircd-hybrid development team * * 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 @@ -22,7 +22,7 @@ /*! \file conf_db.h * \brief Includes file utilities for database handling - * \version $Id: conf_db.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: conf_db.h 8280 2018-02-20 19:30:33Z michael $ */ #ifndef INCLUDED_conf_db_h diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/conf_gecos.h ircd-hybrid-8.2.24+dfsg.1/include/conf_gecos.h --- ircd-hybrid-8.2.22+dfsg.1/include/conf_gecos.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/conf_gecos.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1998-2017 ircd-hybrid development team + * Copyright (c) 1998-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file conf_gecos.h * \brief Implements gecos {} block configuration management. - * \version $Id: conf_gecos.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: conf_gecos.h 8280 2018-02-20 19:30:33Z michael $ */ #ifndef INCLUDED_conf_gecos_h diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/conf.h ircd-hybrid-8.2.24+dfsg.1/include/conf.h --- ircd-hybrid-8.2.22+dfsg.1/include/conf.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/conf.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file conf.h * \brief A header for the configuration functions. - * \version $Id: conf.h 8045 2017-03-18 18:05:41Z michael $ + * \version $Id: conf.h 8478 2018-04-03 17:03:30Z michael $ */ #ifndef INCLUDED_conf_h @@ -32,27 +32,35 @@ #include "tls.h" +enum +{ + TK_SECONDS, + TK_MINUTES +}; + +enum { CLEANUP_TKLINES_TIME = 60 }; + #define CONF_NOREASON "" /* MaskItem->flags */ enum { - CONF_FLAGS_NO_TILDE = 0x00000001U, - CONF_FLAGS_NEED_IDENTD = 0x00000002U, - CONF_FLAGS_EXEMPTKLINE = 0x00000004U, - CONF_FLAGS_NOLIMIT = 0x00000008U, - CONF_FLAGS_SPOOF_IP = 0x00000010U, - CONF_FLAGS_SPOOF_NOTICE = 0x00000020U, - CONF_FLAGS_REDIR = 0x00000040U, - CONF_FLAGS_CAN_FLOOD = 0x00000080U, - CONF_FLAGS_NEED_PASSWORD = 0x00000100U, - CONF_FLAGS_ALLOW_AUTO_CONN = 0x00000200U, - CONF_FLAGS_ENCRYPTED = 0x00000400U, - CONF_FLAGS_IN_DATABASE = 0x00000800U, - CONF_FLAGS_EXEMPTRESV = 0x00001000U, - CONF_FLAGS_SSL = 0x00002000U, - CONF_FLAGS_WEBIRC = 0x00004000U, - CONF_FLAGS_EXEMPTXLINE = 0x00008000U + CONF_FLAGS_NO_TILDE = 1 << 0, + CONF_FLAGS_NEED_IDENTD = 1 << 1, + CONF_FLAGS_EXEMPTKLINE = 1 << 2, + CONF_FLAGS_NOLIMIT = 1 << 3, + CONF_FLAGS_SPOOF_IP = 1 << 4, + CONF_FLAGS_SPOOF_NOTICE = 1 << 5, + CONF_FLAGS_REDIR = 1 << 6, + CONF_FLAGS_CAN_FLOOD = 1 << 7, + CONF_FLAGS_NEED_PASSWORD = 1 << 8, + CONF_FLAGS_ALLOW_AUTO_CONN = 1 << 9, + CONF_FLAGS_ENCRYPTED = 1 << 10, + CONF_FLAGS_IN_DATABASE = 1 << 11, + CONF_FLAGS_EXEMPTRESV = 1 << 12, + CONF_FLAGS_SSL = 1 << 13, + CONF_FLAGS_WEBIRC = 1 << 14, + CONF_FLAGS_EXEMPTXLINE = 1 << 15 }; /* Macros for struct MaskItem */ @@ -78,12 +86,12 @@ enum maskitem_type { - CONF_CLIENT = 1 << 0, - CONF_SERVER = 1 << 1, - CONF_KLINE = 1 << 2, - CONF_DLINE = 1 << 3, - CONF_EXEMPT = 1 << 4, - CONF_OPER = 1 << 5 + CONF_CLIENT = 1, + CONF_SERVER, + CONF_KLINE, + CONF_DLINE, + CONF_EXEMPT, + CONF_OPER }; #define IsConfKill(x) ((x)->type == CONF_KLINE) @@ -256,8 +264,6 @@ char *description; char *network_name; char *network_desc; - char *libgeoip_ipv4_database_file; - char *libgeoip_ipv6_database_file; char *rsa_private_key_file; char *ssl_certificate_file; char *ssl_dh_param_file; @@ -270,7 +276,6 @@ unsigned int default_max_clients; unsigned int max_nick_length; unsigned int max_topic_length; - unsigned int libgeoip_database_options; unsigned int specific_ipv4_vhost; unsigned int specific_ipv6_vhost; struct irc_ssaddr ip; @@ -302,22 +307,20 @@ extern int valid_wild_card_simple(const char *); extern int valid_wild_card(int, ...); -/* End GLOBAL section */ extern struct MaskItem *conf_make(enum maskitem_type); extern void read_conf_files(int); -extern int attach_conf(struct Client *, struct MaskItem *); -extern int attach_connect_block(struct Client *, const char *, const char *); +extern int conf_attach(struct Client *, struct MaskItem *); extern int check_client(struct Client *); -extern void detach_conf(struct Client *, enum maskitem_type); +extern void conf_detach(struct Client *, enum maskitem_type); extern struct MaskItem *find_conf_name(dlink_list *, const char *, enum maskitem_type); extern int conf_connect_allowed(struct irc_ssaddr *, int); extern const char *oper_privs_as_string(const unsigned int); extern void split_nuh(struct split_nuh_item *); extern struct MaskItem *operator_find(const struct Client *, const char *); -extern struct MaskItem *connect_find(const char *, const char *, int (*)(const char *, const char *)); +extern struct MaskItem *connect_find(const char *, int (*)(const char *, const char *)); extern void conf_free(struct MaskItem *); extern void yyerror(const char *); extern void conf_error_report(const char *); @@ -332,10 +335,6 @@ extern int parse_aline(const char *, struct Client *, int, char **, char **, char **, uintmax_t *, char **, char **); -#define TK_SECONDS 0 -#define TK_MINUTES 1 extern uintmax_t valid_tkline(const char *, const int); extern int match_conf_password(const char *, const struct MaskItem *); - -enum { CLEANUP_TKLINES_TIME = 60 }; -#endif /* INCLUDED_s_conf_h */ +#endif /* INCLUDED_conf_h */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/conf_pseudo.h ircd-hybrid-8.2.24+dfsg.1/include/conf_pseudo.h --- ircd-hybrid-8.2.22+dfsg.1/include/conf_pseudo.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/conf_pseudo.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2014-2017 ircd-hybrid development team + * Copyright (c) 2014-2018 ircd-hybrid development team * * 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 @@ -21,15 +21,26 @@ /*! \file conf_pseudo.h * \brief Handles with pseudo commands/service aliases. - * \version $Id: conf_pseudo.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: conf_pseudo.h 8457 2018-03-31 15:33:39Z michael $ */ #ifndef INCLUDED_conf_pseudo_h #define INCLUDED_conf_pseudo_h +struct PseudoItem +{ + dlink_node node; + struct Message msg; + char *name; + char *nick; + char *serv; + char *prepend; + char *command; +}; + extern const dlink_list *pseudo_get_list(void); extern void pseudo_register(const char *, const char *, const char *, const char *, const char *); extern void pseudo_clear(void); -#endif +#endif /* INCLUDED_conf_pseudo_h */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/conf_resv.h ircd-hybrid-8.2.24+dfsg.1/include/conf_resv.h --- ircd-hybrid-8.2.22+dfsg.1/include/conf_resv.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/conf_resv.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2001-2017 ircd-hybrid development team + * Copyright (c) 2001-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file conf_resv.h * \brief A header for the RESV functions. - * \version $Id: conf_resv.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: conf_resv.h 8313 2018-02-28 17:45:36Z michael $ */ #ifndef INCLUDED_conf_resv_h @@ -48,7 +48,6 @@ struct irc_ssaddr addr; int bits; int type; - int country_id; }; extern const dlink_list *resv_chan_get_list(void); diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/conf_service.h ircd-hybrid-8.2.24+dfsg.1/include/conf_service.h --- ircd-hybrid-8.2.22+dfsg.1/include/conf_service.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/conf_service.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2012-2017 ircd-hybrid development team + * Copyright (c) 2012-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file conf_service.h * \brief Implements service {} block configuration management. - * \version $Id: conf_service.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: conf_service.h 8432 2018-03-27 20:10:09Z michael $ */ #ifndef INCLUDED_conf_service_h @@ -36,5 +36,5 @@ extern const dlink_list *service_get_list(void); extern void service_clear(void); extern struct ServiceItem *service_make(void); -extern const struct ServiceItem *service_find(const char *); +extern const struct ServiceItem *service_find(const char *, int (*)(const char *, const char *)); #endif diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/conf_shared.h ircd-hybrid-8.2.24+dfsg.1/include/conf_shared.h --- ircd-hybrid-8.2.22+dfsg.1/include/conf_shared.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/conf_shared.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file conf_shared.h * \brief Implements shared {} block configuration management. - * \version $Id: conf_shared.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: conf_shared.h 8430 2018-03-27 18:48:40Z michael $ */ #ifndef INCLUDED_conf_shared_h @@ -29,17 +29,17 @@ enum { - SHARED_KLINE = 0x00000001U, - SHARED_UNKLINE = 0x00000002U, - SHARED_XLINE = 0x00000004U, - SHARED_UNXLINE = 0x00000008U, - SHARED_RESV = 0x00000010U, - SHARED_UNRESV = 0x00000020U, - SHARED_LOCOPS = 0x00000040U, - SHARED_DLINE = 0x00000080U, - SHARED_UNDLINE = 0x00000100U, - SHARED_REHASH = 0x00000200U, - SHARED_ALL = 0xFFFFFFFFU + SHARED_KLINE = 1 << 0, + SHARED_UNKLINE = 1 << 1, + SHARED_XLINE = 1 << 2, + SHARED_UNXLINE = 1 << 3, + SHARED_RESV = 1 << 4, + SHARED_UNRESV = 1 << 5, + SHARED_LOCOPS = 1 << 6, + SHARED_DLINE = 1 << 7, + SHARED_UNDLINE = 1 << 8, + SHARED_REHASH = 1 << 9, + SHARED_ALL = UINT_MAX }; struct SharedItem diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/dbuf.h ircd-hybrid-8.2.24+dfsg.1/include/dbuf.h --- ircd-hybrid-8.2.22+dfsg.1/include/dbuf.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/dbuf.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file dbuf.h * \brief A header for the dynamic buffers functions. - * \version $Id: dbuf.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: dbuf.h 8478 2018-04-03 17:03:30Z michael $ */ #ifndef INCLUDED_dbuf_h @@ -46,7 +46,6 @@ size_t pos; }; -extern void dbuf_init(void); extern struct dbuf_block *dbuf_alloc(void); extern void dbuf_ref_free(struct dbuf_block *); extern void dbuf_add(struct dbuf_queue *, struct dbuf_block *); @@ -54,4 +53,4 @@ extern void dbuf_put_fmt(struct dbuf_block *, const char *, ...); extern void dbuf_put_args(struct dbuf_block *, const char *, va_list); extern void dbuf_put(struct dbuf_queue *, const char *, size_t); -#endif +#endif /* INCLUDED_dbuf_h */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/defaults.h ircd-hybrid-8.2.24+dfsg.1/include/defaults.h --- ircd-hybrid-8.2.22+dfsg.1/include/defaults.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/defaults.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file defaults.h * \brief The ircd defaults header for values and paths. - * \version $Id: defaults.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: defaults.h 8380 2018-03-12 19:23:29Z michael $ */ #ifndef INCLUDED_defaults_h @@ -98,8 +98,8 @@ #define CLIENT_FLOOD_MIN 512 /* ConfigServerInfo default values */ -#define NETWORK_NAME_DEFAULT "EFnet" /* default for network_name */ -#define NETWORK_DESC_DEFAULT "Eris Free Network" /* default for network_desc */ +#define NETWORK_NAME_DEFAULT "2600net" /* default for network_name */ +#define NETWORK_DESC_DEFAULT "2600net IRC Network" /* default for network_desc */ /* General defaults */ #define MAXIMUM_LINKS_DEFAULT 0 /* default for maximum_links */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/event.h ircd-hybrid-8.2.24+dfsg.1/include/event.h --- ircd-hybrid-8.2.22+dfsg.1/include/event.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/event.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2000-2017 ircd-hybrid development team + * Copyright (c) 2000-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file event.h * \brief Timer based event execution - * \version $Id: event.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: event.h 8280 2018-02-20 19:30:33Z michael $ */ #ifndef INCLUDED_event_h diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/fdlist.h ircd-hybrid-8.2.24+dfsg.1/include/fdlist.h --- ircd-hybrid-8.2.22+dfsg.1/include/fdlist.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/fdlist.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file fdlist.h * \brief The file descriptor list header. - * \version $Id: fdlist.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: fdlist.h 8378 2018-03-11 14:56:39Z michael $ */ #ifndef INCLUDED_fdlist_h @@ -31,8 +31,7 @@ #include "tls.h" -enum { FD_DESC_SIZE = 128 }; /* hostlen + comment */ -enum { FD_HASH_SIZE = 1024 }; +enum { FD_DESC_SIZE = 128 }; /* HOSTLEN + comment */ enum { @@ -58,13 +57,17 @@ int comm_index; /* where in the poll list we live */ int evcache; /* current fd events as set up by the underlying I/O */ char desc[FD_DESC_SIZE]; + void (*read_handler)(struct _fde *, void *); void *read_data; + void (*write_handler)(struct _fde *, void *); void *write_data; + void (*timeout_handler)(struct _fde *, void *); void *timeout_data; uintmax_t timeout; + void (*flush_handler)(struct _fde *, void *); void *flush_data; uintmax_t flush_timeout; @@ -80,26 +83,24 @@ /* We don't need the host here ? */ struct irc_ssaddr S; struct irc_ssaddr hostaddr; + void (*callback)(struct _fde *, int, void *); void *data; /* We'd also add the retry count here when we get to that -- adrian */ } connect; tls_data_t ssl; - struct _fde *hnext; } fde_t; extern int number_fd; extern int hard_fdlimit; -extern fde_t *fd_hash[]; -extern fde_t *fd_next_in_loop; +extern int highest_fd; +extern fde_t *fd_table; extern void fdlist_init(void); -extern fde_t *lookup_fd(int); -extern void fd_open(fde_t *, int, int, const char *); +extern fde_t *fd_open(int, int, const char *); extern void fd_close(fde_t *); -extern void fd_dump(struct Client *, int, char *[]); extern void fd_note(fde_t *, const char *, ...); extern void close_standard_fds(void); -extern void close_fds(fde_t *); -#endif /* INCLUDED_fdlist_h */ +extern void close_fds(void); +#endif diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/hash.h ircd-hybrid-8.2.24+dfsg.1/include/hash.h --- ircd-hybrid-8.2.22+dfsg.1/include/hash.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/hash.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file hash.h * \brief A header for the ircd hashtable code. - * \version $Id: hash.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: hash.h 8280 2018-02-20 19:30:33Z michael $ */ #ifndef INCLUDED_hash_h diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/hostmask.h ircd-hybrid-8.2.24+dfsg.1/include/hostmask.h --- ircd-hybrid-8.2.22+dfsg.1/include/hostmask.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/hostmask.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2001-2017 ircd-hybrid development team + * Copyright (c) 2001-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file hostmask.h * \brief A header for the hostmask code. - * \version $Id: hostmask.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: hostmask.h 8280 2018-02-20 19:30:33Z michael $ */ #ifndef INCLUDED_hostmask_h diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/id.h ircd-hybrid-8.2.24+dfsg.1/include/id.h --- ircd-hybrid-8.2.22+dfsg.1/include/id.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/id.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file id.h * \brief Contains functions pertaining to SID/UID generation. - * \version $Id: id.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: id.h 8280 2018-02-20 19:30:33Z michael $ */ #ifndef INCLUDED_id_h diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/ipcache.h ircd-hybrid-8.2.24+dfsg.1/include/ipcache.h --- ircd-hybrid-8.2.22+dfsg.1/include/ipcache.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/ipcache.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file ipcache.h * \brief Routines to count connections from particular IP addresses. - * \version $Id: ipcache.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: ipcache.h 8280 2018-02-20 19:30:33Z michael $ */ #ifndef INCLUDED_ipcache_h diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/ircd_defs.h ircd-hybrid-8.2.24+dfsg.1/include/ircd_defs.h --- ircd-hybrid-8.2.22+dfsg.1/include/ircd_defs.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/ircd_defs.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file ircd_defs.h * \brief A header for ircd global definitions. - * \version $Id: ircd_defs.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: ircd_defs.h 8280 2018-02-20 19:30:33Z michael $ */ /* ircd_defs.h - Global size definitions for record entries used diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/ircd_getopt.h ircd-hybrid-8.2.24+dfsg.1/include/ircd_getopt.h --- ircd-hybrid-8.2.22+dfsg.1/include/ircd_getopt.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/ircd_getopt.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2001-2017 ircd-hybrid development team + * Copyright (c) 2001-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file ircd_getopt.h * \brief A header for the getopt() command line option calls. - * \version $Id: ircd_getopt.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: ircd_getopt.h 8280 2018-02-20 19:30:33Z michael $ */ #ifndef INCLUDED_ircd_getopt_h diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/ircd.h ircd-hybrid-8.2.24+dfsg.1/include/ircd.h --- ircd-hybrid-8.2.22+dfsg.1/include/ircd.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/ircd.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file ircd.h * \brief A header for the ircd startup routines. - * \version $Id: ircd.h 7998 2017-03-14 13:50:29Z michael $ + * \version $Id: ircd.h 8313 2018-02-28 17:45:36Z michael $ */ @@ -94,10 +94,6 @@ }; -#ifdef HAVE_LIBGEOIP -extern GeoIP *GeoIPv4_ctx; -extern GeoIP *GeoIPv6_ctx; -#endif extern char **myargv; extern const char *infotext[]; extern const char *serno; diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/ircd_signal.h ircd-hybrid-8.2.24+dfsg.1/include/ircd_signal.h --- ircd-hybrid-8.2.22+dfsg.1/include/ircd_signal.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/ircd_signal.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file ircd_signal.h * \brief A header for ircd signals. - * \version $Id: ircd_signal.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: ircd_signal.h 8280 2018-02-20 19:30:33Z michael $ */ #ifndef INCLUDED_ircd_signal_h diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/irc_string.h ircd-hybrid-8.2.24+dfsg.1/include/irc_string.h --- ircd-hybrid-8.2.22+dfsg.1/include/irc_string.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/irc_string.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1999-2017 ircd-hybrid development team + * Copyright (c) 1999-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file irc_string.h * \brief A header for the ircd string functions. - * \version $Id: irc_string.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: irc_string.h 8436 2018-03-29 09:04:53Z michael $ */ #ifndef INCLUDED_irc_string_h @@ -85,23 +85,26 @@ extern const unsigned int CharAttrs[]; -#define PRINT_C 0x00001 -#define CNTRL_C 0x00002 -#define ALPHA_C 0x00004 -#define PUNCT_C 0x00008 -#define DIGIT_C 0x00010 -#define SPACE_C 0x00020 -#define NICK_C 0x00040 -#define CHAN_C 0x00080 -#define KWILD_C 0x00100 -#define CHANPFX_C 0x00200 -#define USER_C 0x00400 -#define HOST_C 0x00800 -#define NONEOS_C 0x01000 -#define SERV_C 0x02000 -#define EOL_C 0x04000 -#define MWILD_C 0x08000 -#define VCHAN_C 0x10000 +enum +{ + PRINT_C = 1 << 0, + CNTRL_C = 1 << 1, + ALPHA_C = 1 << 2, + PUNCT_C = 1 << 3, + DIGIT_C = 1 << 4, + SPACE_C = 1 << 5, + NICK_C = 1 << 6, + CHAN_C = 1 << 7, + KWILD_C = 1 << 8, + CHANPFX_C = 1 << 9, + USER_C = 1 << 10, + HOST_C = 1 << 11, + NONEOS_C = 1 << 12, + SERV_C = 1 << 13, + EOL_C = 1 << 14, + MWILD_C = 1 << 15, + VCHAN_C = 1 << 16 +}; #define IsVisibleChanChar(c) (CharAttrs[(unsigned char)(c)] & VCHAN_C) #define IsHostChar(c) (CharAttrs[(unsigned char)(c)] & HOST_C) @@ -129,4 +132,4 @@ #define IsNonEOS(c) (CharAttrs[(unsigned char)(c)] & NONEOS_C) #define IsEol(c) (CharAttrs[(unsigned char)(c)] & EOL_C) -#endif /* INCLUDED_irc_string_h */ +#endif /* INCLUDED_irc_string_h */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/isupport.h ircd-hybrid-8.2.24+dfsg.1/include/isupport.h --- ircd-hybrid-8.2.22+dfsg.1/include/isupport.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/isupport.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file isupport.h * \brief Contains functions pertaining to RPL_ISUPPORT. - * \version $Id: isupport.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: isupport.h 8280 2018-02-20 19:30:33Z michael $ */ #ifndef INCLUDED_isupport_h diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/listener.h ircd-hybrid-8.2.24+dfsg.1/include/listener.h --- ircd-hybrid-8.2.22+dfsg.1/include/listener.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/listener.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file listener.h * \brief A header for the listener code. - * \version $Id: listener.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: listener.h 8338 2018-03-03 22:26:59Z michael $ */ #ifndef INCLUDED_listener_h @@ -40,7 +40,7 @@ struct Listener { dlink_node node; /**< Doubly linked list node */ - fde_t fd; /**< Describe socket to event system */ + fde_t *fd; /**< File descriptor */ int port; /**< Listener IP port */ int ref_count; /**< Number of connection references */ int active; /**< Current state of listener */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/list.h ircd-hybrid-8.2.24+dfsg.1/include/list.h --- ircd-hybrid-8.2.22+dfsg.1/include/list.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/list.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2000-2017 ircd-hybrid development team + * Copyright (c) 2000-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file list.h * \brief A header for the list manipulation routines. - * \version $Id: list.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: list.h 8384 2018-03-16 20:06:38Z michael $ */ #ifndef INCLUDED_list_h @@ -70,7 +70,6 @@ unsigned int length; }; -extern void init_dlink_nodes(void); extern void free_dlink_node(dlink_node *); extern void dlinkAdd(void *, dlink_node *, dlink_list *); extern void dlinkAddBefore(dlink_node *, void *, dlink_node *, dlink_list *); diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/log.h ircd-hybrid-8.2.24+dfsg.1/include/log.h --- ircd-hybrid-8.2.22+dfsg.1/include/log.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/log.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file log.h * \brief A header for the logger functions. - * \version $Id: log.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: log.h 8280 2018-02-20 19:30:33Z michael $ */ #ifndef INCLUDED_log_h diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/memory.h ircd-hybrid-8.2.24+dfsg.1/include/memory.h --- ircd-hybrid-8.2.22+dfsg.1/include/memory.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/memory.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file memory.h * \brief A header for the memory functions. - * \version $Id: memory.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: memory.h 8280 2018-02-20 19:30:33Z michael $ */ #ifndef INCLUDED_memory_h diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/mempool.h ircd-hybrid-8.2.24+dfsg.1/include/mempool.h --- ircd-hybrid-8.2.22+dfsg.1/include/mempool.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/mempool.h 1970-01-01 00:00:00.000000000 +0000 @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2007-2012, The Tor Project, Inc. - * Copyright (c) 2012-2017 ircd-hybrid development team - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * - * * Neither the names of the copyright owners nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/*! \file mempool.h - * \brief Pooling allocator - * \version $Id: mempool.h 7925 2016-12-31 13:57:24Z michael $ - */ - -#ifndef INCLUDED_mempool_h -#define INCLUDED_mempool_h - -/** A memory pool is a context in which a large number of fixed-sized -* objects can be allocated efficiently. See mempool.c for implementation -* details. */ -typedef struct mp_pool_t mp_pool_t; - -extern void mp_pool_init(void); -extern void *mp_pool_get(mp_pool_t *); -extern void mp_pool_release(void *); -extern mp_pool_t *mp_pool_new(size_t, size_t); -extern void mp_pool_clean(mp_pool_t *, int, int); -extern void mp_pool_destroy(mp_pool_t *); -extern void mp_pool_assert_ok(mp_pool_t *); -extern void mp_pool_log_status(mp_pool_t *); -extern void mp_pool_garbage_collect(void *); - -#undef MEMPOOL_STATS - -struct mp_pool_t -{ - /** Next pool. A pool is usually linked into the mp_allocated_pools list. */ - mp_pool_t *next; - - /** Doubly-linked list of chunks in which no items have been allocated. - * The front of the list is the most recently emptied chunk. */ - struct mp_chunk_t *empty_chunks; - - /** Doubly-linked list of chunks in which some items have been allocated, - * but which are not yet full. The front of the list is the chunk that has - * most recently been modified. */ - struct mp_chunk_t *used_chunks; - - /** Doubly-linked list of chunks in which no more items can be allocated. - * The front of the list is the chunk that has most recently become full. */ - struct mp_chunk_t *full_chunks; - - /** Length of empty_chunks. */ - int n_empty_chunks; - - /** Lowest value of empty_chunks since last call to - * mp_pool_clean(-1). */ - int min_empty_chunks; - - /** Size of each chunk (in items). */ - int new_chunk_capacity; - - /** Size of each item */ - size_t item_size; - - /** Size to allocate for each item, including overhead and alignment - * padding. */ - size_t item_alloc_size; -#ifdef MEMPOOL_STATS - /** Total number of items allocated ever. */ - uint64_t total_items_allocated; - - /** Total number of chunks allocated ever. */ - uint64_t total_chunks_allocated; - - /** Total number of chunks freed ever. */ - uint64_t total_chunks_freed; -#endif -}; -#endif diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/misc.h ircd-hybrid-8.2.24+dfsg.1/include/misc.h --- ircd-hybrid-8.2.22+dfsg.1/include/misc.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/misc.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file misc.h * \brief A header for the miscellaneous functions. - * \version $Id: misc.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: misc.h 8280 2018-02-20 19:30:33Z michael $ */ #ifndef INCLUDED_misc_h diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/modules.h ircd-hybrid-8.2.24+dfsg.1/include/modules.h --- ircd-hybrid-8.2.22+dfsg.1/include/modules.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/modules.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2000-2017 ircd-hybrid development team + * Copyright (c) 2000-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file modules.h * \brief A header for the modules functions. - * \version $Id: modules.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: modules.h 8280 2018-02-20 19:30:33Z michael $ */ #ifndef INCLUDED_modules_h diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/motd.h ircd-hybrid-8.2.24+dfsg.1/include/motd.h --- ircd-hybrid-8.2.22+dfsg.1/include/motd.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/motd.h 2018-04-04 22:33:36.000000000 +0000 @@ -2,7 +2,7 @@ * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * * Copyright (c) 2000 Kevin L. Mitchell - * Copyright (c) 2013-2017 ircd-hybrid development team + * Copyright (c) 2013-2018 ircd-hybrid development team * * 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 @@ -22,7 +22,7 @@ /*! \file motd.h * \brief Message-of-the-day manipulation implementation. - * \version $Id: motd.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: motd.h 8436 2018-03-29 09:04:53Z michael $ */ #ifndef INCLUDED_motd_h @@ -94,4 +94,4 @@ /* This is called to report motd {} blocks */ extern void motd_report(struct Client *, int, char *[]); extern void motd_memory_count(struct Client *); -#endif +#endif /* INCLUDED_motd_h */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/numeric.h ircd-hybrid-8.2.24+dfsg.1/include/numeric.h --- ircd-hybrid-8.2.22+dfsg.1/include/numeric.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/numeric.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file numeric.h * \brief Declarations of numeric replies. - * \version $Id: numeric.h 8083 2017-03-26 10:14:41Z michael $ + * \version $Id: numeric.h 8467 2018-04-03 11:21:48Z michael $ */ #ifndef INCLUDED_numeric_h @@ -73,6 +73,7 @@ RPL_UMODEIS = 221, RPL_STATSDLINE = 225, RPL_STATSALINE = 226, + RPL_STATSPSEUDO = 227, RPL_STATSLLINE = 241, RPL_STATSUPTIME = 242, RPL_STATSOLINE = 243, @@ -184,6 +185,7 @@ ERR_USERNOTINCHANNEL = 441, ERR_NOTONCHANNEL = 442, ERR_USERONCHANNEL = 443, + ERR_NONICKCHANGE = 447, ERR_NOTREGISTERED = 451, ERR_ACCEPTFULL = 456, ERR_ACCEPTEXIST = 457, diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/packet.h ircd-hybrid-8.2.24+dfsg.1/include/packet.h --- ircd-hybrid-8.2.22+dfsg.1/include/packet.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/packet.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file packet.h * \brief A header for the packet functions. - * \version $Id: packet.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: packet.h 8478 2018-04-03 17:03:30Z michael $ */ #ifndef INCLUDED_packet_h @@ -30,12 +30,12 @@ #include "fdlist.h" /* - * this hides in here rather than in defaults.h because it really shouldn't + * This hides in here rather than in defaults.h because it really shouldn't * be tweaked unless you *REALLY REALLY* know what you're doing! * Remember, messages are only anti-flooded on incoming from the client, not on * incoming from a server for a given client, so if you tweak this you risk * allowing a client to flood differently depending upon where they are on - * the network.. + * the network. * -- adrian */ /* MAX_FLOOD is the amount of lines in a 'burst' we allow from a client, @@ -54,4 +54,4 @@ extern void read_packet(fde_t *, void *); extern void flood_recalc(fde_t *, void *); extern void flood_endgrace(struct Client *); -#endif /* INCLUDED_packet_h */ +#endif /* INCLUDED_packet_h */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/parse.h ircd-hybrid-8.2.24+dfsg.1/include/parse.h --- ircd-hybrid-8.2.22+dfsg.1/include/parse.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/parse.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file parse.h * \brief A header for the message parser. - * \version $Id: parse.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: parse.h 8478 2018-04-03 17:03:30Z michael $ */ #ifndef INCLUDED_parse_h @@ -105,4 +105,4 @@ extern int m_not_oper(struct Client *, int, char *[]); extern int m_registered(struct Client *, int, char *[]); extern int m_unregistered(struct Client *, int, char *[]); -#endif /* INCLUDED_parse_h */ +#endif /* INCLUDED_parse_h */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/patchlevel.h ircd-hybrid-8.2.24+dfsg.1/include/patchlevel.h --- ircd-hybrid-8.2.22+dfsg.1/include/patchlevel.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/patchlevel.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,9 +21,9 @@ /*! \file patchlevel.h * \brief A header defining the patchlevel. - * \version $Id: patchlevel.h 8008 2017-03-14 18:34:59Z michael $ + * \version $Id: patchlevel.h 8471 2018-04-03 12:48:39Z michael $ */ #ifndef PATCHLEVEL -#define PATCHLEVEL "hybrid-8.2.22" +#define PATCHLEVEL "hybrid-8.2.24" #endif diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/res.h ircd-hybrid-8.2.24+dfsg.1/include/res.h --- ircd-hybrid-8.2.22+dfsg.1/include/res.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/res.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file res.h * \brief ircd resolver functions - * \version $Id: res.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: res.h 8280 2018-02-20 19:30:33Z michael $ */ #ifndef INCLUDED_res_h diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/restart.h ircd-hybrid-8.2.24+dfsg.1/include/restart.h --- ircd-hybrid-8.2.22+dfsg.1/include/restart.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/restart.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file restart.h * \brief A header for the restart/die functions. - * \version $Id: restart.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: restart.h 8478 2018-04-03 17:03:30Z michael $ */ #ifndef INCLUDED_restart_h @@ -34,4 +34,4 @@ }; extern void server_die(const char *, int); -#endif +#endif /* INCLUDED_restart_h */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/s_bsd.h ircd-hybrid-8.2.24+dfsg.1/include/s_bsd.h --- ircd-hybrid-8.2.22+dfsg.1/include/s_bsd.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/s_bsd.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file s_bsd.h * \brief A header for the network subsystem. - * \version $Id: s_bsd.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: s_bsd.h 8430 2018-03-27 18:48:40Z michael $ */ #ifndef INCLUDED_s_bsd_h @@ -32,8 +32,8 @@ /* Type of IO */ enum { - COMM_SELECT_READ = 1, - COMM_SELECT_WRITE = 2 + COMM_SELECT_READ = 1 << 0, + COMM_SELECT_WRITE = 1 << 1 }; /* How long can comm_select() wait for network events [milliseconds] */ @@ -43,23 +43,22 @@ struct Listener; extern void add_connection(struct Listener *, struct irc_ssaddr *, int); -extern void close_connection(struct Client *); extern void report_error(int, const char *, const char *, int); -extern int get_sockerr(int); -extern int ignoreErrno(int); +extern int comm_get_sockerr(int); +extern int comm_ignore_errno(int); extern void comm_settimeout(fde_t *, uintmax_t, void (*)(fde_t *, void *), void *); extern void comm_setflush(fde_t *, uintmax_t, void (*)(fde_t *, void *), void *); extern void comm_checktimeouts(void *); extern void comm_connect_tcp(fde_t *, const char *, unsigned short, struct sockaddr *, int, - void (struct _fde *, int, void *), void *, int, uintmax_t); + void (fde_t *, int, void *), void *, int, uintmax_t); extern const char *comm_errstr(int); -extern int comm_open(fde_t *, int, int, int, const char *); -extern int comm_accept(struct Listener *, struct irc_ssaddr *); +extern int comm_socket(int, int, int); +extern int comm_accept(int, struct irc_ssaddr *); /* These must be defined in the network IO loop code of your choice */ -extern void netio_init(void); +extern void comm_select_init(void); extern void comm_setselect(fde_t *, unsigned int, void (*)(fde_t *, void *), void *, uintmax_t); extern void comm_select(void); extern void remove_ipv6_mapping(struct irc_ssaddr *); diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/send.h ircd-hybrid-8.2.24+dfsg.1/include/send.h --- ircd-hybrid-8.2.22+dfsg.1/include/send.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/send.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file send.h * \brief A header for the message sending functions. - * \version $Id: send.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: send.h 8478 2018-04-03 17:03:30Z michael $ */ #ifndef INCLUDED_send_h @@ -32,23 +32,23 @@ enum { - L_ALL = 0, - L_OPER = 1, - L_ADMIN = 2 + L_ALL, + L_OPER, + L_ADMIN }; enum { - SEND_NOTICE = 1, - SEND_GLOBAL = 2, - SEND_LOCOPS = 3 + SEND_NOTICE, + SEND_GLOBAL, + SEND_LOCOPS }; /* Used when sending to $#mask or $$mask */ enum { - MATCH_SERVER = 1, - MATCH_HOST = 2 + MATCH_SERVER, + MATCH_HOST }; /* @@ -86,4 +86,4 @@ extern void sendto_anywhere(struct Client *, const struct Client *, const char *, const char *, ...) AFP(4,5); -#endif /* INCLUDED_send_h */ +#endif /* INCLUDED_send_h */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/serno.h ircd-hybrid-8.2.24+dfsg.1/include/serno.h --- ircd-hybrid-8.2.22+dfsg.1/include/serno.h 2017-03-26 15:38:05.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/serno.h 2018-04-04 22:34:22.000000000 +0000 @@ -1 +1 @@ -#define SERIALNUM "20170326_8085" +#define SERIALNUM "20180404_8492" diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/server_capab.h ircd-hybrid-8.2.24+dfsg.1/include/server_capab.h --- ircd-hybrid-8.2.22+dfsg.1/include/server_capab.h 1970-01-01 00:00:00.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/server_capab.h 2018-04-04 22:33:36.000000000 +0000 @@ -0,0 +1,67 @@ +/* + * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) + * + * Copyright (c) 1997-2018 ircd-hybrid development team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + */ + +/*! \file server_capab.h + * \brief A header for the server CAPAB functions. + * \version $Id: server_capab.h 8436 2018-03-29 09:04:53Z michael $ + */ + +#ifndef INCLUDED_server_capab_h +#define INCLUDED_server_capab_h + +/** Server capability flags */ +enum +{ + CAPAB_QS = 1 << 0, /**< Can handle quit storm removal */ + CAPAB_EOB = 1 << 1, /**< Can do EOB message */ + CAPAB_KLN = 1 << 2, /**< Can do KLINE message */ + CAPAB_KNOCK = 1 << 3, /**< Supports KNOCK */ + CAPAB_UNKLN = 1 << 4, /**< Can do UNKLINE message */ + CAPAB_CLUSTER = 1 << 5, /**< Supports server clustering */ + CAPAB_ENCAP = 1 << 6, /**< Supports ENCAP message */ + CAPAB_TBURST = 1 << 7, /**< Supports TBURST */ + CAPAB_SVS = 1 << 8, /**< Supports services */ + CAPAB_DLN = 1 << 9, /**< Can do DLINE message */ + CAPAB_UNDLN = 1 << 10, /**< Can do UNDLINE message */ + CAPAB_RHOST = 1 << 11 /**< Can do extended realhost UID messages */ +}; + +/* + * Capability macros. + */ +#define IsCapable(x, cap) ((x)->connection->caps & (cap)) +#define SetCapable(x, cap) ((x)->connection->caps |= (cap)) +#define ClearCap(x, cap) ((x)->connection->caps &= ~(cap)) + +/* Capabilities */ +struct Capability +{ + dlink_node node; /**< List node; linked into capab_list */ + char *name; /**< Name of capability */ + unsigned int cap; /**< Mask value */ +}; + +extern void capab_init(void); +extern void capab_add(const char *, unsigned int); +extern void capab_del(const char *); +extern unsigned int capab_find(const char *); +extern const char *capab_get(const void *); +#endif /* INCLUDED_server_capab_h */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/server.h ircd-hybrid-8.2.24+dfsg.1/include/server.h --- ircd-hybrid-8.2.22+dfsg.1/include/server.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/server.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file server.h * \brief A header for the server functions. - * \version $Id: server.h 8002 2017-03-14 14:20:50Z michael $ + * \version $Id: server.h 8436 2018-03-29 09:04:53Z michael $ */ #ifndef INCLUDED_server_h @@ -53,50 +53,12 @@ struct Client *target_p; }; -/* Capabilities */ -struct Capability -{ - dlink_node node; - char *name; /**< Name of capability */ - unsigned int cap; /**< Mask value */ -}; - -/** Server capability flags */ -enum -{ - CAPAB_QS = 0x00000001U, /**< Can handle quit storm removal */ - CAPAB_EOB = 0x00000002U, /**< Can do EOB message */ - CAPAB_KLN = 0x00000004U, /**< Can do KLINE message */ - CAPAB_KNOCK = 0x00000008U, /**< Supports KNOCK */ - CAPAB_UNKLN = 0x00000010U, /**< Can do UNKLINE message */ - CAPAB_CLUSTER = 0x00000020U, /**< Supports server clustering */ - CAPAB_ENCAP = 0x00000040U, /**< Supports ENCAP message */ - CAPAB_HOPS = 0x00000080U, /**< Supports HALFOPS */ - CAPAB_TBURST = 0x00000100U, /**< Supports TBURST */ - CAPAB_SVS = 0x00000200U, /**< Supports services */ - CAPAB_DLN = 0x00000400U, /**< Can do DLINE message */ - CAPAB_UNDLN = 0x00000800U, /**< Can do UNDLINE message */ - CAPAB_CHW = 0x00001000U /**< Can do channel wall @# */ -}; - -/* - * Capability macros. - */ -#define IsCapable(x, cap) ((x)->connection->caps & (cap)) -#define SetCapable(x, cap) ((x)->connection->caps |= (cap)) -#define ClearCap(x, cap) ((x)->connection->caps &= ~(cap)) - -extern int valid_servname(const char *); +extern int server_valid_name(const char *); extern const struct server_hunt *server_hunt(struct Client *, const char *, const int, const int, char *[]); -extern void server_capab_init(void); -extern void add_capability(const char *, unsigned int); -extern void delete_capability(const char *); -extern unsigned int find_capability(const char *); -extern const char *get_capabilities(const struct Client *); extern void write_links_file(void *); extern void read_links_file(void); extern void try_connections(void *); -extern int serv_connect(struct MaskItem *, struct Client *); +extern int server_connect(struct MaskItem *, struct Client *); extern struct Client *find_servconn_in_progress(const char *); -extern struct Server *make_server(struct Client *); +extern struct Server *server_make(struct Client *); #endif /* INCLUDED_server_h */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/stdinc.h ircd-hybrid-8.2.24+dfsg.1/include/stdinc.h --- ircd-hybrid-8.2.22+dfsg.1/include/stdinc.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/stdinc.h 2018-04-04 22:33:36.000000000 +0000 @@ -19,7 +19,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * USA * - * $Id: stdinc.h 8037 2017-03-17 22:28:04Z michael $ + * $Id: stdinc.h 8313 2018-02-28 17:45:36Z michael $ * */ @@ -41,10 +41,6 @@ #include #endif -#ifdef HAVE_LIBGEOIP -#include -#endif - #include #include #include diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/tls_gnutls.h ircd-hybrid-8.2.24+dfsg.1/include/tls_gnutls.h --- ircd-hybrid-8.2.22+dfsg.1/include/tls_gnutls.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/tls_gnutls.h 2018-04-04 22:33:36.000000000 +0000 @@ -3,7 +3,7 @@ * * Copyright (c) 2015 Attila Molnar * Copyright (c) 2015 Adam - * Copyright (c) 2015-2017 ircd-hybrid development team + * Copyright (c) 2015-2018 ircd-hybrid development team * * 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 @@ -23,7 +23,7 @@ /*! \file tls_gnutls.h * \brief GnuTLS-specific TLS types - * \version $Id: tls_gnutls.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: tls_gnutls.h 8280 2018-02-20 19:30:33Z michael $ */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/tls.h ircd-hybrid-8.2.24+dfsg.1/include/tls.h --- ircd-hybrid-8.2.22+dfsg.1/include/tls.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/tls.h 2018-04-04 22:33:36.000000000 +0000 @@ -3,7 +3,7 @@ * * Copyright (c) 2015 Attila Molnar * Copyright (c) 2015 Adam - * Copyright (c) 2015-2017 ircd-hybrid development team + * Copyright (c) 2015-2018 ircd-hybrid development team * * 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 @@ -23,7 +23,7 @@ /*! \file tls.h * \brief A header for generic TLS functions - * \version $Id: tls.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: tls.h 8280 2018-02-20 19:30:33Z michael $ */ #ifndef INCLUDED_tls_h diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/tls_none.h ircd-hybrid-8.2.24+dfsg.1/include/tls_none.h --- ircd-hybrid-8.2.22+dfsg.1/include/tls_none.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/tls_none.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2015 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file tls_none.h * \brief A header for builds that do not support a TLS library - * \version $Id: tls_none.h 7667 2016-07-20 17:09:36Z michael $ + * \version $Id: tls_none.h 8280 2018-02-20 19:30:33Z michael $ */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/tls_openssl.h ircd-hybrid-8.2.24+dfsg.1/include/tls_openssl.h --- ircd-hybrid-8.2.22+dfsg.1/include/tls_openssl.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/tls_openssl.h 2018-04-04 22:33:36.000000000 +0000 @@ -3,7 +3,7 @@ * * Copyright (c) 2015 Attila Molnar * Copyright (c) 2015 Adam - * Copyright (c) 2015-2017 ircd-hybrid development team + * Copyright (c) 2015-2018 ircd-hybrid development team * * 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 @@ -23,7 +23,7 @@ /*! \file tls_openssl.h * \brief OpenSSL-specific TLS types - * \version $Id: tls_openssl.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: tls_openssl.h 8280 2018-02-20 19:30:33Z michael $ */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/user.h ircd-hybrid-8.2.24+dfsg.1/include/user.h --- ircd-hybrid-8.2.22+dfsg.1/include/user.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/user.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file user.h * \brief A header for the user functions. - * \version $Id: user.h 8062 2017-03-23 17:13:05Z michael $ + * \version $Id: user.h 8478 2018-04-03 17:03:30Z michael $ */ #ifndef INCLUDED_user_h @@ -54,9 +54,5 @@ extern int valid_hostname(const char *); extern int valid_username(const char *, const int); extern int valid_nickname(const char *, const int); -extern void add_isupport(const char *, const char *, int); -extern void delete_isupport(const char *); -extern void init_isupport(void); -extern void rebuild_isupport_message_line(void); -extern void user_set_hostmask(struct Client *, const char *, const int); -#endif +extern void user_set_hostmask(struct Client *, const char *); +#endif /* INCLUDED_user_h */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/userhost.h ircd-hybrid-8.2.24+dfsg.1/include/userhost.h --- ircd-hybrid-8.2.22+dfsg.1/include/userhost.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/userhost.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2003-2017 ircd-hybrid development team + * Copyright (c) 2003-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file userhost.h * \brief A header for global user limits. - * \version $Id: userhost.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: userhost.h 8384 2018-03-16 20:06:38Z michael $ */ #ifndef INCLUDED_userhost_h @@ -35,7 +35,6 @@ unsigned int lcount; /* Local user count on this addr */ }; -extern void userhost_init(void); extern void userhost_count(const char *, unsigned int *, unsigned int *); extern void userhost_add(const char *, int); extern void userhost_del(const char *, int); diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/watch.h ircd-hybrid-8.2.24+dfsg.1/include/watch.h --- ircd-hybrid-8.2.22+dfsg.1/include/watch.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/watch.h 2018-04-04 22:33:36.000000000 +0000 @@ -2,7 +2,7 @@ * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * * Copyright (c) 1997 Jukka Santala (Donwulff) - * Copyright (c) 2005-2017 ircd-hybrid development team + * Copyright (c) 2005-2018 ircd-hybrid development team * * 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 @@ -22,7 +22,7 @@ /*! \file watch.h * \brief Header including structures and prototypes for WATCH support - * \version $Id: watch.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: watch.h 8436 2018-03-29 09:04:53Z michael $ */ #ifndef INCLUDED_watch_h @@ -32,18 +32,16 @@ /*! \brief Watch structure */ struct Watch { - dlink_node node; /**< Embedded dlink_node used to link into watchTable */ - dlink_list watched_by; /**< List of clients that have this - entry on their watch list */ + dlink_node node; /**< List node; linked into watchTable */ + dlink_list watched_by; /**< List of clients that have this entry on their watch list */ uintmax_t lasttime; /**< Last time the client was seen */ char name[NICKLEN + 1]; /**< Name of the client to watch */ }; -extern void watch_init(void); extern void watch_add_to_hash_table(const char *, struct Client *); extern void watch_del_from_hash_table(const char *, struct Client *); extern void watch_check_hash(const struct Client *, const enum irc_numerics); extern void watch_del_watch_list(struct Client *); extern void watch_count_memory(unsigned int *const, size_t *const); extern struct Watch *watch_find_hash(const char *); -#endif +#endif /* INCLUDED_watch_h */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/include/whowas.h ircd-hybrid-8.2.24+dfsg.1/include/whowas.h --- ircd-hybrid-8.2.22+dfsg.1/include/whowas.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/include/whowas.h 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file whowas.h * \brief A header for the whowas functions. - * \version $Id: whowas.h 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: whowas.h 8436 2018-03-29 09:04:53Z michael $ */ #ifndef INCLUDED_whowas_h @@ -43,6 +43,7 @@ char name[NICKLEN + 1]; /**< Client's nick name */ char username[USERLEN + 1]; /**< Client's user name */ char hostname[HOSTLEN + 1]; /**< Client's host name */ + char realhost[HOSTLEN + 1]; /**< Client's real host name */ char sockhost[HOSTIPLEN + 1]; /**< Client's IP address as string */ char realname[REALLEN + 1]; /**< Client's real name/gecos */ char servername[HOSTLEN + 1]; /**< Name of the server the client is using */ @@ -50,10 +51,9 @@ }; extern const dlink_list *whowas_get_hash(unsigned int); -extern void whowas_init(void); extern void whowas_trim(void); extern void whowas_add_history(struct Client *, const int); extern void whowas_off_history(struct Client *); extern struct Client *whowas_get_history(const char *, uintmax_t); extern void whowas_count_memory(unsigned int *const, size_t *const); -#endif /* INCLUDED_whowas_h */ +#endif /* INCLUDED_whowas_h */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/INSTALL ircd-hybrid-8.2.24+dfsg.1/INSTALL --- ircd-hybrid-8.2.22+dfsg.1/INSTALL 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/INSTALL 2018-04-04 22:33:37.000000000 +0000 @@ -1,8 +1,8 @@ Hybrid INSTALL Document - $Id: INSTALL 7925 2016-12-31 13:57:24Z michael $ + $Id: INSTALL 8384 2018-03-16 20:06:38Z michael $ - Copyright (c) 1997-2017 ircd-hybrid development team + Copyright (c) 1997-2018 ircd-hybrid development team ---------------------------------------------------------------------- @@ -69,14 +69,18 @@ These are optional or have default values that may be overridden: - * --enable-assert - Enable use of numerous debugging checks. This - should not be used on any production servers for maximum speed - so as to prevent cores from things that shouldn't normally happen. + * --enable-assert - Enable use of numerous debugging checks. This is + considered a developer-only feature and should not be used on any + production servers for maximum speed so as to prevent cores from + things that shouldn't normally happen. * --enable-debugging - Prepares Makefiles to compile the ircd sources with proper settings that are required for debugging purposes. This switch basically sets CFLAGS to "-g -O0". + * --enable-efence - Allows easy linking with the electric fence memory + debugger library. + 3. Run 'make'; this should build the ircd. diff -Nru ircd-hybrid-8.2.22+dfsg.1/install-sh ircd-hybrid-8.2.24+dfsg.1/install-sh --- ircd-hybrid-8.2.22+dfsg.1/install-sh 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/install-sh 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ #!/bin/sh # install - install a program, script, or datafile -scriptversion=2013-12-25.23; # UTC +scriptversion=2016-01-11.22; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the @@ -496,6 +496,6 @@ # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff -Nru ircd-hybrid-8.2.22+dfsg.1/libltdl/Makefile.in ircd-hybrid-8.2.24+dfsg.1/libltdl/Makefile.in --- ircd-hybrid-8.2.22+dfsg.1/libltdl/Makefile.in 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/libltdl/Makefile.in 2018-04-04 22:33:36.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -96,21 +96,20 @@ @CONVENIENCE_LTDL_TRUE@am__append_3 = libltdlc.la subdir = libltdl ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \ - $(top_srcdir)/m4/ax_append_compile_flags.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_arg_enable_assert.m4 \ $(top_srcdir)/m4/ax_arg_enable_debugging.m4 \ + $(top_srcdir)/m4/ax_arg_enable_efence.m4 \ $(top_srcdir)/m4/ax_arg_enable_warnings.m4 \ $(top_srcdir)/m4/ax_arg_gnutls.m4 \ $(top_srcdir)/m4/ax_arg_ioloop_mechanism.m4 \ - $(top_srcdir)/m4/ax_arg_libgeoip.m4 \ $(top_srcdir)/m4/ax_arg_openssl.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ + $(top_srcdir)/m4/ax_define_dir.m4 \ + $(top_srcdir)/m4/ax_gcc_stack_protect.m4 \ $(top_srcdir)/m4/ax_library_net.m4 \ - $(top_srcdir)/m4/ax_mempool_chunksizes.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ - $(top_srcdir)/m4/gcc_stack_protect.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltargz.m4 \ $(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ diff -Nru ircd-hybrid-8.2.22+dfsg.1/m4/ac_define_dir.m4 ircd-hybrid-8.2.24+dfsg.1/m4/ac_define_dir.m4 --- ircd-hybrid-8.2.22+dfsg.1/m4/ac_define_dir.m4 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/m4/ac_define_dir.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,34 +0,0 @@ -dnl @synopsis AC_DEFINE_DIR(VARNAME, DIR [, DESCRIPTION]) -dnl -dnl This macro sets VARNAME to the expansion of the DIR variable, -dnl taking care of fixing up ${prefix} and such. -dnl -dnl VARNAME is then offered as both an output variable and a C -dnl preprocessor symbol. -dnl -dnl Example: -dnl -dnl AC_DEFINE_DIR([DATADIR], [datadir], [Where data are placed to.]) -dnl -dnl @category Misc -dnl @author Stepan Kasal -dnl @author Andreas Schwab -dnl @author Guido U. Draheim -dnl @author Alexandre Oliva -dnl @version 2006-10-13 -dnl @license AllPermissive - -AC_DEFUN([AC_DEFINE_DIR], [ - prefix_NONE= - exec_prefix_NONE= - test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix - test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix -dnl In Autoconf 2.60, ${datadir} refers to ${datarootdir}, which in turn -dnl refers to ${prefix}. Thus we have to use `eval' twice. - eval ac_define_dir="\"[$]$2\"" - eval ac_define_dir="\"$ac_define_dir\"" - AC_SUBST($1, "$ac_define_dir") - AC_DEFINE_UNQUOTED($1, "$ac_define_dir", [$3]) - test "$prefix_NONE" && prefix=NONE - test "$exec_prefix_NONE" && exec_prefix=NONE -]) diff -Nru ircd-hybrid-8.2.22+dfsg.1/m4/ax_append_compile_flags.m4 ircd-hybrid-8.2.24+dfsg.1/m4/ax_append_compile_flags.m4 --- ircd-hybrid-8.2.22+dfsg.1/m4/ax_append_compile_flags.m4 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/m4/ax_append_compile_flags.m4 2018-04-04 22:33:36.000000000 +0000 @@ -1,10 +1,10 @@ -# =========================================================================== -# http://www.gnu.org/software/autoconf-archive/ax_append_compile_flags.html -# =========================================================================== +# ============================================================================ +# https://www.gnu.org/software/autoconf-archive/ax_append_compile_flags.html +# ============================================================================ # # SYNOPSIS # -# AX_APPEND_COMPILE_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS]) +# AX_APPEND_COMPILE_FLAGS([FLAG1 FLAG2 ...], [FLAGS-VARIABLE], [EXTRA-FLAGS], [INPUT]) # # DESCRIPTION # @@ -20,6 +20,8 @@ # the flags: "CFLAGS EXTRA-FLAGS FLAG". This can for example be used to # force the compiler to issue an error when a bad flag is given. # +# INPUT gives an alternative input source to AC_COMPILE_IFELSE. +# # NOTE: This macro depends on the AX_APPEND_FLAG and # AX_CHECK_COMPILE_FLAG. Please keep this macro in sync with # AX_APPEND_LINK_FLAGS. @@ -39,7 +41,7 @@ # Public License for more details. # # You should have received a copy of the GNU General Public License along -# with this program. If not, see . +# with this program. If not, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure @@ -54,12 +56,12 @@ # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. -#serial 4 +#serial 6 AC_DEFUN([AX_APPEND_COMPILE_FLAGS], [AX_REQUIRE_DEFINED([AX_CHECK_COMPILE_FLAG]) AX_REQUIRE_DEFINED([AX_APPEND_FLAG]) for flag in $1; do - AX_CHECK_COMPILE_FLAG([$flag], [AX_APPEND_FLAG([$flag], [$2])], [], [$3]) + AX_CHECK_COMPILE_FLAG([$flag], [AX_APPEND_FLAG([$flag], [$2])], [], [$3], [$4]) done ])dnl AX_APPEND_COMPILE_FLAGS diff -Nru ircd-hybrid-8.2.22+dfsg.1/m4/ax_arg_enable_efence.m4 ircd-hybrid-8.2.24+dfsg.1/m4/ax_arg_enable_efence.m4 --- ircd-hybrid-8.2.22+dfsg.1/m4/ax_arg_enable_efence.m4 1970-01-01 00:00:00.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/m4/ax_arg_enable_efence.m4 2018-04-04 22:33:36.000000000 +0000 @@ -0,0 +1,7 @@ +AC_DEFUN([AX_ARG_ENABLE_EFENCE],[ + AC_ARG_ENABLE([efence],[AS_HELP_STRING([--enable-efence],[Enable linking with Electric Fence 'efence' memory debugger library.])],[efence="$enableval"],[efence="no"]) + + AS_IF([test "$efence" = "yes"], [ + AC_SEARCH_LIBS(EF_Print, efence, [], [AC_MSG_FAILURE([Electric Fence 'efence' library not found])]) + ]) +]) diff -Nru ircd-hybrid-8.2.22+dfsg.1/m4/ax_arg_enable_warnings.m4 ircd-hybrid-8.2.24+dfsg.1/m4/ax_arg_enable_warnings.m4 --- ircd-hybrid-8.2.22+dfsg.1/m4/ax_arg_enable_warnings.m4 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/m4/ax_arg_enable_warnings.m4 2018-04-04 22:33:36.000000000 +0000 @@ -7,6 +7,7 @@ AX_APPEND_COMPILE_FLAGS([-Wcast-align]) AX_APPEND_COMPILE_FLAGS([-Wcast-qual]) AX_APPEND_COMPILE_FLAGS([-Wclobbered]) + AX_APPEND_COMPILE_FLAGS([-Wduplicated-cond]) AX_APPEND_COMPILE_FLAGS([-Wempty-body]) AX_APPEND_COMPILE_FLAGS([-Wignored-qualifiers]) AX_APPEND_COMPILE_FLAGS([-Wlogical-op]) @@ -21,6 +22,7 @@ AX_APPEND_COMPILE_FLAGS([-Wpointer-arith]) AX_APPEND_COMPILE_FLAGS([-Wredundant-decls]) AX_APPEND_COMPILE_FLAGS([-Wshadow]) + AX_APPEND_COMPILE_FLAGS([-Wshift-negative-value]) AX_APPEND_COMPILE_FLAGS([-Wsign-compare]) AX_APPEND_COMPILE_FLAGS([-Wtype-limits]) AX_APPEND_COMPILE_FLAGS([-Wundef]) diff -Nru ircd-hybrid-8.2.22+dfsg.1/m4/ax_arg_libgeoip.m4 ircd-hybrid-8.2.24+dfsg.1/m4/ax_arg_libgeoip.m4 --- ircd-hybrid-8.2.22+dfsg.1/m4/ax_arg_libgeoip.m4 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/m4/ax_arg_libgeoip.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,7 +0,0 @@ -AC_DEFUN([AX_ARG_LIBGEOIP],[ - AC_ARG_ENABLE(libgeoip, - [AS_HELP_STRING([--disable-libgeoip],[Disable GeoIP support])], [], - [AC_CHECK_HEADER(GeoIP.h, - [AC_SEARCH_LIBS(GeoIP_id_by_ipnum_v6_gl, GeoIP, - [AC_DEFINE(HAVE_LIBGEOIP, 1, [Define to 1 if libGeoIP (-lGeoIP) is available.])])])], []) -]) diff -Nru ircd-hybrid-8.2.22+dfsg.1/m4/ax_define_dir.m4 ircd-hybrid-8.2.24+dfsg.1/m4/ax_define_dir.m4 --- ircd-hybrid-8.2.22+dfsg.1/m4/ax_define_dir.m4 1970-01-01 00:00:00.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/m4/ax_define_dir.m4 2018-04-04 22:33:36.000000000 +0000 @@ -0,0 +1,34 @@ +dnl @synopsis AX_DEFINE_DIR(VARNAME, DIR [, DESCRIPTION]) +dnl +dnl This macro sets VARNAME to the expansion of the DIR variable, +dnl taking care of fixing up ${prefix} and such. +dnl +dnl VARNAME is then offered as both an output variable and a C +dnl preprocessor symbol. +dnl +dnl Example: +dnl +dnl AX_DEFINE_DIR([DATADIR], [datadir], [Where data are placed to.]) +dnl +dnl @category Misc +dnl @author Stepan Kasal +dnl @author Andreas Schwab +dnl @author Guido U. Draheim +dnl @author Alexandre Oliva +dnl @version 2006-10-13 +dnl @license AllPermissive + +AC_DEFUN([AX_DEFINE_DIR], [ + prefix_NONE= + exec_prefix_NONE= + test "x$prefix" = xNONE && prefix_NONE=yes && prefix=$ac_default_prefix + test "x$exec_prefix" = xNONE && exec_prefix_NONE=yes && exec_prefix=$prefix +dnl In Autoconf 2.60, ${datadir} refers to ${datarootdir}, which in turn +dnl refers to ${prefix}. Thus we have to use `eval' twice. + eval ac_define_dir="\"[$]$2\"" + eval ac_define_dir="\"$ac_define_dir\"" + AC_SUBST($1, "$ac_define_dir") + AC_DEFINE_UNQUOTED($1, "$ac_define_dir", [$3]) + test "$prefix_NONE" && prefix=NONE + test "$exec_prefix_NONE" && exec_prefix=NONE +]) diff -Nru ircd-hybrid-8.2.22+dfsg.1/m4/ax_gcc_stack_protect.m4 ircd-hybrid-8.2.24+dfsg.1/m4/ax_gcc_stack_protect.m4 --- ircd-hybrid-8.2.22+dfsg.1/m4/ax_gcc_stack_protect.m4 1970-01-01 00:00:00.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/m4/ax_gcc_stack_protect.m4 2018-04-04 22:33:36.000000000 +0000 @@ -0,0 +1,126 @@ +dnl +dnl Useful macros for autoconf to check for ssp-patched gcc +dnl 1.0 - September 2003 - Tiago Sousa +dnl 1.1 - August 2006 - Ted Percival +dnl * Stricter language checking (C or C++) +dnl * Adds AX_GCC_STACK_PROTECT_LIB to add -lssp to LDFLAGS as necessary +dnl * Caches all results +dnl * Uses macros to ensure correct ouput in quiet/silent mode +dnl 1.2 - April 2007 - Ted Percival +dnl * Added AX_GCC_STACK_PROTECTOR macro for simpler (one-line) invocation +dnl * AX_GCC_STACK_PROTECT_LIB now adds -lssp to LIBS rather than LDFLAGS +dnl h.1 - June 2015 - Michael Wobst +dnl * Added support for -fstack-protector-strong which is supported since gcc 4.9 +dnl +dnl About ssp: +dnl GCC extension for protecting applications from stack-smashing attacks +dnl http://www.research.ibm.com/trl/projects/security/ssp/ +dnl +dnl Usage: +dnl Most people will simply call AX_GCC_STACK_PROTECTOR. +dnl If you only use one of C or C++, you can save time by only calling the +dnl macro appropriate for that language. In that case you should also call +dnl AX_GCC_STACK_PROTECT_LIB first. +dnl +dnl AX_GCC_STACK_PROTECTOR +dnl Tries to turn on stack protection for C and C++ by calling the following +dnl three macros with the right languages. +dnl +dnl AX_GCC_STACK_PROTECT_CC +dnl checks -fstack-protector with the C compiler, if it exists then updates +dnl CFLAGS and defines ENABLE_SSP_CC +dnl +dnl AX_GCC_STACK_PROTECT_CXX +dnl checks -fstack-protector with the C++ compiler, if it exists then updates +dnl CXXFLAGS and defines ENABLE_SSP_CXX +dnl +dnl AX_GCC_STACK_PROTECT_LIB +dnl adds -lssp to LIBS if it is available +dnl ssp is usually provided as part of libc, but was previously a separate lib +dnl It does not hurt to add -lssp even if libc provides SSP - in that case +dnl libssp will simply be ignored. +dnl + +AC_DEFUN([AX_GCC_STACK_PROTECT_LIB],[ + AC_CACHE_CHECK([whether libssp exists], ssp_cv_lib, + [ssp_old_libs="$LIBS" + LIBS="$LIBS -lssp" + AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [ssp_cv_lib=yes], [ssp_cv_lib=no]) + LIBS="$ssp_old_libs" + ]) + if test $ssp_cv_lib = yes; then + LIBS="$LIBS -lssp" + fi +]) + +AC_DEFUN([AX_GCC_STACK_PROTECT_CC],[ + AC_LANG_ASSERT(C) + if test "X$CC" != "X"; then + AC_CACHE_CHECK([whether ${CC} accepts -fstack-protector-strong], + ssp_cv_cc, + [ssp_old_cflags="$CFLAGS" + CFLAGS="$CFLAGS -fstack-protector-strong" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ssp_cv_cc=yes], [ssp_cv_cc=no]) + CFLAGS="$ssp_old_cflags" + ]) + if test $ssp_cv_cc = yes; then + CFLAGS="$CFLAGS -fstack-protector-strong" + AC_DEFINE([ENABLE_SSP_CC], 1, [Define if SSP C support is enabled.]) + else + unset ssp_cv_cc + AC_CACHE_CHECK([whether ${CC} accepts -fstack-protector], + ssp_cv_cc, + [ssp_old_cflags="$CFLAGS" + CFLAGS="$CFLAGS -fstack-protector" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ssp_cv_cc=yes], [ssp_cv_cc=no]) + CFLAGS="$ssp_old_cflags" + ]) + if test $ssp_cv_cc = yes; then + CFLAGS="$CFLAGS -fstack-protector" + AC_DEFINE([ENABLE_SSP_CC], 1, [Define if SSP C support is enabled.]) + fi + fi + fi +]) + +AC_DEFUN([AX_GCC_STACK_PROTECT_CXX],[ + AC_LANG_ASSERT(C++) + if test "X$CXX" != "X"; then + AC_CACHE_CHECK([whether ${CXX} accepts -fstack-protector-strong], + ssp_cv_cxx, + [ssp_old_cxxflags="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -fstack-protector-strong" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ssp_cv_cxx=yes], [ssp_cv_cxx=no]) + CXXFLAGS="$ssp_old_cxxflags" + ]) + if test $ssp_cv_cxx = yes; then + CXXFLAGS="$CXXFLAGS -fstack-protector-strong" + AC_DEFINE([ENABLE_SSP_CXX], 1, [Define if SSP C++ support is enabled.]) + else + unset ssp_cv_cxx + AC_CACHE_CHECK([whether ${CXX} accepts -fstack-protector], + ssp_cv_cxx, + [ssp_old_cxxflags="$CXXFLAGS" + CXXFLAGS="$CXXFLAGS -fstack-protector" + AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ssp_cv_cxx=yes], [ssp_cv_cxx=no]) + CXXFLAGS="$ssp_old_cxxflags" + ]) + if test $ssp_cv_cxx = yes; then + CXXFLAGS="$CXXFLAGS -fstack-protector" + AC_DEFINE([ENABLE_SSP_CXX], 1, [Define if SSP C++ support is enabled.]) + fi + fi + fi +]) + +AC_DEFUN([AX_GCC_STACK_PROTECTOR],[ + AX_GCC_STACK_PROTECT_LIB + + AC_LANG_PUSH([C]) + AX_GCC_STACK_PROTECT_CC + AC_LANG_POP([C]) + + AC_LANG_PUSH([C++]) + AX_GCC_STACK_PROTECT_CXX + AC_LANG_POP([C++]) +]) diff -Nru ircd-hybrid-8.2.22+dfsg.1/m4/ax_mempool_chunksizes.m4 ircd-hybrid-8.2.24+dfsg.1/m4/ax_mempool_chunksizes.m4 --- ircd-hybrid-8.2.22+dfsg.1/m4/ax_mempool_chunksizes.m4 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/m4/ax_mempool_chunksizes.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,16 +0,0 @@ -AC_DEFUN([AX_MEMPOOL_CHUNKSIZES],[ - AC_DEFINE([MP_CHUNK_SIZE_CHANNEL], 1024*1024, [Size of the channel mempool chunk.]) - AC_DEFINE([MP_CHUNK_SIZE_MEMBER], 2048*1024, [Size of the channel-member mempool chunk.]) - AC_DEFINE([MP_CHUNK_SIZE_BAN], 1024*1024, [Size of the ban mempool chunk.]) - AC_DEFINE([MP_CHUNK_SIZE_INVITE], 4*1024, [Size of the invite mempool chunk.]) - AC_DEFINE([MP_CHUNK_SIZE_CLIENT], 1024*1024, [Size of the client mempool chunk.]) - AC_DEFINE([MP_CHUNK_SIZE_CONNECTION], 512*1024, [Size of the connection mempool chunk.]) - AC_DEFINE([MP_CHUNK_SIZE_DNODE], 32*1024, [Size of the dlink_node mempool chunk.]) - AC_DEFINE([MP_CHUNK_SIZE_DBUF], 512*1024, [Size of the dbuf mempool chunk.]) - AC_DEFINE([MP_CHUNK_SIZE_AUTH], 128*1024, [Size of the auth mempool chunk.]) - AC_DEFINE([MP_CHUNK_SIZE_DNS], 64*1024, [Size of the dns mempool chunk.]) - AC_DEFINE([MP_CHUNK_SIZE_WATCH], 8*1024, [Size of the watch mempool chunk.]) - AC_DEFINE([MP_CHUNK_SIZE_USERHOST], 128*1024, [Size of the userhost mempool chunk.]) - AC_DEFINE([MP_CHUNK_SIZE_IP_ENTRY], 128*1024, [Size of the ip_entry mempool chunk.]) - AC_DEFINE([MP_CHUNK_SIZE_WHOWAS], 256*1024, [Size of the Whowas mempool chunk.]) -]) diff -Nru ircd-hybrid-8.2.22+dfsg.1/m4/gcc_stack_protect.m4 ircd-hybrid-8.2.24+dfsg.1/m4/gcc_stack_protect.m4 --- ircd-hybrid-8.2.22+dfsg.1/m4/gcc_stack_protect.m4 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/m4/gcc_stack_protect.m4 1970-01-01 00:00:00.000000000 +0000 @@ -1,126 +0,0 @@ -dnl -dnl Useful macros for autoconf to check for ssp-patched gcc -dnl 1.0 - September 2003 - Tiago Sousa -dnl 1.1 - August 2006 - Ted Percival -dnl * Stricter language checking (C or C++) -dnl * Adds GCC_STACK_PROTECT_LIB to add -lssp to LDFLAGS as necessary -dnl * Caches all results -dnl * Uses macros to ensure correct ouput in quiet/silent mode -dnl 1.2 - April 2007 - Ted Percival -dnl * Added GCC_STACK_PROTECTOR macro for simpler (one-line) invocation -dnl * GCC_STACK_PROTECT_LIB now adds -lssp to LIBS rather than LDFLAGS -dnl h.1 - June 2015 - Michael Wobst -dnl * Added support for -fstack-protector-strong which is supported since gcc 4.9 -dnl -dnl About ssp: -dnl GCC extension for protecting applications from stack-smashing attacks -dnl http://www.research.ibm.com/trl/projects/security/ssp/ -dnl -dnl Usage: -dnl Most people will simply call GCC_STACK_PROTECTOR. -dnl If you only use one of C or C++, you can save time by only calling the -dnl macro appropriate for that language. In that case you should also call -dnl GCC_STACK_PROTECT_LIB first. -dnl -dnl GCC_STACK_PROTECTOR -dnl Tries to turn on stack protection for C and C++ by calling the following -dnl three macros with the right languages. -dnl -dnl GCC_STACK_PROTECT_CC -dnl checks -fstack-protector with the C compiler, if it exists then updates -dnl CFLAGS and defines ENABLE_SSP_CC -dnl -dnl GCC_STACK_PROTECT_CXX -dnl checks -fstack-protector with the C++ compiler, if it exists then updates -dnl CXXFLAGS and defines ENABLE_SSP_CXX -dnl -dnl GCC_STACK_PROTECT_LIB -dnl adds -lssp to LIBS if it is available -dnl ssp is usually provided as part of libc, but was previously a separate lib -dnl It does not hurt to add -lssp even if libc provides SSP - in that case -dnl libssp will simply be ignored. -dnl - -AC_DEFUN([GCC_STACK_PROTECT_LIB],[ - AC_CACHE_CHECK([whether libssp exists], ssp_cv_lib, - [ssp_old_libs="$LIBS" - LIBS="$LIBS -lssp" - AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [ssp_cv_lib=yes], [ssp_cv_lib=no]) - LIBS="$ssp_old_libs" - ]) - if test $ssp_cv_lib = yes; then - LIBS="$LIBS -lssp" - fi -]) - -AC_DEFUN([GCC_STACK_PROTECT_CC],[ - AC_LANG_ASSERT(C) - if test "X$CC" != "X"; then - AC_CACHE_CHECK([whether ${CC} accepts -fstack-protector-strong], - ssp_cv_cc, - [ssp_old_cflags="$CFLAGS" - CFLAGS="$CFLAGS -fstack-protector-strong" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ssp_cv_cc=yes], [ssp_cv_cc=no]) - CFLAGS="$ssp_old_cflags" - ]) - if test $ssp_cv_cc = yes; then - CFLAGS="$CFLAGS -fstack-protector-strong" - AC_DEFINE([ENABLE_SSP_CC], 1, [Define if SSP C support is enabled.]) - else - unset ssp_cv_cc - AC_CACHE_CHECK([whether ${CC} accepts -fstack-protector], - ssp_cv_cc, - [ssp_old_cflags="$CFLAGS" - CFLAGS="$CFLAGS -fstack-protector" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ssp_cv_cc=yes], [ssp_cv_cc=no]) - CFLAGS="$ssp_old_cflags" - ]) - if test $ssp_cv_cc = yes; then - CFLAGS="$CFLAGS -fstack-protector" - AC_DEFINE([ENABLE_SSP_CC], 1, [Define if SSP C support is enabled.]) - fi - fi - fi -]) - -AC_DEFUN([GCC_STACK_PROTECT_CXX],[ - AC_LANG_ASSERT(C++) - if test "X$CXX" != "X"; then - AC_CACHE_CHECK([whether ${CXX} accepts -fstack-protector-strong], - ssp_cv_cxx, - [ssp_old_cxxflags="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -fstack-protector-strong" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ssp_cv_cxx=yes], [ssp_cv_cxx=no]) - CXXFLAGS="$ssp_old_cxxflags" - ]) - if test $ssp_cv_cxx = yes; then - CXXFLAGS="$CXXFLAGS -fstack-protector-strong" - AC_DEFINE([ENABLE_SSP_CXX], 1, [Define if SSP C++ support is enabled.]) - else - unset ssp_cv_cxx - AC_CACHE_CHECK([whether ${CXX} accepts -fstack-protector], - ssp_cv_cxx, - [ssp_old_cxxflags="$CXXFLAGS" - CXXFLAGS="$CXXFLAGS -fstack-protector" - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [])], [ssp_cv_cxx=yes], [ssp_cv_cxx=no]) - CXXFLAGS="$ssp_old_cxxflags" - ]) - if test $ssp_cv_cxx = yes; then - CXXFLAGS="$CXXFLAGS -fstack-protector" - AC_DEFINE([ENABLE_SSP_CXX], 1, [Define if SSP C++ support is enabled.]) - fi - fi - fi -]) - -AC_DEFUN([GCC_STACK_PROTECTOR],[ - GCC_STACK_PROTECT_LIB - - AC_LANG_PUSH([C]) - GCC_STACK_PROTECT_CC - AC_LANG_POP([C]) - - AC_LANG_PUSH([C++]) - GCC_STACK_PROTECT_CXX - AC_LANG_POP([C++]) -]) diff -Nru ircd-hybrid-8.2.22+dfsg.1/Makefile.in ircd-hybrid-8.2.24+dfsg.1/Makefile.in --- ircd-hybrid-8.2.22+dfsg.1/Makefile.in 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/Makefile.in 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -89,21 +89,20 @@ host_triplet = @host@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \ - $(top_srcdir)/m4/ax_append_compile_flags.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_arg_enable_assert.m4 \ $(top_srcdir)/m4/ax_arg_enable_debugging.m4 \ + $(top_srcdir)/m4/ax_arg_enable_efence.m4 \ $(top_srcdir)/m4/ax_arg_enable_warnings.m4 \ $(top_srcdir)/m4/ax_arg_gnutls.m4 \ $(top_srcdir)/m4/ax_arg_ioloop_mechanism.m4 \ - $(top_srcdir)/m4/ax_arg_libgeoip.m4 \ $(top_srcdir)/m4/ax_arg_openssl.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ + $(top_srcdir)/m4/ax_define_dir.m4 \ + $(top_srcdir)/m4/ax_gcc_stack_protect.m4 \ $(top_srcdir)/m4/ax_library_net.m4 \ - $(top_srcdir)/m4/ax_mempool_chunksizes.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ - $(top_srcdir)/m4/gcc_stack_protect.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltargz.m4 \ $(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ @@ -598,7 +597,7 @@ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir - tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz + tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir @@ -624,7 +623,7 @@ @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 - shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz + shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir @@ -642,7 +641,7 @@ distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ @@ -652,7 +651,7 @@ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ - GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ + eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac diff -Nru ircd-hybrid-8.2.22+dfsg.1/missing ircd-hybrid-8.2.24+dfsg.1/missing --- ircd-hybrid-8.2.22+dfsg.1/missing 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/missing 2018-04-04 22:33:37.000000000 +0000 @@ -1,9 +1,9 @@ #! /bin/sh # Common wrapper for a few potentially missing GNU programs. -scriptversion=2013-10-28.13; # UTC +scriptversion=2016-01-11.22; # UTC -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2017 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify @@ -210,6 +210,6 @@ # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/core/Makefile.in ircd-hybrid-8.2.24+dfsg.1/modules/core/Makefile.in --- ircd-hybrid-8.2.22+dfsg.1/modules/core/Makefile.in 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/core/Makefile.in 2018-04-04 22:33:34.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -90,21 +90,20 @@ host_triplet = @host@ subdir = modules/core ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \ - $(top_srcdir)/m4/ax_append_compile_flags.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_arg_enable_assert.m4 \ $(top_srcdir)/m4/ax_arg_enable_debugging.m4 \ + $(top_srcdir)/m4/ax_arg_enable_efence.m4 \ $(top_srcdir)/m4/ax_arg_enable_warnings.m4 \ $(top_srcdir)/m4/ax_arg_gnutls.m4 \ $(top_srcdir)/m4/ax_arg_ioloop_mechanism.m4 \ - $(top_srcdir)/m4/ax_arg_libgeoip.m4 \ $(top_srcdir)/m4/ax_arg_openssl.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ + $(top_srcdir)/m4/ax_define_dir.m4 \ + $(top_srcdir)/m4/ax_gcc_stack_protect.m4 \ $(top_srcdir)/m4/ax_library_net.m4 \ - $(top_srcdir)/m4/ax_mempool_chunksizes.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ - $(top_srcdir)/m4/gcc_stack_protect.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltargz.m4 \ $(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/core/m_bmask.c ircd-hybrid-8.2.24+dfsg.1/modules/core/m_bmask.c --- ircd-hybrid-8.2.22+dfsg.1/modules/core/m_bmask.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/core/m_bmask.c 2018-04-04 22:33:34.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_bmask.c * \brief Includes required functions for processing the BMASK command. - * \version $Id: m_bmask.c 8043 2017-03-18 16:51:06Z michael $ + * \version $Id: m_bmask.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -172,7 +172,7 @@ struct module module_entry = { - .version = "$Revision: 8043 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, .flags = MODULE_FLAG_CORE diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/core/m_die.c ircd-hybrid-8.2.24+dfsg.1/modules/core/m_die.c --- ircd-hybrid-8.2.22+dfsg.1/modules/core/m_die.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/core/m_die.c 2018-04-04 22:33:34.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_die.c * \brief Includes required functions for processing the DIE command. - * \version $Id: m_die.c 7996 2017-03-14 13:17:39Z michael $ + * \version $Id: m_die.c 8448 2018-03-30 11:40:13Z michael $ */ #include "stdinc.h" @@ -60,7 +60,7 @@ if (EmptyString(name)) { - sendto_one_notice(source_p, &me, ":Need server name /die %s", me.name); + sendto_one_numeric(source_p, &me, ERR_NEEDMOREPARAMS, "DIE"); return 0; } @@ -101,7 +101,7 @@ struct module module_entry = { - .version = "$Revision: 7996 $", + .version = "$Revision: 8448 $", .modinit = module_init, .modexit = module_exit, .flags = MODULE_FLAG_CORE diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/core/m_error.c ircd-hybrid-8.2.24+dfsg.1/modules/core/m_error.c --- ircd-hybrid-8.2.22+dfsg.1/modules/core/m_error.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/core/m_error.c 2018-04-04 22:33:34.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_error.c * \brief Includes required functions for processing the ERROR command. - * \version $Id: m_error.c 7996 2017-03-14 13:17:39Z michael $ + * \version $Id: m_error.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -123,7 +123,7 @@ struct module module_entry = { - .version = "$Revision: 7996 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, .flags = MODULE_FLAG_CORE diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/core/m_join.c ircd-hybrid-8.2.24+dfsg.1/modules/core/m_join.c --- ircd-hybrid-8.2.22+dfsg.1/modules/core/m_join.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/core/m_join.c 2018-04-04 22:33:34.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_join.c * \brief Includes required functions for processing the JOIN command. - * \version $Id: m_join.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_join.c 8366 2018-03-05 19:51:02Z michael $ */ #include "stdinc.h" @@ -103,12 +103,6 @@ if (!IsClient(source_p)) return 0; - if (parc == 2 && !strcmp(parv[1], "0")) - { - channel_do_join_0(source_p); - return 0; - } - if (parc < 4) return 0; @@ -258,9 +252,9 @@ char *pbuf = parabuf; int what = 0, len = 0; - for (const struct mode_letter *tab = chan_modes; tab->letter; ++tab) + for (const struct chan_mode *tab = cmode_tab; tab->letter; ++tab) { - if ((tab->mode & mode->mode) && !(tab->mode & oldmode->mode)) + if (tab->mode && (tab->mode & mode->mode) && !(tab->mode & oldmode->mode)) { if (what != 1) { @@ -272,9 +266,9 @@ } } - for (const struct mode_letter *tab = chan_modes; tab->letter; ++tab) + for (const struct chan_mode *tab = cmode_tab; tab->letter; ++tab) { - if ((tab->mode & oldmode->mode) && !(tab->mode & mode->mode)) + if (tab->mode && (tab->mode & oldmode->mode) && !(tab->mode & mode->mode)) { if (what != -1) { @@ -460,7 +454,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8366 $", .modinit = module_init, .modexit = module_exit, .flags = MODULE_FLAG_CORE diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/core/m_kick.c ircd-hybrid-8.2.24+dfsg.1/modules/core/m_kick.c --- ircd-hybrid-8.2.22+dfsg.1/modules/core/m_kick.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/core/m_kick.c 2018-04-04 22:33:34.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_kick.c * \brief Includes required functions for processing the KICK command. - * \version $Id: m_kick.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_kick.c 8430 2018-03-27 18:48:40Z michael $ */ #include "stdinc.h" @@ -93,7 +93,7 @@ if ((target_p = find_chasing(source_p, parv[2])) == NULL) return 0; /* find_chasing sends ERR_NOSUCHNICK */ - if (!(member_target = find_channel_link(target_p, chptr))) + if ((member_target = find_channel_link(target_p, chptr)) == NULL) { sendto_one_numeric(source_p, &me, ERR_USERNOTINCHANNEL, target_p->name, chptr->name); return 0; @@ -205,7 +205,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8430 $", .modinit = module_init, .modexit = module_exit, .flags = MODULE_FLAG_CORE diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/core/m_kill.c ircd-hybrid-8.2.24+dfsg.1/modules/core/m_kill.c --- ircd-hybrid-8.2.22+dfsg.1/modules/core/m_kill.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/core/m_kill.c 2018-04-04 22:33:34.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_kill.c * \brief Includes required functions for processing the KILL command. - * \version $Id: m_kill.c 8058 2017-03-23 16:13:10Z michael $ + * \version $Id: m_kill.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -57,7 +57,6 @@ { char buf[IRCD_BUFSIZE] = ""; char def_reason[] = CONF_NOREASON; - struct Client *target_p = NULL; if (EmptyString(parv[1])) { @@ -74,6 +73,7 @@ else reason = def_reason; + struct Client *target_p; if ((target_p = hash_find_client(parv[1])) == NULL) { /* @@ -81,9 +81,7 @@ * rewrite the KILL for this new nickname--this keeps * servers in synch when nick change and kill collide */ - target_p = whowas_get_history(parv[1], ConfigGeneral.kill_chase_time_limit); - - if (!target_p) + if ((target_p = whowas_get_history(parv[1], ConfigGeneral.kill_chase_time_limit)) == NULL) { sendto_one_numeric(source_p, &me, ERR_NOSUCHNICK, parv[1]); return 0; @@ -130,9 +128,8 @@ source_p->name, target_p->name, me.name, reason); /* - * And pass on the message to other servers. Note, that if KILL - * was changed, the message has to be sent to all links, also - * back. + * And pass on the message to other servers. Note, that if KILL was changed, + * the message has to be sent to all links, also back. */ if (!MyConnect(target_p)) { @@ -170,7 +167,6 @@ { char buf[IRCD_BUFSIZE] = ""; char def_reason[] = CONF_NOREASON; - struct Client *target_p = NULL; if (parc < 3 || EmptyString(parv[2])) { @@ -178,6 +174,7 @@ return 0; } + struct Client *target_p; if ((target_p = find_person(source_p, parv[1])) == NULL) return 0; @@ -278,7 +275,7 @@ struct module module_entry = { - .version = "$Revision: 8058 $", + .version = "$Revision: 8436 $", .modinit = module_init, .modexit = module_exit, .flags = MODULE_FLAG_CORE diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/core/m_message.c ircd-hybrid-8.2.24+dfsg.1/modules/core/m_message.c --- ircd-hybrid-8.2.22+dfsg.1/modules/core/m_message.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/core/m_message.c 2018-04-04 22:33:34.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_message.c * \brief Includes required functions for processing the PRIVMSG/NOTICE command. - * \version $Id: m_message.c 8009 2017-03-15 13:41:19Z michael $ + * \version $Id: m_message.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -664,7 +664,7 @@ struct module module_entry = { - .version = "$Revision: 8009 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, .flags = MODULE_FLAG_CORE diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/core/m_mode.c ircd-hybrid-8.2.24+dfsg.1/modules/core/m_mode.c --- ircd-hybrid-8.2.22+dfsg.1/modules/core/m_mode.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/core/m_mode.c 2018-04-04 22:33:34.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_mode.c * \brief Includes required functions for processing the MODE command. - * \version $Id: m_mode.c 8062 2017-03-23 17:13:05Z michael $ + * \version $Id: m_mode.c 8483 2018-04-04 15:07:19Z michael $ */ #include "stdinc.h" @@ -29,6 +29,7 @@ #include "channel.h" #include "channel_mode.h" #include "client.h" +#include "client_svstag.h" #include "hash.h" #include "irc_string.h" #include "ircd.h" @@ -117,7 +118,9 @@ { dlink_node *node; - detach_conf(source_p, CONF_OPER); + svstag_detach(&source_p->svstags, RPL_WHOISOPERATOR); + conf_detach(source_p, CONF_OPER); + ClrOFlag(source_p); DelUMode(source_p, ConfigGeneral.oper_only_umodes); @@ -131,7 +134,6 @@ case 'S': /* Only servers may set +S in a burst */ case 'W': /* Only servers may set +W in a burst */ case 'r': /* Only services may set +r */ - case 'x': /* Only services may set +x */ break; default: @@ -192,7 +194,6 @@ static int m_mode(struct Client *source_p, int parc, char *parv[]) { - struct Channel *chptr = NULL; struct Membership *member = NULL; if (EmptyString(parv[1])) @@ -209,6 +210,7 @@ return 0; } + struct Channel *chptr; if ((chptr = hash_find_channel(parv[1])) == NULL) { sendto_one_numeric(source_p, &me, ERR_NOSUCHCHANNEL, parv[1]); @@ -236,7 +238,7 @@ flood_endgrace(source_p); } - set_channel_mode(source_p, chptr, member, parc - 2, parv + 2); + channel_mode_set(source_p, chptr, member, parc - 2, parv + 2); return 0; } @@ -266,7 +268,7 @@ struct module module_entry = { - .version = "$Revision: 8062 $", + .version = "$Revision: 8483 $", .modinit = module_init, .modexit = module_exit, .flags = MODULE_FLAG_CORE diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/core/m_nick.c ircd-hybrid-8.2.24+dfsg.1/modules/core/m_nick.c --- ircd-hybrid-8.2.22+dfsg.1/modules/core/m_nick.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/core/m_nick.c 2018-04-04 22:33:34.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_nick.c * \brief Includes required functions for processing the NICK command. - * \version $Id: m_nick.c 7996 2017-03-14 13:17:39Z michael $ + * \version $Id: m_nick.c 8467 2018-04-03 11:21:48Z michael $ */ #include "stdinc.h" @@ -169,9 +169,8 @@ static void set_initial_nick(struct Client *source_p, const char *nick) { - const int samenick = !irccmp(source_p->name, nick); - - if (!samenick) + int samenick = irccmp(source_p->name, nick) == 0; + if (samenick == 0) source_p->tsinfo = CurrentTime; source_p->connection->registration &= ~REG_NEED_NICK; @@ -183,9 +182,9 @@ hash_add_client(source_p); /* fd_desc is long enough */ - fd_note(&source_p->connection->fd, "Nick: %s", source_p->name); + fd_note(source_p->connection->fd, "Nick: %s", source_p->name); - if (!source_p->connection->registration) + if (source_p->connection->registration == 0) register_local_user(source_p); } @@ -217,9 +216,8 @@ source_p->connection->nick.last_attempt = CurrentTime; source_p->connection->nick.count++; - int samenick = !irccmp(source_p->name, nick); - - if (!samenick) + int samenick = irccmp(source_p->name, nick) == 0; + if (samenick == 0) { source_p->tsinfo = CurrentTime; clear_ban_cache_list(&source_p->channel); @@ -255,11 +253,11 @@ strlcpy(source_p->name, nick, sizeof(source_p->name)); hash_add_client(source_p); - if (!samenick) + if (samenick == 0) watch_check_hash(source_p, RPL_LOGON); /* fd_desc is long enough */ - fd_note(&source_p->connection->fd, "Nick: %s", source_p->name); + fd_note(source_p->connection->fd, "Nick: %s", source_p->name); } /*! @@ -283,9 +281,8 @@ assert(source_p->name[0]); /* Client changing their nick */ - int samenick = !irccmp(source_p->name, parv[1]); - - if (!samenick) + int samenick = irccmp(source_p->name, parv[1]) == 0; + if (samenick == 0) { DelUMode(source_p, UMODE_REGISTERED); watch_check_hash(source_p, RPL_LOGOFF); @@ -309,7 +306,7 @@ strlcpy(source_p->name, parv[1], sizeof(source_p->name)); hash_add_client(source_p); - if (!samenick) + if (samenick == 0) watch_check_hash(source_p, RPL_LOGON); } @@ -344,14 +341,19 @@ client_p->hopcount = atoi(parv[2]); client_p->tsinfo = strtoumax(parv[3], NULL, 10); - strlcpy(client_p->account, parv[9], sizeof(client_p->account)); strlcpy(client_p->name, parv[1], sizeof(client_p->name)); - strlcpy(client_p->id, parv[8], sizeof(client_p->id)); - strlcpy(client_p->sockhost, parv[7], sizeof(client_p->sockhost)); strlcpy(client_p->info, parv[parc - 1], sizeof(client_p->info)); strlcpy(client_p->host, parv[6], sizeof(client_p->host)); strlcpy(client_p->username, parv[5], sizeof(client_p->username)); + /* TBR: compatibility mode */ + const int does_rhost = parc == 12; + + strlcpy(client_p->realhost, parv[6 + does_rhost], sizeof(client_p->realhost)); + strlcpy(client_p->sockhost, parv[7 + does_rhost], sizeof(client_p->sockhost)); + strlcpy(client_p->id, parv[8 + does_rhost], sizeof(client_p->id)); + strlcpy(client_p->account, parv[9 + does_rhost], sizeof(client_p->account)); + hash_add_client(client_p); hash_add_id(client_p); @@ -393,12 +395,27 @@ * - parv[ 8] = uid * - parv[ 9] = services id (account name) * - parv[10] = ircname (gecos) + * or with CAPAB_RHOST (parc == 12): + * - parv[ 0] = command + * - parv[ 1] = nickname + * - parv[ 2] = hop count + * - parv[ 3] = TS + * - parv[ 4] = umode + * - parv[ 5] = username + * - parv[ 6] = hostname + * - parv[ 7] = real host + * - parv[ 8] = IP address + * - parv[ 9] = uid + * - parv[10] = services id (account name) + * - parv[11] = ircname (gecos) */ static int perform_uid_introduction_collides(struct Client *source_p, struct Client *target_p, int parc, char *parv[]) { - const char *uid = parv[8]; + /* TBR: compatibility mode */ + const int does_rhost = parc == 12; + const char *uid = parv[8 + does_rhost]; uintmax_t newts = strtoumax(parv[3], NULL, 10); assert(IsServer(source_p)); @@ -429,7 +446,7 @@ /* The timestamps are different */ int sameuser = !irccmp(target_p->username, parv[5]) && - !irccmp(target_p->sockhost, parv[7]); + !irccmp(target_p->sockhost, parv[7 + does_rhost]); /* * If the users are the same (loaded a client on a different server) @@ -514,8 +531,8 @@ } /* The timestamps are different */ - int sameuser = !irccmp(target_p->username, source_p->username) && - !irccmp(target_p->sockhost, source_p->sockhost); + int sameuser = irccmp(target_p->username, source_p->username) == 0 && + irccmp(target_p->sockhost, source_p->sockhost) == 0; if ((sameuser && newts < target_p->tsinfo) || (!sameuser && newts > target_p->tsinfo)) @@ -582,8 +599,6 @@ mr_nick(struct Client *source_p, int parc, char *parv[]) { char nick[NICKLEN + 1] = ""; - struct Client *target_p = NULL; - const struct ResvItem *resv = NULL; if (parc < 2 || EmptyString(parv[1])) { @@ -602,6 +617,7 @@ } /* Check if the nick is resv'd */ + const struct ResvItem *resv; if ((resv = resv_find(nick, match))) { sendto_one_numeric(source_p, &me, ERR_ERRONEUSNICKNAME, nick, resv->reason); @@ -611,6 +627,7 @@ return 0; } + struct Client *target_p; if ((target_p = hash_find_client(nick)) == NULL || target_p == source_p) set_initial_nick(source_p, nick); else @@ -634,7 +651,6 @@ m_nick(struct Client *source_p, int parc, char *parv[]) { char nick[NICKLEN + 1] = ""; - struct Client *target_p = NULL; const struct ResvItem *resv = NULL; assert(MyClient(source_p)); @@ -670,6 +686,22 @@ return 0; } + dlink_node *node; + DLINK_FOREACH(node, source_p->channel.head) + { + const struct Membership *member = node->data; + + if (HasCMode(member->chptr, MODE_NONICKCHANGE)) + { + if (has_member_flags(member, CHFL_CHANOP | CHFL_HALFOP) == 0) + { + sendto_one_numeric(source_p, &me, ERR_NONICKCHANGE, member->chptr->name); + return 0; + } + } + } + + struct Client *target_p; if ((target_p = hash_find_client(nick)) == NULL) change_local_nick(source_p, nick); else if (target_p == source_p) @@ -715,8 +747,6 @@ static int ms_nick(struct Client *source_p, int parc, char *parv[]) { - struct Client *target_p = NULL; - if (parc != 3 || EmptyString(parv[parc - 1])) return 0; @@ -727,6 +757,7 @@ return 0; /* If the nick doesn't exist, allow it and process like normal */ + struct Client *target_p; if ((target_p = hash_find_client(parv[1])) == NULL) change_remote_nick(source_p, parv); else if (IsUnknown(target_p)) @@ -765,16 +796,34 @@ * - parv[ 8] = uid * - parv[ 9] = services id (account name) * - parv[10] = ircname (gecos) + * or with CAPAB_RHOST (parc == 12): + * - parv[ 0] = command + * - parv[ 1] = nickname + * - parv[ 2] = hop count + * - parv[ 3] = TS + * - parv[ 4] = umode + * - parv[ 5] = username + * - parv[ 6] = hostname + * - parv[ 7] = real host + * - parv[ 8] = IP address + * - parv[ 9] = uid + * - parv[10] = services id (account name) + * - parv[11] = ircname (gecos) */ static int ms_uid(struct Client *source_p, int parc, char *parv[]) { - struct Client *target_p = NULL; + /* TBR: compatibility mode */ + const int does_rhost = parc == 12; if (check_clean_nick(source_p, parv[1]) || check_clean_user(source_p, parv[1], parv[5]) || check_clean_host(source_p, parv[1], parv[6]) || - check_clean_uid(source_p, parv[1], parv[8])) + check_clean_uid(source_p, parv[1], parv[8 + does_rhost])) + return 0; + + /* TBR: compatibility mode */ + if (does_rhost && check_clean_host(source_p, parv[1], parv[7])) return 0; /* @@ -782,7 +831,8 @@ * This may generate 401's, but it ensures that both clients always * go, even if the other server refuses to do the right thing. */ - if ((target_p = hash_find_id(parv[8]))) + struct Client *target_p; + if ((target_p = hash_find_id(parv[8 + does_rhost]))) { sendto_realops_flags(UMODE_SERVNOTICE, L_ALL, SEND_NOTICE, "ID collision on %s(%s <- %s)(both killed)", @@ -849,7 +899,7 @@ struct module module_entry = { - .version = "$Revision: 7996 $", + .version = "$Revision: 8467 $", .modinit = module_init, .modexit = module_exit, .flags = MODULE_FLAG_CORE diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/core/m_part.c ircd-hybrid-8.2.24+dfsg.1/modules/core/m_part.c --- ircd-hybrid-8.2.22+dfsg.1/modules/core/m_part.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/core/m_part.c 2018-04-04 22:33:34.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_part.c * \brief Includes required functions for processing the PART command. - * \version $Id: m_part.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_part.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -94,7 +94,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, .flags = MODULE_FLAG_CORE diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/core/m_quit.c ircd-hybrid-8.2.24+dfsg.1/modules/core/m_quit.c --- ircd-hybrid-8.2.22+dfsg.1/modules/core/m_quit.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/core/m_quit.c 2018-04-04 22:33:34.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_quit.c * \brief Includes required functions for processing the QUIT command. - * \version $Id: m_quit.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_quit.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -107,7 +107,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, .flags = MODULE_FLAG_CORE diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/core/m_server.c ircd-hybrid-8.2.24+dfsg.1/modules/core/m_server.c --- ircd-hybrid-8.2.22+dfsg.1/modules/core/m_server.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/core/m_server.c 2018-04-04 22:33:34.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,12 +21,13 @@ /*! \file m_server.c * \brief Includes required functions for processing the SERVER/SID command. - * \version $Id: m_server.c 8062 2017-03-23 17:13:05Z michael $ + * \version $Id: m_server.c 8483 2018-04-04 15:07:19Z michael $ */ #include "stdinc.h" #include "list.h" #include "client.h" +#include "client_svstag.h" #include "event.h" #include "hash.h" #include "id.h" @@ -38,11 +39,13 @@ #include "log.h" #include "misc.h" #include "server.h" +#include "server_capab.h" #include "user.h" #include "send.h" #include "parse.h" #include "memory.h" #include "modules.h" +#include "fdlist.h" /*! Parses server flags to be potentially set @@ -126,13 +129,23 @@ buf[1] = '\0'; } - sendto_one(client_p, ":%s UID %s %u %ju %s %s %s %s %s %s :%s", - target_p->servptr->id, - target_p->name, target_p->hopcount + 1, - target_p->tsinfo, - buf, target_p->username, target_p->host, - target_p->sockhost, target_p->id, - target_p->account, target_p->info); + /* TBR: compatibility mode */ + if (IsCapable(client_p, CAPAB_RHOST)) + sendto_one(client_p, ":%s UID %s %u %ju %s %s %s %s %s %s %s :%s", + target_p->servptr->id, + target_p->name, target_p->hopcount + 1, + target_p->tsinfo, + buf, target_p->username, target_p->host, target_p->realhost, + target_p->sockhost, target_p->id, + target_p->account, target_p->info); + else + sendto_one(client_p, ":%s UID %s %u %ju %s %s %s %s %s %s :%s", + target_p->servptr->id, + target_p->name, target_p->hopcount + 1, + target_p->tsinfo, + buf, target_p->username, target_p->host, + target_p->sockhost, target_p->id, + target_p->account, target_p->info); if (!EmptyString(target_p->certfp)) sendto_one(client_p, ":%s CERTFP %s", target_p->id, target_p->certfp); @@ -175,9 +188,9 @@ server_send_client(client_p, target_p); } - DLINK_FOREACH(node, channel_list.head) + DLINK_FOREACH(node, channel_get_list()->head) { - struct Channel *chptr = node->data; + const struct Channel *chptr = node->data; if (dlink_list_length(&chptr->members)) { @@ -231,7 +244,7 @@ { sendto_one(client_p, "PASS %s TS %u %s", conf->spasswd, TS_CURRENT, me.id); - sendto_one(client_p, "CAPAB :%s", get_capabilities(NULL)); + sendto_one(client_p, "CAPAB :%s", capab_get(NULL)); sendto_one(client_p, "SERVER %s 1 :%s%s", me.name, ConfigServerHide.hidden ? "(H) " : "", me.info); @@ -240,17 +253,6 @@ sendto_one(client_p, ":%s SVINFO %u %u 0 :%ju", me.id, TS_CURRENT, TS_MIN, CurrentTime); - /* *WARNING* - ** In the following code in place of plain server's - ** name we send what is returned by client_get_name - ** which may add the "sockhost" after the name. It's - ** *very* *important* that there is a SPACE between - ** the name and sockhost (if present). The receiving - ** server will start the information field from this - ** first blank and thus puts the sockhost into info. - ** ...a bit tricky, but you have been warned, besides - ** code is more neat this way... --msa - */ client_p->servptr = &me; if (HasFlag(client_p, FLAGS_CLOSING)) @@ -275,47 +277,47 @@ hash_add_id(client_p); /* Doesn't duplicate client_p->serv if allocated this struct already */ - make_server(client_p); + server_make(client_p); /* Fixing eob timings.. -gnp */ client_p->connection->firsttime = CurrentTime; - if (service_find(client_p->name)) + if (service_find(client_p->name, irccmp)) AddFlag(client_p, FLAGS_SERVICE); /* Show the real host/IP to admins */ - if (tls_isusing(&client_p->connection->fd.ssl)) + if (tls_isusing(&client_p->connection->fd->ssl)) { /* Show the real host/IP to admins */ sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, "Link with %s established: [TLS: %s] (Capabilities: %s)", - client_get_name(client_p, SHOW_IP), tls_get_cipher(&client_p->connection->fd.ssl), - get_capabilities(client_p)); + client_get_name(client_p, SHOW_IP), tls_get_cipher(&client_p->connection->fd->ssl), + capab_get(client_p)); /* Now show the masked hostname/IP to opers */ sendto_realops_flags(UMODE_SERVNOTICE, L_OPER, SEND_NOTICE, "Link with %s established: [TLS: %s] (Capabilities: %s)", - client_get_name(client_p, MASK_IP), tls_get_cipher(&client_p->connection->fd.ssl), - get_capabilities(client_p)); + client_get_name(client_p, MASK_IP), tls_get_cipher(&client_p->connection->fd->ssl), + capab_get(client_p)); ilog(LOG_TYPE_IRCD, "Link with %s established: [TLS: %s] (Capabilities: %s)", - client_get_name(client_p, SHOW_IP), tls_get_cipher(&client_p->connection->fd.ssl), - get_capabilities(client_p)); + client_get_name(client_p, SHOW_IP), tls_get_cipher(&client_p->connection->fd->ssl), + capab_get(client_p)); } else { /* Show the real host/IP to admins */ sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, "Link with %s established: (Capabilities: %s)", - client_get_name(client_p, SHOW_IP), get_capabilities(client_p)); + client_get_name(client_p, SHOW_IP), capab_get(client_p)); /* Now show the masked hostname/IP to opers */ sendto_realops_flags(UMODE_SERVNOTICE, L_OPER, SEND_NOTICE, "Link with %s established: (Capabilities: %s)", - client_get_name(client_p, MASK_IP), get_capabilities(client_p)); + client_get_name(client_p, MASK_IP), capab_get(client_p)); ilog(LOG_TYPE_IRCD, "Link with %s established: (Capabilities: %s)", - client_get_name(client_p, SHOW_IP), get_capabilities(client_p)); + client_get_name(client_p, SHOW_IP), capab_get(client_p)); } - fd_note(&client_p->connection->fd, "Server: %s", client_p->name); + fd_note(client_p->connection->fd, "Server: %s", client_p->name); sendto_server(client_p, 0, 0, ":%s SID %s 2 %s :%s%s", me.id, client_p->name, client_p->id, @@ -428,7 +430,7 @@ if (server_conf == NULL) return error; - attach_conf(client_p, server_conf); + conf_attach(client_p, server_conf); switch (server_conf->aftype) { @@ -437,7 +439,7 @@ const struct sockaddr_in6 *v6 = (struct sockaddr_in6 *)&server_conf->addr; if (IN6_IS_ADDR_UNSPECIFIED(&v6->sin6_addr)) - memcpy(&server_conf->addr, &client_p->connection->ip, sizeof(struct irc_ssaddr)); + memcpy(&server_conf->addr, &client_p->connection->ip, sizeof(server_conf->addr)); break; } case AF_INET: @@ -445,7 +447,7 @@ const struct sockaddr_in *v4 = (struct sockaddr_in *)&server_conf->addr; if (v4->sin_addr.s_addr == INADDR_NONE) - memcpy(&server_conf->addr, &client_p->connection->ip, sizeof(struct irc_ssaddr)); + memcpy(&server_conf->addr, &client_p->connection->ip, sizeof(server_conf->addr)); break; } } @@ -480,7 +482,7 @@ return 0; } - if (!valid_servname(name)) + if (!server_valid_name(name)) { sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, "Unauthorized server connection attempt from %s: Bogus server name " @@ -648,7 +650,6 @@ ms_sid(struct Client *source_p, int parc, char *parv[]) { struct Client *target_p = NULL; - struct Client *client_p = source_p->from; /* XXX */ /* Just to be sure -A1kmm. */ if (!IsServer(source_p)) @@ -656,19 +657,19 @@ if (EmptyString(parv[parc - 1])) { - exit_client(client_p, "No server description supplied"); + exit_client(source_p->from, "No server description supplied"); return 0; } - if (!valid_servname(parv[1])) + if (!server_valid_name(parv[1])) { sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, "Link %s introduced server with bogus server name %s", - client_get_name(client_p, SHOW_IP), parv[1]); + client_get_name(source_p->from, SHOW_IP), parv[1]); sendto_realops_flags(UMODE_SERVNOTICE, L_OPER, SEND_NOTICE, "Link %s introduced server with bogus server name %s", - client_get_name(client_p, MASK_IP), parv[1]); - exit_client(client_p, "Bogus server name introduced"); + client_get_name(source_p->from, MASK_IP), parv[1]); + exit_client(source_p->from, "Bogus server name introduced"); return 0; } @@ -676,11 +677,11 @@ { sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, "Link %s introduced server with bogus server ID %s", - client_get_name(client_p, SHOW_IP), parv[3]); + client_get_name(source_p->from, SHOW_IP), parv[3]); sendto_realops_flags(UMODE_SERVNOTICE, L_OPER, SEND_NOTICE, "Link %s introduced server with bogus server ID %s", - client_get_name(client_p, MASK_IP), parv[3]); - exit_client(client_p, "Bogus server ID introduced"); + client_get_name(source_p->from, MASK_IP), parv[3]); + exit_client(source_p->from, "Bogus server ID introduced"); return 0; } @@ -689,11 +690,11 @@ { sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, "Link %s cancelled, server ID %s already exists", - client_get_name(client_p, SHOW_IP), parv[3]); + client_get_name(source_p->from, SHOW_IP), parv[3]); sendto_realops_flags(UMODE_SERVNOTICE, L_OPER, SEND_NOTICE, "Link %s cancelled, server ID %s already exists", - client_get_name(client_p, MASK_IP), parv[3]); - exit_client(client_p, "Link cancelled, server ID already exists"); + client_get_name(source_p->from, MASK_IP), parv[3]); + exit_client(source_p->from, "Link cancelled, server ID already exists"); return 0; } @@ -702,11 +703,11 @@ { sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, "Link %s cancelled, server %s already exists", - client_get_name(client_p, SHOW_IP), parv[1]); + client_get_name(source_p->from, SHOW_IP), parv[1]); sendto_realops_flags(UMODE_SERVNOTICE, L_OPER, SEND_NOTICE, "Link %s cancelled, server %s already exists", - client_get_name(client_p, MASK_IP), parv[1]); - exit_client(client_p, "Server exists"); + client_get_name(source_p->from, MASK_IP), parv[1]); + exit_client(source_p->from, "Server exists"); return 0; } @@ -715,7 +716,7 @@ * but only if it's not the same client! - Dianora */ if ((target_p = find_servconn_in_progress(parv[1]))) - if (target_p != client_p) + if (target_p != source_p->from) exit_client(target_p, "Overridden"); /* @@ -725,7 +726,7 @@ dlink_node *node; unsigned int hlined = 0; unsigned int llined = 0; - const struct MaskItem *conf = client_p->connection->confs.head->data; + const struct MaskItem *conf = source_p->from->connection->confs.head->data; DLINK_FOREACH(node, conf->leaf_list.head) { @@ -768,16 +769,16 @@ * .edu's */ - /* Ok, check client_p can hub the new server, and make sure it's not a LL */ + /* Ok, check source_p->from can hub the new server */ if (!hlined) { /* OOOPs nope can't HUB */ sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, "Non-Hub link %s introduced %s.", - client_get_name(client_p, SHOW_IP), parv[1]); + client_get_name(source_p->from, SHOW_IP), parv[1]); sendto_realops_flags(UMODE_SERVNOTICE, L_OPER, SEND_NOTICE, "Non-Hub link %s introduced %s.", - client_get_name(client_p, MASK_IP), parv[1]); + client_get_name(source_p->from, MASK_IP), parv[1]); exit_client(source_p, "No matching hub_mask."); return 0; } @@ -788,16 +789,16 @@ /* OOOPs nope can't HUB this leaf */ sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, "Link %s introduced leafed server %s.", - client_get_name(client_p, SHOW_IP), parv[1]); + client_get_name(source_p->from, SHOW_IP), parv[1]); sendto_realops_flags(UMODE_SERVNOTICE, L_OPER, SEND_NOTICE, "Link %s introduced leafed server %s.", - client_get_name(client_p, MASK_IP), parv[1]); - exit_client(client_p, "Leafed server."); + client_get_name(source_p->from, MASK_IP), parv[1]); + exit_client(source_p->from, "Leafed server."); return 0; } - target_p = client_make(client_p); - make_server(target_p); + target_p = client_make(source_p->from); + server_make(target_p); target_p->hopcount = atoi(parv[2]); target_p->servptr = source_p; @@ -814,7 +815,7 @@ SetServer(target_p); - if (service_find(target_p->name)) + if (service_find(target_p->name, irccmp)) AddFlag(target_p, FLAGS_SERVICE); dlinkAdd(target_p, &target_p->node, &global_server_list); @@ -823,7 +824,7 @@ hash_add_client(target_p); hash_add_id(target_p); - sendto_server(client_p, 0, 0, ":%s SID %s %u %s :%s%s", + sendto_server(source_p->from, 0, 0, ":%s SID %s %u %s :%s%s", source_p->id, target_p->name, target_p->hopcount + 1, target_p->id, IsHidden(target_p) ? "(H) " : "", target_p->info); sendto_realops_flags(UMODE_EXTERNAL, L_ALL, SEND_NOTICE, @@ -872,7 +873,7 @@ struct module module_entry = { - .version = "$Revision: 8062 $", + .version = "$Revision: 8483 $", .modinit = module_init, .modexit = module_exit, .flags = MODULE_FLAG_CORE diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/core/m_sjoin.c ircd-hybrid-8.2.24+dfsg.1/modules/core/m_sjoin.c --- ircd-hybrid-8.2.22+dfsg.1/modules/core/m_sjoin.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/core/m_sjoin.c 2018-04-04 22:33:34.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_sjoin.c * \brief Includes required functions for processing the SJOIN command. - * \version $Id: m_sjoin.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_sjoin.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -136,8 +136,13 @@ break; default: - mode.mode |= ModeTable[(unsigned char)*modes].d; + { + const struct chan_mode *cmode = cmode_map[(unsigned char)*modes]; + + if (cmode) + mode.mode |= cmode->mode; break; + } } } @@ -558,8 +563,8 @@ *mbuf++ = '-'; - for (const struct mode_letter *tab = chan_modes; tab->letter; ++tab) - if ((tab->mode & oldmode->mode) && !(tab->mode & mode->mode)) + for (const struct chan_mode *tab = cmode_tab; tab->letter; ++tab) + if (tab->mode && (tab->mode & oldmode->mode) && !(tab->mode & mode->mode)) *mbuf++ = tab->letter; if (oldmode->limit && mode->limit == 0) @@ -578,8 +583,8 @@ else *mbuf++ = '+'; - for (const struct mode_letter *tab = chan_modes; tab->letter; ++tab) - if ((tab->mode & mode->mode) && !(tab->mode & oldmode->mode)) + for (const struct chan_mode *tab = cmode_tab; tab->letter; ++tab) + if (tab->mode && (tab->mode & mode->mode) && !(tab->mode & oldmode->mode)) *mbuf++ = tab->letter; if (mode->limit && oldmode->limit != mode->limit) @@ -773,7 +778,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, .flags = MODULE_FLAG_CORE diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/core/m_squit.c ircd-hybrid-8.2.24+dfsg.1/modules/core/m_squit.c --- ircd-hybrid-8.2.22+dfsg.1/modules/core/m_squit.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/core/m_squit.c 2018-04-04 22:33:34.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_squit.c * \brief Includes required functions for processing the SQUIT command. - * \version $Id: m_squit.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_squit.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -222,7 +222,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, .flags = MODULE_FLAG_CORE diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/core/m_tmode.c ircd-hybrid-8.2.24+dfsg.1/modules/core/m_tmode.c --- ircd-hybrid-8.2.22+dfsg.1/modules/core/m_tmode.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/core/m_tmode.c 2018-04-04 22:33:34.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_tmode.c * \brief Includes required functions for processing the TMODE command. - * \version $Id: m_tmode.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_tmode.c 8430 2018-03-27 18:48:40Z michael $ */ #include "stdinc.h" @@ -52,7 +52,7 @@ static int ms_tmode(struct Client *source_p, int parc, char *parv[]) { - struct Channel *chptr = NULL; + struct Channel *chptr; assert(!MyClient(source_p)); @@ -65,7 +65,7 @@ if (strtoumax(parv[1], NULL, 10) > chptr->creationtime) return 0; - set_channel_mode(source_p, chptr, NULL, parc - 3, parv + 3); + channel_mode_set(source_p, chptr, NULL, parc - 3, parv + 3); return 0; } @@ -95,7 +95,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8430 $", .modinit = module_init, .modexit = module_exit, .flags = MODULE_FLAG_CORE diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/extra/Makefile.in ircd-hybrid-8.2.24+dfsg.1/modules/extra/Makefile.in --- ircd-hybrid-8.2.22+dfsg.1/modules/extra/Makefile.in 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/extra/Makefile.in 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -90,21 +90,20 @@ host_triplet = @host@ subdir = modules/extra ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \ - $(top_srcdir)/m4/ax_append_compile_flags.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_arg_enable_assert.m4 \ $(top_srcdir)/m4/ax_arg_enable_debugging.m4 \ + $(top_srcdir)/m4/ax_arg_enable_efence.m4 \ $(top_srcdir)/m4/ax_arg_enable_warnings.m4 \ $(top_srcdir)/m4/ax_arg_gnutls.m4 \ $(top_srcdir)/m4/ax_arg_ioloop_mechanism.m4 \ - $(top_srcdir)/m4/ax_arg_libgeoip.m4 \ $(top_srcdir)/m4/ax_arg_openssl.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ + $(top_srcdir)/m4/ax_define_dir.m4 \ + $(top_srcdir)/m4/ax_gcc_stack_protect.m4 \ $(top_srcdir)/m4/ax_library_net.m4 \ - $(top_srcdir)/m4/ax_mempool_chunksizes.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ - $(top_srcdir)/m4/gcc_stack_protect.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltargz.m4 \ $(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/extra/m_opme.c ircd-hybrid-8.2.24+dfsg.1/modules/extra/m_opme.c --- ircd-hybrid-8.2.22+dfsg.1/modules/extra/m_opme.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/extra/m_opme.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2014-2017 ircd-hybrid development team + * Copyright (c) 2014-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_opme.c * \brief Includes required functions for processing the OPME command. - * \version $Id: m_opme.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_opme.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -133,7 +133,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_accept.c ircd-hybrid-8.2.24+dfsg.1/modules/m_accept.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_accept.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_accept.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2000-2017 ircd-hybrid development team + * Copyright (c) 2000-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_accept.c * \brief Includes required functions for processing the ACCEPT command. - * \version $Id: m_accept.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_accept.c 8430 2018-03-27 18:48:40Z michael $ */ #include "stdinc.h" @@ -90,7 +90,7 @@ static void add_accept(const struct split_nuh_item *nuh, struct Client *source_p) { - struct split_nuh_item *const accept_p = xcalloc(sizeof(*accept_p)); + struct split_nuh_item *accept_p = xcalloc(sizeof(*accept_p)); accept_p->nickptr = xstrdup(nuh->nickptr); accept_p->userptr = xstrdup(nuh->userptr); @@ -155,8 +155,7 @@ } else if (*mask) { - if (dlink_list_length(&source_p->connection->acceptlist) >= - ConfigGeneral.max_accept) + if (dlink_list_length(&source_p->connection->acceptlist) >= ConfigGeneral.max_accept) { sendto_one_numeric(source_p, &me, ERR_ACCEPTFULL); return 0; @@ -211,7 +210,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8430 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_admin.c ircd-hybrid-8.2.24+dfsg.1/modules/m_admin.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_admin.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_admin.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_admin.c * \brief Includes required functions for processing the ADMIN command. - * \version $Id: m_admin.c 7970 2017-03-13 21:55:33Z michael $ + * \version $Id: m_admin.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -136,7 +136,7 @@ struct module module_entry = { - .version = "$Revision: 7970 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/Makefile.in ircd-hybrid-8.2.24+dfsg.1/modules/Makefile.in --- ircd-hybrid-8.2.22+dfsg.1/modules/Makefile.in 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/Makefile.in 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -90,21 +90,20 @@ host_triplet = @host@ subdir = modules ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \ - $(top_srcdir)/m4/ax_append_compile_flags.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_arg_enable_assert.m4 \ $(top_srcdir)/m4/ax_arg_enable_debugging.m4 \ + $(top_srcdir)/m4/ax_arg_enable_efence.m4 \ $(top_srcdir)/m4/ax_arg_enable_warnings.m4 \ $(top_srcdir)/m4/ax_arg_gnutls.m4 \ $(top_srcdir)/m4/ax_arg_ioloop_mechanism.m4 \ - $(top_srcdir)/m4/ax_arg_libgeoip.m4 \ $(top_srcdir)/m4/ax_arg_openssl.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ + $(top_srcdir)/m4/ax_define_dir.m4 \ + $(top_srcdir)/m4/ax_gcc_stack_protect.m4 \ $(top_srcdir)/m4/ax_library_net.m4 \ - $(top_srcdir)/m4/ax_mempool_chunksizes.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ - $(top_srcdir)/m4/gcc_stack_protect.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltargz.m4 \ $(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_away.c ircd-hybrid-8.2.24+dfsg.1/modules/m_away.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_away.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_away.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_away.c * \brief Includes required functions for processing the AWAY command. - * \version $Id: m_away.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_away.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -157,7 +157,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_capab.c ircd-hybrid-8.2.24+dfsg.1/modules/m_capab.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_capab.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_capab.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1998-2017 ircd-hybrid development team + * Copyright (c) 1998-2018 ircd-hybrid development team * * 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 @@ -21,13 +21,13 @@ /*! \file m_capab.c * \brief Includes required functions for processing the CAPAB command. - * \version $Id: m_capab.c 8058 2017-03-23 16:13:10Z michael $ + * \version $Id: m_capab.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" #include "client.h" #include "irc_string.h" -#include "server.h" +#include "server_capab.h" #include "parse.h" #include "modules.h" @@ -51,7 +51,7 @@ for (const char *s = strtok_r(parv[1], " ", &p); s; s = strtok_r(NULL, " ", &p)) - if ((cap = find_capability(s))) + if ((cap = capab_find(s))) SetCapable(source_p, cap); return 0; @@ -83,7 +83,7 @@ struct module module_entry = { - .version = "$Revision: 8058 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_cap.c ircd-hybrid-8.2.24+dfsg.1/modules/m_cap.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_cap.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_cap.c 2018-04-04 22:33:35.000000000 +0000 @@ -2,7 +2,7 @@ * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * * Copyright (c) 2004 Kevin L. Mitchell - * Copyright (c) 2006-2017 ircd-hybrid development team + * Copyright (c) 2006-2018 ircd-hybrid development team * * 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 @@ -22,7 +22,7 @@ /*! \file m_cap.c * \brief Includes required functions for processing the CAP command. - * \version $Id: m_cap.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_cap.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -36,10 +36,13 @@ #include "irc_string.h" -#define CAPFL_HIDDEN 0x0001 /**< Do not advertize this capability */ -#define CAPFL_PROHIBIT 0x0002 /**< Client may not set this capability */ -#define CAPFL_PROTO 0x0004 /**< Cap must be acknowledged by client */ -#define CAPFL_STICKY 0x0008 /**< Cap may not be cleared once set */ +enum +{ + CAPFL_HIDDEN = 1 << 0, /**< Do not advertize this capability */ + CAPFL_PROHIBIT = 1 << 1, /**< Client may not set this capability */ + CAPFL_PROTO = 1 << 2, /**< Cap must be acknowledged by client */ + CAPFL_STICKY = 1 << 3 /**< Cap may not be cleared once set */ +}; typedef int (*bqcmp)(const void *, const void *); @@ -340,7 +343,7 @@ source_p->connection->registration &= ~REG_NEED_CAP; /* If client is now done... */ - if (!source_p->connection->registration) + if (source_p->connection->registration == 0) { register_local_user(source_p); return 0; @@ -445,7 +448,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8436 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_certfp.c ircd-hybrid-8.2.24+dfsg.1/modules/m_certfp.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_certfp.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_certfp.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2013-2017 ircd-hybrid development team + * Copyright (c) 2013-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_certfp.c * \brief Includes required functions for processing the CERTFP command. - * \version $Id: m_certfp.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_certfp.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -84,7 +84,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_close.c ircd-hybrid-8.2.24+dfsg.1/modules/m_close.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_close.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_close.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_close.c * \brief Includes required functions for processing the CLOSE command. - * \version $Id: m_close.c 7996 2017-03-14 13:17:39Z michael $ + * \version $Id: m_close.c 8430 2018-03-27 18:48:40Z michael $ */ #include "stdinc.h" @@ -47,7 +47,7 @@ static int mo_close(struct Client *source_p, int parc, char *parv[]) { - dlink_node *node = NULL, *node_next = NULL; + dlink_node *node, *node_next; unsigned int closed = dlink_list_length(&unknown_list); if (!HasOFlag(source_p, OPER_FLAG_CLOSE)) @@ -100,7 +100,7 @@ struct module module_entry = { - .version = "$Revision: 7996 $", + .version = "$Revision: 8430 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_connect.c ircd-hybrid-8.2.24+dfsg.1/modules/m_connect.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_connect.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_connect.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_connect.c * \brief Includes required functions for processing the CONNECT command. - * \version $Id: m_connect.c 7970 2017-03-13 21:55:33Z michael $ + * \version $Id: m_connect.c 8430 2018-03-27 18:48:40Z michael $ */ #include "stdinc.h" @@ -54,7 +54,6 @@ static int mo_connect(struct Client *source_p, int parc, char *parv[]) { - const struct Client *target_p = NULL; const char *const name = parv[1]; if (EmptyString(name)) @@ -82,16 +81,16 @@ } /* - * Try to find the name, then host, if both fail notify and bail + * Try to find the name. If it fails, notify and bail. */ struct MaskItem *conf; - if (!(conf = connect_find(name, NULL, match)) && - !(conf = connect_find(NULL, name, match))) + if ((conf = connect_find(name, match)) == NULL) { - sendto_one_notice(source_p, &me, ":Connect: Host %s not listed in configuration file", name); + sendto_one_notice(source_p, &me, ":Connect: Server %s not listed in configuration file", name); return 0; } + const struct Client *target_p; if ((target_p = hash_find_server(conf->name))) { sendto_one_notice(source_p, &me, ":Connect: Server %s already exists from %s", @@ -113,7 +112,7 @@ * At this point we should be calling connect_server with a valid * connect{} block and a valid port in the connect{} block */ - if (serv_connect(conf, source_p)) + if (server_connect(conf, source_p)) { if (!ConfigServerHide.hide_server_ips && HasUMode(source_p, UMODE_ADMIN)) sendto_one_notice(source_p, &me, ":*** Connecting to %s[%s].%u", @@ -149,7 +148,6 @@ static int ms_connect(struct Client *source_p, int parc, char *parv[]) { - const struct Client *target_p = NULL; const char *const name = parv[1]; if (parc < 4 || EmptyString(parv[3])) @@ -162,16 +160,16 @@ return 0; /* - * Try to find the name, then host, if both fail notify and bail + * Try to find the name. If it fails, notify and bail. */ struct MaskItem *conf; - if (!(conf = connect_find(name, NULL, match)) && - !(conf = connect_find(NULL, name, match))) + if ((conf = connect_find(name, match)) == NULL) { - sendto_one_notice(source_p, &me, ":Connect: Host %s not listed in configuration file", name); + sendto_one_notice(source_p, &me, ":Connect: Server %s not listed in configuration file", name); return 0; } + const struct Client *target_p; if ((target_p = hash_find_server(conf->name))) { sendto_one_notice(source_p, &me, ":Connect: Server %s already exists from %s", @@ -201,12 +199,13 @@ * At this point we should be calling connect_server with a valid * connect{} block and a valid port in the connect{} block */ - if (serv_connect(conf, source_p)) + if (server_connect(conf, source_p)) sendto_one_notice(source_p, &me, ":*** Connecting to %s.%u", conf->name, conf->port); else sendto_one_notice(source_p, &me, ":*** Couldn't connect to %s.%u", conf->name, conf->port); + /* * Client is either connecting with all the data it needs or has been * destroyed @@ -240,7 +239,7 @@ struct module module_entry = { - .version = "$Revision: 7970 $", + .version = "$Revision: 8430 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_dline.c ircd-hybrid-8.2.24+dfsg.1/modules/m_dline.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_dline.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_dline.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_dline.c * \brief Includes required functions for processing the DLINE command. - * \version $Id: m_dline.c 8058 2017-03-23 16:13:10Z michael $ + * \version $Id: m_dline.c 8430 2018-03-27 18:48:40Z michael $ */ #include "stdinc.h" @@ -37,7 +37,7 @@ #include "log.h" #include "misc.h" #include "send.h" -#include "server.h" +#include "server_capab.h" #include "parse.h" #include "modules.h" #include "memory.h" @@ -107,7 +107,6 @@ char buf[IRCD_BUFSIZE]; struct irc_ssaddr daddr; int bits = 0, aftype = 0; - struct MaskItem *conf = NULL; if (!HasFlag(source_p, FLAGS_SERVICE) && !valid_wild_card(1, addr)) { @@ -145,6 +144,7 @@ return; } + struct MaskItem *conf; if ((conf = find_conf_by_address(NULL, &daddr, CONF_DLINE, aftype, NULL, NULL, 1))) { if (IsClient(source_p)) @@ -321,19 +321,19 @@ module_init(void) { mod_add_cmd(&dline_msgtab); - add_capability("DLN", CAPAB_DLN); + capab_add("DLN", CAPAB_DLN); } static void module_exit(void) { mod_del_cmd(&dline_msgtab); - delete_capability("DLN"); + capab_del("DLN"); } struct module module_entry = { - .version = "$Revision: 8058 $", + .version = "$Revision: 8430 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_encap.c ircd-hybrid-8.2.24+dfsg.1/modules/m_encap.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_encap.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_encap.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2003-2017 ircd-hybrid development team + * Copyright (c) 2003-2018 ircd-hybrid development team * * 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 @@ -21,13 +21,13 @@ /*! \file m_encap.c * \brief Includes required functions for processing the ENCAP command. - * \version $Id: m_encap.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_encap.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" #include "client.h" #include "parse.h" -#include "server.h" +#include "server_capab.h" #include "send.h" #include "modules.h" #include "irc_string.h" @@ -52,8 +52,9 @@ for (i = 1; i < (unsigned int)parc - 1; ++i) { - len = strlen(parv[i]) + 1; + len = strlen(parv[i]) + 1; /* +1 for the space */ + /* Drop the whole command if this parameter would be truncated */ if ((cur_len + len) >= sizeof(buffer)) return 0; @@ -107,19 +108,19 @@ module_init(void) { mod_add_cmd(&encap_msgtab); - add_capability("ENCAP", CAPAB_ENCAP); + capab_add("ENCAP", CAPAB_ENCAP); } static void module_exit(void) { mod_del_cmd(&encap_msgtab); - delete_capability("ENCAP"); + capab_del("ENCAP"); } struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_eob.c ircd-hybrid-8.2.24+dfsg.1/modules/m_eob.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_eob.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_eob.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2000-2017 ircd-hybrid development team + * Copyright (c) 2000-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_eob.c * \brief Includes required functions for processing the EOB command. - * \version $Id: m_eob.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_eob.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -85,7 +85,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_etrace.c ircd-hybrid-8.2.24+dfsg.1/modules/m_etrace.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_etrace.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_etrace.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2004-2017 ircd-hybrid development team + * Copyright (c) 2004-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_etrace.c * \brief Includes required functions for processing the ETRACE command. - * \version $Id: m_etrace.c 8083 2017-03-26 10:14:41Z michael $ + * \version $Id: m_etrace.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -66,10 +66,9 @@ * do_etrace() */ static void -do_etrace(struct Client *source_p, const char *arg) +do_etrace(struct Client *source_p, const char *name) { - const char *tname = NULL; - unsigned int wilds = 0, do_all = 0; + int doall = 0; dlink_node *node; sendto_realops_flags(UMODE_SPY, L_ALL, SEND_NOTICE, @@ -77,38 +76,18 @@ source_p->name, source_p->username, source_p->host, source_p->servptr->name); - if (EmptyString(arg)) - { - do_all = 1; - tname = "*"; - } - else - { - tname = arg; - wilds = has_wildcards(tname); - - if (!match(tname, me.name)) - do_all = 1; - else if (!MyClient(source_p) && !strcmp(tname, me.id)) - do_all = 1; - } - - if (!wilds && !do_all) - { - const struct Client *target_p = find_person(source_p, tname); - - if (target_p && MyConnect(target_p)) - report_this_status(source_p, target_p); - - sendto_one_numeric(source_p, &me, RPL_ETRACEEND, me.name); - return; - } + if (EmptyString(name)) + doall = 1; + else if (!match(name, me.name)) + doall = 1; + else if (!MyClient(source_p) && !strcmp(name, me.id)) + doall = 1; DLINK_FOREACH(node, local_client_list.head) { const struct Client *target_p = node->data; - if (!wilds || !match(tname, target_p->name)) + if (doall || match(name, target_p->name) == 0) report_this_status(source_p, target_p); } @@ -176,7 +155,7 @@ struct module module_entry = { - .version = "$Revision: 8083 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_globops.c ircd-hybrid-8.2.24+dfsg.1/modules/m_globops.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_globops.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_globops.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2011-2017 ircd-hybrid development team + * Copyright (c) 2011-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_globops.c * \brief Includes required functions for processing the GLOBOPS command. - * \version $Id: m_globops.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_globops.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -63,8 +63,7 @@ return 0; } - sendto_server(source_p, 0, 0, ":%s GLOBOPS :%s", - source_p->id, message); + sendto_server(source_p, 0, 0, ":%s GLOBOPS :%s", source_p->id, message); sendto_realops_flags(UMODE_SERVNOTICE, L_ALL, SEND_GLOBAL, "from %s: %s", source_p->name, message); return 0; @@ -89,8 +88,7 @@ if (EmptyString(message)) return 0; - sendto_server(source_p, 0, 0, ":%s GLOBOPS :%s", - source_p->id, message); + sendto_server(source_p, 0, 0, ":%s GLOBOPS :%s", source_p->id, message); sendto_realops_flags(UMODE_SERVNOTICE, L_ALL, SEND_GLOBAL, "from %s: %s", source_p->name, message); return 0; @@ -122,7 +120,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8436 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_hash.c ircd-hybrid-8.2.24+dfsg.1/modules/m_hash.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_hash.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_hash.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_hash.c * \brief Includes required functions for processing the HASH command. - * \version $Id: m_hash.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_hash.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -169,7 +169,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_help.c ircd-hybrid-8.2.24+dfsg.1/modules/m_help.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_help.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_help.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1999-2017 ircd-hybrid development team + * Copyright (c) 1999-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_help.c * \brief Includes required functions for processing the HELP command. - * \version $Id: m_help.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_help.c 8301 2018-02-25 14:44:54Z michael $ */ #include "stdinc.h" @@ -92,7 +92,7 @@ return; } - char path[sizeof(HPATH) + strlen(topic) + 1]; /* +1 for / */ + char path[sizeof(HPATH) + IRCD_BUFSIZE + 1]; /* +1 for / */ snprintf(path, sizeof(path), "%s/%s", HPATH, topic); if (stat(path, &sb) < 0) @@ -181,7 +181,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8301 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_info.c ircd-hybrid-8.2.24+dfsg.1/modules/m_info.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_info.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_info.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_info.c * \brief Includes required functions for processing the INFO command. - * \version $Id: m_info.c 8056 2017-03-22 18:36:24Z michael $ + * \version $Id: m_info.c 8313 2018-02-28 17:45:36Z michael $ */ #include "stdinc.h" @@ -149,18 +149,6 @@ "Maximum topic length" }, { - "libgeoip_ipv4_database_file", - OUTPUT_STRING, - &ConfigServerInfo.libgeoip_ipv4_database_file, - "Path to the libGeoIP IPv4 database file" - }, - { - "libgeoip_ipv6_database_file", - OUTPUT_STRING, - &ConfigServerInfo.libgeoip_ipv6_database_file, - "Path to the libGeoIP IPv6 database file" - }, - { "use_logging", OUTPUT_BOOLEAN_YN, &ConfigLog.use_logging, @@ -793,7 +781,7 @@ struct module module_entry = { - .version = "$Revision: 8056 $", + .version = "$Revision: 8313 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_invite.c ircd-hybrid-8.2.24+dfsg.1/modules/m_invite.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_invite.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_invite.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_invite.c * \brief Includes required functions for processing the INVITE command. - * \version $Id: m_invite.c 8043 2017-03-18 16:51:06Z michael $ + * \version $Id: m_invite.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -55,10 +55,6 @@ static int m_invite(struct Client *source_p, int parc, char *parv[]) { - struct Client *target_p = NULL; - struct Channel *chptr = NULL; - struct Membership *member = NULL; - if (parc < 2) { dlink_node *node; @@ -80,18 +76,21 @@ if (IsFloodDone(source_p)) flood_endgrace(source_p); + struct Client *target_p; if ((target_p = find_person(source_p, parv[1])) == NULL) { sendto_one_numeric(source_p, &me, ERR_NOSUCHNICK, parv[1]); return 0; } + struct Channel *chptr; if ((chptr = hash_find_channel(parv[2])) == NULL) { sendto_one_numeric(source_p, &me, ERR_NOSUCHCHANNEL, parv[2]); return 0; } + struct Membership *member; if ((member = find_channel_link(source_p, chptr)) == NULL) { sendto_one_numeric(source_p, &me, ERR_NOTONCHANNEL, chptr->name); @@ -178,15 +177,14 @@ static int ms_invite(struct Client *source_p, int parc, char *parv[]) { - struct Client *target_p = NULL; - struct Channel *chptr = NULL; - if (parc < 3 || EmptyString(parv[2])) return 0; + struct Client *target_p; if ((target_p = find_person(source_p, parv[1])) == NULL) return 0; + struct Channel *chptr; if ((chptr = hash_find_channel(parv[2])) == NULL) return 0; @@ -252,7 +250,7 @@ struct module module_entry = { - .version = "$Revision: 8043 $", + .version = "$Revision: 8436 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_ison.c ircd-hybrid-8.2.24+dfsg.1/modules/m_ison.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_ison.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_ison.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_ison.c * \brief Includes required functions for processing the ISON command. - * \version $Id: m_ison.c 8031 2017-03-17 16:16:04Z michael $ + * \version $Id: m_ison.c 8440 2018-03-29 13:14:41Z michael $ */ #include "stdinc.h" @@ -48,7 +48,6 @@ static int m_ison(struct Client *source_p, int parc, char *parv[]) { - char *nick; char *p = NULL; char *current_insert_point = NULL; char buf[IRCD_BUFSIZE]; @@ -57,11 +56,11 @@ len = snprintf(buf, sizeof(buf), numeric_form(RPL_ISON), me.name, source_p->name); current_insert_point = buf + len; - for (nick = strtok_r(parv[1], " ", &p); nick; - nick = strtok_r(NULL, " ", &p)) + for (const char *name = strtok_r(parv[1], " ", &p); name; + name = strtok_r(NULL, " ", &p)) { - const struct Client *target_p = find_person(source_p, nick); - if (target_p) + const struct Client *target_p; + if ((target_p = find_person(source_p, name))) { len = strlen(target_p->name); @@ -109,7 +108,7 @@ struct module module_entry = { - .version = "$Revision: 8031 $", + .version = "$Revision: 8440 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_kline.c ircd-hybrid-8.2.24+dfsg.1/modules/m_kline.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_kline.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_kline.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_kline.c * \brief Includes required functions for processing the KLINE command. - * \version $Id: m_kline.c 8058 2017-03-23 16:13:10Z michael $ + * \version $Id: m_kline.c 8430 2018-03-27 18:48:40Z michael $ */ #include "stdinc.h" @@ -37,7 +37,7 @@ #include "log.h" #include "misc.h" #include "send.h" -#include "server.h" +#include "server_capab.h" #include "parse.h" #include "modules.h" #include "memory.h" @@ -91,7 +91,6 @@ char buf[IRCD_BUFSIZE]; int bits = 0, aftype = 0; struct irc_ssaddr iphost, *piphost = NULL; - struct MaskItem *conf = NULL; if (!HasFlag(source_p, FLAGS_SERVICE) && !valid_wild_card(2, user, host)) { @@ -131,6 +130,7 @@ break; } + struct MaskItem *conf; if ((conf = find_conf_by_address(host, piphost, CONF_KLINE, aftype, user, NULL, 0))) { if (IsClient(source_p)) @@ -289,19 +289,19 @@ module_init(void) { mod_add_cmd(&kline_msgtab); - add_capability("KLN", CAPAB_KLN); + capab_add("KLN", CAPAB_KLN); } static void module_exit(void) { mod_del_cmd(&kline_msgtab); - delete_capability("KLN"); + capab_del("KLN"); } struct module module_entry = { - .version = "$Revision: 8058 $", + .version = "$Revision: 8430 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_knock.c ircd-hybrid-8.2.24+dfsg.1/modules/m_knock.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_knock.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_knock.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1998-2017 ircd-hybrid development team + * Copyright (c) 1998-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_knock.c * \brief Includes required functions for processing the KNOCK command. - * \version $Id: m_knock.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_knock.c 8487 2018-04-04 16:55:58Z michael $ */ #include "stdinc.h" @@ -37,7 +37,7 @@ #include "conf.h" #include "parse.h" #include "modules.h" -#include "server.h" +#include "server_capab.h" #include "user.h" #include "isupport.h" @@ -56,21 +56,22 @@ static int m_knock(struct Client *source_p, int parc, char *parv[]) { - struct Channel *chptr = NULL; + const char *const name = parv[1]; - if (EmptyString(parv[1])) + if (EmptyString(name)) { sendto_one_numeric(source_p, &me, ERR_NEEDMOREPARAMS, "KNOCK"); return 0; } - if ((chptr = hash_find_channel(parv[1])) == NULL) + struct Channel *chptr; + if ((chptr = hash_find_channel(name)) == NULL) { - sendto_one_numeric(source_p, &me, ERR_NOSUCHCHANNEL, parv[1]); + sendto_one_numeric(source_p, &me, ERR_NOSUCHCHANNEL, name); return 0; } - /* Normal channel, just be sure they aren't on it */ + /* Normal channel, just be sure they aren't on it. */ if (IsMember(source_p, chptr)) { sendto_one_numeric(source_p, &me, ERR_KNOCKONCHAN, chptr->name); @@ -88,7 +89,7 @@ if (MyClient(source_p)) { /* - * Don't allow a knock if the user is banned, or the channel is private + * Don't allow a knock if the user is banned, or the channel is private. */ if (PrivateChannel(chptr) || is_banned(chptr, source_p)) { @@ -146,7 +147,7 @@ module_init(void) { mod_add_cmd(&knock_msgtab); - add_capability("KNOCK", CAPAB_KNOCK); + capab_add("KNOCK", CAPAB_KNOCK); isupport_add("KNOCK", NULL, -1); } @@ -154,13 +155,13 @@ module_exit(void) { mod_del_cmd(&knock_msgtab); - delete_capability("KNOCK"); + capab_del("KNOCK"); isupport_delete("KNOCK"); } struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8487 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_links.c ircd-hybrid-8.2.24+dfsg.1/modules/m_links.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_links.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_links.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_links.c * \brief Includes required functions for processing the LINKS command. - * \version $Id: m_links.c 7970 2017-03-13 21:55:33Z michael $ + * \version $Id: m_links.c 8430 2018-03-27 18:48:40Z michael $ */ #include "stdinc.h" @@ -44,7 +44,7 @@ static void do_links(struct Client *source_p, int parc, char *parv[]) { - dlink_node *node = NULL; + dlink_node *node; sendto_realops_flags(UMODE_SPY, L_ALL, SEND_NOTICE, "LINKS requested by %s (%s@%s) [%s]", @@ -60,7 +60,7 @@ { const struct Client *target_p = node->data; - /* skip hidden servers */ + /* Skip hidden servers */ if (IsHidden(target_p)) if (!HasUMode(source_p, UMODE_OPER)) continue; @@ -74,7 +74,7 @@ /* * We just send the reply, as if they are here there's either no SHIDE, - * or they're an oper.. + * or they're an oper. */ sendto_one_numeric(source_p, &me, RPL_LINKS, target_p->name, target_p->servptr->name, @@ -87,8 +87,8 @@ else { /* - * Print our own info so at least it looks like a normal links - * then print out the file (which may or may not be empty) + * Print our own info so at least it looks like a normal links, then + * print out the file (which may or may not be empty). */ sendto_one_numeric(source_p, &me, RPL_LINKS, me.name, me.name, 0, me.info); @@ -194,7 +194,7 @@ struct module module_entry = { - .version = "$Revision: 7970 $", + .version = "$Revision: 8430 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_list.c ircd-hybrid-8.2.24+dfsg.1/modules/m_list.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_list.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_list.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_list.c * \brief Includes required functions for processing the LIST command. - * \version $Id: m_list.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_list.c 8309 2018-02-28 16:45:52Z michael $ */ #include "stdinc.h" @@ -51,7 +51,7 @@ return; } - struct ListTask *lt = xcalloc(sizeof(struct ListTask)); + struct ListTask *lt = xcalloc(sizeof(*lt)); lt->users_max = UINT_MAX; lt->created_max = UINT_MAX; lt->topicts_max = UINT_MAX; @@ -210,7 +210,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8309 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_locops.c ircd-hybrid-8.2.24+dfsg.1/modules/m_locops.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_locops.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_locops.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_locops.c * \brief Includes required functions for processing the LOCOPS command. - * \version $Id: m_locops.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_locops.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -33,7 +33,7 @@ #include "conf.h" #include "conf_cluster.h" #include "conf_shared.h" -#include "server.h" +#include "server_capab.h" #include "parse.h" #include "modules.h" @@ -131,7 +131,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_lusers.c ircd-hybrid-8.2.24+dfsg.1/modules/m_lusers.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_lusers.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_lusers.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_lusers.c * \brief Includes required functions for processing the LUSERS command. - * \version $Id: m_lusers.c 7970 2017-03-13 21:55:33Z michael $ + * \version $Id: m_lusers.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -116,7 +116,7 @@ struct module module_entry = { - .version = "$Revision: 7970 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_map.c ircd-hybrid-8.2.24+dfsg.1/modules/m_map.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_map.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_map.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2001-2017 ircd-hybrid development team + * Copyright (c) 2001-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_map.c * \brief Includes required functions for processing the MAP command. - * \version $Id: m_map.c 8058 2017-03-23 16:13:10Z michael $ + * \version $Id: m_map.c 8430 2018-03-27 18:48:40Z michael $ */ #include "stdinc.h" @@ -70,7 +70,7 @@ sendto_one_numeric(client, &me, RPL_MAP, prompt, buf); } - if (prompt_length > 0) + if (prompt_length) { *(p - 1) = ' '; @@ -86,8 +86,9 @@ { struct Client *target_p = node->data; - if (IsHidden(target_p) && !HasUMode(client, UMODE_OPER)) - continue; + if (IsHidden(target_p)) + if (!HasUMode(client, UMODE_OPER)) + continue; if (HasFlag(target_p, FLAGS_SERVICE) && ConfigServerHide.hide_services) if (!HasUMode(client, UMODE_OPER)) @@ -100,8 +101,9 @@ { struct Client *target_p = node->data; - if (IsHidden(target_p) && !HasUMode(client, UMODE_OPER)) - continue; + if (IsHidden(target_p)) + if (!HasUMode(client, UMODE_OPER)) + continue; if (HasFlag(target_p, FLAGS_SERVICE) && ConfigServerHide.hide_services) if (!HasUMode(client, UMODE_OPER)) @@ -112,7 +114,7 @@ dump_map(client, target_p, prompt_length + 2); } - if (prompt_length > 0) + if (prompt_length) *(p - 1) = '-'; } @@ -205,7 +207,7 @@ struct module module_entry = { - .version = "$Revision: 8058 $", + .version = "$Revision: 8430 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_module.c ircd-hybrid-8.2.24+dfsg.1/modules/m_module.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_module.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_module.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2000-2017 ircd-hybrid development team + * Copyright (c) 2000-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_module.c * \brief Includes required functions for processing the MODULE command. - * \version $Id: m_module.c 8073 2017-03-25 19:42:32Z michael $ + * \version $Id: m_module.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -279,7 +279,7 @@ struct module module_entry = { - .version = "$Revision: 8073 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, .flags = MODULE_FLAG_NOUNLOAD diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_motd.c ircd-hybrid-8.2.24+dfsg.1/modules/m_motd.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_motd.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_motd.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_motd.c * \brief Includes required functions for processing the MOTD command. - * \version $Id: m_motd.c 7970 2017-03-13 21:55:33Z michael $ + * \version $Id: m_motd.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -130,7 +130,7 @@ struct module module_entry = { - .version = "$Revision: 7970 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_names.c ircd-hybrid-8.2.24+dfsg.1/modules/m_names.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_names.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_names.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_names.c * \brief Includes required functions for processing the NAMES command. - * \version $Id: m_names.c 8058 2017-03-23 16:13:10Z michael $ + * \version $Id: m_names.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -92,7 +92,7 @@ struct module module_entry = { - .version = "$Revision: 8058 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_oper.c ircd-hybrid-8.2.24+dfsg.1/modules/m_oper.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_oper.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_oper.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,12 +21,13 @@ /*! \file m_oper.c * \brief Includes required functions for processing the OPER command. - * \version $Id: m_oper.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_oper.c 8483 2018-04-04 15:07:19Z michael $ */ #include "stdinc.h" #include "list.h" #include "client.h" +#include "client_svstag.h" #include "irc_string.h" #include "ircd.h" #include "numeric.h" @@ -72,7 +73,7 @@ if (!EmptyString(conf->whois)) { - client_attach_svstag(source_p, RPL_WHOISOPERATOR, "+", conf->whois); + svstag_attach(&source_p->svstags, RPL_WHOISOPERATOR, "+", conf->whois); sendto_server(source_p, 0, 0, ":%s SVSTAG %s %ju %u + :%s", me.id, source_p->id, source_p->tsinfo, RPL_WHOISOPERATOR, conf->whois); @@ -84,6 +85,7 @@ get_oper_name(source_p)); sendto_server(NULL, 0, 0, ":%s GLOBOPS :%s is now an operator", me.id, get_oper_name(source_p)); + send_umode_out(source_p, old); sendto_one_numeric(source_p, &me, RPL_YOUREOPER); } @@ -124,7 +126,6 @@ static int m_oper(struct Client *source_p, int parc, char *parv[]) { - struct MaskItem *conf = NULL; const char *const opername = parv[1]; const char *const password = parv[2]; @@ -138,12 +139,13 @@ if (!IsFloodDone(source_p)) flood_endgrace(source_p); + struct MaskItem *conf; if ((conf = operator_find(source_p, opername)) == NULL) { sendto_one_numeric(source_p, &me, ERR_NOOPERHOST); + conf = operator_find(NULL, opername); - failed_oper_notice(source_p, opername, (conf != NULL) ? - "host mismatch" : "no operator {} block"); + failed_oper_notice(source_p, opername, conf ? "host mismatch" : "no operator {} block"); return 0; } @@ -166,7 +168,7 @@ if (match_conf_password(password, conf)) { - if (attach_conf(source_p, conf)) + if (conf_attach(source_p, conf)) { sendto_one_notice(source_p, &me, ":Can't attach conf!"); failed_oper_notice(source_p, opername, "can't attach conf!"); @@ -229,7 +231,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8483 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_pass.c ircd-hybrid-8.2.24+dfsg.1/modules/m_pass.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_pass.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_pass.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_pass.c * \brief Includes required functions for processing the PASS command. - * \version $Id: m_pass.c 7993 2017-03-14 12:28:29Z michael $ + * \version $Id: m_pass.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -99,7 +99,7 @@ struct module module_entry = { - .version = "$Revision: 7993 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_ping.c ircd-hybrid-8.2.24+dfsg.1/modules/m_ping.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_ping.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_ping.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_ping.c * \brief Includes required functions for processing the PING command. - * \version $Id: m_ping.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_ping.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -145,7 +145,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_pong.c ircd-hybrid-8.2.24+dfsg.1/modules/m_pong.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_pong.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_pong.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_pong.c * \brief Includes required functions for processing the PONG command. - * \version $Id: m_pong.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_pong.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -104,7 +104,7 @@ { AddFlag(source_p, FLAGS_PING_COOKIE); - if (!source_p->connection->registration) + if (source_p->connection->registration == 0) register_local_user(source_p); } else @@ -143,7 +143,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8436 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_post.c ircd-hybrid-8.2.24+dfsg.1/modules/m_post.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_post.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_post.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2001-2017 ircd-hybrid development team + * Copyright (c) 2001-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_post.c * \brief Includes required functions for processing the POST/GET/PUT command. - * \version $Id: m_post.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_post.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -103,7 +103,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_rehash.c ircd-hybrid-8.2.24+dfsg.1/modules/m_rehash.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_rehash.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_rehash.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_rehash.c * \brief Includes required functions for processing the REHASH command. - * \version $Id: m_rehash.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_rehash.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -236,7 +236,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_restart.c ircd-hybrid-8.2.24+dfsg.1/modules/m_restart.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_restart.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_restart.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_restart.c * \brief Includes required functions for processing the RESTART command. - * \version $Id: m_restart.c 7996 2017-03-14 13:17:39Z michael $ + * \version $Id: m_restart.c 8448 2018-03-30 11:40:13Z michael $ */ #include "stdinc.h" @@ -60,7 +60,7 @@ if (EmptyString(name)) { - sendto_one_notice(source_p, &me, ":Need server name /restart %s", me.name); + sendto_one_numeric(source_p, &me, ERR_NEEDMOREPARAMS, "RESTART"); return 0; } @@ -101,7 +101,7 @@ struct module module_entry = { - .version = "$Revision: 7996 $", + .version = "$Revision: 8448 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_resv.c ircd-hybrid-8.2.24+dfsg.1/modules/m_resv.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_resv.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_resv.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2001-2017 ircd-hybrid development team + * Copyright (c) 2001-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_resv.c * \brief Includes required functions for processing the RESV command. - * \version $Id: m_resv.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_resv.c 8430 2018-03-27 18:48:40Z michael $ */ #include "stdinc.h" @@ -29,7 +29,7 @@ #include "ircd.h" #include "irc_string.h" #include "numeric.h" -#include "server.h" +#include "server_capab.h" #include "send.h" #include "parse.h" #include "modules.h" @@ -72,8 +72,8 @@ } } - struct ResvItem *resv = resv_make(mask, reason, NULL); - if (!resv) + struct ResvItem *resv; + if ((resv = resv_make(mask, reason, NULL)) == NULL) { if (IsClient(source_p)) sendto_one_notice(source_p, &me, ":A RESV has already been placed on: %s", mask); @@ -213,7 +213,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8430 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_set.c ircd-hybrid-8.2.24+dfsg.1/modules/m_set.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_set.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_set.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_set.c * \brief Includes required functions for processing the SET command. - * \version $Id: m_set.c 8058 2017-03-23 16:13:10Z michael $ + * \version $Id: m_set.c 8390 2018-03-17 21:43:52Z michael $ */ #include "stdinc.h" @@ -43,7 +43,7 @@ { if (!EmptyString(arg)) { - struct MaskItem *conf = connect_find(arg, NULL, irccmp); + struct MaskItem *conf = connect_find(arg, irccmp); if (conf) { @@ -419,7 +419,7 @@ struct module module_entry = { - .version = "$Revision: 8058 $", + .version = "$Revision: 8390 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_stats.c ircd-hybrid-8.2.24+dfsg.1/modules/m_stats.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_stats.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_stats.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_stats.c * \brief Includes required functions for processing the STATS command. - * \version $Id: m_stats.c 8058 2017-03-23 16:13:10Z michael $ + * \version $Id: m_stats.c 8490 2018-04-04 22:02:18Z michael $ */ #include "stdinc.h" @@ -30,10 +30,12 @@ #include "irc_string.h" #include "ircd.h" #include "listener.h" +#include "parse.h" #include "conf.h" #include "conf_class.h" #include "conf_cluster.h" #include "conf_gecos.h" +#include "conf_pseudo.h" #include "conf_resv.h" #include "conf_service.h" #include "conf_shared.h" @@ -43,8 +45,8 @@ #include "fdlist.h" #include "misc.h" #include "server.h" +#include "server_capab.h" #include "event.h" -#include "parse.h" #include "modules.h" #include "whowas.h" #include "watch.h" @@ -74,7 +76,7 @@ }; dlink_node *node; - char buf[sizeof(flag_table) / sizeof(struct shared_types) + 1]; /* +1 for 'c' */ + char buf[sizeof(flag_table) / sizeof(flag_table[0]) + 1]; /* +1 for 'c' */ DLINK_FOREACH(node, shared_get_list()->head) { @@ -117,7 +119,7 @@ }; dlink_node *node; - char buf[sizeof(flag_table) / sizeof(struct cluster_types) + 1]; /* +1 for 'C' */ + char buf[sizeof(flag_table) / sizeof(flag_table[0]) + 1]; /* +1 for 'C' */ DLINK_FOREACH(node, cluster_get_list()->head) { @@ -147,7 +149,7 @@ DLINK_FOREACH(node, service_get_list()->head) { const struct ServiceItem *service = node->data; - sendto_one_numeric(source_p, &me, RPL_STATSSERVICE, 'S', "*", service->name, 0, 0); + sendto_one_numeric(source_p, &me, RPL_STATSSERVICE, "*", service->name, 0, 0); } } @@ -318,7 +320,7 @@ remote_client_count = dlink_list_length(&global_server_list) + dlink_list_length(&global_client_list) - local_client_count; /* Count up all members, invites, ban lists, except lists, Invex lists */ - DLINK_FOREACH(node, channel_list.head) + DLINK_FOREACH(node, channel_get_list()->head) { const struct Channel *chptr = node->data; @@ -395,8 +397,8 @@ sendto_one_numeric(source_p, &me, RPL_STATSDEBUG | SND_EXPLICIT, "z :Channels %u(%zu)", - dlink_list_length(&channel_list), - dlink_list_length(&channel_list) * sizeof(struct Channel)); + dlink_list_length(channel_get_list()), + dlink_list_length(channel_get_list()) * sizeof(struct Channel)); sendto_one_numeric(source_p, &me, RPL_STATSDEBUG | SND_EXPLICIT, "z :Bans %u(%zu)", @@ -432,7 +434,7 @@ "z :iphash %u(%zu)", number_ips_stored, mem_ips_stored); - local_client_memory_used = local_client_count *(sizeof(struct Client) + sizeof(struct Connection)); + local_client_memory_used = local_client_count * (sizeof(struct Client) + sizeof(struct Connection)); sendto_one_numeric(source_p, &me, RPL_STATSDEBUG | SND_EXPLICIT, "z :Local client Memory in use: %u(%zu)", local_client_count, local_client_memory_used); @@ -570,6 +572,19 @@ } static void +stats_fdlist(struct Client *source_p, int parc, char *parv[]) +{ + for (int fd = 0; fd <= highest_fd; ++fd) + { + const fde_t *F = &fd_table[fd]; + + if (F->flags.open) + sendto_one_numeric(source_p, &me, RPL_STATSDEBUG | SND_EXPLICIT, + "F :fd %-5d desc '%s'", F->fd, F->desc); + } +} + +static void stats_hubleaf(struct Client *source_p, int parc, char *parv[]) { dlink_node *node, *node2; @@ -813,6 +828,20 @@ report_messages(source_p); } +static void +stats_pseudo(struct Client *source_p, int parc, char *parv[]) +{ + dlink_node *node; + + DLINK_FOREACH(node, pseudo_get_list()->head) + { + const struct PseudoItem *pseudo = node->data; + sendto_one_numeric(source_p, &me, RPL_STATSPSEUDO, pseudo->command, + pseudo->name, pseudo->nick, pseudo->serv, + pseudo->prepend ? pseudo->prepend : "*"); + } +} + /* stats_operedup() * * input - client pointer @@ -911,72 +940,62 @@ stats_tstats(struct Client *source_p, int parc, char *parv[]) { dlink_node *node; - struct ServerStatistics tmp; - struct ServerStatistics *sp = &tmp; + struct ServerStatistics sp; - memcpy(sp, &ServerStats, sizeof(struct ServerStatistics)); - - /* - * must use the += operator. is_sv is not the number of currently - * active server connections. Note the incrementation in - * s_bsd.c:close_connection. - */ - sp->is_sv += dlink_list_length(&local_server_list); + memcpy(&sp, &ServerStats, sizeof(sp)); DLINK_FOREACH(node, local_server_list.head) { const struct Client *target_p = node->data; - sp->is_sbs += target_p->connection->send.bytes; - sp->is_sbr += target_p->connection->recv.bytes; - sp->is_sti += CurrentTime - target_p->connection->firsttime; + sp.is_sbs += target_p->connection->send.bytes; + sp.is_sbr += target_p->connection->recv.bytes; + sp.is_sti += CurrentTime - target_p->connection->firsttime; + sp.is_sv++; } - sp->is_cl += dlink_list_length(&local_client_list); - DLINK_FOREACH(node, local_client_list.head) { const struct Client *target_p = node->data; - sp->is_cbs += target_p->connection->send.bytes; - sp->is_cbr += target_p->connection->recv.bytes; - sp->is_cti += CurrentTime - target_p->connection->firsttime; + sp.is_cbs += target_p->connection->send.bytes; + sp.is_cbr += target_p->connection->recv.bytes; + sp.is_cti += CurrentTime - target_p->connection->firsttime; + sp.is_cl++; } - sp->is_ni += dlink_list_length(&unknown_list); - sendto_one_numeric(source_p, &me, RPL_STATSDEBUG | SND_EXPLICIT, "t :accepts %u refused %u", - sp->is_ac, sp->is_ref); + sp.is_ac, sp.is_ref); sendto_one_numeric(source_p, &me, RPL_STATSDEBUG | SND_EXPLICIT, "t :unknown commands %u prefixes %u", - sp->is_unco, sp->is_unpf); + sp.is_unco, sp.is_unpf); sendto_one_numeric(source_p, &me, RPL_STATSDEBUG | SND_EXPLICIT, "t :nick collisions %u unknown closes %u", - sp->is_kill, sp->is_ni); + sp.is_kill, sp.is_ni); sendto_one_numeric(source_p, &me, RPL_STATSDEBUG | SND_EXPLICIT, "t :wrong direction %u empty %u", - sp->is_wrdi, sp->is_empt); + sp.is_wrdi, sp.is_empt); sendto_one_numeric(source_p, &me, RPL_STATSDEBUG | SND_EXPLICIT, "t :numerics seen %u", - sp->is_num); + sp.is_num); sendto_one_numeric(source_p, &me, RPL_STATSDEBUG | SND_EXPLICIT, "t :auth successes %u fails %u", - sp->is_asuc, sp->is_abad); + sp.is_asuc, sp.is_abad); sendto_one_numeric(source_p, &me, RPL_STATSDEBUG | SND_EXPLICIT, "t :Client Server"); sendto_one_numeric(source_p, &me, RPL_STATSDEBUG | SND_EXPLICIT, "t :connected %u %u", - sp->is_cl, sp->is_sv); + sp.is_cl, sp.is_sv); sendto_one_numeric(source_p, &me, RPL_STATSDEBUG | SND_EXPLICIT, "t :bytes sent %ju %ju", - sp->is_cbs, sp->is_sbs); + sp.is_cbs, sp.is_sbs); sendto_one_numeric(source_p, &me, RPL_STATSDEBUG | SND_EXPLICIT, "t :bytes received %ju %ju", - sp->is_cbr, sp->is_sbr); + sp.is_cbr, sp.is_sbr); sendto_one_numeric(source_p, &me, RPL_STATSDEBUG | SND_EXPLICIT, "t :time connected %ju %ju", - sp->is_cti, sp->is_sti); + sp.is_cti, sp.is_sti); } static void @@ -1083,7 +1102,7 @@ target_p->connection->recv.bytes >> 10, (unsigned int)(CurrentTime - target_p->connection->firsttime), (CurrentTime > target_p->connection->since) ? (unsigned int)(CurrentTime - target_p->connection->since) : 0, - HasUMode(source_p, UMODE_OPER) ? get_capabilities(target_p) : "TS"); + HasUMode(source_p, UMODE_OPER) ? capab_get(target_p) : "TS"); } sendB >>= 10; @@ -1182,7 +1201,7 @@ target_p->connection->recv.bytes >> 10, (unsigned int)(CurrentTime - target_p->connection->firsttime), (CurrentTime > target_p->connection->since) ? (unsigned int)(CurrentTime - target_p->connection->since) : 0, - IsServer(target_p) ? get_capabilities(target_p) : "-"); + IsServer(target_p) ? capab_get(target_p) : "-"); } } @@ -1238,8 +1257,8 @@ { 'D', stats_deny, UMODE_OPER }, { 'e', stats_exempt, UMODE_OPER }, { 'E', stats_events, UMODE_ADMIN }, - { 'f', fd_dump, UMODE_ADMIN }, - { 'F', fd_dump, UMODE_ADMIN }, + { 'f', stats_fdlist, UMODE_ADMIN }, + { 'F', stats_fdlist, UMODE_ADMIN }, { 'h', stats_hubleaf, UMODE_OPER }, { 'H', stats_hubleaf, UMODE_OPER }, { 'i', stats_auth, 0 }, @@ -1256,7 +1275,7 @@ { 'P', stats_ports, 0 }, { 'q', stats_resv, UMODE_OPER }, { 'Q', stats_resv, UMODE_OPER }, - { 's', stats_service, UMODE_OPER }, + { 's', stats_pseudo, UMODE_OPER }, { 'S', stats_service, UMODE_OPER }, { 't', stats_tstats, UMODE_OPER }, { 'T', motd_report, UMODE_OPER }, @@ -1286,7 +1305,7 @@ if ((tab = stats_map[statchar])) { - if (!tab->required_modes || HasUMode(source_p, tab->required_modes)) + if (tab->required_modes == 0 || HasUMode(source_p, tab->required_modes)) tab->handler(source_p, parc, parv); else sendto_one_numeric(source_p, &me, ERR_NOPRIVILEGES); @@ -1379,7 +1398,7 @@ struct module module_entry = { - .version = "$Revision: 8058 $", + .version = "$Revision: 8490 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_svinfo.c ircd-hybrid-8.2.24+dfsg.1/modules/m_svinfo.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_svinfo.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_svinfo.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_svinfo.c * \brief Includes required functions for processing the SVINFO command. - * \version $Id: m_svinfo.c 7996 2017-03-14 13:17:39Z michael $ + * \version $Id: m_svinfo.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -52,8 +52,6 @@ static int ms_svinfo(struct Client *source_p, int parc, char *parv[]) { - intmax_t deltat = 0, theirtime = 0; - if (!IsServer(source_p) || !MyConnect(source_p)) return 0; @@ -83,8 +81,8 @@ */ set_time(); - theirtime = strtoimax(parv[4], NULL, 10); - deltat = imaxabs(theirtime - CurrentTime); + intmax_t theirtime = strtoimax(parv[4], NULL, 10); + intmax_t deltat = imaxabs(theirtime - CurrentTime); if (deltat > ConfigGeneral.ts_max_delta) { @@ -141,7 +139,7 @@ struct module module_entry = { - .version = "$Revision: 7996 $", + .version = "$Revision: 8436 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_svshost.c ircd-hybrid-8.2.24+dfsg.1/modules/m_svshost.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_svshost.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_svshost.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2016-2017 ircd-hybrid development team + * Copyright (c) 2016-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_svshost.c * \brief Includes required functions for processing the SVSHOST command. - * \version $Id: m_svshost.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_svshost.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -45,18 +45,15 @@ * - parv[0] = command * - parv[1] = nickname * - parv[2] = TS - * - parv[3] = +|- - * - parv[4] = host name + * - parv[3] = host name */ static int ms_svshost(struct Client *source_p, int parc, char *parv[]) { - struct Client *target_p = NULL; - int what = MODE_ADD; - if (!HasFlag(source_p, FLAGS_SERVICE)) return 0; + struct Client *target_p; if ((target_p = find_person(source_p, parv[1])) == NULL) return 0; @@ -64,30 +61,19 @@ if (ts && (ts != target_p->tsinfo)) return 0; - switch (*parv[3]) - { - case '+': - what = MODE_ADD; - break; - case '-': - what = MODE_DEL; - break; - default: return 0; - } - - if (valid_hostname(parv[4])) - user_set_hostmask(target_p, parv[4], what); + if (valid_hostname(parv[3])) + user_set_hostmask(target_p, parv[3]); - sendto_server(source_p, 0, 0, ":%s SVSHOST %s %ju %s %s", + sendto_server(source_p, 0, 0, ":%s SVSHOST %s %ju %s", source_p->id, - target_p->id, target_p->tsinfo, parv[3], parv[4]); + target_p->id, target_p->tsinfo, parv[3]); return 0; } static struct Message svshost_msgtab = { .cmd = "SVSHOST", - .args_min = 5, + .args_min = 4, .args_max = MAXPARA, .handlers[UNREGISTERED_HANDLER] = m_ignore, .handlers[CLIENT_HANDLER] = m_ignore, @@ -110,7 +96,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8436 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_svsjoin.c ircd-hybrid-8.2.24+dfsg.1/modules/m_svsjoin.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_svsjoin.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_svsjoin.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2014-2017 ircd-hybrid development team + * Copyright (c) 2014-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_svsjoin.c * \brief Includes required functions for processing the SVSJOIN command. - * \version $Id: m_svsjoin.c 7996 2017-03-14 13:17:39Z michael $ + * \version $Id: m_svsjoin.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -52,14 +52,13 @@ static int ms_svsjoin(struct Client *source_p, int parc, char *parv[]) { - struct Client *target_p = NULL; - if (!HasFlag(source_p, FLAGS_SERVICE)) return 0; if (EmptyString(parv[2])) return 0; + struct Client *target_p; if ((target_p = find_person(source_p, parv[1])) == NULL) return 0; @@ -114,7 +113,7 @@ struct module module_entry = { - .version = "$Revision: 7996 $", + .version = "$Revision: 8436 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_svskill.c ircd-hybrid-8.2.24+dfsg.1/modules/m_svskill.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_svskill.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_svskill.c 2018-04-04 22:33:35.000000000 +0000 @@ -2,7 +2,7 @@ * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * * Copyright (c) 1999 Bahamut development team. - * Copyright (c) 2013-2017 ircd-hybrid development team + * Copyright (c) 2013-2018 ircd-hybrid development team * * 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 @@ -22,7 +22,7 @@ /*! \file m_svskill.c * \brief Includes required functions for processing the SVSKILL command. - * \version $Id: m_svskill.c 7996 2017-03-14 13:17:39Z michael $ + * \version $Id: m_svskill.c 8463 2018-04-01 12:33:22Z michael $ */ #include "stdinc.h" @@ -51,28 +51,20 @@ static int ms_svskill(struct Client *source_p, int parc, char *parv[]) { - struct Client *target_p = NULL; - const char *comment = NULL; + const char *comment = parv[3]; /* Either defined or NULL */ char reason[REASONLEN + 1] = "SVSKilled: "; - uintmax_t ts = 0; if (!HasFlag(source_p, FLAGS_SERVICE)) return 0; - if (EmptyString(parv[1])) - return 0; - - if (parc > 3) - { - comment = parv[3] ? parv[3] : CONF_NOREASON; - ts = strtoumax(parv[2], NULL, 10); - } - else - comment = (parc > 2 && parv[2]) ? parv[2] : CONF_NOREASON; + if (EmptyString(comment)) + comment = CONF_NOREASON; + struct Client *target_p; if ((target_p = find_person(source_p, parv[1])) == NULL) return 0; + uintmax_t ts = strtoumax(parv[2], NULL, 10); if (ts && (ts != target_p->tsinfo)) return 0; @@ -93,19 +85,15 @@ return 0; } - if (ts == 0) - sendto_one(target_p, ":%s SVSKILL %s :%s", source_p->id, - target_p->id, comment); - else - sendto_one(target_p, ":%s SVSKILL %s %ju :%s", source_p->id, - target_p->id, ts, comment); + sendto_one(target_p, ":%s SVSKILL %s %ju :%s", source_p->id, + target_p->id, ts, comment); return 0; } static struct Message svskill_msgtab = { .cmd = "SVSKILL", - .args_min = 2, + .args_min = 3, .args_max = MAXPARA, .handlers[UNREGISTERED_HANDLER] = m_ignore, .handlers[CLIENT_HANDLER] = m_ignore, @@ -128,7 +116,7 @@ struct module module_entry = { - .version = "$Revision: 7996 $", + .version = "$Revision: 8463 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_svsmode.c ircd-hybrid-8.2.24+dfsg.1/modules/m_svsmode.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_svsmode.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_svsmode.c 2018-04-04 22:33:35.000000000 +0000 @@ -2,7 +2,7 @@ * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * * Copyright (c) 1999 Bahamut development team. - * Copyright (c) 2011-2017 ircd-hybrid development team + * Copyright (c) 2011-2018 ircd-hybrid development team * * 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 @@ -22,11 +22,13 @@ /*! \file m_svsmode.c * \brief Includes required functions for processing the SVSMODE command. - * \version $Id: m_svsmode.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_svsmode.c 8483 2018-04-04 15:07:19Z michael $ */ #include "stdinc.h" +#include "list.h" #include "client.h" +#include "client_svstag.h" #include "ircd.h" #include "send.h" #include "channel_mode.h" @@ -99,7 +101,7 @@ case 'x': if (!EmptyString(extarg) && valid_hostname(extarg)) - user_set_hostmask(target_p, extarg, what); + user_set_hostmask(target_p, extarg); break; case 'o': @@ -110,9 +112,10 @@ if (MyConnect(target_p)) { - dlink_node *node = NULL; + dlink_node *node; - detach_conf(target_p, CONF_OPER); + svstag_detach(&target_p->svstags, RPL_WHOISOPERATOR); + conf_detach(target_p, CONF_OPER); ClrOFlag(target_p); DelUMode(target_p, ConfigGeneral.oper_only_umodes); @@ -199,7 +202,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8483 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_svsnick.c ircd-hybrid-8.2.24+dfsg.1/modules/m_svsnick.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_svsnick.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_svsnick.c 2018-04-04 22:33:35.000000000 +0000 @@ -2,7 +2,7 @@ * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * * Copyright (c) 1999 Bahamut development team. - * Copyright (c) 2011-2017 ircd-hybrid development team + * Copyright (c) 2011-2018 ircd-hybrid development team * * 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 @@ -22,7 +22,7 @@ /*! \file m_svsnick.c * \brief Includes required functions for processing the SVSNICK command. - * \version $Id: m_svsnick.c 8058 2017-03-23 16:13:10Z michael $ + * \version $Id: m_svsnick.c 8338 2018-03-03 22:26:59Z michael $ */ @@ -145,7 +145,7 @@ watch_check_hash(target_p, RPL_LOGON); - fd_note(&target_p->connection->fd, "Nick: %s", target_p->name); + fd_note(target_p->connection->fd, "Nick: %s", target_p->name); return 0; } @@ -175,7 +175,7 @@ struct module module_entry = { - .version = "$Revision: 8058 $", + .version = "$Revision: 8338 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_svspart.c ircd-hybrid-8.2.24+dfsg.1/modules/m_svspart.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_svspart.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_svspart.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2014-2017 ircd-hybrid development team + * Copyright (c) 2014-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_svspart.c * \brief Includes required functions for processing the SVSPART command. - * \version $Id: m_svspart.c 7996 2017-03-14 13:17:39Z michael $ + * \version $Id: m_svspart.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -52,14 +52,13 @@ static int ms_svspart(struct Client *source_p, int parc, char *parv[]) { - struct Client *target_p = NULL; - if (!HasFlag(source_p, FLAGS_SERVICE)) return 0; if (EmptyString(parv[2])) return 0; + struct Client *target_p; if ((target_p = find_person(source_p, parv[1])) == NULL) return 0; @@ -114,7 +113,7 @@ struct module module_entry = { - .version = "$Revision: 7996 $", + .version = "$Revision: 8436 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_svstag.c ircd-hybrid-8.2.24+dfsg.1/modules/m_svstag.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_svstag.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_svstag.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2015-2017 ircd-hybrid development team + * Copyright (c) 2015-2018 ircd-hybrid development team * * 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 @@ -21,11 +21,13 @@ /*! \file m_svstag.c * \brief Includes required functions for processing the SVSTAG command. - * \version $Id: m_svstag.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_svstag.c 8483 2018-04-04 15:07:19Z michael $ */ #include "stdinc.h" +#include "list.h" #include "client.h" +#include "client_svstag.h" #include "ircd.h" #include "send.h" #include "parse.h" @@ -51,11 +53,10 @@ static int ms_svstag(struct Client *source_p, int parc, char *parv[]) { - struct Client *target_p = NULL; - if (!HasFlag(source_p, FLAGS_SERVICE) && !IsServer(source_p)) return 0; + struct Client *target_p; if ((target_p = find_person(source_p, parv[1])) == NULL) return 0; @@ -65,8 +66,8 @@ if (!strncmp(parv[3], "-", 1)) { - /* XXX: possibly allow to remove certain tags by numeric */ - client_clear_svstags(target_p); + /* TBD: possibly allow to remove certain tags by numeric */ + svstag_clear_list(&target_p->svstags); sendto_server(source_p, 0, 0, ":%s SVSTAG %s %ju %s", source_p->id, target_p->id, target_p->tsinfo, parv[3]); @@ -76,8 +77,7 @@ if (parc < 6 || EmptyString(parv[5])) return 0; - client_attach_svstag(target_p, strtoul(parv[3], NULL, 10), - parv[4], parv[5]); + svstag_attach(&target_p->svstags, strtoul(parv[3], NULL, 10), parv[4], parv[5]); sendto_server(source_p, 0, 0, ":%s SVSTAG %s %ju %s %s :%s", source_p->id, @@ -112,7 +112,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8483 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_tburst.c ircd-hybrid-8.2.24+dfsg.1/modules/m_tburst.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_tburst.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_tburst.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2002-2017 ircd-hybrid development team + * Copyright (c) 2002-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_tburst.c * \brief Includes required functions for processing the TBURST command. - * \version $Id: m_tburst.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_tburst.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -30,7 +30,7 @@ #include "send.h" #include "modules.h" #include "hash.h" -#include "server.h" +#include "server_capab.h" #include "conf.h" #include "parse.h" @@ -53,8 +53,6 @@ static int ms_tburst(struct Client *source_p, int parc, char *parv[]) { - struct Channel *chptr = NULL; - int accept_remote = 0; uintmax_t remote_channel_ts = strtoumax(parv[1], NULL, 10); uintmax_t remote_topic_ts = strtoumax(parv[3], NULL, 10); const char *topic = parv[5]; @@ -68,6 +66,7 @@ */ + struct Channel *chptr; if ((chptr = hash_find_channel(parv[2])) == NULL) return 0; @@ -84,6 +83,7 @@ * The TS of the remote channel is equal to ours AND * the TS of the remote topic is newer than ours */ + int accept_remote = 0; if (HasFlag(source_p, FLAGS_SERVICE)) accept_remote = 1; else if (remote_channel_ts < chptr->creationtime) @@ -134,19 +134,19 @@ module_init(void) { mod_add_cmd(&tburst_msgtab); - add_capability("TBURST", CAPAB_TBURST); + capab_add("TBURST", CAPAB_TBURST); } static void module_exit(void) { mod_del_cmd(&tburst_msgtab); - delete_capability("TBURST"); + capab_del("TBURST"); } struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8436 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_time.c ircd-hybrid-8.2.24+dfsg.1/modules/m_time.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_time.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_time.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_time.c * \brief Includes required functions for processing the TIME command. - * \version $Id: m_time.c 7970 2017-03-13 21:55:33Z michael $ + * \version $Id: m_time.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -110,7 +110,7 @@ struct module module_entry = { - .version = "$Revision: 7970 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_topic.c ircd-hybrid-8.2.24+dfsg.1/modules/m_topic.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_topic.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_topic.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_topic.c * \brief Includes required functions for processing the TOPIC command. - * \version $Id: m_topic.c 8043 2017-03-18 16:51:06Z michael $ + * \version $Id: m_topic.c 8430 2018-03-27 18:48:40Z michael $ */ #include "stdinc.h" @@ -157,28 +157,29 @@ return 0; } - if (!IsClient(source_p)) - strlcpy(topic_info, source_p->name, sizeof(topic_info)); - else + if (IsClient(source_p)) snprintf(topic_info, sizeof(topic_info), "%s!%s@%s", source_p->name, source_p->username, source_p->host); + else + strlcpy(topic_info, source_p->name, sizeof(topic_info)); + channel_set_topic(chptr, parv[2], topic_info, CurrentTime, 0); sendto_server(source_p, 0, 0, ":%s TOPIC %s :%s", source_p->id, chptr->name, chptr->topic); - if (!IsClient(source_p)) - sendto_channel_local(NULL, chptr, 0, 0, 0, ":%s TOPIC %s :%s", - (IsHidden(source_p) || ConfigServerHide.hide_servers) ? me.name : source_p->name, - chptr->name, chptr->topic); - - else + if (IsClient(source_p)) sendto_channel_local(NULL, chptr, 0, 0, 0, ":%s!%s@%s TOPIC %s :%s", source_p->name, source_p->username, source_p->host, chptr->name, chptr->topic); + else + sendto_channel_local(NULL, chptr, 0, 0, 0, ":%s TOPIC %s :%s", + (IsHidden(source_p) || ConfigServerHide.hide_servers) ? me.name : source_p->name, + chptr->name, chptr->topic); + return 0; } @@ -209,7 +210,7 @@ struct module module_entry = { - .version = "$Revision: 8043 $", + .version = "$Revision: 8430 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_trace.c ircd-hybrid-8.2.24+dfsg.1/modules/m_trace.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_trace.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_trace.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_trace.c * \brief Includes required functions for processing the TRACE command. - * \version $Id: m_trace.c 8081 2017-03-25 20:37:24Z michael $ + * \version $Id: m_trace.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -121,12 +121,12 @@ } static void -do_trace(struct Client *source_p, const char *arg) +do_trace(struct Client *source_p, const char *name) { int doall = 0; - int wilds = 0, dow = 0; - dlink_node *node; - const char *name; + const dlink_node *node; + const dlink_list *tab[] = { &local_client_list, + &local_server_list, &unknown_list, NULL }; assert(HasUMode(source_p, UMODE_OPER)); @@ -135,76 +135,33 @@ source_p->name, source_p->username, source_p->host, source_p->servptr->name); - if (EmptyString(arg)) - name = me.name; - else - name = arg; - - if (!match(name, me.name)) + if (EmptyString(name)) + doall = 1; + else if (!match(name, me.name)) doall = 1; else if (!MyClient(source_p) && !strcmp(name, me.id)) - { doall = 1; - name = me.name; - } - - wilds = EmptyString(arg) || has_wildcards(name); - dow = wilds || doall; - - if (!dow) /* lets also do this for opers tracing nicks */ - { - const struct Client *target_p = find_person(source_p, name); - if (target_p) - report_this_status(source_p, target_p); - - sendto_one_numeric(source_p, &me, RPL_TRACEEND, me.name); - return; - } - - /* report all direct connections */ - DLINK_FOREACH(node, local_client_list.head) - { - const struct Client *target_p = node->data; - if (!doall && wilds && match(name, target_p->name)) - continue; - if (!dow && irccmp(name, target_p->name)) - continue; - - report_this_status(source_p, target_p); - } - - DLINK_FOREACH(node, local_server_list.head) + for (const dlink_list **list = tab; *list; ++list) { - const struct Client *target_p = node->data; - - if (!doall && wilds && match(name, target_p->name)) - continue; - if (!dow && irccmp(name, target_p->name)) - continue; - - report_this_status(source_p, target_p); - } - - /* This section is to report the unknowns */ - DLINK_FOREACH(node, unknown_list.head) - { - const struct Client *target_p = node->data; - - if (!doall && wilds && match(name, target_p->name)) - continue; - if (!dow && irccmp(name, target_p->name)) - continue; + DLINK_FOREACH(node, (*list)->head) + { + const struct Client *target_p = node->data; - report_this_status(source_p, target_p); + if (doall || match(name, target_p->name) == 0) + report_this_status(source_p, target_p); + } } - DLINK_FOREACH(node, class_get_list()->head) + if (doall) { - const struct ClassItem *class = node->data; + DLINK_FOREACH(node, class_get_list()->head) + { + const struct ClassItem *class = node->data; - if (class->ref_count) - sendto_one_numeric(source_p, &me, RPL_TRACECLASS, class->name, class->ref_count); + if (class->ref_count) + sendto_one_numeric(source_p, &me, RPL_TRACECLASS, class->name, class->ref_count); + } } sendto_one_numeric(source_p, &me, RPL_TRACEEND, me.name); @@ -288,7 +245,7 @@ struct module module_entry = { - .version = "$Revision: 8081 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_undline.c ircd-hybrid-8.2.24+dfsg.1/modules/m_undline.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_undline.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_undline.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_undline.c * \brief Includes required functions for processing the UNDLINE command. - * \version $Id: m_undline.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_undline.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -37,7 +37,7 @@ #include "log.h" #include "misc.h" #include "send.h" -#include "server.h" +#include "server_capab.h" #include "parse.h" #include "modules.h" #include "memory.h" @@ -199,19 +199,19 @@ module_init(void) { mod_add_cmd(&undline_msgtab); - add_capability("UNDLN", CAPAB_UNDLN); + capab_add("UNDLN", CAPAB_UNDLN); } static void module_exit(void) { mod_del_cmd(&undline_msgtab); - delete_capability("UNDLN"); + capab_del("UNDLN"); } struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_unkline.c ircd-hybrid-8.2.24+dfsg.1/modules/m_unkline.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_unkline.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_unkline.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_unkline.c * \brief Includes required functions for processing the UNKLINE command. - * \version $Id: m_unkline.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_unkline.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -37,7 +37,7 @@ #include "log.h" #include "misc.h" #include "send.h" -#include "server.h" +#include "server_capab.h" #include "parse.h" #include "modules.h" #include "memory.h" @@ -205,19 +205,19 @@ module_init(void) { mod_add_cmd(&unkline_msgtab); - add_capability("UNKLN", CAPAB_UNKLN); + capab_add("UNKLN", CAPAB_UNKLN); } static void module_exit(void) { mod_del_cmd(&unkline_msgtab); - delete_capability("UNKLN"); + capab_del("UNKLN"); } struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_unresv.c ircd-hybrid-8.2.24+dfsg.1/modules/m_unresv.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_unresv.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_unresv.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2001-2017 ircd-hybrid development team + * Copyright (c) 2001-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_unresv.c * \brief Includes required functions for processing the UNRESV command. - * \version $Id: m_unresv.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_unresv.c 8492 2018-04-04 22:21:06Z michael $ */ #include "stdinc.h" @@ -36,7 +36,7 @@ #include "numeric.h" #include "log.h" #include "send.h" -#include "server.h" +#include "server_capab.h" #include "parse.h" #include "modules.h" #include "memory.h" @@ -45,7 +45,7 @@ static void resv_remove(struct Client *source_p, const char *mask) { - struct ResvItem *resv = NULL; + struct ResvItem *resv; if ((resv = resv_find(mask, irccmp)) == NULL) { @@ -55,7 +55,7 @@ return; } - if (!resv->in_database) + if (resv->in_database == 0) { if (IsClient(source_p)) sendto_one_notice(source_p, &me, ":The RESV for %s is in ircd.conf and must be removed by hand", @@ -178,7 +178,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8492 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_unxline.c ircd-hybrid-8.2.24+dfsg.1/modules/m_unxline.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_unxline.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_unxline.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2003-2017 ircd-hybrid development team + * Copyright (c) 2003-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_unxline.c * \brief Includes required functions for processing the UNXLINE command. - * \version $Id: m_unxline.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_unxline.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -36,7 +36,7 @@ #include "numeric.h" #include "log.h" #include "send.h" -#include "server.h" +#include "server_capab.h" #include "parse.h" #include "modules.h" #include "memory.h" @@ -185,7 +185,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_user.c ircd-hybrid-8.2.24+dfsg.1/modules/m_user.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_user.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_user.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_user.c * \brief Includes required functions for processing the USER command. - * \version $Id: m_user.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_user.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -57,7 +57,7 @@ if (!HasFlag(source_p, FLAGS_GOTID)) strlcpy(source_p->username, username, sizeof(source_p->username)); - if (!source_p->connection->registration) + if (source_p->connection->registration == 0) register_local_user(source_p); } @@ -125,7 +125,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8436 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_userhost.c ircd-hybrid-8.2.24+dfsg.1/modules/m_userhost.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_userhost.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_userhost.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_userhost.c * \brief Includes required functions for processing the USERHOST command. - * \version $Id: m_userhost.c 8031 2017-03-17 16:16:04Z michael $ + * \version $Id: m_userhost.c 8440 2018-03-29 13:14:41Z michael $ */ #include "stdinc.h" @@ -49,8 +49,8 @@ m_userhost(struct Client *source_p, int parc, char *parv[]) { char buf[IRCD_BUFSIZE]; - char response[NICKLEN * 2 + USERLEN + HOSTLEN + 30]; - char *t = NULL, *p = NULL, *nick = NULL; + char response[NICKLEN + USERLEN + HOSTLEN + 6]; /* +6 for "*=+@ \0" */ + char *t = NULL, *p = NULL; int i = 0; int cur_len; int rl; @@ -58,11 +58,11 @@ cur_len = snprintf(buf, sizeof(buf), numeric_form(RPL_USERHOST), me.name, source_p->name, ""); t = buf + cur_len; - for (nick = strtok_r(parv[1], " ", &p); nick && i++ < 5; - nick = strtok_r(NULL, " ", &p)) + for (const char *name = strtok_r(parv[1], " ", &p); name && i++ < 5; + name = strtok_r(NULL, " ", &p)) { - const struct Client *target_p = find_person(source_p, nick); - if (target_p) + const struct Client *target_p; + if ((target_p = find_person(source_p, name))) { /* * Show real IP address for USERHOST on yourself. @@ -70,7 +70,7 @@ * lookup (USERHOST) to figure out what the clients' local IP * is. Useful for things like NAT, and dynamic dial-up users. */ - if (MyConnect(target_p) && (target_p == source_p)) + if (target_p == source_p) { rl = snprintf(response, sizeof(response), "%s%s=%c%s@%s ", target_p->name, @@ -131,7 +131,7 @@ struct module module_entry = { - .version = "$Revision: 8031 $", + .version = "$Revision: 8440 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_version.c ircd-hybrid-8.2.24+dfsg.1/modules/m_version.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_version.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_version.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_version.c * \brief Includes required functions for processing the VERSION command. - * \version $Id: m_version.c 7970 2017-03-13 21:55:33Z michael $ + * \version $Id: m_version.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -134,7 +134,7 @@ struct module module_entry = { - .version = "$Revision: 7970 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_wallops.c ircd-hybrid-8.2.24+dfsg.1/modules/m_wallops.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_wallops.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_wallops.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_wallops.c * \brief Includes required functions for processing the WALLOPS command. - * \version $Id: m_wallops.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_wallops.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -64,8 +64,7 @@ } sendto_wallops_flags(UMODE_WALLOP, source_p, "%s", message); - sendto_server(source_p, 0, 0, ":%s WALLOPS :%s", - source_p->id, message); + sendto_server(source_p, 0, 0, ":%s WALLOPS :%s", source_p->id, message); return 0; } @@ -89,8 +88,7 @@ return 0; sendto_wallops_flags(UMODE_WALLOP, source_p, "%s", message); - sendto_server(source_p, 0, 0, ":%s WALLOPS :%s", - source_p->id, message); + sendto_server(source_p, 0, 0, ":%s WALLOPS :%s", source_p->id, message); return 0; } @@ -120,7 +118,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8436 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_watch.c ircd-hybrid-8.2.24+dfsg.1/modules/m_watch.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_watch.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_watch.c 2018-04-04 22:33:35.000000000 +0000 @@ -2,7 +2,7 @@ * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * * Copyright (c) 1997 Jukka Santala (Donwulff) - * Copyright (c) 2000-2017 ircd-hybrid development team + * Copyright (c) 2000-2018 ircd-hybrid development team * * 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 @@ -22,7 +22,7 @@ /*! \file m_watch.c * \brief Includes required functions for processing the WATCH command. - * \version $Id: m_watch.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_watch.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -49,7 +49,7 @@ show_watch(struct Client *source_p, const char *name, enum irc_numerics rpl1, enum irc_numerics rpl2) { - const struct Client *target_p = NULL; + const struct Client *target_p; if ((target_p = find_person(source_p, name))) sendto_one_numeric(source_p, &me, rpl1, @@ -73,10 +73,8 @@ static int m_watch(struct Client *source_p, int parc, char *parv[]) { - dlink_node *node = NULL; - char *s = NULL; + dlink_node *node; char *p = NULL; - char *user; char def[2] = "l"; unsigned int list_requested = 0; @@ -86,9 +84,10 @@ if (parc < 2) parv[1] = def; - for (s = strtok_r(parv[1], ", ", &p); s; - s = strtok_r(NULL, ", ", &p)) + for (char *s = strtok_r(parv[1], ", ", &p); s; + s = strtok_r(NULL, ", ", &p)) { + char *user; if ((user = strchr(s, '!'))) *user = '\0'; /* Not used */ @@ -143,7 +142,6 @@ if (*s == 'S' || *s == 's') { char buf[IRCD_BUFSIZE] = ""; - const struct Watch *watch = NULL; unsigned int count = 0; if (list_requested & 0x1) @@ -155,6 +153,7 @@ * Send a list of how many users they have on their WATCH list * and how many WATCH lists they are on. */ + const struct Watch *watch; if ((watch = watch_find_hash(source_p->name))) count = dlink_list_length(&watch->watched_by); @@ -174,8 +173,7 @@ watch = node->data; strlcpy(buf, watch->name, sizeof(buf)); - count = strlen(source_p->name) + strlen(me.name) + 10 + - strlen(buf); + count = strlen(source_p->name) + strlen(me.name) + 10 + strlen(buf); while ((node = node->next)) { @@ -190,7 +188,7 @@ strlcat(buf, " ", sizeof(buf)); strlcat(buf, watch->name, sizeof(buf)); - count += (strlen(watch->name) + 1); + count += strlen(watch->name) + 1; } sendto_one_numeric(source_p, &me, RPL_WATCHLIST, buf); @@ -205,8 +203,6 @@ */ if (*s == 'L' || *s == 'l') { - const struct Client *target_p = NULL; - if (list_requested & 0x2) continue; @@ -215,6 +211,7 @@ DLINK_FOREACH(node, source_p->connection->watches.head) { const struct Watch *watch = node->data; + const struct Client *target_p; if ((target_p = find_person(source_p, watch->name))) sendto_one_numeric(source_p, &me, RPL_NOWON, @@ -267,7 +264,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8436 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_webirc.c ircd-hybrid-8.2.24+dfsg.1/modules/m_webirc.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_webirc.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_webirc.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2012-2017 ircd-hybrid development team + * Copyright (c) 2012-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_webirc.c * \brief Includes required functions for processing the WEBIRC command. - * \version $Id: m_webirc.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: m_webirc.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -114,7 +114,15 @@ freeaddrinfo(res); strlcpy(source_p->sockhost, addr, sizeof(source_p->sockhost)); + + if (source_p->sockhost[0] == ':') + { + memmove(source_p->sockhost + 1, source_p->sockhost, sizeof(source_p->sockhost) - 1); + source_p->sockhost[0] = '0'; + } + strlcpy(source_p->host, host, sizeof(source_p->host)); + strlcpy(source_p->realhost, host, sizeof(source_p->realhost)); /* Check dlines now, k-lines will be checked on registration */ if ((conf = find_dline_conf(&source_p->connection->ip, @@ -159,7 +167,7 @@ struct module module_entry = { - .version = "$Revision: 7925 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_who.c ircd-hybrid-8.2.24+dfsg.1/modules/m_who.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_who.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_who.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_who.c * \brief Includes required functions for processing the WHO command. - * \version $Id: m_who.c 7962 2017-03-13 18:48:59Z michael $ + * \version $Id: m_who.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -133,7 +133,7 @@ who_common_channel(struct Client *source_p, struct Channel *chptr, const char *mask, int server_oper, unsigned int *maxmatches) { - dlink_node *node = NULL; + dlink_node *node; DLINK_FOREACH(node, chptr->members.head) { @@ -153,7 +153,7 @@ { do_who(source_p, target_p, NULL, ""); - if (*maxmatches > 0) + if (*maxmatches) { if (--(*maxmatches) == 0) { @@ -177,7 +177,7 @@ static void who_global(struct Client *source_p, const char *mask, int server_oper) { - dlink_node *node = NULL; + dlink_node *node; unsigned int maxmatches = WHO_MAX_REPLIES; static uintmax_t last_used = 0; @@ -221,7 +221,7 @@ { do_who(source_p, target_p, NULL, ""); - if (maxmatches > 0) + if (maxmatches) { if (--maxmatches == 0) { @@ -248,7 +248,7 @@ do_who_on_channel(struct Client *source_p, struct Channel *chptr, int is_member, int server_oper) { - dlink_node *node = NULL; + dlink_node *node; DLINK_FOREACH(node, chptr->members.head) { @@ -281,10 +281,10 @@ static int m_who(struct Client *source_p, int parc, char *parv[]) { + dlink_node *node; struct Client *target_p = NULL; struct Channel *chptr = NULL; char *mask = parv[1]; - dlink_node *node = NULL; const int server_oper = parc > 2 && *parv[2] == 'o'; /* Show OPERS only */ /* See if mask is there, collapse it or return if not there */ @@ -384,7 +384,7 @@ struct module module_entry = { - .version = "$Revision: 7962 $", + .version = "$Revision: 8436 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_whois.c ircd-hybrid-8.2.24+dfsg.1/modules/m_whois.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_whois.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_whois.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,12 +21,13 @@ /*! \file m_whois.c * \brief Includes required functions for processing the WHOIS command. - * \version $Id: m_whois.c 7970 2017-03-13 21:55:33Z michael $ + * \version $Id: m_whois.c 8483 2018-04-04 15:07:19Z michael $ */ #include "stdinc.h" #include "list.h" #include "client.h" +#include "client_svstag.h" #include "hash.h" #include "channel.h" #include "channel_mode.h" @@ -144,15 +145,26 @@ "server side ignore with the exception of common channels"); } - if (target_p->svstags.head) - svstag = target_p->svstags.head->data; - - if (HasUMode(target_p, UMODE_OPER)) + if (HasUMode(target_p, UMODE_OPER) || HasFlag(target_p, FLAGS_SERVICE)) + { if (!HasUMode(target_p, UMODE_HIDDEN) || HasUMode(source_p, UMODE_OPER)) + { + if (target_p->svstags.head) + svstag = target_p->svstags.head->data; + if (!svstag || svstag->numeric != RPL_WHOISOPERATOR) - sendto_one_numeric(source_p, &me, RPL_WHOISOPERATOR, target_p->name, - HasUMode(target_p, UMODE_ADMIN) ? "is a Server Administrator" : - "is an IRC Operator"); + { + const char *text; + if (HasFlag(target_p, FLAGS_SERVICE)) + text = "is a Network Service"; + else if (HasUMode(target_p, UMODE_ADMIN)) + text = "is a Server Administrator"; + else /* HasUMode(target_p, UMODE_OPER) == true */ + text = "is an IRC Operator"; + sendto_one_numeric(source_p, &me, RPL_WHOISOPERATOR, target_p->name, text); + } + } + } DLINK_FOREACH(node, target_p->svstags.head) { @@ -162,7 +174,7 @@ if (HasUMode(target_p, UMODE_HIDDEN) && !HasUMode(source_p, UMODE_OPER)) continue; - if (!svstag->umodes || HasUMode(source_p, svstag->umodes)) + if (svstag->umodes == 0 || HasUMode(source_p, svstag->umodes)) sendto_one_numeric(source_p, &me, svstag->numeric | SND_EXPLICIT, "%s :%s", target_p->name, svstag->tag); } @@ -186,14 +198,14 @@ if (HasUMode(source_p, UMODE_OPER) || source_p == target_p) sendto_one_numeric(source_p, &me, RPL_WHOISACTUALLY, target_p->name, - target_p->username, target_p->host, + target_p->username, target_p->realhost, target_p->sockhost); if (HasUMode(target_p, UMODE_SSL)) sendto_one_numeric(source_p, &me, RPL_WHOISSECURE, target_p->name); if (!EmptyString(target_p->certfp)) - if (target_p == source_p || HasUMode(source_p, UMODE_OPER)) + if (HasUMode(source_p, UMODE_OPER) || target_p == source_p) sendto_one_numeric(source_p, &me, RPL_WHOISCERTFP, target_p->name, target_p->certfp); if (MyConnect(target_p)) @@ -219,7 +231,7 @@ static void do_whois(struct Client *source_p, const char *name) { - struct Client *target_p = NULL; + struct Client *target_p; if ((target_p = hash_find_client(name)) && IsClient(target_p)) whois_person(source_p, target_p); @@ -339,7 +351,7 @@ struct module module_entry = { - .version = "$Revision: 7970 $", + .version = "$Revision: 8483 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_whowas.c ircd-hybrid-8.2.24+dfsg.1/modules/m_whowas.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_whowas.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_whowas.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_whowas.c * \brief Includes required functions for processing the WHOWAS command. - * \version $Id: m_whowas.c 7988 2017-03-14 00:39:46Z michael $ + * \version $Id: m_whowas.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" @@ -66,7 +66,7 @@ if (HasUMode(source_p, UMODE_OPER)) sendto_one_numeric(source_p, &me, RPL_WHOISACTUALLY, whowas->name, - whowas->username, whowas->hostname, + whowas->username, whowas->realhost, whowas->sockhost); if (strcmp(whowas->account, "*")) @@ -185,7 +185,7 @@ struct module module_entry = { - .version = "$Revision: 7988 $", + .version = "$Revision: 8280 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/modules/m_xline.c ircd-hybrid-8.2.24+dfsg.1/modules/m_xline.c --- ircd-hybrid-8.2.22+dfsg.1/modules/m_xline.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/modules/m_xline.c 2018-04-04 22:33:35.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2003-2017 ircd-hybrid development team + * Copyright (c) 2003-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file m_xline.c * \brief Includes required functions for processing the XLINE command. - * \version $Id: m_xline.c 8025 2017-03-17 15:33:49Z michael $ + * \version $Id: m_xline.c 8430 2018-03-27 18:48:40Z michael $ */ #include "stdinc.h" @@ -37,7 +37,7 @@ #include "log.h" #include "misc.h" #include "send.h" -#include "server.h" +#include "server_capab.h" #include "parse.h" #include "modules.h" #include "memory.h" @@ -82,8 +82,8 @@ } } - struct GecosItem *gecos = gecos_find(mask, match); - if (gecos) + struct GecosItem *gecos; + if ((gecos = gecos_find(mask, match))) { if (IsClient(source_p)) sendto_one_notice(source_p, &me, ":[%s] already X-Lined by [%s] - %s", @@ -240,7 +240,7 @@ struct module module_entry = { - .version = "$Revision: 8025 $", + .version = "$Revision: 8430 $", .modinit = module_init, .modexit = module_exit, }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/NEWS ircd-hybrid-8.2.24+dfsg.1/NEWS --- ircd-hybrid-8.2.22+dfsg.1/NEWS 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/NEWS 2018-04-04 22:33:37.000000000 +0000 @@ -4,6 +4,26 @@ ####################################################################### +-- Noteworthy changes in version 8.2.24 (2018-04-05) +o) Added "STATS s" to show configured pseudo {} blocks +o) Implemented channel mode 'N' which prevents users from changing their + nick while in a channel with that mode set +o) Services clients are now shown with 'is a Network Service' in "WHOIS" + + +-- Noteworthy changes in version 8.2.23 (2018-03-26) +o) irc-operators are now able to see a user's resolved hostname in /whowas, + and /whois even if the user has a fakehost/vhost +o) RPL_WELCOME now does use the rfc2812 style nick!user@host format +o) Removed rudimentary libgeoip support +o) Added --enable-efence switch to allow easy linking with the + electric fence memory debugger library +o) "JOIN 0" is no longer supported +o) Fixed bug where ircd would not remove RPL_WHOISOPERATOR based svstags + when deoppering +o) Fixed 'unknown closes' statistic in "STATS t" showing invalid values sometimes + + -- Noteworthy changes in version 8.2.22 (2017-03-26) o) Implemented channel mode 'L'. Channels with that mode set can make use of an extended ban list size specified with the new 'channel::max_bans_large' @@ -787,4 +807,4 @@ Other files recommended for reading: README, INSTALL -------------------------------------------------------------------------------- -$Id: NEWS 8085 2017-03-26 10:54:53Z michael $ +$Id: NEWS 8490 2018-04-04 22:02:18Z michael $ diff -Nru ircd-hybrid-8.2.22+dfsg.1/README ircd-hybrid-8.2.24+dfsg.1/README --- ircd-hybrid-8.2.22+dfsg.1/README 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/README 2018-04-04 22:33:37.000000000 +0000 @@ -8,7 +8,7 @@ - #ircd-coders on irc.ircd-hybrid.org Recommended IRC services packages: -- Anope 2.0.5 and above, which can be found on http://anope.org +- Anope 2.0.6 and above, which can be found on http://anope.org - HOPM (hybrid open proxy monitor), which can be found on http://ircd-hybrid.org ******************************* IMPORTANT ************************************* @@ -36,8 +36,6 @@ LibreSSL/OpenSSL or GnuTLS library is required - For encrypted operator, server and auth passwords, a working DES, MD5, or SHA library -- For ISO 3166 alpha-2 two letter country code enabled resv {} blocks, a working - libGeoIP is required ******************************************************************************* @@ -53,7 +51,7 @@ FreeBSD 9.1 OpenBSD 5.2, 5.7, 5.8 Arch Linux 2012.12.01 - Debian GNU/Linux 7.6, 8.0, 8.5 + Debian GNU/Linux 7.6, 8.0, 8.5, 9.3 Debian GNU/Hurd 0.3 Raspbian Jessie openSUSE 13.1 @@ -69,4 +67,4 @@ Latest cutting-edge: svn co svn://svn.ircd-hybrid.org/svnroot/ircd-hybrid/trunk Latest stable branch (8.2.x): svn co svn://svn.ircd-hybrid.org/svnroot/ircd-hybrid/branches/8.2.x -$Id: README 7958 2017-03-05 17:57:36Z michael $ +$Id: README 8358 2018-03-04 14:19:00Z michael $ diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/auth.c ircd-hybrid-8.2.24+dfsg.1/src/auth.c --- ircd-hybrid-8.2.22+dfsg.1/src/auth.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/auth.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -20,8 +20,8 @@ */ /*! \file auth.c - * \brief Functions for querying a users ident. - * \version $Id: auth.c 7996 2017-03-14 13:17:39Z michael $ + * \brief Implementation of DNS and ident lookups. + * \version $Id: auth.c 8469 2018-04-03 12:05:14Z michael $ */ /* @@ -50,7 +50,7 @@ #include "s_bsd.h" #include "log.h" #include "send.h" -#include "mempool.h" +#include "memory.h" enum @@ -62,7 +62,8 @@ REPORT_FIN_ID, REPORT_FAIL_ID, REPORT_IP_MISMATCH, - REPORT_HOST_TOOLONG + REPORT_HOST_TOOLONG, + REPORT_HOST_INVALID }; static const char *const HeaderMessages[] = @@ -74,50 +75,58 @@ [REPORT_FIN_ID] = ":*** Got Ident response", [REPORT_FAIL_ID] = ":*** No Ident response", [REPORT_IP_MISMATCH] = ":*** Your forward and reverse DNS do not match, ignoring hostname", - [REPORT_HOST_TOOLONG] = ":*** Your hostname is too long, ignoring hostname" + [REPORT_HOST_TOOLONG] = ":*** Your hostname is too long, ignoring hostname", + [REPORT_HOST_INVALID] = ":*** Your hostname contains illegal characters, ignoring hostname" }; -#define sendheader(c, i) sendto_one_notice((c), &me, "%s", HeaderMessages[(i)]) +#define auth_sendheader(c, i) sendto_one_notice((c), &me, "%s", HeaderMessages[(i)]) static dlink_list auth_list; -static void auth_read_reply(fde_t *, void *); -static void auth_connect_callback(fde_t *, int, void *); -/* - * make_auth_request - allocate a new auth request +/*! \brief Allocate a new auth request. + * \param client The client being looked up. + * \return The newly allocated auth request. */ static struct AuthRequest * -make_auth_request(struct Client *client) +auth_make(struct Client *client) { - struct AuthRequest *const auth = &client->connection->auth; - - memset(auth, 0, sizeof(*auth)); + struct AuthRequest *auth = xcalloc(sizeof(*auth)); auth->client = client; + auth->client->connection->auth = auth; auth->timeout = CurrentTime + CONNECTTIMEOUT; return auth; } -/* - * release_auth_client - release auth client from auth system - * this adds the client into the local client lists so it can be read by - * the main io processing loop +/*! \brief Unlink auth request from auth_list and free memory + * \param auth The allocated auth request to cleanup. */ -void -release_auth_client(struct AuthRequest *auth) +static void +auth_free(struct AuthRequest *auth) { - struct Client *const client = auth->client; + assert(dlinkFind(&auth_list, auth)); + dlinkDelete(&auth->node, &auth_list); + assert(dlinkFind(&auth_list, auth) == NULL); + + xfree(auth); +} + +/*! \brief Release auth client from auth system. This adds the client into the + * local client lists so it can be read by the main io processing loop. + * \param auth Pointer to AuthRequest struct to release + */ +static void +auth_release_client(struct AuthRequest *auth) +{ + struct Client *client = auth->client; if (IsDoingAuth(auth) || IsDNSPending(auth)) return; - if (IsInAuth(auth)) - { - dlinkDelete(&auth->node, &auth_list); - ClearInAuth(auth); - } + auth_free(auth); + client->connection->auth = NULL; /* * When a client has auth'ed, we want to start reading what it sends @@ -125,22 +134,45 @@ * -- adrian */ client->connection->allow_read = MAX_FLOOD; - comm_setflush(&client->connection->fd, 1000, flood_recalc, client); + comm_setflush(client->connection->fd, 1000, flood_recalc, client); client->connection->since = CurrentTime; client->connection->lasttime = CurrentTime; client->connection->firsttime = CurrentTime; - client->flags |= FLAGS_FINISHED_AUTH; + AddFlag(client, FLAGS_FINISHED_AUTH); - read_packet(&client->connection->fd, client); + strlcpy(client->realhost, client->host, sizeof(client->realhost)); + + read_packet(client->connection->fd, client); } -/* - * auth_dns_callback - called when resolver query finishes - * if the query resulted in a successful search, name will contain - * a non-NULL pointer, otherwise name will be NULL. - * set the client on it's way to a connection completion, regardless - * of success of failure +/*! Checks if a hostname is valid and doesn't contain illegal characters + * \param hostname The string to verify + * \return 1 if it is valid, 0 if it isn't + */ +static int +auth_verify_hostname(const char *hostname) +{ + const char *p = hostname; + + assert(p); + + if (EmptyString(p) || *p == '.' || *p == ':') + return 0; + + for (; *p; ++p) + if (!IsHostChar(*p)) + return 0; + + return 1; +} + +/*! \brief Handle a complete DNS lookup. Send the client on its way to a connection + * completion, regardless of success or failure. + * \param vptr The pending struct AuthRequest. + * \param addr IP address being resolved. + * \param name Resolved name, or NULL if lookup failed. + * \param namelength String length of the resolved hostname pointed by 'name' */ static void auth_dns_callback(void *vptr, const struct irc_ssaddr *addr, const char *name, size_t namelength) @@ -149,7 +181,9 @@ ClearDNSPending(auth); - if (!EmptyString(name)) + if (EmptyString(name)) + auth_sendheader(auth->client, REPORT_FAIL_DNS); + else { if (auth->client->connection->ip.ss.ss_family == AF_INET6) { @@ -158,8 +192,8 @@ if (memcmp(&v6->sin6_addr, &v6dns->sin6_addr, sizeof(struct in6_addr))) { - sendheader(auth->client, REPORT_IP_MISMATCH); - release_auth_client(auth); + auth_sendheader(auth->client, REPORT_IP_MISMATCH); + auth_release_client(auth); return; } } @@ -170,203 +204,42 @@ if (v4->sin_addr.s_addr != v4dns->sin_addr.s_addr) { - sendheader(auth->client, REPORT_IP_MISMATCH); - release_auth_client(auth); + auth_sendheader(auth->client, REPORT_IP_MISMATCH); + auth_release_client(auth); return; } } if (namelength > HOSTLEN) - sendheader(auth->client, REPORT_HOST_TOOLONG); + auth_sendheader(auth->client, REPORT_HOST_TOOLONG); + else if (!auth_verify_hostname(name)) + auth_sendheader(auth->client, REPORT_HOST_INVALID); else { strlcpy(auth->client->host, name, sizeof(auth->client->host)); - sendheader(auth->client, REPORT_FIN_DNS); + auth_sendheader(auth->client, REPORT_FIN_DNS); } } - else - sendheader(auth->client, REPORT_FAIL_DNS); - release_auth_client(auth); + auth_release_client(auth); } /* - * authsenderr - handle auth send errors + * auth_error - handle auth send errors */ static void auth_error(struct AuthRequest *auth) { ++ServerStats.is_abad; - fd_close(&auth->fd); + fd_close(auth->fd); + auth->fd = NULL; ClearAuth(auth); - sendheader(auth->client, REPORT_FAIL_ID); + auth_sendheader(auth->client, REPORT_FAIL_ID); - release_auth_client(auth); -} - -/* - * start_auth_query - Flag the client to show that an attempt to - * contact the ident server on - * the client's host. The connect and subsequently the socket are all put - * into 'non-blocking' mode. Should the connect or any later phase of the - * identifing process fail, it is aborted and the user is given a username - * of "unknown". - */ -static void -start_auth_query(struct AuthRequest *auth) -{ - struct irc_ssaddr localaddr; - socklen_t locallen = sizeof(struct irc_ssaddr); - struct sockaddr_in6 *v6; - - /* open a socket of the same type as the client socket */ - if (comm_open(&auth->fd, auth->client->connection->ip.ss.ss_family, - SOCK_STREAM, 0, "ident") == -1) - { - report_error(L_ALL, "creating auth stream socket %s:%s", - client_get_name(auth->client, SHOW_IP), errno); - ++ServerStats.is_abad; - return; - } - - SetDoingAuth(auth); - sendheader(auth->client, REPORT_DO_ID); - - /* - * Get the local address of the client and bind to that to - * make the auth request. - */ - memset(&localaddr, 0, locallen); - getsockname(auth->client->connection->fd.fd, (struct sockaddr*)&localaddr, - &locallen); - - remove_ipv6_mapping(&localaddr); - v6 = (struct sockaddr_in6 *)&localaddr; - v6->sin6_port = htons(0); - localaddr.ss_port = htons(0); - - comm_connect_tcp(&auth->fd, auth->client->sockhost, RFC1413_PORT, - (struct sockaddr *)&localaddr, localaddr.ss_len, auth_connect_callback, - auth, auth->client->connection->ip.ss.ss_family, - GlobalSetOptions.ident_timeout); -} - -/* - * auth_start - * - * inputs - pointer to client to auth - * output - NONE - * side effects - starts auth (identd) and dns queries for a client - */ -void -auth_start(struct Client *client_p) -{ - struct AuthRequest *const auth = make_auth_request(client_p); - - SetInAuth(auth); - dlinkAddTail(auth, &auth->node, &auth_list); - - sendheader(client_p, REPORT_DO_DNS); - - SetDNSPending(auth); - - if (ConfigGeneral.disable_auth == 0) - start_auth_query(auth); - - gethost_byaddr(auth_dns_callback, auth, &client_p->connection->ip); -} - -/* - * timeout_auth_queries - timeout resolver and identd requests - * allow clients through if requests failed - */ -static void -timeout_auth_queries_event(void *notused) -{ - dlink_node *node, *node_next; - - DLINK_FOREACH_SAFE(node, node_next, auth_list.head) - { - struct AuthRequest *auth = node->data; - - if (auth->timeout > CurrentTime) - break; - - if (IsDoingAuth(auth)) - { - ++ServerStats.is_abad; - fd_close(&auth->fd); - ClearAuth(auth); - sendheader(auth->client, REPORT_FAIL_ID); - } - - if (IsDNSPending(auth)) - { - delete_resolver_queries(auth); - ClearDNSPending(auth); - sendheader(auth->client, REPORT_FAIL_DNS); - } - - release_auth_client(auth); - } -} - -/* - * auth_connect_callback() - deal with the result of comm_connect_tcp() - * - * If the connection failed, we simply close the auth fd and report - * a failure. If the connection suceeded send the ident server a query - * giving "theirport , ourport". The write is only attempted *once* so - * it is deemed to be a fail if the entire write doesn't write all the - * data given. This shouldnt be a problem since the socket should have - * a write buffer far greater than this message to store it in should - * problems arise. -avalon - */ -static void -auth_connect_callback(fde_t *fd, int error, void *data) -{ - struct AuthRequest *const auth = data; - struct irc_ssaddr us; - struct irc_ssaddr them; - char authbuf[16]; - ssize_t len = 0; - socklen_t ulen = sizeof(struct irc_ssaddr); - socklen_t tlen = sizeof(struct irc_ssaddr); - uint16_t uport, tport; - struct sockaddr_in6 *v6; - - if (error != COMM_OK) - { - auth_error(auth); - return; - } - - if (getsockname(auth->client->connection->fd.fd, (struct sockaddr *)&us, &ulen) || - getpeername(auth->client->connection->fd.fd, (struct sockaddr *)&them, &tlen)) - { - report_error(L_ALL, "auth get{sock,peer}name error %s:%s", - client_get_name(auth->client, SHOW_IP), errno); - auth_error(auth); - return; - } - - v6 = (struct sockaddr_in6 *)&us; - uport = ntohs(v6->sin6_port); - v6 = (struct sockaddr_in6 *)&them; - tport = ntohs(v6->sin6_port); - - len = snprintf(authbuf, sizeof(authbuf), "%u, %u\r\n", tport, uport); - - if (send(fd->fd, authbuf, len, 0) != len) - { - auth_error(auth); - return; - } - - comm_setselect(fd, COMM_SELECT_READ, auth_read_reply, auth, 0); + auth_release_client(auth); } /** Enum used to index ident reply fields in a human-readable way. */ @@ -384,7 +257,7 @@ * \return The userid, or NULL on parse failure. */ static const char * -check_ident_reply(char *const reply) +auth_check_ident_reply(char *const reply) { char *token = NULL, *end = NULL; char *vector[USERID_TOKEN_COUNT]; @@ -459,44 +332,174 @@ return token; } -/* - * auth_read_reply - read the reply (if any) from the ident server - * we connected to. - * We only give it one shot, if the reply isn't good the first time - * fail the authentication entirely. --Bleep +/*! \brief Read the reply (if any) from the ident server we connected to. We + * only give it one shot, if the reply isn't good the first time fail + * the authentication entirely. --Bleep + * \param F The socket/fd to read from. + * \param data The request to read. */ static void -auth_read_reply(fde_t *fd, void *data) +auth_read_reply(fde_t *F, void *data) { struct AuthRequest *const auth = data; const char *username = NULL; ssize_t len = 0; char buf[RFC1413_BUFSIZ + 1]; - if ((len = recv(fd->fd, buf, RFC1413_BUFSIZ, 0)) > 0) + assert(auth->fd == F); + + if ((len = recv(auth->fd->fd, buf, RFC1413_BUFSIZ, 0)) > 0) { buf[len] = '\0'; - username = check_ident_reply(buf); + username = auth_check_ident_reply(buf); } - fd_close(fd); + fd_close(auth->fd); + auth->fd = NULL; ClearAuth(auth); if (EmptyString(username)) { - sendheader(auth->client, REPORT_FAIL_ID); + auth_sendheader(auth->client, REPORT_FAIL_ID); ++ServerStats.is_abad; } else { strlcpy(auth->client->username, username, sizeof(auth->client->username)); - sendheader(auth->client, REPORT_FIN_ID); + auth_sendheader(auth->client, REPORT_FIN_ID); ++ServerStats.is_asuc; AddFlag(auth->client, FLAGS_GOTID); } - release_auth_client(auth); + auth_release_client(auth); +} + +/* + * auth_connect_callback() - deal with the result of comm_connect_tcp() + * + * If the connection failed, we simply close the auth fd and report + * a failure. If the connection suceeded send the ident server a query + * giving "theirport , ourport". The write is only attempted *once* so + * it is deemed to be a fail if the entire write doesn't write all the + * data given. This shouldnt be a problem since the socket should have + * a write buffer far greater than this message to store it in should + * problems arise. -avalon + */ +static void +auth_connect_callback(fde_t *F, int error, void *data) +{ + struct AuthRequest *const auth = data; + struct irc_ssaddr us; + struct irc_ssaddr them; + char authbuf[16]; + ssize_t len = 0; + socklen_t ulen = sizeof(struct irc_ssaddr); + socklen_t tlen = sizeof(struct irc_ssaddr); + uint16_t uport, tport; + struct sockaddr_in6 *v6; + + if (error != COMM_OK) + { + auth_error(auth); + return; + } + + assert(auth->fd == F); + + if (getsockname(auth->client->connection->fd->fd, (struct sockaddr *)&us, &ulen) || + getpeername(auth->client->connection->fd->fd, (struct sockaddr *)&them, &tlen)) + { + report_error(L_ALL, "auth get{sock,peer}name error %s:%s", + client_get_name(auth->client, SHOW_IP), errno); + auth_error(auth); + return; + } + + v6 = (struct sockaddr_in6 *)&us; + uport = ntohs(v6->sin6_port); + v6 = (struct sockaddr_in6 *)&them; + tport = ntohs(v6->sin6_port); + + len = snprintf(authbuf, sizeof(authbuf), "%u, %u\r\n", tport, uport); + + if (send(F->fd, authbuf, len, 0) != len) + { + auth_error(auth); + return; + } + + comm_setselect(F, COMM_SELECT_READ, auth_read_reply, auth, 0); +} + +/*! \brief Flag the client to show an attempt to contact the ident server on + * the client's host. Should the connect or any later phase of the + * identifying process fail, it is aborted and the user is given a + * username of "unknown". + * \param auth The request for which to start the ident lookup. + */ +static void +auth_start_query(struct AuthRequest *auth) +{ + struct irc_ssaddr localaddr; + socklen_t locallen = sizeof(struct irc_ssaddr); + struct sockaddr_in6 *v6; + + /* Open a socket of the same type as the client socket */ + int fd = comm_socket(auth->client->connection->ip.ss.ss_family, SOCK_STREAM, 0); + if (fd == -1) + { + report_error(L_ALL, "creating auth stream socket %s:%s", + client_get_name(auth->client, SHOW_IP), errno); + ++ServerStats.is_abad; + return; + } + + auth->fd = fd_open(fd, 1, "ident"); + + SetDoingAuth(auth); + auth_sendheader(auth->client, REPORT_DO_ID); + + /* + * Get the local address of the client and bind to that to + * make the auth request. + */ + memset(&localaddr, 0, locallen); + getsockname(auth->client->connection->fd->fd, (struct sockaddr *)&localaddr, &locallen); + + remove_ipv6_mapping(&localaddr); + v6 = (struct sockaddr_in6 *)&localaddr; + v6->sin6_port = htons(0); + localaddr.ss_port = htons(0); + + comm_connect_tcp(auth->fd, auth->client->sockhost, RFC1413_PORT, + (struct sockaddr *)&localaddr, localaddr.ss_len, auth_connect_callback, + auth, auth->client->connection->ip.ss.ss_family, + GlobalSetOptions.ident_timeout); +} + +/* + * auth_start + * + * inputs - pointer to client to auth + * output - NONE + * side effects - starts auth (identd) and dns queries for a client + */ +void +auth_start(struct Client *client_p) +{ + struct AuthRequest *auth = auth_make(client_p); + + dlinkAddTail(auth, &auth->node, &auth_list); + + auth_sendheader(client_p, REPORT_DO_DNS); + + SetDNSPending(auth); + + if (ConfigGeneral.disable_auth == 0) + auth_start_query(auth); + + gethost_byaddr(auth_dns_callback, auth, &client_p->connection->ip); } /* @@ -505,16 +508,60 @@ void auth_delete(struct AuthRequest *auth) { + if (IsDoingAuth(auth)) + { + fd_close(auth->fd); + auth->fd = NULL; + + ClearAuth(auth); + } + if (IsDNSPending(auth)) + { delete_resolver_queries(auth); + ClearDNSPending(auth); + } - if (IsDoingAuth(auth)) - fd_close(&auth->fd); + auth_free(auth); +} - if (IsInAuth(auth)) +/* + * auth_timeout_queries - timeout resolver and identd requests + * allow clients through if requests failed + */ +static void +auth_timeout_queries(void *notused) +{ + dlink_node *node, *node_next; + + DLINK_FOREACH_SAFE(node, node_next, auth_list.head) { - dlinkDelete(&auth->node, &auth_list); - ClearInAuth(auth); + struct AuthRequest *auth = node->data; + + if (auth->timeout > CurrentTime) + break; + + if (IsDoingAuth(auth)) + { + ++ServerStats.is_abad; + + fd_close(auth->fd); + auth->fd = NULL; + + ClearAuth(auth); + + auth_sendheader(auth->client, REPORT_FAIL_ID); + } + + if (IsDNSPending(auth)) + { + delete_resolver_queries(auth); + ClearDNSPending(auth); + + auth_sendheader(auth->client, REPORT_FAIL_DNS); + } + + auth_release_client(auth); } } @@ -527,8 +574,8 @@ { static struct event timeout_auth_queries = { - .name = "timeout_auth_queries_event", - .handler = timeout_auth_queries_event, + .name = "auth_timeout_queries", + .handler = auth_timeout_queries, .when = 1 }; diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/channel.c ircd-hybrid-8.2.24+dfsg.1/src/channel.c --- ircd-hybrid-8.2.22+dfsg.1/src/channel.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/channel.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file channel.c * \brief Responsible for managing channels, members, bans and topics - * \version $Id: channel.c 8058 2017-03-23 16:13:10Z michael $ + * \version $Id: channel.c 8446 2018-03-30 11:36:06Z michael $ */ #include "stdinc.h" @@ -40,25 +40,20 @@ #include "send.h" #include "event.h" #include "memory.h" -#include "mempool.h" #include "misc.h" -dlink_list channel_list; -mp_pool_t *ban_pool; /*! \todo ban_pool shouldn't be a global var */ +/** Doubly linked list containing a list of all channels. */ +static dlink_list channel_list; -static mp_pool_t *member_pool, *channel_pool, *invite_pool; - -/*! \brief Initializes the channel blockheap, adds known channel CAPAB +/*! \brief Returns the channel_list as constant + * \return channel_list */ -void -channel_init(void) +const dlink_list * +channel_get_list(void) { - invite_pool = mp_pool_new(sizeof(struct Invite), MP_CHUNK_SIZE_INVITE); - channel_pool = mp_pool_new(sizeof(struct Channel), MP_CHUNK_SIZE_CHANNEL); - ban_pool = mp_pool_new(sizeof(struct Ban), MP_CHUNK_SIZE_BAN); - member_pool = mp_pool_new(sizeof(struct Membership), MP_CHUNK_SIZE_MEMBER); + return &channel_list; } /*! \brief Adds a user to a channel by adding another link to the @@ -105,7 +100,7 @@ chptr->last_join_time = CurrentTime; } - struct Membership *member = mp_pool_get(member_pool); + struct Membership *member = xcalloc(sizeof(*member)); member->client_p = client_p; member->chptr = chptr; member->flags = flags; @@ -135,7 +130,7 @@ dlinkDelete(&member->usernode, &client_p->channel); - mp_pool_release(member); + xfree(member); if (chptr->members.head == NULL) channel_free(chptr); @@ -199,7 +194,7 @@ /* Should always be non-NULL unless we have a kind of persistent channels */ if (chptr->members.head) - t--; /* Take the space out */ + --t; /* Take the space out */ *t = '\0'; sendto_one(client_p, "%s", buf); } @@ -220,7 +215,7 @@ int tlen, mlen, cur_len; char *pp = pbuf; - if (!dlink_list_length(list)) + if (dlink_list_length(list) == 0) return; mlen = snprintf(mbuf, sizeof(mbuf), ":%s BMASK %ju %s %c :", me.id, @@ -258,7 +253,7 @@ * \param chptr Pointer to channel pointer */ void -channel_send_modes(struct Client *client_p, struct Channel *chptr) +channel_send_modes(struct Client *client_p, const struct Channel *chptr) { char modebuf[MODEBUFLEN] = ""; char parabuf[MODEBUFLEN] = ""; @@ -306,7 +301,7 @@ remove_ban(struct Ban *ban, dlink_list *list) { dlinkDelete(&ban->node, list); - mp_pool_release(ban); + xfree(ban); } /* channel_free_mask_list() @@ -335,7 +330,7 @@ { assert(!EmptyString(name)); - struct Channel *chptr = mp_pool_get(channel_pool); + struct Channel *chptr = xcalloc(sizeof(*chptr)); /* Doesn't hurt to set it here */ chptr->creationtime = CurrentTime; chptr->last_join_time = CurrentTime; @@ -367,7 +362,7 @@ dlinkDelete(&chptr->node, &channel_list); hash_del_channel(chptr); - mp_pool_release(chptr); + xfree(chptr); } /*! @@ -391,8 +386,7 @@ * (don't want it with /names with no params) */ void -channel_member_names(struct Client *client_p, struct Channel *chptr, - int show_eon) +channel_member_names(struct Client *client_p, struct Channel *chptr, int show_eon) { dlink_node *node; char buf[IRCD_BUFSIZE + 1] = ""; @@ -418,18 +412,13 @@ if (HasUMode(member->client_p, UMODE_INVISIBLE) && !is_member) continue; - if (!uhnames) - tlen = strlen(member->client_p->name) + 1; /* +1 for space */ - else + if (uhnames) tlen = strlen(member->client_p->name) + strlen(member->client_p->username) + strlen(member->client_p->host) + 3; /* +3 for ! + @ + space */ - - if (!multi_prefix) - { - if (member->flags & (CHFL_CHANOP | CHFL_HALFOP | CHFL_VOICE)) - ++tlen; - } else + tlen = strlen(member->client_p->name) + 1; /* +1 for space */ + + if (multi_prefix) { if (member->flags & CHFL_CHANOP) ++tlen; @@ -438,6 +427,11 @@ if (member->flags & CHFL_VOICE) ++tlen; } + else + { + if (member->flags & (CHFL_CHANOP | CHFL_HALFOP | CHFL_VOICE)) + ++tlen; + } if (t + tlen - buf > IRCD_BUFSIZE - 2) { @@ -446,13 +440,13 @@ t = start; } - if (!uhnames) - t += sprintf(t, "%s%s ", get_member_status(member, multi_prefix), - member->client_p->name); - else + if (uhnames) t += sprintf(t, "%s%s!%s@%s ", get_member_status(member, multi_prefix), member->client_p->name, member->client_p->username, member->client_p->host); + else + t += sprintf(t, "%s%s ", get_member_status(member, multi_prefix), + member->client_p->name); } if (tlen) @@ -499,11 +493,11 @@ void add_invite(struct Channel *chptr, struct Client *client_p) { - struct Invite *invite = find_invite(chptr, client_p); - if (invite) + struct Invite *invite; + if ((invite = find_invite(chptr, client_p))) del_invite(invite); - invite = mp_pool_get(invite_pool); + invite = xcalloc(sizeof(*invite)); invite->client_p = client_p; invite->chptr = chptr; invite->when = CurrentTime; @@ -531,7 +525,7 @@ dlinkDelete(&invite->chan_node, &invite->chptr->invites); /* Release memory pointed to by 'invite' */ - mp_pool_release(invite); + xfree(invite); } /*! \brief Removes and frees all Invite blocks from a list @@ -682,13 +676,14 @@ } struct Membership * -find_channel_link(struct Client *client_p, struct Channel *chptr) +find_channel_link(const struct Client *client_p, const struct Channel *chptr) { dlink_node *node; if (!IsClient(client_p)) return NULL; + /* Take the shortest of the two lists */ if (dlink_list_length(&chptr->members) < dlink_list_length(&client_p->channel)) { DLINK_FOREACH(node, chptr->members.head) @@ -817,12 +812,8 @@ void check_spambot_warning(struct Client *client_p, const char *name) { - int t_delta = 0; - int decrement_count = 0; - - if ((GlobalSetOptions.spam_num && - (client_p->connection->join_leave_count >= - GlobalSetOptions.spam_num))) + if (GlobalSetOptions.spam_num && + (client_p->connection->join_leave_count >= GlobalSetOptions.spam_num)) { if (client_p->connection->oper_warn_count_down > 0) client_p->connection->oper_warn_count_down--; @@ -847,11 +838,10 @@ } else { - if ((t_delta = (CurrentTime - client_p->connection->last_leave_time)) > - JOIN_LEAVE_COUNT_EXPIRE_TIME) + int t_delta = CurrentTime - client_p->connection->last_leave_time; + if (t_delta > JOIN_LEAVE_COUNT_EXPIRE_TIME) { - decrement_count = (t_delta / JOIN_LEAVE_COUNT_EXPIRE_TIME); - + int decrement_count = (t_delta / JOIN_LEAVE_COUNT_EXPIRE_TIME); if (decrement_count > client_p->connection->join_leave_count) client_p->connection->join_leave_count = 0; else @@ -891,80 +881,16 @@ chptr->topic_time = topicts; } -/* do_join_0() - * - * inputs - pointer to client doing join 0 - * output - NONE - * side effects - Use has decided to join 0. This is legacy - * from the days when channels were numbers not names. *sigh* - * There is a bunch of evilness necessary here due to - * anti spambot code. - */ -void -channel_do_join_0(struct Client *client_p) -{ - if (client_p->channel.head) - if (MyConnect(client_p) && !HasUMode(client_p, UMODE_OPER)) - check_spambot_warning(client_p, NULL); - - while (client_p->channel.head) - { - struct Membership *member = client_p->channel.head->data; - - sendto_server(client_p, 0, 0, ":%s PART %s", - client_p->id, member->chptr->name); - sendto_channel_local(NULL, member->chptr, 0, 0, 0, ":%s!%s@%s PART %s", - client_p->name, client_p->username, - client_p->host, member->chptr->name); - - remove_user_from_channel(member); - } -} - -static char * -channel_find_last0(struct Client *client_p, char *chanlist) -{ - int join0 = 0; - - for (char *p = chanlist; *p; ++p) /* Find last "JOIN 0" */ - { - if (*p == '0' && (*(p + 1) == ',' || *(p + 1) == '\0')) - { - if (*(p + 1) == ',') - ++p; - - chanlist = p + 1; - join0 = 1; - } - else - { - while (*p != ',' && *p != '\0') /* Skip past channel name */ - ++p; - - if (*p == '\0') /* Hit the end */ - break; - } - } - - if (join0) - channel_do_join_0(client_p); - - return chanlist; -} - void -channel_do_join(struct Client *client_p, char *channel, char *key_list) +channel_do_join(struct Client *client_p, char *chan_list, char *key_list) { char *p = NULL; - char *chan_list = NULL; const struct ResvItem *resv = NULL; - const struct ClassItem *const class = get_class_ptr(&client_p->connection->confs); + const struct ClassItem *const class = class_get_ptr(&client_p->connection->confs); unsigned int flags = 0; assert(IsClient(client_p)); - chan_list = channel_find_last0(client_p, channel); - for (const char *name = strtok_r(chan_list, ",", &p); name; name = strtok_r(NULL, ",", &p)) { @@ -978,7 +904,7 @@ if (key && *key == '\0') key = NULL; - if (!channel_check_name(name, 1)) + if (channel_check_name(name, 1) == 0) { sendto_one_numeric(client_p, &me, ERR_BADCHANNAME, name); continue; @@ -1002,8 +928,8 @@ break; } - struct Channel *chptr = hash_find_channel(name); - if (chptr) + struct Channel *chptr; + if ((chptr = hash_find_channel(name))) { if (IsMember(client_p, chptr)) continue; @@ -1020,7 +946,7 @@ * This should never be the case unless there is some sort of * persistant channels. */ - if (!dlink_list_length(&chptr->members)) + if (dlink_list_length(&chptr->members) == 0) flags = CHFL_CHANOP; else flags = 0; @@ -1087,8 +1013,8 @@ client_p->host, client_p->away); } - struct Invite *invite = find_invite(chptr, client_p); - if (invite) + struct Invite *invite; + if ((invite = find_invite(chptr, client_p))) del_invite(invite); if (chptr->topic[0]) diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/channel_mode.c ircd-hybrid-8.2.24+dfsg.1/src/channel_mode.c --- ircd-hybrid-8.2.22+dfsg.1/src/channel_mode.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/channel_mode.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file channel_mode.c * \brief Controls modes on channels. - * \version $Id: channel_mode.c 8050 2017-03-19 11:25:27Z michael $ + * \version $Id: channel_mode.c 8467 2018-04-03 11:21:48Z michael $ */ #include "stdinc.h" @@ -37,7 +37,6 @@ #include "server.h" #include "send.h" #include "memory.h" -#include "mempool.h" #include "parse.h" @@ -46,28 +45,6 @@ static unsigned int mode_count; static unsigned int mode_limit; /* number of modes set other than simple */ static unsigned int simple_modes_mask; /* bit mask of simple modes already set */ -extern mp_pool_t *ban_pool; - -const struct mode_letter chan_modes[] = -{ - { MODE_NOCTRL, 'c' }, - { MODE_INVITEONLY, 'i' }, - { MODE_MODERATED, 'm' }, - { MODE_NOPRIVMSGS, 'n' }, - { MODE_PRIVATE, 'p' }, - { MODE_REGISTERED, 'r' }, - { MODE_SECRET, 's' }, - { MODE_TOPICLIMIT, 't' }, - { MODE_HIDEBMASKS, 'u' }, - { MODE_NOCTCP, 'C' }, - { MODE_EXTLIMIT, 'L' }, - { MODE_MODREG, 'M' }, - { MODE_OPERONLY, 'O' }, - { MODE_REGONLY, 'R' }, - { MODE_SSLONLY, 'S' }, - { MODE_NONOTICE, 'T' }, - { 0, '\0' } -}; /* check_string() @@ -178,7 +155,7 @@ return 0; } - struct Ban *ban = mp_pool_get(ban_pool); + struct Ban *ban = xcalloc(sizeof(*ban)); ban->when = CurrentTime; ban->len = len - 2; /* -2 for ! + @ */ ban->type = parse_netmask(host, &ban->addr, &ban->bits); @@ -279,13 +256,13 @@ * chptr onto buffer mbuf with the parameters in pbuf. */ void -channel_modes(struct Channel *chptr, struct Client *client_p, char *mbuf, char *pbuf) +channel_modes(const struct Channel *chptr, const struct Client *client_p, char *mbuf, char *pbuf) { *mbuf++ = '+'; *pbuf = '\0'; - for (const struct mode_letter *tab = chan_modes; tab->mode; ++tab) - if (HasCMode(chptr, tab->mode)) + for (const struct chan_mode *tab = cmode_tab; tab->letter; ++tab) + if (tab->mode && HasCMode(chptr, tab->mode)) *mbuf++ = tab->letter; if (chptr->mode.limit) @@ -350,7 +327,7 @@ } /* - * Bitmasks for various error returns that set_channel_mode should only return + * Bitmasks for various error returns that channel_mode_set should only return * once per call -orabidoo */ enum @@ -367,8 +344,8 @@ /* Mode functions handle mode changes for a particular mode... */ static void -chm_nosuch(struct Client *source_p, struct Channel *chptr, int parc, int *parn, - char **parv, int *errors, int alev, int dir, char c, unsigned int d) +chm_nosuch(struct Client *source_p, struct Channel *chptr, int parc, int *parn, char **parv, + int *errors, int alev, int dir, const char c, const struct chan_mode *mode) { if (*errors & SM_ERR_UNKNOWN) return; @@ -378,99 +355,35 @@ } static void -chm_simple(struct Client *source_p, struct Channel *chptr, int parc, int *parn, - char **parv, int *errors, int alev, int dir, char c, unsigned int d) +chm_simple(struct Client *source_p, struct Channel *chptr, int parc, int *parn, char **parv, + int *errors, int alev, int dir, const char c, const struct chan_mode *mode) { - if (alev < CHACCESS_HALFOP) - { - if (!(*errors & SM_ERR_NOOPS)) - sendto_one_numeric(source_p, &me, - alev == CHACCESS_NOTONCHAN ? ERR_NOTONCHANNEL : - ERR_CHANOPRIVSNEEDED, chptr->name); - - *errors |= SM_ERR_NOOPS; - return; - } - - /* If have already dealt with this simple mode, ignore it */ - if (simple_modes_mask & d) - return; - - simple_modes_mask |= d; - - /* setting + */ - if (dir == MODE_ADD) /* && !(chptr->mode.mode & d)) */ + if (mode->only_opers) { - AddCMode(chptr, d); - - mode_changes[mode_count].letter = c; - mode_changes[mode_count].arg = NULL; - mode_changes[mode_count].id = NULL; - mode_changes[mode_count].flags = 0; - mode_changes[mode_count++].dir = dir; - } - else if (dir == MODE_DEL) /* && (chptr->mode.mode & d)) */ - { - /* setting - */ - DelCMode(chptr, d); - - mode_changes[mode_count].letter = c; - mode_changes[mode_count].arg = NULL; - mode_changes[mode_count].id = NULL; - mode_changes[mode_count].flags = 0; - mode_changes[mode_count++].dir = dir; - } -} - -static void -chm_registered(struct Client *source_p, struct Channel *chptr, int parc, int *parn, - char **parv, int *errors, int alev, int dir, char c, unsigned int d) -{ - if (!IsServer(source_p) && !HasFlag(source_p, FLAGS_SERVICE)) - { - if (!(*errors & SM_ERR_ONLYSERVER)) - sendto_one_numeric(source_p, &me, - alev == CHACCESS_NOTONCHAN ? ERR_NOTONCHANNEL : - ERR_ONLYSERVERSCANCHANGE, chptr->name); + if (MyClient(source_p) && !HasUMode(source_p, UMODE_OPER)) + { + if (!(*errors & SM_ERR_NOTOPER)) + sendto_one_numeric(source_p, &me, ERR_NOPRIVILEGES); - *errors |= SM_ERR_ONLYSERVER; - return; + *errors |= SM_ERR_NOTOPER; + return; + } } - /* If have already dealt with this simple mode, ignore it */ - if (simple_modes_mask & d) - return; - - simple_modes_mask |= d; - - /* setting + */ - if (dir == MODE_ADD) /* && !(chptr->mode.mode & d)) */ - { - AddCMode(chptr, d); - - mode_changes[mode_count].letter = c; - mode_changes[mode_count].arg = NULL; - mode_changes[mode_count].id = NULL; - mode_changes[mode_count].flags = 0; - mode_changes[mode_count++].dir = dir; - } - else if (dir == MODE_DEL) /* && (chptr->mode.mode & d)) */ + if (mode->only_servers) { - /* setting - */ - DelCMode(chptr, d); + if (!IsServer(source_p) && !HasFlag(source_p, FLAGS_SERVICE)) + { + if (!(*errors & SM_ERR_ONLYSERVER)) + sendto_one_numeric(source_p, &me, + alev == CHACCESS_NOTONCHAN ? ERR_NOTONCHANNEL : + ERR_ONLYSERVERSCANCHANGE, chptr->name); - mode_changes[mode_count].letter = c; - mode_changes[mode_count].arg = NULL; - mode_changes[mode_count].id = NULL; - mode_changes[mode_count].flags = 0; - mode_changes[mode_count++].dir = dir; + *errors |= SM_ERR_ONLYSERVER; + return; + } } -} -static void -chm_simple_oper(struct Client *source_p, struct Channel *chptr, int parc, int *parn, - char **parv, int *errors, int alev, int dir, char c, unsigned int d) -{ if (alev < CHACCESS_HALFOP) { if (!(*errors & SM_ERR_NOOPS)) @@ -482,47 +395,37 @@ return; } - if (MyClient(source_p) && !HasUMode(source_p, UMODE_OPER)) - { - if (!(*errors & SM_ERR_NOTOPER)) - sendto_one_numeric(source_p, &me, ERR_NOPRIVILEGES); - - *errors |= SM_ERR_NOTOPER; - return; - } - /* If have already dealt with this simple mode, ignore it */ - if (simple_modes_mask & d) + if (simple_modes_mask & mode->mode) return; - simple_modes_mask |= d; + simple_modes_mask |= mode->mode; - if (dir == MODE_ADD) /* && !(chptr->mode.mode & d)) */ + if (dir == MODE_ADD) /* setting + */ { - AddCMode(chptr, d); + if (MyClient(source_p) && HasCMode(chptr, mode->mode)) + return; - mode_changes[mode_count].letter = c; - mode_changes[mode_count].arg = NULL; - mode_changes[mode_count].id = NULL; - mode_changes[mode_count].flags = 0; - mode_changes[mode_count++].dir = dir; + AddCMode(chptr, mode->mode); } - else if (dir == MODE_DEL) /* && (chptr->mode.mode & d)) */ + else if (dir == MODE_DEL) /* setting - */ { - /* setting - */ - DelCMode(chptr, d); + if (MyClient(source_p) && !HasCMode(chptr, mode->mode)) + return; - mode_changes[mode_count].letter = c; - mode_changes[mode_count].arg = NULL; - mode_changes[mode_count].id = NULL; - mode_changes[mode_count].flags = 0; - mode_changes[mode_count++].dir = dir; + DelCMode(chptr, mode->mode); } + + mode_changes[mode_count].letter = mode->letter; + mode_changes[mode_count].arg = NULL; + mode_changes[mode_count].id = NULL; + mode_changes[mode_count].flags = 0; + mode_changes[mode_count++].dir = dir; } static void -chm_ban(struct Client *source_p, struct Channel *chptr, int parc, int *parn, - char **parv, int *errors, int alev, int dir, char c, unsigned int d) +chm_ban(struct Client *source_p, struct Channel *chptr, int parc, int *parn, char **parv, + int *errors, int alev, int dir, const char c, const struct chan_mode *mode) { if (dir == MODE_QUERY || parc <= *parn) { @@ -568,21 +471,18 @@ if (*mask == ':' || (!MyConnect(source_p) && strchr(mask, ' '))) return; - switch (dir) + if (dir == MODE_ADD) /* setting + */ { - case MODE_ADD: - if (!add_id(source_p, chptr, mask, CHFL_BAN)) - return; - break; - case MODE_DEL: - if (!del_id(chptr, mask, CHFL_BAN)) - return; - break; - default: - assert(0); + if (add_id(source_p, chptr, mask, CHFL_BAN) == 0) + return; + } + else if (dir == MODE_DEL) /* setting - */ + { + if (del_id(chptr, mask, CHFL_BAN) == 0) + return; } - mode_changes[mode_count].letter = c; + mode_changes[mode_count].letter = mode->letter; mode_changes[mode_count].arg = mask; /* At this point 'mask' is no longer than NICKLEN + USERLEN + HOSTLEN + 3 */ mode_changes[mode_count].id = NULL; if (HasCMode(chptr, MODE_HIDEBMASKS)) @@ -593,8 +493,8 @@ } static void -chm_except(struct Client *source_p, struct Channel *chptr, int parc, int *parn, - char **parv, int *errors, int alev, int dir, char c, unsigned int d) +chm_except(struct Client *source_p, struct Channel *chptr, int parc, int *parn, char **parv, + int *errors, int alev, int dir, const char c, const struct chan_mode *mode) { if (dir == MODE_QUERY || parc <= *parn) { @@ -640,21 +540,18 @@ if (*mask == ':' || (!MyConnect(source_p) && strchr(mask, ' '))) return; - switch (dir) + if (dir == MODE_ADD) /* setting + */ { - case MODE_ADD: - if (!add_id(source_p, chptr, mask, CHFL_EXCEPTION)) - return; - break; - case MODE_DEL: - if (!del_id(chptr, mask, CHFL_EXCEPTION)) - return; - break; - default: - assert(0); + if (add_id(source_p, chptr, mask, CHFL_EXCEPTION) == 0) + return; + } + else if (dir == MODE_DEL) /* setting - */ + { + if (del_id(chptr, mask, CHFL_EXCEPTION) == 0) + return; } - mode_changes[mode_count].letter = c; + mode_changes[mode_count].letter = mode->letter; mode_changes[mode_count].arg = mask; /* At this point 'mask' is no longer than NICKLEN + USERLEN + HOSTLEN + 3 */ mode_changes[mode_count].id = NULL; if (HasCMode(chptr, MODE_HIDEBMASKS)) @@ -665,8 +562,8 @@ } static void -chm_invex(struct Client *source_p, struct Channel *chptr, int parc, int *parn, - char **parv, int *errors, int alev, int dir, char c, unsigned int d) +chm_invex(struct Client *source_p, struct Channel *chptr, int parc, int *parn, char **parv, + int *errors, int alev, int dir, const char c, const struct chan_mode *mode) { if (dir == MODE_QUERY || parc <= *parn) { @@ -712,21 +609,18 @@ if (*mask == ':' || (!MyConnect(source_p) && strchr(mask, ' '))) return; - switch (dir) + if (dir == MODE_ADD) /* setting + */ { - case MODE_ADD: - if (!add_id(source_p, chptr, mask, CHFL_INVEX)) - return; - break; - case MODE_DEL: - if (!del_id(chptr, mask, CHFL_INVEX)) - return; - break; - default: - assert(0); + if (add_id(source_p, chptr, mask, CHFL_INVEX) == 0) + return; + } + else if (dir == MODE_DEL) /* setting - */ + { + if (del_id(chptr, mask, CHFL_INVEX) == 0) + return; } - mode_changes[mode_count].letter = c; + mode_changes[mode_count].letter = mode->letter; mode_changes[mode_count].arg = mask; /* At this point 'mask' is no longer than NICKLEN + USERLEN + HOSTLEN + 3 */ mode_changes[mode_count].id = NULL; if (HasCMode(chptr, MODE_HIDEBMASKS)) @@ -737,8 +631,8 @@ } static void -chm_voice(struct Client *source_p, struct Channel *chptr, int parc, int *parn, - char **parv, int *errors, int alev, int dir, char c, unsigned int d) +chm_voice(struct Client *source_p, struct Channel *chptr, int parc, int *parn, char **parv, + int *errors, int alev, int dir, const char c, const struct chan_mode *mode) { struct Client *target_p; struct Membership *member; @@ -772,23 +666,22 @@ if (MyClient(source_p) && (++mode_limit > MAXMODEPARAMS)) return; - switch (dir) + if (dir == MODE_ADD) /* setting + */ { - case MODE_ADD: - if (has_member_flags(member, CHFL_VOICE)) - return; /* No redundant mode changes */ + if (has_member_flags(member, CHFL_VOICE)) + return; /* No redundant mode changes */ - AddMemberFlag(member, CHFL_VOICE); - break; - case MODE_DEL: - if (!has_member_flags(member, CHFL_VOICE)) - return; /* No redundant mode changes */ + AddMemberFlag(member, CHFL_VOICE); + } + else if (dir == MODE_DEL) /* setting - */ + { + if (has_member_flags(member, CHFL_VOICE) == 0) + return; /* No redundant mode changes */ - DelMemberFlag(member, CHFL_VOICE); - break; + DelMemberFlag(member, CHFL_VOICE); } - mode_changes[mode_count].letter = c; + mode_changes[mode_count].letter = mode->letter; mode_changes[mode_count].arg = target_p->name; mode_changes[mode_count].id = target_p->id; mode_changes[mode_count].flags = 0; @@ -796,8 +689,8 @@ } static void -chm_hop(struct Client *source_p, struct Channel *chptr, int parc, int *parn, - char **parv, int *errors, int alev, int dir, char c, unsigned int d) +chm_hop(struct Client *source_p, struct Channel *chptr, int parc, int *parn, char **parv, + int *errors, int alev, int dir, const char c, const struct chan_mode *mode) { struct Client *target_p; struct Membership *member; @@ -831,23 +724,22 @@ if (MyClient(source_p) && (++mode_limit > MAXMODEPARAMS)) return; - switch (dir) + if (dir == MODE_ADD) /* setting + */ { - case MODE_ADD: - if (has_member_flags(member, CHFL_HALFOP)) - return; /* No redundant mode changes */ + if (has_member_flags(member, CHFL_HALFOP)) + return; /* No redundant mode changes */ - AddMemberFlag(member, CHFL_HALFOP); - break; - case MODE_DEL: - if (!has_member_flags(member, CHFL_HALFOP)) - return; /* No redundant mode changes */ + AddMemberFlag(member, CHFL_HALFOP); + } + else if (dir == MODE_DEL) /* setting - */ + { + if (has_member_flags(member, CHFL_HALFOP) == 0) + return; /* No redundant mode changes */ - DelMemberFlag(member, CHFL_HALFOP); - break; + DelMemberFlag(member, CHFL_HALFOP); } - mode_changes[mode_count].letter = c; + mode_changes[mode_count].letter = mode->letter; mode_changes[mode_count].arg = target_p->name; mode_changes[mode_count].id = target_p->id; mode_changes[mode_count].flags = 0; @@ -855,8 +747,8 @@ } static void -chm_op(struct Client *source_p, struct Channel *chptr, int parc, int *parn, - char **parv, int *errors, int alev, int dir, char c, unsigned int d) +chm_op(struct Client *source_p, struct Channel *chptr, int parc, int *parn, char **parv, + int *errors, int alev, int dir, const char c, const struct chan_mode *mode) { struct Client *target_p; struct Membership *member; @@ -890,23 +782,22 @@ if (MyClient(source_p) && (++mode_limit > MAXMODEPARAMS)) return; - switch (dir) + if (dir == MODE_ADD) /* setting + */ { - case MODE_ADD: - if (has_member_flags(member, CHFL_CHANOP)) - return; /* No redundant mode changes */ + if (has_member_flags(member, CHFL_CHANOP)) + return; /* No redundant mode changes */ - AddMemberFlag(member, CHFL_CHANOP); - break; - case MODE_DEL: - if (!has_member_flags(member, CHFL_CHANOP)) - return; /* No redundant mode changes */ + AddMemberFlag(member, CHFL_CHANOP); + } + else if (dir == MODE_DEL) /* setting - */ + { + if (has_member_flags(member, CHFL_CHANOP) == 0) + return; /* No redundant mode changes */ - DelMemberFlag(member, CHFL_CHANOP); - break; + DelMemberFlag(member, CHFL_CHANOP); } - mode_changes[mode_count].letter = c; + mode_changes[mode_count].letter = mode->letter; mode_changes[mode_count].arg = target_p->name; mode_changes[mode_count].id = target_p->id; mode_changes[mode_count].flags = 0; @@ -914,8 +805,8 @@ } static void -chm_limit(struct Client *source_p, struct Channel *chptr, int parc, int *parn, - char **parv, int *errors, int alev, int dir, char c, unsigned int d) +chm_limit(struct Client *source_p, struct Channel *chptr, int parc, int *parn, char **parv, + int *errors, int alev, int dir, const char c, const struct chan_mode *mode) { if (alev < CHACCESS_HALFOP) { @@ -942,10 +833,10 @@ /* If somebody sets MODE #channel +ll 1 2, accept latter --fl */ for (unsigned int i = 0; i < mode_count; ++i) - if (mode_changes[i].letter == c && mode_changes[i].dir == MODE_ADD) + if (mode_changes[i].letter == mode->letter && mode_changes[i].dir == MODE_ADD) mode_changes[i].letter = 0; - mode_changes[mode_count].letter = c; + mode_changes[mode_count].letter = mode->letter; mode_changes[mode_count].arg = lstr; mode_changes[mode_count].id = NULL; mode_changes[mode_count].flags = 0; @@ -955,12 +846,12 @@ } else if (dir == MODE_DEL) { - if (!chptr->mode.limit) + if (chptr->mode.limit == 0) return; chptr->mode.limit = 0; - mode_changes[mode_count].letter = c; + mode_changes[mode_count].letter = mode->letter; mode_changes[mode_count].arg = NULL; mode_changes[mode_count].id = NULL; mode_changes[mode_count].flags = 0; @@ -969,8 +860,8 @@ } static void -chm_key(struct Client *source_p, struct Channel *chptr, int parc, int *parn, - char **parv, int *errors, int alev, int dir, char c, unsigned int d) +chm_key(struct Client *source_p, struct Channel *chptr, int parc, int *parn, char **parv, + int *errors, int alev, int dir, const char c, const struct chan_mode *mode) { if (alev < CHACCESS_HALFOP) { @@ -997,10 +888,10 @@ /* If somebody does MODE #channel +kk a b, accept latter --fl */ for (unsigned int i = 0; i < mode_count; ++i) - if (mode_changes[i].letter == c && mode_changes[i].dir == MODE_ADD) + if (mode_changes[i].letter == mode->letter && mode_changes[i].dir == MODE_ADD) mode_changes[i].letter = 0; - mode_changes[mode_count].letter = c; + mode_changes[mode_count].letter = mode->letter; mode_changes[mode_count].arg = key; mode_changes[mode_count].id = NULL; mode_changes[mode_count].flags = 0; @@ -1016,7 +907,7 @@ chptr->mode.key[0] = '\0'; - mode_changes[mode_count].letter = c; + mode_changes[mode_count].letter = mode->letter; mode_changes[mode_count].arg = "*"; mode_changes[mode_count].id = NULL; mode_changes[mode_count].flags = 0; @@ -1024,266 +915,6 @@ } } -const struct ChannelMode ModeTable[256] = -{ - { chm_nosuch, 0 }, /* 0x00 */ - { chm_nosuch, 0 }, /* 0x01 */ - { chm_nosuch, 0 }, /* 0x02 */ - { chm_nosuch, 0 }, /* 0x03 */ - { chm_nosuch, 0 }, /* 0x04 */ - { chm_nosuch, 0 }, /* 0x05 */ - { chm_nosuch, 0 }, /* 0x06 */ - { chm_nosuch, 0 }, /* 0x07 */ - { chm_nosuch, 0 }, /* 0x08 */ - { chm_nosuch, 0 }, /* 0x09 */ - { chm_nosuch, 0 }, /* 0x0a */ - { chm_nosuch, 0 }, /* 0x0b */ - { chm_nosuch, 0 }, /* 0x0c */ - { chm_nosuch, 0 }, /* 0x0d */ - { chm_nosuch, 0 }, /* 0x0e */ - { chm_nosuch, 0 }, /* 0x0f */ - { chm_nosuch, 0 }, /* 0x10 */ - { chm_nosuch, 0 }, /* 0x11 */ - { chm_nosuch, 0 }, /* 0x12 */ - { chm_nosuch, 0 }, /* 0x13 */ - { chm_nosuch, 0 }, /* 0x14 */ - { chm_nosuch, 0 }, /* 0x15 */ - { chm_nosuch, 0 }, /* 0x16 */ - { chm_nosuch, 0 }, /* 0x17 */ - { chm_nosuch, 0 }, /* 0x18 */ - { chm_nosuch, 0 }, /* 0x19 */ - { chm_nosuch, 0 }, /* 0x1a */ - { chm_nosuch, 0 }, /* 0x1b */ - { chm_nosuch, 0 }, /* 0x1c */ - { chm_nosuch, 0 }, /* 0x1d */ - { chm_nosuch, 0 }, /* 0x1e */ - { chm_nosuch, 0 }, /* 0x1f */ - { chm_nosuch, 0 }, /* 0x20 */ - { chm_nosuch, 0 }, /* 0x21 */ - { chm_nosuch, 0 }, /* 0x22 */ - { chm_nosuch, 0 }, /* 0x23 */ - { chm_nosuch, 0 }, /* 0x24 */ - { chm_nosuch, 0 }, /* 0x25 */ - { chm_nosuch, 0 }, /* 0x26 */ - { chm_nosuch, 0 }, /* 0x27 */ - { chm_nosuch, 0 }, /* 0x28 */ - { chm_nosuch, 0 }, /* 0x29 */ - { chm_nosuch, 0 }, /* 0x2a */ - { chm_nosuch, 0 }, /* 0x2b */ - { chm_nosuch, 0 }, /* 0x2c */ - { chm_nosuch, 0 }, /* 0x2d */ - { chm_nosuch, 0 }, /* 0x2e */ - { chm_nosuch, 0 }, /* 0x2f */ - { chm_nosuch, 0 }, /* 0x30 */ - { chm_nosuch, 0 }, /* 0x31 */ - { chm_nosuch, 0 }, /* 0x32 */ - { chm_nosuch, 0 }, /* 0x33 */ - { chm_nosuch, 0 }, /* 0x34 */ - { chm_nosuch, 0 }, /* 0x35 */ - { chm_nosuch, 0 }, /* 0x36 */ - { chm_nosuch, 0 }, /* 0x37 */ - { chm_nosuch, 0 }, /* 0x38 */ - { chm_nosuch, 0 }, /* 0x39 */ - { chm_nosuch, 0 }, /* 0x3a */ - { chm_nosuch, 0 }, /* 0x3b */ - { chm_nosuch, 0 }, /* 0x3c */ - { chm_nosuch, 0 }, /* 0x3d */ - { chm_nosuch, 0 }, /* 0x3e */ - { chm_nosuch, 0 }, /* 0x3f */ - { chm_nosuch, 0 }, /* @ */ - { chm_nosuch, 0 }, /* A */ - { chm_nosuch, 0 }, /* B */ - { chm_simple, MODE_NOCTCP }, /* C */ - { chm_nosuch, 0 }, /* D */ - { chm_nosuch, 0 }, /* E */ - { chm_nosuch, 0 }, /* F */ - { chm_nosuch, 0 }, /* G */ - { chm_nosuch, 0 }, /* H */ - { chm_invex, 0 }, /* I */ - { chm_nosuch, 0 }, /* J */ - { chm_nosuch, 0 }, /* K */ - { chm_simple_oper, MODE_EXTLIMIT }, /* L */ - { chm_simple, MODE_MODREG}, /* M */ - { chm_nosuch, 0 }, /* N */ - { chm_simple_oper, MODE_OPERONLY}, /* O */ - { chm_nosuch, 0 }, /* P */ - { chm_nosuch, 0 }, /* Q */ - { chm_simple, MODE_REGONLY}, /* R */ - { chm_simple, MODE_SSLONLY}, /* S */ - { chm_simple, MODE_NONOTICE}, /* T */ - { chm_nosuch, 0 }, /* U */ - { chm_nosuch, 0 }, /* V */ - { chm_nosuch, 0 }, /* W */ - { chm_nosuch, 0 }, /* X */ - { chm_nosuch, 0 }, /* Y */ - { chm_nosuch, 0 }, /* Z */ - { chm_nosuch, 0 }, - { chm_nosuch, 0 }, - { chm_nosuch, 0 }, - { chm_nosuch, 0 }, - { chm_nosuch, 0 }, - { chm_nosuch, 0 }, - { chm_nosuch, 0 }, /* a */ - { chm_ban, 0 }, /* b */ - { chm_simple, MODE_NOCTRL}, /* c */ - { chm_nosuch, 0 }, /* d */ - { chm_except, 0 }, /* e */ - { chm_nosuch, 0 }, /* f */ - { chm_nosuch, 0 }, /* g */ - { chm_hop, 0 }, /* h */ - { chm_simple, MODE_INVITEONLY }, /* i */ - { chm_nosuch, 0 }, /* j */ - { chm_key, 0 }, /* k */ - { chm_limit, 0 }, /* l */ - { chm_simple, MODE_MODERATED }, /* m */ - { chm_simple, MODE_NOPRIVMSGS }, /* n */ - { chm_op, 0 }, /* o */ - { chm_simple, MODE_PRIVATE }, /* p */ - { chm_nosuch, 0 }, /* q */ - { chm_registered, MODE_REGISTERED }, /* r */ - { chm_simple, MODE_SECRET }, /* s */ - { chm_simple, MODE_TOPICLIMIT }, /* t */ - { chm_simple, MODE_HIDEBMASKS }, /* u */ - { chm_voice, 0 }, /* v */ - { chm_nosuch, 0 }, /* w */ - { chm_nosuch, 0 }, /* x */ - { chm_nosuch, 0 }, /* y */ - { chm_nosuch, 0 }, /* z */ - { chm_nosuch, 0 }, /* 0x7b */ - { chm_nosuch, 0 }, /* 0x7c */ - { chm_nosuch, 0 }, /* 0x7d */ - { chm_nosuch, 0 }, /* 0x7e */ - { chm_nosuch, 0 }, /* 0x7f */ - { chm_nosuch, 0 }, /* 0x80 */ - { chm_nosuch, 0 }, /* 0x81 */ - { chm_nosuch, 0 }, /* 0x82 */ - { chm_nosuch, 0 }, /* 0x83 */ - { chm_nosuch, 0 }, /* 0x84 */ - { chm_nosuch, 0 }, /* 0x85 */ - { chm_nosuch, 0 }, /* 0x86 */ - { chm_nosuch, 0 }, /* 0x87 */ - { chm_nosuch, 0 }, /* 0x88 */ - { chm_nosuch, 0 }, /* 0x89 */ - { chm_nosuch, 0 }, /* 0x8a */ - { chm_nosuch, 0 }, /* 0x8b */ - { chm_nosuch, 0 }, /* 0x8c */ - { chm_nosuch, 0 }, /* 0x8d */ - { chm_nosuch, 0 }, /* 0x8e */ - { chm_nosuch, 0 }, /* 0x8f */ - { chm_nosuch, 0 }, /* 0x90 */ - { chm_nosuch, 0 }, /* 0x91 */ - { chm_nosuch, 0 }, /* 0x92 */ - { chm_nosuch, 0 }, /* 0x93 */ - { chm_nosuch, 0 }, /* 0x94 */ - { chm_nosuch, 0 }, /* 0x95 */ - { chm_nosuch, 0 }, /* 0x96 */ - { chm_nosuch, 0 }, /* 0x97 */ - { chm_nosuch, 0 }, /* 0x98 */ - { chm_nosuch, 0 }, /* 0x99 */ - { chm_nosuch, 0 }, /* 0x9a */ - { chm_nosuch, 0 }, /* 0x9b */ - { chm_nosuch, 0 }, /* 0x9c */ - { chm_nosuch, 0 }, /* 0x9d */ - { chm_nosuch, 0 }, /* 0x9e */ - { chm_nosuch, 0 }, /* 0x9f */ - { chm_nosuch, 0 }, /* 0xa0 */ - { chm_nosuch, 0 }, /* 0xa1 */ - { chm_nosuch, 0 }, /* 0xa2 */ - { chm_nosuch, 0 }, /* 0xa3 */ - { chm_nosuch, 0 }, /* 0xa4 */ - { chm_nosuch, 0 }, /* 0xa5 */ - { chm_nosuch, 0 }, /* 0xa6 */ - { chm_nosuch, 0 }, /* 0xa7 */ - { chm_nosuch, 0 }, /* 0xa8 */ - { chm_nosuch, 0 }, /* 0xa9 */ - { chm_nosuch, 0 }, /* 0xaa */ - { chm_nosuch, 0 }, /* 0xab */ - { chm_nosuch, 0 }, /* 0xac */ - { chm_nosuch, 0 }, /* 0xad */ - { chm_nosuch, 0 }, /* 0xae */ - { chm_nosuch, 0 }, /* 0xaf */ - { chm_nosuch, 0 }, /* 0xb0 */ - { chm_nosuch, 0 }, /* 0xb1 */ - { chm_nosuch, 0 }, /* 0xb2 */ - { chm_nosuch, 0 }, /* 0xb3 */ - { chm_nosuch, 0 }, /* 0xb4 */ - { chm_nosuch, 0 }, /* 0xb5 */ - { chm_nosuch, 0 }, /* 0xb6 */ - { chm_nosuch, 0 }, /* 0xb7 */ - { chm_nosuch, 0 }, /* 0xb8 */ - { chm_nosuch, 0 }, /* 0xb9 */ - { chm_nosuch, 0 }, /* 0xba */ - { chm_nosuch, 0 }, /* 0xbb */ - { chm_nosuch, 0 }, /* 0xbc */ - { chm_nosuch, 0 }, /* 0xbd */ - { chm_nosuch, 0 }, /* 0xbe */ - { chm_nosuch, 0 }, /* 0xbf */ - { chm_nosuch, 0 }, /* 0xc0 */ - { chm_nosuch, 0 }, /* 0xc1 */ - { chm_nosuch, 0 }, /* 0xc2 */ - { chm_nosuch, 0 }, /* 0xc3 */ - { chm_nosuch, 0 }, /* 0xc4 */ - { chm_nosuch, 0 }, /* 0xc5 */ - { chm_nosuch, 0 }, /* 0xc6 */ - { chm_nosuch, 0 }, /* 0xc7 */ - { chm_nosuch, 0 }, /* 0xc8 */ - { chm_nosuch, 0 }, /* 0xc9 */ - { chm_nosuch, 0 }, /* 0xca */ - { chm_nosuch, 0 }, /* 0xcb */ - { chm_nosuch, 0 }, /* 0xcc */ - { chm_nosuch, 0 }, /* 0xcd */ - { chm_nosuch, 0 }, /* 0xce */ - { chm_nosuch, 0 }, /* 0xcf */ - { chm_nosuch, 0 }, /* 0xd0 */ - { chm_nosuch, 0 }, /* 0xd1 */ - { chm_nosuch, 0 }, /* 0xd2 */ - { chm_nosuch, 0 }, /* 0xd3 */ - { chm_nosuch, 0 }, /* 0xd4 */ - { chm_nosuch, 0 }, /* 0xd5 */ - { chm_nosuch, 0 }, /* 0xd6 */ - { chm_nosuch, 0 }, /* 0xd7 */ - { chm_nosuch, 0 }, /* 0xd8 */ - { chm_nosuch, 0 }, /* 0xd9 */ - { chm_nosuch, 0 }, /* 0xda */ - { chm_nosuch, 0 }, /* 0xdb */ - { chm_nosuch, 0 }, /* 0xdc */ - { chm_nosuch, 0 }, /* 0xdd */ - { chm_nosuch, 0 }, /* 0xde */ - { chm_nosuch, 0 }, /* 0xdf */ - { chm_nosuch, 0 }, /* 0xe0 */ - { chm_nosuch, 0 }, /* 0xe1 */ - { chm_nosuch, 0 }, /* 0xe2 */ - { chm_nosuch, 0 }, /* 0xe3 */ - { chm_nosuch, 0 }, /* 0xe4 */ - { chm_nosuch, 0 }, /* 0xe5 */ - { chm_nosuch, 0 }, /* 0xe6 */ - { chm_nosuch, 0 }, /* 0xe7 */ - { chm_nosuch, 0 }, /* 0xe8 */ - { chm_nosuch, 0 }, /* 0xe9 */ - { chm_nosuch, 0 }, /* 0xea */ - { chm_nosuch, 0 }, /* 0xeb */ - { chm_nosuch, 0 }, /* 0xec */ - { chm_nosuch, 0 }, /* 0xed */ - { chm_nosuch, 0 }, /* 0xee */ - { chm_nosuch, 0 }, /* 0xef */ - { chm_nosuch, 0 }, /* 0xf0 */ - { chm_nosuch, 0 }, /* 0xf1 */ - { chm_nosuch, 0 }, /* 0xf2 */ - { chm_nosuch, 0 }, /* 0xf3 */ - { chm_nosuch, 0 }, /* 0xf4 */ - { chm_nosuch, 0 }, /* 0xf5 */ - { chm_nosuch, 0 }, /* 0xf6 */ - { chm_nosuch, 0 }, /* 0xf7 */ - { chm_nosuch, 0 }, /* 0xf8 */ - { chm_nosuch, 0 }, /* 0xf9 */ - { chm_nosuch, 0 }, /* 0xfa */ - { chm_nosuch, 0 }, /* 0xfb */ - { chm_nosuch, 0 }, /* 0xfc */ - { chm_nosuch, 0 }, /* 0xfd */ - { chm_nosuch, 0 }, /* 0xfe */ - { chm_nosuch, 0 }, /* 0xff */ -}; - /* get_channel_access() * * inputs - pointer to Client struct @@ -1419,13 +1050,13 @@ unsigned int mbl = 0, pbl = 0, arglen = 0, modecount = 0, paracount = 0; unsigned int dir = MODE_QUERY; - if (IsServer(source_p)) + if (IsClient(source_p)) + mbl = snprintf(modebuf, sizeof(modebuf), ":%s!%s@%s MODE %s ", source_p->name, + source_p->username, source_p->host, chptr->name); + else mbl = snprintf(modebuf, sizeof(modebuf), ":%s MODE %s ", (IsHidden(source_p) || ConfigServerHide.hide_servers) ? me.name : source_p->name, chptr->name); - else - mbl = snprintf(modebuf, sizeof(modebuf), ":%s!%s@%s MODE %s ", source_p->name, - source_p->username, source_p->host, chptr->name); for (unsigned int i = 0; i < mode_count; ++i) { @@ -1447,13 +1078,13 @@ modecount = 0; paracount = 0; - if (IsServer(source_p)) + if (IsClient(source_p)) + mbl = snprintf(modebuf, sizeof(modebuf), ":%s!%s@%s MODE %s ", source_p->name, + source_p->username, source_p->host, chptr->name); + else mbl = snprintf(modebuf, sizeof(modebuf), ":%s MODE %s ", (IsHidden(source_p) || ConfigServerHide.hide_servers) ? me.name : source_p->name, chptr->name); - else - mbl = snprintf(modebuf, sizeof(modebuf), ":%s!%s@%s MODE %s ", source_p->name, - source_p->username, source_p->host, chptr->name); pbl = 0; parabuf[0] = '\0'; @@ -1485,6 +1116,44 @@ } } +const struct chan_mode *cmode_map[256]; +const struct chan_mode cmode_tab[] = +{ + { .letter = 'b', .func = chm_ban }, + { .letter = 'c', .mode = MODE_NOCTRL, .func = chm_simple }, + { .letter = 'e', .func = chm_except }, + { .letter = 'h', .func = chm_hop }, + { .letter = 'i', .mode = MODE_INVITEONLY, .func = chm_simple }, + { .letter = 'k', .func = chm_key }, + { .letter = 'l', .func = chm_limit }, + { .letter = 'm', .mode = MODE_MODERATED, .func = chm_simple }, + { .letter = 'n', .mode = MODE_NOPRIVMSGS, .func = chm_simple }, + { .letter = 'o', .func = chm_op }, + { .letter = 'p', .mode = MODE_PRIVATE, .func = chm_simple }, + { .letter = 'r', .mode = MODE_REGISTERED, .only_servers = 1, .func = chm_simple }, + { .letter = 's', .mode = MODE_SECRET, .func = chm_simple }, + { .letter = 't', .mode = MODE_TOPICLIMIT, .func = chm_simple }, + { .letter = 'u', .mode = MODE_HIDEBMASKS, .func = chm_simple }, + { .letter = 'v', .func = chm_voice }, + { .letter = 'C', .mode = MODE_NOCTCP, .func = chm_simple }, + { .letter = 'I', .func = chm_invex }, + { .letter = 'L', .mode = MODE_EXTLIMIT, .only_opers = 1, .func = chm_simple }, + { .letter = 'M', .mode = MODE_MODREG, .func = chm_simple }, + { .letter = 'N', .mode = MODE_NONICKCHANGE, .func = chm_simple }, + { .letter = 'O', .mode = MODE_OPERONLY, .only_opers = 1, .func = chm_simple }, + { .letter = 'R', .mode = MODE_REGONLY, .func = chm_simple }, + { .letter = 'S', .mode = MODE_SSLONLY, .func = chm_simple }, + { .letter = 'T', .mode = MODE_NONOTICE, .func = chm_simple }, + { .letter = '\0', .mode = 0 } +}; + +void +channel_mode_init(void) +{ + for (const struct chan_mode *tab = cmode_tab; tab->letter; ++tab) + cmode_map[tab->letter] = tab; +} + /* * Input: The the client this originated * from, the channel, the parameter count starting at the modes, @@ -1495,7 +1164,7 @@ * clients. */ void -set_channel_mode(struct Client *source_p, struct Channel *chptr, +channel_mode_set(struct Client *source_p, struct Channel *chptr, struct Membership *member, int parc, char *parv[]) { int dir = MODE_ADD; @@ -1523,17 +1192,19 @@ break; default: { - const struct ChannelMode *tptr = &ModeTable[(unsigned char)*ml]; + const struct chan_mode *mode = cmode_map[(unsigned char)*ml]; - tptr->func(source_p, chptr, parc, &parn, parv, - &errors, alevel, dir, *ml, tptr->d); + if (mode) + mode->func(source_p, chptr, parc, &parn, parv, &errors, alevel, dir, *ml, mode); + else + chm_nosuch(source_p, chptr, parc, &parn, parv, &errors, alevel, dir, *ml, NULL); break; } } } /* Bail out if we have nothing to do... */ - if (!mode_count) + if (mode_count == 0) return; send_mode_changes_client(source_p, chptr); diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/client.c ircd-hybrid-8.2.24+dfsg.1/src/client.c --- ircd-hybrid-8.2.22+dfsg.1/src/client.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/client.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,12 +21,13 @@ /*! \file client.c * \brief Controls clients. - * \version $Id: client.c 8058 2017-03-23 16:13:10Z michael $ + * \version $Id: client.c 8483 2018-04-04 15:07:19Z michael $ */ #include "stdinc.h" #include "list.h" #include "client.h" +#include "client_svstag.h" #include "event.h" #include "hash.h" #include "irc_string.h" @@ -43,7 +44,6 @@ #include "whowas.h" #include "user.h" #include "memory.h" -#include "mempool.h" #include "hostmask.h" #include "listener.h" #include "userhost.h" @@ -61,13 +61,12 @@ dlink_list global_server_list; dlink_list oper_list; -static mp_pool_t *client_pool, *connection_pool; static dlink_list dead_list, abort_list; static dlink_node *eac_next; /* next aborted client to exit */ /* - * make_client - create a new Client struct and set it to initial state. + * client_make - create a new Client struct and set it to initial state. * * from == NULL, create local client (a client connected * to a socket). @@ -84,14 +83,14 @@ struct Client * client_make(struct Client *from) { - struct Client *const client_p = mp_pool_get(client_pool); + struct Client *client_p = xcalloc(sizeof(*client_p)); if (from) client_p->from = from; else { client_p->from = client_p; /* 'from' of local client is self! */ - client_p->connection = mp_pool_get(connection_pool); + client_p->connection = xcalloc(sizeof(*client_p->connection)); client_p->connection->since = CurrentTime; client_p->connection->lasttime = CurrentTime; client_p->connection->firsttime = CurrentTime; @@ -120,22 +119,60 @@ static void client_free(struct Client *client_p) { + assert(!IsMe(client_p)); assert(client_p != &me); assert(client_p->hnext == client_p); assert(client_p->idhnext == client_p); - assert(client_p->channel.head == NULL); - assert(dlink_list_length(&client_p->channel) == 0); + + assert(client_p->node.prev == NULL); + assert(client_p->node.next == NULL); + + assert(client_p->lnode.prev == NULL); + assert(client_p->lnode.next == NULL); + assert(dlink_list_length(&client_p->whowas_list) == 0); + assert(client_p->whowas_list.head == NULL); + assert(client_p->whowas_list.tail == NULL); + + assert(dlink_list_length(&client_p->channel) == 0); + assert(client_p->channel.head == NULL); + assert(client_p->channel.tail == NULL); + assert(dlink_list_length(&client_p->svstags) == 0); + assert(client_p->svstags.head == NULL); + assert(client_p->svstags.tail == NULL); + xfree(client_p->serv); xfree(client_p->certfp); if (MyConnect(client_p)) { - assert(client_p->connection->invited.head == NULL); - assert(dlink_list_length(&client_p->connection->invited) == 0); + assert(client_p->connection->lclient_node.prev == NULL); + assert(client_p->connection->lclient_node.next == NULL); + + assert(client_p->connection->list_task == NULL); + assert(client_p->connection->auth == NULL); + + assert(dlink_list_length(&client_p->connection->acceptlist) == 0); + assert(client_p->connection->acceptlist.head == NULL); + assert(client_p->connection->acceptlist.tail == NULL); + + assert(dlink_list_length(&client_p->connection->watches) == 0); + assert(client_p->connection->watches.head == NULL); + assert(client_p->connection->watches.tail == NULL); + + assert(dlink_list_length(&client_p->connection->confs) == 0); + assert(client_p->connection->confs.head == NULL); + assert(client_p->connection->confs.tail == NULL); + + assert(dlink_list_length(&client_p->connection->invited) == 0); + assert(client_p->connection->invited.head == NULL); + assert(client_p->connection->invited.tail == NULL); + + assert(client_p->connection->fd == NULL); + assert(HasFlag(client_p, FLAGS_CLOSING) && IsDead(client_p)); /* @@ -150,46 +187,11 @@ dbuf_clear(&client_p->connection->buf_recvq); dbuf_clear(&client_p->connection->buf_sendq); - mp_pool_release(client_p->connection); + xfree(client_p->connection); + client_p->connection = NULL; } - mp_pool_release(client_p); -} - -void -client_attach_svstag(struct Client *client_p, unsigned int numeric, - const char *umodes, const char *tag) -{ - const struct user_modes *tab = NULL; - - if (numeric >= ERR_LAST_ERR_MSG || *umodes != '+') - return; - - struct ServicesTag *svstag = xcalloc(sizeof(*svstag)); - svstag->numeric = numeric; - svstag->tag = xstrdup(tag); - - for (const char *m = umodes + 1; *m; ++m) - if ((tab = umode_map[(unsigned char)*m])) - svstag->umodes |= tab->flag; - - if (numeric != RPL_WHOISOPERATOR) - dlinkAddTail(svstag, &svstag->node, &client_p->svstags); - else - dlinkAdd(svstag, &svstag->node, &client_p->svstags); -} - -void -client_clear_svstags(struct Client *client_p) -{ - while (client_p->svstags.head) - { - struct ServicesTag *svstag = client_p->svstags.head->data; - - dlinkDelete(&svstag->node, &client_p->svstags); - xfree(svstag->tag); - xfree(svstag); - } + xfree(client_p); } /* check_pings_list() @@ -203,14 +205,14 @@ { char buf[32] = ""; /* 32 = sizeof("Ping timeout: 999999999 seconds") */ unsigned int ping = 0; /* ping time value from client */ - dlink_node *node = NULL, *node_next = NULL; + dlink_node *node, *node_next; DLINK_FOREACH_SAFE(node, node_next, list->head) { struct Client *client_p = node->data; if (IsDead(client_p)) - continue; /* Ignore it, its been exited already */ + continue; /* Ignore it, it's been exited already */ if (IsClient(client_p) || IsServer(client_p)) ping = get_client_ping(&client_p->connection->confs); @@ -268,7 +270,7 @@ static void check_unknowns_list(void) { - dlink_node *node = NULL, *node_next = NULL; + dlink_node *node, *node_next; DLINK_FOREACH_SAFE(node, node_next, unknown_list.head) { @@ -552,6 +554,79 @@ } /* + * client_close_connection + * Close the physical connection. This function must make + * MyConnect(client_p) == FALSE, and set client_p->from == NULL. + */ +static void +client_close_connection(struct Client *client_p) +{ + assert(client_p); + + if (!IsDead(client_p)) + { + /* Attempt to flush any pending dbufs. Evil, but .. -- adrian */ + /* + * There is still a chance that we might send data to this socket + * even if it is marked as blocked (COMM_SELECT_READ handler is called + * before COMM_SELECT_WRITE). Let's try, nothing to lose.. -adx + */ + DelFlag(client_p, FLAGS_BLOCKED); + send_queued_write(client_p); + } + + if (IsClient(client_p)) + { + ++ServerStats.is_cl; + ServerStats.is_cbs += client_p->connection->send.bytes; + ServerStats.is_cbr += client_p->connection->recv.bytes; + ServerStats.is_cti += CurrentTime - client_p->connection->firsttime; + } + else if (IsServer(client_p)) + { + dlink_node *node; + + ++ServerStats.is_sv; + ServerStats.is_sbs += client_p->connection->send.bytes; + ServerStats.is_sbr += client_p->connection->recv.bytes; + ServerStats.is_sti += CurrentTime - client_p->connection->firsttime; + + DLINK_FOREACH(node, connect_items.head) + { + struct MaskItem *conf = node->data; + + if (irccmp(conf->name, client_p->name)) + continue; + + /* + * Reset next-connect cycle of all connect{} blocks that match + * this servername. + */ + conf->until = CurrentTime + conf->class->con_freq; + } + } + else + ++ServerStats.is_ni; + + if (tls_isusing(&client_p->connection->fd->ssl)) + tls_shutdown(&client_p->connection->fd->ssl); + + if (client_p->connection->fd) + { + fd_close(client_p->connection->fd); + client_p->connection->fd = NULL; + } + + dbuf_clear(&client_p->connection->buf_sendq); + dbuf_clear(&client_p->connection->buf_recvq); + + xfree(client_p->connection->password); + client_p->connection->password = NULL; + + conf_detach(client_p, CONF_CLIENT | CONF_OPER | CONF_SERVER); +} + +/* * Exit one client, local or remote. Assuming all dependents have * been already removed, and socket closed for local client. * @@ -588,18 +663,12 @@ DLINK_FOREACH_SAFE(node, node_next, source_p->channel.head) remove_user_from_channel(node->data); - client_clear_svstags(source_p); + svstag_clear_list(&source_p->svstags); whowas_add_history(source_p, 0); whowas_off_history(source_p); watch_check_hash(source_p, RPL_LOGOFF); - - if (MyConnect(source_p)) - { - clear_invite_list(&source_p->connection->invited); - del_all_accepts(source_p); - } } else if (IsServer(source_p)) { @@ -624,7 +693,7 @@ /* Check to see if the client isn't already on the dead list */ assert(dlinkFind(&dead_list, source_p) == NULL); - /* add to dead client dlist */ + /* Add to dead client dlist */ SetDead(source_p); dlinkAdd(source_p, make_dlink_node(), &dead_list); } @@ -670,8 +739,6 @@ void exit_client(struct Client *source_p, const char *comment) { - dlink_node *node; - assert(!IsMe(source_p)); assert(source_p != &me); @@ -691,10 +758,16 @@ ipcache_remove_address(&source_p->connection->ip); } - auth_delete(&source_p->connection->auth); + if (source_p->connection->auth) + { + auth_delete(source_p->connection->auth); + source_p->connection->auth = NULL; + } if (IsClient(source_p)) { + dlink_node *node; + if (HasUMode(source_p, UMODE_OPER)) if ((node = dlinkFindDelete(&oper_list, source_p))) free_dlink_node(node); @@ -705,11 +778,13 @@ if (source_p->connection->list_task) free_list_task(source_p); + clear_invite_list(&source_p->connection->invited); + del_all_accepts(source_p); watch_del_watch_list(source_p); sendto_realops_flags(UMODE_CCONN, L_ALL, SEND_NOTICE, "Client exiting: %s (%s@%s) [%s] [%s]", - source_p->name, source_p->username, source_p->host, + source_p->name, source_p->username, source_p->realhost, source_p->sockhost, comment); ilog(LOG_TYPE_USER, "%s (%ju): %s!%s@%s %s %s %ju/%ju :%s", @@ -737,7 +812,7 @@ { if (!HasFlag(source_p, FLAGS_SQUIT)) { - /* for them, we are exiting the network */ + /* For them, we are exiting the network */ sendto_one(source_p, ":%s SQUIT %s :%s", me.id, me.id, comment); } @@ -747,13 +822,13 @@ source_p->host, comment); } - close_connection(source_p); + client_close_connection(source_p); } else if (IsClient(source_p) && HasFlag(source_p->servptr, FLAGS_EOB)) sendto_realops_flags(UMODE_FARCONNECT, L_ALL, SEND_NOTICE, "Client exiting at %s: %s (%s@%s) [%s] [%s]", source_p->servptr->name, source_p->name, - source_p->username, source_p->host, source_p->sockhost, comment); + source_p->username, source_p->realhost, source_p->sockhost, comment); if (IsServer(source_p)) { @@ -764,8 +839,8 @@ if (ConfigServerHide.hide_servers) /* - * Set netsplit message to "*.net *.split" to still show - * that its a split, but hide the servers splitting + * Set netsplit message to "*.net *.split" to still show that it's a split, + * but hide the servers splitting. */ strlcpy(splitstr, "*.net *.split", sizeof(splitstr)); else @@ -800,6 +875,7 @@ assert(dlinkFind(&local_client_list, source_p) == NULL); assert(dlinkFind(&local_server_list, source_p) == NULL); assert(dlinkFind(&oper_list, source_p) == NULL); + assert(dlinkFind(&listing_client_list, source_p) == NULL); exit_one_client(source_p, comment); } @@ -846,31 +922,31 @@ dbuf_clear(&client_p->connection->buf_recvq); dbuf_clear(&client_p->connection->buf_sendq); - current_error = get_sockerr(client_p->connection->fd.fd); + current_error = comm_get_sockerr(client_p->connection->fd->fd); if (IsServer(client_p) || IsHandshake(client_p)) { if (error == 0) { - /* Admins get the real IP */ sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, "Server %s closed the connection", client_get_name(client_p, SHOW_IP)); - - /* Opers get a masked IP */ sendto_realops_flags(UMODE_SERVNOTICE, L_OPER, SEND_NOTICE, "Server %s closed the connection", client_get_name(client_p, MASK_IP)); - ilog(LOG_TYPE_IRCD, "Server %s closed the connection", client_get_name(client_p, SHOW_IP)); } else { - report_error(L_ADMIN, "Lost connection to %s: %s", - client_get_name(client_p, SHOW_IP), current_error); - report_error(L_OPER, "Lost connection to %s: %s", - client_get_name(client_p, MASK_IP), current_error); + sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, + "Lost connection to %s: %s", + client_get_name(client_p, SHOW_IP), strerror(current_error)); + sendto_realops_flags(UMODE_SERVNOTICE, L_OPER, SEND_NOTICE, + "Lost connection to %s: %s", + client_get_name(client_p, MASK_IP), strerror(current_error)); + ilog(LOG_TYPE_IRCD, "Lost connection to %s: %s", + client_get_name(client_p, SHOW_IP), strerror(current_error)); } sendto_realops_flags(UMODE_SERVNOTICE, L_ALL, SEND_NOTICE, @@ -900,24 +976,22 @@ target_p = ptr->data; eac_next = ptr->next; + dlinkDelete(ptr, &abort_list); + free_dlink_node(ptr); + if (target_p == NULL) { sendto_realops_flags(UMODE_SERVNOTICE, L_ALL, SEND_NOTICE, "Warning: null client on abort_list!"); - dlinkDelete(ptr, &abort_list); - free_dlink_node(ptr); continue; } - dlinkDelete(ptr, &abort_list); - if (HasFlag(target_p, FLAGS_SENDQEX)) notice = "Max SendQ exceeded"; else notice = "Write error: connection closed"; exit_client(target_p, notice); - free_dlink_node(ptr); } } @@ -945,7 +1019,7 @@ struct split_nuh_item * find_accept(const char *nick, const char *user, const char *host, struct Client *client_p, - int (*cmpfunc)(const char *, const char *)) + int (*compare)(const char *, const char *)) { dlink_node *node; @@ -953,9 +1027,9 @@ { struct split_nuh_item *accept_p = node->data; - if (!cmpfunc(accept_p->nickptr, nick) && - !cmpfunc(accept_p->userptr, user) && - !cmpfunc(accept_p->hostptr, host)) + if (!compare(accept_p->nickptr, nick) && + !compare(accept_p->userptr, user) && + !compare(accept_p->hostptr, host)) return accept_p; } @@ -1011,7 +1085,7 @@ const struct Client *target_p) { unsigned int idle = 0; - const struct ClassItem *const class = get_class_ptr(&target_p->connection->confs); + const struct ClassItem *const class = class_get_ptr(&target_p->connection->confs); if (!(class->flags & CLASS_FLAGS_FAKE_IDLE) || target_p == source_p) return CurrentTime - target_p->connection->last_privmsg; @@ -1058,7 +1132,5 @@ .when = 5 }; - client_pool = mp_pool_new(sizeof(struct Client), MP_CHUNK_SIZE_CLIENT); - connection_pool = mp_pool_new(sizeof(struct Connection), MP_CHUNK_SIZE_CONNECTION); event_add(&event_ping, NULL); } diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/client_svstag.c ircd-hybrid-8.2.24+dfsg.1/src/client_svstag.c --- ircd-hybrid-8.2.22+dfsg.1/src/client_svstag.c 1970-01-01 00:00:00.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/client_svstag.c 2018-04-04 22:33:37.000000000 +0000 @@ -0,0 +1,86 @@ +/* + * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) + * + * Copyright (c) 2015-2018 ircd-hybrid development team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + */ + +/*! \file client_svstag.c + * \brief Controls SVSTAGS. + * \version $Id: client_svstag.c 8486 2018-04-04 15:13:05Z michael $ + */ + +#include "stdinc.h" +#include "list.h" +#include "client_svstag.h" +#include "memory.h" +#include "numeric.h" +#include "user.h" + + + +static void +svstag_free(struct ServicesTag *svstag, dlink_list *list) +{ + dlinkDelete(&svstag->node, list); + xfree(svstag->tag); + xfree(svstag); +} + +void +svstag_detach(dlink_list *list, unsigned int numeric) +{ + dlink_node *node, *node_next; + + DLINK_FOREACH_SAFE(node, node_next, list->head) + { + struct ServicesTag *svstag = node->data; + + if (svstag->numeric == numeric) + svstag_free(svstag, list); + } +} + +void +svstag_attach(dlink_list *list, unsigned int numeric, + const char *umodes, const char *tag) +{ + const struct user_modes *tab = NULL; + + if (numeric >= ERR_LAST_ERR_MSG || *umodes != '+') + return; + + struct ServicesTag *svstag = xcalloc(sizeof(*svstag)); + svstag->numeric = numeric; + svstag->tag = xstrdup(tag); + + for (const char *m = umodes + 1; *m; ++m) + if ((tab = umode_map[(unsigned char)*m])) + svstag->umodes |= tab->flag; + + if (numeric != RPL_WHOISOPERATOR) + dlinkAddTail(svstag, &svstag->node, list); + else + dlinkAdd(svstag, &svstag->node, list); +} + +void +svstag_clear_list(dlink_list *list) +{ + while (list->head) + svstag_free(list->head->data, list); +} diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/conf.c ircd-hybrid-8.2.24+dfsg.1/src/conf.c --- ircd-hybrid-8.2.22+dfsg.1/src/conf.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/conf.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,12 +21,13 @@ /*! \file conf.c * \brief Configuration file functions. - * \version $Id: conf.c 8045 2017-03-18 18:05:41Z michael $ + * \version $Id: conf.c 8467 2018-04-03 11:21:48Z michael $ */ #include "stdinc.h" #include "list.h" #include "ircd_defs.h" +#include "parse.h" #include "conf.h" #include "conf_cluster.h" #include "conf_gecos.h" @@ -53,7 +54,6 @@ #include "userhost.h" #include "user.h" #include "channel_mode.h" -#include "parse.h" #include "misc.h" #include "conf_db.h" #include "conf_class.h" @@ -250,7 +250,7 @@ "but you have exceed_limit = yes;"); } - return attach_conf(client_p, conf); + return conf_attach(client_p, conf); } /* verify_access() @@ -389,18 +389,15 @@ return !(i < 0); } -/* detach_conf() - * - * inputs - pointer to client to detach - * - type of conf to detach - * output - 0 for success, -1 for failure - * side effects - Disassociate configuration from the client. - * Also removes a class from the list if marked for deleting. +/*! \brief Disassociate configuration from the client. Also removes a class + * from the list if marked for deleting. + * \param client_p Client to operate on + * \param type Type of conf to detach */ void -detach_conf(struct Client *client_p, enum maskitem_type type) +conf_detach(struct Client *client_p, enum maskitem_type type) { - dlink_node *node = NULL, *node_next = NULL; + dlink_node *node, *node_next; DLINK_FOREACH_SAFE(node, node_next, client_p->connection->confs.head) { @@ -430,18 +427,14 @@ } } -/* attach_conf() - * - * inputs - client pointer - * - conf pointer - * output - - * side effects - Associate a specific configuration entry to a *local* - * client (this is the one which used in accepting the - * connection). Note, that this automatically changes the - * attachment if there was an old one... +/*! \brief Associate a specific configuration entry to a *local* client (this + * is the one which used in accepting the connection). Note, that this + * automatically changes the attachment if there was an old one. + * \param client_p Client to attach the conf to + * \param conf Configuration record to attach */ int -attach_conf(struct Client *client_p, struct MaskItem *conf) +conf_attach(struct Client *client_p, struct MaskItem *conf) { if (dlinkFind(&client_p->connection->confs, conf)) return 1; @@ -459,37 +452,6 @@ return 0; } -/* attach_connect_block() - * - * inputs - pointer to server to attach - * - name of server - * - hostname of server - * output - true (1) if both are found, otherwise return false (0) - * side effects - find connect block and attach them to connecting client - */ -int -attach_connect_block(struct Client *client_p, const char *name, - const char *host) -{ - dlink_node *node = NULL; - - assert(host); - - DLINK_FOREACH(node, connect_items.head) - { - struct MaskItem *conf = node->data; - - if (irccmp(conf->name, name) || - irccmp(conf->host, host)) - continue; - - attach_conf(client_p, conf); - return 1; - } - - return 0; -} - /* find_conf_name() * * inputs - pointer to conf link list to search @@ -518,28 +480,20 @@ return NULL; } -/* find_matching_name_conf() - * - * inputs - type of link list to look in - * - pointer to name string to find - * - pointer to user - * - pointer to host - * - optional flags to match on as well - * output - NULL or pointer to found struct MaskItem - * side effects - looks for a match on name field +/*! \brief Find a connect {} conf that has a name that matches \a name. + * \param name Name to match + * \param compare Pointer to function to be used for string matching */ struct MaskItem * -connect_find(const char *name, const char *host, int (*compare)(const char *, const char *)) +connect_find(const char *name, int (*compare)(const char *, const char *)) { - dlink_node *node = NULL; + dlink_node *node; DLINK_FOREACH(node, connect_items.head) { struct MaskItem *conf = node->data; - if (name && !compare(name, conf->name)) - return conf; - if (host && !compare(host, conf->host)) + if (!compare(name, conf->name)) return conf; } @@ -629,7 +583,6 @@ ConfigServerInfo.max_nick_length = 9; ConfigServerInfo.max_topic_length = 80; ConfigServerInfo.hub = 0; - ConfigServerInfo.libgeoip_database_options = 0; log_del_all(); @@ -905,7 +858,7 @@ const char * oper_privs_as_string(const unsigned int flags) { - static char buf[sizeof(flag_table) / sizeof(struct oper_flags)]; + static char buf[sizeof(flag_table) / sizeof(flag_table[0])]; char *p = buf; for (const struct oper_flags *tab = flag_table; tab->flag; ++tab) @@ -1020,13 +973,6 @@ pseudo_clear(); /* Clear pseudo {} items */ -#ifdef HAVE_LIBGEOIP - GeoIP_delete(GeoIPv4_ctx); - GeoIPv4_ctx = NULL; - GeoIP_delete(GeoIPv6_ctx); - GeoIPv6_ctx = NULL; -#endif - /* Clean out ConfigServerInfo */ xfree(ConfigServerInfo.description); ConfigServerInfo.description = NULL; @@ -1034,10 +980,6 @@ ConfigServerInfo.network_name = NULL; xfree(ConfigServerInfo.network_desc); ConfigServerInfo.network_desc = NULL; - xfree(ConfigServerInfo.libgeoip_ipv6_database_file); - ConfigServerInfo.libgeoip_ipv6_database_file = NULL; - xfree(ConfigServerInfo.libgeoip_ipv4_database_file); - ConfigServerInfo.libgeoip_ipv4_database_file = NULL; xfree(ConfigServerInfo.rsa_private_key_file); ConfigServerInfo.rsa_private_key_file = NULL; xfree(ConfigServerInfo.ssl_certificate_file); @@ -1059,8 +1001,11 @@ xfree(ConfigAdminInfo.description); ConfigAdminInfo.description = NULL; + /* Clean out ConfigServerHide */ xfree(ConfigServerHide.flatten_links_file); ConfigServerHide.flatten_links_file = NULL; + xfree(ConfigServerHide.hidden_name); + ConfigServerHide.hidden_name = NULL; /* Clean out listeners */ listener_close_marked(); @@ -1146,7 +1091,7 @@ snprintf(chanlimit, sizeof(chanlimit), "#:%u", ConfigChannel.max_channels); isupport_add("CHANLIMIT", chanlimit, -1); - snprintf(chanmodes, sizeof(chanmodes), "%s", "beI,k,l,cimnprstuCLMORST"); + snprintf(chanmodes, sizeof(chanmodes), "%s", "beI,k,l,cimnprstuCLMNORST"); isupport_add("CHANNELLEN", NULL, CHANNELLEN); isupport_add("TOPICLEN", NULL, ConfigServerInfo.max_topic_length); isupport_add("CHANMODES", chanmodes, -1); diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/conf_class.c ircd-hybrid-8.2.24+dfsg.1/src/conf_class.c --- ircd-hybrid-8.2.22+dfsg.1/src/conf_class.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/conf_class.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file conf_class.c * \brief Configuration managment for class{} blocks - * \version $Id: conf_class.c 8058 2017-03-23 16:13:10Z michael $ + * \version $Id: conf_class.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -47,7 +47,7 @@ struct ClassItem * class_make(void) { - struct ClassItem *const class = xcalloc(sizeof(*class)); + struct ClassItem *class = xcalloc(sizeof(*class)); class->active = 1; class->con_freq = DEFAULT_CONNECTFREQUENCY; @@ -81,7 +81,7 @@ } const struct ClassItem * -get_class_ptr(const dlink_list *const list) +class_get_ptr(const dlink_list *const list) { const dlink_node *const node = list->head; @@ -101,25 +101,25 @@ const char * get_client_class(const dlink_list *const list) { - return get_class_ptr(list)->name; + return class_get_ptr(list)->name; } unsigned int get_client_ping(const dlink_list *const list) { - return get_class_ptr(list)->ping_freq; + return class_get_ptr(list)->ping_freq; } unsigned int get_sendq(const dlink_list *const list) { - return get_class_ptr(list)->max_sendq; + return class_get_ptr(list)->max_sendq; } unsigned int get_recvq(const dlink_list *const list) { - return get_class_ptr(list)->max_recvq; + return class_get_ptr(list)->max_recvq; } /* @@ -165,7 +165,7 @@ { struct ClassItem *class = node->data; - if (!class->active && !class->ref_count) + if (class->active == 0 && class->ref_count == 0) { destroy_cidr_class(class); class_free(class); @@ -210,7 +210,7 @@ } } - struct CidrItem *cidr = xcalloc(sizeof(struct CidrItem)); + struct CidrItem *cidr = xcalloc(sizeof(*cidr)); cidr->number_on_this_cidr = 1; cidr->mask = *ip; mask_addr(&cidr->mask, class->cidr_bitlen_ipv4); @@ -232,7 +232,7 @@ } } - struct CidrItem *cidr = xcalloc(sizeof(struct CidrItem)); + struct CidrItem *cidr = xcalloc(sizeof(*cidr)); cidr->number_on_this_cidr = 1; cidr->mask = *ip; mask_addr(&cidr->mask, class->cidr_bitlen_ipv6); diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/conf_cluster.c ircd-hybrid-8.2.24+dfsg.1/src/conf_cluster.c --- ircd-hybrid-8.2.22+dfsg.1/src/conf_cluster.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/conf_cluster.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,14 +21,15 @@ /*! \file conf_cluster.c * \brief Implements cluster {} block configuration management. - * \version $Id: conf_cluster.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: conf_cluster.c 8338 2018-03-03 22:26:59Z michael $ */ #include "stdinc.h" +#include "ircd_defs.h" #include "list.h" #include "memory.h" #include "conf_cluster.h" -#include "server.h" +#include "server_capab.h" #include "send.h" diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/conf_db.c ircd-hybrid-8.2.24+dfsg.1/src/conf_db.c --- ircd-hybrid-8.2.22+dfsg.1/src/conf_db.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/conf_db.c 2018-04-04 22:33:37.000000000 +0000 @@ -2,7 +2,7 @@ * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * * Copyright (C) 1996-2009 by Andrew Church - * Copyright (c) 2012-2017 ircd-hybrid development team + * Copyright (c) 2012-2018 ircd-hybrid development team * * 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 @@ -22,7 +22,7 @@ /*! \file conf_db.c * \brief Includes file utilities for database handling - * \version $Id: conf_db.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: conf_db.c 8280 2018-02-20 19:30:33Z michael $ */ diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/conf_gecos.c ircd-hybrid-8.2.24+dfsg.1/src/conf_gecos.c --- ircd-hybrid-8.2.22+dfsg.1/src/conf_gecos.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/conf_gecos.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1998-2017 ircd-hybrid development team + * Copyright (c) 1998-2018 ircd-hybrid development team * * 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 @@ -21,14 +21,13 @@ /*! \file conf_gecos.c * \brief Implements gecos {} block configuration management. - * \version $Id: conf_gecos.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: conf_gecos.c 8472 2018-04-03 12:54:41Z michael $ */ #include "stdinc.h" #include "list.h" #include "send.h" #include "client.h" -#include "irc_string.h" #include "ircd.h" #include "memory.h" #include "conf.h" @@ -53,7 +52,7 @@ { struct GecosItem *gecos = node->data; - if (!gecos->in_database) + if (gecos->in_database == 0) gecos_delete(gecos); } } @@ -101,7 +100,7 @@ { struct GecosItem *gecos = node->data; - if (!gecos->expire || gecos->expire > CurrentTime) + if (gecos->expire == 0 || gecos->expire > CurrentTime) continue; if (ConfigGeneral.tkline_expire_notices) diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/conf_lexer.c ircd-hybrid-8.2.24+dfsg.1/src/conf_lexer.c --- ircd-hybrid-8.2.22+dfsg.1/src/conf_lexer.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/conf_lexer.c 2018-04-04 22:33:37.000000000 +0000 @@ -8,7 +8,7 @@ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 6 -#define YY_FLEX_SUBMINOR_VERSION 2 +#define YY_FLEX_SUBMINOR_VERSION 4 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif @@ -83,10 +83,16 @@ #define UINT32_MAX (4294967295U) #endif +#ifndef SIZE_MAX +#define SIZE_MAX (~(size_t)0) +#endif + #endif /* ! C99 */ #endif /* ! FLEXINT_H */ +/* begin standard C++ headers. */ + /* TODO: this is always defined, so inline it */ #define yyconst const @@ -118,7 +124,7 @@ /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ -#define YY_NEW_FILE yyrestart(yyin ) +#define YY_NEW_FILE yyrestart( yyin ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ @@ -214,7 +220,7 @@ int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ - + /* Whether to try to fill the input buffer when we reach the * end of it. */ @@ -284,7 +290,7 @@ static void yyensure_buffer_stack ( void ); static void yy_load_buffer_state ( void ); static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file ); -#define YY_FLUSH_BUFFER yy_flush_buffer(YY_CURRENT_BUFFER ) +#define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER ) YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size ); YY_BUFFER_STATE yy_scan_string ( const char *yy_str ); @@ -300,7 +306,7 @@ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer(yyin,YY_BUF_SIZE ); \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } @@ -309,7 +315,7 @@ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (); \ YY_CURRENT_BUFFER_LVALUE = \ - yy_create_buffer(yyin,YY_BUF_SIZE ); \ + yy_create_buffer( yyin, YY_BUF_SIZE ); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } @@ -349,8 +355,8 @@ (yy_hold_char) = *yy_cp; \ *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 264 -#define YY_END_OF_BUFFER 265 +#define YY_NUM_RULES 257 +#define YY_END_OF_BUFFER 258 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -358,198 +364,188 @@ flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static const flex_int16_t yy_accept[1722] = +static const flex_int16_t yy_accept[1633] = { 0, - 4, 4, 265, 263, 4, 3, 263, 5, 263, 263, - 6, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 263, 263, 263, 263, - 263, 263, 263, 263, 263, 263, 4, 3, 0, 7, - 5, 262, 0, 2, 5, 6, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 89, 0, 256, 0, 0, 0, 0, 0, - 0, 0, 261, 0, 0, 0, 0, 0, 0, 0, - - 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 4, 258, 256, 4, 3, 256, 5, 256, 256, + 6, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, + 256, 256, 256, 256, 256, 256, 4, 3, 0, 7, + 5, 255, 0, 2, 5, 6, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 243, 0, - 0, 0, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 80, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, + 0, 0, 88, 0, 249, 0, 0, 0, 0, 0, + 0, 0, 254, 0, 0, 0, 0, 0, 0, 0, + 228, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 167, 0, 0, 0, 0, 0, 0, 181, - 0, 0, 184, 0, 0, 0, 0, 190, 0, 192, + 0, 0, 0, 0, 0, 0, 236, 0, 0, 0, + 0, 0, 43, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 234, 0, 0, 0, 0, 0, 15, 0, - 0, 19, 251, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 242, 35, 0, 0, 42, + 0, 0, 0, 79, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 102, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 59, 0, 0, 64, 0, 0, 0, 0, 0, - 0, 79, 245, 0, 0, 0, 90, 91, 92, 0, - 93, 0, 0, 0, 0, 0, 0, 0, 107, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 131, 132, - 0, 0, 0, 138, 0, 0, 0, 0, 144, 149, - 0, 0, 154, 0, 157, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 171, 0, 0, 0, 0, - 0, 0, 185, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 214, 0, 0, 0, 0, - - 0, 0, 0, 223, 0, 0, 0, 0, 0, 241, - 0, 0, 0, 237, 0, 0, 9, 0, 0, 0, - 0, 250, 0, 0, 23, 0, 0, 0, 28, 29, - 0, 0, 0, 0, 36, 0, 0, 0, 48, 0, - 52, 0, 0, 0, 0, 0, 0, 60, 0, 65, - 0, 0, 0, 0, 0, 0, 0, 244, 0, 0, - 0, 0, 255, 0, 0, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 260, 0, 0, 0, 0, 0, 0, 0, 239, + 0, 0, 0, 0, 0, 0, 0, 161, 0, 0, + 0, 0, 0, 0, 175, 0, 0, 178, 0, 0, + 0, 0, 184, 0, 186, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 227, 0, 0, + 0, 0, 0, 15, 0, 0, 19, 244, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, + 34, 0, 0, 41, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 163, 0, - 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, - 0, 0, 0, 186, 0, 188, 191, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 224, 0, 0, 0, 240, - 230, 0, 232, 236, 0, 0, 0, 11, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 55, - 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, - 0, 0, 0, 0, 0, 0, 254, 0, 0, 0, + 0, 0, 0, 0, 0, 58, 0, 0, 63, 0, + 0, 0, 0, 0, 0, 78, 238, 0, 0, 0, + 89, 90, 91, 0, 92, 0, 0, 0, 0, 0, + 0, 103, 0, 0, 0, 0, 0, 0, 0, 125, + 126, 0, 0, 0, 132, 0, 0, 0, 0, 138, + 143, 0, 0, 148, 0, 151, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 165, 0, 0, 0, + 0, 0, 0, 179, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 207, 0, 0, 0, 0, + 0, 0, 0, 216, 0, 0, 0, 0, 0, 234, - 0, 0, 0, 104, 105, 108, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, - 0, 247, 0, 0, 0, 129, 238, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 152, 0, 0, 0, 0, 159, 0, 0, 162, 0, - 0, 166, 168, 0, 0, 0, 249, 0, 176, 0, - 0, 182, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 208, 0, 0, 0, 0, 215, 216, 0, - 0, 0, 220, 0, 0, 225, 226, 0, 229, 0, + 0, 0, 0, 230, 0, 0, 9, 0, 0, 0, + 0, 243, 0, 0, 23, 0, 0, 27, 28, 0, + 0, 0, 0, 35, 0, 0, 0, 47, 0, 51, + 0, 0, 0, 0, 0, 0, 59, 0, 64, 0, + 0, 0, 0, 0, 0, 0, 237, 0, 0, 0, + 0, 248, 0, 0, 94, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 253, + 0, 0, 0, 0, 0, 232, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 157, 0, 0, 0, 0, 0, - 0, 0, 24, 0, 0, 30, 31, 32, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 66, 69, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 169, 0, 0, 0, 0, 0, 0, 180, + 0, 182, 185, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 217, 0, 0, 0, 233, 223, 0, 225, 229, 0, + 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 246, 0, 0, 0, 130, 133, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 158, 0, 0, 0, 0, - 0, 170, 0, 0, 248, 0, 0, 0, 179, 0, + 0, 0, 0, 54, 0, 0, 0, 0, 0, 0, + 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, + 247, 0, 0, 0, 0, 0, 100, 101, 104, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 252, 0, 240, 0, 0, 123, 231, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 217, 218, 0, 221, 0, 227, 0, 0, 0, 0, - 0, 0, 0, 0, 16, 0, 0, 21, 0, 0, + 0, 146, 0, 0, 0, 0, 153, 0, 0, 156, + 0, 0, 160, 162, 0, 0, 0, 242, 0, 170, + 0, 0, 176, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 201, 0, 0, 0, 0, 208, 209, 0, + 0, 0, 213, 0, 0, 218, 219, 0, 222, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 56, 0, 0, 0, 0, 0, 0, 74, 0, - 0, 81, 0, 0, 0, 0, 0, 0, 253, 0, - 0, 0, 0, 0, 0, 0, 110, 0, 0, 114, - 0, 0, 0, 0, 0, 0, 0, 258, 0, 125, - 0, 0, 0, 0, 0, 141, 0, 140, 0, 147, - 0, 0, 0, 0, 153, 0, 0, 0, 0, 0, + 0, 0, 24, 0, 29, 30, 31, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 65, + 68, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 200, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 239, 0, 0, 124, 127, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 18, 0, 22, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 53, 0, - 0, 0, 0, 0, 0, 73, 0, 0, 0, 83, - 0, 0, 0, 0, 252, 0, 0, 0, 0, 100, - 0, 0, 0, 0, 0, 0, 116, 0, 0, 0, - 0, 123, 257, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 150, 0, 156, 0, 0, - 164, 165, 169, 0, 0, 0, 0, 0, 0, 0, + 0, 152, 0, 0, 0, 0, 0, 164, 0, 0, + 241, 0, 0, 0, 173, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 219, - 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, - 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 58, - 0, 70, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 109, 0, - 0, 113, 0, 0, 0, 0, 120, 0, 0, 0, + 0, 0, 0, 0, 0, 210, 211, 0, 214, 0, + 220, 0, 0, 0, 0, 0, 0, 0, 0, 16, - 0, 128, 134, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 160, 0, 0, 0, 0, 177, 178, - 180, 183, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 21, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 55, 0, 0, 0, 0, + 0, 0, 73, 0, 0, 80, 0, 0, 0, 0, + 0, 0, 246, 0, 0, 0, 0, 0, 0, 106, + 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, + 251, 120, 0, 0, 0, 0, 135, 0, 134, 0, + 141, 0, 0, 0, 0, 147, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 25, 0, 33, 0, 0, 0, 0, 43, 0, - 0, 0, 0, 0, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 115, 0, 0, 0, 121, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 146, 0, 155, 161, 172, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 222, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 45, 0, 0, 0, 0, 54, 0, 0, 0, - 77, 0, 0, 0, 0, 0, 0, 0, 0, 96, - 0, 0, 0, 0, 0, 0, 112, 0, 0, 0, - 0, 124, 0, 0, 136, 137, 0, 0, 0, 0, - 0, 0, 0, 0, 187, 189, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - - 0, 0, 212, 0, 0, 0, 233, 0, 10, 0, + 0, 0, 18, 0, 22, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 52, 0, 0, + 0, 0, 0, 0, 72, 0, 0, 0, 82, 0, + 0, 0, 0, 245, 0, 0, 0, 0, 99, 0, + 0, 0, 0, 0, 112, 0, 0, 0, 0, 119, + 250, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 144, 0, 150, 0, 0, 158, 159, 163, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 51, 0, 61, 0, 0, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 119, 0, 0, 135, 139, 0, 143, 0, 0, - 0, 0, 174, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 210, 0, 213, - 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, - 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 67, 0, 0, 0, 0, - 0, 0, 111, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 212, 0, 0, 0, 0, + 0, 1, 0, 1, 0, 0, 0, 0, 17, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 209, 0, 0, 0, 8, - 13, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 50, 0, 0, 0, 0, 76, 82, 0, 0, 0, - 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, - 0, 118, 0, 126, 142, 0, 0, 0, 0, 0, - 195, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 26, 27, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - + 0, 0, 0, 0, 57, 0, 69, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 117, 122, 0, 0, 145, 151, 0, 0, 0, - 0, 0, 0, 201, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, + 0, 105, 0, 0, 109, 0, 0, 0, 0, 116, + 0, 0, 0, 128, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 154, 0, 0, 0, 0, 171, + 172, 174, 177, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 98, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 198, 0, 202, 203, 204, 205, 206, - 207, 0, 0, 0, 0, 0, 37, 0, 0, 0, - 0, 57, 0, 63, 0, 0, 0, 86, 0, 88, - 0, 97, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 41, - 0, 0, 62, 0, 0, 85, 0, 0, 99, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 34, 0, 0, 0, 0, 75, - 84, 87, 0, 0, 0, 0, 0, 0, 173, 193, + 0, 0, 0, 32, 0, 0, 0, 0, 42, 0, + 0, 0, 0, 0, 0, 0, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 46, 0, 94, 0, 0, 0, 0, 148, 0, 0, - 197, 0, 211, 228, 231, 0, 0, 0, 0, 0, - 0, 0, 127, 0, 0, 0, 0, 0, 40, 47, - 0, 0, 0, 0, 196, 0, 0, 39, 0, 0, - - 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 14, 102, 103, 194, 0, 199, - 0 + 0, 0, 0, 111, 0, 0, 0, 117, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 140, 0, 149, + 155, 166, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 215, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 44, 0, + + 0, 0, 0, 53, 0, 0, 0, 76, 0, 0, + 0, 0, 0, 0, 0, 0, 95, 0, 0, 0, + 0, 108, 0, 0, 0, 0, 0, 0, 130, 131, + 0, 0, 0, 0, 0, 0, 0, 0, 181, 183, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 205, 0, 0, 0, + 226, 0, 10, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 50, 0, 60, 0, 0, 77, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 115, 0, 0, 129, 133, 0, 137, 0, + + 0, 0, 0, 168, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 203, 0, + 206, 0, 0, 0, 0, 0, 20, 0, 0, 0, + 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 66, 0, 0, 0, + 107, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 202, 0, 0, 0, 8, 13, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 49, 0, + 0, 0, 0, 75, 81, 0, 0, 0, 0, 0, + + 0, 67, 0, 0, 0, 0, 114, 0, 121, 136, + 0, 0, 0, 0, 0, 189, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 25, 26, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 113, 118, 0, 0, 139, 145, 0, + 0, 0, 0, 0, 0, 194, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 37, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 97, 0, 0, 0, 0, 0, + + 0, 0, 192, 0, 195, 196, 197, 198, 199, 200, + 0, 0, 0, 0, 0, 36, 0, 0, 0, 0, + 56, 0, 62, 0, 0, 0, 85, 0, 87, 0, + 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 40, 0, 0, 61, 0, + 0, 84, 0, 0, 98, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 33, 0, 0, + 0, 0, 74, 83, 86, 0, 0, 0, 167, 187, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 45, 0, 93, 0, 142, 0, 0, 191, 0, 204, + + 221, 224, 0, 0, 0, 0, 122, 0, 0, 0, + 0, 0, 39, 46, 0, 190, 0, 0, 38, 0, + 0, 0, 0, 0, 0, 0, 0, 14, 188, 0, + 193, 0 } ; static const YY_CHAR yy_ec[256] = @@ -595,395 +591,375 @@ 1, 1, 1, 1, 1, 1 } ; -static const flex_int16_t yy_base[1727] = +static const flex_int16_t yy_base[1638] = { 0, - 0, 0, 3300, 3301, 3297, 0, 64, 0, 62, 64, + 0, 0, 3133, 3134, 3130, 0, 64, 0, 62, 64, 64, 96, 43, 146, 198, 50, 68, 74, 124, 107, 50, 155, 61, 240, 282, 51, 330, 57, 158, 372, - 419, 187, 74, 204, 72, 83, 3296, 0, 82, 3301, - 0, 3301, 110, 3301, 0, 134, 135, 130, 133, 144, - 142, 148, 174, 167, 172, 209, 178, 224, 193, 242, - 233, 205, 186, 471, 212, 242, 234, 258, 258, 272, - 253, 254, 266, 267, 293, 280, 277, 296, 290, 299, - 291, 286, 291, 306, 291, 305, 311, 310, 328, 344, - 330, 350, 316, 344, 341, 358, 408, 354, 362, 393, - - 376, 407, 386, 418, 432, 388, 387, 404, 428, 436, - 427, 517, 441, 456, 452, 457, 457, 469, 467, 460, - 472, 486, 471, 477, 484, 3257, 489, 491, 563, 502, - 498, 517, 526, 500, 515, 525, 535, 534, 532, 518, - 3301, 537, 561, 525, 540, 556, 560, 3256, 564, 565, - 577, 564, 564, 565, 566, 576, 576, 580, 574, 589, - 576, 597, 575, 601, 3301, 612, 601, 599, 612, 605, - 621, 615, 624, 618, 629, 628, 627, 623, 621, 632, - 636, 634, 639, 621, 628, 3255, 634, 642, 181, 638, - 634, 657, 644, 664, 669, 670, 660, 667, 3301, 672, - - 3254, 664, 685, 672, 668, 672, 669, 671, 688, 688, - 696, 694, 677, 690, 688, 706, 703, 688, 703, 707, - 703, 715, 722, 711, 718, 715, 719, 734, 721, 719, - 733, 742, 3301, 729, 725, 3253, 731, 747, 730, 3301, - 736, 737, 3301, 752, 747, 740, 747, 3301, 757, 3252, - 763, 768, 761, 771, 772, 783, 786, 770, 780, 782, - 787, 792, 786, 781, 781, 789, 791, 797, 798, 807, - 797, 795, 3301, 802, 804, 815, 815, 3251, 3301, 831, - 3250, 3301, 816, 832, 833, 828, 830, 834, 3249, 827, - 843, 829, 849, 846, 847, 3301, 3301, 846, 833, 3301, - - 837, 857, 855, 3248, 851, 840, 862, 852, 852, 869, - 868, 3301, 865, 865, 3301, 869, 871, 876, 3247, 888, - 895, 3301, 877, 886, 882, 883, 3301, 3301, 3301, 900, - 3246, 904, 902, 897, 3245, 904, 908, 898, 912, 944, - 916, 926, 920, 919, 940, 3244, 930, 935, 3301, 3301, - 936, 3243, 937, 3301, 943, 943, 951, 956, 970, 3301, - 3242, 940, 3301, 3241, 3301, 963, 971, 981, 977, 978, - 979, 981, 981, 981, 1002, 3240, 988, 991, 990, 1001, - 1003, 991, 3301, 1000, 1010, 1008, 998, 1040, 1017, 1003, - 1019, 1005, 1015, 1035, 1045, 3301, 1042, 1030, 1045, 1046, - - 1044, 1039, 1050, 3301, 1048, 1041, 1047, 3239, 1046, 1046, - 1047, 1066, 1063, 1050, 1051, 1055, 1067, 1073, 1087, 1068, - 1087, 3301, 1079, 1086, 3301, 1095, 3238, 1102, 3301, 3301, - 1103, 1095, 1108, 3237, 3301, 1100, 1104, 1102, 3236, 1106, - 3301, 1100, 1114, 1099, 1106, 1117, 1108, 3301, 1118, 3301, - 1125, 1113, 1121, 1118, 1129, 1140, 1142, 3301, 1151, 1149, - 1146, 1153, 1141, 1159, 1138, 3235, 3234, 1152, 1151, 1153, - 1149, 1165, 1167, 1171, 1165, 1162, 1172, 1160, 1189, 1176, - 1179, 1165, 1180, 1181, 1203, 1205, 1197, 1211, 1210, 1197, - 1210, 1210, 1202, 1203, 1217, 1211, 1206, 1207, 3233, 1213, - - 1206, 1248, 1237, 1217, 1223, 1231, 1246, 1246, 3301, 1250, - 1254, 1259, 1250, 1265, 1253, 1269, 3301, 1258, 1257, 1273, - 1262, 1274, 3232, 3301, 1279, 3231, 3301, 1301, 1273, 1277, - 1284, 3230, 1268, 1272, 1289, 1275, 1293, 1294, 1306, 1303, - 1304, 1311, 1300, 1309, 1309, 3258, 1309, 1313, 1325, 3301, - 3301, 1310, 3228, 3301, 1326, 3227, 1312, 3301, 1323, 1318, - 1321, 1321, 1330, 1333, 1331, 1336, 1350, 1355, 1347, 1363, - 1348, 1355, 1351, 1356, 1369, 1363, 1363, 1358, 3226, 3301, - 1378, 3225, 1367, 1368, 1371, 1365, 1381, 3224, 1385, 1375, - 1384, 1384, 1371, 3223, 1391, 3222, 3301, 1388, 1380, 1413, - - 1418, 1401, 1398, 3301, 3301, 3301, 1416, 1410, 1424, 1413, - 1418, 1409, 1429, 1430, 1422, 1418, 1421, 1418, 3301, 1419, - 3221, 1421, 1429, 1428, 1442, 1425, 3301, 1442, 1446, 1453, - 1445, 1456, 1454, 1469, 3220, 1460, 1474, 1464, 1466, 1479, - 3301, 1464, 1469, 1476, 1482, 3301, 1467, 3219, 3301, 1474, - 1485, 3301, 1489, 1472, 1469, 1485, 1476, 1495, 1489, 1496, - 1484, 3301, 1495, 1498, 1501, 1508, 1511, 1515, 3218, 1511, - 1514, 1555, 3301, 1522, 3217, 3216, 1522, 3301, 3301, 1533, - 1535, 1525, 3301, 1541, 1540, 3301, 1529, 1535, 3301, 3215, - 1546, 1547, 1539, 1538, 1559, 1568, 1566, 1560, 1570, 1580, - - 1577, 1573, 3301, 1589, 1572, 3301, 3301, 1588, 1585, 3214, - 1580, 3213, 1592, 3212, 1597, 1592, 1593, 1591, 1604, 3211, - 3301, 3301, 1607, 1600, 1602, 1613, 1608, 1604, 1612, 1622, - 1613, 1650, 1629, 1629, 1611, 1628, 1626, 1635, 1623, 1628, - 1641, 1629, 1642, 1656, 1654, 1651, 1662, 1655, 1666, 1663, - 1663, 1671, 1671, 1674, 3301, 1673, 1656, 1681, 3301, 3301, - 1683, 1670, 3210, 1684, 3209, 1687, 1678, 1678, 1673, 1688, - 1687, 1698, 1704, 1694, 1697, 3301, 1703, 1704, 1696, 1699, - 1719, 3301, 1717, 1702, 3301, 1707, 1719, 1716, 3301, 1722, - 1717, 1721, 1723, 1722, 1735, 1731, 1745, 1727, 1744, 3208, - - 3207, 3206, 3205, 3204, 3203, 3202, 1747, 1749, 1752, 3201, - 3301, 3301, 1757, 3301, 1756, 3301, 3200, 1756, 1742, 129, - 1766, 1750, 1760, 1761, 3301, 1762, 1773, 3301, 1776, 1778, - 1781, 1773, 1768, 3199, 1786, 1778, 1809, 1783, 1793, 1800, - 1797, 3301, 1792, 1813, 1805, 1804, 1819, 1802, 3301, 1817, - 1803, 3301, 1813, 1825, 1820, 1829, 1812, 1819, 1820, 1835, - 1827, 1837, 1838, 1840, 3198, 1837, 3197, 1842, 1857, 3301, - 1840, 1850, 3196, 1859, 1864, 1867, 1863, 1853, 1873, 3301, - 1866, 1868, 1865, 1862, 1878, 3301, 1878, 3301, 1881, 3301, - 1872, 1865, 1889, 1874, 3301, 1884, 1895, 1890, 1901, 1887, - - 1888, 1898, 1901, 1915, 1899, 1919, 1918, 1922, 1906, 1923, - 1909, 1921, 1928, 1930, 1924, 1937, 1939, 3301, 1938, 1929, - 1931, 1932, 1933, 1934, 1939, 3195, 1934, 1954, 1957, 1960, - 1957, 1965, 1961, 1967, 404, 3230, 3220, 1958, 1977, 3192, - 3191, 1959, 3301, 3187, 3301, 1972, 1977, 1978, 1976, 1975, - 1974, 1989, 1977, 1973, 1995, 1993, 3185, 1996, 3301, 1988, - 1997, 1983, 1999, 1992, 2000, 3301, 3183, 2013, 2008, 3181, - 2011, 2012, 2010, 2026, 3301, 2019, 3179, 2028, 2033, 3301, - 2032, 2017, 2026, 2038, 2032, 2041, 3301, 2054, 2030, 2030, - 3176, 3301, 3301, 2049, 2042, 2050, 2036, 2039, 2062, 2068, - - 2060, 2058, 2077, 3174, 2075, 3173, 2076, 3301, 2081, 2075, - 3301, 3301, 3301, 2072, 2070, 2068, 2087, 2080, 2092, 2094, - 2082, 2093, 2098, 2088, 2105, 2097, 2092, 2104, 2107, 2104, - 2105, 2107, 2110, 2112, 2114, 2129, 2118, 2127, 2135, 3301, - 2127, 2127, 2125, 2132, 3205, 3202, 3191, 3190, 2127, 2131, - 2146, 2149, 3301, 2133, 2153, 2146, 2145, 2148, 2149, 2156, - 2146, 2160, 2155, 2166, 2167, 2179, 2179, 2177, 2170, 3301, - 2179, 3301, 2189, 2189, 2178, 2195, 2178, 2185, 2198, 2204, - 2197, 3162, 2192, 2207, 2198, 2189, 2215, 2201, 3301, 2217, - 2207, 3301, 2205, 2220, 2224, 2222, 3301, 2215, 2224, 2230, - - 2236, 3301, 3301, 2227, 2228, 2235, 2234, 1773, 2231, 2231, - 2234, 2235, 2252, 3301, 2254, 2240, 2257, 2249, 3301, 3301, - 3301, 3301, 2257, 2265, 2261, 1522, 2251, 2263, 2272, 2273, - 2263, 2278, 2280, 2283, 2285, 2287, 2289, 2281, 2292, 2293, - 2283, 2292, 2299, 2293, 2288, 2295, 2290, 2299, 2304, 2294, - 2319, 3301, 1517, 3301, 2303, 2309, 2311, 1516, 3301, 2318, - 2322, 2317, 2327, 2323, 2319, 1514, 2331, 3301, 2326, 2329, - 2341, 2331, 2341, 2343, 2333, 2342, 2341, 2342, 2356, 2347, - 1512, 2348, 2348, 2354, 2355, 3301, 2375, 2364, 2366, 3301, - 2375, 2376, 2380, 2368, 2387, 2386, 2378, 2393, 2379, 2387, - - 3301, 2395, 3301, 3301, 3301, 1506, 2391, 2407, 2407, 2411, - 2403, 2407, 2403, 2408, 1256, 2421, 2406, 2408, 2410, 2412, - 2414, 2415, 2413, 2422, 2419, 2439, 2424, 3301, 2431, 2432, - 2430, 2437, 2436, 2441, 2449, 2454, 2456, 2446, 2464, 1203, - 2466, 3301, 1156, 2450, 2469, 2455, 3301, 2462, 2459, 2465, - 3301, 2473, 2465, 1052, 935, 2466, 910, 2482, 2479, 3301, - 2485, 897, 2488, 2493, 218, 2491, 3301, 2485, 2494, 2499, - 2492, 3301, 2507, 2506, 3301, 3301, 2508, 2508, 2503, 892, - 2505, 2509, 2512, 2520, 3301, 3301, 2526, 2520, 2515, 2512, - 533, 2530, 2534, 522, 510, 471, 464, 436, 429, 2524, - - 2535, 2536, 3301, 2541, 2538, 2527, 3301, 2530, 3301, 2537, - 2533, 2535, 2542, 419, 2557, 2556, 2552, 2563, 2566, 2555, - 3301, 2559, 418, 2563, 2562, 3301, 2561, 2580, 416, 2581, - 397, 2573, 2570, 2587, 2584, 2592, 390, 384, 2590, 2589, - 2577, 3301, 2592, 2584, 3301, 3301, 2602, 3301, 2606, 2608, - 2598, 2611, 3301, 2598, 2601, 2611, 2618, 2622, 2621, 2619, - 2617, 2620, 2622, 2623, 2625, 2627, 2624, 3301, 373, 3301, - 2643, 2623, 2645, 2646, 358, 3301, 2629, 2650, 2641, 2651, - 2649, 2654, 2658, 344, 367, 2648, 2666, 335, 2655, 2660, - 2666, 2682, 2674, 2664, 2681, 363, 2674, 2682, 2691, 2693, - - 2692, 2694, 3301, 2695, 2695, 2684, 2701, 2689, 2709, 2709, - 2703, 2692, 2715, 2702, 327, 2721, 2717, 2721, 2728, 2721, - 2722, 2724, 2725, 2726, 2729, 3301, 2731, 2726, 326, 3301, - 3301, 2735, 267, 2742, 2731, 2741, 2741, 2752, 2757, 2756, - 3301, 2752, 2759, 2759, 2754, 3301, 3301, 2757, 2759, 2767, - 2777, 2771, 323, 3301, 2761, 2774, 2775, 2771, 2791, 2792, - 2775, 3301, 2789, 294, 3301, 2787, 2781, 2797, 233, 195, - 3301, 2786, 191, 2794, 2803, 2806, 2799, 2800, 2801, 2803, - 2806, 2810, 2808, 146, 2813, 2823, 3301, 3301, 2829, 2818, - 2829, 2821, 2827, 2829, 2829, 2843, 2835, 2836, 2835, 2839, - - 2833, 2843, 2844, 2847, 2850, 2850, 2860, 2852, 2862, 2849, - 2852, 3301, 3301, 2857, 2865, 3301, 3301, 2873, 2876, 2879, - 2883, 2883, 2871, 3301, 2870, 2872, 2873, 2875, 2876, 2877, - 2885, 2905, 2903, 2891, 2898, 2894, 3301, 2912, 2898, 2905, - 2907, 2916, 2922, 2921, 2925, 2926, 2919, 2931, 2924, 2935, - 2933, 2924, 3301, 2944, 115, 2950, 2951, 2945, 2950, 2947, - 2950, 2944, 2941, 3301, 2944, 3301, 3301, 3301, 3301, 3301, - 3301, 2957, 2956, 2956, 2953, 2966, 3301, 113, 2955, 2970, - 2964, 3301, 2955, 3301, 2966, 2982, 2967, 3301, 2985, 3301, - 2979, 3301, 2982, 2981, 2996, 3001, 2992, 2988, 2996, 3001, - - 2988, 2992, 109, 3013, 3003, 3013, 3021, 3019, 3024, 3301, - 3014, 3027, 3301, 3010, 3011, 3301, 3022, 3029, 3301, 3023, - 3040, 3045, 3032, 3041, 3047, 3052, 3052, 3051, 3040, 3062, - 3059, 3064, 3049, 3063, 3301, 3057, 3065, 3057, 3064, 3301, - 3301, 3301, 3060, 3061, 3063, 3064, 3073, 3084, 3301, 3301, - 3087, 3075, 3090, 3086, 3081, 3091, 3096, 3101, 3090, 3100, - 3301, 3110, 3301, 3107, 3112, 3113, 3116, 3301, 3105, 3119, - 3301, 3119, 3301, 3301, 3301, 107, 3114, 3125, 3113, 3119, - 95, 85, 3301, 3119, 3132, 3122, 3119, 3122, 3301, 3301, - 3132, 3141, 3143, 3134, 3301, 3136, 3147, 3301, 3139, 3151, - - 3156, 3158, 3159, 3157, 3301, 3159, 3160, 3161, 3157, 3173, - 3175, 3177, 3164, 3178, 3301, 3301, 3301, 3301, 3175, 3301, - 3301, 99, 3228, 95, 93, 87 + 419, 187, 74, 204, 72, 83, 3129, 0, 82, 3134, + 0, 3134, 110, 3134, 0, 134, 135, 130, 133, 144, + 142, 148, 174, 167, 172, 209, 178, 196, 204, 210, + 203, 226, 221, 471, 242, 242, 233, 253, 254, 272, + 253, 247, 262, 254, 291, 264, 273, 292, 280, 298, + 293, 286, 287, 302, 288, 303, 307, 302, 319, 306, + 326, 322, 312, 344, 341, 365, 344, 351, 385, 364, + + 384, 357, 396, 420, 381, 381, 397, 416, 423, 417, + 517, 432, 450, 434, 430, 433, 446, 459, 434, 447, + 474, 460, 463, 475, 3090, 472, 474, 563, 487, 481, + 495, 524, 491, 501, 523, 519, 523, 522, 507, 3134, + 526, 531, 513, 522, 538, 532, 3089, 536, 547, 554, + 557, 559, 560, 567, 568, 571, 565, 579, 565, 588, + 565, 589, 3134, 592, 581, 577, 588, 580, 595, 591, + 610, 606, 618, 621, 621, 617, 615, 627, 631, 629, + 631, 617, 620, 3088, 624, 631, 181, 629, 624, 634, + 633, 647, 645, 632, 639, 3134, 647, 3087, 649, 671, + + 659, 654, 662, 679, 679, 686, 684, 666, 679, 676, + 677, 691, 676, 690, 693, 681, 693, 696, 684, 689, + 685, 690, 708, 694, 701, 717, 728, 3134, 719, 716, + 3086, 722, 737, 720, 3134, 725, 726, 3134, 740, 734, + 727, 733, 3134, 740, 3085, 731, 745, 739, 746, 744, + 753, 755, 739, 750, 754, 768, 775, 771, 770, 771, + 779, 778, 786, 785, 789, 785, 782, 3134, 789, 786, + 789, 789, 3084, 3134, 803, 3083, 3134, 789, 804, 805, + 799, 800, 3082, 797, 815, 801, 823, 826, 829, 3134, + 3134, 830, 821, 3134, 826, 843, 841, 3081, 837, 825, + + 847, 837, 836, 850, 841, 3134, 838, 839, 3134, 841, + 844, 848, 3080, 860, 882, 3134, 847, 854, 850, 855, + 3134, 3134, 3134, 865, 3079, 876, 883, 885, 3078, 893, + 883, 895, 927, 899, 904, 888, 902, 898, 905, 3134, + 3134, 903, 3077, 904, 3134, 907, 906, 915, 927, 951, + 3134, 3076, 919, 3134, 3075, 3134, 940, 949, 953, 943, + 945, 945, 946, 946, 947, 970, 3074, 957, 961, 959, + 979, 977, 963, 3134, 978, 992, 990, 979, 1001, 982, + 1001, 987, 994, 1011, 1012, 3134, 1011, 998, 1010, 1012, + 1011, 1006, 1018, 3134, 1017, 1010, 1021, 3073, 1019, 1019, + + 1023, 1043, 1042, 1030, 1029, 1033, 1046, 1053, 1047, 1044, + 1059, 3134, 1042, 1055, 3134, 1063, 1068, 3134, 3134, 1067, + 1059, 1072, 3072, 3134, 1066, 1072, 1071, 3071, 1075, 3134, + 1074, 1087, 1072, 1082, 1094, 1087, 3134, 1098, 3134, 1103, + 1091, 1100, 1098, 1105, 1110, 1107, 3134, 1114, 1115, 1112, + 1117, 1105, 1124, 1104, 3070, 3069, 1119, 1119, 1116, 1133, + 1135, 1143, 1137, 1134, 1153, 1135, 1149, 1151, 1154, 1142, + 1138, 1163, 1165, 1159, 1170, 1157, 1171, 1171, 1163, 1165, + 1181, 1177, 1173, 1172, 3068, 1183, 1176, 1196, 1203, 1195, + 1197, 1201, 1204, 1206, 3134, 1205, 1214, 1223, 1211, 1225, + + 1214, 1230, 3134, 1219, 1219, 1237, 1226, 1239, 3067, 3134, + 1244, 3066, 3134, 1260, 1238, 1247, 3065, 1233, 1234, 1253, + 1236, 1245, 1247, 1263, 1260, 1262, 1268, 1256, 1268, 1268, + 3093, 1268, 1272, 1285, 3134, 3134, 1270, 3063, 3134, 1287, + 3062, 1275, 3134, 1286, 1281, 1285, 1285, 1297, 1298, 1293, + 1300, 1305, 1299, 1315, 1300, 1308, 1308, 1313, 1325, 1318, + 1318, 1316, 3061, 3134, 1336, 3060, 1324, 1326, 1330, 1324, + 1341, 3059, 1347, 1337, 1347, 1347, 1334, 3058, 1352, 3057, + 3134, 1352, 1341, 1361, 1379, 1361, 3134, 3134, 3134, 1365, + 1357, 1372, 1362, 1372, 1363, 1383, 1387, 1378, 1374, 1378, + + 1376, 3134, 1377, 1380, 1390, 1389, 1386, 3134, 1401, 1403, + 1407, 1403, 1410, 1398, 1416, 3056, 1407, 1423, 1413, 1415, + 1430, 3134, 1418, 1422, 1429, 1435, 3134, 1420, 3055, 3134, + 1429, 1440, 3134, 1444, 1428, 1426, 1442, 1434, 1455, 1451, + 1452, 1441, 3134, 1449, 1456, 1455, 1452, 1458, 1462, 3054, + 1460, 1502, 3134, 1469, 3053, 3052, 1468, 3134, 3134, 1480, + 1487, 1473, 3134, 1489, 1491, 3134, 1480, 1485, 3134, 3051, + 1497, 1499, 1489, 1490, 1511, 1515, 1508, 1503, 1515, 1526, + 1524, 1520, 3134, 1516, 3134, 3134, 1533, 1532, 3050, 1527, + 3049, 1539, 3048, 1547, 1541, 1542, 1541, 1553, 3047, 3134, + + 3134, 1554, 1547, 1550, 1560, 1555, 1550, 1558, 1568, 1559, + 1573, 1571, 1577, 1560, 1578, 1577, 1585, 1574, 1595, 1582, + 1588, 1604, 1602, 1599, 1609, 1601, 1611, 1608, 1609, 1616, + 1616, 3134, 1617, 1600, 3134, 3134, 1619, 1606, 3046, 1619, + 3045, 1625, 1615, 1614, 1611, 1626, 1626, 1634, 1640, 1632, + 1641, 3134, 1646, 1647, 1642, 1643, 1661, 3134, 1659, 1644, + 3134, 1648, 1660, 1658, 3134, 1664, 1660, 1664, 1662, 1658, + 1671, 1666, 1679, 1666, 3044, 3043, 3042, 3041, 3040, 3039, + 3038, 1681, 1685, 1688, 3037, 3134, 3134, 1692, 3134, 1691, + 3134, 3036, 1693, 1684, 129, 1708, 1692, 1703, 1702, 3134, + + 1702, 1713, 3134, 1716, 1717, 1711, 1708, 3035, 1721, 1720, + 1745, 1716, 1723, 1729, 1729, 3134, 1723, 1737, 1732, 1735, + 1751, 1736, 3134, 1757, 1742, 3134, 1753, 1764, 1758, 1767, + 1750, 1756, 1758, 1775, 1767, 1774, 1772, 1774, 1770, 3034, + 1773, 1787, 3134, 1772, 1781, 3033, 1789, 1793, 1797, 1795, + 1786, 3134, 1797, 1795, 1797, 1814, 3134, 1811, 3134, 1817, + 3134, 1807, 1799, 1822, 1809, 3134, 1820, 1829, 1821, 1833, + 1818, 1817, 1826, 1828, 1841, 1827, 1843, 1842, 1849, 1834, + 1852, 1839, 1851, 1858, 1865, 1859, 1871, 1875, 1873, 1863, + 1865, 1867, 1868, 1870, 1873, 3032, 1865, 1886, 1888, 1889, + + 1885, 1892, 1887, 1895, 372, 3067, 3057, 1882, 1901, 3029, + 3028, 1886, 3134, 3027, 3134, 1903, 1906, 1905, 1902, 1902, + 1923, 1910, 1905, 1929, 1926, 3026, 1928, 3134, 1921, 1931, + 1917, 1930, 1922, 1930, 3134, 3021, 1940, 1939, 3020, 1938, + 1936, 1934, 1949, 3134, 1942, 3018, 1951, 1959, 3134, 1942, + 1953, 1962, 1956, 1966, 3134, 1976, 1960, 1960, 3015, 3134, + 3134, 1972, 1965, 1963, 1985, 1990, 1981, 1979, 1998, 3013, + 1995, 3009, 1992, 3134, 1997, 1991, 3134, 3134, 3134, 1988, + 1988, 1986, 2005, 1999, 2011, 2015, 2003, 2013, 2019, 2014, + 2030, 2022, 2020, 2032, 2031, 2026, 2028, 2029, 2031, 2034, + + 2035, 2050, 2038, 2043, 2051, 3134, 2043, 2043, 2043, 2050, + 3044, 3043, 3030, 3029, 2045, 2048, 2067, 2070, 3134, 2053, + 2065, 2069, 2072, 2073, 2083, 2069, 2080, 2076, 2087, 2086, + 2098, 2099, 2096, 2089, 3134, 2094, 3134, 2104, 2104, 2093, + 2109, 2095, 2102, 2113, 2121, 2115, 3001, 2111, 2126, 2116, + 2108, 3134, 2139, 2129, 3134, 2123, 2138, 2142, 2139, 3134, + 2131, 2140, 2149, 3134, 2140, 2139, 2146, 2146, 3000, 2143, + 2142, 2145, 2146, 2161, 3134, 2165, 2151, 2167, 2161, 3134, + 3134, 3134, 3134, 2169, 2178, 2174, 2999, 2164, 2178, 2193, + 2190, 2177, 2195, 2196, 2197, 2199, 2201, 2202, 2194, 2203, + + 2204, 2195, 2204, 2210, 2204, 2199, 2204, 2201, 2210, 2214, + 2206, 2231, 1464, 3134, 2216, 2222, 2224, 1463, 3134, 2233, + 2243, 2234, 2241, 2240, 2235, 893, 2245, 3134, 2240, 2242, + 2255, 2244, 2252, 2253, 2245, 2253, 2252, 2253, 2265, 2258, + 887, 2261, 2261, 3134, 2283, 2272, 2276, 3134, 2286, 2289, + 2277, 2293, 2297, 2288, 2301, 2289, 2296, 3134, 2303, 3134, + 3134, 3134, 880, 2296, 2311, 2312, 2317, 2309, 2315, 2309, + 2313, 876, 2326, 2310, 2314, 2315, 2316, 2320, 2322, 2322, + 2332, 2328, 2348, 2330, 3134, 2342, 2342, 2338, 2347, 2345, + 2349, 2357, 2359, 2360, 2351, 2370, 533, 2372, 3134, 482, + + 2358, 2375, 2360, 3134, 2367, 2363, 2371, 3134, 2378, 2369, + 476, 471, 2372, 467, 2389, 2388, 3134, 2395, 466, 2397, + 2396, 3134, 2390, 2403, 2406, 2398, 2415, 2413, 3134, 3134, + 2414, 2411, 2406, 436, 2408, 2412, 2417, 2425, 3134, 3134, + 2431, 2424, 2419, 2415, 419, 2432, 2438, 418, 416, 414, + 410, 386, 376, 2427, 2437, 2441, 3134, 2447, 2446, 2435, + 3134, 2436, 3134, 2442, 2438, 2444, 2449, 373, 2463, 2464, + 2459, 2469, 2469, 2458, 3134, 2462, 366, 2466, 2466, 3134, + 2466, 2484, 347, 2485, 338, 2476, 2472, 2491, 2487, 2491, + 2493, 2482, 3134, 2498, 2489, 3134, 3134, 2504, 3134, 2509, + + 2514, 2503, 2515, 3134, 2504, 2506, 2512, 2519, 2524, 2522, + 2521, 2521, 2522, 2525, 2526, 2527, 2528, 2524, 3134, 335, + 3134, 2545, 2524, 2546, 2550, 327, 3134, 2534, 2556, 2546, + 2553, 2553, 2557, 2564, 326, 352, 2553, 2574, 243, 2555, + 2560, 2567, 2582, 2576, 2567, 2585, 269, 2576, 2585, 2594, + 3134, 2591, 2589, 2578, 2599, 2586, 2607, 2605, 2601, 2590, + 2611, 2599, 233, 2617, 2617, 2620, 2623, 2618, 2619, 2620, + 2622, 2624, 2625, 3134, 2627, 2624, 195, 3134, 3134, 2632, + 267, 2640, 2628, 2637, 2636, 2647, 2655, 2654, 3134, 2649, + 2657, 2655, 2652, 3134, 3134, 2655, 2655, 2664, 2673, 2671, + + 191, 3134, 2660, 2669, 2672, 2668, 3134, 2680, 188, 3134, + 2678, 2673, 2688, 146, 115, 3134, 2677, 113, 2686, 2694, + 2698, 2691, 2692, 2693, 2694, 2698, 2699, 2697, 109, 2704, + 2713, 3134, 3134, 2720, 2709, 2719, 2712, 2714, 2720, 2720, + 2733, 2728, 2729, 2726, 2730, 2725, 2734, 2735, 2739, 2741, + 2742, 2752, 2744, 3134, 3134, 2740, 2748, 3134, 3134, 2758, + 2759, 2761, 2767, 2767, 2756, 3134, 2752, 2753, 2756, 2757, + 2763, 2764, 2770, 2792, 2790, 2777, 2784, 2780, 3134, 2797, + 2783, 2792, 2794, 2805, 2810, 2807, 2808, 2809, 2804, 2814, + 2806, 2819, 2817, 2809, 3134, 2826, 2823, 2830, 2827, 2833, + + 2826, 2823, 3134, 2828, 3134, 3134, 3134, 3134, 3134, 3134, + 2840, 2838, 2838, 2835, 2848, 3134, 107, 2838, 2855, 2848, + 3134, 2839, 3134, 2847, 2863, 2847, 3134, 2863, 3134, 2859, + 3134, 2861, 2861, 2860, 2868, 2871, 2865, 2871, 95, 2887, + 2881, 2890, 2897, 2897, 2900, 3134, 2892, 2905, 3134, 2889, + 2889, 3134, 2899, 2905, 3134, 2899, 2909, 2914, 2916, 2915, + 2917, 2905, 2927, 2927, 2931, 2917, 2932, 3134, 2925, 2934, + 2925, 2936, 3134, 3134, 3134, 2931, 2940, 2952, 3134, 3134, + 2952, 2940, 2955, 2950, 2944, 2954, 2960, 2964, 2951, 2960, + 3134, 2970, 3134, 2970, 3134, 2958, 2975, 3134, 2974, 3134, + + 3134, 3134, 85, 2968, 2981, 2969, 3134, 2975, 2989, 2979, + 2977, 2978, 3134, 3134, 2986, 3134, 2987, 2997, 3134, 3001, + 3002, 2999, 3000, 2996, 3012, 2999, 3014, 3134, 3134, 3010, + 3134, 3134, 99, 3063, 95, 93, 87 } ; -static const flex_int16_t yy_def[1727] = +static const flex_int16_t yy_def[1638] = { 0, - 1721, 1, 1721, 1721, 1721, 1722, 1723, 1724, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1722, 1723, 1721, - 1724, 1721, 1721, 1721, 1724, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1725, 1726, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1725, 1725, 1726, 1726, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 0, 1721, 1721, 1721, 1721, 1721 + 1632, 1, 1632, 1632, 1632, 1633, 1634, 1635, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1633, 1634, 1632, + 1635, 1632, 1632, 1632, 1635, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + + 1632, 1632, 1632, 1632, 1632, 1636, 1637, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1636, 1636, 1637, 1637, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 0, 1632, 1632, 1632, 1632, 1632 } ; -static const flex_int16_t yy_nxt[3368] = +static const flex_int16_t yy_nxt[3201] = { 0, 4, 5, 6, 7, 8, 4, 9, 10, 11, 11, 11, 4, 4, 12, 13, 14, 15, 16, 17, 18, @@ -992,372 +968,354 @@ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 4, 40, 40, 42, 44, - 54, 45, 46, 46, 46, 68, 69, 84, 89, 104, - 55, 71, 90, 43, 40, 40, 70, 1047, 91, 72, - 110, 75, 73, 1045, 131, 41, 135, 54, 76, 38, - - 136, 74, 68, 69, 84, 89, 104, 55, 71, 90, - 43, 47, 48, 70, 49, 91, 72, 110, 75, 73, - 50, 131, 51, 135, 1693, 76, 81, 136, 74, 52, - 935, 53, 936, 82, 1692, 83, 137, 77, 47, 48, - 937, 49, 46, 46, 46, 78, 1687, 50, 1630, 51, - 138, 79, 1609, 81, 1594, 139, 52, 80, 53, 56, - 82, 57, 83, 137, 77, 140, 58, 59, 141, 85, - 60, 111, 78, 61, 142, 112, 86, 138, 79, 87, - 143, 88, 139, 62, 80, 1532, 56, 144, 57, 113, - 327, 328, 140, 58, 59, 141, 85, 60, 111, 145, - - 61, 142, 112, 86, 146, 149, 87, 143, 88, 152, - 62, 63, 128, 129, 144, 64, 113, 132, 130, 65, - 158, 133, 66, 159, 134, 67, 145, 1337, 1338, 165, - 1521, 146, 149, 147, 1519, 148, 152, 150, 63, 128, - 129, 151, 64, 166, 132, 130, 65, 158, 133, 66, - 159, 134, 67, 92, 93, 153, 165, 94, 156, 157, - 147, 95, 148, 167, 150, 96, 168, 97, 151, 154, - 166, 169, 1518, 170, 174, 155, 1487, 1488, 176, 177, - 92, 93, 153, 175, 94, 156, 157, 171, 95, 172, - 167, 178, 96, 168, 97, 98, 154, 99, 169, 100, - - 170, 174, 155, 101, 173, 176, 177, 181, 179, 102, - 175, 182, 183, 186, 171, 103, 172, 187, 178, 180, - 188, 184, 98, 185, 99, 189, 100, 190, 191, 192, - 101, 173, 193, 1514, 181, 179, 102, 194, 182, 183, - 186, 195, 103, 105, 187, 198, 180, 188, 184, 199, - 185, 106, 189, 202, 190, 191, 192, 107, 196, 193, - 108, 109, 1505, 203, 194, 1485, 1472, 205, 195, 204, - 105, 206, 198, 1454, 1445, 197, 199, 1441, 106, 210, - 202, 200, 211, 1440, 107, 196, 201, 108, 109, 114, - 203, 214, 115, 116, 205, 117, 204, 1432, 206, 118, - - 119, 120, 197, 121, 122, 935, 210, 936, 200, 211, - 212, 217, 1427, 201, 223, 937, 114, 224, 214, 115, - 116, 225, 117, 1402, 207, 213, 118, 119, 120, 1401, - 121, 122, 123, 215, 208, 218, 1394, 212, 217, 124, - 209, 223, 125, 219, 224, 226, 216, 220, 225, 227, - 126, 207, 213, 228, 236, 1392, 127, 1387, 1378, 123, - 215, 208, 218, 221, 222, 241, 124, 209, 1366, 125, - 219, 237, 226, 243, 220, 1365, 227, 126, 245, 242, - 228, 236, 238, 127, 160, 161, 239, 246, 240, 162, - 221, 222, 241, 249, 247, 244, 250, 163, 237, 251, - - 243, 252, 164, 1364, 248, 245, 242, 253, 254, 238, - 1363, 160, 161, 239, 246, 240, 162, 256, 257, 264, - 249, 247, 244, 250, 163, 265, 251, 270, 252, 164, - 229, 248, 230, 231, 253, 254, 271, 232, 272, 233, - 268, 266, 234, 269, 256, 257, 264, 267, 235, 1362, - 274, 275, 265, 276, 270, 277, 273, 229, 278, 230, - 231, 1361, 281, 271, 232, 272, 233, 268, 266, 234, - 269, 282, 1358, 283, 267, 235, 258, 274, 275, 259, - 276, 279, 277, 273, 284, 278, 260, 261, 280, 281, - 286, 287, 288, 262, 289, 290, 291, 292, 282, 263, - - 283, 293, 294, 258, 295, 296, 259, 297, 279, 298, - 299, 284, 300, 260, 261, 280, 301, 286, 287, 288, - 262, 289, 290, 291, 292, 302, 263, 303, 293, 294, - 304, 295, 296, 305, 297, 306, 298, 299, 307, 300, - 308, 309, 310, 301, 311, 312, 313, 315, 316, 317, - 318, 319, 302, 322, 303, 320, 321, 304, 323, 314, - 305, 325, 306, 326, 329, 307, 330, 308, 309, 310, - 333, 311, 312, 313, 315, 316, 317, 318, 319, 334, - 322, 331, 320, 321, 332, 323, 314, 335, 325, 336, - 326, 329, 337, 330, 338, 339, 341, 333, 342, 343, - - 346, 344, 347, 348, 349, 350, 334, 345, 331, 351, - 352, 332, 353, 354, 335, 355, 336, 358, 359, 337, - 360, 338, 339, 341, 361, 342, 343, 346, 344, 347, - 348, 349, 350, 356, 362, 363, 351, 352, 357, 353, - 354, 364, 355, 365, 358, 359, 366, 360, 367, 368, - 369, 361, 370, 371, 372, 373, 374, 375, 378, 376, - 356, 362, 363, 379, 380, 357, 381, 382, 364, 383, - 365, 384, 385, 366, 386, 367, 368, 369, 387, 370, - 371, 372, 373, 374, 375, 378, 376, 391, 392, 389, - 379, 380, 393, 381, 382, 390, 383, 394, 384, 385, - - 396, 386, 397, 398, 399, 387, 400, 395, 401, 402, - 403, 404, 406, 407, 391, 392, 389, 408, 409, 393, - 405, 410, 390, 413, 394, 414, 415, 396, 411, 397, - 398, 399, 416, 400, 395, 401, 402, 403, 404, 406, - 407, 417, 412, 418, 408, 409, 420, 422, 410, 423, - 413, 424, 414, 415, 425, 411, 426, 427, 429, 416, - 430, 431, 432, 433, 434, 435, 436, 437, 417, 412, - 418, 438, 439, 420, 422, 441, 423, 442, 424, 443, - 444, 425, 445, 426, 427, 429, 446, 430, 431, 432, - 433, 434, 435, 436, 437, 447, 448, 449, 438, 439, - - 450, 451, 441, 452, 442, 454, 443, 444, 458, 445, - 455, 459, 460, 446, 461, 462, 456, 463, 465, 466, - 467, 469, 447, 448, 449, 470, 471, 450, 451, 472, - 452, 1349, 454, 482, 457, 458, 1334, 455, 459, 460, - 483, 461, 462, 456, 463, 465, 466, 467, 469, 1330, - 484, 485, 470, 471, 489, 490, 472, 473, 474, 475, - 482, 486, 491, 476, 493, 477, 487, 483, 478, 494, - 479, 495, 496, 497, 1328, 502, 480, 484, 485, 481, - 504, 489, 490, 498, 473, 474, 475, 505, 486, 491, - 476, 493, 477, 487, 506, 478, 494, 479, 495, 496, - - 497, 499, 502, 480, 507, 508, 481, 504, 509, 500, - 498, 510, 511, 512, 505, 513, 515, 516, 519, 517, - 522, 506, 520, 523, 524, 525, 526, 521, 499, 518, - 527, 507, 508, 531, 532, 509, 533, 534, 510, 511, - 512, 535, 513, 515, 516, 519, 517, 522, 536, 520, - 523, 524, 525, 526, 521, 528, 529, 527, 537, 538, - 531, 532, 539, 533, 534, 530, 540, 541, 535, 542, - 543, 544, 545, 546, 547, 536, 549, 550, 551, 552, - 553, 554, 528, 529, 555, 537, 538, 556, 557, 539, - 558, 1327, 530, 540, 541, 561, 542, 543, 544, 545, - - 546, 547, 562, 549, 550, 551, 552, 553, 554, 564, - 565, 555, 566, 559, 556, 557, 568, 558, 560, 563, - 569, 570, 561, 571, 573, 574, 575, 577, 578, 562, - 579, 580, 581, 582, 583, 584, 564, 565, 585, 566, - 559, 586, 587, 568, 588, 560, 563, 569, 570, 589, - 571, 573, 574, 575, 577, 578, 590, 579, 580, 581, - 582, 583, 584, 591, 593, 585, 594, 595, 586, 587, - 596, 588, 597, 592, 598, 599, 589, 602, 603, 604, - 605, 606, 607, 590, 608, 609, 610, 613, 611, 616, - 591, 593, 618, 594, 595, 1318, 619, 596, 612, 597, - - 592, 598, 599, 617, 602, 603, 604, 605, 606, 607, - 614, 608, 609, 610, 613, 611, 616, 620, 621, 618, - 622, 623, 615, 619, 624, 612, 625, 626, 627, 628, - 617, 629, 631, 632, 633, 634, 635, 614, 630, 636, - 638, 640, 1316, 645, 620, 621, 639, 622, 623, 615, - 646, 624, 643, 625, 626, 627, 628, 647, 629, 631, - 632, 633, 634, 635, 641, 630, 636, 638, 640, 644, - 645, 648, 649, 639, 652, 642, 653, 646, 650, 643, - 654, 651, 655, 656, 647, 657, 658, 659, 660, 661, - 662, 641, 664, 669, 670, 1292, 644, 671, 648, 649, - - 673, 652, 642, 653, 674, 650, 675, 654, 651, 655, - 656, 676, 657, 658, 659, 660, 661, 662, 666, 664, - 669, 670, 667, 677, 671, 678, 679, 673, 668, 680, - 681, 674, 682, 675, 683, 684, 685, 687, 676, 688, - 689, 690, 692, 694, 695, 666, 696, 697, 698, 667, - 677, 699, 678, 679, 700, 668, 680, 681, 702, 682, - 703, 683, 684, 685, 687, 704, 688, 689, 690, 692, - 694, 695, 701, 696, 697, 698, 705, 706, 699, 707, - 708, 700, 709, 710, 711, 702, 712, 703, 713, 714, - 715, 717, 704, 719, 720, 721, 722, 723, 725, 726, - - 727, 728, 729, 705, 706, 731, 707, 708, 733, 709, - 710, 711, 734, 712, 739, 713, 714, 715, 717, 740, - 719, 720, 721, 722, 723, 725, 726, 727, 728, 729, - 735, 741, 731, 737, 738, 733, 742, 743, 736, 734, - 744, 739, 745, 746, 747, 748, 740, 749, 750, 751, - 752, 753, 755, 756, 757, 758, 759, 735, 741, 760, - 737, 738, 761, 742, 743, 736, 762, 744, 763, 745, - 746, 747, 748, 764, 749, 750, 751, 752, 753, 755, - 756, 757, 758, 759, 765, 766, 760, 768, 769, 761, - 770, 771, 772, 762, 773, 763, 774, 775, 776, 777, - - 764, 779, 780, 781, 782, 783, 784, 785, 786, 787, - 788, 765, 766, 789, 768, 769, 790, 770, 771, 772, - 791, 773, 792, 774, 775, 776, 777, 793, 779, 780, - 781, 782, 783, 784, 785, 786, 787, 788, 794, 795, - 789, 796, 798, 790, 799, 1283, 807, 791, 810, 792, - 811, 1263, 812, 1248, 793, 1241, 1237, 813, 814, 815, - 816, 1211, 817, 819, 820, 794, 795, 821, 796, 798, - 822, 799, 800, 807, 823, 810, 801, 811, 802, 812, - 803, 824, 804, 805, 813, 814, 815, 816, 806, 817, - 819, 820, 825, 826, 821, 827, 828, 822, 829, 800, - - 830, 823, 831, 801, 832, 802, 833, 803, 824, 804, - 805, 834, 836, 838, 840, 806, 841, 842, 843, 825, - 826, 844, 827, 828, 846, 829, 847, 830, 848, 831, - 849, 832, 850, 833, 851, 852, 853, 854, 834, 836, - 838, 840, 858, 841, 842, 843, 859, 860, 844, 861, - 862, 846, 863, 847, 864, 848, 865, 849, 866, 850, - 867, 851, 852, 853, 854, 855, 856, 857, 868, 858, - 869, 870, 871, 859, 860, 872, 861, 862, 873, 863, - 874, 864, 875, 865, 876, 866, 877, 867, 878, 879, - 880, 881, 855, 856, 857, 868, 882, 869, 870, 871, - - 883, 884, 872, 886, 888, 873, 889, 874, 890, 875, - 891, 876, 892, 877, 893, 878, 879, 880, 881, 894, - 895, 896, 897, 882, 898, 899, 900, 883, 884, 901, - 886, 888, 902, 889, 903, 890, 904, 891, 905, 892, - 906, 893, 907, 908, 909, 910, 894, 895, 896, 897, - 911, 898, 899, 900, 912, 913, 901, 914, 917, 902, - 918, 903, 915, 904, 926, 905, 927, 906, 928, 907, - 908, 909, 910, 916, 930, 931, 933, 911, 934, 938, - 939, 912, 913, 940, 914, 917, 941, 918, 942, 915, - 943, 926, 944, 927, 945, 928, 946, 947, 948, 953, - - 916, 930, 931, 933, 950, 934, 938, 939, 951, 957, - 940, 952, 1198, 941, 958, 942, 959, 943, 960, 944, - 961, 945, 954, 946, 947, 948, 953, 955, 962, 963, - 964, 950, 965, 966, 967, 951, 957, 968, 952, 956, - 969, 958, 970, 959, 971, 960, 972, 961, 973, 954, - 974, 975, 976, 977, 955, 962, 963, 964, 978, 965, - 966, 967, 979, 980, 968, 982, 956, 969, 984, 970, - 985, 971, 986, 972, 987, 973, 989, 974, 975, 976, - 977, 990, 991, 992, 993, 978, 994, 995, 996, 979, - 980, 997, 982, 998, 999, 984, 1001, 985, 1002, 986, - - 1003, 987, 1004, 989, 1000, 1005, 1006, 1007, 990, 991, - 992, 993, 1008, 994, 995, 996, 1009, 1010, 997, 1011, - 998, 999, 1012, 1001, 1013, 1002, 1014, 1003, 1015, 1004, - 1016, 1000, 1005, 1006, 1007, 1017, 1018, 1019, 1020, 1008, - 1021, 1022, 1023, 1009, 1010, 1024, 1011, 1025, 1026, 1012, - 1027, 1013, 1028, 1014, 1029, 1015, 1030, 1016, 1031, 1032, - 1033, 1034, 1017, 1018, 1019, 1020, 1035, 1021, 1022, 1023, - 1037, 1038, 1024, 1039, 1025, 1026, 1040, 1027, 1041, 1028, - 1042, 1029, 1043, 1030, 1044, 1031, 1032, 1033, 1034, 1049, - 1050, 1053, 1055, 1035, 1056, 1057, 1058, 1037, 1038, 1059, - - 1039, 1060, 1061, 1040, 1062, 1041, 1063, 1042, 1064, 1043, - 1065, 1044, 1067, 1068, 1069, 1070, 1049, 1050, 1053, 1055, - 1071, 1056, 1057, 1058, 1072, 1073, 1059, 1077, 1060, 1061, - 1075, 1062, 1079, 1063, 1076, 1064, 1080, 1065, 1081, 1067, - 1068, 1069, 1070, 1082, 1083, 1085, 1086, 1071, 1087, 1089, - 1090, 1072, 1073, 1088, 1077, 1091, 1092, 1075, 1093, 1079, - 1097, 1076, 1098, 1080, 1100, 1081, 1101, 1102, 1103, 1094, - 1082, 1083, 1085, 1086, 1104, 1087, 1089, 1090, 1095, 1105, - 1088, 1106, 1091, 1092, 1107, 1093, 1096, 1097, 1108, 1098, - 1109, 1100, 1111, 1101, 1102, 1103, 1094, 1113, 1114, 1115, - - 1116, 1104, 1117, 1118, 1119, 1095, 1105, 1120, 1106, 1121, - 1122, 1107, 1123, 1096, 1124, 1108, 1125, 1109, 1126, 1111, - 1127, 1128, 1129, 1130, 1113, 1114, 1115, 1116, 1131, 1117, - 1118, 1119, 1132, 1133, 1120, 1134, 1121, 1122, 1135, 1123, - 1136, 1124, 1137, 1125, 1138, 1126, 1140, 1127, 1128, 1129, - 1130, 1141, 1142, 1143, 1144, 1131, 1145, 1146, 1147, 1132, - 1133, 1139, 1134, 1148, 1149, 1135, 1150, 1136, 1151, 1137, - 1152, 1138, 1153, 1140, 1154, 1155, 1156, 1157, 1141, 1142, - 1143, 1144, 1158, 1145, 1146, 1147, 1159, 1160, 1139, 1161, - 1148, 1149, 1162, 1150, 1163, 1151, 1164, 1152, 1165, 1153, - - 1166, 1154, 1155, 1156, 1157, 1167, 1168, 1169, 1170, 1158, - 1171, 1172, 1173, 1159, 1160, 1174, 1161, 1175, 1176, 1162, - 1178, 1163, 1179, 1164, 1180, 1165, 1181, 1166, 1182, 1183, - 1184, 1185, 1167, 1168, 1169, 1170, 1186, 1171, 1172, 1173, - 1187, 1188, 1174, 1189, 1175, 1176, 1190, 1178, 1191, 1179, - 1192, 1180, 1193, 1181, 1194, 1182, 1183, 1184, 1185, 1195, - 1196, 1197, 1199, 1186, 1200, 1201, 1202, 1187, 1188, 1203, - 1189, 1204, 1205, 1190, 1206, 1191, 1207, 1192, 1208, 1193, - 1209, 1194, 1210, 1212, 1213, 1214, 1195, 1196, 1197, 1199, - 1215, 1200, 1201, 1202, 1216, 1217, 1203, 1218, 1204, 1205, - - 1219, 1206, 1220, 1207, 1221, 1208, 1222, 1209, 1223, 1210, - 1212, 1213, 1214, 1224, 1225, 1226, 1227, 1215, 1228, 1229, - 1230, 1216, 1217, 1231, 1218, 1232, 1233, 1219, 1234, 1220, - 1235, 1221, 1236, 1222, 1238, 1223, 1239, 1240, 1242, 1243, - 1224, 1225, 1226, 1227, 1244, 1228, 1229, 1230, 1245, 1246, - 1231, 1247, 1232, 1233, 1249, 1234, 1250, 1235, 1253, 1236, - 1251, 1238, 1254, 1239, 1240, 1242, 1243, 1255, 1252, 1256, - 1257, 1244, 1258, 1259, 1260, 1245, 1246, 1261, 1247, 1262, - 1264, 1249, 1265, 1250, 1266, 1253, 1267, 1251, 1268, 1254, - 1269, 1270, 1271, 1272, 1255, 1273, 1256, 1257, 1274, 1258, - - 1259, 1260, 1275, 1276, 1261, 1277, 1262, 1264, 1278, 1265, - 1280, 1266, 1281, 1267, 1279, 1268, 1282, 1269, 1270, 1271, - 1272, 1284, 1273, 1285, 1286, 1274, 1287, 1288, 1289, 1275, - 1276, 1290, 1277, 1291, 1293, 1278, 1294, 1280, 1295, 1281, - 1296, 1279, 1297, 1282, 1298, 1299, 1300, 1301, 1284, 1302, - 1285, 1286, 1303, 1287, 1288, 1289, 1304, 1305, 1290, 1306, - 1291, 1293, 1307, 1294, 1308, 1295, 1309, 1296, 1310, 1297, - 1311, 1298, 1299, 1300, 1301, 1312, 1302, 1313, 1314, 1303, - 1315, 1317, 1319, 1304, 1305, 1320, 1306, 1321, 1322, 1307, - 1323, 1308, 1324, 1309, 1325, 1310, 1326, 1311, 1329, 1331, - - 1332, 1333, 1312, 1335, 1313, 1314, 1336, 1315, 1317, 1319, - 1339, 1340, 1320, 1341, 1321, 1322, 1342, 1323, 1343, 1324, - 1344, 1325, 1345, 1326, 1346, 1329, 1331, 1332, 1333, 1347, - 1335, 1348, 1350, 1336, 1351, 1352, 1353, 1339, 1340, 1354, - 1341, 1355, 1356, 1342, 1357, 1343, 1359, 1344, 1360, 1345, - 1367, 1346, 1368, 1369, 1370, 1371, 1347, 1372, 1348, 1350, - 1373, 1351, 1352, 1353, 1374, 1375, 1354, 1376, 1355, 1356, - 1377, 1357, 1379, 1359, 1381, 1360, 1382, 1367, 1383, 1368, - 1369, 1370, 1371, 1384, 1372, 1385, 1386, 1373, 1388, 1380, - 1389, 1374, 1375, 1390, 1376, 1391, 1393, 1377, 1395, 1379, - - 1396, 1381, 1397, 1382, 1399, 1383, 1400, 1403, 1404, 1405, - 1384, 1406, 1385, 1386, 1407, 1388, 1380, 1389, 1408, 1398, - 1390, 1409, 1391, 1393, 1410, 1395, 1411, 1396, 1412, 1397, - 1413, 1399, 1414, 1400, 1403, 1404, 1405, 1415, 1406, 1416, - 1417, 1407, 1418, 1419, 1420, 1408, 1398, 1421, 1409, 1422, - 1423, 1410, 1424, 1411, 1425, 1412, 1426, 1413, 1428, 1414, - 1429, 1430, 1431, 1433, 1415, 1434, 1416, 1417, 1435, 1418, - 1419, 1420, 1436, 1437, 1421, 1438, 1422, 1423, 1439, 1424, - 1442, 1425, 1443, 1426, 1444, 1428, 1446, 1429, 1430, 1431, - 1433, 1447, 1434, 1448, 1451, 1435, 1452, 1449, 1453, 1436, - - 1437, 1455, 1438, 1456, 1457, 1439, 1458, 1442, 1459, 1443, - 1460, 1444, 1461, 1446, 1450, 1462, 1463, 1464, 1447, 1465, - 1448, 1451, 1466, 1452, 1449, 1453, 1467, 1468, 1455, 1469, - 1456, 1457, 1470, 1458, 1471, 1459, 1473, 1460, 1474, 1461, - 1475, 1450, 1462, 1463, 1464, 1476, 1465, 1477, 1478, 1466, - 1479, 1480, 1481, 1467, 1468, 1482, 1469, 1483, 1484, 1470, - 1486, 1471, 1489, 1473, 1490, 1474, 1491, 1475, 1492, 1493, - 1494, 1495, 1476, 1496, 1477, 1478, 1497, 1479, 1480, 1481, - 1498, 1499, 1482, 1500, 1483, 1484, 1501, 1486, 1502, 1489, - 1503, 1490, 1504, 1491, 1506, 1492, 1493, 1494, 1495, 1507, - - 1496, 1508, 1509, 1497, 1510, 1511, 1512, 1498, 1499, 1513, - 1500, 1515, 1516, 1501, 1517, 1502, 1520, 1503, 1522, 1504, - 1523, 1506, 1524, 1525, 1526, 1527, 1507, 1528, 1508, 1509, - 1529, 1510, 1511, 1512, 1530, 1531, 1513, 1533, 1515, 1516, - 1534, 1517, 1535, 1520, 1536, 1522, 1537, 1523, 1538, 1524, - 1525, 1526, 1527, 1539, 1528, 1540, 1541, 1529, 1542, 1543, - 1544, 1530, 1531, 1545, 1533, 1546, 1547, 1534, 1548, 1535, - 1549, 1536, 1550, 1537, 1551, 1538, 1552, 1553, 1554, 1555, - 1539, 1556, 1540, 1541, 1557, 1542, 1543, 1544, 1558, 1559, - 1545, 1560, 1546, 1547, 1561, 1548, 1562, 1549, 1563, 1550, - - 1564, 1551, 1565, 1552, 1553, 1554, 1555, 1566, 1556, 1567, - 1568, 1557, 1569, 1570, 1571, 1558, 1559, 1572, 1560, 1573, - 1574, 1561, 1575, 1562, 1576, 1563, 1577, 1564, 1578, 1565, - 1579, 1580, 1581, 1582, 1566, 1583, 1567, 1568, 1584, 1569, - 1570, 1571, 1585, 1586, 1572, 1587, 1573, 1574, 1588, 1575, - 1589, 1576, 1590, 1577, 1591, 1578, 1592, 1579, 1580, 1581, - 1582, 1593, 1583, 1595, 1596, 1584, 1597, 1598, 1599, 1585, - 1586, 1600, 1587, 1601, 1602, 1588, 1603, 1589, 1604, 1590, - 1605, 1591, 1606, 1592, 1607, 1608, 1610, 1611, 1593, 1612, - 1595, 1596, 1613, 1597, 1598, 1599, 1614, 1615, 1600, 1616, - - 1601, 1602, 1617, 1603, 1618, 1604, 1619, 1605, 1620, 1606, - 1621, 1607, 1608, 1610, 1611, 1622, 1612, 1623, 1624, 1613, - 1625, 1628, 1629, 1614, 1615, 1626, 1616, 1627, 1631, 1617, - 1632, 1618, 1633, 1619, 1634, 1620, 1635, 1621, 1638, 1636, - 1639, 1640, 1622, 1641, 1623, 1624, 1642, 1625, 1628, 1629, - 1643, 1644, 1626, 1645, 1627, 1631, 1637, 1632, 1646, 1633, - 1647, 1634, 1648, 1635, 1649, 1638, 1636, 1639, 1640, 1650, - 1641, 1651, 1652, 1642, 1653, 1654, 1655, 1643, 1644, 1656, - 1645, 1657, 1658, 1637, 1659, 1646, 1660, 1647, 1661, 1648, - 1662, 1649, 1663, 1664, 1665, 1666, 1650, 1667, 1651, 1652, - - 1668, 1653, 1654, 1655, 1669, 1670, 1656, 1671, 1657, 1658, - 1672, 1659, 1673, 1660, 1674, 1661, 1675, 1662, 1676, 1663, - 1664, 1665, 1666, 1677, 1667, 1678, 1679, 1668, 1680, 1681, - 1682, 1669, 1670, 1683, 1671, 1684, 1685, 1672, 1686, 1673, - 1688, 1674, 1689, 1675, 1690, 1676, 1691, 1694, 1695, 1696, - 1677, 1697, 1678, 1679, 1698, 1680, 1681, 1682, 1699, 1700, - 1683, 1701, 1684, 1685, 1702, 1686, 1703, 1688, 1704, 1689, - 1705, 1690, 1706, 1691, 1694, 1695, 1696, 1707, 1697, 1708, - 1709, 1698, 1710, 1711, 1712, 1699, 1700, 1713, 1701, 1714, - 1715, 1702, 1716, 1703, 1717, 1704, 1718, 1705, 1719, 1706, - - 1720, 1177, 1048, 1048, 1707, 1046, 1708, 1709, 1046, 1710, - 1711, 1712, 1112, 1110, 1713, 1099, 1714, 1715, 1084, 1716, - 1078, 1717, 1074, 1718, 1066, 1719, 1054, 1720, 39, 39, - 1052, 1051, 1048, 1046, 1036, 988, 983, 981, 949, 932, - 929, 925, 924, 923, 922, 921, 920, 919, 887, 885, - 845, 839, 837, 835, 818, 809, 808, 797, 778, 767, - 754, 732, 730, 724, 718, 716, 693, 691, 686, 672, - 665, 663, 637, 601, 600, 576, 572, 567, 548, 514, - 503, 501, 492, 488, 468, 464, 453, 440, 428, 421, - 419, 388, 377, 340, 324, 285, 255, 37, 37, 1721, - - 3, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721 + 54, 45, 46, 46, 46, 68, 69, 84, 89, 103, + 55, 71, 90, 43, 40, 40, 70, 1013, 91, 72, + 109, 75, 73, 1011, 130, 41, 134, 54, 76, 38, + + 135, 74, 68, 69, 84, 89, 103, 55, 71, 90, + 43, 47, 48, 70, 49, 91, 72, 109, 75, 73, + 50, 130, 51, 134, 1611, 76, 81, 135, 74, 52, + 905, 53, 906, 82, 1563, 83, 136, 77, 47, 48, + 907, 49, 46, 46, 46, 78, 1545, 50, 1474, 51, + 137, 79, 1463, 81, 1461, 138, 52, 80, 53, 56, + 82, 57, 83, 136, 77, 139, 58, 59, 140, 85, + 60, 110, 78, 61, 141, 111, 86, 137, 79, 87, + 142, 88, 138, 62, 80, 1460, 56, 143, 57, 112, + 321, 322, 139, 58, 59, 140, 85, 60, 110, 144, + + 61, 141, 111, 86, 145, 148, 87, 142, 88, 149, + 62, 63, 127, 128, 143, 64, 112, 131, 129, 65, + 150, 132, 66, 151, 133, 67, 144, 1456, 154, 155, + 1450, 145, 148, 146, 1430, 147, 149, 152, 63, 127, + 128, 156, 64, 153, 131, 129, 65, 150, 132, 66, + 151, 133, 67, 92, 93, 154, 155, 94, 157, 163, + 146, 95, 147, 165, 152, 166, 167, 96, 156, 168, + 153, 174, 1417, 164, 172, 175, 1432, 1433, 176, 1402, + 92, 93, 1393, 173, 94, 157, 163, 169, 95, 170, + 165, 179, 166, 167, 96, 97, 168, 98, 174, 99, + + 164, 172, 175, 100, 171, 176, 177, 180, 181, 101, + 173, 182, 184, 183, 169, 102, 170, 178, 179, 185, + 186, 187, 97, 188, 98, 189, 99, 190, 191, 192, + 100, 171, 193, 177, 180, 181, 101, 194, 182, 184, + 183, 195, 102, 104, 178, 196, 185, 186, 187, 199, + 188, 105, 189, 197, 190, 191, 192, 106, 198, 193, + 107, 108, 1389, 200, 194, 1388, 1380, 201, 195, 205, + 104, 206, 196, 905, 1375, 906, 199, 1345, 105, 209, + 197, 202, 212, 907, 106, 198, 1343, 107, 108, 113, + 200, 203, 114, 115, 201, 116, 205, 204, 206, 117, + + 118, 119, 207, 120, 121, 1338, 209, 218, 202, 212, + 210, 219, 1329, 213, 220, 1317, 113, 208, 203, 114, + 115, 214, 116, 211, 204, 1316, 117, 118, 119, 207, + 120, 121, 122, 221, 218, 215, 222, 210, 219, 123, + 213, 220, 124, 223, 208, 231, 238, 236, 214, 1315, + 125, 216, 217, 1314, 240, 1313, 126, 1312, 1309, 122, + 221, 237, 215, 222, 241, 232, 123, 244, 239, 124, + 223, 245, 231, 238, 236, 1300, 233, 125, 216, 217, + 234, 240, 235, 126, 158, 159, 242, 246, 237, 160, + 247, 241, 232, 248, 244, 239, 243, 161, 245, 249, + + 251, 252, 162, 233, 259, 1288, 1284, 234, 260, 235, + 1282, 158, 159, 242, 246, 1281, 160, 247, 265, 261, + 248, 1272, 266, 243, 161, 262, 249, 251, 252, 162, + 224, 259, 225, 226, 269, 260, 267, 227, 263, 228, + 270, 264, 229, 271, 272, 265, 261, 273, 230, 266, + 276, 274, 262, 277, 268, 278, 279, 224, 275, 225, + 226, 269, 281, 267, 227, 263, 228, 270, 264, 229, + 271, 272, 1270, 282, 273, 230, 253, 276, 274, 254, + 277, 268, 278, 279, 283, 275, 255, 256, 284, 281, + 285, 286, 287, 257, 288, 289, 290, 291, 292, 258, + + 282, 293, 294, 253, 295, 296, 254, 297, 298, 299, + 300, 283, 301, 255, 256, 284, 302, 285, 286, 287, + 257, 288, 289, 290, 291, 292, 258, 303, 293, 294, + 304, 295, 296, 305, 297, 298, 299, 300, 306, 301, + 307, 309, 310, 302, 311, 312, 313, 314, 315, 316, + 317, 319, 320, 308, 303, 323, 324, 304, 325, 327, + 305, 326, 328, 329, 330, 306, 331, 307, 309, 310, + 332, 311, 312, 313, 314, 315, 316, 317, 319, 320, + 308, 334, 323, 324, 335, 325, 327, 338, 326, 328, + 329, 330, 336, 331, 339, 340, 341, 332, 337, 342, + + 343, 344, 345, 346, 347, 349, 350, 351, 334, 348, + 352, 335, 353, 354, 338, 355, 356, 357, 358, 336, + 359, 339, 340, 341, 360, 361, 342, 343, 344, 345, + 346, 347, 349, 350, 351, 362, 348, 352, 363, 353, + 354, 364, 355, 356, 357, 358, 365, 359, 366, 369, + 367, 360, 361, 370, 371, 372, 373, 374, 375, 376, + 377, 378, 362, 380, 381, 363, 382, 383, 364, 384, + 386, 387, 388, 365, 389, 366, 369, 367, 390, 385, + 370, 371, 372, 373, 374, 375, 376, 377, 378, 391, + 380, 381, 392, 382, 383, 393, 384, 386, 387, 388, + + 394, 389, 396, 397, 398, 390, 385, 399, 400, 395, + 401, 403, 404, 405, 406, 407, 391, 408, 410, 392, + 412, 413, 393, 414, 402, 415, 416, 394, 418, 396, + 397, 398, 419, 420, 399, 400, 421, 401, 403, 404, + 405, 406, 407, 422, 408, 410, 423, 412, 413, 424, + 414, 402, 415, 416, 425, 418, 426, 427, 428, 419, + 420, 430, 431, 421, 432, 433, 434, 435, 436, 437, + 422, 438, 439, 423, 440, 441, 424, 443, 447, 448, + 449, 425, 452, 426, 427, 428, 450, 451, 430, 431, + 454, 432, 433, 434, 435, 436, 437, 444, 438, 439, + + 455, 440, 441, 445, 443, 447, 448, 449, 456, 452, + 458, 459, 460, 450, 451, 1246, 470, 454, 471, 1237, + 472, 446, 475, 473, 444, 476, 1220, 455, 474, 477, + 445, 479, 1205, 480, 481, 456, 482, 458, 459, 460, + 461, 462, 463, 470, 483, 471, 464, 472, 465, 475, + 473, 466, 476, 467, 488, 474, 477, 490, 479, 468, + 480, 481, 469, 482, 484, 491, 492, 461, 462, 463, + 493, 483, 494, 464, 495, 465, 496, 497, 466, 498, + 467, 488, 485, 499, 490, 501, 468, 502, 503, 469, + 486, 484, 491, 492, 508, 509, 505, 493, 504, 494, + + 506, 495, 510, 496, 497, 507, 498, 511, 512, 485, + 499, 513, 501, 517, 502, 503, 514, 515, 518, 519, + 520, 508, 509, 505, 521, 522, 516, 506, 523, 510, + 524, 525, 507, 526, 511, 512, 527, 528, 513, 529, + 517, 530, 531, 514, 515, 518, 519, 520, 532, 534, + 535, 521, 522, 516, 536, 523, 537, 524, 525, 538, + 526, 539, 540, 527, 528, 541, 529, 542, 530, 531, + 543, 546, 549, 544, 547, 532, 534, 535, 545, 550, + 551, 536, 552, 537, 553, 554, 538, 555, 539, 540, + 557, 548, 541, 558, 542, 559, 561, 543, 546, 549, + + 544, 547, 562, 563, 564, 545, 550, 551, 565, 552, + 566, 553, 554, 567, 555, 568, 569, 557, 548, 570, + 558, 571, 559, 561, 572, 573, 574, 577, 575, 562, + 563, 564, 578, 579, 580, 565, 581, 566, 576, 582, + 567, 583, 568, 569, 586, 587, 570, 588, 571, 589, + 590, 572, 573, 574, 577, 575, 591, 592, 593, 578, + 579, 580, 596, 581, 599, 576, 582, 601, 583, 594, + 597, 586, 587, 602, 588, 603, 589, 590, 600, 595, + 604, 605, 598, 591, 592, 593, 606, 607, 608, 596, + 609, 599, 610, 612, 601, 613, 594, 597, 614, 611, + + 602, 615, 603, 616, 617, 600, 595, 604, 605, 598, + 619, 621, 622, 606, 607, 608, 620, 609, 624, 610, + 612, 626, 613, 623, 627, 614, 611, 628, 615, 629, + 616, 617, 630, 631, 633, 625, 632, 619, 621, 622, + 634, 635, 636, 620, 637, 624, 638, 639, 626, 640, + 623, 627, 641, 642, 628, 643, 629, 645, 650, 630, + 631, 633, 625, 632, 651, 653, 654, 634, 635, 636, + 655, 637, 656, 638, 639, 657, 640, 647, 658, 641, + 642, 648, 643, 659, 645, 650, 660, 649, 661, 662, + 663, 651, 653, 654, 664, 665, 667, 655, 668, 656, + + 669, 670, 657, 672, 647, 658, 674, 675, 648, 676, + 659, 677, 678, 660, 649, 661, 662, 663, 679, 680, + 682, 664, 665, 667, 683, 668, 684, 669, 670, 685, + 672, 686, 687, 674, 675, 688, 676, 681, 677, 678, + 689, 690, 691, 692, 693, 679, 680, 682, 694, 696, + 698, 683, 699, 684, 700, 701, 685, 702, 686, 687, + 704, 705, 688, 706, 707, 708, 710, 689, 690, 691, + 692, 693, 712, 713, 718, 694, 696, 698, 714, 699, + 719, 700, 701, 720, 702, 721, 715, 704, 705, 722, + 706, 707, 708, 710, 716, 717, 723, 724, 725, 712, + + 713, 718, 726, 727, 728, 714, 729, 719, 730, 731, + 720, 732, 721, 715, 733, 734, 722, 735, 736, 737, + 738, 716, 717, 723, 724, 725, 739, 740, 741, 726, + 727, 728, 742, 729, 744, 730, 731, 745, 732, 746, + 747, 733, 734, 748, 735, 736, 737, 738, 749, 750, + 751, 752, 753, 739, 740, 741, 755, 756, 757, 742, + 758, 744, 759, 760, 745, 761, 746, 747, 762, 765, + 748, 763, 764, 766, 767, 749, 750, 751, 752, 753, + 768, 769, 770, 755, 756, 757, 771, 758, 772, 759, + 760, 774, 761, 782, 785, 762, 765, 786, 763, 764, + + 766, 767, 1198, 1194, 787, 788, 789, 768, 769, 770, + 790, 791, 792, 771, 794, 772, 795, 796, 774, 775, + 782, 785, 797, 776, 786, 777, 798, 778, 799, 779, + 780, 787, 788, 789, 800, 781, 801, 790, 791, 792, + 802, 794, 803, 795, 796, 804, 775, 805, 806, 797, + 776, 807, 777, 798, 778, 799, 779, 780, 808, 810, + 812, 800, 781, 801, 814, 815, 816, 802, 817, 803, + 818, 820, 804, 821, 805, 806, 822, 823, 807, 824, + 825, 826, 827, 828, 832, 808, 810, 812, 829, 830, + 831, 814, 815, 816, 833, 817, 834, 818, 820, 835, + + 821, 836, 837, 822, 823, 838, 824, 825, 826, 827, + 828, 832, 839, 840, 841, 829, 830, 831, 842, 843, + 844, 833, 845, 834, 846, 847, 835, 848, 836, 837, + 849, 850, 838, 851, 852, 853, 854, 855, 857, 839, + 840, 841, 859, 860, 861, 842, 843, 844, 862, 845, + 863, 846, 847, 864, 848, 865, 866, 849, 850, 867, + 851, 852, 853, 854, 855, 857, 868, 869, 870, 859, + 860, 861, 871, 872, 873, 862, 874, 863, 875, 876, + 864, 877, 865, 866, 878, 879, 867, 880, 881, 882, + 883, 884, 885, 868, 869, 870, 886, 888, 896, 871, + + 872, 873, 897, 874, 898, 875, 876, 887, 877, 900, + 901, 878, 879, 903, 880, 881, 882, 883, 884, 885, + 904, 908, 909, 886, 888, 896, 910, 911, 912, 897, + 913, 898, 914, 915, 887, 916, 900, 901, 917, 919, + 903, 922, 926, 920, 927, 928, 921, 904, 908, 909, + 929, 930, 931, 910, 911, 912, 932, 913, 923, 914, + 915, 933, 916, 924, 934, 917, 919, 935, 922, 926, + 920, 927, 928, 921, 936, 925, 937, 929, 930, 931, + 938, 939, 940, 932, 941, 923, 942, 943, 933, 944, + 924, 934, 945, 946, 935, 947, 948, 949, 950, 952, + + 953, 936, 925, 937, 954, 955, 957, 938, 939, 940, + 958, 941, 959, 942, 943, 960, 944, 961, 962, 945, + 946, 963, 947, 948, 949, 950, 952, 953, 964, 967, + 965, 954, 955, 957, 968, 969, 970, 958, 971, 959, + 966, 972, 960, 973, 961, 962, 974, 975, 963, 976, + 977, 978, 979, 980, 981, 964, 967, 965, 982, 983, + 984, 968, 969, 970, 985, 971, 986, 966, 972, 987, + 973, 988, 989, 974, 975, 990, 976, 977, 978, 979, + 980, 981, 991, 992, 993, 982, 983, 984, 994, 995, + 996, 985, 997, 986, 998, 999, 987, 1000, 988, 989, + + 1001, 1003, 990, 1004, 1005, 1006, 1007, 1008, 1009, 991, + 992, 993, 1010, 1015, 1016, 994, 995, 996, 1019, 997, + 1021, 998, 999, 1022, 1000, 1023, 1024, 1001, 1003, 1025, + 1004, 1005, 1006, 1007, 1008, 1009, 1026, 1027, 1028, 1010, + 1015, 1016, 1029, 1030, 1032, 1019, 1033, 1021, 1034, 1035, + 1022, 1036, 1023, 1024, 1037, 1038, 1025, 1040, 1042, 1044, + 1045, 1041, 1046, 1026, 1027, 1028, 1047, 1048, 1050, 1029, + 1030, 1032, 1051, 1033, 1052, 1034, 1035, 1053, 1036, 1054, + 1055, 1037, 1038, 1056, 1040, 1042, 1044, 1045, 1041, 1046, + 1060, 1057, 1061, 1047, 1048, 1050, 1063, 1064, 1065, 1051, + + 1058, 1052, 1066, 1067, 1053, 1068, 1054, 1055, 1059, 1069, + 1056, 1070, 1072, 1074, 1075, 1076, 1077, 1060, 1057, 1061, + 1078, 1079, 1080, 1063, 1064, 1065, 1081, 1058, 1082, 1066, + 1067, 1083, 1068, 1084, 1085, 1059, 1069, 1086, 1070, 1072, + 1074, 1075, 1076, 1077, 1087, 1088, 1089, 1078, 1079, 1080, + 1090, 1091, 1092, 1081, 1093, 1082, 1094, 1095, 1083, 1096, + 1084, 1085, 1097, 1098, 1086, 1099, 1101, 1102, 1103, 1104, + 1105, 1087, 1088, 1089, 1106, 1107, 1108, 1090, 1091, 1092, + 1109, 1093, 1100, 1094, 1095, 1110, 1096, 1111, 1112, 1097, + 1098, 1113, 1099, 1101, 1102, 1103, 1104, 1105, 1114, 1115, + + 1116, 1106, 1107, 1108, 1117, 1118, 1119, 1109, 1120, 1100, + 1121, 1122, 1110, 1123, 1111, 1112, 1124, 1125, 1113, 1126, + 1127, 1128, 1129, 1130, 1131, 1114, 1115, 1116, 1132, 1133, + 1134, 1117, 1118, 1119, 1135, 1120, 1136, 1121, 1122, 1138, + 1123, 1139, 1140, 1124, 1125, 1141, 1126, 1127, 1128, 1129, + 1130, 1131, 1142, 1143, 1144, 1132, 1133, 1134, 1145, 1146, + 1147, 1135, 1148, 1136, 1149, 1150, 1138, 1151, 1139, 1140, + 1152, 1153, 1141, 1154, 1156, 1157, 1158, 1159, 1160, 1142, + 1143, 1144, 1161, 1162, 1163, 1145, 1146, 1147, 1164, 1148, + 1165, 1149, 1150, 1166, 1151, 1167, 1169, 1152, 1153, 1170, + + 1154, 1156, 1157, 1158, 1159, 1160, 1171, 1172, 1173, 1161, + 1162, 1163, 1174, 1175, 1176, 1164, 1177, 1165, 1178, 1179, + 1166, 1180, 1167, 1169, 1181, 1182, 1170, 1183, 1184, 1185, + 1186, 1187, 1188, 1171, 1172, 1173, 1189, 1190, 1191, 1174, + 1175, 1176, 1192, 1177, 1193, 1178, 1179, 1195, 1180, 1196, + 1197, 1181, 1182, 1199, 1183, 1184, 1185, 1186, 1187, 1188, + 1200, 1201, 1202, 1189, 1190, 1191, 1203, 1204, 1206, 1192, + 1207, 1193, 1210, 1208, 1195, 1211, 1196, 1197, 1212, 1213, + 1199, 1209, 1214, 1215, 1216, 1217, 1218, 1200, 1201, 1202, + 1219, 1221, 1222, 1203, 1204, 1206, 1223, 1207, 1224, 1210, + + 1208, 1225, 1211, 1226, 1227, 1212, 1213, 1228, 1229, 1214, + 1215, 1216, 1217, 1218, 1230, 1231, 1232, 1219, 1221, 1222, + 1234, 1235, 1233, 1223, 1236, 1224, 1238, 1239, 1225, 1240, + 1226, 1227, 1241, 1242, 1228, 1229, 1243, 1244, 1245, 1247, + 1248, 1230, 1231, 1232, 1249, 1250, 1251, 1234, 1235, 1233, + 1252, 1236, 1253, 1238, 1239, 1254, 1240, 1255, 1256, 1241, + 1242, 1257, 1258, 1243, 1244, 1245, 1247, 1248, 1259, 1260, + 1261, 1249, 1250, 1251, 1262, 1263, 1264, 1252, 1265, 1253, + 1266, 1267, 1254, 1268, 1255, 1256, 1269, 1271, 1257, 1258, + 1273, 1274, 1275, 1276, 1277, 1259, 1260, 1261, 1278, 1279, + + 1280, 1262, 1263, 1264, 1283, 1265, 1285, 1266, 1267, 1286, + 1268, 1287, 1289, 1269, 1271, 1290, 1291, 1273, 1274, 1275, + 1276, 1277, 1292, 1293, 1294, 1278, 1279, 1280, 1295, 1296, + 1297, 1283, 1298, 1285, 1299, 1301, 1286, 1302, 1287, 1289, + 1303, 1304, 1290, 1291, 1305, 1306, 1307, 1308, 1310, 1292, + 1293, 1294, 1311, 1318, 1319, 1295, 1296, 1297, 1320, 1298, + 1321, 1299, 1301, 1322, 1302, 1323, 1324, 1303, 1304, 1325, + 1326, 1305, 1306, 1307, 1308, 1310, 1327, 1328, 1330, 1311, + 1318, 1319, 1332, 1333, 1334, 1320, 1335, 1321, 1336, 1337, + 1322, 1339, 1323, 1324, 1340, 1331, 1325, 1326, 1341, 1342, + + 1344, 1346, 1347, 1327, 1328, 1330, 1348, 1350, 1351, 1332, + 1333, 1334, 1352, 1335, 1353, 1336, 1337, 1354, 1339, 1355, + 1356, 1340, 1331, 1349, 1357, 1341, 1342, 1344, 1346, 1347, + 1358, 1359, 1360, 1348, 1350, 1351, 1361, 1362, 1363, 1352, + 1364, 1353, 1365, 1366, 1354, 1367, 1355, 1356, 1368, 1369, + 1349, 1357, 1370, 1371, 1372, 1373, 1374, 1358, 1359, 1360, + 1376, 1377, 1378, 1361, 1362, 1363, 1379, 1364, 1381, 1365, + 1366, 1382, 1367, 1383, 1384, 1368, 1369, 1385, 1386, 1370, + 1371, 1372, 1373, 1374, 1387, 1390, 1394, 1376, 1377, 1378, + 1391, 1395, 1392, 1379, 1396, 1381, 1399, 1397, 1382, 1400, + + 1383, 1384, 1401, 1403, 1385, 1386, 1404, 1405, 1406, 1407, + 1408, 1387, 1390, 1394, 1398, 1409, 1410, 1391, 1395, 1392, + 1411, 1396, 1412, 1399, 1397, 1413, 1400, 1414, 1415, 1401, + 1403, 1416, 1418, 1404, 1405, 1406, 1407, 1408, 1419, 1420, + 1421, 1398, 1409, 1410, 1422, 1423, 1424, 1411, 1425, 1412, + 1426, 1427, 1413, 1428, 1414, 1415, 1429, 1431, 1416, 1418, + 1434, 1435, 1436, 1437, 1438, 1419, 1420, 1421, 1439, 1440, + 1441, 1422, 1423, 1424, 1442, 1425, 1443, 1426, 1427, 1444, + 1428, 1445, 1446, 1429, 1431, 1447, 1448, 1434, 1435, 1436, + 1437, 1438, 1449, 1451, 1452, 1439, 1440, 1441, 1453, 1454, + + 1455, 1442, 1457, 1443, 1458, 1459, 1444, 1462, 1445, 1446, + 1464, 1465, 1447, 1448, 1466, 1467, 1468, 1469, 1470, 1449, + 1451, 1452, 1471, 1472, 1473, 1453, 1454, 1455, 1475, 1457, + 1476, 1458, 1459, 1477, 1462, 1478, 1479, 1464, 1465, 1480, + 1481, 1466, 1467, 1468, 1469, 1470, 1482, 1483, 1484, 1471, + 1472, 1473, 1485, 1486, 1487, 1475, 1488, 1476, 1489, 1490, + 1477, 1491, 1478, 1479, 1492, 1493, 1480, 1481, 1494, 1495, + 1496, 1497, 1498, 1482, 1483, 1484, 1499, 1500, 1501, 1485, + 1486, 1487, 1502, 1488, 1503, 1489, 1490, 1504, 1491, 1505, + 1506, 1492, 1493, 1507, 1508, 1494, 1495, 1496, 1497, 1498, + + 1509, 1510, 1511, 1499, 1500, 1501, 1512, 1513, 1514, 1502, + 1515, 1503, 1516, 1517, 1504, 1518, 1505, 1506, 1519, 1520, + 1507, 1508, 1521, 1522, 1523, 1524, 1525, 1509, 1510, 1511, + 1526, 1527, 1528, 1512, 1513, 1514, 1529, 1515, 1530, 1516, + 1517, 1531, 1518, 1532, 1533, 1519, 1520, 1534, 1535, 1521, + 1522, 1523, 1524, 1525, 1536, 1537, 1538, 1526, 1527, 1528, + 1539, 1540, 1541, 1529, 1542, 1530, 1543, 1544, 1531, 1546, + 1532, 1533, 1547, 1548, 1534, 1535, 1549, 1550, 1551, 1552, + 1553, 1536, 1537, 1538, 1554, 1555, 1556, 1539, 1540, 1541, + 1557, 1542, 1558, 1543, 1544, 1559, 1546, 1560, 1561, 1547, + + 1548, 1562, 1564, 1549, 1550, 1551, 1552, 1553, 1565, 1566, + 1567, 1554, 1555, 1556, 1568, 1569, 1571, 1557, 1572, 1558, + 1573, 1574, 1559, 1575, 1560, 1561, 1576, 1577, 1562, 1564, + 1578, 1579, 1570, 1580, 1581, 1565, 1566, 1567, 1582, 1583, + 1584, 1568, 1569, 1571, 1585, 1572, 1586, 1573, 1574, 1587, + 1575, 1588, 1589, 1576, 1577, 1590, 1591, 1578, 1579, 1570, + 1580, 1581, 1592, 1593, 1594, 1582, 1583, 1584, 1595, 1596, + 1597, 1585, 1598, 1586, 1599, 1600, 1587, 1601, 1588, 1589, + 1602, 1603, 1590, 1591, 1604, 1605, 1606, 1607, 1608, 1592, + 1593, 1594, 1609, 1610, 1612, 1595, 1596, 1597, 1613, 1598, + + 1614, 1599, 1600, 1615, 1601, 1616, 1617, 1602, 1603, 1618, + 1619, 1604, 1605, 1606, 1607, 1608, 1620, 1621, 1622, 1609, + 1610, 1612, 1623, 1624, 1625, 1613, 1626, 1614, 1627, 1628, + 1615, 1629, 1616, 1617, 1630, 1631, 1618, 1619, 1168, 1155, + 1137, 1014, 1014, 1620, 1621, 1622, 1012, 1012, 1073, 1623, + 1624, 1625, 1071, 1626, 1062, 1627, 1628, 1049, 1629, 1043, + 1039, 1630, 1631, 39, 39, 1031, 1020, 1018, 1017, 1014, + 1012, 1002, 956, 951, 918, 902, 899, 895, 894, 893, + 892, 891, 890, 889, 858, 856, 819, 813, 811, 809, + 793, 784, 783, 773, 754, 743, 711, 709, 703, 697, + + 695, 673, 671, 666, 652, 646, 644, 618, 585, 584, + 560, 556, 533, 500, 489, 487, 478, 457, 453, 442, + 429, 417, 411, 409, 379, 368, 333, 318, 280, 250, + 37, 37, 1632, 3, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632 + } ; -static const flex_int16_t yy_chk[3368] = +static const flex_int16_t yy_chk[3201] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -1367,368 +1325,350 @@ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 9, 10, 13, 10, 11, 11, 11, 16, 16, 21, 23, 26, - 13, 17, 23, 9, 39, 39, 16, 1726, 23, 17, - 28, 18, 17, 1725, 33, 1724, 35, 13, 18, 1722, + 13, 17, 23, 9, 39, 39, 16, 1637, 23, 17, + 28, 18, 17, 1636, 33, 1635, 35, 13, 18, 1633, 36, 17, 16, 16, 21, 23, 26, 13, 17, 23, 9, 12, 12, 16, 12, 23, 17, 28, 18, 17, - 12, 33, 12, 35, 1682, 18, 20, 36, 17, 12, - 820, 12, 820, 20, 1681, 20, 43, 19, 12, 12, - 820, 12, 46, 46, 46, 19, 1676, 12, 1603, 12, - 47, 19, 1578, 20, 1555, 48, 12, 19, 12, 14, + 12, 33, 12, 35, 1603, 18, 20, 36, 17, 12, + 795, 12, 795, 20, 1539, 20, 43, 19, 12, 12, + 795, 12, 46, 46, 46, 19, 1517, 12, 1429, 12, + 47, 19, 1418, 20, 1415, 48, 12, 19, 12, 14, 20, 14, 20, 43, 19, 49, 14, 14, 50, 22, 14, 29, 19, 14, 51, 29, 22, 47, 19, 22, - 52, 22, 48, 14, 19, 1484, 14, 53, 14, 29, - 189, 189, 49, 14, 14, 50, 22, 14, 29, 54, + 52, 22, 48, 14, 19, 1414, 14, 53, 14, 29, + 187, 187, 49, 14, 14, 50, 22, 14, 29, 54, - 14, 51, 29, 22, 55, 57, 22, 52, 22, 59, + 14, 51, 29, 22, 55, 57, 22, 52, 22, 58, 14, 15, 32, 32, 53, 15, 29, 34, 32, 15, - 62, 34, 15, 63, 34, 15, 54, 1265, 1265, 65, - 1473, 55, 57, 56, 1470, 56, 59, 58, 15, 32, - 32, 58, 15, 65, 34, 32, 15, 62, 34, 15, - 63, 34, 15, 24, 24, 60, 65, 24, 61, 61, - 56, 24, 56, 66, 58, 24, 67, 24, 58, 60, - 65, 68, 1469, 69, 71, 60, 1433, 1433, 72, 73, - 24, 24, 60, 71, 24, 61, 61, 70, 24, 70, - 66, 74, 24, 67, 24, 25, 60, 25, 68, 25, - - 69, 71, 60, 25, 70, 72, 73, 76, 75, 25, - 71, 77, 78, 80, 70, 25, 70, 81, 74, 75, - 82, 79, 25, 79, 25, 83, 25, 84, 85, 86, - 25, 70, 87, 1464, 76, 75, 25, 88, 77, 78, - 80, 89, 25, 27, 81, 91, 75, 82, 79, 91, - 79, 27, 83, 93, 84, 85, 86, 27, 90, 87, - 27, 27, 1453, 94, 88, 1429, 1415, 95, 89, 94, - 27, 96, 91, 1396, 1388, 90, 91, 1385, 27, 98, - 93, 92, 99, 1384, 27, 90, 92, 27, 27, 30, - 94, 101, 30, 30, 95, 30, 94, 1375, 96, 30, - - 30, 30, 90, 30, 30, 935, 98, 935, 92, 99, - 100, 103, 1369, 92, 106, 935, 30, 107, 101, 30, - 30, 108, 30, 1338, 97, 100, 30, 30, 30, 1337, - 30, 30, 31, 102, 97, 104, 1331, 100, 103, 31, - 97, 106, 31, 104, 107, 109, 102, 105, 108, 110, - 31, 97, 100, 111, 113, 1329, 31, 1323, 1314, 31, - 102, 97, 104, 105, 105, 115, 31, 97, 1299, 31, - 104, 114, 109, 116, 105, 1298, 110, 31, 117, 115, - 111, 113, 114, 31, 64, 64, 114, 118, 114, 64, - 105, 105, 115, 120, 119, 116, 121, 64, 114, 122, - - 116, 123, 64, 1297, 119, 117, 115, 124, 125, 114, - 1296, 64, 64, 114, 118, 114, 64, 127, 128, 130, - 120, 119, 116, 121, 64, 131, 122, 134, 123, 64, - 112, 119, 112, 112, 124, 125, 135, 112, 136, 112, - 133, 132, 112, 133, 127, 128, 130, 132, 112, 1295, - 137, 138, 131, 139, 134, 140, 136, 112, 142, 112, - 112, 1294, 144, 135, 112, 136, 112, 133, 132, 112, - 133, 145, 1291, 146, 132, 112, 129, 137, 138, 129, - 139, 143, 140, 136, 147, 142, 129, 129, 143, 144, - 149, 150, 151, 129, 152, 153, 154, 155, 145, 129, - - 146, 156, 157, 129, 158, 159, 129, 160, 143, 161, - 162, 147, 163, 129, 129, 143, 164, 149, 150, 151, - 129, 152, 153, 154, 155, 166, 129, 167, 156, 157, - 168, 158, 159, 169, 160, 170, 161, 162, 171, 163, - 172, 173, 174, 164, 175, 176, 177, 178, 179, 180, - 181, 182, 166, 184, 167, 183, 183, 168, 185, 177, - 169, 187, 170, 188, 190, 171, 191, 172, 173, 174, - 193, 175, 176, 177, 178, 179, 180, 181, 182, 194, - 184, 192, 183, 183, 192, 185, 177, 195, 187, 196, - 188, 190, 197, 191, 198, 200, 202, 193, 203, 204, - - 206, 205, 207, 208, 209, 210, 194, 205, 192, 211, - 212, 192, 213, 214, 195, 215, 196, 217, 218, 197, - 219, 198, 200, 202, 220, 203, 204, 206, 205, 207, - 208, 209, 210, 216, 221, 222, 211, 212, 216, 213, - 214, 223, 215, 224, 217, 218, 225, 219, 226, 227, - 228, 220, 229, 230, 231, 232, 234, 235, 237, 235, - 216, 221, 222, 238, 239, 216, 241, 242, 223, 244, - 224, 245, 246, 225, 247, 226, 227, 228, 249, 229, - 230, 231, 232, 234, 235, 237, 235, 252, 253, 251, - 238, 239, 254, 241, 242, 251, 244, 255, 245, 246, - - 256, 247, 257, 258, 259, 249, 260, 255, 261, 262, - 263, 264, 265, 266, 252, 253, 251, 267, 268, 254, - 264, 269, 251, 271, 255, 272, 274, 256, 270, 257, - 258, 259, 275, 260, 255, 261, 262, 263, 264, 265, - 266, 276, 270, 277, 267, 268, 280, 283, 269, 284, - 271, 285, 272, 274, 286, 270, 287, 288, 290, 275, - 291, 292, 293, 294, 295, 298, 299, 301, 276, 270, - 277, 302, 303, 280, 283, 305, 284, 306, 285, 307, - 308, 286, 309, 287, 288, 290, 310, 291, 292, 293, - 294, 295, 298, 299, 301, 311, 313, 314, 302, 303, - - 316, 317, 305, 318, 306, 320, 307, 308, 323, 309, - 321, 324, 325, 310, 326, 326, 321, 330, 332, 333, - 334, 336, 311, 313, 314, 337, 338, 316, 317, 339, - 318, 1280, 320, 341, 321, 323, 1262, 321, 324, 325, - 342, 326, 326, 321, 330, 332, 333, 334, 336, 1257, - 343, 344, 337, 338, 347, 348, 339, 340, 340, 340, - 341, 345, 351, 340, 353, 340, 345, 342, 340, 355, - 340, 356, 357, 358, 1255, 362, 340, 343, 344, 340, - 366, 347, 348, 359, 340, 340, 340, 367, 345, 351, - 340, 353, 340, 345, 368, 340, 355, 340, 356, 357, - - 358, 359, 362, 340, 369, 370, 340, 366, 371, 359, - 359, 372, 373, 374, 367, 375, 377, 378, 380, 379, - 381, 368, 380, 382, 384, 385, 386, 380, 359, 379, - 387, 369, 370, 389, 390, 371, 391, 392, 372, 373, - 374, 393, 375, 377, 378, 380, 379, 381, 394, 380, - 382, 384, 385, 386, 380, 388, 388, 387, 395, 397, - 389, 390, 398, 391, 392, 388, 399, 400, 393, 401, - 402, 403, 405, 406, 407, 394, 409, 410, 411, 412, - 413, 414, 388, 388, 415, 395, 397, 416, 417, 398, - 418, 1254, 388, 399, 400, 420, 401, 402, 403, 405, - - 406, 407, 421, 409, 410, 411, 412, 413, 414, 423, - 424, 415, 426, 419, 416, 417, 428, 418, 419, 421, - 431, 432, 420, 433, 436, 437, 438, 440, 442, 421, - 443, 444, 445, 446, 447, 449, 423, 424, 451, 426, - 419, 452, 453, 428, 454, 419, 421, 431, 432, 455, - 433, 436, 437, 438, 440, 442, 456, 443, 444, 445, - 446, 447, 449, 457, 459, 451, 460, 461, 452, 453, - 462, 454, 463, 457, 464, 465, 455, 468, 469, 470, - 471, 472, 473, 456, 474, 475, 476, 478, 477, 480, - 457, 459, 481, 460, 461, 1243, 482, 462, 477, 463, - - 457, 464, 465, 480, 468, 469, 470, 471, 472, 473, - 479, 474, 475, 476, 478, 477, 480, 483, 484, 481, - 485, 486, 479, 482, 487, 477, 488, 489, 490, 491, - 480, 492, 493, 494, 495, 496, 497, 479, 492, 498, - 500, 501, 1240, 504, 483, 484, 500, 485, 486, 479, - 505, 487, 503, 488, 489, 490, 491, 506, 492, 493, - 494, 495, 496, 497, 502, 492, 498, 500, 501, 503, - 504, 507, 508, 500, 511, 502, 512, 505, 510, 503, - 513, 510, 514, 515, 506, 516, 518, 519, 520, 521, - 522, 502, 525, 529, 530, 1215, 503, 531, 507, 508, - - 533, 511, 502, 512, 534, 510, 535, 513, 510, 514, - 515, 536, 516, 518, 519, 520, 521, 522, 528, 525, - 529, 530, 528, 537, 531, 538, 539, 533, 528, 540, - 541, 534, 542, 535, 543, 544, 545, 547, 536, 548, - 549, 552, 555, 557, 559, 528, 560, 561, 562, 528, - 537, 563, 538, 539, 564, 528, 540, 541, 565, 542, - 566, 543, 544, 545, 547, 567, 548, 549, 552, 555, - 557, 559, 564, 560, 561, 562, 568, 569, 563, 570, - 571, 564, 572, 573, 574, 565, 575, 566, 576, 577, - 578, 581, 567, 583, 584, 585, 586, 587, 589, 590, - - 591, 592, 593, 568, 569, 595, 570, 571, 598, 572, - 573, 574, 599, 575, 602, 576, 577, 578, 581, 603, - 583, 584, 585, 586, 587, 589, 590, 591, 592, 593, - 600, 607, 595, 601, 601, 598, 608, 609, 600, 599, - 610, 602, 611, 612, 613, 614, 603, 615, 616, 617, - 618, 620, 622, 623, 624, 625, 626, 600, 607, 628, - 601, 601, 629, 608, 609, 600, 630, 610, 631, 611, - 612, 613, 614, 632, 615, 616, 617, 618, 620, 622, - 623, 624, 625, 626, 633, 634, 628, 636, 637, 629, - 638, 639, 640, 630, 642, 631, 643, 644, 645, 647, - - 632, 650, 651, 653, 654, 655, 656, 657, 658, 659, - 659, 633, 634, 660, 636, 637, 661, 638, 639, 640, - 663, 642, 664, 643, 644, 645, 647, 665, 650, 651, - 653, 654, 655, 656, 657, 658, 659, 659, 666, 667, - 660, 668, 670, 661, 671, 1206, 674, 663, 677, 664, - 680, 1181, 681, 1166, 665, 1158, 1153, 682, 684, 685, - 687, 1126, 688, 691, 692, 666, 667, 693, 668, 670, - 694, 671, 672, 674, 695, 677, 672, 680, 672, 681, - 672, 696, 672, 672, 682, 684, 685, 687, 672, 688, - 691, 692, 697, 698, 693, 699, 700, 694, 701, 672, - - 702, 695, 704, 672, 705, 672, 708, 672, 696, 672, - 672, 709, 711, 713, 715, 672, 716, 717, 718, 697, - 698, 719, 699, 700, 723, 701, 724, 702, 725, 704, - 726, 705, 727, 708, 728, 729, 730, 731, 709, 711, - 713, 715, 733, 716, 717, 718, 734, 735, 719, 736, - 737, 723, 738, 724, 739, 725, 740, 726, 741, 727, - 742, 728, 729, 730, 731, 732, 732, 732, 743, 733, - 744, 745, 746, 734, 735, 747, 736, 737, 748, 738, - 749, 739, 750, 740, 751, 741, 752, 742, 753, 754, - 756, 757, 732, 732, 732, 743, 758, 744, 745, 746, - - 761, 762, 747, 764, 766, 748, 767, 749, 768, 750, - 769, 751, 770, 752, 771, 753, 754, 756, 757, 772, - 773, 774, 775, 758, 777, 778, 779, 761, 762, 780, - 764, 766, 781, 767, 783, 768, 784, 769, 786, 770, - 787, 771, 788, 790, 791, 792, 772, 773, 774, 775, - 793, 777, 778, 779, 794, 795, 780, 796, 798, 781, - 799, 783, 797, 784, 807, 786, 808, 787, 809, 788, - 790, 791, 792, 797, 813, 815, 818, 793, 819, 821, - 822, 794, 795, 823, 796, 798, 824, 799, 826, 797, - 827, 807, 829, 808, 830, 809, 831, 832, 833, 836, - - 797, 813, 815, 818, 835, 819, 821, 822, 835, 838, - 823, 835, 1108, 824, 839, 826, 840, 827, 841, 829, - 843, 830, 837, 831, 832, 833, 836, 837, 844, 845, - 846, 835, 847, 848, 850, 835, 838, 851, 835, 837, - 853, 839, 854, 840, 855, 841, 856, 843, 857, 837, - 858, 859, 860, 861, 837, 844, 845, 846, 862, 847, - 848, 850, 863, 864, 851, 866, 837, 853, 868, 854, - 869, 855, 871, 856, 872, 857, 874, 858, 859, 860, - 861, 875, 876, 877, 878, 862, 879, 881, 882, 863, - 864, 883, 866, 884, 885, 868, 887, 869, 889, 871, - - 891, 872, 892, 874, 885, 893, 894, 896, 875, 876, - 877, 878, 897, 879, 881, 882, 898, 899, 883, 900, - 884, 885, 901, 887, 902, 889, 903, 891, 904, 892, - 905, 885, 893, 894, 896, 906, 907, 908, 909, 897, - 910, 911, 912, 898, 899, 913, 900, 914, 915, 901, - 916, 902, 917, 903, 919, 904, 920, 905, 921, 922, - 923, 924, 906, 907, 908, 909, 925, 910, 911, 912, - 927, 928, 913, 929, 914, 915, 930, 916, 931, 917, - 932, 919, 933, 920, 934, 921, 922, 923, 924, 938, - 939, 942, 946, 925, 947, 948, 949, 927, 928, 950, - - 929, 951, 952, 930, 953, 931, 954, 932, 955, 933, - 956, 934, 958, 960, 961, 962, 938, 939, 942, 946, - 963, 947, 948, 949, 964, 965, 950, 969, 951, 952, - 968, 953, 971, 954, 968, 955, 972, 956, 973, 958, - 960, 961, 962, 974, 976, 978, 979, 963, 981, 982, - 983, 964, 965, 981, 969, 984, 985, 968, 986, 971, - 989, 968, 990, 972, 994, 973, 995, 996, 997, 988, - 974, 976, 978, 979, 998, 981, 982, 983, 988, 999, - 981, 1000, 984, 985, 1001, 986, 988, 989, 1002, 990, - 1003, 994, 1005, 995, 996, 997, 988, 1007, 1009, 1010, - - 1014, 998, 1015, 1016, 1017, 988, 999, 1018, 1000, 1019, - 1020, 1001, 1021, 988, 1022, 1002, 1023, 1003, 1024, 1005, - 1025, 1026, 1027, 1028, 1007, 1009, 1010, 1014, 1029, 1015, - 1016, 1017, 1030, 1031, 1018, 1032, 1019, 1020, 1033, 1021, - 1034, 1022, 1035, 1023, 1036, 1024, 1037, 1025, 1026, 1027, - 1028, 1038, 1039, 1041, 1042, 1029, 1043, 1044, 1049, 1030, - 1031, 1036, 1032, 1050, 1051, 1033, 1052, 1034, 1054, 1035, - 1055, 1036, 1056, 1037, 1057, 1058, 1059, 1060, 1038, 1039, - 1041, 1042, 1061, 1043, 1044, 1049, 1062, 1063, 1036, 1064, - 1050, 1051, 1065, 1052, 1066, 1054, 1067, 1055, 1068, 1056, - - 1069, 1057, 1058, 1059, 1060, 1071, 1073, 1074, 1075, 1061, - 1076, 1077, 1078, 1062, 1063, 1079, 1064, 1080, 1081, 1065, - 1083, 1066, 1084, 1067, 1085, 1068, 1086, 1069, 1087, 1088, - 1090, 1091, 1071, 1073, 1074, 1075, 1093, 1076, 1077, 1078, - 1094, 1095, 1079, 1096, 1080, 1081, 1098, 1083, 1099, 1084, - 1100, 1085, 1101, 1086, 1104, 1087, 1088, 1090, 1091, 1105, - 1106, 1107, 1109, 1093, 1110, 1111, 1112, 1094, 1095, 1113, - 1096, 1115, 1116, 1098, 1117, 1099, 1118, 1100, 1123, 1101, - 1124, 1104, 1125, 1127, 1128, 1129, 1105, 1106, 1107, 1109, - 1130, 1110, 1111, 1112, 1131, 1132, 1113, 1133, 1115, 1116, - - 1134, 1117, 1135, 1118, 1136, 1123, 1137, 1124, 1138, 1125, - 1127, 1128, 1129, 1139, 1140, 1141, 1142, 1130, 1143, 1144, - 1145, 1131, 1132, 1146, 1133, 1147, 1148, 1134, 1149, 1135, - 1150, 1136, 1151, 1137, 1155, 1138, 1156, 1157, 1160, 1161, - 1139, 1140, 1141, 1142, 1162, 1143, 1144, 1145, 1163, 1164, - 1146, 1165, 1147, 1148, 1167, 1149, 1169, 1150, 1171, 1151, - 1170, 1155, 1172, 1156, 1157, 1160, 1161, 1173, 1170, 1174, - 1175, 1162, 1176, 1177, 1178, 1163, 1164, 1179, 1165, 1180, - 1182, 1167, 1183, 1169, 1184, 1171, 1185, 1170, 1187, 1172, - 1188, 1189, 1191, 1192, 1173, 1193, 1174, 1175, 1194, 1176, - - 1177, 1178, 1195, 1196, 1179, 1197, 1180, 1182, 1198, 1183, - 1199, 1184, 1200, 1185, 1198, 1187, 1202, 1188, 1189, 1191, - 1192, 1207, 1193, 1208, 1209, 1194, 1210, 1211, 1212, 1195, - 1196, 1213, 1197, 1214, 1216, 1198, 1217, 1199, 1218, 1200, - 1219, 1198, 1220, 1202, 1221, 1222, 1223, 1224, 1207, 1225, - 1208, 1209, 1226, 1210, 1211, 1212, 1227, 1229, 1213, 1230, - 1214, 1216, 1231, 1217, 1232, 1218, 1233, 1219, 1234, 1220, - 1235, 1221, 1222, 1223, 1224, 1236, 1225, 1237, 1238, 1226, - 1239, 1241, 1244, 1227, 1229, 1245, 1230, 1246, 1248, 1231, - 1249, 1232, 1250, 1233, 1252, 1234, 1253, 1235, 1256, 1258, - - 1259, 1261, 1236, 1263, 1237, 1238, 1264, 1239, 1241, 1244, - 1266, 1268, 1245, 1269, 1246, 1248, 1270, 1249, 1271, 1250, - 1273, 1252, 1274, 1253, 1277, 1256, 1258, 1259, 1261, 1278, - 1263, 1279, 1281, 1264, 1282, 1283, 1284, 1266, 1268, 1287, - 1269, 1288, 1289, 1270, 1290, 1271, 1292, 1273, 1293, 1274, - 1300, 1277, 1301, 1302, 1304, 1305, 1278, 1306, 1279, 1281, - 1308, 1282, 1283, 1284, 1310, 1311, 1287, 1312, 1288, 1289, - 1313, 1290, 1315, 1292, 1316, 1293, 1317, 1300, 1318, 1301, - 1302, 1304, 1305, 1319, 1306, 1320, 1322, 1308, 1324, 1315, - 1325, 1310, 1311, 1327, 1312, 1328, 1330, 1313, 1332, 1315, - - 1333, 1316, 1334, 1317, 1335, 1318, 1336, 1339, 1340, 1341, - 1319, 1343, 1320, 1322, 1344, 1324, 1315, 1325, 1347, 1334, - 1327, 1349, 1328, 1330, 1350, 1332, 1351, 1333, 1352, 1334, - 1354, 1335, 1355, 1336, 1339, 1340, 1341, 1356, 1343, 1357, - 1358, 1344, 1359, 1360, 1361, 1347, 1334, 1362, 1349, 1363, - 1364, 1350, 1365, 1351, 1366, 1352, 1367, 1354, 1371, 1355, - 1372, 1373, 1374, 1377, 1356, 1378, 1357, 1358, 1379, 1359, - 1360, 1361, 1380, 1381, 1362, 1382, 1363, 1364, 1383, 1365, - 1386, 1366, 1387, 1367, 1387, 1371, 1389, 1372, 1373, 1374, - 1377, 1390, 1378, 1391, 1393, 1379, 1394, 1392, 1395, 1380, - - 1381, 1397, 1382, 1398, 1399, 1383, 1400, 1386, 1401, 1387, - 1402, 1387, 1404, 1389, 1392, 1405, 1406, 1407, 1390, 1408, - 1391, 1393, 1409, 1394, 1392, 1395, 1410, 1411, 1397, 1412, - 1398, 1399, 1413, 1400, 1414, 1401, 1416, 1402, 1417, 1404, - 1418, 1392, 1405, 1406, 1407, 1419, 1408, 1420, 1421, 1409, - 1422, 1423, 1424, 1410, 1411, 1425, 1412, 1427, 1428, 1413, - 1432, 1414, 1434, 1416, 1435, 1417, 1436, 1418, 1437, 1438, - 1439, 1440, 1419, 1442, 1420, 1421, 1443, 1422, 1423, 1424, - 1444, 1445, 1425, 1448, 1427, 1428, 1449, 1432, 1450, 1434, - 1451, 1435, 1452, 1436, 1455, 1437, 1438, 1439, 1440, 1456, - - 1442, 1457, 1458, 1443, 1459, 1460, 1461, 1444, 1445, 1463, - 1448, 1466, 1467, 1449, 1468, 1450, 1472, 1451, 1474, 1452, - 1475, 1455, 1476, 1477, 1478, 1479, 1456, 1480, 1457, 1458, - 1481, 1459, 1460, 1461, 1482, 1483, 1463, 1485, 1466, 1467, - 1486, 1468, 1489, 1472, 1490, 1474, 1491, 1475, 1492, 1476, - 1477, 1478, 1479, 1493, 1480, 1494, 1495, 1481, 1496, 1497, - 1498, 1482, 1483, 1499, 1485, 1500, 1501, 1486, 1502, 1489, - 1503, 1490, 1504, 1491, 1505, 1492, 1506, 1507, 1508, 1509, - 1493, 1510, 1494, 1495, 1511, 1496, 1497, 1498, 1514, 1515, - 1499, 1518, 1500, 1501, 1519, 1502, 1520, 1503, 1521, 1504, - - 1522, 1505, 1523, 1506, 1507, 1508, 1509, 1525, 1510, 1526, - 1527, 1511, 1528, 1529, 1530, 1514, 1515, 1531, 1518, 1532, - 1533, 1519, 1534, 1520, 1535, 1521, 1536, 1522, 1538, 1523, - 1539, 1540, 1541, 1542, 1525, 1543, 1526, 1527, 1544, 1528, - 1529, 1530, 1545, 1546, 1531, 1547, 1532, 1533, 1548, 1534, - 1549, 1535, 1550, 1536, 1551, 1538, 1552, 1539, 1540, 1541, - 1542, 1554, 1543, 1556, 1557, 1544, 1558, 1559, 1560, 1545, - 1546, 1561, 1547, 1562, 1563, 1548, 1565, 1549, 1572, 1550, - 1573, 1551, 1574, 1552, 1575, 1576, 1579, 1580, 1554, 1581, - 1556, 1557, 1583, 1558, 1559, 1560, 1585, 1586, 1561, 1587, - - 1562, 1563, 1589, 1565, 1591, 1572, 1593, 1573, 1594, 1574, - 1595, 1575, 1576, 1579, 1580, 1596, 1581, 1597, 1598, 1583, - 1599, 1601, 1602, 1585, 1586, 1600, 1587, 1600, 1604, 1589, - 1605, 1591, 1606, 1593, 1607, 1594, 1608, 1595, 1611, 1609, - 1612, 1614, 1596, 1615, 1597, 1598, 1617, 1599, 1601, 1602, - 1618, 1620, 1600, 1621, 1600, 1604, 1609, 1605, 1622, 1606, - 1623, 1607, 1624, 1608, 1625, 1611, 1609, 1612, 1614, 1626, - 1615, 1627, 1628, 1617, 1629, 1630, 1631, 1618, 1620, 1632, - 1621, 1633, 1634, 1609, 1636, 1622, 1637, 1623, 1638, 1624, - 1639, 1625, 1643, 1644, 1645, 1646, 1626, 1647, 1627, 1628, - - 1648, 1629, 1630, 1631, 1651, 1652, 1632, 1653, 1633, 1634, - 1654, 1636, 1655, 1637, 1656, 1638, 1657, 1639, 1658, 1643, - 1644, 1645, 1646, 1659, 1647, 1660, 1662, 1648, 1664, 1665, - 1666, 1651, 1652, 1667, 1653, 1669, 1670, 1654, 1672, 1655, - 1677, 1656, 1678, 1657, 1679, 1658, 1680, 1684, 1685, 1686, - 1659, 1687, 1660, 1662, 1688, 1664, 1665, 1666, 1691, 1692, - 1667, 1693, 1669, 1670, 1694, 1672, 1696, 1677, 1697, 1678, - 1699, 1679, 1700, 1680, 1684, 1685, 1686, 1701, 1687, 1702, - 1703, 1688, 1704, 1706, 1707, 1691, 1692, 1708, 1693, 1709, - 1710, 1694, 1711, 1696, 1712, 1697, 1713, 1699, 1714, 1700, - - 1719, 1082, 1048, 1047, 1701, 1046, 1702, 1703, 1045, 1704, - 1706, 1707, 1006, 1004, 1708, 991, 1709, 1710, 977, 1711, - 970, 1712, 967, 1713, 957, 1714, 944, 1719, 1723, 1723, - 941, 940, 937, 936, 926, 873, 867, 865, 834, 817, - 810, 806, 805, 804, 803, 802, 801, 800, 765, 763, - 720, 714, 712, 710, 690, 676, 675, 669, 648, 635, - 621, 596, 594, 588, 582, 579, 556, 553, 546, 532, - 526, 523, 499, 467, 466, 439, 434, 427, 408, 376, - 364, 361, 352, 346, 335, 331, 319, 304, 289, 281, - 278, 250, 236, 201, 186, 148, 126, 37, 5, 3, - - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, 1721, - 1721, 1721, 1721, 1721, 1721, 1721, 1721 + 59, 34, 15, 60, 34, 15, 54, 1409, 61, 61, + 1401, 55, 57, 56, 1377, 56, 58, 60, 15, 32, + 32, 62, 15, 60, 34, 32, 15, 59, 34, 15, + 60, 34, 15, 24, 24, 61, 61, 24, 63, 65, + 56, 24, 56, 66, 60, 67, 68, 24, 62, 69, + 60, 72, 1363, 65, 71, 73, 1381, 1381, 74, 1347, + 24, 24, 1339, 71, 24, 63, 65, 70, 24, 70, + 66, 76, 67, 68, 24, 25, 69, 25, 72, 25, + + 65, 71, 73, 25, 70, 74, 75, 77, 78, 25, + 71, 79, 80, 79, 70, 25, 70, 75, 76, 81, + 82, 83, 25, 84, 25, 85, 25, 86, 87, 88, + 25, 70, 89, 75, 77, 78, 25, 90, 79, 80, + 79, 91, 25, 27, 75, 91, 81, 82, 83, 93, + 84, 27, 85, 92, 86, 87, 88, 27, 92, 89, + 27, 27, 1336, 94, 90, 1335, 1326, 95, 91, 97, + 27, 98, 91, 905, 1320, 905, 93, 1285, 27, 100, + 92, 96, 102, 905, 27, 92, 1283, 27, 27, 30, + 94, 96, 30, 30, 95, 30, 97, 96, 98, 30, + + 30, 30, 99, 30, 30, 1277, 100, 105, 96, 102, + 101, 106, 1268, 103, 107, 1253, 30, 99, 96, 30, + 30, 103, 30, 101, 96, 1252, 30, 30, 30, 99, + 30, 30, 31, 108, 105, 104, 109, 101, 106, 31, + 103, 107, 31, 110, 99, 112, 115, 114, 103, 1251, + 31, 104, 104, 1250, 116, 1249, 31, 1248, 1245, 31, + 108, 114, 104, 109, 117, 113, 31, 119, 115, 31, + 110, 120, 112, 115, 114, 1234, 113, 31, 104, 104, + 113, 116, 113, 31, 64, 64, 118, 121, 114, 64, + 122, 117, 113, 123, 119, 115, 118, 64, 120, 124, + + 126, 127, 64, 113, 129, 1219, 1214, 113, 130, 113, + 1212, 64, 64, 118, 121, 1211, 64, 122, 133, 131, + 123, 1200, 134, 118, 64, 131, 124, 126, 127, 64, + 111, 129, 111, 111, 136, 130, 135, 111, 132, 111, + 137, 132, 111, 138, 139, 133, 131, 141, 111, 134, + 143, 142, 131, 144, 135, 145, 146, 111, 142, 111, + 111, 136, 148, 135, 111, 132, 111, 137, 132, 111, + 138, 139, 1197, 149, 141, 111, 128, 143, 142, 128, + 144, 135, 145, 146, 150, 142, 128, 128, 151, 148, + 152, 153, 154, 128, 155, 156, 157, 158, 159, 128, + + 149, 160, 161, 128, 162, 164, 128, 165, 166, 167, + 168, 150, 169, 128, 128, 151, 170, 152, 153, 154, + 128, 155, 156, 157, 158, 159, 128, 171, 160, 161, + 172, 162, 164, 173, 165, 166, 167, 168, 174, 169, + 175, 176, 177, 170, 178, 179, 180, 181, 181, 182, + 183, 185, 186, 175, 171, 188, 189, 172, 190, 191, + 173, 190, 192, 193, 194, 174, 195, 175, 176, 177, + 197, 178, 179, 180, 181, 181, 182, 183, 185, 186, + 175, 199, 188, 189, 200, 190, 191, 202, 190, 192, + 193, 194, 201, 195, 203, 204, 205, 197, 201, 206, + + 207, 208, 209, 210, 211, 212, 213, 214, 199, 211, + 215, 200, 216, 217, 202, 218, 219, 220, 221, 201, + 222, 203, 204, 205, 223, 224, 206, 207, 208, 209, + 210, 211, 212, 213, 214, 225, 211, 215, 226, 216, + 217, 227, 218, 219, 220, 221, 229, 222, 230, 232, + 230, 223, 224, 233, 234, 236, 237, 239, 240, 241, + 242, 244, 225, 246, 247, 226, 248, 249, 227, 250, + 251, 252, 253, 229, 254, 230, 232, 230, 255, 250, + 233, 234, 236, 237, 239, 240, 241, 242, 244, 256, + 246, 247, 257, 248, 249, 258, 250, 251, 252, 253, + + 259, 254, 260, 261, 262, 255, 250, 263, 264, 259, + 265, 266, 267, 269, 270, 271, 256, 272, 275, 257, + 278, 279, 258, 280, 265, 281, 282, 259, 284, 260, + 261, 262, 285, 286, 263, 264, 287, 265, 266, 267, + 269, 270, 271, 288, 272, 275, 289, 278, 279, 292, + 280, 265, 281, 282, 293, 284, 295, 296, 297, 285, + 286, 299, 300, 287, 301, 302, 303, 304, 305, 307, + 288, 308, 310, 289, 311, 312, 292, 314, 317, 318, + 319, 293, 324, 295, 296, 297, 320, 320, 299, 300, + 326, 301, 302, 303, 304, 305, 307, 315, 308, 310, + + 327, 311, 312, 315, 314, 317, 318, 319, 328, 324, + 330, 331, 332, 320, 320, 1172, 334, 326, 335, 1163, + 336, 315, 338, 337, 315, 339, 1141, 327, 337, 342, + 315, 344, 1126, 346, 347, 328, 348, 330, 331, 332, + 333, 333, 333, 334, 349, 335, 333, 336, 333, 338, + 337, 333, 339, 333, 353, 337, 342, 357, 344, 333, + 346, 347, 333, 348, 350, 358, 359, 333, 333, 333, + 360, 349, 361, 333, 362, 333, 363, 364, 333, 365, + 333, 353, 350, 366, 357, 368, 333, 369, 370, 333, + 350, 350, 358, 359, 372, 373, 371, 360, 370, 361, + + 371, 362, 375, 363, 364, 371, 365, 376, 377, 350, + 366, 378, 368, 380, 369, 370, 379, 379, 381, 382, + 383, 372, 373, 371, 384, 385, 379, 371, 387, 375, + 388, 389, 371, 390, 376, 377, 391, 392, 378, 393, + 380, 395, 396, 379, 379, 381, 382, 383, 397, 399, + 400, 384, 385, 379, 401, 387, 402, 388, 389, 403, + 390, 404, 405, 391, 392, 406, 393, 407, 395, 396, + 408, 410, 413, 409, 411, 397, 399, 400, 409, 414, + 416, 401, 417, 402, 420, 421, 403, 422, 404, 405, + 425, 411, 406, 426, 407, 427, 429, 408, 410, 413, + + 409, 411, 431, 432, 433, 409, 414, 416, 434, 417, + 435, 420, 421, 436, 422, 438, 440, 425, 411, 441, + 426, 442, 427, 429, 443, 444, 445, 448, 446, 431, + 432, 433, 449, 450, 451, 434, 452, 435, 446, 453, + 436, 454, 438, 440, 457, 458, 441, 459, 442, 460, + 461, 443, 444, 445, 448, 446, 462, 463, 464, 449, + 450, 451, 466, 452, 468, 446, 453, 469, 454, 465, + 467, 457, 458, 470, 459, 471, 460, 461, 468, 465, + 472, 473, 467, 462, 463, 464, 474, 475, 476, 466, + 477, 468, 478, 479, 469, 480, 465, 467, 481, 478, + + 470, 482, 471, 483, 484, 468, 465, 472, 473, 467, + 486, 487, 488, 474, 475, 476, 486, 477, 489, 478, + 479, 490, 480, 488, 491, 481, 478, 492, 482, 493, + 483, 484, 494, 496, 497, 489, 496, 486, 487, 488, + 498, 499, 500, 486, 501, 489, 502, 504, 490, 505, + 488, 491, 506, 507, 492, 508, 493, 511, 515, 494, + 496, 497, 489, 496, 516, 518, 519, 498, 499, 500, + 520, 501, 521, 502, 504, 522, 505, 514, 523, 506, + 507, 514, 508, 524, 511, 515, 525, 514, 526, 527, + 528, 516, 518, 519, 529, 530, 532, 520, 533, 521, + + 534, 537, 522, 540, 514, 523, 542, 544, 514, 545, + 524, 546, 547, 525, 514, 526, 527, 528, 548, 549, + 550, 529, 530, 532, 551, 533, 552, 534, 537, 553, + 540, 554, 555, 542, 544, 556, 545, 549, 546, 547, + 557, 558, 559, 560, 561, 548, 549, 550, 562, 565, + 567, 551, 568, 552, 569, 570, 553, 571, 554, 555, + 573, 574, 556, 575, 576, 577, 579, 557, 558, 559, + 560, 561, 582, 583, 586, 562, 565, 567, 584, 568, + 590, 569, 570, 591, 571, 592, 584, 573, 574, 593, + 575, 576, 577, 579, 585, 585, 594, 595, 596, 582, + + 583, 586, 597, 598, 599, 584, 600, 590, 601, 603, + 591, 604, 592, 584, 605, 606, 593, 607, 609, 610, + 611, 585, 585, 594, 595, 596, 612, 613, 614, 597, + 598, 599, 615, 600, 617, 601, 603, 618, 604, 619, + 620, 605, 606, 621, 607, 609, 610, 611, 623, 624, + 625, 626, 628, 612, 613, 614, 631, 632, 634, 615, + 635, 617, 636, 637, 618, 638, 619, 620, 639, 641, + 621, 640, 640, 642, 644, 623, 624, 625, 626, 628, + 645, 646, 647, 631, 632, 634, 648, 635, 649, 636, + 637, 651, 638, 654, 657, 639, 641, 660, 640, 640, + + 642, 644, 1118, 1113, 661, 662, 664, 645, 646, 647, + 665, 667, 668, 648, 671, 649, 672, 673, 651, 652, + 654, 657, 674, 652, 660, 652, 675, 652, 676, 652, + 652, 661, 662, 664, 677, 652, 678, 665, 667, 668, + 679, 671, 680, 672, 673, 681, 652, 682, 684, 674, + 652, 687, 652, 675, 652, 676, 652, 652, 688, 690, + 692, 677, 652, 678, 694, 695, 696, 679, 697, 680, + 698, 702, 681, 703, 682, 684, 704, 705, 687, 706, + 707, 708, 709, 710, 712, 688, 690, 692, 711, 711, + 711, 694, 695, 696, 713, 697, 714, 698, 702, 715, + + 703, 716, 717, 704, 705, 718, 706, 707, 708, 709, + 710, 712, 719, 720, 721, 711, 711, 711, 722, 723, + 724, 713, 725, 714, 726, 727, 715, 728, 716, 717, + 729, 730, 718, 731, 733, 734, 737, 738, 740, 719, + 720, 721, 742, 743, 744, 722, 723, 724, 745, 725, + 746, 726, 727, 747, 728, 748, 749, 729, 730, 750, + 731, 733, 734, 737, 738, 740, 751, 753, 754, 742, + 743, 744, 755, 756, 757, 745, 759, 746, 760, 762, + 747, 763, 748, 749, 764, 766, 750, 767, 768, 769, + 770, 771, 772, 751, 753, 754, 773, 774, 782, 755, + + 756, 757, 783, 759, 784, 760, 762, 773, 763, 788, + 790, 764, 766, 793, 767, 768, 769, 770, 771, 772, + 794, 796, 797, 773, 774, 782, 798, 799, 801, 783, + 802, 784, 804, 805, 773, 806, 788, 790, 807, 809, + 793, 810, 812, 809, 813, 814, 809, 794, 796, 797, + 815, 817, 818, 798, 799, 801, 819, 802, 811, 804, + 805, 820, 806, 811, 821, 807, 809, 822, 810, 812, + 809, 813, 814, 809, 824, 811, 825, 815, 817, 818, + 827, 828, 829, 819, 830, 811, 831, 832, 820, 833, + 811, 821, 834, 835, 822, 836, 837, 838, 839, 841, + + 842, 824, 811, 825, 844, 845, 847, 827, 828, 829, + 848, 830, 849, 831, 832, 850, 833, 851, 853, 834, + 835, 854, 836, 837, 838, 839, 841, 842, 855, 858, + 856, 844, 845, 847, 860, 862, 863, 848, 864, 849, + 856, 865, 850, 867, 851, 853, 868, 869, 854, 870, + 871, 872, 873, 874, 875, 855, 858, 856, 876, 877, + 878, 860, 862, 863, 879, 864, 880, 856, 865, 881, + 867, 882, 883, 868, 869, 884, 870, 871, 872, 873, + 874, 875, 885, 886, 887, 876, 877, 878, 888, 889, + 890, 879, 891, 880, 892, 893, 881, 894, 882, 883, + + 895, 897, 884, 898, 899, 900, 901, 902, 903, 885, + 886, 887, 904, 908, 909, 888, 889, 890, 912, 891, + 916, 892, 893, 917, 894, 918, 919, 895, 897, 920, + 898, 899, 900, 901, 902, 903, 921, 922, 923, 904, + 908, 909, 924, 925, 927, 912, 929, 916, 930, 931, + 917, 932, 918, 919, 933, 934, 920, 937, 938, 940, + 941, 937, 942, 921, 922, 923, 943, 945, 947, 924, + 925, 927, 948, 929, 950, 930, 931, 951, 932, 952, + 953, 933, 934, 954, 937, 938, 940, 941, 937, 942, + 957, 956, 958, 943, 945, 947, 962, 963, 964, 948, + + 956, 950, 965, 966, 951, 967, 952, 953, 956, 968, + 954, 969, 971, 973, 975, 976, 980, 957, 956, 958, + 981, 982, 983, 962, 963, 964, 984, 956, 985, 965, + 966, 986, 967, 987, 988, 956, 968, 989, 969, 971, + 973, 975, 976, 980, 990, 991, 992, 981, 982, 983, + 993, 994, 995, 984, 996, 985, 997, 998, 986, 999, + 987, 988, 1000, 1001, 989, 1002, 1003, 1004, 1005, 1007, + 1008, 990, 991, 992, 1009, 1010, 1015, 993, 994, 995, + 1016, 996, 1002, 997, 998, 1017, 999, 1018, 1020, 1000, + 1001, 1021, 1002, 1003, 1004, 1005, 1007, 1008, 1022, 1023, + + 1024, 1009, 1010, 1015, 1025, 1026, 1027, 1016, 1028, 1002, + 1029, 1030, 1017, 1031, 1018, 1020, 1032, 1033, 1021, 1034, + 1036, 1038, 1039, 1040, 1041, 1022, 1023, 1024, 1042, 1043, + 1044, 1025, 1026, 1027, 1045, 1028, 1046, 1029, 1030, 1048, + 1031, 1049, 1050, 1032, 1033, 1051, 1034, 1036, 1038, 1039, + 1040, 1041, 1053, 1054, 1056, 1042, 1043, 1044, 1057, 1058, + 1059, 1045, 1061, 1046, 1062, 1063, 1048, 1065, 1049, 1050, + 1066, 1067, 1051, 1068, 1070, 1071, 1072, 1073, 1074, 1053, + 1054, 1056, 1076, 1077, 1078, 1057, 1058, 1059, 1079, 1061, + 1084, 1062, 1063, 1085, 1065, 1086, 1088, 1066, 1067, 1089, + + 1068, 1070, 1071, 1072, 1073, 1074, 1090, 1091, 1092, 1076, + 1077, 1078, 1093, 1094, 1095, 1079, 1096, 1084, 1097, 1098, + 1085, 1099, 1086, 1088, 1100, 1101, 1089, 1102, 1103, 1104, + 1105, 1106, 1107, 1090, 1091, 1092, 1108, 1109, 1110, 1093, + 1094, 1095, 1111, 1096, 1112, 1097, 1098, 1115, 1099, 1116, + 1117, 1100, 1101, 1120, 1102, 1103, 1104, 1105, 1106, 1107, + 1121, 1122, 1123, 1108, 1109, 1110, 1124, 1125, 1127, 1111, + 1129, 1112, 1131, 1130, 1115, 1132, 1116, 1117, 1133, 1134, + 1120, 1130, 1135, 1136, 1137, 1138, 1139, 1121, 1122, 1123, + 1140, 1142, 1143, 1124, 1125, 1127, 1145, 1129, 1146, 1131, + + 1130, 1147, 1132, 1149, 1150, 1133, 1134, 1151, 1152, 1135, + 1136, 1137, 1138, 1139, 1153, 1154, 1155, 1140, 1142, 1143, + 1156, 1157, 1155, 1145, 1159, 1146, 1164, 1165, 1147, 1166, + 1149, 1150, 1167, 1168, 1151, 1152, 1169, 1170, 1171, 1173, + 1174, 1153, 1154, 1155, 1175, 1176, 1177, 1156, 1157, 1155, + 1178, 1159, 1179, 1164, 1165, 1180, 1166, 1181, 1182, 1167, + 1168, 1183, 1184, 1169, 1170, 1171, 1173, 1174, 1186, 1187, + 1188, 1175, 1176, 1177, 1189, 1190, 1191, 1178, 1192, 1179, + 1193, 1194, 1180, 1195, 1181, 1182, 1196, 1198, 1183, 1184, + 1201, 1202, 1203, 1205, 1206, 1186, 1187, 1188, 1207, 1209, + + 1210, 1189, 1190, 1191, 1213, 1192, 1215, 1193, 1194, 1216, + 1195, 1218, 1220, 1196, 1198, 1221, 1223, 1201, 1202, 1203, + 1205, 1206, 1224, 1225, 1226, 1207, 1209, 1210, 1227, 1228, + 1231, 1213, 1232, 1215, 1233, 1235, 1216, 1236, 1218, 1220, + 1237, 1238, 1221, 1223, 1241, 1242, 1243, 1244, 1246, 1224, + 1225, 1226, 1247, 1254, 1255, 1227, 1228, 1231, 1256, 1232, + 1258, 1233, 1235, 1259, 1236, 1260, 1262, 1237, 1238, 1264, + 1265, 1241, 1242, 1243, 1244, 1246, 1266, 1267, 1269, 1247, + 1254, 1255, 1270, 1271, 1272, 1256, 1273, 1258, 1274, 1276, + 1259, 1278, 1260, 1262, 1279, 1269, 1264, 1265, 1281, 1282, + + 1284, 1286, 1287, 1266, 1267, 1269, 1288, 1289, 1290, 1270, + 1271, 1272, 1291, 1273, 1292, 1274, 1276, 1294, 1278, 1295, + 1298, 1279, 1269, 1288, 1300, 1281, 1282, 1284, 1286, 1287, + 1301, 1302, 1303, 1288, 1289, 1290, 1305, 1306, 1307, 1291, + 1308, 1292, 1309, 1310, 1294, 1311, 1295, 1298, 1312, 1313, + 1288, 1300, 1314, 1315, 1316, 1317, 1318, 1301, 1302, 1303, + 1322, 1323, 1324, 1305, 1306, 1307, 1325, 1308, 1328, 1309, + 1310, 1329, 1311, 1330, 1331, 1312, 1313, 1332, 1333, 1314, + 1315, 1316, 1317, 1318, 1334, 1337, 1340, 1322, 1323, 1324, + 1338, 1341, 1338, 1325, 1342, 1328, 1344, 1343, 1329, 1345, + + 1330, 1331, 1346, 1348, 1332, 1333, 1349, 1350, 1352, 1353, + 1354, 1334, 1337, 1340, 1343, 1355, 1356, 1338, 1341, 1338, + 1357, 1342, 1358, 1344, 1343, 1359, 1345, 1360, 1361, 1346, + 1348, 1362, 1364, 1349, 1350, 1352, 1353, 1354, 1365, 1366, + 1367, 1343, 1355, 1356, 1368, 1369, 1370, 1357, 1371, 1358, + 1372, 1373, 1359, 1375, 1360, 1361, 1376, 1380, 1362, 1364, + 1382, 1383, 1384, 1385, 1386, 1365, 1366, 1367, 1387, 1388, + 1390, 1368, 1369, 1370, 1391, 1371, 1392, 1372, 1373, 1393, + 1375, 1396, 1397, 1376, 1380, 1398, 1399, 1382, 1383, 1384, + 1385, 1386, 1400, 1403, 1404, 1387, 1388, 1390, 1405, 1406, + + 1408, 1391, 1411, 1392, 1412, 1413, 1393, 1417, 1396, 1397, + 1419, 1420, 1398, 1399, 1421, 1422, 1423, 1424, 1425, 1400, + 1403, 1404, 1426, 1427, 1428, 1405, 1406, 1408, 1430, 1411, + 1431, 1412, 1413, 1434, 1417, 1435, 1436, 1419, 1420, 1437, + 1438, 1421, 1422, 1423, 1424, 1425, 1439, 1440, 1441, 1426, + 1427, 1428, 1442, 1443, 1444, 1430, 1445, 1431, 1446, 1447, + 1434, 1448, 1435, 1436, 1449, 1450, 1437, 1438, 1451, 1452, + 1453, 1456, 1457, 1439, 1440, 1441, 1460, 1461, 1462, 1442, + 1443, 1444, 1463, 1445, 1464, 1446, 1447, 1465, 1448, 1467, + 1468, 1449, 1450, 1469, 1470, 1451, 1452, 1453, 1456, 1457, + + 1471, 1472, 1473, 1460, 1461, 1462, 1474, 1475, 1476, 1463, + 1477, 1464, 1478, 1480, 1465, 1481, 1467, 1468, 1482, 1483, + 1469, 1470, 1484, 1485, 1486, 1487, 1488, 1471, 1472, 1473, + 1489, 1490, 1491, 1474, 1475, 1476, 1492, 1477, 1493, 1478, + 1480, 1494, 1481, 1496, 1497, 1482, 1483, 1498, 1499, 1484, + 1485, 1486, 1487, 1488, 1500, 1501, 1502, 1489, 1490, 1491, + 1504, 1511, 1512, 1492, 1513, 1493, 1514, 1515, 1494, 1518, + 1496, 1497, 1519, 1520, 1498, 1499, 1522, 1524, 1525, 1526, + 1528, 1500, 1501, 1502, 1530, 1532, 1533, 1504, 1511, 1512, + 1534, 1513, 1535, 1514, 1515, 1536, 1518, 1536, 1537, 1519, + + 1520, 1538, 1540, 1522, 1524, 1525, 1526, 1528, 1541, 1542, + 1543, 1530, 1532, 1533, 1544, 1545, 1547, 1534, 1548, 1535, + 1550, 1551, 1536, 1553, 1536, 1537, 1554, 1556, 1538, 1540, + 1557, 1558, 1545, 1559, 1560, 1541, 1542, 1543, 1561, 1562, + 1563, 1544, 1545, 1547, 1564, 1548, 1565, 1550, 1551, 1566, + 1553, 1567, 1569, 1554, 1556, 1570, 1571, 1557, 1558, 1545, + 1559, 1560, 1572, 1576, 1577, 1561, 1562, 1563, 1578, 1581, + 1582, 1564, 1583, 1565, 1584, 1585, 1566, 1586, 1567, 1569, + 1587, 1588, 1570, 1571, 1589, 1590, 1592, 1594, 1596, 1572, + 1576, 1577, 1597, 1599, 1604, 1578, 1581, 1582, 1605, 1583, + + 1606, 1584, 1585, 1608, 1586, 1609, 1610, 1587, 1588, 1611, + 1612, 1589, 1590, 1592, 1594, 1596, 1615, 1617, 1618, 1597, + 1599, 1604, 1620, 1621, 1622, 1605, 1623, 1606, 1624, 1625, + 1608, 1626, 1609, 1610, 1627, 1630, 1611, 1612, 1087, 1069, + 1047, 1014, 1013, 1615, 1617, 1618, 1012, 1011, 972, 1620, + 1621, 1622, 970, 1623, 959, 1624, 1625, 946, 1626, 939, + 936, 1627, 1630, 1634, 1634, 926, 914, 911, 910, 907, + 906, 896, 846, 840, 808, 792, 785, 781, 780, 779, + 778, 777, 776, 775, 741, 739, 699, 693, 691, 689, + 670, 656, 655, 650, 629, 616, 580, 578, 572, 566, + + 563, 541, 538, 531, 517, 512, 509, 485, 456, 455, + 428, 423, 398, 367, 355, 352, 343, 329, 325, 313, + 298, 283, 276, 273, 245, 231, 198, 184, 147, 125, + 37, 5, 3, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, + 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632, 1632 + } ; static yy_state_type yy_last_accepting_state; @@ -1751,7 +1691,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2000-2017 ircd-hybrid development team + * Copyright (c) 2000-2018 ircd-hybrid development team * * 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 @@ -1770,7 +1710,7 @@ */ /*! \file conf_lexer.l * \brief Scans the ircd configuration file for tokens. - * \version $Id: conf_lexer.l 8045 2017-03-18 18:05:41Z michael $ + * \version $Id: conf_lexer.l 8313 2018-02-28 17:45:36Z michael $ */ #line 33 "conf_lexer.l" #include "stdinc.h" @@ -1817,8 +1757,8 @@ return 0; } -#line 1820 "conf_lexer.c" -#line 1821 "conf_lexer.c" +#line 1760 "conf_lexer.c" +#line 1761 "conf_lexer.c" #define INITIAL 0 @@ -2026,16 +1966,16 @@ if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer(yyin,YY_BUF_SIZE ); + yy_create_buffer( yyin, YY_BUF_SIZE ); } - yy_load_buffer_state( ); + yy_load_buffer_state( ); } { #line 85 "conf_lexer.l" -#line 2038 "conf_lexer.c" +#line 1978 "conf_lexer.c" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { @@ -2068,13 +2008,13 @@ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1722 ) + if ( yy_current_state >= 1633 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } - while ( yy_current_state != 1721 ); + while ( yy_current_state != 1632 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -2258,1208 +2198,1173 @@ case 25: YY_RULE_SETUP #line 150 "conf_lexer.l" -{ return CHECK_CACHE; } +{ return CIDR_BITLEN_IPV4; } YY_BREAK case 26: YY_RULE_SETUP #line 151 "conf_lexer.l" -{ return CIDR_BITLEN_IPV4; } +{ return CIDR_BITLEN_IPV6; } YY_BREAK case 27: YY_RULE_SETUP #line 152 "conf_lexer.l" -{ return CIDR_BITLEN_IPV6; } +{ return CLASS; } YY_BREAK case 28: YY_RULE_SETUP #line 153 "conf_lexer.l" -{ return CLASS; } +{ return CLOSE; } YY_BREAK case 29: YY_RULE_SETUP #line 154 "conf_lexer.l" -{ return CLOSE; } +{ return T_CLUSTER; } YY_BREAK case 30: YY_RULE_SETUP #line 155 "conf_lexer.l" -{ return T_CLUSTER; } +{ return T_COMMAND; } YY_BREAK case 31: YY_RULE_SETUP #line 156 "conf_lexer.l" -{ return T_COMMAND; } +{ return CONNECT; } YY_BREAK case 32: YY_RULE_SETUP #line 157 "conf_lexer.l" -{ return CONNECT; } +{ return CONNECTFREQ; } YY_BREAK case 33: YY_RULE_SETUP #line 158 "conf_lexer.l" -{ return CONNECTFREQ; } +{ return CYCLE_ON_HOST_CHANGE; } YY_BREAK case 34: YY_RULE_SETUP #line 159 "conf_lexer.l" -{ return CYCLE_ON_HOST_CHANGE; } +{ return T_DEAF; } YY_BREAK case 35: YY_RULE_SETUP #line 160 "conf_lexer.l" -{ return T_DEAF; } +{ return T_DEBUG; } YY_BREAK case 36: YY_RULE_SETUP #line 161 "conf_lexer.l" -{ return T_DEBUG; } +{ return DEFAULT_FLOODCOUNT; } YY_BREAK case 37: YY_RULE_SETUP #line 162 "conf_lexer.l" -{ return DEFAULT_FLOODCOUNT; } +{ return DEFAULT_FLOODTIME; } YY_BREAK case 38: YY_RULE_SETUP #line 163 "conf_lexer.l" -{ return DEFAULT_FLOODTIME; } +{ return DEFAULT_JOIN_FLOOD_COUNT; } YY_BREAK case 39: YY_RULE_SETUP #line 164 "conf_lexer.l" -{ return DEFAULT_JOIN_FLOOD_COUNT; } +{ return DEFAULT_JOIN_FLOOD_TIME; } YY_BREAK case 40: YY_RULE_SETUP #line 165 "conf_lexer.l" -{ return DEFAULT_JOIN_FLOOD_TIME; } +{ return DEFAULT_MAX_CLIENTS; } YY_BREAK case 41: YY_RULE_SETUP #line 166 "conf_lexer.l" -{ return DEFAULT_MAX_CLIENTS; } +{ return DENY; } YY_BREAK case 42: YY_RULE_SETUP #line 167 "conf_lexer.l" -{ return DENY; } +{ return DESCRIPTION; } YY_BREAK case 43: YY_RULE_SETUP #line 168 "conf_lexer.l" -{ return DESCRIPTION; } +{ return DIE; } YY_BREAK case 44: YY_RULE_SETUP #line 169 "conf_lexer.l" -{ return DIE; } +{ return DISABLE_AUTH; } YY_BREAK case 45: YY_RULE_SETUP #line 170 "conf_lexer.l" -{ return DISABLE_AUTH; } +{ return DISABLE_FAKE_CHANNELS; } YY_BREAK case 46: YY_RULE_SETUP #line 171 "conf_lexer.l" -{ return DISABLE_FAKE_CHANNELS; } +{ return DISABLE_REMOTE_COMMANDS; } YY_BREAK case 47: YY_RULE_SETUP #line 172 "conf_lexer.l" -{ return DISABLE_REMOTE_COMMANDS; } +{ return T_DLINE; } YY_BREAK case 48: YY_RULE_SETUP #line 173 "conf_lexer.l" -{ return T_DLINE; } +{ return DLINE_MIN_CIDR; } YY_BREAK case 49: YY_RULE_SETUP #line 174 "conf_lexer.l" -{ return DLINE_MIN_CIDR; } +{ return DLINE_MIN_CIDR6; } YY_BREAK case 50: YY_RULE_SETUP #line 175 "conf_lexer.l" -{ return DLINE_MIN_CIDR6; } +{ return DOTS_IN_IDENT; } YY_BREAK case 51: YY_RULE_SETUP #line 176 "conf_lexer.l" -{ return DOTS_IN_IDENT; } +{ return EMAIL; } YY_BREAK case 52: YY_RULE_SETUP #line 177 "conf_lexer.l" -{ return EMAIL; } +{ return ENCRYPTED; } YY_BREAK case 53: YY_RULE_SETUP #line 178 "conf_lexer.l" -{ return ENCRYPTED; } +{ return EXCEED_LIMIT; } YY_BREAK case 54: YY_RULE_SETUP #line 179 "conf_lexer.l" -{ return EXCEED_LIMIT; } +{ return EXEMPT; } YY_BREAK case 55: YY_RULE_SETUP #line 180 "conf_lexer.l" -{ return EXEMPT; } +{ return T_EXTERNAL; } YY_BREAK case 56: YY_RULE_SETUP #line 181 "conf_lexer.l" -{ return T_EXTERNAL; } +{ return FAILED_OPER_NOTICE; } YY_BREAK case 57: YY_RULE_SETUP #line 182 "conf_lexer.l" -{ return FAILED_OPER_NOTICE; } +{ return T_FARCONNECT; } YY_BREAK case 58: YY_RULE_SETUP #line 183 "conf_lexer.l" -{ return T_FARCONNECT; } +{ return T_FILE; } YY_BREAK case 59: YY_RULE_SETUP #line 184 "conf_lexer.l" -{ return T_FILE; } +{ return IRCD_FLAGS; } YY_BREAK case 60: YY_RULE_SETUP #line 185 "conf_lexer.l" -{ return IRCD_FLAGS; } +{ return FLATTEN_LINKS; } YY_BREAK case 61: YY_RULE_SETUP #line 186 "conf_lexer.l" -{ return FLATTEN_LINKS; } +{ return FLATTEN_LINKS_DELAY; } YY_BREAK case 62: YY_RULE_SETUP #line 187 "conf_lexer.l" -{ return FLATTEN_LINKS_DELAY; } +{ return FLATTEN_LINKS_FILE; } YY_BREAK case 63: YY_RULE_SETUP #line 188 "conf_lexer.l" -{ return FLATTEN_LINKS_FILE; } +{ return T_FULL; } YY_BREAK case 64: YY_RULE_SETUP #line 189 "conf_lexer.l" -{ return T_FULL; } +{ return GECOS; } YY_BREAK case 65: YY_RULE_SETUP #line 190 "conf_lexer.l" -{ return GECOS; } +{ return GENERAL; } YY_BREAK case 66: YY_RULE_SETUP #line 191 "conf_lexer.l" -{ return GENERAL; } +{ return KLINE_MIN_CIDR; } YY_BREAK case 67: YY_RULE_SETUP #line 192 "conf_lexer.l" -{ return KLINE_MIN_CIDR; } +{ return KLINE_MIN_CIDR6; } YY_BREAK case 68: YY_RULE_SETUP #line 193 "conf_lexer.l" -{ return KLINE_MIN_CIDR6; } +{ return T_GLOBOPS; } YY_BREAK case 69: YY_RULE_SETUP #line 194 "conf_lexer.l" -{ return T_GLOBOPS; } +{ return NEED_IDENT; } YY_BREAK case 70: YY_RULE_SETUP #line 195 "conf_lexer.l" -{ return NEED_IDENT; } +{ return HIDDEN; } YY_BREAK case 71: YY_RULE_SETUP #line 196 "conf_lexer.l" -{ return HIDDEN; } +{ return HIDDEN_NAME; } YY_BREAK case 72: YY_RULE_SETUP #line 197 "conf_lexer.l" -{ return HIDDEN_NAME; } +{ return HIDE_CHANS; } YY_BREAK case 73: YY_RULE_SETUP #line 198 "conf_lexer.l" -{ return HIDE_CHANS; } +{ return HIDE_IDLE; } YY_BREAK case 74: YY_RULE_SETUP #line 199 "conf_lexer.l" -{ return HIDE_IDLE; } +{ return HIDE_IDLE_FROM_OPERS; } YY_BREAK case 75: YY_RULE_SETUP #line 200 "conf_lexer.l" -{ return HIDE_IDLE_FROM_OPERS; } +{ return HIDE_SERVER_IPS; } YY_BREAK case 76: YY_RULE_SETUP #line 201 "conf_lexer.l" -{ return HIDE_SERVER_IPS; } +{ return HIDE_SERVERS; } YY_BREAK case 77: YY_RULE_SETUP #line 202 "conf_lexer.l" -{ return HIDE_SERVERS; } +{ return HIDE_SERVICES; } YY_BREAK case 78: YY_RULE_SETUP #line 203 "conf_lexer.l" -{ return HIDE_SERVICES; } +{ return HOST; } YY_BREAK case 79: YY_RULE_SETUP #line 204 "conf_lexer.l" -{ return HOST; } +{ return HUB; } YY_BREAK case 80: YY_RULE_SETUP #line 205 "conf_lexer.l" -{ return HUB; } +{ return HUB_MASK; } YY_BREAK case 81: YY_RULE_SETUP #line 206 "conf_lexer.l" -{ return HUB_MASK; } +{ return IGNORE_BOGUS_TS; } YY_BREAK case 82: YY_RULE_SETUP #line 207 "conf_lexer.l" -{ return IGNORE_BOGUS_TS; } +{ return T_INVISIBLE; } YY_BREAK case 83: YY_RULE_SETUP #line 208 "conf_lexer.l" -{ return T_INVISIBLE; } +{ return INVISIBLE_ON_CONNECT; } YY_BREAK case 84: YY_RULE_SETUP #line 209 "conf_lexer.l" -{ return INVISIBLE_ON_CONNECT; } +{ return INVITE_CLIENT_COUNT; } YY_BREAK case 85: YY_RULE_SETUP #line 210 "conf_lexer.l" -{ return INVITE_CLIENT_COUNT; } +{ return INVITE_CLIENT_TIME; } YY_BREAK case 86: YY_RULE_SETUP #line 211 "conf_lexer.l" -{ return INVITE_CLIENT_TIME; } +{ return INVITE_DELAY_CHANNEL; } YY_BREAK case 87: YY_RULE_SETUP #line 212 "conf_lexer.l" -{ return INVITE_DELAY_CHANNEL; } +{ return INVITE_EXPIRE_TIME; } YY_BREAK case 88: YY_RULE_SETUP #line 213 "conf_lexer.l" -{ return INVITE_EXPIRE_TIME; } +{ return IP; } YY_BREAK case 89: YY_RULE_SETUP #line 214 "conf_lexer.l" -{ return IP; } +{ return T_IPV4; } YY_BREAK case 90: YY_RULE_SETUP #line 215 "conf_lexer.l" -{ return T_IPV4; } +{ return T_IPV6; } YY_BREAK case 91: YY_RULE_SETUP #line 216 "conf_lexer.l" -{ return T_IPV6; } +{ return JOIN; } YY_BREAK case 92: YY_RULE_SETUP #line 217 "conf_lexer.l" -{ return JOIN; } +{ return KILL; } YY_BREAK case 93: YY_RULE_SETUP #line 218 "conf_lexer.l" -{ return KILL; } +{ return KILL_CHASE_TIME_LIMIT; } YY_BREAK case 94: YY_RULE_SETUP #line 219 "conf_lexer.l" -{ return KILL_CHASE_TIME_LIMIT; } +{ return KLINE; } YY_BREAK case 95: YY_RULE_SETUP #line 220 "conf_lexer.l" -{ return KLINE; } +{ return KLINE_EXEMPT; } YY_BREAK case 96: YY_RULE_SETUP #line 221 "conf_lexer.l" -{ return KLINE_EXEMPT; } +{ return KNOCK_CLIENT_COUNT; } YY_BREAK case 97: YY_RULE_SETUP #line 222 "conf_lexer.l" -{ return KNOCK_CLIENT_COUNT; } +{ return KNOCK_CLIENT_TIME; } YY_BREAK case 98: YY_RULE_SETUP #line 223 "conf_lexer.l" -{ return KNOCK_CLIENT_TIME; } +{ return KNOCK_DELAY_CHANNEL; } YY_BREAK case 99: YY_RULE_SETUP #line 224 "conf_lexer.l" -{ return KNOCK_DELAY_CHANNEL; } +{ return LEAF_MASK; } YY_BREAK case 100: YY_RULE_SETUP #line 225 "conf_lexer.l" -{ return LEAF_MASK; } +{ return LISTEN; } YY_BREAK case 101: YY_RULE_SETUP #line 226 "conf_lexer.l" -{ return LIBGEOIP_DATABASE_OPTIONS; } +{ return T_LOCOPS; } YY_BREAK case 102: YY_RULE_SETUP #line 227 "conf_lexer.l" -{ return LIBGEOIP_IPV4_DATABASE_FILE; } +{ return T_LOG; } YY_BREAK case 103: YY_RULE_SETUP #line 228 "conf_lexer.l" -{ return LIBGEOIP_IPV6_DATABASE_FILE; } +{ return MASK; } YY_BREAK case 104: YY_RULE_SETUP #line 229 "conf_lexer.l" -{ return LISTEN; } +{ return TMASKED; } YY_BREAK case 105: YY_RULE_SETUP #line 230 "conf_lexer.l" -{ return T_LOCOPS; } +{ return MAX_ACCEPT; } YY_BREAK case 106: YY_RULE_SETUP #line 231 "conf_lexer.l" -{ return T_LOG; } +{ return MAX_BANS; } YY_BREAK case 107: YY_RULE_SETUP #line 232 "conf_lexer.l" -{ return MASK; } +{ return MAX_BANS_LARGE; } YY_BREAK case 108: YY_RULE_SETUP #line 233 "conf_lexer.l" -{ return TMASKED; } +{ return MAX_CHANNELS; } YY_BREAK case 109: YY_RULE_SETUP #line 234 "conf_lexer.l" -{ return MAX_ACCEPT; } +{ return MAX_GLOBAL; } YY_BREAK case 110: YY_RULE_SETUP #line 235 "conf_lexer.l" -{ return MAX_BANS; } +{ return MAX_IDLE; } YY_BREAK case 111: YY_RULE_SETUP #line 236 "conf_lexer.l" -{ return MAX_BANS_LARGE; } +{ return MAX_INVITES; } YY_BREAK case 112: YY_RULE_SETUP #line 237 "conf_lexer.l" -{ return MAX_CHANNELS; } +{ return MAX_LOCAL; } YY_BREAK case 113: YY_RULE_SETUP #line 238 "conf_lexer.l" -{ return MAX_GLOBAL; } +{ return MAX_NICK_CHANGES; } YY_BREAK case 114: YY_RULE_SETUP #line 239 "conf_lexer.l" -{ return MAX_IDLE; } +{ return MAX_NICK_LENGTH; } YY_BREAK case 115: YY_RULE_SETUP #line 240 "conf_lexer.l" -{ return MAX_INVITES; } +{ return MAX_NICK_TIME; } YY_BREAK case 116: YY_RULE_SETUP #line 241 "conf_lexer.l" -{ return MAX_LOCAL; } +{ return MAX_NUMBER; } YY_BREAK case 117: YY_RULE_SETUP #line 242 "conf_lexer.l" -{ return MAX_NICK_CHANGES; } +{ return MAX_TARGETS; } YY_BREAK case 118: YY_RULE_SETUP #line 243 "conf_lexer.l" -{ return MAX_NICK_LENGTH; } +{ return MAX_TOPIC_LENGTH; } YY_BREAK case 119: YY_RULE_SETUP #line 244 "conf_lexer.l" -{ return MAX_NICK_TIME; } +{ return MAX_WATCH; } YY_BREAK case 120: YY_RULE_SETUP #line 245 "conf_lexer.l" -{ return MAX_NUMBER; } +{ return MIN_IDLE; } YY_BREAK case 121: YY_RULE_SETUP #line 246 "conf_lexer.l" -{ return MAX_TARGETS; } +{ return MIN_NONWILDCARD; } YY_BREAK case 122: YY_RULE_SETUP #line 247 "conf_lexer.l" -{ return MAX_TOPIC_LENGTH; } +{ return MIN_NONWILDCARD_SIMPLE; } YY_BREAK case 123: YY_RULE_SETUP #line 248 "conf_lexer.l" -{ return MAX_WATCH; } +{ return MODULE; } YY_BREAK case 124: YY_RULE_SETUP #line 249 "conf_lexer.l" -{ return MEMORY_CACHE; } +{ return MODULES; } YY_BREAK case 125: YY_RULE_SETUP #line 250 "conf_lexer.l" -{ return MIN_IDLE; } +{ return MOTD; } YY_BREAK case 126: YY_RULE_SETUP #line 251 "conf_lexer.l" -{ return MIN_NONWILDCARD; } +{ return NAME; } YY_BREAK case 127: YY_RULE_SETUP #line 252 "conf_lexer.l" -{ return MIN_NONWILDCARD_SIMPLE; } +{ return T_NCHANGE; } YY_BREAK case 128: YY_RULE_SETUP #line 253 "conf_lexer.l" -{ return MMAP_CACHE; } +{ return NEED_IDENT; } YY_BREAK case 129: YY_RULE_SETUP #line 254 "conf_lexer.l" -{ return MODULE; } +{ return NEED_PASSWORD; } YY_BREAK case 130: YY_RULE_SETUP #line 255 "conf_lexer.l" -{ return MODULES; } +{ return NETWORK_DESC; } YY_BREAK case 131: YY_RULE_SETUP #line 256 "conf_lexer.l" -{ return MOTD; } +{ return NETWORK_NAME; } YY_BREAK case 132: YY_RULE_SETUP #line 257 "conf_lexer.l" -{ return NAME; } +{ return NICK; } YY_BREAK case 133: YY_RULE_SETUP #line 258 "conf_lexer.l" -{ return T_NCHANGE; } +{ return NO_OPER_FLOOD; } YY_BREAK case 134: YY_RULE_SETUP #line 259 "conf_lexer.l" -{ return NEED_IDENT; } +{ return NO_TILDE; } YY_BREAK case 135: YY_RULE_SETUP #line 260 "conf_lexer.l" -{ return NEED_PASSWORD; } +{ return T_NONONREG; } YY_BREAK case 136: YY_RULE_SETUP #line 261 "conf_lexer.l" -{ return NETWORK_DESC; } +{ return NUMBER_PER_CIDR; } YY_BREAK case 137: YY_RULE_SETUP #line 262 "conf_lexer.l" -{ return NETWORK_NAME; } +{ return NUMBER_PER_IP; } YY_BREAK case 138: YY_RULE_SETUP #line 263 "conf_lexer.l" -{ return NICK; } +{ return OPERATOR; } YY_BREAK case 139: YY_RULE_SETUP #line 264 "conf_lexer.l" -{ return NO_OPER_FLOOD; } +{ return OPER_ONLY_UMODES; } YY_BREAK case 140: YY_RULE_SETUP #line 265 "conf_lexer.l" -{ return NO_TILDE; } +{ return OPER_UMODES; } YY_BREAK case 141: YY_RULE_SETUP #line 266 "conf_lexer.l" -{ return T_NONONREG; } +{ return OPERATOR; } YY_BREAK case 142: YY_RULE_SETUP #line 267 "conf_lexer.l" -{ return NUMBER_PER_CIDR; } +{ return OPERS_BYPASS_CALLERID; } YY_BREAK case 143: YY_RULE_SETUP #line 268 "conf_lexer.l" -{ return NUMBER_PER_IP; } +{ return T_OPME; } YY_BREAK case 144: YY_RULE_SETUP #line 269 "conf_lexer.l" -{ return OPERATOR; } +{ return PACE_WAIT; } YY_BREAK case 145: YY_RULE_SETUP #line 270 "conf_lexer.l" -{ return OPER_ONLY_UMODES; } +{ return PACE_WAIT_SIMPLE; } YY_BREAK case 146: YY_RULE_SETUP #line 271 "conf_lexer.l" -{ return OPER_UMODES; } +{ return PASSWORD; } YY_BREAK case 147: YY_RULE_SETUP #line 272 "conf_lexer.l" -{ return OPERATOR; } +{ return PASSWORD; } YY_BREAK case 148: YY_RULE_SETUP #line 273 "conf_lexer.l" -{ return OPERS_BYPASS_CALLERID; } +{ return PATH; } YY_BREAK case 149: YY_RULE_SETUP #line 274 "conf_lexer.l" -{ return T_OPME; } +{ return PING_COOKIE; } YY_BREAK case 150: YY_RULE_SETUP #line 275 "conf_lexer.l" -{ return PACE_WAIT; } +{ return PING_TIME; } YY_BREAK case 151: YY_RULE_SETUP #line 276 "conf_lexer.l" -{ return PACE_WAIT_SIMPLE; } +{ return PORT; } YY_BREAK case 152: YY_RULE_SETUP #line 277 "conf_lexer.l" -{ return PASSWORD; } +{ return T_PREPEND; } YY_BREAK case 153: YY_RULE_SETUP #line 278 "conf_lexer.l" -{ return PASSWORD; } +{ return T_PSEUDO; } YY_BREAK case 154: YY_RULE_SETUP #line 279 "conf_lexer.l" -{ return PATH; } +{ return RESV; } YY_BREAK case 155: YY_RULE_SETUP #line 280 "conf_lexer.l" -{ return PING_COOKIE; } +{ return RANDOM_IDLE; } YY_BREAK case 156: YY_RULE_SETUP #line 281 "conf_lexer.l" -{ return PING_TIME; } +{ return REASON; } YY_BREAK case 157: YY_RULE_SETUP #line 282 "conf_lexer.l" -{ return PORT; } +{ return T_RECVQ; } YY_BREAK case 158: YY_RULE_SETUP #line 283 "conf_lexer.l" -{ return T_PREPEND; } +{ return REDIRPORT; } YY_BREAK case 159: YY_RULE_SETUP #line 284 "conf_lexer.l" -{ return T_PSEUDO; } +{ return REDIRSERV; } YY_BREAK case 160: YY_RULE_SETUP #line 285 "conf_lexer.l" -{ return RESV; } +{ return REHASH; } YY_BREAK case 161: YY_RULE_SETUP #line 286 "conf_lexer.l" -{ return RANDOM_IDLE; } +{ return T_REJ; } YY_BREAK case 162: YY_RULE_SETUP #line 287 "conf_lexer.l" -{ return REASON; } +{ return REMOTE; } YY_BREAK case 163: YY_RULE_SETUP #line 288 "conf_lexer.l" -{ return T_RECVQ; } +{ return REMOTEBAN; } YY_BREAK case 164: YY_RULE_SETUP #line 289 "conf_lexer.l" -{ return REDIRPORT; } +{ return T_RESTART; } YY_BREAK case 165: YY_RULE_SETUP #line 290 "conf_lexer.l" -{ return REDIRSERV; } +{ return RESV; } YY_BREAK case 166: YY_RULE_SETUP #line 291 "conf_lexer.l" -{ return REHASH; } +{ return RESV_EXEMPT; } YY_BREAK case 167: YY_RULE_SETUP #line 292 "conf_lexer.l" -{ return T_REJ; } +{ return RSA_PRIVATE_KEY_FILE; } YY_BREAK case 168: YY_RULE_SETUP #line 293 "conf_lexer.l" -{ return REMOTE; } +{ return SEND_PASSWORD; } YY_BREAK case 169: YY_RULE_SETUP #line 294 "conf_lexer.l" -{ return REMOTEBAN; } +{ return SENDQ; } YY_BREAK case 170: YY_RULE_SETUP #line 295 "conf_lexer.l" -{ return T_RESTART; } +{ return T_SERVER; } YY_BREAK case 171: YY_RULE_SETUP #line 296 "conf_lexer.l" -{ return RESV; } +{ return SERVERHIDE; } YY_BREAK case 172: YY_RULE_SETUP #line 297 "conf_lexer.l" -{ return RESV_EXEMPT; } +{ return SERVERINFO; } YY_BREAK case 173: YY_RULE_SETUP #line 298 "conf_lexer.l" -{ return RSA_PRIVATE_KEY_FILE; } +{ return T_SERVICE; } YY_BREAK case 174: YY_RULE_SETUP #line 299 "conf_lexer.l" -{ return SEND_PASSWORD; } +{ return T_SERVNOTICE; } YY_BREAK case 175: YY_RULE_SETUP #line 300 "conf_lexer.l" -{ return SENDQ; } +{ return T_SET; } YY_BREAK case 176: YY_RULE_SETUP #line 301 "conf_lexer.l" -{ return T_SERVER; } +{ return T_SHARED; } YY_BREAK case 177: YY_RULE_SETUP #line 302 "conf_lexer.l" -{ return SERVERHIDE; } +{ return SHORT_MOTD; } YY_BREAK case 178: YY_RULE_SETUP #line 303 "conf_lexer.l" -{ return SERVERINFO; } +{ return IRCD_SID; } YY_BREAK case 179: YY_RULE_SETUP #line 304 "conf_lexer.l" -{ return T_SERVICE; } +{ return T_SIZE; } YY_BREAK case 180: YY_RULE_SETUP #line 305 "conf_lexer.l" -{ return T_SERVNOTICE; } +{ return T_SKILL; } YY_BREAK case 181: YY_RULE_SETUP #line 306 "conf_lexer.l" -{ return T_SET; } +{ return T_SOFTCALLERID; } YY_BREAK case 182: YY_RULE_SETUP #line 307 "conf_lexer.l" -{ return T_SHARED; } +{ return SPOOF; } YY_BREAK case 183: YY_RULE_SETUP #line 308 "conf_lexer.l" -{ return SHORT_MOTD; } +{ return SPOOF_NOTICE; } YY_BREAK case 184: YY_RULE_SETUP #line 309 "conf_lexer.l" -{ return IRCD_SID; } +{ return T_SPY; } YY_BREAK case 185: YY_RULE_SETUP #line 310 "conf_lexer.l" -{ return T_SIZE; } +{ return SQUIT; } YY_BREAK case 186: YY_RULE_SETUP #line 311 "conf_lexer.l" -{ return T_SKILL; } +{ return T_SSL; } YY_BREAK case 187: YY_RULE_SETUP #line 312 "conf_lexer.l" -{ return T_SOFTCALLERID; } +{ return SSL_CERTIFICATE_FILE; } YY_BREAK case 188: YY_RULE_SETUP #line 313 "conf_lexer.l" -{ return SPOOF; } +{ return SSL_CERTIFICATE_FINGERPRINT; } YY_BREAK case 189: YY_RULE_SETUP #line 314 "conf_lexer.l" -{ return SPOOF_NOTICE; } +{ return T_SSL_CIPHER_LIST; } YY_BREAK case 190: YY_RULE_SETUP #line 315 "conf_lexer.l" -{ return T_SPY; } +{ return SSL_CONNECTION_REQUIRED; } YY_BREAK case 191: YY_RULE_SETUP #line 316 "conf_lexer.l" -{ return SQUIT; } +{ return SSL_DH_ELLIPTIC_CURVE; } YY_BREAK case 192: YY_RULE_SETUP #line 317 "conf_lexer.l" -{ return T_SSL; } +{ return SSL_DH_PARAM_FILE; } YY_BREAK case 193: YY_RULE_SETUP #line 318 "conf_lexer.l" -{ return SSL_CERTIFICATE_FILE; } +{ return SSL_MESSAGE_DIGEST_ALGORITHM; } YY_BREAK case 194: YY_RULE_SETUP #line 319 "conf_lexer.l" -{ return SSL_CERTIFICATE_FINGERPRINT; } +{ return STATS_E_DISABLED; } YY_BREAK case 195: YY_RULE_SETUP #line 320 "conf_lexer.l" -{ return T_SSL_CIPHER_LIST; } +{ return STATS_I_OPER_ONLY; } YY_BREAK case 196: YY_RULE_SETUP #line 321 "conf_lexer.l" -{ return SSL_CONNECTION_REQUIRED; } +{ return STATS_K_OPER_ONLY; } YY_BREAK case 197: YY_RULE_SETUP #line 322 "conf_lexer.l" -{ return SSL_DH_ELLIPTIC_CURVE; } +{ return STATS_M_OPER_ONLY; } YY_BREAK case 198: YY_RULE_SETUP #line 323 "conf_lexer.l" -{ return SSL_DH_PARAM_FILE; } +{ return STATS_O_OPER_ONLY; } YY_BREAK case 199: YY_RULE_SETUP #line 324 "conf_lexer.l" -{ return SSL_MESSAGE_DIGEST_ALGORITHM; } +{ return STATS_P_OPER_ONLY; } YY_BREAK case 200: YY_RULE_SETUP #line 325 "conf_lexer.l" -{ return STANDARD; } +{ return STATS_U_OPER_ONLY; } YY_BREAK case 201: YY_RULE_SETUP #line 326 "conf_lexer.l" -{ return STATS_E_DISABLED; } +{ return T_TARGET; } YY_BREAK case 202: YY_RULE_SETUP #line 327 "conf_lexer.l" -{ return STATS_I_OPER_ONLY; } +{ return THROTTLE_COUNT; } YY_BREAK case 203: YY_RULE_SETUP #line 328 "conf_lexer.l" -{ return STATS_K_OPER_ONLY; } +{ return THROTTLE_TIME; } YY_BREAK case 204: YY_RULE_SETUP #line 329 "conf_lexer.l" -{ return STATS_M_OPER_ONLY; } +{ return TKLINE_EXPIRE_NOTICES; } YY_BREAK case 205: YY_RULE_SETUP #line 330 "conf_lexer.l" -{ return STATS_O_OPER_ONLY; } +{ return TS_MAX_DELTA; } YY_BREAK case 206: YY_RULE_SETUP #line 331 "conf_lexer.l" -{ return STATS_P_OPER_ONLY; } +{ return TS_WARN_DELTA; } YY_BREAK case 207: YY_RULE_SETUP #line 332 "conf_lexer.l" -{ return STATS_U_OPER_ONLY; } +{ return TYPE; } YY_BREAK case 208: YY_RULE_SETUP #line 333 "conf_lexer.l" -{ return T_TARGET; } +{ return T_UMODES; } YY_BREAK case 209: YY_RULE_SETUP #line 334 "conf_lexer.l" -{ return THROTTLE_COUNT; } +{ return T_UNAUTH; } YY_BREAK case 210: YY_RULE_SETUP #line 335 "conf_lexer.l" -{ return THROTTLE_TIME; } +{ return T_UNDLINE; } YY_BREAK case 211: YY_RULE_SETUP #line 336 "conf_lexer.l" -{ return TKLINE_EXPIRE_NOTICES; } +{ return UNKLINE; } YY_BREAK case 212: YY_RULE_SETUP #line 337 "conf_lexer.l" -{ return TS_MAX_DELTA; } +{ return T_UNLIMITED; } YY_BREAK case 213: YY_RULE_SETUP #line 338 "conf_lexer.l" -{ return TS_WARN_DELTA; } +{ return T_UNRESV; } YY_BREAK case 214: YY_RULE_SETUP #line 339 "conf_lexer.l" -{ return TYPE; } +{ return T_UNXLINE; } YY_BREAK case 215: YY_RULE_SETUP #line 340 "conf_lexer.l" -{ return T_UMODES; } +{ return USE_LOGGING; } YY_BREAK case 216: YY_RULE_SETUP #line 341 "conf_lexer.l" -{ return T_UNAUTH; } +{ return USER; } YY_BREAK case 217: YY_RULE_SETUP #line 342 "conf_lexer.l" -{ return T_UNDLINE; } +{ return VHOST; } YY_BREAK case 218: YY_RULE_SETUP #line 343 "conf_lexer.l" -{ return UNKLINE; } +{ return VHOST6; } YY_BREAK case 219: YY_RULE_SETUP #line 344 "conf_lexer.l" -{ return T_UNLIMITED; } +{ return T_WALLOP; } YY_BREAK case 220: YY_RULE_SETUP #line 345 "conf_lexer.l" -{ return T_UNRESV; } +{ return T_WALLOPS; } YY_BREAK case 221: YY_RULE_SETUP #line 346 "conf_lexer.l" -{ return T_UNXLINE; } +{ return WARN_NO_CONNECT_BLOCK; } YY_BREAK case 222: YY_RULE_SETUP #line 347 "conf_lexer.l" -{ return USE_LOGGING; } +{ return T_WEBIRC; } YY_BREAK case 223: YY_RULE_SETUP #line 348 "conf_lexer.l" -{ return USER; } +{ return WHOIS; } YY_BREAK case 224: YY_RULE_SETUP #line 349 "conf_lexer.l" -{ return VHOST; } +{ return WHOWAS_HISTORY_LENGTH; } YY_BREAK case 225: YY_RULE_SETUP #line 350 "conf_lexer.l" -{ return VHOST6; } +{ return XLINE; } YY_BREAK case 226: YY_RULE_SETUP #line 351 "conf_lexer.l" -{ return T_WALLOP; } +{ return XLINE_EXEMPT; } YY_BREAK case 227: YY_RULE_SETUP -#line 352 "conf_lexer.l" -{ return T_WALLOPS; } +#line 353 "conf_lexer.l" +{ yylval.number = 1; return TBOOL; } YY_BREAK case 228: YY_RULE_SETUP -#line 353 "conf_lexer.l" -{ return WARN_NO_CONNECT_BLOCK; } +#line 354 "conf_lexer.l" +{ yylval.number = 0; return TBOOL; } YY_BREAK case 229: YY_RULE_SETUP -#line 354 "conf_lexer.l" -{ return T_WEBIRC; } +#line 356 "conf_lexer.l" +{ return YEARS; } YY_BREAK case 230: YY_RULE_SETUP -#line 355 "conf_lexer.l" -{ return WHOIS; } +#line 357 "conf_lexer.l" +{ return YEARS; } YY_BREAK case 231: YY_RULE_SETUP -#line 356 "conf_lexer.l" -{ return WHOWAS_HISTORY_LENGTH; } +#line 358 "conf_lexer.l" +{ return MONTHS; } YY_BREAK case 232: YY_RULE_SETUP -#line 357 "conf_lexer.l" -{ return XLINE; } +#line 359 "conf_lexer.l" +{ return MONTHS; } YY_BREAK case 233: YY_RULE_SETUP -#line 358 "conf_lexer.l" -{ return XLINE_EXEMPT; } +#line 360 "conf_lexer.l" +{ return WEEKS; } YY_BREAK case 234: YY_RULE_SETUP -#line 360 "conf_lexer.l" -{ yylval.number = 1; return TBOOL; } +#line 361 "conf_lexer.l" +{ return WEEKS; } YY_BREAK case 235: YY_RULE_SETUP -#line 361 "conf_lexer.l" -{ yylval.number = 0; return TBOOL; } +#line 362 "conf_lexer.l" +{ return DAYS; } YY_BREAK case 236: YY_RULE_SETUP #line 363 "conf_lexer.l" -{ return YEARS; } +{ return DAYS; } YY_BREAK case 237: YY_RULE_SETUP #line 364 "conf_lexer.l" -{ return YEARS; } +{ return HOURS; } YY_BREAK case 238: YY_RULE_SETUP #line 365 "conf_lexer.l" -{ return MONTHS; } +{ return HOURS; } YY_BREAK case 239: YY_RULE_SETUP #line 366 "conf_lexer.l" -{ return MONTHS; } +{ return MINUTES; } YY_BREAK case 240: YY_RULE_SETUP #line 367 "conf_lexer.l" -{ return WEEKS; } +{ return MINUTES; } YY_BREAK case 241: YY_RULE_SETUP #line 368 "conf_lexer.l" -{ return WEEKS; } +{ return SECONDS; } YY_BREAK case 242: YY_RULE_SETUP #line 369 "conf_lexer.l" -{ return DAYS; } +{ return SECONDS; } YY_BREAK case 243: YY_RULE_SETUP -#line 370 "conf_lexer.l" -{ return DAYS; } +#line 371 "conf_lexer.l" +{ return BYTES; } YY_BREAK case 244: YY_RULE_SETUP -#line 371 "conf_lexer.l" -{ return HOURS; } +#line 372 "conf_lexer.l" +{ return BYTES; } YY_BREAK case 245: YY_RULE_SETUP -#line 372 "conf_lexer.l" -{ return HOURS; } +#line 373 "conf_lexer.l" +{ return KBYTES; } YY_BREAK case 246: YY_RULE_SETUP -#line 373 "conf_lexer.l" -{ return MINUTES; } +#line 374 "conf_lexer.l" +{ return KBYTES; } YY_BREAK case 247: YY_RULE_SETUP -#line 374 "conf_lexer.l" -{ return MINUTES; } +#line 375 "conf_lexer.l" +{ return KBYTES; } YY_BREAK case 248: YY_RULE_SETUP -#line 375 "conf_lexer.l" -{ return SECONDS; } +#line 376 "conf_lexer.l" +{ return KBYTES; } YY_BREAK case 249: YY_RULE_SETUP -#line 376 "conf_lexer.l" -{ return SECONDS; } +#line 377 "conf_lexer.l" +{ return KBYTES; } YY_BREAK case 250: YY_RULE_SETUP #line 378 "conf_lexer.l" -{ return BYTES; } +{ return MBYTES; } YY_BREAK case 251: YY_RULE_SETUP #line 379 "conf_lexer.l" -{ return BYTES; } +{ return MBYTES; } YY_BREAK case 252: YY_RULE_SETUP #line 380 "conf_lexer.l" -{ return KBYTES; } +{ return MBYTES; } YY_BREAK case 253: YY_RULE_SETUP #line 381 "conf_lexer.l" -{ return KBYTES; } +{ return MBYTES; } YY_BREAK case 254: YY_RULE_SETUP #line 382 "conf_lexer.l" -{ return KBYTES; } +{ return MBYTES; } YY_BREAK case 255: YY_RULE_SETUP #line 383 "conf_lexer.l" -{ return KBYTES; } +{ return TWODOTS; } YY_BREAK case 256: YY_RULE_SETUP -#line 384 "conf_lexer.l" -{ return KBYTES; } - YY_BREAK -case 257: -YY_RULE_SETUP #line 385 "conf_lexer.l" -{ return MBYTES; } - YY_BREAK -case 258: -YY_RULE_SETUP -#line 386 "conf_lexer.l" -{ return MBYTES; } - YY_BREAK -case 259: -YY_RULE_SETUP -#line 387 "conf_lexer.l" -{ return MBYTES; } - YY_BREAK -case 260: -YY_RULE_SETUP -#line 388 "conf_lexer.l" -{ return MBYTES; } - YY_BREAK -case 261: -YY_RULE_SETUP -#line 389 "conf_lexer.l" -{ return MBYTES; } - YY_BREAK -case 262: -YY_RULE_SETUP -#line 390 "conf_lexer.l" -{ return TWODOTS; } - YY_BREAK -case 263: -YY_RULE_SETUP -#line 392 "conf_lexer.l" { return yytext[0]; } YY_BREAK case YY_STATE_EOF(INITIAL): -#line 393 "conf_lexer.l" +#line 386 "conf_lexer.l" { if (ieof()) yyterminate(); } YY_BREAK -case 264: +case 257: YY_RULE_SETUP -#line 395 "conf_lexer.l" +#line 388 "conf_lexer.l" ECHO; YY_BREAK -#line 3462 "conf_lexer.c" +#line 3367 "conf_lexer.c" case YY_END_OF_BUFFER: { @@ -3536,7 +3441,7 @@ { (yy_did_buffer_switch_on_eof) = 0; - if ( yywrap( ) ) + if ( yywrap( ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up @@ -3668,7 +3573,8 @@ b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ - yyrealloc((void *) b->yy_ch_buf,(yy_size_t) (b->yy_buf_size + 2) ); + yyrealloc( (void *) b->yy_ch_buf, + (yy_size_t) (b->yy_buf_size + 2) ); } else /* Can't grow it, we don't own it. */ @@ -3700,7 +3606,7 @@ if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; - yyrestart(yyin ); + yyrestart( yyin ); } else @@ -3717,9 +3623,12 @@ if (((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ int new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1); - YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,(yy_size_t) new_size ); + YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( + (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); + /* "- 2" to take care of EOB's */ + YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); } (yy_n_chars) += number_to_move; @@ -3751,7 +3660,7 @@ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1722 ) + if ( yy_current_state >= 1633 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; @@ -3779,11 +3688,11 @@ while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 1722 ) + if ( yy_current_state >= 1633 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; - yy_is_jam = (yy_current_state == 1721); + yy_is_jam = (yy_current_state == 1632); return yy_is_jam ? 0 : yy_current_state; } @@ -3833,13 +3742,13 @@ */ /* Reset buffer status. */ - yyrestart(yyin ); + yyrestart( yyin ); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { - if ( yywrap( ) ) + if ( yywrap( ) ) return 0; if ( ! (yy_did_buffer_switch_on_eof) ) @@ -3877,11 +3786,11 @@ if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (); YY_CURRENT_BUFFER_LVALUE = - yy_create_buffer(yyin,YY_BUF_SIZE ); + yy_create_buffer( yyin, YY_BUF_SIZE ); } - yy_init_buffer(YY_CURRENT_BUFFER,input_file ); - yy_load_buffer_state( ); + yy_init_buffer( YY_CURRENT_BUFFER, input_file ); + yy_load_buffer_state( ); } /** Switch to a different input buffer. @@ -3909,7 +3818,7 @@ } YY_CURRENT_BUFFER_LVALUE = new_buffer; - yy_load_buffer_state( ); + yy_load_buffer_state( ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag @@ -3937,7 +3846,7 @@ { YY_BUFFER_STATE b; - b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); @@ -3946,13 +3855,13 @@ /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ - b->yy_ch_buf = (char *) yyalloc((yy_size_t) (b->yy_buf_size + 2) ); + b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; - yy_init_buffer(b,file ); + yy_init_buffer( b, file ); return b; } @@ -3971,9 +3880,9 @@ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) - yyfree((void *) b->yy_ch_buf ); + yyfree( (void *) b->yy_ch_buf ); - yyfree((void *) b ); + yyfree( (void *) b ); } /* Initializes or reinitializes a buffer. @@ -3985,7 +3894,7 @@ { int oerrno = errno; - yy_flush_buffer(b ); + yy_flush_buffer( b ); b->yy_input_file = file; b->yy_fill_buffer = 1; @@ -4028,7 +3937,7 @@ b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) - yy_load_buffer_state( ); + yy_load_buffer_state( ); } /** Pushes the new state onto the stack. The new state becomes @@ -4059,7 +3968,7 @@ YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ - yy_load_buffer_state( ); + yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } @@ -4078,7 +3987,7 @@ --(yy_buffer_stack_top); if (YY_CURRENT_BUFFER) { - yy_load_buffer_state( ); + yy_load_buffer_state( ); (yy_did_buffer_switch_on_eof) = 1; } } @@ -4102,9 +4011,9 @@ ); if ( ! (yy_buffer_stack) ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); - + memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*)); - + (yy_buffer_stack_max) = num_to_alloc; (yy_buffer_stack_top) = 0; return; @@ -4133,7 +4042,7 @@ * @param base the character buffer * @param size the size in bytes of the character buffer * - * @return the newly allocated buffer state object. + * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size ) { @@ -4145,7 +4054,7 @@ /* They forgot to leave room for the EOB's. */ return NULL; - b = (YY_BUFFER_STATE) yyalloc(sizeof( struct yy_buffer_state ) ); + b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); @@ -4159,7 +4068,7 @@ b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; - yy_switch_to_buffer(b ); + yy_switch_to_buffer( b ); return b; } @@ -4175,7 +4084,7 @@ YY_BUFFER_STATE yy_scan_string (const char * yystr ) { - return yy_scan_bytes(yystr,(int) strlen(yystr) ); + return yy_scan_bytes( yystr, (int) strlen(yystr) ); } /** Setup the input buffer state to scan the given bytes. The next call to yylex() will @@ -4194,7 +4103,7 @@ /* Get memory for full buffer, including space for trailing EOB's. */ n = (yy_size_t) (_yybytes_len + 2); - buf = (char *) yyalloc(n ); + buf = (char *) yyalloc( n ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); @@ -4203,7 +4112,7 @@ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; - b = yy_scan_buffer(buf,n ); + b = yy_scan_buffer( buf, n ); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); @@ -4221,7 +4130,7 @@ static void yynoreturn yy_fatal_error (const char* msg ) { - (void) fprintf( stderr, "%s\n", msg ); + fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } @@ -4249,7 +4158,7 @@ */ int yyget_lineno (void) { - + return yylineno; } @@ -4356,7 +4265,7 @@ /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ - yy_delete_buffer(YY_CURRENT_BUFFER ); + yy_delete_buffer( YY_CURRENT_BUFFER ); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(); } @@ -4422,7 +4331,7 @@ #define YYTABLES_NAME "yytables" -#line 395 "conf_lexer.l" +#line 388 "conf_lexer.l" /* C-comment ignoring routine -kre*/ diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/conf_lexer.l ircd-hybrid-8.2.24+dfsg.1/src/conf_lexer.l --- ircd-hybrid-8.2.22+dfsg.1/src/conf_lexer.l 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/conf_lexer.l 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2000-2017 ircd-hybrid development team + * Copyright (c) 2000-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file conf_lexer.l * \brief Scans the ircd configuration file for tokens. - * \version $Id: conf_lexer.l 8045 2017-03-18 18:05:41Z michael $ + * \version $Id: conf_lexer.l 8313 2018-02-28 17:45:36Z michael $ */ %option case-insensitive @@ -147,7 +147,6 @@ can_flood { return CAN_FLOOD; } cconn { return T_CCONN; } channel { return CHANNEL; } -check_cache { return CHECK_CACHE; } cidr_bitlen_ipv4 { return CIDR_BITLEN_IPV4; } cidr_bitlen_ipv6 { return CIDR_BITLEN_IPV6; } class { return CLASS; } @@ -223,9 +222,6 @@ knock_client_time { return KNOCK_CLIENT_TIME; } knock_delay_channel { return KNOCK_DELAY_CHANNEL; } leaf_mask { return LEAF_MASK; } -libgeoip_database_options { return LIBGEOIP_DATABASE_OPTIONS; } -libgeoip_ipv4_database_file { return LIBGEOIP_IPV4_DATABASE_FILE; } -libgeoip_ipv6_database_file { return LIBGEOIP_IPV6_DATABASE_FILE; } listen { return LISTEN; } locops { return T_LOCOPS; } log { return T_LOG; } @@ -246,11 +242,9 @@ max_targets { return MAX_TARGETS; } max_topic_length { return MAX_TOPIC_LENGTH; } max_watch { return MAX_WATCH; } -memory_cache { return MEMORY_CACHE; } min_idle { return MIN_IDLE; } min_nonwildcard { return MIN_NONWILDCARD; } min_nonwildcard_simple { return MIN_NONWILDCARD_SIMPLE; } -mmap_cache { return MMAP_CACHE; } module { return MODULE; } modules { return MODULES; } motd { return MOTD; } @@ -322,7 +316,6 @@ ssl_dh_elliptic_curve { return SSL_DH_ELLIPTIC_CURVE; } ssl_dh_param_file { return SSL_DH_PARAM_FILE; } ssl_message_digest_algorithm { return SSL_MESSAGE_DIGEST_ALGORITHM; } -standard { return STANDARD; } stats_e_disabled { return STATS_E_DISABLED; } stats_i_oper_only { return STATS_I_OPER_ONLY; } stats_k_oper_only { return STATS_K_OPER_ONLY; } diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/conf_parser.c ircd-hybrid-8.2.24+dfsg.1/src/conf_parser.c --- ircd-hybrid-8.2.22+dfsg.1/src/conf_parser.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/conf_parser.c 2018-04-04 22:33:37.000000000 +0000 @@ -69,6 +69,7 @@ #include "stdinc.h" #include "ircd.h" #include "list.h" +#include "parse.h" #include "conf.h" #include "conf_class.h" #include "conf_cluster.h" @@ -175,7 +176,7 @@ } -#line 179 "conf_parser.c" /* yacc.c:339 */ +#line 180 "conf_parser.c" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus @@ -224,227 +225,220 @@ CALLER_ID_WAIT = 269, CAN_FLOOD = 270, CHANNEL = 271, - CHECK_CACHE = 272, - CIDR_BITLEN_IPV4 = 273, - CIDR_BITLEN_IPV6 = 274, - CLASS = 275, - CLOSE = 276, - CONNECT = 277, - CONNECTFREQ = 278, - CYCLE_ON_HOST_CHANGE = 279, - DEFAULT_FLOODCOUNT = 280, - DEFAULT_FLOODTIME = 281, - DEFAULT_JOIN_FLOOD_COUNT = 282, - DEFAULT_JOIN_FLOOD_TIME = 283, - DEFAULT_MAX_CLIENTS = 284, - DENY = 285, - DESCRIPTION = 286, - DIE = 287, - DISABLE_AUTH = 288, - DISABLE_FAKE_CHANNELS = 289, - DISABLE_REMOTE_COMMANDS = 290, - DLINE_MIN_CIDR = 291, - DLINE_MIN_CIDR6 = 292, - DOTS_IN_IDENT = 293, - EMAIL = 294, - ENCRYPTED = 295, - EXCEED_LIMIT = 296, - EXEMPT = 297, - FAILED_OPER_NOTICE = 298, - FLATTEN_LINKS = 299, - FLATTEN_LINKS_DELAY = 300, - FLATTEN_LINKS_FILE = 301, - GECOS = 302, - GENERAL = 303, - HIDDEN = 304, - HIDDEN_NAME = 305, - HIDE_CHANS = 306, - HIDE_IDLE = 307, - HIDE_IDLE_FROM_OPERS = 308, - HIDE_SERVER_IPS = 309, - HIDE_SERVERS = 310, - HIDE_SERVICES = 311, - HOST = 312, - HUB = 313, - HUB_MASK = 314, - IGNORE_BOGUS_TS = 315, - INVISIBLE_ON_CONNECT = 316, - INVITE_CLIENT_COUNT = 317, - INVITE_CLIENT_TIME = 318, - INVITE_DELAY_CHANNEL = 319, - INVITE_EXPIRE_TIME = 320, - IP = 321, - IRCD_AUTH = 322, - IRCD_FLAGS = 323, - IRCD_SID = 324, - JOIN = 325, - KILL = 326, - KILL_CHASE_TIME_LIMIT = 327, - KLINE = 328, - KLINE_EXEMPT = 329, - KLINE_MIN_CIDR = 330, - KLINE_MIN_CIDR6 = 331, - KNOCK_CLIENT_COUNT = 332, - KNOCK_CLIENT_TIME = 333, - KNOCK_DELAY_CHANNEL = 334, - LEAF_MASK = 335, - LIBGEOIP_DATABASE_OPTIONS = 336, - LIBGEOIP_IPV4_DATABASE_FILE = 337, - LIBGEOIP_IPV6_DATABASE_FILE = 338, - LISTEN = 339, - MASK = 340, - MAX_ACCEPT = 341, - MAX_BANS = 342, - MAX_BANS_LARGE = 343, - MAX_CHANNELS = 344, - MAX_GLOBAL = 345, - MAX_IDLE = 346, - MAX_INVITES = 347, - MAX_LOCAL = 348, - MAX_NICK_CHANGES = 349, - MAX_NICK_LENGTH = 350, - MAX_NICK_TIME = 351, - MAX_NUMBER = 352, - MAX_TARGETS = 353, - MAX_TOPIC_LENGTH = 354, - MAX_WATCH = 355, - MEMORY_CACHE = 356, - MIN_IDLE = 357, - MIN_NONWILDCARD = 358, - MIN_NONWILDCARD_SIMPLE = 359, - MMAP_CACHE = 360, - MODULE = 361, - MODULES = 362, - MOTD = 363, - NAME = 364, - NEED_IDENT = 365, - NEED_PASSWORD = 366, - NETWORK_DESC = 367, - NETWORK_NAME = 368, - NICK = 369, - NO_OPER_FLOOD = 370, - NO_TILDE = 371, - NUMBER = 372, - NUMBER_PER_CIDR = 373, - NUMBER_PER_IP = 374, - OPER_ONLY_UMODES = 375, - OPER_UMODES = 376, - OPERATOR = 377, - OPERS_BYPASS_CALLERID = 378, - PACE_WAIT = 379, - PACE_WAIT_SIMPLE = 380, - PASSWORD = 381, - PATH = 382, - PING_COOKIE = 383, - PING_TIME = 384, - PORT = 385, - QSTRING = 386, - RANDOM_IDLE = 387, - REASON = 388, - REDIRPORT = 389, - REDIRSERV = 390, - REHASH = 391, - REMOTE = 392, - REMOTEBAN = 393, - RESV = 394, - RESV_EXEMPT = 395, - RSA_PRIVATE_KEY_FILE = 396, - SECONDS = 397, - MINUTES = 398, - HOURS = 399, - DAYS = 400, - WEEKS = 401, - MONTHS = 402, - YEARS = 403, - SEND_PASSWORD = 404, - SENDQ = 405, - SERVERHIDE = 406, - SERVERINFO = 407, - SHORT_MOTD = 408, - SPOOF = 409, - SPOOF_NOTICE = 410, - SQUIT = 411, - SSL_CERTIFICATE_FILE = 412, - SSL_CERTIFICATE_FINGERPRINT = 413, - SSL_CONNECTION_REQUIRED = 414, - SSL_DH_ELLIPTIC_CURVE = 415, - SSL_DH_PARAM_FILE = 416, - SSL_MESSAGE_DIGEST_ALGORITHM = 417, - STANDARD = 418, - STATS_E_DISABLED = 419, - STATS_I_OPER_ONLY = 420, - STATS_K_OPER_ONLY = 421, - STATS_M_OPER_ONLY = 422, - STATS_O_OPER_ONLY = 423, - STATS_P_OPER_ONLY = 424, - STATS_U_OPER_ONLY = 425, - T_ALL = 426, - T_BOTS = 427, - T_CALLERID = 428, - T_CCONN = 429, - T_COMMAND = 430, - T_CLUSTER = 431, - T_DEAF = 432, - T_DEBUG = 433, - T_DLINE = 434, - T_EXTERNAL = 435, - T_FARCONNECT = 436, - T_FILE = 437, - T_FULL = 438, - T_GLOBOPS = 439, - T_INVISIBLE = 440, - T_IPV4 = 441, - T_IPV6 = 442, - T_LOCOPS = 443, - T_LOG = 444, - T_NCHANGE = 445, - T_NONONREG = 446, - T_OPME = 447, - T_PREPEND = 448, - T_PSEUDO = 449, - T_RECVQ = 450, - T_REJ = 451, - T_RESTART = 452, - T_SERVER = 453, - T_SERVICE = 454, - T_SERVNOTICE = 455, - T_SET = 456, - T_SHARED = 457, - T_SIZE = 458, - T_SKILL = 459, - T_SOFTCALLERID = 460, - T_SPY = 461, - T_SSL = 462, - T_SSL_CIPHER_LIST = 463, - T_TARGET = 464, - T_UMODES = 465, - T_UNAUTH = 466, - T_UNDLINE = 467, - T_UNLIMITED = 468, - T_UNRESV = 469, - T_UNXLINE = 470, - T_WALLOP = 471, - T_WALLOPS = 472, - T_WEBIRC = 473, - TBOOL = 474, - THROTTLE_COUNT = 475, - THROTTLE_TIME = 476, - TKLINE_EXPIRE_NOTICES = 477, - TMASKED = 478, - TS_MAX_DELTA = 479, - TS_WARN_DELTA = 480, - TWODOTS = 481, - TYPE = 482, - UNKLINE = 483, - USE_LOGGING = 484, - USER = 485, - VHOST = 486, - VHOST6 = 487, - WARN_NO_CONNECT_BLOCK = 488, - WHOIS = 489, - WHOWAS_HISTORY_LENGTH = 490, - XLINE = 491, - XLINE_EXEMPT = 492 + CIDR_BITLEN_IPV4 = 272, + CIDR_BITLEN_IPV6 = 273, + CLASS = 274, + CLOSE = 275, + CONNECT = 276, + CONNECTFREQ = 277, + CYCLE_ON_HOST_CHANGE = 278, + DEFAULT_FLOODCOUNT = 279, + DEFAULT_FLOODTIME = 280, + DEFAULT_JOIN_FLOOD_COUNT = 281, + DEFAULT_JOIN_FLOOD_TIME = 282, + DEFAULT_MAX_CLIENTS = 283, + DENY = 284, + DESCRIPTION = 285, + DIE = 286, + DISABLE_AUTH = 287, + DISABLE_FAKE_CHANNELS = 288, + DISABLE_REMOTE_COMMANDS = 289, + DLINE_MIN_CIDR = 290, + DLINE_MIN_CIDR6 = 291, + DOTS_IN_IDENT = 292, + EMAIL = 293, + ENCRYPTED = 294, + EXCEED_LIMIT = 295, + EXEMPT = 296, + FAILED_OPER_NOTICE = 297, + FLATTEN_LINKS = 298, + FLATTEN_LINKS_DELAY = 299, + FLATTEN_LINKS_FILE = 300, + GECOS = 301, + GENERAL = 302, + HIDDEN = 303, + HIDDEN_NAME = 304, + HIDE_CHANS = 305, + HIDE_IDLE = 306, + HIDE_IDLE_FROM_OPERS = 307, + HIDE_SERVER_IPS = 308, + HIDE_SERVERS = 309, + HIDE_SERVICES = 310, + HOST = 311, + HUB = 312, + HUB_MASK = 313, + IGNORE_BOGUS_TS = 314, + INVISIBLE_ON_CONNECT = 315, + INVITE_CLIENT_COUNT = 316, + INVITE_CLIENT_TIME = 317, + INVITE_DELAY_CHANNEL = 318, + INVITE_EXPIRE_TIME = 319, + IP = 320, + IRCD_AUTH = 321, + IRCD_FLAGS = 322, + IRCD_SID = 323, + JOIN = 324, + KILL = 325, + KILL_CHASE_TIME_LIMIT = 326, + KLINE = 327, + KLINE_EXEMPT = 328, + KLINE_MIN_CIDR = 329, + KLINE_MIN_CIDR6 = 330, + KNOCK_CLIENT_COUNT = 331, + KNOCK_CLIENT_TIME = 332, + KNOCK_DELAY_CHANNEL = 333, + LEAF_MASK = 334, + LISTEN = 335, + MASK = 336, + MAX_ACCEPT = 337, + MAX_BANS = 338, + MAX_BANS_LARGE = 339, + MAX_CHANNELS = 340, + MAX_GLOBAL = 341, + MAX_IDLE = 342, + MAX_INVITES = 343, + MAX_LOCAL = 344, + MAX_NICK_CHANGES = 345, + MAX_NICK_LENGTH = 346, + MAX_NICK_TIME = 347, + MAX_NUMBER = 348, + MAX_TARGETS = 349, + MAX_TOPIC_LENGTH = 350, + MAX_WATCH = 351, + MIN_IDLE = 352, + MIN_NONWILDCARD = 353, + MIN_NONWILDCARD_SIMPLE = 354, + MODULE = 355, + MODULES = 356, + MOTD = 357, + NAME = 358, + NEED_IDENT = 359, + NEED_PASSWORD = 360, + NETWORK_DESC = 361, + NETWORK_NAME = 362, + NICK = 363, + NO_OPER_FLOOD = 364, + NO_TILDE = 365, + NUMBER = 366, + NUMBER_PER_CIDR = 367, + NUMBER_PER_IP = 368, + OPER_ONLY_UMODES = 369, + OPER_UMODES = 370, + OPERATOR = 371, + OPERS_BYPASS_CALLERID = 372, + PACE_WAIT = 373, + PACE_WAIT_SIMPLE = 374, + PASSWORD = 375, + PATH = 376, + PING_COOKIE = 377, + PING_TIME = 378, + PORT = 379, + QSTRING = 380, + RANDOM_IDLE = 381, + REASON = 382, + REDIRPORT = 383, + REDIRSERV = 384, + REHASH = 385, + REMOTE = 386, + REMOTEBAN = 387, + RESV = 388, + RESV_EXEMPT = 389, + RSA_PRIVATE_KEY_FILE = 390, + SECONDS = 391, + MINUTES = 392, + HOURS = 393, + DAYS = 394, + WEEKS = 395, + MONTHS = 396, + YEARS = 397, + SEND_PASSWORD = 398, + SENDQ = 399, + SERVERHIDE = 400, + SERVERINFO = 401, + SHORT_MOTD = 402, + SPOOF = 403, + SPOOF_NOTICE = 404, + SQUIT = 405, + SSL_CERTIFICATE_FILE = 406, + SSL_CERTIFICATE_FINGERPRINT = 407, + SSL_CONNECTION_REQUIRED = 408, + SSL_DH_ELLIPTIC_CURVE = 409, + SSL_DH_PARAM_FILE = 410, + SSL_MESSAGE_DIGEST_ALGORITHM = 411, + STATS_E_DISABLED = 412, + STATS_I_OPER_ONLY = 413, + STATS_K_OPER_ONLY = 414, + STATS_M_OPER_ONLY = 415, + STATS_O_OPER_ONLY = 416, + STATS_P_OPER_ONLY = 417, + STATS_U_OPER_ONLY = 418, + T_ALL = 419, + T_BOTS = 420, + T_CALLERID = 421, + T_CCONN = 422, + T_COMMAND = 423, + T_CLUSTER = 424, + T_DEAF = 425, + T_DEBUG = 426, + T_DLINE = 427, + T_EXTERNAL = 428, + T_FARCONNECT = 429, + T_FILE = 430, + T_FULL = 431, + T_GLOBOPS = 432, + T_INVISIBLE = 433, + T_IPV4 = 434, + T_IPV6 = 435, + T_LOCOPS = 436, + T_LOG = 437, + T_NCHANGE = 438, + T_NONONREG = 439, + T_OPME = 440, + T_PREPEND = 441, + T_PSEUDO = 442, + T_RECVQ = 443, + T_REJ = 444, + T_RESTART = 445, + T_SERVER = 446, + T_SERVICE = 447, + T_SERVNOTICE = 448, + T_SET = 449, + T_SHARED = 450, + T_SIZE = 451, + T_SKILL = 452, + T_SOFTCALLERID = 453, + T_SPY = 454, + T_SSL = 455, + T_SSL_CIPHER_LIST = 456, + T_TARGET = 457, + T_UMODES = 458, + T_UNAUTH = 459, + T_UNDLINE = 460, + T_UNLIMITED = 461, + T_UNRESV = 462, + T_UNXLINE = 463, + T_WALLOP = 464, + T_WALLOPS = 465, + T_WEBIRC = 466, + TBOOL = 467, + THROTTLE_COUNT = 468, + THROTTLE_TIME = 469, + TKLINE_EXPIRE_NOTICES = 470, + TMASKED = 471, + TS_MAX_DELTA = 472, + TS_WARN_DELTA = 473, + TWODOTS = 474, + TYPE = 475, + UNKLINE = 476, + USE_LOGGING = 477, + USER = 478, + VHOST = 479, + VHOST6 = 480, + WARN_NO_CONNECT_BLOCK = 481, + WHOIS = 482, + WHOWAS_HISTORY_LENGTH = 483, + XLINE = 484, + XLINE_EXEMPT = 485 }; #endif /* Tokens. */ @@ -462,239 +456,232 @@ #define CALLER_ID_WAIT 269 #define CAN_FLOOD 270 #define CHANNEL 271 -#define CHECK_CACHE 272 -#define CIDR_BITLEN_IPV4 273 -#define CIDR_BITLEN_IPV6 274 -#define CLASS 275 -#define CLOSE 276 -#define CONNECT 277 -#define CONNECTFREQ 278 -#define CYCLE_ON_HOST_CHANGE 279 -#define DEFAULT_FLOODCOUNT 280 -#define DEFAULT_FLOODTIME 281 -#define DEFAULT_JOIN_FLOOD_COUNT 282 -#define DEFAULT_JOIN_FLOOD_TIME 283 -#define DEFAULT_MAX_CLIENTS 284 -#define DENY 285 -#define DESCRIPTION 286 -#define DIE 287 -#define DISABLE_AUTH 288 -#define DISABLE_FAKE_CHANNELS 289 -#define DISABLE_REMOTE_COMMANDS 290 -#define DLINE_MIN_CIDR 291 -#define DLINE_MIN_CIDR6 292 -#define DOTS_IN_IDENT 293 -#define EMAIL 294 -#define ENCRYPTED 295 -#define EXCEED_LIMIT 296 -#define EXEMPT 297 -#define FAILED_OPER_NOTICE 298 -#define FLATTEN_LINKS 299 -#define FLATTEN_LINKS_DELAY 300 -#define FLATTEN_LINKS_FILE 301 -#define GECOS 302 -#define GENERAL 303 -#define HIDDEN 304 -#define HIDDEN_NAME 305 -#define HIDE_CHANS 306 -#define HIDE_IDLE 307 -#define HIDE_IDLE_FROM_OPERS 308 -#define HIDE_SERVER_IPS 309 -#define HIDE_SERVERS 310 -#define HIDE_SERVICES 311 -#define HOST 312 -#define HUB 313 -#define HUB_MASK 314 -#define IGNORE_BOGUS_TS 315 -#define INVISIBLE_ON_CONNECT 316 -#define INVITE_CLIENT_COUNT 317 -#define INVITE_CLIENT_TIME 318 -#define INVITE_DELAY_CHANNEL 319 -#define INVITE_EXPIRE_TIME 320 -#define IP 321 -#define IRCD_AUTH 322 -#define IRCD_FLAGS 323 -#define IRCD_SID 324 -#define JOIN 325 -#define KILL 326 -#define KILL_CHASE_TIME_LIMIT 327 -#define KLINE 328 -#define KLINE_EXEMPT 329 -#define KLINE_MIN_CIDR 330 -#define KLINE_MIN_CIDR6 331 -#define KNOCK_CLIENT_COUNT 332 -#define KNOCK_CLIENT_TIME 333 -#define KNOCK_DELAY_CHANNEL 334 -#define LEAF_MASK 335 -#define LIBGEOIP_DATABASE_OPTIONS 336 -#define LIBGEOIP_IPV4_DATABASE_FILE 337 -#define LIBGEOIP_IPV6_DATABASE_FILE 338 -#define LISTEN 339 -#define MASK 340 -#define MAX_ACCEPT 341 -#define MAX_BANS 342 -#define MAX_BANS_LARGE 343 -#define MAX_CHANNELS 344 -#define MAX_GLOBAL 345 -#define MAX_IDLE 346 -#define MAX_INVITES 347 -#define MAX_LOCAL 348 -#define MAX_NICK_CHANGES 349 -#define MAX_NICK_LENGTH 350 -#define MAX_NICK_TIME 351 -#define MAX_NUMBER 352 -#define MAX_TARGETS 353 -#define MAX_TOPIC_LENGTH 354 -#define MAX_WATCH 355 -#define MEMORY_CACHE 356 -#define MIN_IDLE 357 -#define MIN_NONWILDCARD 358 -#define MIN_NONWILDCARD_SIMPLE 359 -#define MMAP_CACHE 360 -#define MODULE 361 -#define MODULES 362 -#define MOTD 363 -#define NAME 364 -#define NEED_IDENT 365 -#define NEED_PASSWORD 366 -#define NETWORK_DESC 367 -#define NETWORK_NAME 368 -#define NICK 369 -#define NO_OPER_FLOOD 370 -#define NO_TILDE 371 -#define NUMBER 372 -#define NUMBER_PER_CIDR 373 -#define NUMBER_PER_IP 374 -#define OPER_ONLY_UMODES 375 -#define OPER_UMODES 376 -#define OPERATOR 377 -#define OPERS_BYPASS_CALLERID 378 -#define PACE_WAIT 379 -#define PACE_WAIT_SIMPLE 380 -#define PASSWORD 381 -#define PATH 382 -#define PING_COOKIE 383 -#define PING_TIME 384 -#define PORT 385 -#define QSTRING 386 -#define RANDOM_IDLE 387 -#define REASON 388 -#define REDIRPORT 389 -#define REDIRSERV 390 -#define REHASH 391 -#define REMOTE 392 -#define REMOTEBAN 393 -#define RESV 394 -#define RESV_EXEMPT 395 -#define RSA_PRIVATE_KEY_FILE 396 -#define SECONDS 397 -#define MINUTES 398 -#define HOURS 399 -#define DAYS 400 -#define WEEKS 401 -#define MONTHS 402 -#define YEARS 403 -#define SEND_PASSWORD 404 -#define SENDQ 405 -#define SERVERHIDE 406 -#define SERVERINFO 407 -#define SHORT_MOTD 408 -#define SPOOF 409 -#define SPOOF_NOTICE 410 -#define SQUIT 411 -#define SSL_CERTIFICATE_FILE 412 -#define SSL_CERTIFICATE_FINGERPRINT 413 -#define SSL_CONNECTION_REQUIRED 414 -#define SSL_DH_ELLIPTIC_CURVE 415 -#define SSL_DH_PARAM_FILE 416 -#define SSL_MESSAGE_DIGEST_ALGORITHM 417 -#define STANDARD 418 -#define STATS_E_DISABLED 419 -#define STATS_I_OPER_ONLY 420 -#define STATS_K_OPER_ONLY 421 -#define STATS_M_OPER_ONLY 422 -#define STATS_O_OPER_ONLY 423 -#define STATS_P_OPER_ONLY 424 -#define STATS_U_OPER_ONLY 425 -#define T_ALL 426 -#define T_BOTS 427 -#define T_CALLERID 428 -#define T_CCONN 429 -#define T_COMMAND 430 -#define T_CLUSTER 431 -#define T_DEAF 432 -#define T_DEBUG 433 -#define T_DLINE 434 -#define T_EXTERNAL 435 -#define T_FARCONNECT 436 -#define T_FILE 437 -#define T_FULL 438 -#define T_GLOBOPS 439 -#define T_INVISIBLE 440 -#define T_IPV4 441 -#define T_IPV6 442 -#define T_LOCOPS 443 -#define T_LOG 444 -#define T_NCHANGE 445 -#define T_NONONREG 446 -#define T_OPME 447 -#define T_PREPEND 448 -#define T_PSEUDO 449 -#define T_RECVQ 450 -#define T_REJ 451 -#define T_RESTART 452 -#define T_SERVER 453 -#define T_SERVICE 454 -#define T_SERVNOTICE 455 -#define T_SET 456 -#define T_SHARED 457 -#define T_SIZE 458 -#define T_SKILL 459 -#define T_SOFTCALLERID 460 -#define T_SPY 461 -#define T_SSL 462 -#define T_SSL_CIPHER_LIST 463 -#define T_TARGET 464 -#define T_UMODES 465 -#define T_UNAUTH 466 -#define T_UNDLINE 467 -#define T_UNLIMITED 468 -#define T_UNRESV 469 -#define T_UNXLINE 470 -#define T_WALLOP 471 -#define T_WALLOPS 472 -#define T_WEBIRC 473 -#define TBOOL 474 -#define THROTTLE_COUNT 475 -#define THROTTLE_TIME 476 -#define TKLINE_EXPIRE_NOTICES 477 -#define TMASKED 478 -#define TS_MAX_DELTA 479 -#define TS_WARN_DELTA 480 -#define TWODOTS 481 -#define TYPE 482 -#define UNKLINE 483 -#define USE_LOGGING 484 -#define USER 485 -#define VHOST 486 -#define VHOST6 487 -#define WARN_NO_CONNECT_BLOCK 488 -#define WHOIS 489 -#define WHOWAS_HISTORY_LENGTH 490 -#define XLINE 491 -#define XLINE_EXEMPT 492 +#define CIDR_BITLEN_IPV4 272 +#define CIDR_BITLEN_IPV6 273 +#define CLASS 274 +#define CLOSE 275 +#define CONNECT 276 +#define CONNECTFREQ 277 +#define CYCLE_ON_HOST_CHANGE 278 +#define DEFAULT_FLOODCOUNT 279 +#define DEFAULT_FLOODTIME 280 +#define DEFAULT_JOIN_FLOOD_COUNT 281 +#define DEFAULT_JOIN_FLOOD_TIME 282 +#define DEFAULT_MAX_CLIENTS 283 +#define DENY 284 +#define DESCRIPTION 285 +#define DIE 286 +#define DISABLE_AUTH 287 +#define DISABLE_FAKE_CHANNELS 288 +#define DISABLE_REMOTE_COMMANDS 289 +#define DLINE_MIN_CIDR 290 +#define DLINE_MIN_CIDR6 291 +#define DOTS_IN_IDENT 292 +#define EMAIL 293 +#define ENCRYPTED 294 +#define EXCEED_LIMIT 295 +#define EXEMPT 296 +#define FAILED_OPER_NOTICE 297 +#define FLATTEN_LINKS 298 +#define FLATTEN_LINKS_DELAY 299 +#define FLATTEN_LINKS_FILE 300 +#define GECOS 301 +#define GENERAL 302 +#define HIDDEN 303 +#define HIDDEN_NAME 304 +#define HIDE_CHANS 305 +#define HIDE_IDLE 306 +#define HIDE_IDLE_FROM_OPERS 307 +#define HIDE_SERVER_IPS 308 +#define HIDE_SERVERS 309 +#define HIDE_SERVICES 310 +#define HOST 311 +#define HUB 312 +#define HUB_MASK 313 +#define IGNORE_BOGUS_TS 314 +#define INVISIBLE_ON_CONNECT 315 +#define INVITE_CLIENT_COUNT 316 +#define INVITE_CLIENT_TIME 317 +#define INVITE_DELAY_CHANNEL 318 +#define INVITE_EXPIRE_TIME 319 +#define IP 320 +#define IRCD_AUTH 321 +#define IRCD_FLAGS 322 +#define IRCD_SID 323 +#define JOIN 324 +#define KILL 325 +#define KILL_CHASE_TIME_LIMIT 326 +#define KLINE 327 +#define KLINE_EXEMPT 328 +#define KLINE_MIN_CIDR 329 +#define KLINE_MIN_CIDR6 330 +#define KNOCK_CLIENT_COUNT 331 +#define KNOCK_CLIENT_TIME 332 +#define KNOCK_DELAY_CHANNEL 333 +#define LEAF_MASK 334 +#define LISTEN 335 +#define MASK 336 +#define MAX_ACCEPT 337 +#define MAX_BANS 338 +#define MAX_BANS_LARGE 339 +#define MAX_CHANNELS 340 +#define MAX_GLOBAL 341 +#define MAX_IDLE 342 +#define MAX_INVITES 343 +#define MAX_LOCAL 344 +#define MAX_NICK_CHANGES 345 +#define MAX_NICK_LENGTH 346 +#define MAX_NICK_TIME 347 +#define MAX_NUMBER 348 +#define MAX_TARGETS 349 +#define MAX_TOPIC_LENGTH 350 +#define MAX_WATCH 351 +#define MIN_IDLE 352 +#define MIN_NONWILDCARD 353 +#define MIN_NONWILDCARD_SIMPLE 354 +#define MODULE 355 +#define MODULES 356 +#define MOTD 357 +#define NAME 358 +#define NEED_IDENT 359 +#define NEED_PASSWORD 360 +#define NETWORK_DESC 361 +#define NETWORK_NAME 362 +#define NICK 363 +#define NO_OPER_FLOOD 364 +#define NO_TILDE 365 +#define NUMBER 366 +#define NUMBER_PER_CIDR 367 +#define NUMBER_PER_IP 368 +#define OPER_ONLY_UMODES 369 +#define OPER_UMODES 370 +#define OPERATOR 371 +#define OPERS_BYPASS_CALLERID 372 +#define PACE_WAIT 373 +#define PACE_WAIT_SIMPLE 374 +#define PASSWORD 375 +#define PATH 376 +#define PING_COOKIE 377 +#define PING_TIME 378 +#define PORT 379 +#define QSTRING 380 +#define RANDOM_IDLE 381 +#define REASON 382 +#define REDIRPORT 383 +#define REDIRSERV 384 +#define REHASH 385 +#define REMOTE 386 +#define REMOTEBAN 387 +#define RESV 388 +#define RESV_EXEMPT 389 +#define RSA_PRIVATE_KEY_FILE 390 +#define SECONDS 391 +#define MINUTES 392 +#define HOURS 393 +#define DAYS 394 +#define WEEKS 395 +#define MONTHS 396 +#define YEARS 397 +#define SEND_PASSWORD 398 +#define SENDQ 399 +#define SERVERHIDE 400 +#define SERVERINFO 401 +#define SHORT_MOTD 402 +#define SPOOF 403 +#define SPOOF_NOTICE 404 +#define SQUIT 405 +#define SSL_CERTIFICATE_FILE 406 +#define SSL_CERTIFICATE_FINGERPRINT 407 +#define SSL_CONNECTION_REQUIRED 408 +#define SSL_DH_ELLIPTIC_CURVE 409 +#define SSL_DH_PARAM_FILE 410 +#define SSL_MESSAGE_DIGEST_ALGORITHM 411 +#define STATS_E_DISABLED 412 +#define STATS_I_OPER_ONLY 413 +#define STATS_K_OPER_ONLY 414 +#define STATS_M_OPER_ONLY 415 +#define STATS_O_OPER_ONLY 416 +#define STATS_P_OPER_ONLY 417 +#define STATS_U_OPER_ONLY 418 +#define T_ALL 419 +#define T_BOTS 420 +#define T_CALLERID 421 +#define T_CCONN 422 +#define T_COMMAND 423 +#define T_CLUSTER 424 +#define T_DEAF 425 +#define T_DEBUG 426 +#define T_DLINE 427 +#define T_EXTERNAL 428 +#define T_FARCONNECT 429 +#define T_FILE 430 +#define T_FULL 431 +#define T_GLOBOPS 432 +#define T_INVISIBLE 433 +#define T_IPV4 434 +#define T_IPV6 435 +#define T_LOCOPS 436 +#define T_LOG 437 +#define T_NCHANGE 438 +#define T_NONONREG 439 +#define T_OPME 440 +#define T_PREPEND 441 +#define T_PSEUDO 442 +#define T_RECVQ 443 +#define T_REJ 444 +#define T_RESTART 445 +#define T_SERVER 446 +#define T_SERVICE 447 +#define T_SERVNOTICE 448 +#define T_SET 449 +#define T_SHARED 450 +#define T_SIZE 451 +#define T_SKILL 452 +#define T_SOFTCALLERID 453 +#define T_SPY 454 +#define T_SSL 455 +#define T_SSL_CIPHER_LIST 456 +#define T_TARGET 457 +#define T_UMODES 458 +#define T_UNAUTH 459 +#define T_UNDLINE 460 +#define T_UNLIMITED 461 +#define T_UNRESV 462 +#define T_UNXLINE 463 +#define T_WALLOP 464 +#define T_WALLOPS 465 +#define T_WEBIRC 466 +#define TBOOL 467 +#define THROTTLE_COUNT 468 +#define THROTTLE_TIME 469 +#define TKLINE_EXPIRE_NOTICES 470 +#define TMASKED 471 +#define TS_MAX_DELTA 472 +#define TS_WARN_DELTA 473 +#define TWODOTS 474 +#define TYPE 475 +#define UNKLINE 476 +#define USE_LOGGING 477 +#define USER 478 +#define VHOST 479 +#define VHOST6 480 +#define WARN_NO_CONNECT_BLOCK 481 +#define WHOIS 482 +#define WHOWAS_HISTORY_LENGTH 483 +#define XLINE 484 +#define XLINE_EXEMPT 485 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 141 "conf_parser.y" /* yacc.c:355 */ +#line 142 "conf_parser.y" /* yacc.c:355 */ int number; char *string; -#line 698 "conf_parser.c" /* yacc.c:355 */ +#line 685 "conf_parser.c" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -711,7 +698,7 @@ /* Copy the second part of user declarations. */ -#line 715 "conf_parser.c" /* yacc.c:358 */ +#line 702 "conf_parser.c" /* yacc.c:358 */ #ifdef short # undef short @@ -953,21 +940,21 @@ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 2 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 1374 +#define YYLAST 1360 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 244 +#define YYNTOKENS 237 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 302 +#define YYNNTS 296 /* YYNRULES -- Number of rules. */ -#define YYNRULES 683 +#define YYNRULES 670 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 1347 +#define YYNSTATES 1324 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 492 +#define YYMAXUTOK 485 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -980,15 +967,15 @@ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 242, 2, 2, 2, 2, 2, - 2, 2, 2, 2, 2, 2, 2, 2, 243, 238, - 2, 241, 2, 2, 2, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 235, 2, 2, 2, 2, 2, + 2, 2, 2, 2, 2, 2, 2, 2, 236, 231, + 2, 234, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, - 2, 2, 2, 240, 2, 239, 2, 2, 2, 2, + 2, 2, 2, 233, 2, 232, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -1024,83 +1011,81 @@ 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, - 235, 236, 237 + 225, 226, 227, 228, 229, 230 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 382, 382, 383, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 413, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 424, 424, - 425, 426, 427, 428, 435, 437, 437, 438, 438, 438, - 440, 446, 456, 458, 458, 459, 460, 461, 462, 463, - 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, - 474, 475, 476, 477, 478, 479, 482, 491, 500, 509, - 518, 527, 537, 536, 542, 542, 543, 549, 555, 561, - 569, 584, 599, 614, 629, 639, 653, 662, 690, 718, - 743, 765, 787, 797, 799, 799, 800, 801, 802, 803, - 805, 814, 823, 837, 836, 854, 854, 855, 855, 855, - 857, 863, 874, 873, 892, 892, 893, 893, 893, 893, - 893, 895, 901, 907, 913, 935, 936, 936, 938, 938, - 939, 941, 948, 948, 961, 962, 964, 964, 965, 965, - 967, 975, 978, 984, 983, 989, 989, 990, 994, 998, - 1002, 1006, 1010, 1014, 1018, 1029, 1028, 1089, 1089, 1090, - 1091, 1092, 1093, 1094, 1095, 1096, 1097, 1098, 1099, 1100, - 1102, 1108, 1114, 1120, 1126, 1137, 1143, 1154, 1161, 1160, - 1166, 1166, 1167, 1171, 1175, 1179, 1183, 1187, 1191, 1195, - 1199, 1203, 1207, 1211, 1215, 1219, 1223, 1227, 1231, 1235, - 1239, 1243, 1247, 1251, 1258, 1257, 1263, 1263, 1264, 1268, - 1272, 1276, 1280, 1284, 1288, 1292, 1296, 1300, 1304, 1308, - 1312, 1316, 1320, 1324, 1328, 1332, 1336, 1340, 1344, 1348, - 1352, 1356, 1360, 1364, 1368, 1372, 1376, 1387, 1386, 1442, - 1442, 1443, 1444, 1445, 1446, 1447, 1448, 1449, 1450, 1451, - 1452, 1453, 1454, 1455, 1456, 1457, 1458, 1459, 1461, 1467, - 1473, 1479, 1485, 1491, 1497, 1503, 1509, 1515, 1522, 1528, - 1534, 1540, 1549, 1559, 1558, 1564, 1564, 1565, 1569, 1580, - 1579, 1586, 1585, 1590, 1590, 1591, 1595, 1599, 1605, 1605, - 1606, 1606, 1606, 1606, 1606, 1608, 1608, 1610, 1610, 1612, - 1625, 1642, 1648, 1659, 1658, 1704, 1704, 1705, 1706, 1707, - 1708, 1709, 1710, 1711, 1712, 1713, 1715, 1721, 1727, 1733, - 1745, 1744, 1750, 1750, 1751, 1755, 1759, 1763, 1767, 1771, - 1775, 1779, 1783, 1787, 1793, 1807, 1816, 1830, 1829, 1844, - 1844, 1845, 1845, 1845, 1845, 1847, 1853, 1859, 1869, 1871, - 1871, 1872, 1872, 1874, 1891, 1890, 1913, 1913, 1914, 1914, - 1914, 1914, 1916, 1922, 1942, 1941, 1947, 1947, 1948, 1952, - 1956, 1960, 1964, 1968, 1972, 1976, 1980, 1984, 1995, 1994, - 2013, 2013, 2014, 2014, 2014, 2016, 2023, 2022, 2028, 2028, - 2029, 2033, 2037, 2041, 2045, 2049, 2053, 2057, 2061, 2065, - 2076, 2075, 2147, 2147, 2148, 2149, 2150, 2151, 2152, 2153, - 2154, 2155, 2156, 2157, 2158, 2159, 2160, 2161, 2162, 2164, - 2170, 2176, 2182, 2195, 2208, 2214, 2220, 2224, 2231, 2230, - 2235, 2235, 2236, 2240, 2246, 2257, 2263, 2269, 2275, 2291, - 2290, 2316, 2316, 2317, 2317, 2317, 2319, 2339, 2350, 2349, - 2376, 2376, 2377, 2377, 2377, 2379, 2385, 2395, 2397, 2397, - 2398, 2398, 2400, 2418, 2417, 2438, 2438, 2439, 2439, 2439, - 2441, 2447, 2457, 2459, 2459, 2460, 2461, 2462, 2463, 2464, - 2465, 2466, 2467, 2468, 2469, 2470, 2471, 2472, 2473, 2474, - 2475, 2476, 2477, 2478, 2479, 2480, 2481, 2482, 2483, 2484, - 2485, 2486, 2487, 2488, 2489, 2490, 2491, 2492, 2493, 2494, - 2495, 2496, 2497, 2498, 2499, 2500, 2501, 2502, 2503, 2504, - 2505, 2506, 2507, 2510, 2515, 2520, 2525, 2530, 2536, 2541, - 2546, 2551, 2556, 2561, 2566, 2571, 2576, 2581, 2586, 2591, - 2596, 2601, 2606, 2612, 2617, 2622, 2627, 2632, 2637, 2642, - 2647, 2650, 2655, 2658, 2663, 2668, 2673, 2678, 2683, 2688, - 2693, 2698, 2703, 2708, 2713, 2718, 2724, 2723, 2728, 2728, - 2729, 2732, 2735, 2738, 2741, 2744, 2747, 2750, 2753, 2756, - 2759, 2762, 2765, 2768, 2771, 2774, 2777, 2780, 2783, 2786, - 2789, 2792, 2798, 2797, 2802, 2802, 2803, 2806, 2809, 2812, - 2815, 2818, 2821, 2824, 2827, 2830, 2833, 2836, 2839, 2842, - 2845, 2848, 2851, 2854, 2857, 2860, 2865, 2870, 2875, 2880, - 2889, 2891, 2891, 2892, 2893, 2894, 2895, 2896, 2897, 2898, - 2899, 2900, 2901, 2902, 2903, 2904, 2905, 2906, 2908, 2913, - 2918, 2923, 2928, 2933, 2938, 2943, 2948, 2953, 2958, 2963, - 2968, 2973, 2982, 2984, 2984, 2985, 2986, 2987, 2988, 2989, - 2990, 2991, 2992, 2993, 2994, 2996, 3002, 3018, 3027, 3033, - 3039, 3045, 3054, 3060 + 0, 376, 376, 377, 380, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 407, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 418, 418, + 419, 420, 421, 422, 429, 431, 431, 432, 432, 432, + 434, 440, 450, 452, 452, 453, 454, 455, 456, 457, + 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, + 468, 469, 470, 473, 482, 491, 500, 509, 518, 527, + 542, 557, 567, 581, 590, 618, 646, 671, 693, 715, + 725, 727, 727, 728, 729, 730, 731, 733, 742, 751, + 765, 764, 782, 782, 783, 783, 783, 785, 791, 802, + 801, 820, 820, 821, 821, 821, 821, 821, 823, 829, + 835, 841, 863, 864, 864, 866, 866, 867, 869, 876, + 876, 889, 890, 892, 892, 893, 893, 895, 903, 906, + 912, 911, 917, 917, 918, 922, 926, 930, 934, 938, + 942, 946, 957, 956, 1017, 1017, 1018, 1019, 1020, 1021, + 1022, 1023, 1024, 1025, 1026, 1027, 1028, 1030, 1036, 1042, + 1048, 1054, 1065, 1071, 1082, 1089, 1088, 1094, 1094, 1095, + 1099, 1103, 1107, 1111, 1115, 1119, 1123, 1127, 1131, 1135, + 1139, 1143, 1147, 1151, 1155, 1159, 1163, 1167, 1171, 1175, + 1179, 1186, 1185, 1191, 1191, 1192, 1196, 1200, 1204, 1208, + 1212, 1216, 1220, 1224, 1228, 1232, 1236, 1240, 1244, 1248, + 1252, 1256, 1260, 1264, 1268, 1272, 1276, 1280, 1284, 1288, + 1292, 1296, 1300, 1304, 1315, 1314, 1370, 1370, 1371, 1372, + 1373, 1374, 1375, 1376, 1377, 1378, 1379, 1380, 1381, 1382, + 1383, 1384, 1385, 1386, 1387, 1389, 1395, 1401, 1407, 1413, + 1419, 1425, 1431, 1437, 1443, 1450, 1456, 1462, 1468, 1477, + 1487, 1486, 1492, 1492, 1493, 1497, 1508, 1507, 1514, 1513, + 1518, 1518, 1519, 1523, 1527, 1533, 1533, 1534, 1534, 1534, + 1534, 1534, 1536, 1536, 1538, 1538, 1540, 1553, 1570, 1576, + 1587, 1586, 1632, 1632, 1633, 1634, 1635, 1636, 1637, 1638, + 1639, 1640, 1641, 1643, 1649, 1655, 1661, 1673, 1672, 1678, + 1678, 1679, 1683, 1687, 1691, 1695, 1699, 1703, 1707, 1711, + 1715, 1721, 1735, 1744, 1758, 1757, 1772, 1772, 1773, 1773, + 1773, 1773, 1775, 1781, 1787, 1797, 1799, 1799, 1800, 1800, + 1802, 1819, 1818, 1841, 1841, 1842, 1842, 1842, 1842, 1844, + 1850, 1870, 1869, 1875, 1875, 1876, 1880, 1884, 1888, 1892, + 1896, 1900, 1904, 1908, 1912, 1923, 1922, 1941, 1941, 1942, + 1942, 1942, 1944, 1951, 1950, 1956, 1956, 1957, 1961, 1965, + 1969, 1973, 1977, 1981, 1985, 1989, 1993, 2004, 2003, 2075, + 2075, 2076, 2077, 2078, 2079, 2080, 2081, 2082, 2083, 2084, + 2085, 2086, 2087, 2088, 2089, 2090, 2092, 2098, 2104, 2110, + 2123, 2136, 2142, 2148, 2152, 2159, 2158, 2163, 2163, 2164, + 2168, 2174, 2185, 2191, 2197, 2203, 2219, 2218, 2244, 2244, + 2245, 2245, 2245, 2247, 2267, 2278, 2277, 2304, 2304, 2305, + 2305, 2305, 2307, 2313, 2323, 2325, 2325, 2326, 2326, 2328, + 2346, 2345, 2366, 2366, 2367, 2367, 2367, 2369, 2375, 2385, + 2387, 2387, 2388, 2389, 2390, 2391, 2392, 2393, 2394, 2395, + 2396, 2397, 2398, 2399, 2400, 2401, 2402, 2403, 2404, 2405, + 2406, 2407, 2408, 2409, 2410, 2411, 2412, 2413, 2414, 2415, + 2416, 2417, 2418, 2419, 2420, 2421, 2422, 2423, 2424, 2425, + 2426, 2427, 2428, 2429, 2430, 2431, 2432, 2433, 2434, 2435, + 2438, 2443, 2448, 2453, 2458, 2464, 2469, 2474, 2479, 2484, + 2489, 2494, 2499, 2504, 2509, 2514, 2519, 2524, 2529, 2534, + 2540, 2545, 2550, 2555, 2560, 2565, 2570, 2575, 2578, 2583, + 2586, 2591, 2596, 2601, 2606, 2611, 2616, 2621, 2626, 2631, + 2636, 2641, 2646, 2652, 2651, 2656, 2656, 2657, 2660, 2663, + 2666, 2669, 2672, 2675, 2678, 2681, 2684, 2687, 2690, 2693, + 2696, 2699, 2702, 2705, 2708, 2711, 2714, 2717, 2720, 2726, + 2725, 2730, 2730, 2731, 2734, 2737, 2740, 2743, 2746, 2749, + 2752, 2755, 2758, 2761, 2764, 2767, 2770, 2773, 2776, 2779, + 2782, 2785, 2788, 2793, 2798, 2803, 2808, 2817, 2819, 2819, + 2820, 2821, 2822, 2823, 2824, 2825, 2826, 2827, 2828, 2829, + 2830, 2831, 2832, 2833, 2834, 2836, 2841, 2846, 2851, 2856, + 2861, 2866, 2871, 2876, 2881, 2886, 2891, 2896, 2901, 2910, + 2912, 2912, 2913, 2914, 2915, 2916, 2917, 2918, 2919, 2920, + 2921, 2922, 2924, 2930, 2946, 2955, 2961, 2967, 2973, 2982, + 2988 }; #endif @@ -1112,14 +1097,14 @@ "$end", "error", "$undefined", "ACCEPT_PASSWORD", "ADMIN", "AFTYPE", "ANTI_NICK_FLOOD", "ANTI_SPAM_EXIT_MESSAGE_TIME", "AUTOCONN", "AWAY_COUNT", "AWAY_TIME", "BYTES", "KBYTES", "MBYTES", "CALLER_ID_WAIT", - "CAN_FLOOD", "CHANNEL", "CHECK_CACHE", "CIDR_BITLEN_IPV4", - "CIDR_BITLEN_IPV6", "CLASS", "CLOSE", "CONNECT", "CONNECTFREQ", - "CYCLE_ON_HOST_CHANGE", "DEFAULT_FLOODCOUNT", "DEFAULT_FLOODTIME", - "DEFAULT_JOIN_FLOOD_COUNT", "DEFAULT_JOIN_FLOOD_TIME", - "DEFAULT_MAX_CLIENTS", "DENY", "DESCRIPTION", "DIE", "DISABLE_AUTH", - "DISABLE_FAKE_CHANNELS", "DISABLE_REMOTE_COMMANDS", "DLINE_MIN_CIDR", - "DLINE_MIN_CIDR6", "DOTS_IN_IDENT", "EMAIL", "ENCRYPTED", "EXCEED_LIMIT", - "EXEMPT", "FAILED_OPER_NOTICE", "FLATTEN_LINKS", "FLATTEN_LINKS_DELAY", + "CAN_FLOOD", "CHANNEL", "CIDR_BITLEN_IPV4", "CIDR_BITLEN_IPV6", "CLASS", + "CLOSE", "CONNECT", "CONNECTFREQ", "CYCLE_ON_HOST_CHANGE", + "DEFAULT_FLOODCOUNT", "DEFAULT_FLOODTIME", "DEFAULT_JOIN_FLOOD_COUNT", + "DEFAULT_JOIN_FLOOD_TIME", "DEFAULT_MAX_CLIENTS", "DENY", "DESCRIPTION", + "DIE", "DISABLE_AUTH", "DISABLE_FAKE_CHANNELS", + "DISABLE_REMOTE_COMMANDS", "DLINE_MIN_CIDR", "DLINE_MIN_CIDR6", + "DOTS_IN_IDENT", "EMAIL", "ENCRYPTED", "EXCEED_LIMIT", "EXEMPT", + "FAILED_OPER_NOTICE", "FLATTEN_LINKS", "FLATTEN_LINKS_DELAY", "FLATTEN_LINKS_FILE", "GECOS", "GENERAL", "HIDDEN", "HIDDEN_NAME", "HIDE_CHANS", "HIDE_IDLE", "HIDE_IDLE_FROM_OPERS", "HIDE_SERVER_IPS", "HIDE_SERVERS", "HIDE_SERVICES", "HOST", "HUB", "HUB_MASK", @@ -1128,33 +1113,31 @@ "IRCD_AUTH", "IRCD_FLAGS", "IRCD_SID", "JOIN", "KILL", "KILL_CHASE_TIME_LIMIT", "KLINE", "KLINE_EXEMPT", "KLINE_MIN_CIDR", "KLINE_MIN_CIDR6", "KNOCK_CLIENT_COUNT", "KNOCK_CLIENT_TIME", - "KNOCK_DELAY_CHANNEL", "LEAF_MASK", "LIBGEOIP_DATABASE_OPTIONS", - "LIBGEOIP_IPV4_DATABASE_FILE", "LIBGEOIP_IPV6_DATABASE_FILE", "LISTEN", - "MASK", "MAX_ACCEPT", "MAX_BANS", "MAX_BANS_LARGE", "MAX_CHANNELS", - "MAX_GLOBAL", "MAX_IDLE", "MAX_INVITES", "MAX_LOCAL", "MAX_NICK_CHANGES", - "MAX_NICK_LENGTH", "MAX_NICK_TIME", "MAX_NUMBER", "MAX_TARGETS", - "MAX_TOPIC_LENGTH", "MAX_WATCH", "MEMORY_CACHE", "MIN_IDLE", - "MIN_NONWILDCARD", "MIN_NONWILDCARD_SIMPLE", "MMAP_CACHE", "MODULE", - "MODULES", "MOTD", "NAME", "NEED_IDENT", "NEED_PASSWORD", "NETWORK_DESC", - "NETWORK_NAME", "NICK", "NO_OPER_FLOOD", "NO_TILDE", "NUMBER", - "NUMBER_PER_CIDR", "NUMBER_PER_IP", "OPER_ONLY_UMODES", "OPER_UMODES", - "OPERATOR", "OPERS_BYPASS_CALLERID", "PACE_WAIT", "PACE_WAIT_SIMPLE", - "PASSWORD", "PATH", "PING_COOKIE", "PING_TIME", "PORT", "QSTRING", - "RANDOM_IDLE", "REASON", "REDIRPORT", "REDIRSERV", "REHASH", "REMOTE", - "REMOTEBAN", "RESV", "RESV_EXEMPT", "RSA_PRIVATE_KEY_FILE", "SECONDS", - "MINUTES", "HOURS", "DAYS", "WEEKS", "MONTHS", "YEARS", "SEND_PASSWORD", - "SENDQ", "SERVERHIDE", "SERVERINFO", "SHORT_MOTD", "SPOOF", - "SPOOF_NOTICE", "SQUIT", "SSL_CERTIFICATE_FILE", + "KNOCK_DELAY_CHANNEL", "LEAF_MASK", "LISTEN", "MASK", "MAX_ACCEPT", + "MAX_BANS", "MAX_BANS_LARGE", "MAX_CHANNELS", "MAX_GLOBAL", "MAX_IDLE", + "MAX_INVITES", "MAX_LOCAL", "MAX_NICK_CHANGES", "MAX_NICK_LENGTH", + "MAX_NICK_TIME", "MAX_NUMBER", "MAX_TARGETS", "MAX_TOPIC_LENGTH", + "MAX_WATCH", "MIN_IDLE", "MIN_NONWILDCARD", "MIN_NONWILDCARD_SIMPLE", + "MODULE", "MODULES", "MOTD", "NAME", "NEED_IDENT", "NEED_PASSWORD", + "NETWORK_DESC", "NETWORK_NAME", "NICK", "NO_OPER_FLOOD", "NO_TILDE", + "NUMBER", "NUMBER_PER_CIDR", "NUMBER_PER_IP", "OPER_ONLY_UMODES", + "OPER_UMODES", "OPERATOR", "OPERS_BYPASS_CALLERID", "PACE_WAIT", + "PACE_WAIT_SIMPLE", "PASSWORD", "PATH", "PING_COOKIE", "PING_TIME", + "PORT", "QSTRING", "RANDOM_IDLE", "REASON", "REDIRPORT", "REDIRSERV", + "REHASH", "REMOTE", "REMOTEBAN", "RESV", "RESV_EXEMPT", + "RSA_PRIVATE_KEY_FILE", "SECONDS", "MINUTES", "HOURS", "DAYS", "WEEKS", + "MONTHS", "YEARS", "SEND_PASSWORD", "SENDQ", "SERVERHIDE", "SERVERINFO", + "SHORT_MOTD", "SPOOF", "SPOOF_NOTICE", "SQUIT", "SSL_CERTIFICATE_FILE", "SSL_CERTIFICATE_FINGERPRINT", "SSL_CONNECTION_REQUIRED", "SSL_DH_ELLIPTIC_CURVE", "SSL_DH_PARAM_FILE", - "SSL_MESSAGE_DIGEST_ALGORITHM", "STANDARD", "STATS_E_DISABLED", - "STATS_I_OPER_ONLY", "STATS_K_OPER_ONLY", "STATS_M_OPER_ONLY", - "STATS_O_OPER_ONLY", "STATS_P_OPER_ONLY", "STATS_U_OPER_ONLY", "T_ALL", - "T_BOTS", "T_CALLERID", "T_CCONN", "T_COMMAND", "T_CLUSTER", "T_DEAF", - "T_DEBUG", "T_DLINE", "T_EXTERNAL", "T_FARCONNECT", "T_FILE", "T_FULL", - "T_GLOBOPS", "T_INVISIBLE", "T_IPV4", "T_IPV6", "T_LOCOPS", "T_LOG", - "T_NCHANGE", "T_NONONREG", "T_OPME", "T_PREPEND", "T_PSEUDO", "T_RECVQ", - "T_REJ", "T_RESTART", "T_SERVER", "T_SERVICE", "T_SERVNOTICE", "T_SET", + "SSL_MESSAGE_DIGEST_ALGORITHM", "STATS_E_DISABLED", "STATS_I_OPER_ONLY", + "STATS_K_OPER_ONLY", "STATS_M_OPER_ONLY", "STATS_O_OPER_ONLY", + "STATS_P_OPER_ONLY", "STATS_U_OPER_ONLY", "T_ALL", "T_BOTS", + "T_CALLERID", "T_CCONN", "T_COMMAND", "T_CLUSTER", "T_DEAF", "T_DEBUG", + "T_DLINE", "T_EXTERNAL", "T_FARCONNECT", "T_FILE", "T_FULL", "T_GLOBOPS", + "T_INVISIBLE", "T_IPV4", "T_IPV6", "T_LOCOPS", "T_LOG", "T_NCHANGE", + "T_NONONREG", "T_OPME", "T_PREPEND", "T_PSEUDO", "T_RECVQ", "T_REJ", + "T_RESTART", "T_SERVER", "T_SERVICE", "T_SERVNOTICE", "T_SET", "T_SHARED", "T_SIZE", "T_SKILL", "T_SOFTCALLERID", "T_SPY", "T_SSL", "T_SSL_CIPHER_LIST", "T_TARGET", "T_UMODES", "T_UNAUTH", "T_UNDLINE", "T_UNLIMITED", "T_UNRESV", "T_UNXLINE", "T_WALLOP", "T_WALLOPS", @@ -1169,57 +1152,54 @@ "serverinfo_item", "serverinfo_ssl_certificate_file", "serverinfo_rsa_private_key_file", "serverinfo_ssl_dh_param_file", "serverinfo_ssl_cipher_list", "serverinfo_ssl_message_digest_algorithm", - "serverinfo_ssl_dh_elliptic_curve", - "serverinfo_libgeoip_database_options", "$@1", "options_items", - "options_item", "serverinfo_libgeoip_ipv4_database_file", - "serverinfo_libgeoip_ipv6_database_file", "serverinfo_name", - "serverinfo_sid", "serverinfo_description", "serverinfo_network_name", + "serverinfo_ssl_dh_elliptic_curve", "serverinfo_name", "serverinfo_sid", + "serverinfo_description", "serverinfo_network_name", "serverinfo_network_desc", "serverinfo_vhost", "serverinfo_vhost6", "serverinfo_default_max_clients", "serverinfo_max_nick_length", "serverinfo_max_topic_length", "serverinfo_hub", "admin_entry", "admin_items", "admin_item", "admin_name", "admin_email", - "admin_description", "motd_entry", "$@2", "motd_items", "motd_item", - "motd_mask", "motd_file", "pseudo_entry", "$@3", "pseudo_items", + "admin_description", "motd_entry", "$@1", "motd_items", "motd_item", + "motd_mask", "motd_file", "pseudo_entry", "$@2", "pseudo_items", "pseudo_item", "pseudo_command", "pseudo_name", "pseudo_prepend", "pseudo_target", "logging_entry", "logging_items", "logging_item", - "logging_use_logging", "logging_file_entry", "$@4", "logging_file_items", + "logging_use_logging", "logging_file_entry", "$@3", "logging_file_items", "logging_file_item", "logging_file_name", "logging_file_size", - "logging_file_type", "$@5", "logging_file_type_items", - "logging_file_type_item", "oper_entry", "$@6", "oper_items", "oper_item", + "logging_file_type", "$@4", "logging_file_type_items", + "logging_file_type_item", "oper_entry", "$@5", "oper_items", "oper_item", "oper_name", "oper_user", "oper_password", "oper_whois", "oper_encrypted", "oper_ssl_certificate_fingerprint", - "oper_ssl_connection_required", "oper_class", "oper_umodes", "$@7", - "oper_umodes_items", "oper_umodes_item", "oper_flags", "$@8", - "oper_flags_items", "oper_flags_item", "class_entry", "$@9", + "oper_ssl_connection_required", "oper_class", "oper_umodes", "$@6", + "oper_umodes_items", "oper_umodes_item", "oper_flags", "$@7", + "oper_flags_items", "oper_flags_item", "class_entry", "$@8", "class_items", "class_item", "class_name", "class_ping_time", "class_number_per_ip", "class_connectfreq", "class_max_channels", "class_max_number", "class_max_global", "class_max_local", "class_sendq", "class_recvq", "class_cidr_bitlen_ipv4", "class_cidr_bitlen_ipv6", "class_number_per_cidr", "class_min_idle", "class_max_idle", - "class_flags", "$@10", "class_flags_items", "class_flags_item", - "listen_entry", "$@11", "listen_flags", "$@12", "listen_flags_items", + "class_flags", "$@9", "class_flags_items", "class_flags_item", + "listen_entry", "$@10", "listen_flags", "$@11", "listen_flags_items", "listen_flags_item", "listen_items", "listen_item", "listen_port", - "$@13", "port_items", "port_item", "listen_address", "listen_host", - "auth_entry", "$@14", "auth_items", "auth_item", "auth_user", - "auth_passwd", "auth_class", "auth_encrypted", "auth_flags", "$@15", + "$@12", "port_items", "port_item", "listen_address", "listen_host", + "auth_entry", "$@13", "auth_items", "auth_item", "auth_user", + "auth_passwd", "auth_class", "auth_encrypted", "auth_flags", "$@14", "auth_flags_items", "auth_flags_item", "auth_spoof", "auth_redir_serv", - "auth_redir_port", "resv_entry", "$@16", "resv_items", "resv_item", + "auth_redir_port", "resv_entry", "$@15", "resv_items", "resv_item", "resv_mask", "resv_reason", "resv_exempt", "service_entry", - "service_items", "service_item", "service_name", "shared_entry", "$@17", + "service_items", "service_item", "service_name", "shared_entry", "$@16", "shared_items", "shared_item", "shared_name", "shared_user", - "shared_type", "$@18", "shared_types", "shared_type_item", - "cluster_entry", "$@19", "cluster_items", "cluster_item", "cluster_name", - "cluster_type", "$@20", "cluster_types", "cluster_type_item", - "connect_entry", "$@21", "connect_items", "connect_item", "connect_name", + "shared_type", "$@17", "shared_types", "shared_type_item", + "cluster_entry", "$@18", "cluster_items", "cluster_item", "cluster_name", + "cluster_type", "$@19", "cluster_types", "cluster_type_item", + "connect_entry", "$@20", "connect_items", "connect_item", "connect_name", "connect_host", "connect_vhost", "connect_send_password", "connect_accept_password", "connect_ssl_certificate_fingerprint", - "connect_port", "connect_aftype", "connect_flags", "$@22", + "connect_port", "connect_aftype", "connect_flags", "$@21", "connect_flags_items", "connect_flags_item", "connect_encrypted", "connect_hub_mask", "connect_leaf_mask", "connect_class", - "connect_ssl_cipher_list", "kill_entry", "$@23", "kill_items", - "kill_item", "kill_user", "kill_reason", "deny_entry", "$@24", + "connect_ssl_cipher_list", "kill_entry", "$@22", "kill_items", + "kill_item", "kill_user", "kill_reason", "deny_entry", "$@23", "deny_items", "deny_item", "deny_ip", "deny_reason", "exempt_entry", - "exempt_items", "exempt_item", "exempt_ip", "gecos_entry", "$@25", + "exempt_items", "exempt_item", "exempt_ip", "gecos_entry", "$@24", "gecos_items", "gecos_item", "gecos_name", "gecos_reason", "general_entry", "general_items", "general_item", "general_away_count", "general_away_time", "general_max_watch", @@ -1241,8 +1221,8 @@ "general_short_motd", "general_no_oper_flood", "general_dots_in_ident", "general_max_targets", "general_ping_cookie", "general_disable_auth", "general_throttle_count", "general_throttle_time", "general_oper_umodes", - "$@26", "umode_oitems", "umode_oitem", "general_oper_only_umodes", - "$@27", "umode_items", "umode_item", "general_min_nonwildcard", + "$@25", "umode_oitems", "umode_oitem", "general_oper_only_umodes", + "$@26", "umode_items", "umode_item", "general_min_nonwildcard", "general_min_nonwildcard_simple", "general_default_floodcount", "general_default_floodtime", "channel_entry", "channel_items", "channel_item", "channel_disable_fake_channels", @@ -1289,17 +1269,16 @@ 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, - 485, 486, 487, 488, 489, 490, 491, 492, 59, 125, - 123, 61, 44, 58 + 485, 59, 125, 123, 61, 44, 58 }; # endif -#define YYPACT_NINF -775 +#define YYPACT_NINF -749 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-775))) + (!!((Yystate) == (-749))) -#define YYTABLE_NINF -143 +#define YYTABLE_NINF -130 #define yytable_value_is_error(Yytable_value) \ 0 @@ -1308,141 +1287,139 @@ STATE-NUM. */ static const yytype_int16 yypact[] = { - -775, 761, -775, -183, -211, -203, -775, -775, -775, -198, - -775, -195, -775, -775, -775, -193, -775, -775, -775, -144, - -131, -775, -122, -775, -121, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, 82, 973, -115, -108, -107, 48, -102, 438, -101, - -82, -76, 42, -62, -29, -6, 378, 625, 45, 14, - 55, 22, 57, -55, -38, 6, 46, 7, -775, -775, - -775, -775, -775, 58, 62, 68, 69, 83, 90, 93, - 103, 105, 113, 117, 125, 126, 130, 273, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, 600, 520, 32, -775, 134, 24, -775, - -775, 26, -775, 135, 136, 137, 140, 141, 142, 143, - 144, 148, 150, 152, 154, 157, 165, 166, 170, 173, - 174, 178, 179, 180, 185, 188, 189, 194, 197, -775, - -775, 199, 200, 201, 202, 209, 219, 224, 225, 229, - 237, 239, 242, 246, 247, 248, 249, 251, 252, 254, - 51, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, 368, - 47, 416, -3, 256, 259, 40, -775, -775, -775, 10, - 411, 49, -775, 260, 263, 264, 265, 266, 267, 268, - 270, 275, 18, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, 50, 276, 277, 285, 287, -775, 290, - 294, 298, 302, 303, 304, 307, 308, 309, 310, 311, - 313, 314, 315, 316, 155, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, 15, 87, 326, 16, - -775, -775, -775, 175, 19, -775, 327, 43, -775, -775, - 84, -775, 341, 398, 440, 158, -775, 455, 456, 355, - 459, 456, 456, 456, 461, 456, 456, 463, 464, 465, - 466, 346, -775, 347, 345, 348, 349, -775, 351, 353, - 354, 356, 369, 370, 374, 376, 379, 381, 383, 384, - 230, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, 358, 386, - 387, 389, 391, 392, 393, -775, 394, 395, 396, 397, - 399, 401, 402, 288, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - 403, 405, 20, -775, -775, -775, 516, 413, -775, -775, - 412, 414, 27, -775, -775, -775, 433, 456, 470, 456, - 456, 442, 547, 456, 446, 549, 550, 553, 457, 458, - 467, 456, 563, 567, 568, 570, 456, 575, 578, 581, - 583, 482, 462, 469, 485, 456, 456, 486, 492, 493, - -189, -184, 494, 495, 496, 497, 604, 456, 498, 456, - 456, 506, 609, 501, -775, 503, 489, 491, -775, 502, - 504, 505, 507, 508, 238, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, 511, 512, 30, -775, -775, - -775, 509, 513, 515, -775, 518, -775, 12, -775, -775, - -775, -775, -775, 602, 605, 525, -775, 526, 527, 531, - 23, -775, -775, -775, 535, 533, 534, -775, 537, 539, - 551, 552, -775, 555, 556, 31, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, 538, 557, 558, - 559, 17, -775, -775, -775, -775, 523, 565, 456, 657, - 571, 663, 582, 585, 586, 564, -775, -775, 689, 676, - 591, 680, 572, 681, 683, 699, 702, 691, 692, 693, - 694, 695, 696, 700, 703, 704, 705, 706, 592, -775, - 601, 579, -775, 116, -775, -775, -775, -775, 621, 603, - -775, 606, 610, 608, 611, 612, 613, 13, -775, -775, - -775, -775, -775, 711, 620, -775, 622, 618, -775, 626, - 53, -775, -775, -775, -775, 623, 628, 632, -775, 633, - 257, 634, 635, 636, 637, 638, 639, 641, 642, 643, - 644, 646, 647, 649, -775, -775, 726, 727, 456, 648, - 730, 733, 456, 734, 746, 456, 757, 776, 777, 456, - 780, 780, 664, -775, -775, 773, -105, 774, 688, 779, - 784, 670, 785, 786, 802, 789, 790, 794, 795, 690, - -775, 796, 799, 697, -775, 698, -775, 800, 801, 707, - -775, 710, 714, 715, 720, 721, 723, 729, 731, 735, - 737, 738, 743, 747, 750, 752, 754, 755, 760, 765, - 767, 770, 771, 775, 778, 781, 782, 806, 718, 783, - 787, 788, 791, 792, 793, 803, 804, 805, 807, 808, - 809, 810, 811, 815, 816, 817, 818, 819, 820, 821, - -775, -775, 833, 722, 701, 834, 851, 864, 868, 873, - 825, -775, 883, 884, 826, -775, -775, 887, 892, 798, - 907, 828, -775, 829, 830, -775, -775, 896, 897, 831, - -775, -775, 901, 814, 832, 903, 909, 913, 852, 835, - 939, 941, 836, -775, -775, 944, 946, 947, 841, -775, - 842, 843, 844, 845, 846, 847, 848, 849, 850, -775, - 853, 854, 855, 856, 5, 857, 858, 859, 860, 861, - 862, 863, 865, 866, 867, 869, 870, 871, 872, 874, - -775, -775, 958, 875, 876, -775, 877, -775, 78, -775, - 959, 971, 975, 980, 879, -775, 880, -775, -775, 982, - 878, 989, 885, -775, -775, -775, -775, -775, 456, 456, - 456, 456, 456, 456, 456, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - 886, 888, 889, -27, 890, 891, 893, 894, 895, 898, - 899, 900, 902, 904, 196, 905, 906, -775, 908, 910, - 911, 912, 914, 915, 916, -5, 917, 918, 919, 920, - 921, 922, 923, -775, 924, 925, -775, -775, 926, 927, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -202, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -172, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, 928, 929, 375, 930, 931, 932, - 933, 934, -775, 935, 936, -775, 937, 938, -37, 951, - 940, -775, -775, -775, -775, 942, 943, -775, 945, 948, - 543, 949, 950, 952, 953, 766, 954, 955, -775, 956, - 957, 960, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -145, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, 961, 460, -775, - -775, 962, 881, 963, -775, 91, -775, -775, -775, -775, - 964, 965, 967, 968, -775, -775, 969, 650, 970, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -65, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, 780, 780, 780, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -57, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, 806, -775, 718, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -43, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -41, -775, 1004, 907, 972, -775, -775, - -775, -775, -775, -775, 882, -775, 966, 974, -775, -775, - 976, 977, -775, -775, 978, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -28, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -15, -775, -775, -775, -775, - -775, -775, -775, 5, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -12, -775, -775, 999, -113, - 981, 985, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -9, -775, - -775, -775, -27, -775, -775, -775, -775, -5, -775, -775, - -775, 375, -775, -37, -775, -775, -775, 997, 996, 1002, - 1006, 1010, 1014, -775, 543, -775, 766, -775, -775, 460, - 986, 987, 988, 231, -775, -775, 650, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, 2, -775, -775, -775, 231, -775 + -749, 715, -749, -202, -215, -195, -749, -749, -749, -189, + -749, -181, -749, -749, -749, -179, -749, -749, -749, -161, + -149, -749, -146, -749, -73, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, 23, 891, -70, -64, -63, 11, -53, 387, -50, + -38, -37, 107, -32, -20, -9, 937, 551, 40, 19, + 45, 22, 48, 9, -1, 26, 32, 2, -749, -749, + -749, -749, -749, 71, 77, 88, 93, 95, 102, 108, + 115, 116, 122, 123, 124, 128, 129, 276, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, 661, 570, 41, -749, 132, 14, -749, + -749, 15, -749, 133, 137, 138, 139, 140, 141, 148, + 150, 155, 157, 158, 161, 165, 166, 168, 169, 171, + 174, 179, 180, 181, 186, 187, 191, 192, 193, -749, + -749, 196, 198, 199, 203, 205, 206, 215, 216, 217, + 220, 222, 229, 231, 232, 233, 234, 237, 239, 240, + 57, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, 316, + 38, 314, 159, 241, 242, 13, -749, -749, -749, 156, + 367, 54, -749, 244, 248, 250, 254, 256, 257, 263, + 264, 265, 144, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, 224, 269, 273, 280, 283, 284, 292, + 293, 294, 298, 299, 301, 302, 304, 307, 309, 317, + 319, 55, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + 74, 228, 321, 27, -749, -749, -749, 120, 183, -749, + 322, 18, -749, -749, 7, -749, 385, 396, 417, 326, + -749, 306, 447, 78, 448, 447, 447, 447, 451, 447, + 447, 454, 457, 461, 463, 345, -749, 346, 344, 348, + 349, -749, 350, 351, 352, 353, 358, 361, 363, 364, + 369, 372, 373, 376, 221, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, 362, 377, 378, 380, 382, 383, 384, -749, + 386, 388, 391, 393, 395, 398, 399, 30, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, 400, 401, 25, -749, -749, -749, + 505, 405, -749, -749, 404, 406, 21, -749, -749, -749, + 427, 447, 532, 447, 447, 432, 534, 447, 435, 537, + 540, 541, 441, 443, 444, 447, 548, 549, 550, 553, + 447, 554, 555, 556, 558, 458, 437, 446, 465, 447, + 447, 470, 472, 483, -191, -171, 485, 488, 492, 496, + 564, 447, 497, 447, 447, 498, 592, 480, -749, 486, + 484, 487, -749, 489, 490, 493, 495, 499, 184, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, 501, + 503, 59, -749, -749, -749, 494, 504, 507, -749, 511, + -749, 3, -749, -749, -749, -749, -749, 589, 601, 508, + -749, 518, 517, 519, 33, -749, -749, -749, 524, 523, + 525, -749, 526, 529, 531, 533, -749, 535, 536, 225, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, 546, 538, 544, 545, 10, -749, -749, -749, -749, + 520, 568, 447, 605, 571, 641, 575, 578, 586, 572, + -749, -749, 657, 676, 594, 683, 671, 701, 688, 689, + 693, 695, 696, 697, 702, 703, 704, 707, 708, 595, + -749, 603, 609, -749, 64, -749, -749, -749, -749, 632, + 614, -749, 185, 615, 613, 616, 617, 618, 61, -749, + -749, -749, -749, -749, 728, 623, -749, 624, 622, -749, + 630, 35, -749, -749, -749, -749, 636, 638, 640, -749, + 643, 700, 646, 647, 648, 649, 651, 652, 655, 656, + 662, 663, 664, 667, 668, -749, -749, 761, 777, 447, + 666, 795, 802, 447, 804, 809, 447, 798, 814, 815, + 447, 817, 817, 698, -749, -749, 805, 89, 807, 721, + 816, 818, 705, 819, 820, 823, 821, 824, 825, 826, + 709, -749, 831, 832, 717, -749, 727, -749, 834, 835, + 730, -749, 731, 732, 733, 734, 735, 739, 741, 742, + 746, 747, 752, 753, 756, 757, 758, 762, 763, 764, + 765, 766, 767, 768, 769, 770, 771, 772, 626, 692, + 773, 774, 775, 776, 778, 779, 780, 781, 782, 783, + 784, 785, 786, 787, 788, 789, 790, 791, 792, 793, + 794, -749, -749, 883, 822, 796, 901, 916, 903, 904, + 906, 801, -749, 908, 910, 806, -749, -749, 911, 913, + 808, 928, 810, -749, 812, 813, -749, -749, 915, 920, + 827, -749, -749, 921, 836, 828, 922, 924, 925, 839, + 829, 927, 929, 830, -749, -749, 930, 931, 932, 833, + -749, 837, 838, 840, 841, 842, 843, 844, 845, 846, + -749, 847, 848, 849, 850, 851, 852, 853, 854, 855, + 856, 857, 858, 859, 860, 861, 862, 863, -749, -749, + 934, 864, 865, -749, 866, -749, 56, -749, 935, 940, + 941, 942, 868, -749, 869, -749, -749, 945, 867, 970, + 871, -749, -749, -749, -749, -749, 447, 447, 447, 447, + 447, 447, 447, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, 872, 873, + 874, -15, 875, 876, 877, 878, 879, 880, 881, 882, + 884, 885, 287, 886, 887, -749, 888, 889, 890, 892, + 893, 894, 895, 5, 896, 897, 898, 899, 900, 902, + 905, -749, 907, 909, -749, -749, 912, 914, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -188, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -185, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, 917, 918, 420, 919, 923, 926, 933, 936, + -749, 938, 939, -749, 943, 944, 0, 946, 947, -749, + -749, -749, -749, 948, 949, -749, 950, 952, 491, 953, + 954, 955, 956, 738, 957, 958, -749, 959, 960, 961, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, 962, 308, -749, + -749, 963, 964, 965, -749, 16, -749, -749, -749, -749, + 966, 969, 971, 972, -749, -749, 973, 359, 974, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -158, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, 817, 817, 817, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -157, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, 626, -749, 692, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -135, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -133, -749, 1003, 928, 975, -749, -749, + -749, -749, -749, -749, 976, -749, 977, 978, -749, -749, + 979, 980, -749, -749, 981, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -95, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -10, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, 66, -749, -749, 997, -84, 967, 987, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, 85, -749, -749, -749, + -15, -749, -749, -749, -749, 5, -749, -749, -749, 420, + -749, 0, -749, -749, -749, 1001, 1002, 1006, 1008, 1011, + 1013, -749, 491, -749, 738, -749, 308, 988, 989, 990, + 271, -749, -749, 359, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, 90, -749, + -749, -749, 271, -749 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1450,213 +1427,209 @@ means the default is an error. */ static const yytype_uint16 yydefact[] = { - 2, 0, 1, 0, 0, 0, 247, 410, 458, 0, - 473, 0, 313, 449, 289, 0, 113, 165, 347, 0, - 0, 388, 0, 122, 0, 364, 3, 23, 11, 4, + 2, 0, 1, 0, 0, 0, 234, 397, 445, 0, + 460, 0, 300, 436, 276, 0, 100, 152, 334, 0, + 0, 375, 0, 109, 0, 351, 3, 23, 11, 4, 24, 25, 5, 6, 8, 9, 10, 13, 14, 15, 16, 17, 18, 19, 20, 22, 21, 7, 12, 26, 27, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 105, 106, - 108, 107, 647, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 632, 646, - 635, 636, 637, 638, 639, 640, 641, 642, 643, 633, - 634, 644, 645, 0, 0, 0, 471, 0, 0, 469, - 470, 0, 532, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 92, 93, + 95, 94, 634, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 619, 633, + 622, 623, 624, 625, 626, 627, 628, 629, 630, 620, + 621, 631, 632, 0, 0, 0, 458, 0, 0, 456, + 457, 0, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 602, - 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 589, + 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 484, 485, 486, 530, 493, 531, 525, 526, 527, - 528, 524, 497, 487, 488, 489, 490, 491, 492, 494, - 495, 496, 498, 499, 529, 503, 504, 505, 506, 502, - 501, 507, 514, 515, 508, 509, 510, 500, 512, 522, - 523, 520, 521, 513, 511, 518, 519, 516, 517, 0, + 0, 471, 472, 473, 517, 480, 518, 512, 513, 514, + 515, 511, 484, 474, 475, 476, 477, 478, 479, 481, + 482, 483, 485, 486, 516, 490, 491, 492, 493, 489, + 488, 494, 501, 502, 495, 496, 497, 487, 499, 509, + 510, 507, 508, 500, 498, 505, 506, 503, 504, 0, 0, 0, 0, 0, 0, 0, 46, 47, 48, 0, - 0, 0, 674, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 664, 665, 666, 667, 668, 669, 670, - 672, 671, 673, 0, 0, 0, 0, 0, 82, 0, + 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 651, 652, 653, 654, 655, 656, 657, + 659, 658, 660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 54, 69, 66, 64, 70, - 71, 65, 72, 73, 74, 55, 68, 58, 59, 60, - 56, 67, 61, 62, 63, 57, 0, 0, 0, 0, - 137, 138, 139, 0, 0, 362, 0, 0, 360, 361, - 0, 109, 0, 0, 0, 0, 104, 0, 0, 0, + 0, 0, 54, 69, 66, 64, 70, 71, 65, 55, + 68, 58, 59, 60, 56, 67, 61, 62, 63, 57, + 0, 0, 0, 0, 124, 125, 126, 0, 0, 349, + 0, 0, 347, 348, 0, 96, 0, 0, 0, 0, + 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 618, 0, 0, 0, + 0, 270, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 237, 238, 241, 243, 244, + 245, 246, 247, 248, 249, 250, 239, 240, 242, 251, + 252, 253, 0, 0, 0, 0, 0, 0, 0, 425, + 0, 0, 0, 0, 0, 0, 0, 0, 400, 401, + 402, 403, 404, 405, 406, 408, 407, 410, 414, 411, + 412, 413, 409, 451, 0, 0, 0, 448, 449, 450, + 0, 0, 455, 466, 0, 0, 0, 463, 464, 465, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 631, 0, 0, 0, 0, 283, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 250, 251, 254, 256, 257, 258, 259, 260, 261, - 262, 263, 252, 253, 255, 264, 265, 266, 0, 0, - 0, 0, 0, 0, 0, 438, 0, 0, 0, 0, - 0, 0, 0, 0, 413, 414, 415, 416, 417, 418, - 419, 421, 420, 423, 427, 424, 425, 426, 422, 464, - 0, 0, 0, 461, 462, 463, 0, 0, 468, 479, - 0, 0, 0, 476, 477, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, + 0, 0, 317, 0, 0, 0, 0, 0, 0, 303, + 304, 305, 306, 311, 307, 308, 309, 310, 442, 0, + 0, 0, 439, 440, 441, 0, 0, 0, 278, 0, + 288, 0, 286, 287, 289, 290, 49, 0, 0, 0, + 45, 0, 0, 0, 0, 103, 104, 105, 0, 0, + 0, 201, 0, 0, 0, 0, 175, 0, 0, 0, + 155, 156, 157, 158, 159, 162, 163, 164, 161, 160, + 165, 0, 0, 0, 0, 0, 337, 338, 339, 340, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 650, 72, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 483, 0, 0, 0, 330, 0, - 0, 0, 0, 0, 0, 316, 317, 318, 319, 324, - 320, 321, 322, 323, 455, 0, 0, 0, 452, 453, - 454, 0, 0, 0, 291, 0, 301, 0, 299, 300, - 302, 303, 49, 0, 0, 0, 45, 0, 0, 0, - 0, 116, 117, 118, 0, 0, 0, 214, 0, 0, - 0, 0, 188, 0, 0, 0, 168, 169, 170, 171, - 172, 175, 176, 177, 174, 173, 178, 0, 0, 0, - 0, 0, 350, 351, 352, 353, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 663, 75, 0, 0, + 53, 0, 0, 383, 0, 378, 379, 380, 127, 0, + 0, 123, 0, 0, 0, 0, 0, 0, 0, 112, + 113, 115, 114, 116, 0, 0, 346, 0, 0, 361, + 0, 0, 354, 355, 356, 357, 0, 0, 0, 90, + 0, 28, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 617, 254, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 53, - 0, 0, 396, 0, 391, 392, 393, 140, 0, 0, - 136, 0, 0, 0, 0, 0, 0, 0, 125, 126, - 128, 127, 129, 0, 0, 359, 0, 0, 374, 0, - 0, 367, 368, 369, 370, 0, 0, 0, 103, 0, - 28, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 630, 267, 0, 0, 0, 0, + 0, 0, 0, 0, 236, 415, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 249, 428, 0, 0, 0, 0, 0, + 0, 399, 0, 0, 0, 447, 0, 454, 0, 0, + 0, 462, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 412, 0, 0, 0, 460, 0, 467, 0, 0, 0, - 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 469, 312, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 302, 0, 0, 0, 438, 291, 0, 0, + 0, 0, 0, 285, 0, 0, 44, 106, 0, 0, + 0, 102, 166, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 154, 341, 0, 0, 0, 0, + 336, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 649, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 52, 381, + 0, 0, 0, 377, 0, 122, 0, 117, 0, 0, + 0, 0, 0, 111, 0, 345, 358, 0, 0, 0, + 0, 353, 99, 98, 97, 647, 28, 28, 28, 28, + 28, 28, 28, 30, 29, 648, 635, 636, 637, 638, + 639, 640, 641, 642, 645, 646, 643, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 482, 325, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 315, 0, 0, 0, 451, 304, 0, 0, 0, - 0, 0, 298, 0, 0, 44, 119, 0, 0, 0, - 115, 179, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 167, 354, 0, 0, 0, 0, 349, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 662, + 0, 0, 38, 0, 0, 235, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 52, 394, 0, 0, 0, 390, 0, 135, 0, 130, - 0, 0, 0, 0, 0, 124, 0, 358, 371, 0, - 0, 0, 0, 366, 112, 111, 110, 660, 28, 28, - 28, 28, 28, 28, 28, 30, 29, 661, 648, 649, - 650, 651, 652, 653, 654, 655, 658, 659, 656, 657, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 38, 0, 0, 248, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 411, 0, 0, 459, 472, 0, 0, - 474, 546, 550, 533, 534, 565, 537, 628, 629, 573, - 538, 539, 570, 545, 544, 553, 543, 540, 541, 549, - 548, 547, 571, 535, 626, 627, 569, 612, 606, 622, - 607, 608, 609, 617, 625, 610, 619, 623, 613, 624, - 614, 618, 611, 621, 616, 615, 620, 0, 605, 585, - 586, 587, 580, 598, 581, 582, 583, 593, 601, 584, - 595, 599, 589, 600, 590, 594, 588, 597, 592, 591, - 596, 0, 579, 566, 564, 567, 572, 568, 555, 562, - 563, 560, 561, 556, 557, 558, 559, 574, 575, 542, - 552, 551, 554, 536, 0, 0, 0, 0, 0, 0, - 0, 0, 314, 0, 0, 450, 0, 0, 0, 309, - 305, 308, 290, 50, 51, 0, 0, 114, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 166, 0, - 0, 0, 348, 678, 675, 676, 677, 682, 681, 683, - 679, 680, 99, 94, 102, 93, 89, 87, 88, 86, - 0, 85, 90, 91, 100, 101, 92, 96, 95, 77, - 76, 81, 78, 80, 79, 97, 98, 0, 0, 389, - 141, 0, 0, 0, 153, 0, 145, 146, 148, 147, - 0, 0, 0, 0, 123, 363, 0, 0, 0, 365, - 31, 32, 33, 34, 35, 36, 37, 278, 279, 271, - 288, 287, 0, 286, 272, 274, 282, 275, 273, 281, - 268, 280, 270, 269, 38, 38, 38, 40, 39, 276, - 277, 433, 436, 437, 447, 444, 430, 445, 442, 443, - 0, 441, 446, 429, 435, 432, 434, 448, 431, 465, - 466, 480, 481, 603, 0, 577, 0, 328, 329, 339, - 335, 336, 338, 343, 340, 341, 334, 342, 337, 0, - 333, 327, 346, 345, 344, 326, 457, 456, 312, 311, - 296, 297, 295, 0, 294, 0, 0, 0, 120, 121, - 187, 184, 234, 246, 221, 230, 0, 219, 224, 240, - 0, 233, 238, 244, 223, 226, 235, 237, 241, 231, - 239, 227, 245, 229, 236, 225, 228, 0, 217, 180, - 182, 185, 186, 197, 198, 199, 192, 210, 193, 194, - 195, 205, 213, 196, 207, 211, 201, 212, 202, 206, - 200, 209, 204, 203, 208, 0, 191, 181, 183, 357, - 355, 356, 83, 0, 395, 400, 406, 409, 402, 408, - 403, 407, 405, 401, 404, 0, 399, 149, 0, 0, - 0, 0, 144, 132, 131, 133, 134, 372, 378, 384, - 387, 380, 386, 381, 385, 383, 379, 382, 0, 377, - 373, 284, 0, 41, 42, 43, 439, 0, 604, 578, - 331, 0, 292, 0, 310, 307, 306, 0, 0, 0, - 0, 0, 0, 215, 0, 189, 0, 84, 397, 0, - 0, 0, 0, 0, 143, 375, 0, 285, 440, 332, - 293, 220, 243, 218, 242, 232, 222, 216, 190, 398, - 150, 152, 151, 163, 162, 158, 160, 164, 161, 157, - 159, 0, 156, 376, 154, 0, 155 + 0, 398, 0, 0, 446, 459, 0, 0, 461, 533, + 537, 520, 521, 552, 524, 615, 616, 560, 525, 526, + 557, 532, 531, 540, 530, 527, 528, 536, 535, 534, + 558, 522, 613, 614, 556, 599, 593, 609, 594, 595, + 596, 604, 612, 597, 606, 610, 600, 611, 601, 605, + 598, 608, 603, 602, 607, 0, 592, 572, 573, 574, + 567, 585, 568, 569, 570, 580, 588, 571, 582, 586, + 576, 587, 577, 581, 575, 584, 579, 578, 583, 0, + 566, 553, 551, 554, 559, 555, 542, 549, 550, 547, + 548, 543, 544, 545, 546, 561, 562, 529, 539, 538, + 541, 523, 0, 0, 0, 0, 0, 0, 0, 0, + 301, 0, 0, 437, 0, 0, 0, 296, 292, 295, + 277, 50, 51, 0, 0, 101, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 153, 0, 0, 0, + 335, 665, 662, 663, 664, 669, 668, 670, 666, 667, + 86, 81, 89, 80, 87, 88, 79, 83, 82, 74, + 73, 78, 75, 77, 76, 84, 85, 0, 0, 376, + 128, 0, 0, 0, 140, 0, 132, 133, 135, 134, + 0, 0, 0, 0, 110, 350, 0, 0, 0, 352, + 31, 32, 33, 34, 35, 36, 37, 265, 266, 258, + 275, 274, 0, 273, 259, 261, 269, 262, 260, 268, + 255, 267, 257, 256, 38, 38, 38, 40, 39, 263, + 264, 420, 423, 424, 434, 431, 417, 432, 429, 430, + 0, 428, 433, 416, 422, 419, 421, 435, 418, 452, + 453, 467, 468, 590, 0, 564, 0, 315, 316, 326, + 322, 323, 325, 330, 327, 328, 321, 329, 324, 0, + 320, 314, 333, 332, 331, 313, 444, 443, 299, 298, + 283, 284, 282, 0, 281, 0, 0, 0, 107, 108, + 174, 171, 221, 233, 208, 217, 0, 206, 211, 227, + 0, 220, 225, 231, 210, 213, 222, 224, 228, 218, + 226, 214, 232, 216, 223, 212, 215, 0, 204, 167, + 169, 172, 173, 184, 185, 186, 179, 197, 180, 181, + 182, 192, 200, 183, 194, 198, 188, 199, 189, 193, + 187, 196, 191, 190, 195, 0, 178, 168, 170, 344, + 342, 343, 382, 387, 393, 396, 389, 395, 390, 394, + 392, 388, 391, 0, 386, 136, 0, 0, 0, 0, + 131, 119, 118, 120, 121, 359, 365, 371, 374, 367, + 373, 368, 372, 370, 366, 369, 0, 364, 360, 271, + 0, 41, 42, 43, 426, 0, 591, 565, 318, 0, + 279, 0, 297, 294, 293, 0, 0, 0, 0, 0, + 0, 202, 0, 176, 0, 384, 0, 0, 0, 0, + 0, 130, 362, 0, 272, 427, 319, 280, 207, 230, + 205, 229, 219, 209, 203, 177, 385, 137, 139, 138, + 150, 149, 145, 147, 151, 148, 144, 146, 0, 143, + 363, 141, 0, 142 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -775, -775, -775, -385, -316, -774, -650, -775, -775, 708, - -775, -775, -775, -775, 979, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -64, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - 1064, -775, -775, -775, -775, -775, -775, 668, -775, -775, - -775, -775, -775, 587, -775, -775, -775, -775, -775, -775, - 983, -775, -775, -775, -775, 110, -775, -775, -775, -775, - -775, -156, -775, -775, -775, 671, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -109, -775, -775, - -775, -103, -775, -775, -775, 984, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -71, -775, -775, -775, -775, -775, - -81, -775, 716, -775, -775, -775, 38, -775, -775, -775, - -775, -775, 741, -775, -775, -775, -775, -775, -775, -775, - -75, -775, -775, -775, -775, -775, -775, 677, -775, -775, - -775, -775, -775, 990, -775, -775, -775, -775, 617, -775, - -775, -775, -775, -775, -88, -775, -775, -775, 651, -775, - -775, -775, -775, -80, -775, -775, -775, 991, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -56, - -775, -775, -775, -775, -775, -775, -775, -775, 745, -775, - -775, -775, -775, -775, 837, -775, -775, -775, -775, 1112, - -775, -775, -775, -775, 823, -775, -775, -775, -775, 1063, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, -775, -775, 92, -775, -775, -775, 96, -775, - -775, -775, -775, -775, -775, 1139, -775, -775, -775, -775, - -775, -775, -775, -775, -775, -775, -775, -775, -775, -775, - -775, -775, 995, -775, -775, -775, -775, -775, -775, -775, - -775, -775 + -749, -749, -749, -139, -310, -748, -641, -749, -749, 951, + -749, -749, -749, -749, 968, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, 1057, -749, -749, -749, -749, -749, + -749, 635, -749, -749, -749, -749, -749, 559, -749, -749, + -749, -749, -749, -749, 760, -749, -749, -749, -749, 91, + -749, -749, -749, -749, -749, -170, -749, -749, -749, 634, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -129, -749, -749, -749, -131, -749, -749, -749, 982, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -104, -749, + -749, -749, -749, -749, -113, -749, 669, -749, -749, -749, + 6, -749, -749, -749, -749, -749, 691, -749, -749, -749, + -749, -749, -749, -749, -108, -749, -749, -749, -749, -749, + -749, 628, -749, -749, -749, -749, -749, 870, -749, -749, + -749, -749, 565, -749, -749, -749, -749, -749, -125, -749, + -749, -749, 598, -749, -749, -749, -749, -109, -749, -749, + -749, 983, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -92, -749, -749, -749, -749, -749, -749, + -749, -749, 714, -749, -749, -749, -749, -749, 800, -749, + -749, -749, -749, 1060, -749, -749, -749, -749, 803, -749, + -749, -749, -749, 1037, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, -749, -749, 82, -749, + -749, -749, 86, -749, -749, -749, -749, -749, -749, 1114, + -749, -749, -749, -749, -749, -749, -749, -749, -749, -749, + -749, -749, -749, -749, -749, -749, 984, -749, -749, -749, + -749, -749, -749, -749, -749, -749 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 1, 26, 845, 846, 1117, 1118, 27, 225, 226, - 227, 228, 28, 274, 275, 276, 277, 278, 279, 280, - 281, 282, 562, 1050, 1051, 283, 284, 285, 286, 287, - 288, 289, 290, 291, 292, 293, 294, 295, 29, 77, - 78, 79, 80, 81, 30, 63, 510, 511, 512, 513, - 31, 70, 597, 598, 599, 600, 601, 602, 32, 299, - 300, 301, 302, 303, 1075, 1076, 1077, 1078, 1079, 1260, - 1341, 1342, 33, 64, 525, 526, 527, 528, 529, 530, - 531, 532, 533, 534, 535, 769, 1235, 1236, 536, 764, - 1207, 1208, 34, 53, 350, 351, 352, 353, 354, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 639, 1102, 1103, 35, 61, 496, 749, 1173, - 1174, 497, 498, 499, 1177, 1010, 1011, 500, 501, 36, - 59, 474, 475, 476, 477, 478, 479, 480, 734, 1159, - 1160, 481, 482, 483, 37, 65, 541, 542, 543, 544, - 545, 38, 307, 308, 309, 39, 72, 610, 611, 612, - 613, 614, 830, 1278, 1279, 40, 68, 583, 584, 585, - 586, 813, 1255, 1256, 41, 54, 383, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 661, 1130, 1131, - 394, 395, 396, 397, 398, 42, 60, 487, 488, 489, - 490, 43, 55, 402, 403, 404, 405, 44, 118, 119, - 120, 45, 57, 412, 413, 414, 415, 46, 170, 171, - 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, - 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, - 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, - 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, - 212, 213, 443, 971, 972, 214, 442, 947, 948, 215, - 216, 217, 218, 47, 97, 98, 99, 100, 101, 102, - 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, - 48, 242, 243, 244, 245, 246, 247, 248, 249, 250, - 251, 252 + -1, 1, 26, 833, 834, 1097, 1098, 27, 225, 226, + 227, 228, 28, 271, 272, 273, 274, 275, 276, 277, + 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, + 288, 289, 29, 77, 78, 79, 80, 81, 30, 63, + 504, 505, 506, 507, 31, 70, 588, 589, 590, 591, + 592, 593, 32, 293, 294, 295, 296, 297, 1055, 1056, + 1057, 1058, 1059, 1238, 1318, 1319, 33, 64, 519, 520, + 521, 522, 523, 524, 525, 526, 527, 528, 529, 760, + 1215, 1216, 530, 755, 1187, 1188, 34, 53, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 630, 1082, 1083, 35, + 61, 490, 740, 1153, 1154, 491, 492, 493, 1157, 998, + 999, 494, 495, 36, 59, 468, 469, 470, 471, 472, + 473, 474, 725, 1139, 1140, 475, 476, 477, 37, 65, + 535, 536, 537, 538, 539, 38, 301, 302, 303, 39, + 72, 601, 602, 603, 604, 605, 818, 1256, 1257, 40, + 68, 574, 575, 576, 577, 801, 1233, 1234, 41, 54, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + 387, 652, 1110, 1111, 388, 389, 390, 391, 392, 42, + 60, 481, 482, 483, 484, 43, 55, 396, 397, 398, + 399, 44, 118, 119, 120, 45, 57, 406, 407, 408, + 409, 46, 170, 171, 172, 173, 174, 175, 176, 177, + 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, + 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, + 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, + 208, 209, 210, 211, 212, 213, 437, 959, 960, 214, + 436, 935, 936, 215, 216, 217, 218, 47, 97, 98, + 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, + 109, 110, 111, 112, 48, 242, 243, 244, 245, 246, + 247, 248, 249, 250, 251, 252 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1664,501 +1637,496 @@ number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 875, 876, 621, 1128, 874, 624, 625, 626, 73, 628, - 629, 507, 1170, 491, 592, 297, 580, 297, 537, 232, - 592, 399, 1046, 305, 507, 116, 1100, 409, 409, 51, - 715, 484, 514, 399, 716, 717, 1143, 52, 74, 718, - 1144, 222, 56, 222, 305, 58, 75, 62, 484, 116, - 537, 515, 122, 233, 606, 49, 50, 123, 124, 538, - 125, 126, 234, 235, 236, 127, 1145, 237, 238, 492, - 1146, 516, 239, 240, 241, 128, 129, 130, 493, 1071, - 494, 879, 880, 73, 131, 606, 400, 132, 133, 134, - 117, 538, 1071, 1242, 135, 508, 66, 1243, 400, 517, - 1311, 682, 539, 684, 685, 1101, 1047, 688, 508, 67, - 1048, 136, 137, 74, 117, 696, 76, 580, 69, 71, - 701, 75, 593, 138, 581, 113, 139, 140, 593, 710, - 711, 306, 114, 115, 539, 410, 410, 141, 121, 219, - 518, 724, 495, 726, 727, 142, 223, 143, 223, 144, - 540, 145, 306, 401, 146, 147, 253, 519, 220, 411, - 411, 1171, 607, 485, 221, 401, 148, 224, 1049, 224, - 1172, 149, 150, 1281, 151, 152, 153, 1282, 229, 154, - 485, 1286, 540, 311, 254, 1287, 255, 1072, 594, 520, - 521, 76, 509, 607, 594, 1290, -142, 1292, -142, 1291, - 1072, 1293, 1129, 312, 155, 509, 595, 1114, 1115, 1116, - 1303, 230, 595, 256, 1304, 156, 157, 158, 159, 160, - 161, 162, 596, 1305, 257, 581, 1308, 1306, 596, 1315, - 1309, 333, 782, 1316, 231, 502, 258, 259, 260, 465, - 1344, 522, 582, 298, 1345, 298, 315, 313, 334, 335, - 261, 751, 824, 336, 262, 589, 778, 555, 466, 673, - 486, 523, 759, 407, 263, 524, 679, 264, 265, 744, - 772, 163, 164, 165, 82, 166, 167, 486, 467, 505, - 608, 1073, 604, 609, 168, 296, 169, 314, 557, 368, - 463, 369, 832, 370, 1073, 304, 266, 310, 337, 317, - 83, 84, 1333, 318, 1334, 1074, 468, 85, 371, 319, - 320, 608, 267, 874, 609, 268, 269, 270, 1074, 338, - 339, 340, 862, 341, 321, 587, 866, 342, 372, 869, - 1261, 322, 343, 873, 323, 86, 87, 88, 89, 344, - 1283, 1284, 1285, 582, 324, 373, 325, 374, 345, 346, - 90, 91, 92, 1335, 326, 814, 375, 591, 327, 347, - 93, 94, 95, 271, 469, 96, 328, 329, 376, 465, - 1336, 330, 470, 471, 620, 406, 416, 417, 418, 232, - 348, 419, 420, 421, 422, 423, 272, 273, 466, 424, - 1149, 425, 472, 426, 578, 427, 618, 377, 428, 838, - 839, 840, 841, 842, 843, 844, 429, 430, 467, 1337, - 1338, 431, 514, 233, 432, 433, 1150, 491, 378, 434, - 435, 436, 234, 235, 236, 349, 437, 237, 238, 438, - 439, 515, 239, 240, 241, 440, 468, 379, 441, 122, - 444, 445, 446, 447, 123, 124, 380, 125, 126, 1151, - 448, 516, 127, 1090, 1091, 1092, 1093, 1094, 1095, 1096, - 449, 1339, 128, 129, 130, 450, 451, 1340, 473, 652, - 452, 131, 615, 492, 132, 133, 134, 740, 453, 517, - 454, 135, 493, 455, 494, 1152, 1153, 456, 457, 458, - 459, 1154, 460, 461, 469, 462, 381, 503, 136, 137, - 504, 546, 470, 471, 547, 548, 549, 550, 551, 552, - 138, 553, 331, 139, 140, 1155, 554, 558, 559, 382, - 518, 368, 472, 369, 141, 370, 560, 669, 561, 616, - 1156, 563, 142, 1245, 143, 564, 144, 519, 145, 565, - 371, 146, 147, 566, 567, 568, 495, 1182, 569, 570, - 571, 572, 573, 148, 574, 575, 576, 577, 149, 150, - 372, 151, 152, 153, 1183, 1184, 154, 588, 603, 520, - 521, 617, 619, 620, 622, 1185, 623, 373, 627, 374, - 630, 631, 632, 633, 634, 635, 636, 683, 375, 637, - 638, 155, 640, 1157, 641, 642, 654, 643, 473, 1246, - 376, 333, 156, 157, 158, 159, 160, 161, 162, 1312, - 644, 645, 1158, 1186, 1187, 646, 1188, 647, 334, 335, - 648, 522, 649, 336, 650, 651, 253, 655, 656, 377, - 657, 1247, 658, 659, 660, 662, 663, 664, 665, 1248, - 666, 523, 667, 668, 671, 524, 672, 675, 1249, 1189, - 378, 676, 681, 677, 254, 678, 255, 1190, 163, 164, - 165, 686, 166, 167, 687, 689, 690, 691, 337, 379, - 692, 168, 1250, 169, 1251, 1252, 693, 694, 380, 1191, - 697, 1192, 1193, 256, 698, 699, 695, 700, 1253, 338, - 339, 340, 702, 341, 257, 703, 1254, 342, 704, 1194, - 705, 706, 343, 707, 709, 712, 258, 259, 260, 344, - 708, 713, 714, 719, 720, 721, 722, 725, 345, 346, - 261, 723, 1195, 1268, 262, 728, 729, 1196, 381, 347, - 732, 1197, 733, 753, 263, 1198, 754, 264, 265, 730, - 1199, 731, 780, 735, 1200, 736, 737, 746, 738, 739, - 348, 382, 742, 743, 747, 1201, 748, 1202, 1203, 750, - 1204, 2, 3, 755, 756, 4, 266, 949, 757, 950, - 951, 1205, 758, 761, 762, 763, 774, 5, 765, 1206, - 766, 6, 267, 7, 781, 268, 269, 270, 783, 1269, - 784, 8, 767, 768, 785, 349, 770, 771, 775, 776, - 777, 786, 789, 9, 787, 788, 790, 791, 10, 11, - 792, 793, 795, 794, 796, 1213, 797, 1214, 1215, 798, - 812, 1270, 799, 800, 801, 802, 803, 804, 12, 1271, - 810, 805, 13, 271, 806, 807, 808, 809, 1272, 811, - 816, 817, 826, 860, 861, 14, 818, 864, 819, 820, - 865, 867, 821, 822, 823, 927, 272, 273, 827, 829, - 828, 834, 1273, 868, 1274, 1275, 835, 831, 15, 16, - 836, 837, 847, 848, 849, 850, 851, 852, 1276, 853, - 854, 855, 856, 17, 857, 858, 1277, 859, 870, 863, - 952, 953, 954, 871, 872, 955, 956, 874, 957, 958, - 18, 959, 877, 960, 878, 881, 961, 882, 962, 963, - 883, 885, 19, 20, 964, 884, 886, 887, 965, 888, - 889, 890, 966, 967, 968, 891, 892, 894, 893, 969, - 895, 898, 899, 506, 970, 896, 897, 21, 1216, 1217, - 1218, 995, 996, 1219, 1220, 900, 1221, 1222, 901, 1223, - 22, 1224, 902, 903, 1225, 23, 1226, 1227, 904, 905, - 24, 906, 1228, 25, 994, 997, 1229, 907, 998, 908, - 1230, 1231, 1232, 909, 82, 910, 911, 1233, 928, 929, - 930, 912, 1234, 931, 932, 913, 933, 934, 914, 935, - 915, 936, 916, 917, 937, 999, 938, 939, 918, 1000, - 83, 84, 940, 919, 1001, 920, 941, 85, 921, 922, - 942, 943, 944, 923, 1003, 1004, 924, 945, 1006, 925, - 926, 973, 946, 1007, 1009, 974, 975, 1015, 1016, 976, - 977, 978, 1018, 1019, 1021, 86, 87, 88, 89, 1008, - 1022, 979, 980, 981, 1023, 982, 983, 984, 985, 986, - 90, 91, 92, 987, 988, 989, 990, 991, 992, 993, - 93, 94, 95, 1002, 1005, 96, 1012, 1013, 1014, 1017, - 1026, 1024, 1027, 1020, 1028, 1029, 1025, 1030, 1031, 1032, - 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, 1067, - 1080, 1042, 1043, 1044, 1045, 1052, 1053, 1054, 1055, 1056, - 1057, 1058, 1081, 1059, 1060, 1061, 1082, 1062, 1063, 1064, - 1065, 1083, 1066, 1086, 1069, 1070, 1068, 1084, 1085, 1087, - 1088, 1294, 1258, 1089, 1097, 1297, 1098, 1099, 1104, 1105, - 1310, 1106, 1107, 1108, 1321, 1322, 1109, 1110, 1111, 1323, - 1112, 316, 1113, 1119, 1120, 1324, 1121, 1325, 1122, 1123, - 1124, 1326, 1125, 1126, 1127, 1132, 1133, 1134, 1135, 1136, - 1137, 1138, 1139, 1140, 1141, 1142, 1147, 1148, 1161, 1162, - 1163, 1164, 1165, 1166, 1167, 1168, 1169, 1175, 760, 1307, - 1178, 1179, 1176, 1180, 825, 1262, 1181, 1209, 1210, 1346, - 1211, 1212, 1237, 1238, 1239, 1240, 773, 1328, 1241, 1244, - 1257, 1327, 1263, 1264, 1259, 1265, 1266, 1267, 1280, 1298, - 1296, 1317, 1320, 752, 1295, 741, 1319, 1299, 779, 1300, - 1301, 1302, 1313, 1314, 1330, 1331, 1332, 833, 1343, 1329, - 408, 1318, 745, 464, 815, 680, 332, 556, 1289, 674, - 1288, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 579, 0, 0, 0, 0, 0, 0, + 863, 864, 612, 73, 485, 615, 616, 617, 597, 619, + 620, 531, 116, 1108, 222, 116, 403, 1051, 51, 299, + 291, 706, 403, 299, 73, 707, 393, 862, 291, 49, + 50, 362, 74, 363, 501, 364, 597, 1080, 52, 478, + 75, 708, 393, 1123, 56, 709, 1125, 1124, 1150, 365, + 1126, 532, 58, 74, 62, 531, 253, 1051, 122, 486, + 478, 75, 583, 123, 124, 571, 125, 126, 487, 366, + 488, 127, 66, 1259, 1264, 571, 117, 1260, 1265, 117, + 128, 129, 130, 254, 67, 255, 367, 69, 368, 131, + 394, 533, 132, 133, 134, 532, 1268, 369, 1270, 135, + 1269, 673, 1271, 675, 676, 76, 394, 679, 222, 370, + 598, 1081, 256, 223, 502, 687, 136, 137, 404, 1052, + 692, 300, 1288, 257, 404, 300, 76, 489, 138, 701, + 702, 139, 140, 371, 224, 533, 1281, 534, 598, 141, + 1282, 715, 405, 717, 718, 232, 258, 142, 405, 143, + 259, 144, 395, 145, 372, 146, 147, 501, 260, 1052, + 71, 261, 262, 113, 584, 479, 148, 572, 395, 114, + 115, 149, 150, 373, 151, 152, 153, 572, 233, 154, + 121, 534, 374, 219, 583, 459, 479, 234, 235, 236, + 263, 1151, 237, 238, -129, 220, 221, 239, 240, 241, + 1152, 229, -129, 460, 155, 1109, 264, 223, 503, 265, + 266, 267, 1053, 230, 156, 157, 158, 159, 160, 161, + 162, 1283, 327, 461, 231, 1284, 508, 599, 224, 585, + 600, 375, 773, 306, 309, 742, 1054, 502, 328, 329, + 305, 292, 769, 330, 509, 499, 401, 586, 1239, 292, + 595, 462, 1053, 670, 376, 599, 268, 664, 600, 580, + 307, 480, 660, 587, 510, 750, 308, 820, 867, 868, + 163, 164, 165, 290, 166, 167, 1054, 82, 298, 269, + 270, 304, 480, 168, 573, 169, 584, 569, 331, 457, + 613, 735, 511, 812, 573, 582, 802, 1285, 1094, 1095, + 1096, 1286, 83, 84, 463, 311, 332, 333, 334, 85, + 335, 312, 464, 465, 336, 485, 1292, 459, 337, 850, + 1293, 1321, 313, 854, 338, 1322, 857, 314, 512, 315, + 861, 503, 466, 339, 340, 460, 316, 86, 87, 88, + 89, 1310, 317, 1311, 341, 513, 1261, 1262, 1263, 318, + 319, 585, 90, 91, 92, 461, 320, 321, 322, 93, + 94, 95, 323, 324, 96, 342, 400, 410, 508, 586, + 486, 411, 412, 413, 414, 415, 549, 514, 515, 487, + 1223, 488, 416, 462, 417, 587, 509, 1312, 122, 418, + 496, 419, 420, 123, 124, 421, 125, 126, 862, 422, + 423, 127, 424, 425, 1313, 426, 510, 467, 427, 343, + 128, 129, 130, 428, 429, 430, 731, 610, 806, 131, + 431, 432, 132, 133, 134, 433, 434, 435, 516, 135, + 438, 1246, 439, 440, 511, 1129, 463, 441, 489, 442, + 443, 1224, 1314, 1315, 464, 465, 136, 137, 517, 444, + 445, 446, 518, 643, 447, 551, 448, 763, 138, 578, + 1130, 139, 140, 449, 466, 450, 451, 452, 453, 141, + 512, 454, 1225, 455, 456, 497, 498, 142, 540, 143, + 1226, 144, 541, 145, 542, 146, 147, 513, 543, 1227, + 544, 545, 1247, 1131, 1316, 1162, 148, 546, 547, 548, + 1317, 149, 150, 552, 151, 152, 153, 553, 325, 154, + 606, 1163, 1164, 1228, 554, 1229, 1230, 555, 556, 514, + 515, 607, 1165, 1248, 1132, 1133, 557, 558, 559, 1231, + 1134, 1249, 560, 561, 155, 562, 563, 1232, 564, 467, + 1250, 565, 608, 566, 156, 157, 158, 159, 160, 161, + 162, 567, 253, 568, 1135, 579, 594, 609, 611, 614, + 1166, 1167, 618, 1168, 1251, 621, 1252, 1253, 622, 1136, + 516, 362, 623, 363, 624, 364, 625, 626, 627, 254, + 1254, 255, 628, 629, 631, 632, 633, 634, 1255, 365, + 517, 1169, 635, 645, 518, 636, 1289, 637, 638, 1170, + 163, 164, 165, 639, 166, 167, 640, 641, 256, 366, + 642, 646, 647, 168, 648, 169, 649, 650, 651, 257, + 653, 1171, 654, 1172, 1173, 655, 367, 656, 368, 657, + 666, 1137, 658, 659, 662, 663, 667, 369, 668, 672, + 669, 1174, 258, 674, 677, 678, 259, 680, 681, 370, + 1138, 682, 683, 684, 260, 685, 686, 261, 262, 688, + 689, 690, 327, 1175, 691, 693, 694, 695, 1176, 696, + 697, 698, 1177, 371, 915, 714, 1178, 700, 328, 329, + 699, 1179, 703, 330, 704, 1180, 263, 1070, 1071, 1072, + 1073, 1074, 1075, 1076, 372, 705, 1181, 710, 1182, 1183, + 711, 1184, 264, 720, 712, 265, 266, 267, 713, 716, + 719, 721, 1185, 373, 744, 2, 3, 722, 723, 4, + 1186, 724, 374, 726, 727, 737, 745, 728, 331, 729, + 774, 5, 771, 730, 6, 733, 7, 734, 738, 746, + 937, 739, 938, 939, 8, 741, 332, 333, 334, 747, + 335, 748, 268, 749, 336, 752, 9, 753, 337, 754, + 756, 10, 11, 757, 338, 758, 776, 759, 781, 761, + 762, 375, 766, 339, 340, 269, 270, 765, 767, 768, + 772, 12, 785, 775, 341, 13, 1193, 777, 1194, 1195, + 778, 916, 917, 918, 376, 14, 919, 920, 779, 921, + 922, 782, 923, 780, 924, 342, 783, 925, 784, 926, + 927, 611, 786, 787, 788, 928, 15, 16, 789, 929, + 790, 791, 792, 930, 931, 932, 798, 793, 794, 795, + 933, 17, 796, 797, 799, 934, 826, 827, 828, 829, + 830, 831, 832, 800, 804, 805, 807, 808, 18, 343, + 809, 810, 811, 814, 815, 816, 817, 940, 941, 942, + 19, 20, 943, 944, 819, 945, 946, 822, 947, 823, + 948, 824, 848, 949, 825, 950, 951, 835, 836, 837, + 838, 952, 839, 840, 21, 953, 841, 842, 849, 954, + 955, 956, 82, 843, 844, 845, 957, 22, 846, 847, + 851, 958, 23, 1196, 1197, 1198, 852, 24, 1199, 1200, + 25, 1201, 1202, 853, 1203, 855, 1204, 83, 84, 1205, + 856, 1206, 1207, 858, 85, 859, 860, 1208, 862, 865, + 866, 1209, 869, 870, 876, 1210, 1211, 1212, 232, 873, + 881, 871, 1213, 872, 874, 875, 877, 1214, 884, 878, + 879, 880, 86, 87, 88, 89, 882, 883, 885, 886, + 887, 888, 889, 890, 891, 892, 893, 90, 91, 92, + 894, 233, 895, 896, 93, 94, 95, 897, 898, 96, + 234, 235, 236, 899, 900, 237, 238, 901, 902, 903, + 239, 240, 241, 904, 905, 906, 907, 908, 909, 910, + 911, 912, 913, 914, 961, 962, 963, 964, 982, 965, + 966, 967, 968, 969, 970, 971, 972, 973, 974, 975, + 976, 977, 978, 979, 980, 981, 985, 986, 987, 988, + 984, 989, 990, 991, 983, 992, 994, 993, 995, 997, + 1003, 1000, 996, 1001, 1002, 1004, 1006, 1009, 1007, 1010, + 1011, 1012, 1014, 581, 1015, 1017, 1018, 1019, 1005, 1047, + 1060, 1016, 1008, 1013, 1020, 1061, 1062, 1063, 1021, 1022, + 1066, 1023, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, + 1032, 1033, 1034, 1035, 1036, 1037, 1038, 1039, 1040, 1041, + 1042, 1043, 1044, 1045, 1046, 1068, 1049, 1050, 1048, 1064, + 1065, 1067, 1069, 1077, 1078, 1079, 1084, 1085, 1086, 1087, + 1088, 1089, 1090, 1091, 1272, 1092, 1093, 1099, 1100, 1101, + 1102, 1103, 1287, 1104, 1105, 1106, 1107, 1112, 1113, 1114, + 1115, 1116, 1298, 1117, 310, 1299, 1118, 1300, 1119, 751, + 1120, 1301, 1302, 1121, 1303, 1122, 1240, 813, 1127, 1128, + 1141, 1304, 1323, 764, 1142, 1305, 1294, 1143, 1297, 732, + 743, 1296, 1273, 770, 1144, 1155, 821, 1145, 1320, 1146, + 1147, 596, 803, 1295, 1148, 1149, 500, 1306, 402, 1158, + 1159, 1160, 1156, 1161, 1189, 1190, 1191, 1192, 1217, 1218, + 1219, 1220, 1221, 1222, 1235, 736, 665, 1241, 1236, 1237, + 1242, 1290, 1243, 1244, 1245, 1258, 1274, 458, 1267, 671, + 1266, 326, 1275, 1276, 1277, 1278, 1279, 1280, 1291, 1307, + 1308, 1309, 0, 0, 0, 0, 550, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 570, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 590, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 605, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 644, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 670 + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 661 }; static const yytype_int16 yycheck[] = { - 650, 651, 318, 8, 117, 321, 322, 323, 1, 325, - 326, 1, 49, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 17, 1, 1, 1, 53, 1, 1, 240, - 219, 1, 1, 1, 223, 219, 238, 240, 31, 223, - 242, 1, 240, 1, 1, 240, 39, 240, 1, 1, - 1, 20, 1, 35, 1, 238, 239, 6, 7, 42, - 9, 10, 44, 45, 46, 14, 238, 49, 50, 57, - 242, 40, 54, 55, 56, 24, 25, 26, 66, 1, - 68, 186, 187, 1, 33, 1, 66, 36, 37, 38, - 66, 42, 1, 238, 43, 85, 240, 242, 66, 68, - 213, 417, 85, 419, 420, 132, 101, 423, 85, 240, - 105, 60, 61, 31, 66, 431, 109, 1, 240, 240, - 436, 39, 109, 72, 109, 240, 75, 76, 109, 445, - 446, 109, 240, 240, 85, 109, 109, 86, 240, 240, - 109, 457, 130, 459, 460, 94, 106, 96, 106, 98, - 133, 100, 109, 133, 103, 104, 1, 126, 240, 133, - 133, 198, 109, 133, 240, 133, 115, 127, 163, 127, - 207, 120, 121, 238, 123, 124, 125, 242, 240, 128, - 133, 238, 133, 238, 29, 242, 31, 109, 175, 158, - 159, 109, 182, 109, 175, 238, 182, 238, 182, 242, - 109, 242, 207, 241, 153, 182, 193, 11, 12, 13, - 238, 240, 193, 58, 242, 164, 165, 166, 167, 168, - 169, 170, 209, 238, 69, 109, 238, 242, 209, 238, - 242, 1, 548, 242, 240, 238, 81, 82, 83, 1, - 238, 210, 227, 229, 242, 229, 239, 241, 18, 19, - 95, 239, 239, 23, 99, 239, 239, 239, 20, 239, - 230, 230, 239, 239, 109, 234, 239, 112, 113, 239, - 239, 220, 221, 222, 1, 224, 225, 230, 40, 239, - 227, 203, 239, 230, 233, 240, 235, 241, 238, 1, - 239, 3, 239, 5, 203, 240, 141, 240, 68, 241, - 27, 28, 71, 241, 73, 227, 68, 34, 20, 241, - 241, 227, 157, 117, 230, 160, 161, 162, 227, 89, - 90, 91, 638, 93, 241, 238, 642, 97, 40, 645, - 239, 241, 102, 649, 241, 62, 63, 64, 65, 109, - 1114, 1115, 1116, 227, 241, 57, 241, 59, 118, 119, - 77, 78, 79, 122, 241, 239, 68, 182, 241, 129, - 87, 88, 89, 208, 126, 92, 241, 241, 80, 1, - 139, 241, 134, 135, 117, 241, 241, 241, 241, 1, - 150, 241, 241, 241, 241, 241, 231, 232, 20, 241, - 15, 241, 154, 241, 239, 241, 238, 109, 241, 142, - 143, 144, 145, 146, 147, 148, 241, 241, 40, 178, - 179, 241, 1, 35, 241, 241, 41, 1, 130, 241, - 241, 241, 44, 45, 46, 195, 241, 49, 50, 241, - 241, 20, 54, 55, 56, 241, 68, 149, 241, 1, - 241, 241, 241, 241, 6, 7, 158, 9, 10, 74, - 241, 40, 14, 838, 839, 840, 841, 842, 843, 844, - 241, 230, 24, 25, 26, 241, 241, 236, 230, 239, - 241, 33, 131, 57, 36, 37, 38, 239, 241, 68, - 241, 43, 66, 241, 68, 110, 111, 241, 241, 241, - 241, 116, 241, 241, 126, 241, 208, 241, 60, 61, - 241, 241, 134, 135, 241, 241, 241, 241, 241, 241, - 72, 241, 239, 75, 76, 140, 241, 241, 241, 231, - 109, 1, 154, 3, 86, 5, 241, 239, 241, 131, - 155, 241, 94, 73, 96, 241, 98, 126, 100, 241, - 20, 103, 104, 241, 241, 241, 130, 4, 241, 241, - 241, 241, 241, 115, 241, 241, 241, 241, 120, 121, - 40, 123, 124, 125, 21, 22, 128, 241, 241, 158, - 159, 131, 117, 117, 219, 32, 117, 57, 117, 59, - 117, 117, 117, 117, 238, 238, 241, 117, 68, 241, - 241, 153, 241, 218, 241, 241, 238, 241, 230, 139, - 80, 1, 164, 165, 166, 167, 168, 169, 170, 1259, - 241, 241, 237, 70, 71, 241, 73, 241, 18, 19, - 241, 210, 241, 23, 241, 241, 1, 241, 241, 109, - 241, 171, 241, 241, 241, 241, 241, 241, 241, 179, - 241, 230, 241, 241, 241, 234, 241, 131, 188, 106, - 130, 238, 219, 241, 29, 241, 31, 114, 220, 221, - 222, 219, 224, 225, 117, 219, 117, 117, 68, 149, - 117, 233, 212, 235, 214, 215, 219, 219, 158, 136, - 117, 138, 139, 58, 117, 117, 219, 117, 228, 89, - 90, 91, 117, 93, 69, 117, 236, 97, 117, 156, - 117, 219, 102, 241, 219, 219, 81, 82, 83, 109, - 241, 219, 219, 219, 219, 219, 219, 219, 118, 119, - 95, 117, 179, 73, 99, 219, 117, 184, 208, 129, - 241, 188, 241, 131, 109, 192, 131, 112, 113, 238, - 197, 238, 219, 241, 201, 241, 241, 238, 241, 241, - 150, 231, 241, 241, 241, 212, 241, 214, 215, 241, - 217, 0, 1, 238, 238, 4, 141, 49, 241, 51, - 52, 228, 241, 238, 241, 241, 238, 16, 241, 236, - 241, 20, 157, 22, 219, 160, 161, 162, 131, 139, - 219, 30, 241, 241, 131, 195, 241, 241, 241, 241, - 241, 219, 238, 42, 219, 219, 117, 131, 47, 48, - 219, 131, 131, 241, 131, 49, 117, 51, 52, 117, - 241, 171, 131, 131, 131, 131, 131, 131, 67, 179, - 238, 131, 71, 208, 131, 131, 131, 131, 188, 238, - 219, 238, 131, 117, 117, 84, 240, 117, 238, 241, - 117, 117, 241, 241, 241, 49, 231, 232, 238, 241, - 238, 238, 212, 117, 214, 215, 238, 241, 107, 108, - 238, 238, 238, 238, 238, 238, 238, 238, 228, 238, - 238, 238, 238, 122, 238, 238, 236, 238, 131, 241, - 172, 173, 174, 117, 117, 177, 178, 117, 180, 181, - 139, 183, 238, 185, 131, 131, 188, 219, 190, 191, - 131, 241, 151, 152, 196, 131, 131, 131, 200, 117, - 131, 131, 204, 205, 206, 131, 131, 131, 238, 211, - 131, 131, 131, 225, 216, 238, 238, 176, 172, 173, - 174, 219, 241, 177, 178, 238, 180, 181, 238, 183, - 189, 185, 238, 238, 188, 194, 190, 191, 238, 238, - 199, 238, 196, 202, 131, 131, 200, 238, 117, 238, - 204, 205, 206, 238, 1, 238, 238, 211, 172, 173, - 174, 238, 216, 177, 178, 238, 180, 181, 238, 183, - 238, 185, 238, 238, 188, 131, 190, 191, 238, 131, - 27, 28, 196, 238, 131, 238, 200, 34, 238, 238, - 204, 205, 206, 238, 131, 131, 238, 211, 131, 238, - 238, 238, 216, 131, 117, 238, 238, 131, 131, 238, - 238, 238, 131, 219, 131, 62, 63, 64, 65, 241, - 131, 238, 238, 238, 131, 238, 238, 238, 238, 238, - 77, 78, 79, 238, 238, 238, 238, 238, 238, 238, - 87, 88, 89, 238, 238, 92, 238, 238, 238, 238, - 131, 219, 131, 241, 238, 131, 241, 131, 131, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 131, - 131, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 131, 238, 238, 238, 131, 238, 238, 238, - 238, 131, 238, 131, 238, 238, 241, 238, 238, 241, - 131, 117, 241, 238, 238, 243, 238, 238, 238, 238, - 131, 238, 238, 238, 137, 139, 238, 238, 238, 137, - 238, 77, 238, 238, 238, 139, 238, 137, 238, 238, - 238, 137, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 226, 510, 1243, - 238, 238, 242, 238, 597, 1075, 238, 238, 238, 1345, - 238, 238, 238, 238, 238, 238, 525, 1306, 238, 238, - 238, 1304, 238, 238, 241, 238, 238, 238, 238, 243, - 238, 1282, 1293, 497, 1176, 474, 1291, 243, 541, 243, - 243, 243, 241, 238, 238, 238, 238, 610, 1316, 1309, - 118, 1287, 487, 170, 583, 412, 97, 242, 1146, 402, - 1144, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 274, -1, -1, -1, -1, -1, -1, + 641, 642, 312, 1, 1, 315, 316, 317, 1, 319, + 320, 1, 1, 8, 1, 1, 1, 1, 233, 1, + 1, 212, 1, 1, 1, 216, 1, 111, 1, 231, + 232, 1, 30, 3, 1, 5, 1, 52, 233, 1, + 38, 212, 1, 231, 233, 216, 231, 235, 48, 19, + 235, 41, 233, 30, 233, 1, 1, 1, 1, 56, + 1, 38, 1, 6, 7, 1, 9, 10, 65, 39, + 67, 14, 233, 231, 231, 1, 65, 235, 235, 65, + 23, 24, 25, 28, 233, 30, 56, 233, 58, 32, + 65, 81, 35, 36, 37, 41, 231, 67, 231, 42, + 235, 411, 235, 413, 414, 103, 65, 417, 1, 79, + 103, 126, 57, 100, 81, 425, 59, 60, 103, 103, + 430, 103, 206, 68, 103, 103, 103, 124, 71, 439, + 440, 74, 75, 103, 121, 81, 231, 127, 103, 82, + 235, 451, 127, 453, 454, 1, 91, 90, 127, 92, + 95, 94, 127, 96, 124, 98, 99, 1, 103, 103, + 233, 106, 107, 233, 103, 127, 109, 103, 127, 233, + 233, 114, 115, 143, 117, 118, 119, 103, 34, 122, + 233, 127, 152, 233, 1, 1, 127, 43, 44, 45, + 135, 191, 48, 49, 175, 233, 233, 53, 54, 55, + 200, 233, 175, 19, 147, 200, 151, 100, 175, 154, + 155, 156, 196, 233, 157, 158, 159, 160, 161, 162, + 163, 231, 1, 39, 233, 235, 1, 220, 121, 168, + 223, 201, 542, 234, 232, 232, 220, 81, 17, 18, + 231, 222, 232, 22, 19, 232, 232, 186, 232, 222, + 232, 67, 196, 232, 224, 220, 201, 232, 223, 232, + 234, 223, 232, 202, 39, 232, 234, 232, 179, 180, + 213, 214, 215, 233, 217, 218, 220, 1, 233, 224, + 225, 233, 223, 226, 220, 228, 103, 232, 67, 232, + 212, 232, 67, 232, 220, 175, 232, 231, 11, 12, + 13, 235, 26, 27, 120, 234, 85, 86, 87, 33, + 89, 234, 128, 129, 93, 1, 231, 1, 97, 629, + 235, 231, 234, 633, 103, 235, 636, 234, 103, 234, + 640, 175, 148, 112, 113, 19, 234, 61, 62, 63, + 64, 70, 234, 72, 123, 120, 1094, 1095, 1096, 234, + 234, 168, 76, 77, 78, 39, 234, 234, 234, 83, + 84, 85, 234, 234, 88, 144, 234, 234, 1, 186, + 56, 234, 234, 234, 234, 234, 232, 152, 153, 65, + 72, 67, 234, 67, 234, 202, 19, 116, 1, 234, + 231, 234, 234, 6, 7, 234, 9, 10, 111, 234, + 234, 14, 234, 234, 133, 234, 39, 223, 234, 188, + 23, 24, 25, 234, 234, 234, 232, 111, 233, 32, + 234, 234, 35, 36, 37, 234, 234, 234, 203, 42, + 234, 72, 234, 234, 67, 15, 120, 234, 124, 234, + 234, 133, 171, 172, 128, 129, 59, 60, 223, 234, + 234, 234, 227, 232, 234, 231, 234, 232, 71, 231, + 40, 74, 75, 234, 148, 234, 234, 234, 234, 82, + 103, 234, 164, 234, 234, 234, 234, 90, 234, 92, + 172, 94, 234, 96, 234, 98, 99, 120, 234, 181, + 234, 234, 133, 73, 223, 4, 109, 234, 234, 234, + 229, 114, 115, 234, 117, 118, 119, 234, 232, 122, + 125, 20, 21, 205, 234, 207, 208, 234, 234, 152, + 153, 125, 31, 164, 104, 105, 234, 234, 234, 221, + 110, 172, 234, 234, 147, 234, 234, 229, 234, 223, + 181, 234, 125, 234, 157, 158, 159, 160, 161, 162, + 163, 234, 1, 234, 134, 234, 234, 231, 111, 111, + 69, 70, 111, 72, 205, 111, 207, 208, 111, 149, + 203, 1, 111, 3, 111, 5, 231, 231, 234, 28, + 221, 30, 234, 234, 234, 234, 234, 234, 229, 19, + 223, 100, 234, 231, 227, 234, 1237, 234, 234, 108, + 213, 214, 215, 234, 217, 218, 234, 234, 57, 39, + 234, 234, 234, 226, 234, 228, 234, 234, 234, 68, + 234, 130, 234, 132, 133, 234, 56, 234, 58, 234, + 125, 211, 234, 234, 234, 234, 231, 67, 234, 212, + 234, 150, 91, 111, 212, 111, 95, 212, 111, 79, + 230, 111, 111, 212, 103, 212, 212, 106, 107, 111, + 111, 111, 1, 172, 111, 111, 111, 111, 177, 111, + 212, 234, 181, 103, 48, 111, 185, 212, 17, 18, + 234, 190, 212, 22, 212, 194, 135, 826, 827, 828, + 829, 830, 831, 832, 124, 212, 205, 212, 207, 208, + 212, 210, 151, 111, 212, 154, 155, 156, 212, 212, + 212, 231, 221, 143, 125, 0, 1, 231, 234, 4, + 229, 234, 152, 234, 234, 231, 125, 234, 67, 234, + 125, 16, 212, 234, 19, 234, 21, 234, 234, 231, + 48, 234, 50, 51, 29, 234, 85, 86, 87, 231, + 89, 234, 201, 234, 93, 231, 41, 234, 97, 234, + 234, 46, 47, 234, 103, 234, 125, 234, 111, 234, + 234, 201, 234, 112, 113, 224, 225, 231, 234, 234, + 212, 66, 111, 212, 123, 70, 48, 212, 50, 51, + 212, 165, 166, 167, 224, 80, 170, 171, 212, 173, + 174, 125, 176, 231, 178, 144, 212, 181, 125, 183, + 184, 111, 111, 125, 125, 189, 101, 102, 125, 193, + 125, 125, 125, 197, 198, 199, 231, 125, 125, 125, + 204, 116, 125, 125, 231, 209, 136, 137, 138, 139, + 140, 141, 142, 234, 212, 231, 231, 234, 133, 188, + 234, 234, 234, 125, 231, 231, 234, 165, 166, 167, + 145, 146, 170, 171, 234, 173, 174, 231, 176, 231, + 178, 231, 111, 181, 231, 183, 184, 231, 231, 231, + 231, 189, 231, 231, 169, 193, 231, 231, 111, 197, + 198, 199, 1, 231, 231, 231, 204, 182, 231, 231, + 234, 209, 187, 165, 166, 167, 111, 192, 170, 171, + 195, 173, 174, 111, 176, 111, 178, 26, 27, 181, + 111, 183, 184, 125, 33, 111, 111, 189, 111, 231, + 125, 193, 125, 212, 111, 197, 198, 199, 1, 234, + 231, 125, 204, 125, 125, 125, 125, 209, 231, 125, + 125, 125, 61, 62, 63, 64, 125, 125, 231, 125, + 125, 231, 231, 231, 231, 231, 231, 76, 77, 78, + 231, 34, 231, 231, 83, 84, 85, 231, 231, 88, + 43, 44, 45, 231, 231, 48, 49, 231, 231, 231, + 53, 54, 55, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 125, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 125, 111, 125, 125, + 234, 125, 231, 125, 212, 125, 125, 231, 125, 111, + 125, 231, 234, 231, 231, 125, 125, 125, 212, 125, + 125, 212, 125, 293, 125, 125, 125, 125, 231, 125, + 125, 231, 234, 234, 231, 125, 125, 125, 231, 231, + 125, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 125, 231, 231, 234, 231, + 231, 234, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 111, 231, 231, 231, 231, 231, + 231, 231, 125, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 131, 231, 77, 133, 231, 131, 231, 504, + 231, 133, 131, 231, 131, 231, 1055, 588, 231, 231, + 231, 1282, 1322, 519, 231, 1284, 1260, 231, 1271, 468, + 491, 1269, 1156, 535, 231, 219, 601, 231, 1293, 231, + 231, 301, 574, 1265, 231, 231, 225, 1286, 118, 231, + 231, 231, 235, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 481, 396, 231, 234, 234, + 231, 234, 231, 231, 231, 231, 231, 170, 1126, 406, + 1124, 97, 236, 236, 236, 236, 236, 236, 231, 231, + 231, 231, -1, -1, -1, -1, 242, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 271, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 299, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 350, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 383 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 377 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint16 yystos[] = { - 0, 245, 0, 1, 4, 16, 20, 22, 30, 42, - 47, 48, 67, 71, 84, 107, 108, 122, 139, 151, - 152, 176, 189, 194, 199, 202, 246, 251, 256, 282, - 288, 294, 302, 316, 336, 359, 373, 388, 395, 399, - 409, 418, 439, 445, 451, 455, 461, 517, 534, 238, - 239, 240, 240, 337, 419, 446, 240, 456, 240, 374, - 440, 360, 240, 289, 317, 389, 240, 240, 410, 240, - 295, 240, 400, 1, 31, 39, 109, 283, 284, 285, - 286, 287, 1, 27, 28, 34, 62, 63, 64, 65, - 77, 78, 79, 87, 88, 89, 92, 518, 519, 520, - 521, 522, 523, 524, 525, 526, 527, 528, 529, 530, - 531, 532, 533, 240, 240, 240, 1, 66, 452, 453, - 454, 240, 1, 6, 7, 9, 10, 14, 24, 25, - 26, 33, 36, 37, 38, 43, 60, 61, 72, 75, - 76, 86, 94, 96, 98, 100, 103, 104, 115, 120, - 121, 123, 124, 125, 128, 153, 164, 165, 166, 167, - 168, 169, 170, 220, 221, 222, 224, 225, 233, 235, - 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, - 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, - 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, - 502, 503, 504, 505, 509, 513, 514, 515, 516, 240, - 240, 240, 1, 106, 127, 252, 253, 254, 255, 240, - 240, 240, 1, 35, 44, 45, 46, 49, 50, 54, - 55, 56, 535, 536, 537, 538, 539, 540, 541, 542, - 543, 544, 545, 1, 29, 31, 58, 69, 81, 82, - 83, 95, 99, 109, 112, 113, 141, 157, 160, 161, - 162, 208, 231, 232, 257, 258, 259, 260, 261, 262, - 263, 264, 265, 269, 270, 271, 272, 273, 274, 275, - 276, 277, 278, 279, 280, 281, 240, 1, 229, 303, - 304, 305, 306, 307, 240, 1, 109, 396, 397, 398, - 240, 238, 241, 241, 241, 239, 284, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 239, 519, 1, 18, 19, 23, 68, 89, 90, - 91, 93, 97, 102, 109, 118, 119, 129, 150, 195, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 1, 3, - 5, 20, 40, 57, 59, 68, 80, 109, 130, 149, - 158, 208, 231, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 434, 435, 436, 437, 438, 1, - 66, 133, 447, 448, 449, 450, 241, 239, 453, 1, - 109, 133, 457, 458, 459, 460, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 510, 506, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 239, 463, 1, 20, 40, 68, 126, - 134, 135, 154, 230, 375, 376, 377, 378, 379, 380, - 381, 385, 386, 387, 1, 133, 230, 441, 442, 443, - 444, 1, 57, 66, 68, 130, 361, 365, 366, 367, - 371, 372, 238, 241, 241, 239, 253, 1, 85, 182, - 290, 291, 292, 293, 1, 20, 40, 68, 109, 126, - 158, 159, 210, 230, 234, 318, 319, 320, 321, 322, - 323, 324, 325, 326, 327, 328, 332, 1, 42, 85, - 133, 390, 391, 392, 393, 394, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 239, 536, 238, 241, 241, - 241, 241, 266, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 241, 241, 241, 241, 241, 241, 239, 258, - 1, 109, 227, 411, 412, 413, 414, 238, 241, 239, - 304, 182, 1, 109, 175, 193, 209, 296, 297, 298, - 299, 300, 301, 241, 239, 397, 1, 109, 227, 230, - 401, 402, 403, 404, 405, 131, 131, 131, 238, 117, - 117, 248, 219, 117, 248, 248, 248, 117, 248, 248, - 117, 117, 117, 117, 238, 238, 241, 241, 241, 356, - 241, 241, 241, 241, 241, 241, 241, 241, 241, 241, - 241, 241, 239, 339, 238, 241, 241, 241, 241, 241, - 241, 431, 241, 241, 241, 241, 241, 241, 241, 239, - 421, 241, 241, 239, 448, 131, 238, 241, 241, 239, - 458, 219, 248, 117, 248, 248, 219, 117, 248, 219, - 117, 117, 117, 219, 219, 219, 248, 117, 117, 117, - 117, 248, 117, 117, 117, 117, 219, 241, 241, 219, - 248, 248, 219, 219, 219, 219, 223, 219, 223, 219, - 219, 219, 219, 117, 248, 219, 248, 248, 219, 117, - 238, 238, 241, 241, 382, 241, 241, 241, 241, 241, - 239, 376, 241, 241, 239, 442, 238, 241, 241, 362, - 241, 239, 366, 131, 131, 238, 238, 241, 241, 239, - 291, 238, 241, 241, 333, 241, 241, 241, 241, 329, - 241, 241, 239, 319, 238, 241, 241, 241, 239, 391, - 219, 219, 248, 131, 219, 131, 219, 219, 219, 238, - 117, 131, 219, 131, 241, 131, 131, 117, 117, 131, - 131, 131, 131, 131, 131, 131, 131, 131, 131, 131, - 238, 238, 241, 415, 239, 412, 219, 238, 240, 238, - 241, 241, 241, 241, 239, 297, 131, 238, 238, 241, - 406, 241, 239, 402, 238, 238, 238, 238, 142, 143, - 144, 145, 146, 147, 148, 247, 248, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 117, 117, 248, 241, 117, 117, 248, 117, 117, 248, - 131, 117, 117, 248, 117, 250, 250, 238, 131, 186, - 187, 131, 219, 131, 131, 241, 131, 131, 117, 131, - 131, 131, 131, 238, 131, 131, 238, 238, 131, 131, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 49, 172, 173, - 174, 177, 178, 180, 181, 183, 185, 188, 190, 191, - 196, 200, 204, 205, 206, 211, 216, 511, 512, 49, - 51, 52, 172, 173, 174, 177, 178, 180, 181, 183, - 185, 188, 190, 191, 196, 200, 204, 205, 206, 211, - 216, 507, 508, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 131, 219, 241, 131, 117, 131, - 131, 131, 238, 131, 131, 238, 131, 131, 241, 117, - 369, 370, 238, 238, 238, 131, 131, 238, 131, 219, - 241, 131, 131, 131, 219, 241, 131, 131, 238, 131, - 131, 131, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 17, 101, 105, 163, - 267, 268, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 238, 238, 238, 131, 241, 238, - 238, 1, 109, 203, 227, 308, 309, 310, 311, 312, - 131, 131, 131, 131, 238, 238, 131, 241, 131, 238, - 247, 247, 247, 247, 247, 247, 247, 238, 238, 238, - 53, 132, 357, 358, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 11, 12, 13, 249, 250, 238, - 238, 238, 238, 238, 238, 238, 238, 238, 8, 207, - 432, 433, 238, 238, 238, 238, 238, 238, 238, 238, - 238, 238, 238, 238, 242, 238, 242, 238, 238, 15, - 41, 74, 110, 111, 116, 140, 155, 218, 237, 383, - 384, 238, 238, 238, 238, 238, 238, 238, 238, 238, - 49, 198, 207, 363, 364, 226, 242, 368, 238, 238, - 238, 238, 4, 21, 22, 32, 70, 71, 73, 106, - 114, 136, 138, 139, 156, 179, 184, 188, 192, 197, - 201, 212, 214, 215, 217, 228, 236, 334, 335, 238, - 238, 238, 238, 49, 51, 52, 172, 173, 174, 177, - 178, 180, 181, 183, 185, 188, 190, 191, 196, 200, - 204, 205, 206, 211, 216, 330, 331, 238, 238, 238, - 238, 238, 238, 242, 238, 73, 139, 171, 179, 188, - 212, 214, 215, 228, 236, 416, 417, 238, 241, 241, - 313, 239, 309, 238, 238, 238, 238, 238, 73, 139, - 171, 179, 188, 212, 214, 215, 228, 236, 407, 408, - 238, 238, 242, 249, 249, 249, 238, 242, 512, 508, - 238, 242, 238, 242, 117, 370, 238, 243, 243, 243, - 243, 243, 243, 238, 242, 238, 242, 268, 238, 242, - 131, 213, 250, 241, 238, 238, 242, 358, 433, 384, - 364, 137, 139, 137, 139, 137, 137, 335, 331, 417, - 238, 238, 238, 71, 73, 122, 139, 178, 179, 230, - 236, 314, 315, 408, 238, 242, 315 + 0, 238, 0, 1, 4, 16, 19, 21, 29, 41, + 46, 47, 66, 70, 80, 101, 102, 116, 133, 145, + 146, 169, 182, 187, 192, 195, 239, 244, 249, 269, + 275, 281, 289, 303, 323, 346, 360, 375, 382, 386, + 396, 405, 426, 432, 438, 442, 448, 504, 521, 231, + 232, 233, 233, 324, 406, 433, 233, 443, 233, 361, + 427, 347, 233, 276, 304, 376, 233, 233, 397, 233, + 282, 233, 387, 1, 30, 38, 103, 270, 271, 272, + 273, 274, 1, 26, 27, 33, 61, 62, 63, 64, + 76, 77, 78, 83, 84, 85, 88, 505, 506, 507, + 508, 509, 510, 511, 512, 513, 514, 515, 516, 517, + 518, 519, 520, 233, 233, 233, 1, 65, 439, 440, + 441, 233, 1, 6, 7, 9, 10, 14, 23, 24, + 25, 32, 35, 36, 37, 42, 59, 60, 71, 74, + 75, 82, 90, 92, 94, 96, 98, 99, 109, 114, + 115, 117, 118, 119, 122, 147, 157, 158, 159, 160, + 161, 162, 163, 213, 214, 215, 217, 218, 226, 228, + 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, + 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, + 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 492, 496, 500, 501, 502, 503, 233, + 233, 233, 1, 100, 121, 245, 246, 247, 248, 233, + 233, 233, 1, 34, 43, 44, 45, 48, 49, 53, + 54, 55, 522, 523, 524, 525, 526, 527, 528, 529, + 530, 531, 532, 1, 28, 30, 57, 68, 91, 95, + 103, 106, 107, 135, 151, 154, 155, 156, 201, 224, + 225, 250, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 233, 1, 222, 290, 291, 292, 293, 294, 233, 1, + 103, 383, 384, 385, 233, 231, 234, 234, 234, 232, + 271, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 232, 506, 1, 17, 18, + 22, 67, 85, 86, 87, 89, 93, 97, 103, 112, + 113, 123, 144, 188, 325, 326, 327, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, + 341, 342, 1, 3, 5, 19, 39, 56, 58, 67, + 79, 103, 124, 143, 152, 201, 224, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 421, 422, + 423, 424, 425, 1, 65, 127, 434, 435, 436, 437, + 234, 232, 440, 1, 103, 127, 444, 445, 446, 447, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 497, 493, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 232, 450, 1, + 19, 39, 67, 120, 128, 129, 148, 223, 362, 363, + 364, 365, 366, 367, 368, 372, 373, 374, 1, 127, + 223, 428, 429, 430, 431, 1, 56, 65, 67, 124, + 348, 352, 353, 354, 358, 359, 231, 234, 234, 232, + 246, 1, 81, 175, 277, 278, 279, 280, 1, 19, + 39, 67, 103, 120, 152, 153, 203, 223, 227, 305, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 319, 1, 41, 81, 127, 377, 378, 379, 380, 381, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 232, + 523, 231, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 234, 234, 234, 234, 234, 234, 232, + 251, 1, 103, 220, 398, 399, 400, 401, 231, 234, + 232, 291, 175, 1, 103, 168, 186, 202, 283, 284, + 285, 286, 287, 288, 234, 232, 384, 1, 103, 220, + 223, 388, 389, 390, 391, 392, 125, 125, 125, 231, + 111, 111, 241, 212, 111, 241, 241, 241, 111, 241, + 241, 111, 111, 111, 111, 231, 231, 234, 234, 234, + 343, 234, 234, 234, 234, 234, 234, 234, 234, 234, + 234, 234, 234, 232, 326, 231, 234, 234, 234, 234, + 234, 234, 418, 234, 234, 234, 234, 234, 234, 234, + 232, 408, 234, 234, 232, 435, 125, 231, 234, 234, + 232, 445, 212, 241, 111, 241, 241, 212, 111, 241, + 212, 111, 111, 111, 212, 212, 212, 241, 111, 111, + 111, 111, 241, 111, 111, 111, 111, 212, 234, 234, + 212, 241, 241, 212, 212, 212, 212, 216, 212, 216, + 212, 212, 212, 212, 111, 241, 212, 241, 241, 212, + 111, 231, 231, 234, 234, 369, 234, 234, 234, 234, + 234, 232, 363, 234, 234, 232, 429, 231, 234, 234, + 349, 234, 232, 353, 125, 125, 231, 231, 234, 234, + 232, 278, 231, 234, 234, 320, 234, 234, 234, 234, + 316, 234, 234, 232, 306, 231, 234, 234, 234, 232, + 378, 212, 212, 241, 125, 212, 125, 212, 212, 212, + 231, 111, 125, 212, 125, 111, 111, 125, 125, 125, + 125, 125, 125, 125, 125, 125, 125, 125, 231, 231, + 234, 402, 232, 399, 212, 231, 233, 231, 234, 234, + 234, 234, 232, 284, 125, 231, 231, 234, 393, 234, + 232, 389, 231, 231, 231, 231, 136, 137, 138, 139, + 140, 141, 142, 240, 241, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 111, 111, + 241, 234, 111, 111, 241, 111, 111, 241, 125, 111, + 111, 241, 111, 243, 243, 231, 125, 179, 180, 125, + 212, 125, 125, 234, 125, 125, 111, 125, 125, 125, + 125, 231, 125, 125, 231, 231, 125, 125, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 48, 165, 166, 167, 170, + 171, 173, 174, 176, 178, 181, 183, 184, 189, 193, + 197, 198, 199, 204, 209, 498, 499, 48, 50, 51, + 165, 166, 167, 170, 171, 173, 174, 176, 178, 181, + 183, 184, 189, 193, 197, 198, 199, 204, 209, 494, + 495, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 125, 212, 234, 125, 111, 125, 125, 125, + 231, 125, 125, 231, 125, 125, 234, 111, 356, 357, + 231, 231, 231, 125, 125, 231, 125, 212, 234, 125, + 125, 125, 212, 234, 125, 125, 231, 125, 125, 125, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 231, 231, 231, 125, 234, 231, + 231, 1, 103, 196, 220, 295, 296, 297, 298, 299, + 125, 125, 125, 125, 231, 231, 125, 234, 125, 231, + 240, 240, 240, 240, 240, 240, 240, 231, 231, 231, + 52, 126, 344, 345, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 11, 12, 13, 242, 243, 231, + 231, 231, 231, 231, 231, 231, 231, 231, 8, 200, + 419, 420, 231, 231, 231, 231, 231, 231, 231, 231, + 231, 231, 231, 231, 235, 231, 235, 231, 231, 15, + 40, 73, 104, 105, 110, 134, 149, 211, 230, 370, + 371, 231, 231, 231, 231, 231, 231, 231, 231, 231, + 48, 191, 200, 350, 351, 219, 235, 355, 231, 231, + 231, 231, 4, 20, 21, 31, 69, 70, 72, 100, + 108, 130, 132, 133, 150, 172, 177, 181, 185, 190, + 194, 205, 207, 208, 210, 221, 229, 321, 322, 231, + 231, 231, 231, 48, 50, 51, 165, 166, 167, 170, + 171, 173, 174, 176, 178, 181, 183, 184, 189, 193, + 197, 198, 199, 204, 209, 317, 318, 231, 231, 231, + 231, 231, 231, 72, 133, 164, 172, 181, 205, 207, + 208, 221, 229, 403, 404, 231, 234, 234, 300, 232, + 296, 231, 231, 231, 231, 231, 72, 133, 164, 172, + 181, 205, 207, 208, 221, 229, 394, 395, 231, 231, + 235, 242, 242, 242, 231, 235, 499, 495, 231, 235, + 231, 235, 111, 357, 231, 236, 236, 236, 236, 236, + 236, 231, 235, 231, 235, 231, 235, 125, 206, 243, + 234, 231, 231, 235, 345, 420, 371, 351, 131, 133, + 131, 133, 131, 131, 322, 318, 404, 231, 231, 231, + 70, 72, 116, 133, 171, 172, 223, 229, 301, 302, + 395, 231, 235, 302 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 244, 245, 245, 246, 246, 246, 246, 246, 246, - 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, - 246, 246, 246, 246, 246, 246, 246, 246, 247, 247, - 248, 248, 248, 248, 248, 248, 248, 248, 249, 249, - 250, 250, 250, 250, 251, 252, 252, 253, 253, 253, - 254, 255, 256, 257, 257, 258, 258, 258, 258, 258, - 258, 258, 258, 258, 258, 258, 258, 258, 258, 258, - 258, 258, 258, 258, 258, 258, 259, 260, 261, 262, - 263, 264, 266, 265, 267, 267, 268, 268, 268, 268, - 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, - 279, 280, 281, 282, 283, 283, 284, 284, 284, 284, - 285, 286, 287, 289, 288, 290, 290, 291, 291, 291, - 292, 293, 295, 294, 296, 296, 297, 297, 297, 297, - 297, 298, 299, 300, 301, 302, 303, 303, 304, 304, - 304, 305, 307, 306, 308, 308, 309, 309, 309, 309, - 310, 311, 311, 313, 312, 314, 314, 315, 315, 315, - 315, 315, 315, 315, 315, 317, 316, 318, 318, 319, - 319, 319, 319, 319, 319, 319, 319, 319, 319, 319, - 320, 321, 322, 323, 324, 325, 326, 327, 329, 328, - 330, 330, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 331, 331, 331, 331, 331, 331, - 331, 331, 331, 331, 333, 332, 334, 334, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 335, 335, 335, - 335, 335, 335, 335, 335, 335, 335, 337, 336, 338, - 338, 339, 339, 339, 339, 339, 339, 339, 339, 339, - 339, 339, 339, 339, 339, 339, 339, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 356, 355, 357, 357, 358, 358, 360, - 359, 362, 361, 363, 363, 364, 364, 364, 365, 365, - 366, 366, 366, 366, 366, 368, 367, 369, 369, 370, - 370, 371, 372, 374, 373, 375, 375, 376, 376, 376, - 376, 376, 376, 376, 376, 376, 377, 378, 379, 380, - 382, 381, 383, 383, 384, 384, 384, 384, 384, 384, - 384, 384, 384, 384, 385, 386, 387, 389, 388, 390, - 390, 391, 391, 391, 391, 392, 393, 394, 395, 396, - 396, 397, 397, 398, 400, 399, 401, 401, 402, 402, - 402, 402, 403, 404, 406, 405, 407, 407, 408, 408, - 408, 408, 408, 408, 408, 408, 408, 408, 410, 409, - 411, 411, 412, 412, 412, 413, 415, 414, 416, 416, - 417, 417, 417, 417, 417, 417, 417, 417, 417, 417, - 419, 418, 420, 420, 421, 421, 421, 421, 421, 421, - 421, 421, 421, 421, 421, 421, 421, 421, 421, 422, - 423, 424, 425, 426, 427, 428, 429, 429, 431, 430, - 432, 432, 433, 433, 434, 435, 436, 437, 438, 440, - 439, 441, 441, 442, 442, 442, 443, 444, 446, 445, - 447, 447, 448, 448, 448, 449, 450, 451, 452, 452, - 453, 453, 454, 456, 455, 457, 457, 458, 458, 458, - 459, 460, 461, 462, 462, 463, 463, 463, 463, 463, - 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, - 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, - 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, - 463, 463, 463, 463, 463, 463, 463, 463, 463, 463, - 463, 463, 463, 464, 465, 466, 467, 468, 469, 470, - 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, - 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, - 491, 491, 492, 492, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 506, 505, 507, 507, - 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, - 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, - 508, 508, 510, 509, 511, 511, 512, 512, 512, 512, - 512, 512, 512, 512, 512, 512, 512, 512, 512, 512, - 512, 512, 512, 512, 512, 512, 513, 514, 515, 516, - 517, 518, 518, 519, 519, 519, 519, 519, 519, 519, - 519, 519, 519, 519, 519, 519, 519, 519, 520, 521, - 522, 523, 524, 525, 526, 527, 528, 529, 530, 531, - 532, 533, 534, 535, 535, 536, 536, 536, 536, 536, - 536, 536, 536, 536, 536, 537, 538, 539, 540, 541, - 542, 543, 544, 545 + 0, 237, 238, 238, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 239, 239, + 239, 239, 239, 239, 239, 239, 239, 239, 240, 240, + 241, 241, 241, 241, 241, 241, 241, 241, 242, 242, + 243, 243, 243, 243, 244, 245, 245, 246, 246, 246, + 247, 248, 249, 250, 250, 251, 251, 251, 251, 251, + 251, 251, 251, 251, 251, 251, 251, 251, 251, 251, + 251, 251, 251, 252, 253, 254, 255, 256, 257, 258, + 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, + 269, 270, 270, 271, 271, 271, 271, 272, 273, 274, + 276, 275, 277, 277, 278, 278, 278, 279, 280, 282, + 281, 283, 283, 284, 284, 284, 284, 284, 285, 286, + 287, 288, 289, 290, 290, 291, 291, 291, 292, 294, + 293, 295, 295, 296, 296, 296, 296, 297, 298, 298, + 300, 299, 301, 301, 302, 302, 302, 302, 302, 302, + 302, 302, 304, 303, 305, 305, 306, 306, 306, 306, + 306, 306, 306, 306, 306, 306, 306, 307, 308, 309, + 310, 311, 312, 313, 314, 316, 315, 317, 317, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 318, 318, 318, 318, 318, 318, 318, 318, 318, + 318, 320, 319, 321, 321, 322, 322, 322, 322, 322, + 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + 322, 322, 322, 322, 322, 322, 322, 322, 322, 322, + 322, 322, 322, 322, 324, 323, 325, 325, 326, 326, + 326, 326, 326, 326, 326, 326, 326, 326, 326, 326, + 326, 326, 326, 326, 326, 327, 328, 329, 330, 331, + 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, + 343, 342, 344, 344, 345, 345, 347, 346, 349, 348, + 350, 350, 351, 351, 351, 352, 352, 353, 353, 353, + 353, 353, 355, 354, 356, 356, 357, 357, 358, 359, + 361, 360, 362, 362, 363, 363, 363, 363, 363, 363, + 363, 363, 363, 364, 365, 366, 367, 369, 368, 370, + 370, 371, 371, 371, 371, 371, 371, 371, 371, 371, + 371, 372, 373, 374, 376, 375, 377, 377, 378, 378, + 378, 378, 379, 380, 381, 382, 383, 383, 384, 384, + 385, 387, 386, 388, 388, 389, 389, 389, 389, 390, + 391, 393, 392, 394, 394, 395, 395, 395, 395, 395, + 395, 395, 395, 395, 395, 397, 396, 398, 398, 399, + 399, 399, 400, 402, 401, 403, 403, 404, 404, 404, + 404, 404, 404, 404, 404, 404, 404, 406, 405, 407, + 407, 408, 408, 408, 408, 408, 408, 408, 408, 408, + 408, 408, 408, 408, 408, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 416, 418, 417, 419, 419, 420, + 420, 421, 422, 423, 424, 425, 427, 426, 428, 428, + 429, 429, 429, 430, 431, 433, 432, 434, 434, 435, + 435, 435, 436, 437, 438, 439, 439, 440, 440, 441, + 443, 442, 444, 444, 445, 445, 445, 446, 447, 448, + 449, 449, 450, 450, 450, 450, 450, 450, 450, 450, + 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, + 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, + 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, + 450, 450, 450, 450, 450, 450, 450, 450, 450, 450, + 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, + 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, + 471, 472, 473, 474, 475, 476, 477, 478, 478, 479, + 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, + 489, 490, 491, 493, 492, 494, 494, 495, 495, 495, + 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, + 495, 495, 495, 495, 495, 495, 495, 495, 495, 497, + 496, 498, 498, 499, 499, 499, 499, 499, 499, 499, + 499, 499, 499, 499, 499, 499, 499, 499, 499, 499, + 499, 499, 499, 500, 501, 502, 503, 504, 505, 505, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 507, 508, 509, 510, 511, + 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, + 522, 522, 523, 523, 523, 523, 523, 523, 523, 523, + 523, 523, 524, 525, 526, 527, 528, 529, 530, 531, + 532 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -2171,68 +2139,67 @@ 2, 3, 3, 3, 5, 2, 1, 1, 1, 2, 4, 4, 5, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 4, 4, 4, 4, - 4, 4, 0, 5, 3, 1, 1, 1, 1, 1, + 1, 1, 2, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 5, 2, 1, 1, 1, 1, 2, - 4, 4, 4, 0, 6, 2, 1, 1, 1, 2, - 4, 4, 0, 6, 2, 1, 1, 1, 1, 1, - 2, 4, 4, 4, 4, 5, 2, 1, 1, 1, - 2, 4, 0, 6, 2, 1, 1, 1, 1, 2, - 4, 4, 4, 0, 5, 3, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 0, 6, 2, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, - 4, 4, 4, 4, 4, 4, 4, 4, 0, 5, - 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 5, 2, 1, 1, 1, 1, 2, 4, 4, 4, + 0, 6, 2, 1, 1, 1, 2, 4, 4, 0, + 6, 2, 1, 1, 1, 1, 1, 2, 4, 4, + 4, 4, 5, 2, 1, 1, 1, 2, 4, 0, + 6, 2, 1, 1, 1, 1, 2, 4, 4, 4, + 0, 5, 3, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 0, 6, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 2, 4, 4, 4, + 4, 4, 4, 4, 4, 0, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 0, 5, 3, 1, 3, 1, - 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 3, 3, 1, 1, 1, 0, 6, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 2, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 0, 5, 3, 1, 1, 1, 0, - 6, 0, 5, 3, 1, 1, 1, 1, 2, 1, - 1, 1, 1, 1, 2, 0, 5, 3, 1, 1, - 3, 4, 4, 0, 6, 2, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 2, 4, 4, 4, 4, - 0, 5, 3, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 4, 4, 4, 0, 6, 2, - 1, 1, 1, 1, 2, 4, 4, 4, 5, 2, - 1, 1, 1, 4, 0, 6, 2, 1, 1, 1, - 1, 2, 4, 4, 0, 5, 3, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 0, 6, - 2, 1, 1, 1, 2, 4, 0, 5, 3, 1, + 1, 0, 5, 3, 1, 3, 1, 3, 1, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, + 3, 1, 1, 1, 0, 6, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 2, 4, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 0, 5, 3, 1, 1, 1, 0, 6, 0, 5, + 3, 1, 1, 1, 1, 2, 1, 1, 1, 1, + 1, 2, 0, 5, 3, 1, 1, 3, 4, 4, 0, 6, 2, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 0, 5, - 3, 1, 1, 1, 4, 4, 4, 4, 4, 0, - 6, 2, 1, 1, 1, 1, 4, 4, 0, 6, - 2, 1, 1, 1, 1, 4, 4, 5, 2, 1, - 1, 1, 4, 0, 6, 2, 1, 1, 1, 1, - 4, 4, 5, 2, 1, 1, 1, 1, 1, 1, + 1, 1, 2, 4, 4, 4, 4, 0, 5, 3, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 4, 4, 4, 0, 6, 2, 1, 1, 1, + 1, 2, 4, 4, 4, 5, 2, 1, 1, 1, + 4, 0, 6, 2, 1, 1, 1, 1, 2, 4, + 4, 0, 5, 3, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 0, 6, 2, 1, 1, + 1, 2, 4, 0, 5, 3, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 0, 6, 2, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 2, 4, 4, 4, 4, + 4, 4, 4, 4, 4, 0, 5, 3, 1, 1, + 1, 4, 4, 4, 4, 4, 0, 6, 2, 1, + 1, 1, 1, 4, 4, 0, 6, 2, 1, 1, + 1, 1, 4, 4, 5, 2, 1, 1, 1, 4, + 0, 6, 2, 1, 1, 1, 1, 4, 4, 5, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 4, 4, 4, 4, 0, 5, 3, 1, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, + 4, 4, 4, 0, 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, + 5, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 0, 5, 3, 1, 1, 1, 1, 1, + 1, 1, 1, 4, 4, 4, 4, 5, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, - 5, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, - 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, - 4, 4, 5, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, 4, 4, 4, 4, - 4, 4, 4, 4 + 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, + 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 4, 4, 4, 4, 4, 4, 4, 4, + 4 }; @@ -2909,109 +2876,109 @@ switch (yyn) { case 28: -#line 413 "conf_parser.y" /* yacc.c:1646 */ +#line 407 "conf_parser.y" /* yacc.c:1646 */ { (yyval.number) = 0; } -#line 2915 "conf_parser.c" /* yacc.c:1646 */ +#line 2882 "conf_parser.c" /* yacc.c:1646 */ break; case 30: -#line 414 "conf_parser.y" /* yacc.c:1646 */ +#line 408 "conf_parser.y" /* yacc.c:1646 */ { (yyval.number) = (yyvsp[-1].number) + (yyvsp[0].number); } -#line 2921 "conf_parser.c" /* yacc.c:1646 */ +#line 2888 "conf_parser.c" /* yacc.c:1646 */ break; case 31: -#line 415 "conf_parser.y" /* yacc.c:1646 */ +#line 409 "conf_parser.y" /* yacc.c:1646 */ { (yyval.number) = (yyvsp[-2].number) + (yyvsp[0].number); } -#line 2927 "conf_parser.c" /* yacc.c:1646 */ +#line 2894 "conf_parser.c" /* yacc.c:1646 */ break; case 32: -#line 416 "conf_parser.y" /* yacc.c:1646 */ +#line 410 "conf_parser.y" /* yacc.c:1646 */ { (yyval.number) = (yyvsp[-2].number) * 60 + (yyvsp[0].number); } -#line 2933 "conf_parser.c" /* yacc.c:1646 */ +#line 2900 "conf_parser.c" /* yacc.c:1646 */ break; case 33: -#line 417 "conf_parser.y" /* yacc.c:1646 */ +#line 411 "conf_parser.y" /* yacc.c:1646 */ { (yyval.number) = (yyvsp[-2].number) * 60 * 60 + (yyvsp[0].number); } -#line 2939 "conf_parser.c" /* yacc.c:1646 */ +#line 2906 "conf_parser.c" /* yacc.c:1646 */ break; case 34: -#line 418 "conf_parser.y" /* yacc.c:1646 */ +#line 412 "conf_parser.y" /* yacc.c:1646 */ { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 + (yyvsp[0].number); } -#line 2945 "conf_parser.c" /* yacc.c:1646 */ +#line 2912 "conf_parser.c" /* yacc.c:1646 */ break; case 35: -#line 419 "conf_parser.y" /* yacc.c:1646 */ +#line 413 "conf_parser.y" /* yacc.c:1646 */ { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 * 7 + (yyvsp[0].number); } -#line 2951 "conf_parser.c" /* yacc.c:1646 */ +#line 2918 "conf_parser.c" /* yacc.c:1646 */ break; case 36: -#line 420 "conf_parser.y" /* yacc.c:1646 */ +#line 414 "conf_parser.y" /* yacc.c:1646 */ { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 * 7 * 4 + (yyvsp[0].number); } -#line 2957 "conf_parser.c" /* yacc.c:1646 */ +#line 2924 "conf_parser.c" /* yacc.c:1646 */ break; case 37: -#line 421 "conf_parser.y" /* yacc.c:1646 */ +#line 415 "conf_parser.y" /* yacc.c:1646 */ { (yyval.number) = (yyvsp[-2].number) * 60 * 60 * 24 * 365 + (yyvsp[0].number); } -#line 2963 "conf_parser.c" /* yacc.c:1646 */ +#line 2930 "conf_parser.c" /* yacc.c:1646 */ break; case 38: -#line 424 "conf_parser.y" /* yacc.c:1646 */ +#line 418 "conf_parser.y" /* yacc.c:1646 */ { (yyval.number) = 0; } -#line 2969 "conf_parser.c" /* yacc.c:1646 */ +#line 2936 "conf_parser.c" /* yacc.c:1646 */ break; case 40: -#line 425 "conf_parser.y" /* yacc.c:1646 */ +#line 419 "conf_parser.y" /* yacc.c:1646 */ { (yyval.number) = (yyvsp[-1].number) + (yyvsp[0].number); } -#line 2975 "conf_parser.c" /* yacc.c:1646 */ +#line 2942 "conf_parser.c" /* yacc.c:1646 */ break; case 41: -#line 426 "conf_parser.y" /* yacc.c:1646 */ +#line 420 "conf_parser.y" /* yacc.c:1646 */ { (yyval.number) = (yyvsp[-2].number) + (yyvsp[0].number); } -#line 2981 "conf_parser.c" /* yacc.c:1646 */ +#line 2948 "conf_parser.c" /* yacc.c:1646 */ break; case 42: -#line 427 "conf_parser.y" /* yacc.c:1646 */ +#line 421 "conf_parser.y" /* yacc.c:1646 */ { (yyval.number) = (yyvsp[-2].number) * 1024 + (yyvsp[0].number); } -#line 2987 "conf_parser.c" /* yacc.c:1646 */ +#line 2954 "conf_parser.c" /* yacc.c:1646 */ break; case 43: -#line 428 "conf_parser.y" /* yacc.c:1646 */ +#line 422 "conf_parser.y" /* yacc.c:1646 */ { (yyval.number) = (yyvsp[-2].number) * 1024 * 1024 + (yyvsp[0].number); } -#line 2993 "conf_parser.c" /* yacc.c:1646 */ +#line 2960 "conf_parser.c" /* yacc.c:1646 */ break; case 50: -#line 441 "conf_parser.y" /* yacc.c:1646 */ +#line 435 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) add_conf_module(libio_basename(yylval.string)); } -#line 3002 "conf_parser.c" /* yacc.c:1646 */ +#line 2969 "conf_parser.c" /* yacc.c:1646 */ break; case 51: -#line 447 "conf_parser.y" /* yacc.c:1646 */ +#line 441 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) mod_add_path(yylval.string); } -#line 3011 "conf_parser.c" /* yacc.c:1646 */ +#line 2978 "conf_parser.c" /* yacc.c:1646 */ break; - case 76: -#line 483 "conf_parser.y" /* yacc.c:1646 */ + case 73: +#line 474 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) { @@ -3019,11 +2986,11 @@ ConfigServerInfo.ssl_certificate_file = xstrdup(yylval.string); } } -#line 3023 "conf_parser.c" /* yacc.c:1646 */ +#line 2990 "conf_parser.c" /* yacc.c:1646 */ break; - case 77: -#line 492 "conf_parser.y" /* yacc.c:1646 */ + case 74: +#line 483 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) { @@ -3031,11 +2998,11 @@ ConfigServerInfo.rsa_private_key_file = xstrdup(yylval.string); } } -#line 3035 "conf_parser.c" /* yacc.c:1646 */ +#line 3002 "conf_parser.c" /* yacc.c:1646 */ break; - case 78: -#line 501 "conf_parser.y" /* yacc.c:1646 */ + case 75: +#line 492 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) { @@ -3043,11 +3010,11 @@ ConfigServerInfo.ssl_dh_param_file = xstrdup(yylval.string); } } -#line 3047 "conf_parser.c" /* yacc.c:1646 */ +#line 3014 "conf_parser.c" /* yacc.c:1646 */ break; - case 79: -#line 510 "conf_parser.y" /* yacc.c:1646 */ + case 76: +#line 501 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) { @@ -3055,11 +3022,11 @@ ConfigServerInfo.ssl_cipher_list = xstrdup(yylval.string); } } -#line 3059 "conf_parser.c" /* yacc.c:1646 */ +#line 3026 "conf_parser.c" /* yacc.c:1646 */ break; - case 80: -#line 519 "conf_parser.y" /* yacc.c:1646 */ + case 77: +#line 510 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) { @@ -3067,11 +3034,11 @@ ConfigServerInfo.ssl_message_digest_algorithm = xstrdup(yylval.string); } } -#line 3071 "conf_parser.c" /* yacc.c:1646 */ +#line 3038 "conf_parser.c" /* yacc.c:1646 */ break; - case 81: -#line 528 "conf_parser.y" /* yacc.c:1646 */ + case 78: +#line 519 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) { @@ -3079,105 +3046,16 @@ ConfigServerInfo.ssl_dh_elliptic_curve = xstrdup(yylval.string); } } -#line 3083 "conf_parser.c" /* yacc.c:1646 */ - break; - - case 82: -#line 537 "conf_parser.y" /* yacc.c:1646 */ - { - if (conf_parser_ctx.pass == 1) - ConfigServerInfo.libgeoip_database_options = 0; -} -#line 3092 "conf_parser.c" /* yacc.c:1646 */ - break; - - case 86: -#line 544 "conf_parser.y" /* yacc.c:1646 */ - { -#ifdef HAVE_LIBGEOIP - if (conf_parser_ctx.pass == 1) - ConfigServerInfo.libgeoip_database_options |= GEOIP_STANDARD; -#endif -} -#line 3103 "conf_parser.c" /* yacc.c:1646 */ - break; - - case 87: -#line 550 "conf_parser.y" /* yacc.c:1646 */ - { -#ifdef HAVE_LIBGEOIP - if (conf_parser_ctx.pass == 1) - ConfigServerInfo.libgeoip_database_options |= GEOIP_MEMORY_CACHE; -#endif -} -#line 3114 "conf_parser.c" /* yacc.c:1646 */ - break; - - case 88: -#line 556 "conf_parser.y" /* yacc.c:1646 */ - { -#ifdef HAVE_LIBGEOIP - if (conf_parser_ctx.pass == 1) - ConfigServerInfo.libgeoip_database_options |= GEOIP_MMAP_CACHE; -#endif -} -#line 3125 "conf_parser.c" /* yacc.c:1646 */ - break; - - case 89: -#line 562 "conf_parser.y" /* yacc.c:1646 */ - { -#ifdef HAVE_LIBGEOIP - if (conf_parser_ctx.pass == 1) - ConfigServerInfo.libgeoip_database_options |= GEOIP_CHECK_CACHE; -#endif -} -#line 3136 "conf_parser.c" /* yacc.c:1646 */ - break; - - case 90: -#line 570 "conf_parser.y" /* yacc.c:1646 */ - { - if (conf_parser_ctx.pass == 2) - { - xfree(ConfigServerInfo.libgeoip_ipv4_database_file); - ConfigServerInfo.libgeoip_ipv4_database_file = xstrdup(yylval.string); - -#ifdef HAVE_LIBGEOIP - if (GeoIPv4_ctx) - GeoIP_delete(GeoIPv4_ctx); - GeoIPv4_ctx = GeoIP_open(yylval.string, ConfigServerInfo.libgeoip_database_options); -#endif - } -} -#line 3154 "conf_parser.c" /* yacc.c:1646 */ - break; - - case 91: -#line 585 "conf_parser.y" /* yacc.c:1646 */ - { - if (conf_parser_ctx.pass == 2) - { - xfree(ConfigServerInfo.libgeoip_ipv6_database_file); - ConfigServerInfo.libgeoip_ipv6_database_file = xstrdup(yylval.string); - -#ifdef HAVE_LIBGEOIP - if (GeoIPv6_ctx) - GeoIP_delete(GeoIPv6_ctx); - GeoIPv6_ctx = GeoIP_open(yylval.string, ConfigServerInfo.libgeoip_database_options); -#endif - } -} -#line 3172 "conf_parser.c" /* yacc.c:1646 */ +#line 3050 "conf_parser.c" /* yacc.c:1646 */ break; - case 92: -#line 600 "conf_parser.y" /* yacc.c:1646 */ + case 79: +#line 528 "conf_parser.y" /* yacc.c:1646 */ { /* This isn't rehashable */ if (conf_parser_ctx.pass == 2 && !ConfigServerInfo.name) { - if (valid_servname(yylval.string)) + if (server_valid_name(yylval.string)) ConfigServerInfo.name = xstrdup(yylval.string); else { @@ -3186,11 +3064,11 @@ } } } -#line 3190 "conf_parser.c" /* yacc.c:1646 */ +#line 3068 "conf_parser.c" /* yacc.c:1646 */ break; - case 93: -#line 615 "conf_parser.y" /* yacc.c:1646 */ + case 80: +#line 543 "conf_parser.y" /* yacc.c:1646 */ { /* This isn't rehashable */ if (conf_parser_ctx.pass == 2 && !ConfigServerInfo.sid) @@ -3204,11 +3082,11 @@ } } } -#line 3208 "conf_parser.c" /* yacc.c:1646 */ +#line 3086 "conf_parser.c" /* yacc.c:1646 */ break; - case 94: -#line 630 "conf_parser.y" /* yacc.c:1646 */ + case 81: +#line 558 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) { @@ -3217,11 +3095,11 @@ strlcpy(me.info, ConfigServerInfo.description, sizeof(me.info)); } } -#line 3221 "conf_parser.c" /* yacc.c:1646 */ +#line 3099 "conf_parser.c" /* yacc.c:1646 */ break; - case 95: -#line 640 "conf_parser.y" /* yacc.c:1646 */ + case 82: +#line 568 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) { @@ -3234,11 +3112,11 @@ ConfigServerInfo.network_name = xstrdup(yylval.string); } } -#line 3238 "conf_parser.c" /* yacc.c:1646 */ +#line 3116 "conf_parser.c" /* yacc.c:1646 */ break; - case 96: -#line 654 "conf_parser.y" /* yacc.c:1646 */ + case 83: +#line 582 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -3246,11 +3124,11 @@ xfree(ConfigServerInfo.network_desc); ConfigServerInfo.network_desc = xstrdup(yylval.string); } -#line 3250 "conf_parser.c" /* yacc.c:1646 */ +#line 3128 "conf_parser.c" /* yacc.c:1646 */ break; - case 97: -#line 663 "conf_parser.y" /* yacc.c:1646 */ + case 84: +#line 591 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2 && *yylval.string != '*') { @@ -3277,11 +3155,11 @@ } } } -#line 3281 "conf_parser.c" /* yacc.c:1646 */ +#line 3159 "conf_parser.c" /* yacc.c:1646 */ break; - case 98: -#line 691 "conf_parser.y" /* yacc.c:1646 */ + case 85: +#line 619 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2 && *yylval.string != '*') { @@ -3308,11 +3186,11 @@ } } } -#line 3312 "conf_parser.c" /* yacc.c:1646 */ +#line 3190 "conf_parser.c" /* yacc.c:1646 */ break; - case 99: -#line 719 "conf_parser.y" /* yacc.c:1646 */ + case 86: +#line 647 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -3336,11 +3214,11 @@ else ConfigServerInfo.default_max_clients = (yyvsp[-1].number); } -#line 3340 "conf_parser.c" /* yacc.c:1646 */ +#line 3218 "conf_parser.c" /* yacc.c:1646 */ break; - case 100: -#line 744 "conf_parser.y" /* yacc.c:1646 */ + case 87: +#line 672 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -3361,11 +3239,11 @@ else ConfigServerInfo.max_nick_length = (yyvsp[-1].number); } -#line 3365 "conf_parser.c" /* yacc.c:1646 */ +#line 3243 "conf_parser.c" /* yacc.c:1646 */ break; - case 101: -#line 766 "conf_parser.y" /* yacc.c:1646 */ + case 88: +#line 694 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -3386,20 +3264,20 @@ else ConfigServerInfo.max_topic_length = (yyvsp[-1].number); } -#line 3390 "conf_parser.c" /* yacc.c:1646 */ +#line 3268 "conf_parser.c" /* yacc.c:1646 */ break; - case 102: -#line 788 "conf_parser.y" /* yacc.c:1646 */ + case 89: +#line 716 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) ConfigServerInfo.hub = yylval.number; } -#line 3399 "conf_parser.c" /* yacc.c:1646 */ +#line 3277 "conf_parser.c" /* yacc.c:1646 */ break; - case 110: -#line 806 "conf_parser.y" /* yacc.c:1646 */ + case 97: +#line 734 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -3407,11 +3285,11 @@ xfree(ConfigAdminInfo.name); ConfigAdminInfo.name = xstrdup(yylval.string); } -#line 3411 "conf_parser.c" /* yacc.c:1646 */ +#line 3289 "conf_parser.c" /* yacc.c:1646 */ break; - case 111: -#line 815 "conf_parser.y" /* yacc.c:1646 */ + case 98: +#line 743 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -3419,11 +3297,11 @@ xfree(ConfigAdminInfo.email); ConfigAdminInfo.email = xstrdup(yylval.string); } -#line 3423 "conf_parser.c" /* yacc.c:1646 */ +#line 3301 "conf_parser.c" /* yacc.c:1646 */ break; - case 112: -#line 824 "conf_parser.y" /* yacc.c:1646 */ + case 99: +#line 752 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -3431,20 +3309,20 @@ xfree(ConfigAdminInfo.description); ConfigAdminInfo.description = xstrdup(yylval.string); } -#line 3435 "conf_parser.c" /* yacc.c:1646 */ +#line 3313 "conf_parser.c" /* yacc.c:1646 */ break; - case 113: -#line 837 "conf_parser.y" /* yacc.c:1646 */ + case 100: +#line 765 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) reset_block_state(); } -#line 3444 "conf_parser.c" /* yacc.c:1646 */ +#line 3322 "conf_parser.c" /* yacc.c:1646 */ break; - case 114: -#line 841 "conf_parser.y" /* yacc.c:1646 */ + case 101: +#line 769 "conf_parser.y" /* yacc.c:1646 */ { dlink_node *node = NULL; @@ -3457,38 +3335,38 @@ DLINK_FOREACH(node, block_state.mask.list.head) motd_add(node->data, block_state.file.buf); } -#line 3461 "conf_parser.c" /* yacc.c:1646 */ +#line 3339 "conf_parser.c" /* yacc.c:1646 */ break; - case 120: -#line 858 "conf_parser.y" /* yacc.c:1646 */ + case 107: +#line 786 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) dlinkAdd(xstrdup(yylval.string), make_dlink_node(), &block_state.mask.list); } -#line 3470 "conf_parser.c" /* yacc.c:1646 */ +#line 3348 "conf_parser.c" /* yacc.c:1646 */ break; - case 121: -#line 864 "conf_parser.y" /* yacc.c:1646 */ + case 108: +#line 792 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.file.buf, yylval.string, sizeof(block_state.file.buf)); } -#line 3479 "conf_parser.c" /* yacc.c:1646 */ +#line 3357 "conf_parser.c" /* yacc.c:1646 */ break; - case 122: -#line 874 "conf_parser.y" /* yacc.c:1646 */ + case 109: +#line 802 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) reset_block_state(); } -#line 3488 "conf_parser.c" /* yacc.c:1646 */ +#line 3366 "conf_parser.c" /* yacc.c:1646 */ break; - case 123: -#line 878 "conf_parser.y" /* yacc.c:1646 */ + case 110: +#line 806 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -3502,38 +3380,38 @@ pseudo_register(block_state.name.buf, block_state.nick.buf, block_state.host.buf, block_state.prepend.buf, block_state.command.buf); } -#line 3506 "conf_parser.c" /* yacc.c:1646 */ +#line 3384 "conf_parser.c" /* yacc.c:1646 */ break; - case 131: -#line 896 "conf_parser.y" /* yacc.c:1646 */ + case 118: +#line 824 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.command.buf, yylval.string, sizeof(block_state.command.buf)); } -#line 3515 "conf_parser.c" /* yacc.c:1646 */ +#line 3393 "conf_parser.c" /* yacc.c:1646 */ break; - case 132: -#line 902 "conf_parser.y" /* yacc.c:1646 */ + case 119: +#line 830 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.name.buf, yylval.string, sizeof(block_state.name.buf)); } -#line 3524 "conf_parser.c" /* yacc.c:1646 */ +#line 3402 "conf_parser.c" /* yacc.c:1646 */ break; - case 133: -#line 908 "conf_parser.y" /* yacc.c:1646 */ + case 120: +#line 836 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.prepend.buf, yylval.string, sizeof(block_state.prepend.buf)); } -#line 3533 "conf_parser.c" /* yacc.c:1646 */ +#line 3411 "conf_parser.c" /* yacc.c:1646 */ break; - case 134: -#line 914 "conf_parser.y" /* yacc.c:1646 */ + case 121: +#line 842 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) { @@ -3550,29 +3428,29 @@ split_nuh(&nuh); } } -#line 3554 "conf_parser.c" /* yacc.c:1646 */ +#line 3432 "conf_parser.c" /* yacc.c:1646 */ break; - case 141: -#line 942 "conf_parser.y" /* yacc.c:1646 */ + case 128: +#line 870 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) ConfigLog.use_logging = yylval.number; } -#line 3563 "conf_parser.c" /* yacc.c:1646 */ +#line 3441 "conf_parser.c" /* yacc.c:1646 */ break; - case 142: -#line 948 "conf_parser.y" /* yacc.c:1646 */ + case 129: +#line 876 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) reset_block_state(); } -#line 3572 "conf_parser.c" /* yacc.c:1646 */ +#line 3450 "conf_parser.c" /* yacc.c:1646 */ break; - case 143: -#line 952 "conf_parser.y" /* yacc.c:1646 */ + case 130: +#line 880 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -3581,119 +3459,119 @@ log_set_file(block_state.type.value, block_state.size.value, block_state.file.buf); } -#line 3585 "conf_parser.c" /* yacc.c:1646 */ +#line 3463 "conf_parser.c" /* yacc.c:1646 */ break; - case 150: -#line 968 "conf_parser.y" /* yacc.c:1646 */ + case 137: +#line 896 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; strlcpy(block_state.file.buf, yylval.string, sizeof(block_state.file.buf)); } -#line 3596 "conf_parser.c" /* yacc.c:1646 */ +#line 3474 "conf_parser.c" /* yacc.c:1646 */ break; - case 151: -#line 976 "conf_parser.y" /* yacc.c:1646 */ + case 138: +#line 904 "conf_parser.y" /* yacc.c:1646 */ { block_state.size.value = (yyvsp[-1].number); } -#line 3604 "conf_parser.c" /* yacc.c:1646 */ +#line 3482 "conf_parser.c" /* yacc.c:1646 */ break; - case 152: -#line 979 "conf_parser.y" /* yacc.c:1646 */ + case 139: +#line 907 "conf_parser.y" /* yacc.c:1646 */ { block_state.size.value = 0; } -#line 3612 "conf_parser.c" /* yacc.c:1646 */ +#line 3490 "conf_parser.c" /* yacc.c:1646 */ break; - case 153: -#line 984 "conf_parser.y" /* yacc.c:1646 */ + case 140: +#line 912 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.type.value = 0; } -#line 3621 "conf_parser.c" /* yacc.c:1646 */ +#line 3499 "conf_parser.c" /* yacc.c:1646 */ break; - case 157: -#line 991 "conf_parser.y" /* yacc.c:1646 */ + case 144: +#line 919 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.type.value = LOG_TYPE_USER; } -#line 3630 "conf_parser.c" /* yacc.c:1646 */ +#line 3508 "conf_parser.c" /* yacc.c:1646 */ break; - case 158: -#line 995 "conf_parser.y" /* yacc.c:1646 */ + case 145: +#line 923 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.type.value = LOG_TYPE_OPER; } -#line 3639 "conf_parser.c" /* yacc.c:1646 */ +#line 3517 "conf_parser.c" /* yacc.c:1646 */ break; - case 159: -#line 999 "conf_parser.y" /* yacc.c:1646 */ + case 146: +#line 927 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.type.value = LOG_TYPE_XLINE; } -#line 3648 "conf_parser.c" /* yacc.c:1646 */ +#line 3526 "conf_parser.c" /* yacc.c:1646 */ break; - case 160: -#line 1003 "conf_parser.y" /* yacc.c:1646 */ + case 147: +#line 931 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.type.value = LOG_TYPE_RESV; } -#line 3657 "conf_parser.c" /* yacc.c:1646 */ +#line 3535 "conf_parser.c" /* yacc.c:1646 */ break; - case 161: -#line 1007 "conf_parser.y" /* yacc.c:1646 */ + case 148: +#line 935 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.type.value = LOG_TYPE_DLINE; } -#line 3666 "conf_parser.c" /* yacc.c:1646 */ +#line 3544 "conf_parser.c" /* yacc.c:1646 */ break; - case 162: -#line 1011 "conf_parser.y" /* yacc.c:1646 */ + case 149: +#line 939 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.type.value = LOG_TYPE_KLINE; } -#line 3675 "conf_parser.c" /* yacc.c:1646 */ +#line 3553 "conf_parser.c" /* yacc.c:1646 */ break; - case 163: -#line 1015 "conf_parser.y" /* yacc.c:1646 */ + case 150: +#line 943 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.type.value = LOG_TYPE_KILL; } -#line 3684 "conf_parser.c" /* yacc.c:1646 */ +#line 3562 "conf_parser.c" /* yacc.c:1646 */ break; - case 164: -#line 1019 "conf_parser.y" /* yacc.c:1646 */ + case 151: +#line 947 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.type.value = LOG_TYPE_DEBUG; } -#line 3693 "conf_parser.c" /* yacc.c:1646 */ +#line 3571 "conf_parser.c" /* yacc.c:1646 */ break; - case 165: -#line 1029 "conf_parser.y" /* yacc.c:1646 */ + case 152: +#line 957 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -3701,11 +3579,11 @@ reset_block_state(); block_state.flags.value |= CONF_FLAGS_ENCRYPTED; } -#line 3705 "conf_parser.c" /* yacc.c:1646 */ +#line 3583 "conf_parser.c" /* yacc.c:1646 */ break; - case 166: -#line 1036 "conf_parser.y" /* yacc.c:1646 */ + case 153: +#line 964 "conf_parser.y" /* yacc.c:1646 */ { dlink_node *node = NULL; @@ -3758,47 +3636,47 @@ conf_add_class_to_conf(conf, block_state.class.buf); } } -#line 3762 "conf_parser.c" /* yacc.c:1646 */ +#line 3640 "conf_parser.c" /* yacc.c:1646 */ break; - case 180: -#line 1103 "conf_parser.y" /* yacc.c:1646 */ + case 167: +#line 1031 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.name.buf, yylval.string, sizeof(block_state.name.buf)); } -#line 3771 "conf_parser.c" /* yacc.c:1646 */ +#line 3649 "conf_parser.c" /* yacc.c:1646 */ break; - case 181: -#line 1109 "conf_parser.y" /* yacc.c:1646 */ + case 168: +#line 1037 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) dlinkAdd(xstrdup(yylval.string), make_dlink_node(), &block_state.mask.list); } -#line 3780 "conf_parser.c" /* yacc.c:1646 */ +#line 3658 "conf_parser.c" /* yacc.c:1646 */ break; - case 182: -#line 1115 "conf_parser.y" /* yacc.c:1646 */ + case 169: +#line 1043 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.rpass.buf, yylval.string, sizeof(block_state.rpass.buf)); } -#line 3789 "conf_parser.c" /* yacc.c:1646 */ +#line 3667 "conf_parser.c" /* yacc.c:1646 */ break; - case 183: -#line 1121 "conf_parser.y" /* yacc.c:1646 */ + case 170: +#line 1049 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.whois.buf, yylval.string, sizeof(block_state.whois.buf)); } -#line 3798 "conf_parser.c" /* yacc.c:1646 */ +#line 3676 "conf_parser.c" /* yacc.c:1646 */ break; - case 184: -#line 1127 "conf_parser.y" /* yacc.c:1646 */ + case 171: +#line 1055 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -3808,20 +3686,20 @@ else block_state.flags.value &= ~CONF_FLAGS_ENCRYPTED; } -#line 3812 "conf_parser.c" /* yacc.c:1646 */ +#line 3690 "conf_parser.c" /* yacc.c:1646 */ break; - case 185: -#line 1138 "conf_parser.y" /* yacc.c:1646 */ + case 172: +#line 1066 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.cert.buf, yylval.string, sizeof(block_state.cert.buf)); } -#line 3821 "conf_parser.c" /* yacc.c:1646 */ +#line 3699 "conf_parser.c" /* yacc.c:1646 */ break; - case 186: -#line 1144 "conf_parser.y" /* yacc.c:1646 */ + case 173: +#line 1072 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -3831,497 +3709,497 @@ else block_state.flags.value &= ~CONF_FLAGS_SSL; } -#line 3835 "conf_parser.c" /* yacc.c:1646 */ +#line 3713 "conf_parser.c" /* yacc.c:1646 */ break; - case 187: -#line 1155 "conf_parser.y" /* yacc.c:1646 */ + case 174: +#line 1083 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.class.buf, yylval.string, sizeof(block_state.class.buf)); } -#line 3844 "conf_parser.c" /* yacc.c:1646 */ +#line 3722 "conf_parser.c" /* yacc.c:1646 */ break; - case 188: -#line 1161 "conf_parser.y" /* yacc.c:1646 */ + case 175: +#line 1089 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value = 0; } -#line 3853 "conf_parser.c" /* yacc.c:1646 */ +#line 3731 "conf_parser.c" /* yacc.c:1646 */ break; - case 192: -#line 1168 "conf_parser.y" /* yacc.c:1646 */ + case 179: +#line 1096 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_BOTS; } -#line 3862 "conf_parser.c" /* yacc.c:1646 */ +#line 3740 "conf_parser.c" /* yacc.c:1646 */ break; - case 193: -#line 1172 "conf_parser.y" /* yacc.c:1646 */ + case 180: +#line 1100 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_CCONN; } -#line 3871 "conf_parser.c" /* yacc.c:1646 */ +#line 3749 "conf_parser.c" /* yacc.c:1646 */ break; - case 194: -#line 1176 "conf_parser.y" /* yacc.c:1646 */ + case 181: +#line 1104 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_DEAF; } -#line 3880 "conf_parser.c" /* yacc.c:1646 */ +#line 3758 "conf_parser.c" /* yacc.c:1646 */ break; - case 195: -#line 1180 "conf_parser.y" /* yacc.c:1646 */ + case 182: +#line 1108 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_DEBUG; } -#line 3889 "conf_parser.c" /* yacc.c:1646 */ +#line 3767 "conf_parser.c" /* yacc.c:1646 */ break; - case 196: -#line 1184 "conf_parser.y" /* yacc.c:1646 */ + case 183: +#line 1112 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_FULL; } -#line 3898 "conf_parser.c" /* yacc.c:1646 */ +#line 3776 "conf_parser.c" /* yacc.c:1646 */ break; - case 197: -#line 1188 "conf_parser.y" /* yacc.c:1646 */ + case 184: +#line 1116 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_HIDDEN; } -#line 3907 "conf_parser.c" /* yacc.c:1646 */ +#line 3785 "conf_parser.c" /* yacc.c:1646 */ break; - case 198: -#line 1192 "conf_parser.y" /* yacc.c:1646 */ + case 185: +#line 1120 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_HIDECHANS; } -#line 3916 "conf_parser.c" /* yacc.c:1646 */ +#line 3794 "conf_parser.c" /* yacc.c:1646 */ break; - case 199: -#line 1196 "conf_parser.y" /* yacc.c:1646 */ + case 186: +#line 1124 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_HIDEIDLE; } -#line 3925 "conf_parser.c" /* yacc.c:1646 */ +#line 3803 "conf_parser.c" /* yacc.c:1646 */ break; - case 200: -#line 1200 "conf_parser.y" /* yacc.c:1646 */ + case 187: +#line 1128 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_SKILL; } -#line 3934 "conf_parser.c" /* yacc.c:1646 */ +#line 3812 "conf_parser.c" /* yacc.c:1646 */ break; - case 201: -#line 1204 "conf_parser.y" /* yacc.c:1646 */ + case 188: +#line 1132 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_NCHANGE; } -#line 3943 "conf_parser.c" /* yacc.c:1646 */ +#line 3821 "conf_parser.c" /* yacc.c:1646 */ break; - case 202: -#line 1208 "conf_parser.y" /* yacc.c:1646 */ + case 189: +#line 1136 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_REJ; } -#line 3952 "conf_parser.c" /* yacc.c:1646 */ +#line 3830 "conf_parser.c" /* yacc.c:1646 */ break; - case 203: -#line 1212 "conf_parser.y" /* yacc.c:1646 */ + case 190: +#line 1140 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_UNAUTH; } -#line 3961 "conf_parser.c" /* yacc.c:1646 */ +#line 3839 "conf_parser.c" /* yacc.c:1646 */ break; - case 204: -#line 1216 "conf_parser.y" /* yacc.c:1646 */ + case 191: +#line 1144 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_SPY; } -#line 3970 "conf_parser.c" /* yacc.c:1646 */ +#line 3848 "conf_parser.c" /* yacc.c:1646 */ break; - case 205: -#line 1220 "conf_parser.y" /* yacc.c:1646 */ + case 192: +#line 1148 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_EXTERNAL; } -#line 3979 "conf_parser.c" /* yacc.c:1646 */ +#line 3857 "conf_parser.c" /* yacc.c:1646 */ break; - case 206: -#line 1224 "conf_parser.y" /* yacc.c:1646 */ + case 193: +#line 1152 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_SERVNOTICE; } -#line 3988 "conf_parser.c" /* yacc.c:1646 */ +#line 3866 "conf_parser.c" /* yacc.c:1646 */ break; - case 207: -#line 1228 "conf_parser.y" /* yacc.c:1646 */ + case 194: +#line 1156 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_INVISIBLE; } -#line 3997 "conf_parser.c" /* yacc.c:1646 */ +#line 3875 "conf_parser.c" /* yacc.c:1646 */ break; - case 208: -#line 1232 "conf_parser.y" /* yacc.c:1646 */ + case 195: +#line 1160 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_WALLOP; } -#line 4006 "conf_parser.c" /* yacc.c:1646 */ +#line 3884 "conf_parser.c" /* yacc.c:1646 */ break; - case 209: -#line 1236 "conf_parser.y" /* yacc.c:1646 */ + case 196: +#line 1164 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_SOFTCALLERID; } -#line 4015 "conf_parser.c" /* yacc.c:1646 */ +#line 3893 "conf_parser.c" /* yacc.c:1646 */ break; - case 210: -#line 1240 "conf_parser.y" /* yacc.c:1646 */ + case 197: +#line 1168 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_CALLERID; } -#line 4024 "conf_parser.c" /* yacc.c:1646 */ +#line 3902 "conf_parser.c" /* yacc.c:1646 */ break; - case 211: -#line 1244 "conf_parser.y" /* yacc.c:1646 */ + case 198: +#line 1172 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_LOCOPS; } -#line 4033 "conf_parser.c" /* yacc.c:1646 */ +#line 3911 "conf_parser.c" /* yacc.c:1646 */ break; - case 212: -#line 1248 "conf_parser.y" /* yacc.c:1646 */ + case 199: +#line 1176 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_REGONLY; } -#line 4042 "conf_parser.c" /* yacc.c:1646 */ +#line 3920 "conf_parser.c" /* yacc.c:1646 */ break; - case 213: -#line 1252 "conf_parser.y" /* yacc.c:1646 */ + case 200: +#line 1180 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.modes.value |= UMODE_FARCONNECT; } -#line 4051 "conf_parser.c" /* yacc.c:1646 */ +#line 3929 "conf_parser.c" /* yacc.c:1646 */ break; - case 214: -#line 1258 "conf_parser.y" /* yacc.c:1646 */ + case 201: +#line 1186 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value = 0; } -#line 4060 "conf_parser.c" /* yacc.c:1646 */ +#line 3938 "conf_parser.c" /* yacc.c:1646 */ break; - case 218: -#line 1265 "conf_parser.y" /* yacc.c:1646 */ + case 205: +#line 1193 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_KILL_REMOTE; } -#line 4069 "conf_parser.c" /* yacc.c:1646 */ +#line 3947 "conf_parser.c" /* yacc.c:1646 */ break; - case 219: -#line 1269 "conf_parser.y" /* yacc.c:1646 */ + case 206: +#line 1197 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_KILL; } -#line 4078 "conf_parser.c" /* yacc.c:1646 */ +#line 3956 "conf_parser.c" /* yacc.c:1646 */ break; - case 220: -#line 1273 "conf_parser.y" /* yacc.c:1646 */ + case 207: +#line 1201 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_CONNECT_REMOTE; } -#line 4087 "conf_parser.c" /* yacc.c:1646 */ +#line 3965 "conf_parser.c" /* yacc.c:1646 */ break; - case 221: -#line 1277 "conf_parser.y" /* yacc.c:1646 */ + case 208: +#line 1205 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_CONNECT; } -#line 4096 "conf_parser.c" /* yacc.c:1646 */ +#line 3974 "conf_parser.c" /* yacc.c:1646 */ break; - case 222: -#line 1281 "conf_parser.y" /* yacc.c:1646 */ + case 209: +#line 1209 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_SQUIT_REMOTE; } -#line 4105 "conf_parser.c" /* yacc.c:1646 */ +#line 3983 "conf_parser.c" /* yacc.c:1646 */ break; - case 223: -#line 1285 "conf_parser.y" /* yacc.c:1646 */ + case 210: +#line 1213 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_SQUIT; } -#line 4114 "conf_parser.c" /* yacc.c:1646 */ +#line 3992 "conf_parser.c" /* yacc.c:1646 */ break; - case 224: -#line 1289 "conf_parser.y" /* yacc.c:1646 */ + case 211: +#line 1217 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_KLINE; } -#line 4123 "conf_parser.c" /* yacc.c:1646 */ +#line 4001 "conf_parser.c" /* yacc.c:1646 */ break; - case 225: -#line 1293 "conf_parser.y" /* yacc.c:1646 */ + case 212: +#line 1221 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_UNKLINE; } -#line 4132 "conf_parser.c" /* yacc.c:1646 */ +#line 4010 "conf_parser.c" /* yacc.c:1646 */ break; - case 226: -#line 1297 "conf_parser.y" /* yacc.c:1646 */ + case 213: +#line 1225 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_DLINE; } -#line 4141 "conf_parser.c" /* yacc.c:1646 */ +#line 4019 "conf_parser.c" /* yacc.c:1646 */ break; - case 227: -#line 1301 "conf_parser.y" /* yacc.c:1646 */ + case 214: +#line 1229 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_UNDLINE; } -#line 4150 "conf_parser.c" /* yacc.c:1646 */ +#line 4028 "conf_parser.c" /* yacc.c:1646 */ break; - case 228: -#line 1305 "conf_parser.y" /* yacc.c:1646 */ + case 215: +#line 1233 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_XLINE; } -#line 4159 "conf_parser.c" /* yacc.c:1646 */ +#line 4037 "conf_parser.c" /* yacc.c:1646 */ break; - case 229: -#line 1309 "conf_parser.y" /* yacc.c:1646 */ + case 216: +#line 1237 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_UNXLINE; } -#line 4168 "conf_parser.c" /* yacc.c:1646 */ +#line 4046 "conf_parser.c" /* yacc.c:1646 */ break; - case 230: -#line 1313 "conf_parser.y" /* yacc.c:1646 */ + case 217: +#line 1241 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_DIE; } -#line 4177 "conf_parser.c" /* yacc.c:1646 */ +#line 4055 "conf_parser.c" /* yacc.c:1646 */ break; - case 231: -#line 1317 "conf_parser.y" /* yacc.c:1646 */ + case 218: +#line 1245 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_RESTART; } -#line 4186 "conf_parser.c" /* yacc.c:1646 */ +#line 4064 "conf_parser.c" /* yacc.c:1646 */ break; - case 232: -#line 1321 "conf_parser.y" /* yacc.c:1646 */ + case 219: +#line 1249 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_REHASH_REMOTE; } -#line 4195 "conf_parser.c" /* yacc.c:1646 */ +#line 4073 "conf_parser.c" /* yacc.c:1646 */ break; - case 233: -#line 1325 "conf_parser.y" /* yacc.c:1646 */ + case 220: +#line 1253 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_REHASH; } -#line 4204 "conf_parser.c" /* yacc.c:1646 */ +#line 4082 "conf_parser.c" /* yacc.c:1646 */ break; - case 234: -#line 1329 "conf_parser.y" /* yacc.c:1646 */ + case 221: +#line 1257 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_ADMIN; } -#line 4213 "conf_parser.c" /* yacc.c:1646 */ +#line 4091 "conf_parser.c" /* yacc.c:1646 */ break; - case 235: -#line 1333 "conf_parser.y" /* yacc.c:1646 */ + case 222: +#line 1261 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_GLOBOPS; } -#line 4222 "conf_parser.c" /* yacc.c:1646 */ +#line 4100 "conf_parser.c" /* yacc.c:1646 */ break; - case 236: -#line 1337 "conf_parser.y" /* yacc.c:1646 */ + case 223: +#line 1265 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_WALLOPS; } -#line 4231 "conf_parser.c" /* yacc.c:1646 */ +#line 4109 "conf_parser.c" /* yacc.c:1646 */ break; - case 237: -#line 1341 "conf_parser.y" /* yacc.c:1646 */ + case 224: +#line 1269 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_LOCOPS; } -#line 4240 "conf_parser.c" /* yacc.c:1646 */ +#line 4118 "conf_parser.c" /* yacc.c:1646 */ break; - case 238: -#line 1345 "conf_parser.y" /* yacc.c:1646 */ + case 225: +#line 1273 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_REMOTEBAN; } -#line 4249 "conf_parser.c" /* yacc.c:1646 */ +#line 4127 "conf_parser.c" /* yacc.c:1646 */ break; - case 239: -#line 1349 "conf_parser.y" /* yacc.c:1646 */ + case 226: +#line 1277 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_SET; } -#line 4258 "conf_parser.c" /* yacc.c:1646 */ +#line 4136 "conf_parser.c" /* yacc.c:1646 */ break; - case 240: -#line 1353 "conf_parser.y" /* yacc.c:1646 */ + case 227: +#line 1281 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_MODULE; } -#line 4267 "conf_parser.c" /* yacc.c:1646 */ +#line 4145 "conf_parser.c" /* yacc.c:1646 */ break; - case 241: -#line 1357 "conf_parser.y" /* yacc.c:1646 */ + case 228: +#line 1285 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_OPME; } -#line 4276 "conf_parser.c" /* yacc.c:1646 */ +#line 4154 "conf_parser.c" /* yacc.c:1646 */ break; - case 242: -#line 1361 "conf_parser.y" /* yacc.c:1646 */ + case 229: +#line 1289 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_NICK_RESV; } -#line 4285 "conf_parser.c" /* yacc.c:1646 */ +#line 4163 "conf_parser.c" /* yacc.c:1646 */ break; - case 243: -#line 1365 "conf_parser.y" /* yacc.c:1646 */ + case 230: +#line 1293 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_JOIN_RESV; } -#line 4294 "conf_parser.c" /* yacc.c:1646 */ +#line 4172 "conf_parser.c" /* yacc.c:1646 */ break; - case 244: -#line 1369 "conf_parser.y" /* yacc.c:1646 */ + case 231: +#line 1297 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_RESV; } -#line 4303 "conf_parser.c" /* yacc.c:1646 */ +#line 4181 "conf_parser.c" /* yacc.c:1646 */ break; - case 245: -#line 1373 "conf_parser.y" /* yacc.c:1646 */ + case 232: +#line 1301 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_UNRESV; } -#line 4312 "conf_parser.c" /* yacc.c:1646 */ +#line 4190 "conf_parser.c" /* yacc.c:1646 */ break; - case 246: -#line 1377 "conf_parser.y" /* yacc.c:1646 */ + case 233: +#line 1305 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value |= OPER_FLAG_CLOSE; } -#line 4321 "conf_parser.c" /* yacc.c:1646 */ +#line 4199 "conf_parser.c" /* yacc.c:1646 */ break; - case 247: -#line 1387 "conf_parser.y" /* yacc.c:1646 */ + case 234: +#line 1315 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 1) break; @@ -4334,11 +4212,11 @@ block_state.max_sendq.value = DEFAULT_SENDQ; block_state.max_recvq.value = DEFAULT_RECVQ; } -#line 4338 "conf_parser.c" /* yacc.c:1646 */ +#line 4216 "conf_parser.c" /* yacc.c:1646 */ break; - case 248: -#line 1399 "conf_parser.y" /* yacc.c:1646 */ + case 235: +#line 1327 "conf_parser.y" /* yacc.c:1646 */ { struct ClassItem *class = NULL; @@ -4381,129 +4259,129 @@ class->cidr_bitlen_ipv6 = block_state.cidr_bitlen_ipv6.value; class->number_per_cidr = block_state.number_per_cidr.value; } -#line 4385 "conf_parser.c" /* yacc.c:1646 */ +#line 4263 "conf_parser.c" /* yacc.c:1646 */ break; - case 268: -#line 1462 "conf_parser.y" /* yacc.c:1646 */ + case 255: +#line 1390 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 1) strlcpy(block_state.class.buf, yylval.string, sizeof(block_state.class.buf)); } -#line 4394 "conf_parser.c" /* yacc.c:1646 */ +#line 4272 "conf_parser.c" /* yacc.c:1646 */ break; - case 269: -#line 1468 "conf_parser.y" /* yacc.c:1646 */ + case 256: +#line 1396 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 1) block_state.ping_freq.value = (yyvsp[-1].number); } -#line 4403 "conf_parser.c" /* yacc.c:1646 */ +#line 4281 "conf_parser.c" /* yacc.c:1646 */ break; - case 270: -#line 1474 "conf_parser.y" /* yacc.c:1646 */ + case 257: +#line 1402 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 1) block_state.max_perip.value = (yyvsp[-1].number); } -#line 4412 "conf_parser.c" /* yacc.c:1646 */ +#line 4290 "conf_parser.c" /* yacc.c:1646 */ break; - case 271: -#line 1480 "conf_parser.y" /* yacc.c:1646 */ + case 258: +#line 1408 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 1) block_state.con_freq.value = (yyvsp[-1].number); } -#line 4421 "conf_parser.c" /* yacc.c:1646 */ +#line 4299 "conf_parser.c" /* yacc.c:1646 */ break; - case 272: -#line 1486 "conf_parser.y" /* yacc.c:1646 */ + case 259: +#line 1414 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 1) block_state.max_channels.value = (yyvsp[-1].number); } -#line 4430 "conf_parser.c" /* yacc.c:1646 */ +#line 4308 "conf_parser.c" /* yacc.c:1646 */ break; - case 273: -#line 1492 "conf_parser.y" /* yacc.c:1646 */ + case 260: +#line 1420 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 1) block_state.max_total.value = (yyvsp[-1].number); } -#line 4439 "conf_parser.c" /* yacc.c:1646 */ +#line 4317 "conf_parser.c" /* yacc.c:1646 */ break; - case 274: -#line 1498 "conf_parser.y" /* yacc.c:1646 */ + case 261: +#line 1426 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 1) block_state.max_global.value = (yyvsp[-1].number); } -#line 4448 "conf_parser.c" /* yacc.c:1646 */ +#line 4326 "conf_parser.c" /* yacc.c:1646 */ break; - case 275: -#line 1504 "conf_parser.y" /* yacc.c:1646 */ + case 262: +#line 1432 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 1) block_state.max_local.value = (yyvsp[-1].number); } -#line 4457 "conf_parser.c" /* yacc.c:1646 */ +#line 4335 "conf_parser.c" /* yacc.c:1646 */ break; - case 276: -#line 1510 "conf_parser.y" /* yacc.c:1646 */ + case 263: +#line 1438 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 1) block_state.max_sendq.value = (yyvsp[-1].number); } -#line 4466 "conf_parser.c" /* yacc.c:1646 */ +#line 4344 "conf_parser.c" /* yacc.c:1646 */ break; - case 277: -#line 1516 "conf_parser.y" /* yacc.c:1646 */ + case 264: +#line 1444 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 1) if ((yyvsp[-1].number) >= CLIENT_FLOOD_MIN && (yyvsp[-1].number) <= CLIENT_FLOOD_MAX) block_state.max_recvq.value = (yyvsp[-1].number); } -#line 4476 "conf_parser.c" /* yacc.c:1646 */ +#line 4354 "conf_parser.c" /* yacc.c:1646 */ break; - case 278: -#line 1523 "conf_parser.y" /* yacc.c:1646 */ + case 265: +#line 1451 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 1) block_state.cidr_bitlen_ipv4.value = (yyvsp[-1].number) > 32 ? 32 : (yyvsp[-1].number); } -#line 4485 "conf_parser.c" /* yacc.c:1646 */ +#line 4363 "conf_parser.c" /* yacc.c:1646 */ break; - case 279: -#line 1529 "conf_parser.y" /* yacc.c:1646 */ + case 266: +#line 1457 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 1) block_state.cidr_bitlen_ipv6.value = (yyvsp[-1].number) > 128 ? 128 : (yyvsp[-1].number); } -#line 4494 "conf_parser.c" /* yacc.c:1646 */ +#line 4372 "conf_parser.c" /* yacc.c:1646 */ break; - case 280: -#line 1535 "conf_parser.y" /* yacc.c:1646 */ + case 267: +#line 1463 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 1) block_state.number_per_cidr.value = (yyvsp[-1].number); } -#line 4503 "conf_parser.c" /* yacc.c:1646 */ +#line 4381 "conf_parser.c" /* yacc.c:1646 */ break; - case 281: -#line 1541 "conf_parser.y" /* yacc.c:1646 */ + case 268: +#line 1469 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 1) break; @@ -4511,11 +4389,11 @@ block_state.min_idle.value = (yyvsp[-1].number); block_state.flags.value |= CLASS_FLAGS_FAKE_IDLE; } -#line 4515 "conf_parser.c" /* yacc.c:1646 */ +#line 4393 "conf_parser.c" /* yacc.c:1646 */ break; - case 282: -#line 1550 "conf_parser.y" /* yacc.c:1646 */ + case 269: +#line 1478 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 1) break; @@ -4523,88 +4401,88 @@ block_state.max_idle.value = (yyvsp[-1].number); block_state.flags.value |= CLASS_FLAGS_FAKE_IDLE; } -#line 4527 "conf_parser.c" /* yacc.c:1646 */ +#line 4405 "conf_parser.c" /* yacc.c:1646 */ break; - case 283: -#line 1559 "conf_parser.y" /* yacc.c:1646 */ + case 270: +#line 1487 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 1) block_state.flags.value &= CLASS_FLAGS_FAKE_IDLE; } -#line 4536 "conf_parser.c" /* yacc.c:1646 */ +#line 4414 "conf_parser.c" /* yacc.c:1646 */ break; - case 287: -#line 1566 "conf_parser.y" /* yacc.c:1646 */ + case 274: +#line 1494 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 1) block_state.flags.value |= CLASS_FLAGS_RANDOM_IDLE; } -#line 4545 "conf_parser.c" /* yacc.c:1646 */ +#line 4423 "conf_parser.c" /* yacc.c:1646 */ break; - case 288: -#line 1570 "conf_parser.y" /* yacc.c:1646 */ + case 275: +#line 1498 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 1) block_state.flags.value |= CLASS_FLAGS_HIDE_IDLE_FROM_OPERS; } -#line 4554 "conf_parser.c" /* yacc.c:1646 */ +#line 4432 "conf_parser.c" /* yacc.c:1646 */ break; - case 289: -#line 1580 "conf_parser.y" /* yacc.c:1646 */ + case 276: +#line 1508 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) reset_block_state(); } -#line 4563 "conf_parser.c" /* yacc.c:1646 */ +#line 4441 "conf_parser.c" /* yacc.c:1646 */ break; - case 291: -#line 1586 "conf_parser.y" /* yacc.c:1646 */ + case 278: +#line 1514 "conf_parser.y" /* yacc.c:1646 */ { block_state.flags.value = 0; } -#line 4571 "conf_parser.c" /* yacc.c:1646 */ +#line 4449 "conf_parser.c" /* yacc.c:1646 */ break; - case 295: -#line 1592 "conf_parser.y" /* yacc.c:1646 */ + case 282: +#line 1520 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= LISTENER_SSL; } -#line 4580 "conf_parser.c" /* yacc.c:1646 */ +#line 4458 "conf_parser.c" /* yacc.c:1646 */ break; - case 296: -#line 1596 "conf_parser.y" /* yacc.c:1646 */ + case 283: +#line 1524 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= LISTENER_HIDDEN; } -#line 4589 "conf_parser.c" /* yacc.c:1646 */ +#line 4467 "conf_parser.c" /* yacc.c:1646 */ break; - case 297: -#line 1600 "conf_parser.y" /* yacc.c:1646 */ + case 284: +#line 1528 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= LISTENER_SERVER; } -#line 4598 "conf_parser.c" /* yacc.c:1646 */ +#line 4476 "conf_parser.c" /* yacc.c:1646 */ break; - case 305: -#line 1608 "conf_parser.y" /* yacc.c:1646 */ + case 292: +#line 1536 "conf_parser.y" /* yacc.c:1646 */ { block_state.flags.value = 0; } -#line 4604 "conf_parser.c" /* yacc.c:1646 */ +#line 4482 "conf_parser.c" /* yacc.c:1646 */ break; - case 309: -#line 1613 "conf_parser.y" /* yacc.c:1646 */ + case 296: +#line 1541 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) { @@ -4618,11 +4496,11 @@ listener_add((yyvsp[0].number), block_state.addr.buf, block_state.flags.value); } } -#line 4622 "conf_parser.c" /* yacc.c:1646 */ +#line 4500 "conf_parser.c" /* yacc.c:1646 */ break; - case 310: -#line 1626 "conf_parser.y" /* yacc.c:1646 */ + case 297: +#line 1554 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) { @@ -4638,38 +4516,38 @@ listener_add(i, block_state.addr.buf, block_state.flags.value); } } -#line 4642 "conf_parser.c" /* yacc.c:1646 */ +#line 4520 "conf_parser.c" /* yacc.c:1646 */ break; - case 311: -#line 1643 "conf_parser.y" /* yacc.c:1646 */ + case 298: +#line 1571 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.addr.buf, yylval.string, sizeof(block_state.addr.buf)); } -#line 4651 "conf_parser.c" /* yacc.c:1646 */ +#line 4529 "conf_parser.c" /* yacc.c:1646 */ break; - case 312: -#line 1649 "conf_parser.y" /* yacc.c:1646 */ + case 299: +#line 1577 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.addr.buf, yylval.string, sizeof(block_state.addr.buf)); } -#line 4660 "conf_parser.c" /* yacc.c:1646 */ +#line 4538 "conf_parser.c" /* yacc.c:1646 */ break; - case 313: -#line 1659 "conf_parser.y" /* yacc.c:1646 */ + case 300: +#line 1587 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) reset_block_state(); } -#line 4669 "conf_parser.c" /* yacc.c:1646 */ +#line 4547 "conf_parser.c" /* yacc.c:1646 */ break; - case 314: -#line 1663 "conf_parser.y" /* yacc.c:1646 */ + case 301: +#line 1591 "conf_parser.y" /* yacc.c:1646 */ { dlink_node *node = NULL; @@ -4710,38 +4588,38 @@ add_conf_by_address(CONF_CLIENT, conf); } } -#line 4714 "conf_parser.c" /* yacc.c:1646 */ +#line 4592 "conf_parser.c" /* yacc.c:1646 */ break; - case 326: -#line 1716 "conf_parser.y" /* yacc.c:1646 */ + case 313: +#line 1644 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) dlinkAdd(xstrdup(yylval.string), make_dlink_node(), &block_state.mask.list); } -#line 4723 "conf_parser.c" /* yacc.c:1646 */ +#line 4601 "conf_parser.c" /* yacc.c:1646 */ break; - case 327: -#line 1722 "conf_parser.y" /* yacc.c:1646 */ + case 314: +#line 1650 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.rpass.buf, yylval.string, sizeof(block_state.rpass.buf)); } -#line 4732 "conf_parser.c" /* yacc.c:1646 */ +#line 4610 "conf_parser.c" /* yacc.c:1646 */ break; - case 328: -#line 1728 "conf_parser.y" /* yacc.c:1646 */ + case 315: +#line 1656 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.class.buf, yylval.string, sizeof(block_state.class.buf)); } -#line 4741 "conf_parser.c" /* yacc.c:1646 */ +#line 4619 "conf_parser.c" /* yacc.c:1646 */ break; - case 329: -#line 1734 "conf_parser.y" /* yacc.c:1646 */ + case 316: +#line 1662 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) { @@ -4751,110 +4629,110 @@ block_state.flags.value &= ~CONF_FLAGS_ENCRYPTED; } } -#line 4755 "conf_parser.c" /* yacc.c:1646 */ +#line 4633 "conf_parser.c" /* yacc.c:1646 */ break; - case 330: -#line 1745 "conf_parser.y" /* yacc.c:1646 */ + case 317: +#line 1673 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value &= (CONF_FLAGS_ENCRYPTED | CONF_FLAGS_SPOOF_IP); } -#line 4764 "conf_parser.c" /* yacc.c:1646 */ +#line 4642 "conf_parser.c" /* yacc.c:1646 */ break; - case 334: -#line 1752 "conf_parser.y" /* yacc.c:1646 */ + case 321: +#line 1680 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CONF_FLAGS_SPOOF_NOTICE; } -#line 4773 "conf_parser.c" /* yacc.c:1646 */ +#line 4651 "conf_parser.c" /* yacc.c:1646 */ break; - case 335: -#line 1756 "conf_parser.y" /* yacc.c:1646 */ + case 322: +#line 1684 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CONF_FLAGS_NOLIMIT; } -#line 4782 "conf_parser.c" /* yacc.c:1646 */ +#line 4660 "conf_parser.c" /* yacc.c:1646 */ break; - case 336: -#line 1760 "conf_parser.y" /* yacc.c:1646 */ + case 323: +#line 1688 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CONF_FLAGS_EXEMPTKLINE; } -#line 4791 "conf_parser.c" /* yacc.c:1646 */ +#line 4669 "conf_parser.c" /* yacc.c:1646 */ break; - case 337: -#line 1764 "conf_parser.y" /* yacc.c:1646 */ + case 324: +#line 1692 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CONF_FLAGS_EXEMPTXLINE; } -#line 4800 "conf_parser.c" /* yacc.c:1646 */ +#line 4678 "conf_parser.c" /* yacc.c:1646 */ break; - case 338: -#line 1768 "conf_parser.y" /* yacc.c:1646 */ + case 325: +#line 1696 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CONF_FLAGS_NEED_IDENTD; } -#line 4809 "conf_parser.c" /* yacc.c:1646 */ +#line 4687 "conf_parser.c" /* yacc.c:1646 */ break; - case 339: -#line 1772 "conf_parser.y" /* yacc.c:1646 */ + case 326: +#line 1700 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CONF_FLAGS_CAN_FLOOD; } -#line 4818 "conf_parser.c" /* yacc.c:1646 */ +#line 4696 "conf_parser.c" /* yacc.c:1646 */ break; - case 340: -#line 1776 "conf_parser.y" /* yacc.c:1646 */ + case 327: +#line 1704 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CONF_FLAGS_NO_TILDE; } -#line 4827 "conf_parser.c" /* yacc.c:1646 */ +#line 4705 "conf_parser.c" /* yacc.c:1646 */ break; - case 341: -#line 1780 "conf_parser.y" /* yacc.c:1646 */ + case 328: +#line 1708 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CONF_FLAGS_EXEMPTRESV; } -#line 4836 "conf_parser.c" /* yacc.c:1646 */ +#line 4714 "conf_parser.c" /* yacc.c:1646 */ break; - case 342: -#line 1784 "conf_parser.y" /* yacc.c:1646 */ + case 329: +#line 1712 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CONF_FLAGS_WEBIRC; } -#line 4845 "conf_parser.c" /* yacc.c:1646 */ +#line 4723 "conf_parser.c" /* yacc.c:1646 */ break; - case 343: -#line 1788 "conf_parser.y" /* yacc.c:1646 */ + case 330: +#line 1716 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CONF_FLAGS_NEED_PASSWORD; } -#line 4854 "conf_parser.c" /* yacc.c:1646 */ +#line 4732 "conf_parser.c" /* yacc.c:1646 */ break; - case 344: -#line 1794 "conf_parser.y" /* yacc.c:1646 */ + case 331: +#line 1722 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -4867,11 +4745,11 @@ else ilog(LOG_TYPE_IRCD, "Spoof either is too long or contains invalid characters. Ignoring it."); } -#line 4871 "conf_parser.c" /* yacc.c:1646 */ +#line 4749 "conf_parser.c" /* yacc.c:1646 */ break; - case 345: -#line 1808 "conf_parser.y" /* yacc.c:1646 */ + case 332: +#line 1736 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -4879,11 +4757,11 @@ strlcpy(block_state.name.buf, yylval.string, sizeof(block_state.name.buf)); block_state.flags.value |= CONF_FLAGS_REDIR; } -#line 4883 "conf_parser.c" /* yacc.c:1646 */ +#line 4761 "conf_parser.c" /* yacc.c:1646 */ break; - case 346: -#line 1817 "conf_parser.y" /* yacc.c:1646 */ + case 333: +#line 1745 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -4891,11 +4769,11 @@ block_state.flags.value |= CONF_FLAGS_REDIR; block_state.port.value = (yyvsp[-1].number); } -#line 4895 "conf_parser.c" /* yacc.c:1646 */ +#line 4773 "conf_parser.c" /* yacc.c:1646 */ break; - case 347: -#line 1830 "conf_parser.y" /* yacc.c:1646 */ + case 334: +#line 1758 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -4903,64 +4781,64 @@ reset_block_state(); strlcpy(block_state.rpass.buf, CONF_NOREASON, sizeof(block_state.rpass.buf)); } -#line 4907 "conf_parser.c" /* yacc.c:1646 */ +#line 4785 "conf_parser.c" /* yacc.c:1646 */ break; - case 348: -#line 1837 "conf_parser.y" /* yacc.c:1646 */ + case 335: +#line 1765 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; resv_make(block_state.name.buf, block_state.rpass.buf, &block_state.mask.list); } -#line 4918 "conf_parser.c" /* yacc.c:1646 */ +#line 4796 "conf_parser.c" /* yacc.c:1646 */ break; - case 355: -#line 1848 "conf_parser.y" /* yacc.c:1646 */ + case 342: +#line 1776 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.name.buf, yylval.string, sizeof(block_state.name.buf)); } -#line 4927 "conf_parser.c" /* yacc.c:1646 */ +#line 4805 "conf_parser.c" /* yacc.c:1646 */ break; - case 356: -#line 1854 "conf_parser.y" /* yacc.c:1646 */ + case 343: +#line 1782 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.rpass.buf, yylval.string, sizeof(block_state.rpass.buf)); } -#line 4936 "conf_parser.c" /* yacc.c:1646 */ +#line 4814 "conf_parser.c" /* yacc.c:1646 */ break; - case 357: -#line 1860 "conf_parser.y" /* yacc.c:1646 */ + case 344: +#line 1788 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) dlinkAdd(xstrdup(yylval.string), make_dlink_node(), &block_state.mask.list); } -#line 4945 "conf_parser.c" /* yacc.c:1646 */ +#line 4823 "conf_parser.c" /* yacc.c:1646 */ break; - case 363: -#line 1875 "conf_parser.y" /* yacc.c:1646 */ + case 350: +#line 1803 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; - if (valid_servname(yylval.string)) + if (server_valid_name(yylval.string)) { struct ServiceItem *service = service_make(); service->name = xstrdup(yylval.string); } } -#line 4960 "conf_parser.c" /* yacc.c:1646 */ +#line 4838 "conf_parser.c" /* yacc.c:1646 */ break; - case 364: -#line 1891 "conf_parser.y" /* yacc.c:1646 */ + case 351: +#line 1819 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -4972,11 +4850,11 @@ strlcpy(block_state.host.buf, "*", sizeof(block_state.host.buf)); block_state.flags.value = SHARED_ALL; } -#line 4976 "conf_parser.c" /* yacc.c:1646 */ +#line 4854 "conf_parser.c" /* yacc.c:1646 */ break; - case 365: -#line 1902 "conf_parser.y" /* yacc.c:1646 */ + case 352: +#line 1830 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -4987,20 +4865,20 @@ shared->user = xstrdup(block_state.user.buf); shared->host = xstrdup(block_state.host.buf); } -#line 4991 "conf_parser.c" /* yacc.c:1646 */ +#line 4869 "conf_parser.c" /* yacc.c:1646 */ break; - case 372: -#line 1917 "conf_parser.y" /* yacc.c:1646 */ + case 359: +#line 1845 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.name.buf, yylval.string, sizeof(block_state.name.buf)); } -#line 5000 "conf_parser.c" /* yacc.c:1646 */ +#line 4878 "conf_parser.c" /* yacc.c:1646 */ break; - case 373: -#line 1923 "conf_parser.y" /* yacc.c:1646 */ + case 360: +#line 1851 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) { @@ -5018,110 +4896,110 @@ split_nuh(&nuh); } } -#line 5022 "conf_parser.c" /* yacc.c:1646 */ +#line 4900 "conf_parser.c" /* yacc.c:1646 */ break; - case 374: -#line 1942 "conf_parser.y" /* yacc.c:1646 */ + case 361: +#line 1870 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value = 0; } -#line 5031 "conf_parser.c" /* yacc.c:1646 */ +#line 4909 "conf_parser.c" /* yacc.c:1646 */ break; - case 378: -#line 1949 "conf_parser.y" /* yacc.c:1646 */ + case 365: +#line 1877 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= SHARED_KLINE; } -#line 5040 "conf_parser.c" /* yacc.c:1646 */ +#line 4918 "conf_parser.c" /* yacc.c:1646 */ break; - case 379: -#line 1953 "conf_parser.y" /* yacc.c:1646 */ + case 366: +#line 1881 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= SHARED_UNKLINE; } -#line 5049 "conf_parser.c" /* yacc.c:1646 */ +#line 4927 "conf_parser.c" /* yacc.c:1646 */ break; - case 380: -#line 1957 "conf_parser.y" /* yacc.c:1646 */ + case 367: +#line 1885 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= SHARED_DLINE; } -#line 5058 "conf_parser.c" /* yacc.c:1646 */ +#line 4936 "conf_parser.c" /* yacc.c:1646 */ break; - case 381: -#line 1961 "conf_parser.y" /* yacc.c:1646 */ + case 368: +#line 1889 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= SHARED_UNDLINE; } -#line 5067 "conf_parser.c" /* yacc.c:1646 */ +#line 4945 "conf_parser.c" /* yacc.c:1646 */ break; - case 382: -#line 1965 "conf_parser.y" /* yacc.c:1646 */ + case 369: +#line 1893 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= SHARED_XLINE; } -#line 5076 "conf_parser.c" /* yacc.c:1646 */ +#line 4954 "conf_parser.c" /* yacc.c:1646 */ break; - case 383: -#line 1969 "conf_parser.y" /* yacc.c:1646 */ + case 370: +#line 1897 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= SHARED_UNXLINE; } -#line 5085 "conf_parser.c" /* yacc.c:1646 */ +#line 4963 "conf_parser.c" /* yacc.c:1646 */ break; - case 384: -#line 1973 "conf_parser.y" /* yacc.c:1646 */ + case 371: +#line 1901 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= SHARED_RESV; } -#line 5094 "conf_parser.c" /* yacc.c:1646 */ +#line 4972 "conf_parser.c" /* yacc.c:1646 */ break; - case 385: -#line 1977 "conf_parser.y" /* yacc.c:1646 */ + case 372: +#line 1905 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= SHARED_UNRESV; } -#line 5103 "conf_parser.c" /* yacc.c:1646 */ +#line 4981 "conf_parser.c" /* yacc.c:1646 */ break; - case 386: -#line 1981 "conf_parser.y" /* yacc.c:1646 */ + case 373: +#line 1909 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= SHARED_LOCOPS; } -#line 5112 "conf_parser.c" /* yacc.c:1646 */ +#line 4990 "conf_parser.c" /* yacc.c:1646 */ break; - case 387: -#line 1985 "conf_parser.y" /* yacc.c:1646 */ + case 374: +#line 1913 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value = SHARED_ALL; } -#line 5121 "conf_parser.c" /* yacc.c:1646 */ +#line 4999 "conf_parser.c" /* yacc.c:1646 */ break; - case 388: -#line 1995 "conf_parser.y" /* yacc.c:1646 */ + case 375: +#line 1923 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -5131,11 +5009,11 @@ strlcpy(block_state.name.buf, "*", sizeof(block_state.name.buf)); block_state.flags.value = CLUSTER_ALL; } -#line 5135 "conf_parser.c" /* yacc.c:1646 */ +#line 5013 "conf_parser.c" /* yacc.c:1646 */ break; - case 389: -#line 2004 "conf_parser.y" /* yacc.c:1646 */ + case 376: +#line 1932 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -5144,119 +5022,119 @@ cluster->type = block_state.flags.value; cluster->server = xstrdup(block_state.name.buf); } -#line 5148 "conf_parser.c" /* yacc.c:1646 */ +#line 5026 "conf_parser.c" /* yacc.c:1646 */ break; - case 395: -#line 2017 "conf_parser.y" /* yacc.c:1646 */ + case 382: +#line 1945 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.name.buf, yylval.string, sizeof(block_state.name.buf)); } -#line 5157 "conf_parser.c" /* yacc.c:1646 */ +#line 5035 "conf_parser.c" /* yacc.c:1646 */ break; - case 396: -#line 2023 "conf_parser.y" /* yacc.c:1646 */ + case 383: +#line 1951 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value = 0; } -#line 5166 "conf_parser.c" /* yacc.c:1646 */ +#line 5044 "conf_parser.c" /* yacc.c:1646 */ break; - case 400: -#line 2030 "conf_parser.y" /* yacc.c:1646 */ + case 387: +#line 1958 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CLUSTER_KLINE; } -#line 5175 "conf_parser.c" /* yacc.c:1646 */ +#line 5053 "conf_parser.c" /* yacc.c:1646 */ break; - case 401: -#line 2034 "conf_parser.y" /* yacc.c:1646 */ + case 388: +#line 1962 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CLUSTER_UNKLINE; } -#line 5184 "conf_parser.c" /* yacc.c:1646 */ +#line 5062 "conf_parser.c" /* yacc.c:1646 */ break; - case 402: -#line 2038 "conf_parser.y" /* yacc.c:1646 */ + case 389: +#line 1966 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CLUSTER_DLINE; } -#line 5193 "conf_parser.c" /* yacc.c:1646 */ +#line 5071 "conf_parser.c" /* yacc.c:1646 */ break; - case 403: -#line 2042 "conf_parser.y" /* yacc.c:1646 */ + case 390: +#line 1970 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CLUSTER_UNDLINE; } -#line 5202 "conf_parser.c" /* yacc.c:1646 */ +#line 5080 "conf_parser.c" /* yacc.c:1646 */ break; - case 404: -#line 2046 "conf_parser.y" /* yacc.c:1646 */ + case 391: +#line 1974 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CLUSTER_XLINE; } -#line 5211 "conf_parser.c" /* yacc.c:1646 */ +#line 5089 "conf_parser.c" /* yacc.c:1646 */ break; - case 405: -#line 2050 "conf_parser.y" /* yacc.c:1646 */ + case 392: +#line 1978 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CLUSTER_UNXLINE; } -#line 5220 "conf_parser.c" /* yacc.c:1646 */ +#line 5098 "conf_parser.c" /* yacc.c:1646 */ break; - case 406: -#line 2054 "conf_parser.y" /* yacc.c:1646 */ + case 393: +#line 1982 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CLUSTER_RESV; } -#line 5229 "conf_parser.c" /* yacc.c:1646 */ +#line 5107 "conf_parser.c" /* yacc.c:1646 */ break; - case 407: -#line 2058 "conf_parser.y" /* yacc.c:1646 */ + case 394: +#line 1986 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CLUSTER_UNRESV; } -#line 5238 "conf_parser.c" /* yacc.c:1646 */ +#line 5116 "conf_parser.c" /* yacc.c:1646 */ break; - case 408: -#line 2062 "conf_parser.y" /* yacc.c:1646 */ + case 395: +#line 1990 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CLUSTER_LOCOPS; } -#line 5247 "conf_parser.c" /* yacc.c:1646 */ +#line 5125 "conf_parser.c" /* yacc.c:1646 */ break; - case 409: -#line 2066 "conf_parser.y" /* yacc.c:1646 */ + case 396: +#line 1994 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value = CLUSTER_ALL; } -#line 5256 "conf_parser.c" /* yacc.c:1646 */ +#line 5134 "conf_parser.c" /* yacc.c:1646 */ break; - case 410: -#line 2076 "conf_parser.y" /* yacc.c:1646 */ + case 397: +#line 2004 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) @@ -5266,11 +5144,11 @@ block_state.aftype.value = AF_INET; block_state.port.value = PORTNUM; } -#line 5270 "conf_parser.c" /* yacc.c:1646 */ +#line 5148 "conf_parser.c" /* yacc.c:1646 */ break; - case 411: -#line 2085 "conf_parser.y" /* yacc.c:1646 */ + case 398: +#line 2013 "conf_parser.y" /* yacc.c:1646 */ { struct MaskItem *conf = NULL; struct addrinfo hints, *res; @@ -5332,38 +5210,38 @@ conf_add_class_to_conf(conf, block_state.class.buf); lookup_confhost(conf); } -#line 5336 "conf_parser.c" /* yacc.c:1646 */ +#line 5214 "conf_parser.c" /* yacc.c:1646 */ break; - case 429: -#line 2165 "conf_parser.y" /* yacc.c:1646 */ + case 416: +#line 2093 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.name.buf, yylval.string, sizeof(block_state.name.buf)); } -#line 5345 "conf_parser.c" /* yacc.c:1646 */ +#line 5223 "conf_parser.c" /* yacc.c:1646 */ break; - case 430: -#line 2171 "conf_parser.y" /* yacc.c:1646 */ + case 417: +#line 2099 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.host.buf, yylval.string, sizeof(block_state.host.buf)); } -#line 5354 "conf_parser.c" /* yacc.c:1646 */ +#line 5232 "conf_parser.c" /* yacc.c:1646 */ break; - case 431: -#line 2177 "conf_parser.y" /* yacc.c:1646 */ + case 418: +#line 2105 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.bind.buf, yylval.string, sizeof(block_state.bind.buf)); } -#line 5363 "conf_parser.c" /* yacc.c:1646 */ +#line 5241 "conf_parser.c" /* yacc.c:1646 */ break; - case 432: -#line 2183 "conf_parser.y" /* yacc.c:1646 */ + case 419: +#line 2111 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -5375,11 +5253,11 @@ else strlcpy(block_state.spass.buf, yylval.string, sizeof(block_state.spass.buf)); } -#line 5379 "conf_parser.c" /* yacc.c:1646 */ +#line 5257 "conf_parser.c" /* yacc.c:1646 */ break; - case 433: -#line 2196 "conf_parser.y" /* yacc.c:1646 */ + case 420: +#line 2124 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -5391,73 +5269,73 @@ else strlcpy(block_state.rpass.buf, yylval.string, sizeof(block_state.rpass.buf)); } -#line 5395 "conf_parser.c" /* yacc.c:1646 */ +#line 5273 "conf_parser.c" /* yacc.c:1646 */ break; - case 434: -#line 2209 "conf_parser.y" /* yacc.c:1646 */ + case 421: +#line 2137 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.cert.buf, yylval.string, sizeof(block_state.cert.buf)); } -#line 5404 "conf_parser.c" /* yacc.c:1646 */ +#line 5282 "conf_parser.c" /* yacc.c:1646 */ break; - case 435: -#line 2215 "conf_parser.y" /* yacc.c:1646 */ + case 422: +#line 2143 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.port.value = (yyvsp[-1].number); } -#line 5413 "conf_parser.c" /* yacc.c:1646 */ +#line 5291 "conf_parser.c" /* yacc.c:1646 */ break; - case 436: -#line 2221 "conf_parser.y" /* yacc.c:1646 */ + case 423: +#line 2149 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.aftype.value = AF_INET; } -#line 5422 "conf_parser.c" /* yacc.c:1646 */ +#line 5300 "conf_parser.c" /* yacc.c:1646 */ break; - case 437: -#line 2225 "conf_parser.y" /* yacc.c:1646 */ + case 424: +#line 2153 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.aftype.value = AF_INET6; } -#line 5431 "conf_parser.c" /* yacc.c:1646 */ +#line 5309 "conf_parser.c" /* yacc.c:1646 */ break; - case 438: -#line 2231 "conf_parser.y" /* yacc.c:1646 */ + case 425: +#line 2159 "conf_parser.y" /* yacc.c:1646 */ { block_state.flags.value &= CONF_FLAGS_ENCRYPTED; } -#line 5439 "conf_parser.c" /* yacc.c:1646 */ +#line 5317 "conf_parser.c" /* yacc.c:1646 */ break; - case 442: -#line 2237 "conf_parser.y" /* yacc.c:1646 */ + case 429: +#line 2165 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CONF_FLAGS_ALLOW_AUTO_CONN; } -#line 5448 "conf_parser.c" /* yacc.c:1646 */ +#line 5326 "conf_parser.c" /* yacc.c:1646 */ break; - case 443: -#line 2241 "conf_parser.y" /* yacc.c:1646 */ + case 430: +#line 2169 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) block_state.flags.value |= CONF_FLAGS_SSL; } -#line 5457 "conf_parser.c" /* yacc.c:1646 */ +#line 5335 "conf_parser.c" /* yacc.c:1646 */ break; - case 444: -#line 2247 "conf_parser.y" /* yacc.c:1646 */ + case 431: +#line 2175 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) { @@ -5467,38 +5345,38 @@ block_state.flags.value &= ~CONF_FLAGS_ENCRYPTED; } } -#line 5471 "conf_parser.c" /* yacc.c:1646 */ +#line 5349 "conf_parser.c" /* yacc.c:1646 */ break; - case 445: -#line 2258 "conf_parser.y" /* yacc.c:1646 */ + case 432: +#line 2186 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) dlinkAdd(xstrdup(yylval.string), make_dlink_node(), &block_state.hub.list); } -#line 5480 "conf_parser.c" /* yacc.c:1646 */ +#line 5358 "conf_parser.c" /* yacc.c:1646 */ break; - case 446: -#line 2264 "conf_parser.y" /* yacc.c:1646 */ + case 433: +#line 2192 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) dlinkAdd(xstrdup(yylval.string), make_dlink_node(), &block_state.leaf.list); } -#line 5489 "conf_parser.c" /* yacc.c:1646 */ +#line 5367 "conf_parser.c" /* yacc.c:1646 */ break; - case 447: -#line 2270 "conf_parser.y" /* yacc.c:1646 */ + case 434: +#line 2198 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.class.buf, yylval.string, sizeof(block_state.class.buf)); } -#line 5498 "conf_parser.c" /* yacc.c:1646 */ +#line 5376 "conf_parser.c" /* yacc.c:1646 */ break; - case 448: -#line 2276 "conf_parser.y" /* yacc.c:1646 */ + case 435: +#line 2204 "conf_parser.y" /* yacc.c:1646 */ { #ifdef HAVE_TLS if (conf_parser_ctx.pass == 2) @@ -5508,20 +5386,20 @@ conf_error_report("Ignoring connect::ciphers -- no TLS support"); #endif } -#line 5512 "conf_parser.c" /* yacc.c:1646 */ +#line 5390 "conf_parser.c" /* yacc.c:1646 */ break; - case 449: -#line 2291 "conf_parser.y" /* yacc.c:1646 */ + case 436: +#line 2219 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) reset_block_state(); } -#line 5521 "conf_parser.c" /* yacc.c:1646 */ +#line 5399 "conf_parser.c" /* yacc.c:1646 */ break; - case 450: -#line 2295 "conf_parser.y" /* yacc.c:1646 */ + case 437: +#line 2223 "conf_parser.y" /* yacc.c:1646 */ { struct MaskItem *conf = NULL; @@ -5542,11 +5420,11 @@ conf->reason = xstrdup(CONF_NOREASON); add_conf_by_address(CONF_KLINE, conf); } -#line 5546 "conf_parser.c" /* yacc.c:1646 */ +#line 5424 "conf_parser.c" /* yacc.c:1646 */ break; - case 456: -#line 2320 "conf_parser.y" /* yacc.c:1646 */ + case 443: +#line 2248 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) @@ -5565,29 +5443,29 @@ split_nuh(&nuh); } } -#line 5569 "conf_parser.c" /* yacc.c:1646 */ +#line 5447 "conf_parser.c" /* yacc.c:1646 */ break; - case 457: -#line 2340 "conf_parser.y" /* yacc.c:1646 */ + case 444: +#line 2268 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.rpass.buf, yylval.string, sizeof(block_state.rpass.buf)); } -#line 5578 "conf_parser.c" /* yacc.c:1646 */ +#line 5456 "conf_parser.c" /* yacc.c:1646 */ break; - case 458: -#line 2350 "conf_parser.y" /* yacc.c:1646 */ + case 445: +#line 2278 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) reset_block_state(); } -#line 5587 "conf_parser.c" /* yacc.c:1646 */ +#line 5465 "conf_parser.c" /* yacc.c:1646 */ break; - case 459: -#line 2354 "conf_parser.y" /* yacc.c:1646 */ + case 446: +#line 2282 "conf_parser.y" /* yacc.c:1646 */ { struct MaskItem *conf = NULL; @@ -5609,29 +5487,29 @@ add_conf_by_address(CONF_DLINE, conf); } } -#line 5613 "conf_parser.c" /* yacc.c:1646 */ +#line 5491 "conf_parser.c" /* yacc.c:1646 */ break; - case 465: -#line 2380 "conf_parser.y" /* yacc.c:1646 */ + case 452: +#line 2308 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.addr.buf, yylval.string, sizeof(block_state.addr.buf)); } -#line 5622 "conf_parser.c" /* yacc.c:1646 */ +#line 5500 "conf_parser.c" /* yacc.c:1646 */ break; - case 466: -#line 2386 "conf_parser.y" /* yacc.c:1646 */ + case 453: +#line 2314 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.rpass.buf, yylval.string, sizeof(block_state.rpass.buf)); } -#line 5631 "conf_parser.c" /* yacc.c:1646 */ +#line 5509 "conf_parser.c" /* yacc.c:1646 */ break; - case 472: -#line 2401 "conf_parser.y" /* yacc.c:1646 */ + case 459: +#line 2329 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) { @@ -5644,20 +5522,20 @@ } } } -#line 5648 "conf_parser.c" /* yacc.c:1646 */ +#line 5526 "conf_parser.c" /* yacc.c:1646 */ break; - case 473: -#line 2418 "conf_parser.y" /* yacc.c:1646 */ + case 460: +#line 2346 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) reset_block_state(); } -#line 5657 "conf_parser.c" /* yacc.c:1646 */ +#line 5535 "conf_parser.c" /* yacc.c:1646 */ break; - case 474: -#line 2422 "conf_parser.y" /* yacc.c:1646 */ + case 461: +#line 2350 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass != 2) break; @@ -5673,880 +5551,880 @@ else gecos->reason = xstrdup(CONF_NOREASON); } -#line 5677 "conf_parser.c" /* yacc.c:1646 */ +#line 5555 "conf_parser.c" /* yacc.c:1646 */ break; - case 480: -#line 2442 "conf_parser.y" /* yacc.c:1646 */ + case 467: +#line 2370 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.name.buf, yylval.string, sizeof(block_state.name.buf)); } -#line 5686 "conf_parser.c" /* yacc.c:1646 */ +#line 5564 "conf_parser.c" /* yacc.c:1646 */ break; - case 481: -#line 2448 "conf_parser.y" /* yacc.c:1646 */ + case 468: +#line 2376 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) strlcpy(block_state.rpass.buf, yylval.string, sizeof(block_state.rpass.buf)); } -#line 5695 "conf_parser.c" /* yacc.c:1646 */ +#line 5573 "conf_parser.c" /* yacc.c:1646 */ break; - case 533: -#line 2511 "conf_parser.y" /* yacc.c:1646 */ + case 520: +#line 2439 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.away_count = (yyvsp[-1].number); } -#line 5703 "conf_parser.c" /* yacc.c:1646 */ +#line 5581 "conf_parser.c" /* yacc.c:1646 */ break; - case 534: -#line 2516 "conf_parser.y" /* yacc.c:1646 */ + case 521: +#line 2444 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.away_time = (yyvsp[-1].number); } -#line 5711 "conf_parser.c" /* yacc.c:1646 */ +#line 5589 "conf_parser.c" /* yacc.c:1646 */ break; - case 535: -#line 2521 "conf_parser.y" /* yacc.c:1646 */ + case 522: +#line 2449 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.max_watch = (yyvsp[-1].number); } -#line 5719 "conf_parser.c" /* yacc.c:1646 */ +#line 5597 "conf_parser.c" /* yacc.c:1646 */ break; - case 536: -#line 2526 "conf_parser.y" /* yacc.c:1646 */ + case 523: +#line 2454 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.whowas_history_length = (yyvsp[-1].number); } -#line 5727 "conf_parser.c" /* yacc.c:1646 */ +#line 5605 "conf_parser.c" /* yacc.c:1646 */ break; - case 537: -#line 2531 "conf_parser.y" /* yacc.c:1646 */ + case 524: +#line 2459 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) ConfigGeneral.cycle_on_host_change = yylval.number; } -#line 5736 "conf_parser.c" /* yacc.c:1646 */ +#line 5614 "conf_parser.c" /* yacc.c:1646 */ break; - case 538: -#line 2537 "conf_parser.y" /* yacc.c:1646 */ + case 525: +#line 2465 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.dline_min_cidr = (yyvsp[-1].number); } -#line 5744 "conf_parser.c" /* yacc.c:1646 */ +#line 5622 "conf_parser.c" /* yacc.c:1646 */ break; - case 539: -#line 2542 "conf_parser.y" /* yacc.c:1646 */ + case 526: +#line 2470 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.dline_min_cidr6 = (yyvsp[-1].number); } -#line 5752 "conf_parser.c" /* yacc.c:1646 */ +#line 5630 "conf_parser.c" /* yacc.c:1646 */ break; - case 540: -#line 2547 "conf_parser.y" /* yacc.c:1646 */ + case 527: +#line 2475 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.kline_min_cidr = (yyvsp[-1].number); } -#line 5760 "conf_parser.c" /* yacc.c:1646 */ +#line 5638 "conf_parser.c" /* yacc.c:1646 */ break; - case 541: -#line 2552 "conf_parser.y" /* yacc.c:1646 */ + case 528: +#line 2480 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.kline_min_cidr6 = (yyvsp[-1].number); } -#line 5768 "conf_parser.c" /* yacc.c:1646 */ +#line 5646 "conf_parser.c" /* yacc.c:1646 */ break; - case 542: -#line 2557 "conf_parser.y" /* yacc.c:1646 */ + case 529: +#line 2485 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.tkline_expire_notices = yylval.number; } -#line 5776 "conf_parser.c" /* yacc.c:1646 */ +#line 5654 "conf_parser.c" /* yacc.c:1646 */ break; - case 543: -#line 2562 "conf_parser.y" /* yacc.c:1646 */ + case 530: +#line 2490 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.kill_chase_time_limit = (yyvsp[-1].number); } -#line 5784 "conf_parser.c" /* yacc.c:1646 */ +#line 5662 "conf_parser.c" /* yacc.c:1646 */ break; - case 544: -#line 2567 "conf_parser.y" /* yacc.c:1646 */ + case 531: +#line 2495 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.ignore_bogus_ts = yylval.number; } -#line 5792 "conf_parser.c" /* yacc.c:1646 */ +#line 5670 "conf_parser.c" /* yacc.c:1646 */ break; - case 545: -#line 2572 "conf_parser.y" /* yacc.c:1646 */ + case 532: +#line 2500 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.failed_oper_notice = yylval.number; } -#line 5800 "conf_parser.c" /* yacc.c:1646 */ +#line 5678 "conf_parser.c" /* yacc.c:1646 */ break; - case 546: -#line 2577 "conf_parser.y" /* yacc.c:1646 */ + case 533: +#line 2505 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.anti_nick_flood = yylval.number; } -#line 5808 "conf_parser.c" /* yacc.c:1646 */ +#line 5686 "conf_parser.c" /* yacc.c:1646 */ break; - case 547: -#line 2582 "conf_parser.y" /* yacc.c:1646 */ + case 534: +#line 2510 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.max_nick_time = (yyvsp[-1].number); } -#line 5816 "conf_parser.c" /* yacc.c:1646 */ +#line 5694 "conf_parser.c" /* yacc.c:1646 */ break; - case 548: -#line 2587 "conf_parser.y" /* yacc.c:1646 */ + case 535: +#line 2515 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.max_nick_changes = (yyvsp[-1].number); } -#line 5824 "conf_parser.c" /* yacc.c:1646 */ +#line 5702 "conf_parser.c" /* yacc.c:1646 */ break; - case 549: -#line 2592 "conf_parser.y" /* yacc.c:1646 */ + case 536: +#line 2520 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.max_accept = (yyvsp[-1].number); } -#line 5832 "conf_parser.c" /* yacc.c:1646 */ +#line 5710 "conf_parser.c" /* yacc.c:1646 */ break; - case 550: -#line 2597 "conf_parser.y" /* yacc.c:1646 */ + case 537: +#line 2525 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.anti_spam_exit_message_time = (yyvsp[-1].number); } -#line 5840 "conf_parser.c" /* yacc.c:1646 */ +#line 5718 "conf_parser.c" /* yacc.c:1646 */ break; - case 551: -#line 2602 "conf_parser.y" /* yacc.c:1646 */ + case 538: +#line 2530 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.ts_warn_delta = (yyvsp[-1].number); } -#line 5848 "conf_parser.c" /* yacc.c:1646 */ +#line 5726 "conf_parser.c" /* yacc.c:1646 */ break; - case 552: -#line 2607 "conf_parser.y" /* yacc.c:1646 */ + case 539: +#line 2535 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) ConfigGeneral.ts_max_delta = (yyvsp[-1].number); } -#line 5857 "conf_parser.c" /* yacc.c:1646 */ +#line 5735 "conf_parser.c" /* yacc.c:1646 */ break; - case 553: -#line 2613 "conf_parser.y" /* yacc.c:1646 */ + case 540: +#line 2541 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.invisible_on_connect = yylval.number; } -#line 5865 "conf_parser.c" /* yacc.c:1646 */ +#line 5743 "conf_parser.c" /* yacc.c:1646 */ break; - case 554: -#line 2618 "conf_parser.y" /* yacc.c:1646 */ + case 541: +#line 2546 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.warn_no_connect_block = yylval.number; } -#line 5873 "conf_parser.c" /* yacc.c:1646 */ +#line 5751 "conf_parser.c" /* yacc.c:1646 */ break; - case 555: -#line 2623 "conf_parser.y" /* yacc.c:1646 */ + case 542: +#line 2551 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.stats_e_disabled = yylval.number; } -#line 5881 "conf_parser.c" /* yacc.c:1646 */ +#line 5759 "conf_parser.c" /* yacc.c:1646 */ break; - case 556: -#line 2628 "conf_parser.y" /* yacc.c:1646 */ + case 543: +#line 2556 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.stats_m_oper_only = yylval.number; } -#line 5889 "conf_parser.c" /* yacc.c:1646 */ +#line 5767 "conf_parser.c" /* yacc.c:1646 */ break; - case 557: -#line 2633 "conf_parser.y" /* yacc.c:1646 */ + case 544: +#line 2561 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.stats_o_oper_only = yylval.number; } -#line 5897 "conf_parser.c" /* yacc.c:1646 */ +#line 5775 "conf_parser.c" /* yacc.c:1646 */ break; - case 558: -#line 2638 "conf_parser.y" /* yacc.c:1646 */ + case 545: +#line 2566 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.stats_P_oper_only = yylval.number; } -#line 5905 "conf_parser.c" /* yacc.c:1646 */ +#line 5783 "conf_parser.c" /* yacc.c:1646 */ break; - case 559: -#line 2643 "conf_parser.y" /* yacc.c:1646 */ + case 546: +#line 2571 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.stats_u_oper_only = yylval.number; } -#line 5913 "conf_parser.c" /* yacc.c:1646 */ +#line 5791 "conf_parser.c" /* yacc.c:1646 */ break; - case 560: -#line 2648 "conf_parser.y" /* yacc.c:1646 */ + case 547: +#line 2576 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.stats_k_oper_only = 2 * yylval.number; } -#line 5921 "conf_parser.c" /* yacc.c:1646 */ +#line 5799 "conf_parser.c" /* yacc.c:1646 */ break; - case 561: -#line 2651 "conf_parser.y" /* yacc.c:1646 */ + case 548: +#line 2579 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.stats_k_oper_only = 1; } -#line 5929 "conf_parser.c" /* yacc.c:1646 */ +#line 5807 "conf_parser.c" /* yacc.c:1646 */ break; - case 562: -#line 2656 "conf_parser.y" /* yacc.c:1646 */ + case 549: +#line 2584 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.stats_i_oper_only = 2 * yylval.number; } -#line 5937 "conf_parser.c" /* yacc.c:1646 */ +#line 5815 "conf_parser.c" /* yacc.c:1646 */ break; - case 563: -#line 2659 "conf_parser.y" /* yacc.c:1646 */ + case 550: +#line 2587 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.stats_i_oper_only = 1; } -#line 5945 "conf_parser.c" /* yacc.c:1646 */ +#line 5823 "conf_parser.c" /* yacc.c:1646 */ break; - case 564: -#line 2664 "conf_parser.y" /* yacc.c:1646 */ + case 551: +#line 2592 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.pace_wait = (yyvsp[-1].number); } -#line 5953 "conf_parser.c" /* yacc.c:1646 */ +#line 5831 "conf_parser.c" /* yacc.c:1646 */ break; - case 565: -#line 2669 "conf_parser.y" /* yacc.c:1646 */ + case 552: +#line 2597 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.caller_id_wait = (yyvsp[-1].number); } -#line 5961 "conf_parser.c" /* yacc.c:1646 */ +#line 5839 "conf_parser.c" /* yacc.c:1646 */ break; - case 566: -#line 2674 "conf_parser.y" /* yacc.c:1646 */ + case 553: +#line 2602 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.opers_bypass_callerid = yylval.number; } -#line 5969 "conf_parser.c" /* yacc.c:1646 */ +#line 5847 "conf_parser.c" /* yacc.c:1646 */ break; - case 567: -#line 2679 "conf_parser.y" /* yacc.c:1646 */ + case 554: +#line 2607 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.pace_wait_simple = (yyvsp[-1].number); } -#line 5977 "conf_parser.c" /* yacc.c:1646 */ +#line 5855 "conf_parser.c" /* yacc.c:1646 */ break; - case 568: -#line 2684 "conf_parser.y" /* yacc.c:1646 */ + case 555: +#line 2612 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.short_motd = yylval.number; } -#line 5985 "conf_parser.c" /* yacc.c:1646 */ +#line 5863 "conf_parser.c" /* yacc.c:1646 */ break; - case 569: -#line 2689 "conf_parser.y" /* yacc.c:1646 */ + case 556: +#line 2617 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.no_oper_flood = yylval.number; } -#line 5993 "conf_parser.c" /* yacc.c:1646 */ +#line 5871 "conf_parser.c" /* yacc.c:1646 */ break; - case 570: -#line 2694 "conf_parser.y" /* yacc.c:1646 */ + case 557: +#line 2622 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.dots_in_ident = (yyvsp[-1].number); } -#line 6001 "conf_parser.c" /* yacc.c:1646 */ +#line 5879 "conf_parser.c" /* yacc.c:1646 */ break; - case 571: -#line 2699 "conf_parser.y" /* yacc.c:1646 */ + case 558: +#line 2627 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.max_targets = (yyvsp[-1].number); } -#line 6009 "conf_parser.c" /* yacc.c:1646 */ +#line 5887 "conf_parser.c" /* yacc.c:1646 */ break; - case 572: -#line 2704 "conf_parser.y" /* yacc.c:1646 */ + case 559: +#line 2632 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.ping_cookie = yylval.number; } -#line 6017 "conf_parser.c" /* yacc.c:1646 */ +#line 5895 "conf_parser.c" /* yacc.c:1646 */ break; - case 573: -#line 2709 "conf_parser.y" /* yacc.c:1646 */ + case 560: +#line 2637 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.disable_auth = yylval.number; } -#line 6025 "conf_parser.c" /* yacc.c:1646 */ +#line 5903 "conf_parser.c" /* yacc.c:1646 */ break; - case 574: -#line 2714 "conf_parser.y" /* yacc.c:1646 */ + case 561: +#line 2642 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.throttle_count = (yyvsp[-1].number); } -#line 6033 "conf_parser.c" /* yacc.c:1646 */ +#line 5911 "conf_parser.c" /* yacc.c:1646 */ break; - case 575: -#line 2719 "conf_parser.y" /* yacc.c:1646 */ + case 562: +#line 2647 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.throttle_time = (yyvsp[-1].number); } -#line 6041 "conf_parser.c" /* yacc.c:1646 */ +#line 5919 "conf_parser.c" /* yacc.c:1646 */ break; - case 576: -#line 2724 "conf_parser.y" /* yacc.c:1646 */ + case 563: +#line 2652 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes = 0; } -#line 6049 "conf_parser.c" /* yacc.c:1646 */ +#line 5927 "conf_parser.c" /* yacc.c:1646 */ break; - case 580: -#line 2730 "conf_parser.y" /* yacc.c:1646 */ + case 567: +#line 2658 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_BOTS; } -#line 6057 "conf_parser.c" /* yacc.c:1646 */ +#line 5935 "conf_parser.c" /* yacc.c:1646 */ break; - case 581: -#line 2733 "conf_parser.y" /* yacc.c:1646 */ + case 568: +#line 2661 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_CCONN; } -#line 6065 "conf_parser.c" /* yacc.c:1646 */ +#line 5943 "conf_parser.c" /* yacc.c:1646 */ break; - case 582: -#line 2736 "conf_parser.y" /* yacc.c:1646 */ + case 569: +#line 2664 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_DEAF; } -#line 6073 "conf_parser.c" /* yacc.c:1646 */ +#line 5951 "conf_parser.c" /* yacc.c:1646 */ break; - case 583: -#line 2739 "conf_parser.y" /* yacc.c:1646 */ + case 570: +#line 2667 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_DEBUG; } -#line 6081 "conf_parser.c" /* yacc.c:1646 */ +#line 5959 "conf_parser.c" /* yacc.c:1646 */ break; - case 584: -#line 2742 "conf_parser.y" /* yacc.c:1646 */ + case 571: +#line 2670 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_FULL; } -#line 6089 "conf_parser.c" /* yacc.c:1646 */ +#line 5967 "conf_parser.c" /* yacc.c:1646 */ break; - case 585: -#line 2745 "conf_parser.y" /* yacc.c:1646 */ + case 572: +#line 2673 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_HIDDEN; } -#line 6097 "conf_parser.c" /* yacc.c:1646 */ +#line 5975 "conf_parser.c" /* yacc.c:1646 */ break; - case 586: -#line 2748 "conf_parser.y" /* yacc.c:1646 */ + case 573: +#line 2676 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_HIDECHANS; } -#line 6105 "conf_parser.c" /* yacc.c:1646 */ +#line 5983 "conf_parser.c" /* yacc.c:1646 */ break; - case 587: -#line 2751 "conf_parser.y" /* yacc.c:1646 */ + case 574: +#line 2679 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_HIDEIDLE; } -#line 6113 "conf_parser.c" /* yacc.c:1646 */ +#line 5991 "conf_parser.c" /* yacc.c:1646 */ break; - case 588: -#line 2754 "conf_parser.y" /* yacc.c:1646 */ + case 575: +#line 2682 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_SKILL; } -#line 6121 "conf_parser.c" /* yacc.c:1646 */ +#line 5999 "conf_parser.c" /* yacc.c:1646 */ break; - case 589: -#line 2757 "conf_parser.y" /* yacc.c:1646 */ + case 576: +#line 2685 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_NCHANGE; } -#line 6129 "conf_parser.c" /* yacc.c:1646 */ +#line 6007 "conf_parser.c" /* yacc.c:1646 */ break; - case 590: -#line 2760 "conf_parser.y" /* yacc.c:1646 */ + case 577: +#line 2688 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_REJ; } -#line 6137 "conf_parser.c" /* yacc.c:1646 */ +#line 6015 "conf_parser.c" /* yacc.c:1646 */ break; - case 591: -#line 2763 "conf_parser.y" /* yacc.c:1646 */ + case 578: +#line 2691 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_UNAUTH; } -#line 6145 "conf_parser.c" /* yacc.c:1646 */ +#line 6023 "conf_parser.c" /* yacc.c:1646 */ break; - case 592: -#line 2766 "conf_parser.y" /* yacc.c:1646 */ + case 579: +#line 2694 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_SPY; } -#line 6153 "conf_parser.c" /* yacc.c:1646 */ +#line 6031 "conf_parser.c" /* yacc.c:1646 */ break; - case 593: -#line 2769 "conf_parser.y" /* yacc.c:1646 */ + case 580: +#line 2697 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_EXTERNAL; } -#line 6161 "conf_parser.c" /* yacc.c:1646 */ +#line 6039 "conf_parser.c" /* yacc.c:1646 */ break; - case 594: -#line 2772 "conf_parser.y" /* yacc.c:1646 */ + case 581: +#line 2700 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_SERVNOTICE; } -#line 6169 "conf_parser.c" /* yacc.c:1646 */ +#line 6047 "conf_parser.c" /* yacc.c:1646 */ break; - case 595: -#line 2775 "conf_parser.y" /* yacc.c:1646 */ + case 582: +#line 2703 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_INVISIBLE; } -#line 6177 "conf_parser.c" /* yacc.c:1646 */ +#line 6055 "conf_parser.c" /* yacc.c:1646 */ break; - case 596: -#line 2778 "conf_parser.y" /* yacc.c:1646 */ + case 583: +#line 2706 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_WALLOP; } -#line 6185 "conf_parser.c" /* yacc.c:1646 */ +#line 6063 "conf_parser.c" /* yacc.c:1646 */ break; - case 597: -#line 2781 "conf_parser.y" /* yacc.c:1646 */ + case 584: +#line 2709 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_SOFTCALLERID; } -#line 6193 "conf_parser.c" /* yacc.c:1646 */ +#line 6071 "conf_parser.c" /* yacc.c:1646 */ break; - case 598: -#line 2784 "conf_parser.y" /* yacc.c:1646 */ + case 585: +#line 2712 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_CALLERID; } -#line 6201 "conf_parser.c" /* yacc.c:1646 */ +#line 6079 "conf_parser.c" /* yacc.c:1646 */ break; - case 599: -#line 2787 "conf_parser.y" /* yacc.c:1646 */ + case 586: +#line 2715 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_LOCOPS; } -#line 6209 "conf_parser.c" /* yacc.c:1646 */ +#line 6087 "conf_parser.c" /* yacc.c:1646 */ break; - case 600: -#line 2790 "conf_parser.y" /* yacc.c:1646 */ + case 587: +#line 2718 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_REGONLY; } -#line 6217 "conf_parser.c" /* yacc.c:1646 */ +#line 6095 "conf_parser.c" /* yacc.c:1646 */ break; - case 601: -#line 2793 "conf_parser.y" /* yacc.c:1646 */ + case 588: +#line 2721 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_umodes |= UMODE_FARCONNECT; } -#line 6225 "conf_parser.c" /* yacc.c:1646 */ +#line 6103 "conf_parser.c" /* yacc.c:1646 */ break; - case 602: -#line 2798 "conf_parser.y" /* yacc.c:1646 */ + case 589: +#line 2726 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes = 0; } -#line 6233 "conf_parser.c" /* yacc.c:1646 */ +#line 6111 "conf_parser.c" /* yacc.c:1646 */ break; - case 606: -#line 2804 "conf_parser.y" /* yacc.c:1646 */ + case 593: +#line 2732 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_BOTS; } -#line 6241 "conf_parser.c" /* yacc.c:1646 */ +#line 6119 "conf_parser.c" /* yacc.c:1646 */ break; - case 607: -#line 2807 "conf_parser.y" /* yacc.c:1646 */ + case 594: +#line 2735 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_CCONN; } -#line 6249 "conf_parser.c" /* yacc.c:1646 */ +#line 6127 "conf_parser.c" /* yacc.c:1646 */ break; - case 608: -#line 2810 "conf_parser.y" /* yacc.c:1646 */ + case 595: +#line 2738 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_DEAF; } -#line 6257 "conf_parser.c" /* yacc.c:1646 */ +#line 6135 "conf_parser.c" /* yacc.c:1646 */ break; - case 609: -#line 2813 "conf_parser.y" /* yacc.c:1646 */ + case 596: +#line 2741 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_DEBUG; } -#line 6265 "conf_parser.c" /* yacc.c:1646 */ +#line 6143 "conf_parser.c" /* yacc.c:1646 */ break; - case 610: -#line 2816 "conf_parser.y" /* yacc.c:1646 */ + case 597: +#line 2744 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_FULL; } -#line 6273 "conf_parser.c" /* yacc.c:1646 */ +#line 6151 "conf_parser.c" /* yacc.c:1646 */ break; - case 611: -#line 2819 "conf_parser.y" /* yacc.c:1646 */ + case 598: +#line 2747 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_SKILL; } -#line 6281 "conf_parser.c" /* yacc.c:1646 */ +#line 6159 "conf_parser.c" /* yacc.c:1646 */ break; - case 612: -#line 2822 "conf_parser.y" /* yacc.c:1646 */ + case 599: +#line 2750 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_HIDDEN; } -#line 6289 "conf_parser.c" /* yacc.c:1646 */ +#line 6167 "conf_parser.c" /* yacc.c:1646 */ break; - case 613: -#line 2825 "conf_parser.y" /* yacc.c:1646 */ + case 600: +#line 2753 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_NCHANGE; } -#line 6297 "conf_parser.c" /* yacc.c:1646 */ +#line 6175 "conf_parser.c" /* yacc.c:1646 */ break; - case 614: -#line 2828 "conf_parser.y" /* yacc.c:1646 */ + case 601: +#line 2756 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_REJ; } -#line 6305 "conf_parser.c" /* yacc.c:1646 */ +#line 6183 "conf_parser.c" /* yacc.c:1646 */ break; - case 615: -#line 2831 "conf_parser.y" /* yacc.c:1646 */ + case 602: +#line 2759 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_UNAUTH; } -#line 6313 "conf_parser.c" /* yacc.c:1646 */ +#line 6191 "conf_parser.c" /* yacc.c:1646 */ break; - case 616: -#line 2834 "conf_parser.y" /* yacc.c:1646 */ + case 603: +#line 2762 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_SPY; } -#line 6321 "conf_parser.c" /* yacc.c:1646 */ +#line 6199 "conf_parser.c" /* yacc.c:1646 */ break; - case 617: -#line 2837 "conf_parser.y" /* yacc.c:1646 */ + case 604: +#line 2765 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_EXTERNAL; } -#line 6329 "conf_parser.c" /* yacc.c:1646 */ +#line 6207 "conf_parser.c" /* yacc.c:1646 */ break; - case 618: -#line 2840 "conf_parser.y" /* yacc.c:1646 */ + case 605: +#line 2768 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_SERVNOTICE; } -#line 6337 "conf_parser.c" /* yacc.c:1646 */ +#line 6215 "conf_parser.c" /* yacc.c:1646 */ break; - case 619: -#line 2843 "conf_parser.y" /* yacc.c:1646 */ + case 606: +#line 2771 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_INVISIBLE; } -#line 6345 "conf_parser.c" /* yacc.c:1646 */ +#line 6223 "conf_parser.c" /* yacc.c:1646 */ break; - case 620: -#line 2846 "conf_parser.y" /* yacc.c:1646 */ + case 607: +#line 2774 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_WALLOP; } -#line 6353 "conf_parser.c" /* yacc.c:1646 */ +#line 6231 "conf_parser.c" /* yacc.c:1646 */ break; - case 621: -#line 2849 "conf_parser.y" /* yacc.c:1646 */ + case 608: +#line 2777 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_SOFTCALLERID; } -#line 6361 "conf_parser.c" /* yacc.c:1646 */ +#line 6239 "conf_parser.c" /* yacc.c:1646 */ break; - case 622: -#line 2852 "conf_parser.y" /* yacc.c:1646 */ + case 609: +#line 2780 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_CALLERID; } -#line 6369 "conf_parser.c" /* yacc.c:1646 */ +#line 6247 "conf_parser.c" /* yacc.c:1646 */ break; - case 623: -#line 2855 "conf_parser.y" /* yacc.c:1646 */ + case 610: +#line 2783 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_LOCOPS; } -#line 6377 "conf_parser.c" /* yacc.c:1646 */ +#line 6255 "conf_parser.c" /* yacc.c:1646 */ break; - case 624: -#line 2858 "conf_parser.y" /* yacc.c:1646 */ + case 611: +#line 2786 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_REGONLY; } -#line 6385 "conf_parser.c" /* yacc.c:1646 */ +#line 6263 "conf_parser.c" /* yacc.c:1646 */ break; - case 625: -#line 2861 "conf_parser.y" /* yacc.c:1646 */ + case 612: +#line 2789 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.oper_only_umodes |= UMODE_FARCONNECT; } -#line 6393 "conf_parser.c" /* yacc.c:1646 */ +#line 6271 "conf_parser.c" /* yacc.c:1646 */ break; - case 626: -#line 2866 "conf_parser.y" /* yacc.c:1646 */ + case 613: +#line 2794 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.min_nonwildcard = (yyvsp[-1].number); } -#line 6401 "conf_parser.c" /* yacc.c:1646 */ +#line 6279 "conf_parser.c" /* yacc.c:1646 */ break; - case 627: -#line 2871 "conf_parser.y" /* yacc.c:1646 */ + case 614: +#line 2799 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.min_nonwildcard_simple = (yyvsp[-1].number); } -#line 6409 "conf_parser.c" /* yacc.c:1646 */ +#line 6287 "conf_parser.c" /* yacc.c:1646 */ break; - case 628: -#line 2876 "conf_parser.y" /* yacc.c:1646 */ + case 615: +#line 2804 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.default_floodcount = (yyvsp[-1].number); } -#line 6417 "conf_parser.c" /* yacc.c:1646 */ +#line 6295 "conf_parser.c" /* yacc.c:1646 */ break; - case 629: -#line 2881 "conf_parser.y" /* yacc.c:1646 */ + case 616: +#line 2809 "conf_parser.y" /* yacc.c:1646 */ { ConfigGeneral.default_floodtime = (yyvsp[-1].number); } -#line 6425 "conf_parser.c" /* yacc.c:1646 */ +#line 6303 "conf_parser.c" /* yacc.c:1646 */ break; - case 648: -#line 2909 "conf_parser.y" /* yacc.c:1646 */ + case 635: +#line 2837 "conf_parser.y" /* yacc.c:1646 */ { ConfigChannel.disable_fake_channels = yylval.number; } -#line 6433 "conf_parser.c" /* yacc.c:1646 */ +#line 6311 "conf_parser.c" /* yacc.c:1646 */ break; - case 649: -#line 2914 "conf_parser.y" /* yacc.c:1646 */ + case 636: +#line 2842 "conf_parser.y" /* yacc.c:1646 */ { ConfigChannel.invite_client_count = (yyvsp[-1].number); } -#line 6441 "conf_parser.c" /* yacc.c:1646 */ +#line 6319 "conf_parser.c" /* yacc.c:1646 */ break; - case 650: -#line 2919 "conf_parser.y" /* yacc.c:1646 */ + case 637: +#line 2847 "conf_parser.y" /* yacc.c:1646 */ { ConfigChannel.invite_client_time = (yyvsp[-1].number); } -#line 6449 "conf_parser.c" /* yacc.c:1646 */ +#line 6327 "conf_parser.c" /* yacc.c:1646 */ break; - case 651: -#line 2924 "conf_parser.y" /* yacc.c:1646 */ + case 638: +#line 2852 "conf_parser.y" /* yacc.c:1646 */ { ConfigChannel.invite_delay_channel = (yyvsp[-1].number); } -#line 6457 "conf_parser.c" /* yacc.c:1646 */ +#line 6335 "conf_parser.c" /* yacc.c:1646 */ break; - case 652: -#line 2929 "conf_parser.y" /* yacc.c:1646 */ + case 639: +#line 2857 "conf_parser.y" /* yacc.c:1646 */ { ConfigChannel.invite_expire_time = (yyvsp[-1].number); } -#line 6465 "conf_parser.c" /* yacc.c:1646 */ +#line 6343 "conf_parser.c" /* yacc.c:1646 */ break; - case 653: -#line 2934 "conf_parser.y" /* yacc.c:1646 */ + case 640: +#line 2862 "conf_parser.y" /* yacc.c:1646 */ { ConfigChannel.knock_client_count = (yyvsp[-1].number); } -#line 6473 "conf_parser.c" /* yacc.c:1646 */ +#line 6351 "conf_parser.c" /* yacc.c:1646 */ break; - case 654: -#line 2939 "conf_parser.y" /* yacc.c:1646 */ + case 641: +#line 2867 "conf_parser.y" /* yacc.c:1646 */ { ConfigChannel.knock_client_time = (yyvsp[-1].number); } -#line 6481 "conf_parser.c" /* yacc.c:1646 */ +#line 6359 "conf_parser.c" /* yacc.c:1646 */ break; - case 655: -#line 2944 "conf_parser.y" /* yacc.c:1646 */ + case 642: +#line 2872 "conf_parser.y" /* yacc.c:1646 */ { ConfigChannel.knock_delay_channel = (yyvsp[-1].number); } -#line 6489 "conf_parser.c" /* yacc.c:1646 */ +#line 6367 "conf_parser.c" /* yacc.c:1646 */ break; - case 656: -#line 2949 "conf_parser.y" /* yacc.c:1646 */ + case 643: +#line 2877 "conf_parser.y" /* yacc.c:1646 */ { ConfigChannel.max_channels = (yyvsp[-1].number); } -#line 6497 "conf_parser.c" /* yacc.c:1646 */ +#line 6375 "conf_parser.c" /* yacc.c:1646 */ break; - case 657: -#line 2954 "conf_parser.y" /* yacc.c:1646 */ + case 644: +#line 2882 "conf_parser.y" /* yacc.c:1646 */ { ConfigChannel.max_invites = (yyvsp[-1].number); } -#line 6505 "conf_parser.c" /* yacc.c:1646 */ +#line 6383 "conf_parser.c" /* yacc.c:1646 */ break; - case 658: -#line 2959 "conf_parser.y" /* yacc.c:1646 */ + case 645: +#line 2887 "conf_parser.y" /* yacc.c:1646 */ { ConfigChannel.max_bans = (yyvsp[-1].number); } -#line 6513 "conf_parser.c" /* yacc.c:1646 */ +#line 6391 "conf_parser.c" /* yacc.c:1646 */ break; - case 659: -#line 2964 "conf_parser.y" /* yacc.c:1646 */ + case 646: +#line 2892 "conf_parser.y" /* yacc.c:1646 */ { ConfigChannel.max_bans_large = (yyvsp[-1].number); } -#line 6521 "conf_parser.c" /* yacc.c:1646 */ +#line 6399 "conf_parser.c" /* yacc.c:1646 */ break; - case 660: -#line 2969 "conf_parser.y" /* yacc.c:1646 */ + case 647: +#line 2897 "conf_parser.y" /* yacc.c:1646 */ { ConfigChannel.default_join_flood_count = yylval.number; } -#line 6529 "conf_parser.c" /* yacc.c:1646 */ +#line 6407 "conf_parser.c" /* yacc.c:1646 */ break; - case 661: -#line 2974 "conf_parser.y" /* yacc.c:1646 */ + case 648: +#line 2902 "conf_parser.y" /* yacc.c:1646 */ { ConfigChannel.default_join_flood_time = (yyvsp[-1].number); } -#line 6537 "conf_parser.c" /* yacc.c:1646 */ +#line 6415 "conf_parser.c" /* yacc.c:1646 */ break; - case 675: -#line 2997 "conf_parser.y" /* yacc.c:1646 */ + case 662: +#line 2925 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) ConfigServerHide.flatten_links = yylval.number; } -#line 6546 "conf_parser.c" /* yacc.c:1646 */ +#line 6424 "conf_parser.c" /* yacc.c:1646 */ break; - case 676: -#line 3003 "conf_parser.y" /* yacc.c:1646 */ + case 663: +#line 2931 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) { @@ -6561,11 +6439,11 @@ ConfigServerHide.flatten_links_delay = (yyvsp[-1].number); } } -#line 6565 "conf_parser.c" /* yacc.c:1646 */ +#line 6443 "conf_parser.c" /* yacc.c:1646 */ break; - case 677: -#line 3019 "conf_parser.y" /* yacc.c:1646 */ + case 664: +#line 2947 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) { @@ -6573,38 +6451,38 @@ ConfigServerHide.flatten_links_file = xstrdup(yylval.string); } } -#line 6577 "conf_parser.c" /* yacc.c:1646 */ +#line 6455 "conf_parser.c" /* yacc.c:1646 */ break; - case 678: -#line 3028 "conf_parser.y" /* yacc.c:1646 */ + case 665: +#line 2956 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) ConfigServerHide.disable_remote_commands = yylval.number; } -#line 6586 "conf_parser.c" /* yacc.c:1646 */ +#line 6464 "conf_parser.c" /* yacc.c:1646 */ break; - case 679: -#line 3034 "conf_parser.y" /* yacc.c:1646 */ + case 666: +#line 2962 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) ConfigServerHide.hide_servers = yylval.number; } -#line 6595 "conf_parser.c" /* yacc.c:1646 */ +#line 6473 "conf_parser.c" /* yacc.c:1646 */ break; - case 680: -#line 3040 "conf_parser.y" /* yacc.c:1646 */ + case 667: +#line 2968 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) ConfigServerHide.hide_services = yylval.number; } -#line 6604 "conf_parser.c" /* yacc.c:1646 */ +#line 6482 "conf_parser.c" /* yacc.c:1646 */ break; - case 681: -#line 3046 "conf_parser.y" /* yacc.c:1646 */ + case 668: +#line 2974 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) { @@ -6612,29 +6490,29 @@ ConfigServerHide.hidden_name = xstrdup(yylval.string); } } -#line 6616 "conf_parser.c" /* yacc.c:1646 */ +#line 6494 "conf_parser.c" /* yacc.c:1646 */ break; - case 682: -#line 3055 "conf_parser.y" /* yacc.c:1646 */ + case 669: +#line 2983 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) ConfigServerHide.hidden = yylval.number; } -#line 6625 "conf_parser.c" /* yacc.c:1646 */ +#line 6503 "conf_parser.c" /* yacc.c:1646 */ break; - case 683: -#line 3061 "conf_parser.y" /* yacc.c:1646 */ + case 670: +#line 2989 "conf_parser.y" /* yacc.c:1646 */ { if (conf_parser_ctx.pass == 2) ConfigServerHide.hide_server_ips = yylval.number; } -#line 6634 "conf_parser.c" /* yacc.c:1646 */ +#line 6512 "conf_parser.c" /* yacc.c:1646 */ break; -#line 6638 "conf_parser.c" /* yacc.c:1646 */ +#line 6516 "conf_parser.c" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/conf_parser.h ircd-hybrid-8.2.24+dfsg.1/src/conf_parser.h --- ircd-hybrid-8.2.22+dfsg.1/src/conf_parser.h 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/conf_parser.h 2018-04-04 22:33:37.000000000 +0000 @@ -59,227 +59,220 @@ CALLER_ID_WAIT = 269, CAN_FLOOD = 270, CHANNEL = 271, - CHECK_CACHE = 272, - CIDR_BITLEN_IPV4 = 273, - CIDR_BITLEN_IPV6 = 274, - CLASS = 275, - CLOSE = 276, - CONNECT = 277, - CONNECTFREQ = 278, - CYCLE_ON_HOST_CHANGE = 279, - DEFAULT_FLOODCOUNT = 280, - DEFAULT_FLOODTIME = 281, - DEFAULT_JOIN_FLOOD_COUNT = 282, - DEFAULT_JOIN_FLOOD_TIME = 283, - DEFAULT_MAX_CLIENTS = 284, - DENY = 285, - DESCRIPTION = 286, - DIE = 287, - DISABLE_AUTH = 288, - DISABLE_FAKE_CHANNELS = 289, - DISABLE_REMOTE_COMMANDS = 290, - DLINE_MIN_CIDR = 291, - DLINE_MIN_CIDR6 = 292, - DOTS_IN_IDENT = 293, - EMAIL = 294, - ENCRYPTED = 295, - EXCEED_LIMIT = 296, - EXEMPT = 297, - FAILED_OPER_NOTICE = 298, - FLATTEN_LINKS = 299, - FLATTEN_LINKS_DELAY = 300, - FLATTEN_LINKS_FILE = 301, - GECOS = 302, - GENERAL = 303, - HIDDEN = 304, - HIDDEN_NAME = 305, - HIDE_CHANS = 306, - HIDE_IDLE = 307, - HIDE_IDLE_FROM_OPERS = 308, - HIDE_SERVER_IPS = 309, - HIDE_SERVERS = 310, - HIDE_SERVICES = 311, - HOST = 312, - HUB = 313, - HUB_MASK = 314, - IGNORE_BOGUS_TS = 315, - INVISIBLE_ON_CONNECT = 316, - INVITE_CLIENT_COUNT = 317, - INVITE_CLIENT_TIME = 318, - INVITE_DELAY_CHANNEL = 319, - INVITE_EXPIRE_TIME = 320, - IP = 321, - IRCD_AUTH = 322, - IRCD_FLAGS = 323, - IRCD_SID = 324, - JOIN = 325, - KILL = 326, - KILL_CHASE_TIME_LIMIT = 327, - KLINE = 328, - KLINE_EXEMPT = 329, - KLINE_MIN_CIDR = 330, - KLINE_MIN_CIDR6 = 331, - KNOCK_CLIENT_COUNT = 332, - KNOCK_CLIENT_TIME = 333, - KNOCK_DELAY_CHANNEL = 334, - LEAF_MASK = 335, - LIBGEOIP_DATABASE_OPTIONS = 336, - LIBGEOIP_IPV4_DATABASE_FILE = 337, - LIBGEOIP_IPV6_DATABASE_FILE = 338, - LISTEN = 339, - MASK = 340, - MAX_ACCEPT = 341, - MAX_BANS = 342, - MAX_BANS_LARGE = 343, - MAX_CHANNELS = 344, - MAX_GLOBAL = 345, - MAX_IDLE = 346, - MAX_INVITES = 347, - MAX_LOCAL = 348, - MAX_NICK_CHANGES = 349, - MAX_NICK_LENGTH = 350, - MAX_NICK_TIME = 351, - MAX_NUMBER = 352, - MAX_TARGETS = 353, - MAX_TOPIC_LENGTH = 354, - MAX_WATCH = 355, - MEMORY_CACHE = 356, - MIN_IDLE = 357, - MIN_NONWILDCARD = 358, - MIN_NONWILDCARD_SIMPLE = 359, - MMAP_CACHE = 360, - MODULE = 361, - MODULES = 362, - MOTD = 363, - NAME = 364, - NEED_IDENT = 365, - NEED_PASSWORD = 366, - NETWORK_DESC = 367, - NETWORK_NAME = 368, - NICK = 369, - NO_OPER_FLOOD = 370, - NO_TILDE = 371, - NUMBER = 372, - NUMBER_PER_CIDR = 373, - NUMBER_PER_IP = 374, - OPER_ONLY_UMODES = 375, - OPER_UMODES = 376, - OPERATOR = 377, - OPERS_BYPASS_CALLERID = 378, - PACE_WAIT = 379, - PACE_WAIT_SIMPLE = 380, - PASSWORD = 381, - PATH = 382, - PING_COOKIE = 383, - PING_TIME = 384, - PORT = 385, - QSTRING = 386, - RANDOM_IDLE = 387, - REASON = 388, - REDIRPORT = 389, - REDIRSERV = 390, - REHASH = 391, - REMOTE = 392, - REMOTEBAN = 393, - RESV = 394, - RESV_EXEMPT = 395, - RSA_PRIVATE_KEY_FILE = 396, - SECONDS = 397, - MINUTES = 398, - HOURS = 399, - DAYS = 400, - WEEKS = 401, - MONTHS = 402, - YEARS = 403, - SEND_PASSWORD = 404, - SENDQ = 405, - SERVERHIDE = 406, - SERVERINFO = 407, - SHORT_MOTD = 408, - SPOOF = 409, - SPOOF_NOTICE = 410, - SQUIT = 411, - SSL_CERTIFICATE_FILE = 412, - SSL_CERTIFICATE_FINGERPRINT = 413, - SSL_CONNECTION_REQUIRED = 414, - SSL_DH_ELLIPTIC_CURVE = 415, - SSL_DH_PARAM_FILE = 416, - SSL_MESSAGE_DIGEST_ALGORITHM = 417, - STANDARD = 418, - STATS_E_DISABLED = 419, - STATS_I_OPER_ONLY = 420, - STATS_K_OPER_ONLY = 421, - STATS_M_OPER_ONLY = 422, - STATS_O_OPER_ONLY = 423, - STATS_P_OPER_ONLY = 424, - STATS_U_OPER_ONLY = 425, - T_ALL = 426, - T_BOTS = 427, - T_CALLERID = 428, - T_CCONN = 429, - T_COMMAND = 430, - T_CLUSTER = 431, - T_DEAF = 432, - T_DEBUG = 433, - T_DLINE = 434, - T_EXTERNAL = 435, - T_FARCONNECT = 436, - T_FILE = 437, - T_FULL = 438, - T_GLOBOPS = 439, - T_INVISIBLE = 440, - T_IPV4 = 441, - T_IPV6 = 442, - T_LOCOPS = 443, - T_LOG = 444, - T_NCHANGE = 445, - T_NONONREG = 446, - T_OPME = 447, - T_PREPEND = 448, - T_PSEUDO = 449, - T_RECVQ = 450, - T_REJ = 451, - T_RESTART = 452, - T_SERVER = 453, - T_SERVICE = 454, - T_SERVNOTICE = 455, - T_SET = 456, - T_SHARED = 457, - T_SIZE = 458, - T_SKILL = 459, - T_SOFTCALLERID = 460, - T_SPY = 461, - T_SSL = 462, - T_SSL_CIPHER_LIST = 463, - T_TARGET = 464, - T_UMODES = 465, - T_UNAUTH = 466, - T_UNDLINE = 467, - T_UNLIMITED = 468, - T_UNRESV = 469, - T_UNXLINE = 470, - T_WALLOP = 471, - T_WALLOPS = 472, - T_WEBIRC = 473, - TBOOL = 474, - THROTTLE_COUNT = 475, - THROTTLE_TIME = 476, - TKLINE_EXPIRE_NOTICES = 477, - TMASKED = 478, - TS_MAX_DELTA = 479, - TS_WARN_DELTA = 480, - TWODOTS = 481, - TYPE = 482, - UNKLINE = 483, - USE_LOGGING = 484, - USER = 485, - VHOST = 486, - VHOST6 = 487, - WARN_NO_CONNECT_BLOCK = 488, - WHOIS = 489, - WHOWAS_HISTORY_LENGTH = 490, - XLINE = 491, - XLINE_EXEMPT = 492 + CIDR_BITLEN_IPV4 = 272, + CIDR_BITLEN_IPV6 = 273, + CLASS = 274, + CLOSE = 275, + CONNECT = 276, + CONNECTFREQ = 277, + CYCLE_ON_HOST_CHANGE = 278, + DEFAULT_FLOODCOUNT = 279, + DEFAULT_FLOODTIME = 280, + DEFAULT_JOIN_FLOOD_COUNT = 281, + DEFAULT_JOIN_FLOOD_TIME = 282, + DEFAULT_MAX_CLIENTS = 283, + DENY = 284, + DESCRIPTION = 285, + DIE = 286, + DISABLE_AUTH = 287, + DISABLE_FAKE_CHANNELS = 288, + DISABLE_REMOTE_COMMANDS = 289, + DLINE_MIN_CIDR = 290, + DLINE_MIN_CIDR6 = 291, + DOTS_IN_IDENT = 292, + EMAIL = 293, + ENCRYPTED = 294, + EXCEED_LIMIT = 295, + EXEMPT = 296, + FAILED_OPER_NOTICE = 297, + FLATTEN_LINKS = 298, + FLATTEN_LINKS_DELAY = 299, + FLATTEN_LINKS_FILE = 300, + GECOS = 301, + GENERAL = 302, + HIDDEN = 303, + HIDDEN_NAME = 304, + HIDE_CHANS = 305, + HIDE_IDLE = 306, + HIDE_IDLE_FROM_OPERS = 307, + HIDE_SERVER_IPS = 308, + HIDE_SERVERS = 309, + HIDE_SERVICES = 310, + HOST = 311, + HUB = 312, + HUB_MASK = 313, + IGNORE_BOGUS_TS = 314, + INVISIBLE_ON_CONNECT = 315, + INVITE_CLIENT_COUNT = 316, + INVITE_CLIENT_TIME = 317, + INVITE_DELAY_CHANNEL = 318, + INVITE_EXPIRE_TIME = 319, + IP = 320, + IRCD_AUTH = 321, + IRCD_FLAGS = 322, + IRCD_SID = 323, + JOIN = 324, + KILL = 325, + KILL_CHASE_TIME_LIMIT = 326, + KLINE = 327, + KLINE_EXEMPT = 328, + KLINE_MIN_CIDR = 329, + KLINE_MIN_CIDR6 = 330, + KNOCK_CLIENT_COUNT = 331, + KNOCK_CLIENT_TIME = 332, + KNOCK_DELAY_CHANNEL = 333, + LEAF_MASK = 334, + LISTEN = 335, + MASK = 336, + MAX_ACCEPT = 337, + MAX_BANS = 338, + MAX_BANS_LARGE = 339, + MAX_CHANNELS = 340, + MAX_GLOBAL = 341, + MAX_IDLE = 342, + MAX_INVITES = 343, + MAX_LOCAL = 344, + MAX_NICK_CHANGES = 345, + MAX_NICK_LENGTH = 346, + MAX_NICK_TIME = 347, + MAX_NUMBER = 348, + MAX_TARGETS = 349, + MAX_TOPIC_LENGTH = 350, + MAX_WATCH = 351, + MIN_IDLE = 352, + MIN_NONWILDCARD = 353, + MIN_NONWILDCARD_SIMPLE = 354, + MODULE = 355, + MODULES = 356, + MOTD = 357, + NAME = 358, + NEED_IDENT = 359, + NEED_PASSWORD = 360, + NETWORK_DESC = 361, + NETWORK_NAME = 362, + NICK = 363, + NO_OPER_FLOOD = 364, + NO_TILDE = 365, + NUMBER = 366, + NUMBER_PER_CIDR = 367, + NUMBER_PER_IP = 368, + OPER_ONLY_UMODES = 369, + OPER_UMODES = 370, + OPERATOR = 371, + OPERS_BYPASS_CALLERID = 372, + PACE_WAIT = 373, + PACE_WAIT_SIMPLE = 374, + PASSWORD = 375, + PATH = 376, + PING_COOKIE = 377, + PING_TIME = 378, + PORT = 379, + QSTRING = 380, + RANDOM_IDLE = 381, + REASON = 382, + REDIRPORT = 383, + REDIRSERV = 384, + REHASH = 385, + REMOTE = 386, + REMOTEBAN = 387, + RESV = 388, + RESV_EXEMPT = 389, + RSA_PRIVATE_KEY_FILE = 390, + SECONDS = 391, + MINUTES = 392, + HOURS = 393, + DAYS = 394, + WEEKS = 395, + MONTHS = 396, + YEARS = 397, + SEND_PASSWORD = 398, + SENDQ = 399, + SERVERHIDE = 400, + SERVERINFO = 401, + SHORT_MOTD = 402, + SPOOF = 403, + SPOOF_NOTICE = 404, + SQUIT = 405, + SSL_CERTIFICATE_FILE = 406, + SSL_CERTIFICATE_FINGERPRINT = 407, + SSL_CONNECTION_REQUIRED = 408, + SSL_DH_ELLIPTIC_CURVE = 409, + SSL_DH_PARAM_FILE = 410, + SSL_MESSAGE_DIGEST_ALGORITHM = 411, + STATS_E_DISABLED = 412, + STATS_I_OPER_ONLY = 413, + STATS_K_OPER_ONLY = 414, + STATS_M_OPER_ONLY = 415, + STATS_O_OPER_ONLY = 416, + STATS_P_OPER_ONLY = 417, + STATS_U_OPER_ONLY = 418, + T_ALL = 419, + T_BOTS = 420, + T_CALLERID = 421, + T_CCONN = 422, + T_COMMAND = 423, + T_CLUSTER = 424, + T_DEAF = 425, + T_DEBUG = 426, + T_DLINE = 427, + T_EXTERNAL = 428, + T_FARCONNECT = 429, + T_FILE = 430, + T_FULL = 431, + T_GLOBOPS = 432, + T_INVISIBLE = 433, + T_IPV4 = 434, + T_IPV6 = 435, + T_LOCOPS = 436, + T_LOG = 437, + T_NCHANGE = 438, + T_NONONREG = 439, + T_OPME = 440, + T_PREPEND = 441, + T_PSEUDO = 442, + T_RECVQ = 443, + T_REJ = 444, + T_RESTART = 445, + T_SERVER = 446, + T_SERVICE = 447, + T_SERVNOTICE = 448, + T_SET = 449, + T_SHARED = 450, + T_SIZE = 451, + T_SKILL = 452, + T_SOFTCALLERID = 453, + T_SPY = 454, + T_SSL = 455, + T_SSL_CIPHER_LIST = 456, + T_TARGET = 457, + T_UMODES = 458, + T_UNAUTH = 459, + T_UNDLINE = 460, + T_UNLIMITED = 461, + T_UNRESV = 462, + T_UNXLINE = 463, + T_WALLOP = 464, + T_WALLOPS = 465, + T_WEBIRC = 466, + TBOOL = 467, + THROTTLE_COUNT = 468, + THROTTLE_TIME = 469, + TKLINE_EXPIRE_NOTICES = 470, + TMASKED = 471, + TS_MAX_DELTA = 472, + TS_WARN_DELTA = 473, + TWODOTS = 474, + TYPE = 475, + UNKLINE = 476, + USE_LOGGING = 477, + USER = 478, + VHOST = 479, + VHOST6 = 480, + WARN_NO_CONNECT_BLOCK = 481, + WHOIS = 482, + WHOWAS_HISTORY_LENGTH = 483, + XLINE = 484, + XLINE_EXEMPT = 485 }; #endif /* Tokens. */ @@ -297,239 +290,232 @@ #define CALLER_ID_WAIT 269 #define CAN_FLOOD 270 #define CHANNEL 271 -#define CHECK_CACHE 272 -#define CIDR_BITLEN_IPV4 273 -#define CIDR_BITLEN_IPV6 274 -#define CLASS 275 -#define CLOSE 276 -#define CONNECT 277 -#define CONNECTFREQ 278 -#define CYCLE_ON_HOST_CHANGE 279 -#define DEFAULT_FLOODCOUNT 280 -#define DEFAULT_FLOODTIME 281 -#define DEFAULT_JOIN_FLOOD_COUNT 282 -#define DEFAULT_JOIN_FLOOD_TIME 283 -#define DEFAULT_MAX_CLIENTS 284 -#define DENY 285 -#define DESCRIPTION 286 -#define DIE 287 -#define DISABLE_AUTH 288 -#define DISABLE_FAKE_CHANNELS 289 -#define DISABLE_REMOTE_COMMANDS 290 -#define DLINE_MIN_CIDR 291 -#define DLINE_MIN_CIDR6 292 -#define DOTS_IN_IDENT 293 -#define EMAIL 294 -#define ENCRYPTED 295 -#define EXCEED_LIMIT 296 -#define EXEMPT 297 -#define FAILED_OPER_NOTICE 298 -#define FLATTEN_LINKS 299 -#define FLATTEN_LINKS_DELAY 300 -#define FLATTEN_LINKS_FILE 301 -#define GECOS 302 -#define GENERAL 303 -#define HIDDEN 304 -#define HIDDEN_NAME 305 -#define HIDE_CHANS 306 -#define HIDE_IDLE 307 -#define HIDE_IDLE_FROM_OPERS 308 -#define HIDE_SERVER_IPS 309 -#define HIDE_SERVERS 310 -#define HIDE_SERVICES 311 -#define HOST 312 -#define HUB 313 -#define HUB_MASK 314 -#define IGNORE_BOGUS_TS 315 -#define INVISIBLE_ON_CONNECT 316 -#define INVITE_CLIENT_COUNT 317 -#define INVITE_CLIENT_TIME 318 -#define INVITE_DELAY_CHANNEL 319 -#define INVITE_EXPIRE_TIME 320 -#define IP 321 -#define IRCD_AUTH 322 -#define IRCD_FLAGS 323 -#define IRCD_SID 324 -#define JOIN 325 -#define KILL 326 -#define KILL_CHASE_TIME_LIMIT 327 -#define KLINE 328 -#define KLINE_EXEMPT 329 -#define KLINE_MIN_CIDR 330 -#define KLINE_MIN_CIDR6 331 -#define KNOCK_CLIENT_COUNT 332 -#define KNOCK_CLIENT_TIME 333 -#define KNOCK_DELAY_CHANNEL 334 -#define LEAF_MASK 335 -#define LIBGEOIP_DATABASE_OPTIONS 336 -#define LIBGEOIP_IPV4_DATABASE_FILE 337 -#define LIBGEOIP_IPV6_DATABASE_FILE 338 -#define LISTEN 339 -#define MASK 340 -#define MAX_ACCEPT 341 -#define MAX_BANS 342 -#define MAX_BANS_LARGE 343 -#define MAX_CHANNELS 344 -#define MAX_GLOBAL 345 -#define MAX_IDLE 346 -#define MAX_INVITES 347 -#define MAX_LOCAL 348 -#define MAX_NICK_CHANGES 349 -#define MAX_NICK_LENGTH 350 -#define MAX_NICK_TIME 351 -#define MAX_NUMBER 352 -#define MAX_TARGETS 353 -#define MAX_TOPIC_LENGTH 354 -#define MAX_WATCH 355 -#define MEMORY_CACHE 356 -#define MIN_IDLE 357 -#define MIN_NONWILDCARD 358 -#define MIN_NONWILDCARD_SIMPLE 359 -#define MMAP_CACHE 360 -#define MODULE 361 -#define MODULES 362 -#define MOTD 363 -#define NAME 364 -#define NEED_IDENT 365 -#define NEED_PASSWORD 366 -#define NETWORK_DESC 367 -#define NETWORK_NAME 368 -#define NICK 369 -#define NO_OPER_FLOOD 370 -#define NO_TILDE 371 -#define NUMBER 372 -#define NUMBER_PER_CIDR 373 -#define NUMBER_PER_IP 374 -#define OPER_ONLY_UMODES 375 -#define OPER_UMODES 376 -#define OPERATOR 377 -#define OPERS_BYPASS_CALLERID 378 -#define PACE_WAIT 379 -#define PACE_WAIT_SIMPLE 380 -#define PASSWORD 381 -#define PATH 382 -#define PING_COOKIE 383 -#define PING_TIME 384 -#define PORT 385 -#define QSTRING 386 -#define RANDOM_IDLE 387 -#define REASON 388 -#define REDIRPORT 389 -#define REDIRSERV 390 -#define REHASH 391 -#define REMOTE 392 -#define REMOTEBAN 393 -#define RESV 394 -#define RESV_EXEMPT 395 -#define RSA_PRIVATE_KEY_FILE 396 -#define SECONDS 397 -#define MINUTES 398 -#define HOURS 399 -#define DAYS 400 -#define WEEKS 401 -#define MONTHS 402 -#define YEARS 403 -#define SEND_PASSWORD 404 -#define SENDQ 405 -#define SERVERHIDE 406 -#define SERVERINFO 407 -#define SHORT_MOTD 408 -#define SPOOF 409 -#define SPOOF_NOTICE 410 -#define SQUIT 411 -#define SSL_CERTIFICATE_FILE 412 -#define SSL_CERTIFICATE_FINGERPRINT 413 -#define SSL_CONNECTION_REQUIRED 414 -#define SSL_DH_ELLIPTIC_CURVE 415 -#define SSL_DH_PARAM_FILE 416 -#define SSL_MESSAGE_DIGEST_ALGORITHM 417 -#define STANDARD 418 -#define STATS_E_DISABLED 419 -#define STATS_I_OPER_ONLY 420 -#define STATS_K_OPER_ONLY 421 -#define STATS_M_OPER_ONLY 422 -#define STATS_O_OPER_ONLY 423 -#define STATS_P_OPER_ONLY 424 -#define STATS_U_OPER_ONLY 425 -#define T_ALL 426 -#define T_BOTS 427 -#define T_CALLERID 428 -#define T_CCONN 429 -#define T_COMMAND 430 -#define T_CLUSTER 431 -#define T_DEAF 432 -#define T_DEBUG 433 -#define T_DLINE 434 -#define T_EXTERNAL 435 -#define T_FARCONNECT 436 -#define T_FILE 437 -#define T_FULL 438 -#define T_GLOBOPS 439 -#define T_INVISIBLE 440 -#define T_IPV4 441 -#define T_IPV6 442 -#define T_LOCOPS 443 -#define T_LOG 444 -#define T_NCHANGE 445 -#define T_NONONREG 446 -#define T_OPME 447 -#define T_PREPEND 448 -#define T_PSEUDO 449 -#define T_RECVQ 450 -#define T_REJ 451 -#define T_RESTART 452 -#define T_SERVER 453 -#define T_SERVICE 454 -#define T_SERVNOTICE 455 -#define T_SET 456 -#define T_SHARED 457 -#define T_SIZE 458 -#define T_SKILL 459 -#define T_SOFTCALLERID 460 -#define T_SPY 461 -#define T_SSL 462 -#define T_SSL_CIPHER_LIST 463 -#define T_TARGET 464 -#define T_UMODES 465 -#define T_UNAUTH 466 -#define T_UNDLINE 467 -#define T_UNLIMITED 468 -#define T_UNRESV 469 -#define T_UNXLINE 470 -#define T_WALLOP 471 -#define T_WALLOPS 472 -#define T_WEBIRC 473 -#define TBOOL 474 -#define THROTTLE_COUNT 475 -#define THROTTLE_TIME 476 -#define TKLINE_EXPIRE_NOTICES 477 -#define TMASKED 478 -#define TS_MAX_DELTA 479 -#define TS_WARN_DELTA 480 -#define TWODOTS 481 -#define TYPE 482 -#define UNKLINE 483 -#define USE_LOGGING 484 -#define USER 485 -#define VHOST 486 -#define VHOST6 487 -#define WARN_NO_CONNECT_BLOCK 488 -#define WHOIS 489 -#define WHOWAS_HISTORY_LENGTH 490 -#define XLINE 491 -#define XLINE_EXEMPT 492 +#define CIDR_BITLEN_IPV4 272 +#define CIDR_BITLEN_IPV6 273 +#define CLASS 274 +#define CLOSE 275 +#define CONNECT 276 +#define CONNECTFREQ 277 +#define CYCLE_ON_HOST_CHANGE 278 +#define DEFAULT_FLOODCOUNT 279 +#define DEFAULT_FLOODTIME 280 +#define DEFAULT_JOIN_FLOOD_COUNT 281 +#define DEFAULT_JOIN_FLOOD_TIME 282 +#define DEFAULT_MAX_CLIENTS 283 +#define DENY 284 +#define DESCRIPTION 285 +#define DIE 286 +#define DISABLE_AUTH 287 +#define DISABLE_FAKE_CHANNELS 288 +#define DISABLE_REMOTE_COMMANDS 289 +#define DLINE_MIN_CIDR 290 +#define DLINE_MIN_CIDR6 291 +#define DOTS_IN_IDENT 292 +#define EMAIL 293 +#define ENCRYPTED 294 +#define EXCEED_LIMIT 295 +#define EXEMPT 296 +#define FAILED_OPER_NOTICE 297 +#define FLATTEN_LINKS 298 +#define FLATTEN_LINKS_DELAY 299 +#define FLATTEN_LINKS_FILE 300 +#define GECOS 301 +#define GENERAL 302 +#define HIDDEN 303 +#define HIDDEN_NAME 304 +#define HIDE_CHANS 305 +#define HIDE_IDLE 306 +#define HIDE_IDLE_FROM_OPERS 307 +#define HIDE_SERVER_IPS 308 +#define HIDE_SERVERS 309 +#define HIDE_SERVICES 310 +#define HOST 311 +#define HUB 312 +#define HUB_MASK 313 +#define IGNORE_BOGUS_TS 314 +#define INVISIBLE_ON_CONNECT 315 +#define INVITE_CLIENT_COUNT 316 +#define INVITE_CLIENT_TIME 317 +#define INVITE_DELAY_CHANNEL 318 +#define INVITE_EXPIRE_TIME 319 +#define IP 320 +#define IRCD_AUTH 321 +#define IRCD_FLAGS 322 +#define IRCD_SID 323 +#define JOIN 324 +#define KILL 325 +#define KILL_CHASE_TIME_LIMIT 326 +#define KLINE 327 +#define KLINE_EXEMPT 328 +#define KLINE_MIN_CIDR 329 +#define KLINE_MIN_CIDR6 330 +#define KNOCK_CLIENT_COUNT 331 +#define KNOCK_CLIENT_TIME 332 +#define KNOCK_DELAY_CHANNEL 333 +#define LEAF_MASK 334 +#define LISTEN 335 +#define MASK 336 +#define MAX_ACCEPT 337 +#define MAX_BANS 338 +#define MAX_BANS_LARGE 339 +#define MAX_CHANNELS 340 +#define MAX_GLOBAL 341 +#define MAX_IDLE 342 +#define MAX_INVITES 343 +#define MAX_LOCAL 344 +#define MAX_NICK_CHANGES 345 +#define MAX_NICK_LENGTH 346 +#define MAX_NICK_TIME 347 +#define MAX_NUMBER 348 +#define MAX_TARGETS 349 +#define MAX_TOPIC_LENGTH 350 +#define MAX_WATCH 351 +#define MIN_IDLE 352 +#define MIN_NONWILDCARD 353 +#define MIN_NONWILDCARD_SIMPLE 354 +#define MODULE 355 +#define MODULES 356 +#define MOTD 357 +#define NAME 358 +#define NEED_IDENT 359 +#define NEED_PASSWORD 360 +#define NETWORK_DESC 361 +#define NETWORK_NAME 362 +#define NICK 363 +#define NO_OPER_FLOOD 364 +#define NO_TILDE 365 +#define NUMBER 366 +#define NUMBER_PER_CIDR 367 +#define NUMBER_PER_IP 368 +#define OPER_ONLY_UMODES 369 +#define OPER_UMODES 370 +#define OPERATOR 371 +#define OPERS_BYPASS_CALLERID 372 +#define PACE_WAIT 373 +#define PACE_WAIT_SIMPLE 374 +#define PASSWORD 375 +#define PATH 376 +#define PING_COOKIE 377 +#define PING_TIME 378 +#define PORT 379 +#define QSTRING 380 +#define RANDOM_IDLE 381 +#define REASON 382 +#define REDIRPORT 383 +#define REDIRSERV 384 +#define REHASH 385 +#define REMOTE 386 +#define REMOTEBAN 387 +#define RESV 388 +#define RESV_EXEMPT 389 +#define RSA_PRIVATE_KEY_FILE 390 +#define SECONDS 391 +#define MINUTES 392 +#define HOURS 393 +#define DAYS 394 +#define WEEKS 395 +#define MONTHS 396 +#define YEARS 397 +#define SEND_PASSWORD 398 +#define SENDQ 399 +#define SERVERHIDE 400 +#define SERVERINFO 401 +#define SHORT_MOTD 402 +#define SPOOF 403 +#define SPOOF_NOTICE 404 +#define SQUIT 405 +#define SSL_CERTIFICATE_FILE 406 +#define SSL_CERTIFICATE_FINGERPRINT 407 +#define SSL_CONNECTION_REQUIRED 408 +#define SSL_DH_ELLIPTIC_CURVE 409 +#define SSL_DH_PARAM_FILE 410 +#define SSL_MESSAGE_DIGEST_ALGORITHM 411 +#define STATS_E_DISABLED 412 +#define STATS_I_OPER_ONLY 413 +#define STATS_K_OPER_ONLY 414 +#define STATS_M_OPER_ONLY 415 +#define STATS_O_OPER_ONLY 416 +#define STATS_P_OPER_ONLY 417 +#define STATS_U_OPER_ONLY 418 +#define T_ALL 419 +#define T_BOTS 420 +#define T_CALLERID 421 +#define T_CCONN 422 +#define T_COMMAND 423 +#define T_CLUSTER 424 +#define T_DEAF 425 +#define T_DEBUG 426 +#define T_DLINE 427 +#define T_EXTERNAL 428 +#define T_FARCONNECT 429 +#define T_FILE 430 +#define T_FULL 431 +#define T_GLOBOPS 432 +#define T_INVISIBLE 433 +#define T_IPV4 434 +#define T_IPV6 435 +#define T_LOCOPS 436 +#define T_LOG 437 +#define T_NCHANGE 438 +#define T_NONONREG 439 +#define T_OPME 440 +#define T_PREPEND 441 +#define T_PSEUDO 442 +#define T_RECVQ 443 +#define T_REJ 444 +#define T_RESTART 445 +#define T_SERVER 446 +#define T_SERVICE 447 +#define T_SERVNOTICE 448 +#define T_SET 449 +#define T_SHARED 450 +#define T_SIZE 451 +#define T_SKILL 452 +#define T_SOFTCALLERID 453 +#define T_SPY 454 +#define T_SSL 455 +#define T_SSL_CIPHER_LIST 456 +#define T_TARGET 457 +#define T_UMODES 458 +#define T_UNAUTH 459 +#define T_UNDLINE 460 +#define T_UNLIMITED 461 +#define T_UNRESV 462 +#define T_UNXLINE 463 +#define T_WALLOP 464 +#define T_WALLOPS 465 +#define T_WEBIRC 466 +#define TBOOL 467 +#define THROTTLE_COUNT 468 +#define THROTTLE_TIME 469 +#define TKLINE_EXPIRE_NOTICES 470 +#define TMASKED 471 +#define TS_MAX_DELTA 472 +#define TS_WARN_DELTA 473 +#define TWODOTS 474 +#define TYPE 475 +#define UNKLINE 476 +#define USE_LOGGING 477 +#define USER 478 +#define VHOST 479 +#define VHOST6 480 +#define WARN_NO_CONNECT_BLOCK 481 +#define WHOIS 482 +#define WHOWAS_HISTORY_LENGTH 483 +#define XLINE 484 +#define XLINE_EXEMPT 485 /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 141 "conf_parser.y" /* yacc.c:1909 */ +#line 142 "conf_parser.y" /* yacc.c:1909 */ int number; char *string; -#line 533 "conf_parser.h" /* yacc.c:1909 */ +#line 519 "conf_parser.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/conf_parser.y ircd-hybrid-8.2.24+dfsg.1/src/conf_parser.y --- ircd-hybrid-8.2.22+dfsg.1/src/conf_parser.y 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/conf_parser.y 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2000-2017 ircd-hybrid development team + * Copyright (c) 2000-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file conf_parser.y * \brief Parses the ircd configuration file. - * \version $Id: conf_parser.y 8045 2017-03-18 18:05:41Z michael $ + * \version $Id: conf_parser.y 8457 2018-03-31 15:33:39Z michael $ */ @@ -31,6 +31,7 @@ #include "stdinc.h" #include "ircd.h" #include "list.h" +#include "parse.h" #include "conf.h" #include "conf_class.h" #include "conf_cluster.h" @@ -155,7 +156,6 @@ %token CALLER_ID_WAIT %token CAN_FLOOD %token CHANNEL -%token CHECK_CACHE %token CIDR_BITLEN_IPV4 %token CIDR_BITLEN_IPV6 %token CLASS @@ -219,9 +219,6 @@ %token KNOCK_CLIENT_TIME %token KNOCK_DELAY_CHANNEL %token LEAF_MASK -%token LIBGEOIP_DATABASE_OPTIONS -%token LIBGEOIP_IPV4_DATABASE_FILE -%token LIBGEOIP_IPV6_DATABASE_FILE %token LISTEN %token MASK %token MAX_ACCEPT @@ -239,11 +236,9 @@ %token MAX_TARGETS %token MAX_TOPIC_LENGTH %token MAX_WATCH -%token MEMORY_CACHE %token MIN_IDLE %token MIN_NONWILDCARD %token MIN_NONWILDCARD_SIMPLE -%token MMAP_CACHE %token MODULE %token MODULES %token MOTD @@ -295,7 +290,6 @@ %token SSL_DH_ELLIPTIC_CURVE %token SSL_DH_PARAM_FILE %token SSL_MESSAGE_DIGEST_ALGORITHM -%token STANDARD %token STATS_E_DISABLED %token STATS_I_OPER_ONLY %token STATS_K_OPER_ONLY @@ -473,9 +467,6 @@ serverinfo_ssl_certificate_file | serverinfo_ssl_cipher_list | serverinfo_ssl_message_digest_algorithm | - serverinfo_libgeoip_database_options | - serverinfo_libgeoip_ipv4_database_file | - serverinfo_libgeoip_ipv6_database_file | error ';' ; @@ -533,75 +524,12 @@ } }; -serverinfo_libgeoip_database_options: LIBGEOIP_DATABASE_OPTIONS -{ - if (conf_parser_ctx.pass == 1) - ConfigServerInfo.libgeoip_database_options = 0; -} '=' options_items ';'; - -options_items: options_items ',' options_item | options_item; -options_item: STANDARD -{ -#ifdef HAVE_LIBGEOIP - if (conf_parser_ctx.pass == 1) - ConfigServerInfo.libgeoip_database_options |= GEOIP_STANDARD; -#endif -} | MEMORY_CACHE -{ -#ifdef HAVE_LIBGEOIP - if (conf_parser_ctx.pass == 1) - ConfigServerInfo.libgeoip_database_options |= GEOIP_MEMORY_CACHE; -#endif -} | MMAP_CACHE -{ -#ifdef HAVE_LIBGEOIP - if (conf_parser_ctx.pass == 1) - ConfigServerInfo.libgeoip_database_options |= GEOIP_MMAP_CACHE; -#endif -} | CHECK_CACHE -{ -#ifdef HAVE_LIBGEOIP - if (conf_parser_ctx.pass == 1) - ConfigServerInfo.libgeoip_database_options |= GEOIP_CHECK_CACHE; -#endif -}; - -serverinfo_libgeoip_ipv4_database_file: LIBGEOIP_IPV4_DATABASE_FILE '=' QSTRING ';' -{ - if (conf_parser_ctx.pass == 2) - { - xfree(ConfigServerInfo.libgeoip_ipv4_database_file); - ConfigServerInfo.libgeoip_ipv4_database_file = xstrdup(yylval.string); - -#ifdef HAVE_LIBGEOIP - if (GeoIPv4_ctx) - GeoIP_delete(GeoIPv4_ctx); - GeoIPv4_ctx = GeoIP_open(yylval.string, ConfigServerInfo.libgeoip_database_options); -#endif - } -}; - -serverinfo_libgeoip_ipv6_database_file: LIBGEOIP_IPV6_DATABASE_FILE '=' QSTRING ';' -{ - if (conf_parser_ctx.pass == 2) - { - xfree(ConfigServerInfo.libgeoip_ipv6_database_file); - ConfigServerInfo.libgeoip_ipv6_database_file = xstrdup(yylval.string); - -#ifdef HAVE_LIBGEOIP - if (GeoIPv6_ctx) - GeoIP_delete(GeoIPv6_ctx); - GeoIPv6_ctx = GeoIP_open(yylval.string, ConfigServerInfo.libgeoip_database_options); -#endif - } -}; - serverinfo_name: NAME '=' QSTRING ';' { /* This isn't rehashable */ if (conf_parser_ctx.pass == 2 && !ConfigServerInfo.name) { - if (valid_servname(yylval.string)) + if (server_valid_name(yylval.string)) ConfigServerInfo.name = xstrdup(yylval.string); else { @@ -1876,7 +1804,7 @@ if (conf_parser_ctx.pass != 2) break; - if (valid_servname(yylval.string)) + if (server_valid_name(yylval.string)) { struct ServiceItem *service = service_make(); service->name = xstrdup(yylval.string); diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/conf_pseudo.c ircd-hybrid-8.2.24+dfsg.1/src/conf_pseudo.c --- ircd-hybrid-8.2.22+dfsg.1/src/conf_pseudo.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/conf_pseudo.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2014-2017 ircd-hybrid development team + * Copyright (c) 2014-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file conf_pseudo.c * \brief Handles with pseudo commands/service aliases. - * \version $Id: conf_pseudo.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: conf_pseudo.c 8461 2018-03-31 15:42:41Z michael $ */ #include "stdinc.h" @@ -38,16 +38,6 @@ #include "server.h" #include "conf_pseudo.h" -struct PseudoItem -{ - dlink_node node; - struct Message msg; - char *name; - char *nick; - char *serv; - char *prepend; - char *command; -}; static dlink_list pseudo_list; @@ -59,7 +49,7 @@ } static int -m_pseudo(struct Client *source_p, int parc, char *parv[]) +pseudo_message_handler(struct Client *source_p, int parc, char *parv[]) { char buffer[IRCD_BUFSIZE] = ""; const struct PseudoItem *const pseudo = (const struct PseudoItem *)parv[1]; @@ -73,7 +63,7 @@ return 0; } - if (!EmptyString(pseudo->prepend)) + if (pseudo->prepend) { snprintf(buffer, sizeof(buffer), "%s%s", pseudo->prepend, msg); msg = buffer; @@ -83,13 +73,10 @@ server_p = hash_find_server(pseudo->serv); if (target_p && server_p && (target_p->servptr == server_p) && !IsMe(server_p)) - { - sendto_one(target_p, ":%s PRIVMSG %s :%s", - source_p->id, target_p->id, msg); - return 0; - } + sendto_one(target_p, ":%s PRIVMSG %s :%s", source_p->id, target_p->id, msg); + else + sendto_one_numeric(source_p, &me, ERR_SERVICESDOWN, pseudo->name); - sendto_one_numeric(source_p, &me, ERR_SERVICESDOWN, pseudo->name); return 0; } @@ -105,18 +92,19 @@ pseudo->name = xstrdup(name); pseudo->nick = xstrdup(nick); pseudo->serv = xstrdup(serv); - pseudo->prepend = xstrdup(prepend); pseudo->command = xstrdup(command); + if (!EmptyString(prepend)) + pseudo->prepend = xstrdup(prepend); pseudo->msg.cmd = pseudo->command; pseudo->msg.args_max = 2; pseudo->msg.flags = MFLG_EXTRA; pseudo->msg.extra = pseudo; pseudo->msg.handlers[UNREGISTERED_HANDLER] = m_unregistered; - pseudo->msg.handlers[CLIENT_HANDLER] = m_pseudo; + pseudo->msg.handlers[CLIENT_HANDLER] = pseudo_message_handler; pseudo->msg.handlers[SERVER_HANDLER] = m_ignore; pseudo->msg.handlers[ENCAP_HANDLER] = m_ignore; - pseudo->msg.handlers[OPER_HANDLER] = m_pseudo; + pseudo->msg.handlers[OPER_HANDLER] = pseudo_message_handler; dlinkAdd(pseudo, &pseudo->node, &pseudo_list); mod_add_cmd(&pseudo->msg); diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/conf_resv.c ircd-hybrid-8.2.24+dfsg.1/src/conf_resv.c --- ircd-hybrid-8.2.22+dfsg.1/src/conf_resv.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/conf_resv.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2001-2017 ircd-hybrid development team + * Copyright (c) 2001-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file conf_resv.c * \brief Functions to reserve(jupe) a nick/channel. - * \version $Id: conf_resv.c 8058 2017-03-23 16:13:10Z michael $ + * \version $Id: conf_resv.c 8472 2018-04-03 12:54:41Z michael $ */ #include "stdinc.h" @@ -113,35 +113,23 @@ struct split_nuh_item nuh; char *s = node->data; - if (strlen(s) == 2 && IsAlpha(*(s + 1) && IsAlpha(*(s + 2)))) - { -#ifdef HAVE_LIBGEOIP - struct ResvExemptItem *exempt = xcalloc(sizeof(*exempt)); - exempt->name = xstrdup(s); - exempt->country_id = GeoIP_id_by_code(s); - dlinkAdd(exempt, &exempt->node, &resv->exempt_list); -#endif - } - else - { - nuh.nuhmask = s; - nuh.nickptr = nick; - nuh.userptr = user; - nuh.hostptr = host; - - nuh.nicksize = sizeof(nick); - nuh.usersize = sizeof(user); - nuh.hostsize = sizeof(host); - - split_nuh(&nuh); - - struct ResvExemptItem *exempt = xcalloc(sizeof(*exempt)); - exempt->name = xstrdup(nick); - exempt->user = xstrdup(user); - exempt->host = xstrdup(host); - exempt->type = parse_netmask(host, &exempt->addr, &exempt->bits); - dlinkAdd(exempt, &exempt->node, &resv->exempt_list); - } + nuh.nuhmask = s; + nuh.nickptr = nick; + nuh.userptr = user; + nuh.hostptr = host; + + nuh.nicksize = sizeof(nick); + nuh.usersize = sizeof(user); + nuh.hostsize = sizeof(host); + + split_nuh(&nuh); + + struct ResvExemptItem *exempt = xcalloc(sizeof(*exempt)); + exempt->name = xstrdup(nick); + exempt->user = xstrdup(user); + exempt->host = xstrdup(host); + exempt->type = parse_netmask(host, &exempt->addr, &exempt->bits); + dlinkAdd(exempt, &exempt->node, &resv->exempt_list); } } @@ -179,12 +167,7 @@ { const struct ResvExemptItem *exempt = node->data; - if (exempt->country_id) - { - if (exempt->country_id == client_p->connection->country_id) - return 1; - } - else if (!match(exempt->name, client_p->name) && !match(exempt->user, client_p->username)) + if (!match(exempt->name, client_p->name) && !match(exempt->user, client_p->username)) { switch (exempt->type) { @@ -224,7 +207,7 @@ { struct ResvItem *resv = node->data; - if (!resv->in_database) + if (resv->in_database == 0) resv_delete(resv); } } @@ -243,7 +226,7 @@ { struct ResvItem *resv = node->data; - if (!resv->expire || resv->expire > CurrentTime) + if (resv->expire == 0 || resv->expire > CurrentTime) continue; if (ConfigGeneral.tkline_expire_notices) diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/conf_service.c ircd-hybrid-8.2.24+dfsg.1/src/conf_service.c --- ircd-hybrid-8.2.22+dfsg.1/src/conf_service.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/conf_service.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2012-2017 ircd-hybrid development team + * Copyright (c) 2012-2018 ircd-hybrid development team * * 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 @@ -21,12 +21,11 @@ /*! \file conf_service.c * \brief Implements service {} block configuration management. - * \version $Id: conf_service.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: conf_service.c 8432 2018-03-27 20:10:09Z michael $ */ #include "stdinc.h" #include "list.h" -#include "irc_string.h" #include "memory.h" #include "conf_service.h" @@ -63,7 +62,7 @@ } const struct ServiceItem * -service_find(const char *name) +service_find(const char *name, int (*compare)(const char *, const char *)) { dlink_node *node; @@ -71,7 +70,7 @@ { const struct ServiceItem *service = node->data; - if (!irccmp(service->name, name)) + if (!compare(service->name, name)) return service; } diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/conf_shared.c ircd-hybrid-8.2.24+dfsg.1/src/conf_shared.c --- ircd-hybrid-8.2.22+dfsg.1/src/conf_shared.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/conf_shared.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file conf_shared.c * \brief Implements shared {} block configuration management. - * \version $Id: conf_shared.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: conf_shared.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/dbuf.c ircd-hybrid-8.2.24+dfsg.1/src/dbuf.c --- ircd-hybrid-8.2.22+dfsg.1/src/dbuf.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/dbuf.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,28 +21,19 @@ /*! \file dbuf.c * \brief Supports dynamic data buffers. - * \version $Id: dbuf.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: dbuf.c 8384 2018-03-16 20:06:38Z michael $ */ #include "stdinc.h" #include "list.h" #include "dbuf.h" #include "memory.h" -#include "mempool.h" -static mp_pool_t *dbuf_pool; - -void -dbuf_init(void) -{ - dbuf_pool = mp_pool_new(sizeof(struct dbuf_block), MP_CHUNK_SIZE_DBUF); -} - struct dbuf_block * dbuf_alloc(void) { - struct dbuf_block *block = mp_pool_get(dbuf_pool); + struct dbuf_block *block = xcalloc(sizeof(*block)); ++block->refs; return block; @@ -52,7 +43,7 @@ dbuf_ref_free(struct dbuf_block *block) { if (--block->refs <= 0) - mp_pool_release(block); + xfree(block); } void diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/event.c ircd-hybrid-8.2.24+dfsg.1/src/event.c --- ircd-hybrid-8.2.22+dfsg.1/src/event.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/event.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2000-2017 ircd-hybrid development team + * Copyright (c) 2000-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file event.c * \brief Timer based event execution - * \version $Id: event.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: event.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -80,7 +80,7 @@ void event_delete(struct event *ev) { - if (!ev->active) + if (ev->active == 0) return; dlinkDelete(&ev->node, &event_list); @@ -108,7 +108,7 @@ ev->handler(ev->data); - if (!ev->oneshot) + if (ev->oneshot == 0) event_add(ev, ev->data); } } diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/fdlist.c ircd-hybrid-8.2.24+dfsg.1/src/fdlist.c --- ircd-hybrid-8.2.22+dfsg.1/src/fdlist.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/fdlist.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,33 +21,27 @@ /*! \file fdlist.c * \brief Maintains a list of file descriptors. - * \version $Id: fdlist.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: fdlist.c 8378 2018-03-11 14:56:39Z michael $ */ #include "stdinc.h" #include "fdlist.h" -#include "client.h" /* struct Client */ -#include "event.h" -#include "ircd.h" /* GlobalSetOptions */ #include "irc_string.h" #include "s_bsd.h" /* comm_setselect */ -#include "conf.h" /* ConfigServerInfo */ -#include "send.h" #include "memory.h" -#include "numeric.h" #include "misc.h" #include "res.h" -fde_t *fd_hash[FD_HASH_SIZE]; -fde_t *fd_next_in_loop = NULL; + +fde_t *fd_table; int number_fd = LEAKED_FDS; int hard_fdlimit = 0; +int highest_fd; void fdlist_init(void) { - int fdmax; struct rlimit limit; if (!getrlimit(RLIMIT_NOFILE, &limit)) @@ -56,74 +50,77 @@ setrlimit(RLIMIT_NOFILE, &limit); } - fdmax = getdtablesize(); - /* allow MAXCLIENTS_MIN clients even at the cost of MAX_BUFFER and * some not really LEAKED_FDS */ - fdmax = IRCD_MAX(fdmax, LEAKED_FDS + MAX_BUFFER + MAXCLIENTS_MIN); - - /* under no condition shall this raise over 65536 - * for example user ip heap is sized 2*hard_fdlimit */ - hard_fdlimit = IRCD_MIN(fdmax, 65536); + hard_fdlimit = IRCD_MAX(getdtablesize(), LEAKED_FDS + MAX_BUFFER + MAXCLIENTS_MIN); + fd_table = xcalloc(sizeof(fde_t) * hard_fdlimit); } -static inline unsigned int -hash_fd(int fd) +static void +fdlist_update_highest_fd(int fd, int opening) { - return ((unsigned int)fd) % FD_HASH_SIZE; -} + if (fd < highest_fd) + return; -fde_t * -lookup_fd(int fd) -{ - fde_t *F = fd_hash[hash_fd(fd)]; + assert(fd < hard_fdlimit); - while (F) + if (fd > highest_fd) { - if (F->fd == fd) - return F; - F = F->hnext; + /* + * assert() that we are not closing a FD bigger than our known highest FD. + */ + assert(opening); + highest_fd = fd; + return; } - return NULL; + /* If we are here, then fd == highest_fd */ + /* + * assert() that we are closing the highest FD; we can't be re-opening it. + */ + assert(!opening); + + while (highest_fd >= 0 && fd_table[highest_fd].flags.open == 0) + --highest_fd; } /* Called to open a given filedescriptor */ -void -fd_open(fde_t *F, int fd, int is_socket, const char *desc) +fde_t * +fd_open(int fd, int is_socket, const char *desc) { - unsigned int hashv = hash_fd(fd); + fde_t *F = &fd_table[fd]; assert(fd >= 0); - assert(!F->flags.open); + assert(F->fd == 0); + assert(F->flags.open == 0); + /* + * Note: normally we'd have to clear the other flags, but currently F + * is always cleared before calling us. + */ F->fd = fd; F->comm_index = -1; + F->flags.open = 1; + F->flags.is_socket = is_socket; if (desc) strlcpy(F->desc, desc, sizeof(F->desc)); - /* Note: normally we'd have to clear the other flags, - * but currently F is always cleared before calling us.. */ - F->flags.open = 1; - F->flags.is_socket = is_socket; - F->hnext = fd_hash[hashv]; - fd_hash[hashv] = F; + ++number_fd; + fdlist_update_highest_fd(fd, 1); - number_fd++; + return F; } /* Called to close a given filedescriptor */ void fd_close(fde_t *F) { - unsigned int hashv = hash_fd(F->fd); + const int fd = F->fd; + assert(F->fd >= 0); assert(F->flags.open); - if (F == fd_next_in_loop) - fd_next_in_loop = F->hnext; - if (F->flags.is_socket) comm_setselect(F, COMM_SELECT_WRITE | COMM_SELECT_READ, NULL, NULL, 0); @@ -132,35 +129,12 @@ if (tls_isusing(&F->ssl)) tls_free(&F->ssl); - if (fd_hash[hashv] == F) - fd_hash[hashv] = F->hnext; - else - { - fde_t *prev; - - /* let it core if not found */ - for (prev = fd_hash[hashv]; prev->hnext != F; prev = prev->hnext) - ; - prev->hnext = F->hnext; - } - /* Unlike squid, we're actually closing the FD here! -- adrian */ close(F->fd); - number_fd--; + memset(F, 0, sizeof(*F)); /* Must set F->flags.open == 0 before fdlist_update_highest_fd() */ - memset(F, 0, sizeof(fde_t)); -} - -/* - * fd_dump() - dump the list of active filedescriptors - */ -void -fd_dump(struct Client *source_p, int parc, char *parv[]) -{ - for (unsigned int i = 0; i < FD_HASH_SIZE; ++i) - for (fde_t *F = fd_hash[i]; F; F = F->hnext) - sendto_one_numeric(source_p, &me, RPL_STATSDEBUG | SND_EXPLICIT, - "F :fd %-5d desc '%s'", F->fd, F->desc); + --number_fd; + fdlist_update_highest_fd(fd, 0); } /* @@ -190,7 +164,7 @@ void close_standard_fds(void) { - for (unsigned int i = 0; i < LOWEST_SAFE_FD; ++i) + for (int i = 0; i < LOWEST_SAFE_FD; ++i) { close(i); @@ -200,10 +174,8 @@ } void -close_fds(fde_t *one) +close_fds(void) { - for (unsigned int i = 0; i < FD_HASH_SIZE; ++i) - for (fde_t *F = fd_hash[i]; F; F = F->hnext) - if (F != one) - close(F->fd); + for (int fd = 0; fd <= highest_fd; ++fd) + close(fd); } diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/getopt.c ircd-hybrid-8.2.24+dfsg.1/src/getopt.c --- ircd-hybrid-8.2.22+dfsg.1/src/getopt.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/getopt.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2001-2017 ircd-hybrid development team + * Copyright (c) 2001-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file getopt.c * \brief Uses getopt to fetch the command line options. - * \version $Id: getopt.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: getopt.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/hash.c ircd-hybrid-8.2.24+dfsg.1/src/hash.c --- ircd-hybrid-8.2.22+dfsg.1/src/hash.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/hash.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file hash.c * \brief Hash table management. - * \version $Id: hash.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: hash.c 8388 2018-03-16 20:23:06Z michael $ */ #include "stdinc.h" @@ -528,12 +528,14 @@ DLINK_FOREACH_SAFE(node, node_next, lt->show_mask.head) { xfree(node->data); + dlinkDelete(node, <->show_mask); free_dlink_node(node); } DLINK_FOREACH_SAFE(node, node_next, lt->hide_mask.head) { xfree(node->data); + dlinkDelete(node, <->hide_mask); free_dlink_node(node); } diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/hostmask.c ircd-hybrid-8.2.24+dfsg.1/src/hostmask.c --- ircd-hybrid-8.2.22+dfsg.1/src/hostmask.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/hostmask.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2001-2017 ircd-hybrid development team + * Copyright (c) 2001-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file hostmask.c * \brief Code to efficiently find IP & hostmask based configs. - * \version $Id: hostmask.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: hostmask.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -260,7 +260,7 @@ parse_netmask(const char *text, struct irc_ssaddr *addr, int *b) { if (addr) - memset(addr, 0, sizeof(struct irc_ssaddr)); + memset(addr, 0, sizeof(*addr)); if (strchr(text, '.')) return try_parse_v4_netmask(text, addr, b); @@ -359,7 +359,7 @@ static uint32_t hash_ipv4(const struct irc_ssaddr *addr, int bits) { - if (bits != 0) + if (bits) { const struct sockaddr_in *const v4 = (const struct sockaddr_in *)addr; uint32_t av = ntohl(v4->sin_addr.s_addr) & ~((1 << (32 - bits)) - 1); @@ -620,7 +620,7 @@ assert(type && !EmptyString(hostname)); - struct AddressRec *arec = xcalloc(sizeof(struct AddressRec)); + struct AddressRec *arec = xcalloc(sizeof(*arec)); arec->masktype = parse_netmask(hostname, &arec->Mask.ipa.addr, &bits); arec->Mask.ipa.bits = bits; arec->username = username; @@ -688,7 +688,7 @@ { dlinkDelete(&arec->node, &atable[hv]); - if (!conf->ref_count) + if (conf->ref_count == 0) conf_free(conf); xfree(arec); @@ -724,7 +724,7 @@ dlinkDelete(&arec->node, &atable[i]); arec->conf->active = 0; - if (!arec->conf->ref_count) + if (arec->conf->ref_count == 0) conf_free(arec->conf); xfree(arec); } @@ -767,7 +767,7 @@ { struct AddressRec *arec = node->data; - if (!arec->conf->until || arec->conf->until > CurrentTime) + if (arec->conf->until == 0 || arec->conf->until > CurrentTime) continue; switch (arec->type) diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/id.c ircd-hybrid-8.2.24+dfsg.1/src/id.c --- ircd-hybrid-8.2.22+dfsg.1/src/id.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/id.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file id.c * \brief Contains functions pertaining to SID/UID generation. - * \version $Id: id.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: id.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/ipcache.c ircd-hybrid-8.2.24+dfsg.1/src/ipcache.c --- ircd-hybrid-8.2.22+dfsg.1/src/ipcache.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/ipcache.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,20 +21,19 @@ /*! \file ipcache.c * \brief Routines to count connections from particular IP addresses. - * \version $Id: ipcache.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: ipcache.c 8384 2018-03-16 20:06:38Z michael $ */ #include "stdinc.h" #include "list.h" #include "ipcache.h" #include "event.h" -#include "mempool.h" +#include "memory.h" #include "conf.h" #include "ircd.h" static dlink_list ip_hash_table[IP_HASH_SIZE]; -static mp_pool_t *ip_entry_pool; /* ipcache_hash_address() @@ -79,15 +78,14 @@ struct ip_entry * ipcache_find_or_add_address(const struct irc_ssaddr *addr) { - dlink_node *node = NULL; - struct ip_entry *iptr = NULL; + dlink_node *node; const uint32_t hash_index = ipcache_hash_address(addr); const struct sockaddr_in *v4 = (const struct sockaddr_in *)addr, *ptr_v4; const struct sockaddr_in6 *v6 = (const struct sockaddr_in6 *)addr, *ptr_v6; DLINK_FOREACH(node, ip_hash_table[hash_index].head) { - iptr = node->data; + struct ip_entry *iptr = node->data; if (iptr->ip.ss.ss_family != addr->ss.ss_family) continue; @@ -106,7 +104,7 @@ } } - iptr = mp_pool_get(ip_entry_pool); + struct ip_entry *iptr = xcalloc(sizeof(*iptr)); memcpy(&iptr->ip, addr, sizeof(struct irc_ssaddr)); dlinkAdd(iptr, &iptr->node, &ip_hash_table[hash_index]); @@ -126,7 +124,7 @@ void ipcache_remove_address(const struct irc_ssaddr *addr) { - dlink_node *node = NULL; + dlink_node *node; const uint32_t hash_index = ipcache_hash_address(addr); const struct sockaddr_in *v4 = (const struct sockaddr_in *)addr, *ptr_v4; const struct sockaddr_in6 *v6 = (const struct sockaddr_in6 *)addr, *ptr_v6; @@ -157,7 +155,7 @@ (CurrentTime - iptr->last_attempt) >= ConfigGeneral.throttle_time) { dlinkDelete(&iptr->node, &ip_hash_table[hash_index]); - mp_pool_release(iptr); + xfree(iptr); return; } } @@ -172,7 +170,7 @@ static void ipcache_remove_expired_entries(void *unused) { - dlink_node *node = NULL, *node_next = NULL; + dlink_node *node, *node_next; for (unsigned int i = 0; i < IP_HASH_SIZE; ++i) { @@ -184,7 +182,7 @@ (CurrentTime - iptr->last_attempt) >= ConfigGeneral.throttle_time) { dlinkDelete(&iptr->node, &ip_hash_table[i]); - mp_pool_release(iptr); + xfree(iptr); } } } @@ -219,5 +217,4 @@ }; event_add(&event_expire_ipcache, NULL); - ip_entry_pool = mp_pool_new(sizeof(struct ip_entry), MP_CHUNK_SIZE_IP_ENTRY); } diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/ircd.c ircd-hybrid-8.2.24+dfsg.1/src/ircd.c --- ircd-hybrid-8.2.22+dfsg.1/src/ircd.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/ircd.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file ircd.c * \brief Starts up and runs the ircd. - * \version $Id: ircd.c 8037 2017-03-17 22:28:04Z michael $ + * \version $Id: ircd.c 8425 2018-03-25 17:45:13Z michael $ */ #include "stdinc.h" @@ -29,6 +29,7 @@ #include "list.h" #include "ircd.h" #include "channel.h" +#include "channel_mode.h" #include "client.h" #include "event.h" #include "fdlist.h" @@ -47,25 +48,17 @@ #include "s_bsd.h" #include "log.h" #include "server.h" +#include "server_capab.h" #include "send.h" -#include "whowas.h" #include "modules.h" #include "memory.h" -#include "mempool.h" #include "ircd_getopt.h" -#include "watch.h" #include "conf_db.h" #include "conf_class.h" #include "ipcache.h" #include "isupport.h" -#include "userhost.h" -#ifdef HAVE_LIBGEOIP -GeoIP *GeoIPv4_ctx; -GeoIP *GeoIPv6_ctx; -#endif - struct SetOptions GlobalSetOptions; /* /quote set variables */ struct Counter Count; struct ServerState_t server_state; @@ -392,7 +385,7 @@ if (!server_state.foreground) { make_daemon(); - close_standard_fds(); /* this needs to be before netio_init()! */ + close_standard_fds(); /* this needs to be before comm_select_init()! */ } else print_startup(getpid()); @@ -403,30 +396,24 @@ fdlist_init(); log_set_file(LOG_TYPE_IRCD, 0, logFileName); - netio_init(); /* This needs to be setup early ! -- adrian */ + comm_select_init(); /* This needs to be setup early ! -- adrian */ tls_init(); /* Check if there is pidfile and daemon already running */ check_pidfile(pidFileName); - mp_pool_init(); - init_dlink_nodes(); isupport_init(); - dbuf_init(); hash_init(); - userhost_init(); ipcache_init(); client_init(); class_init(); - whowas_init(); - watch_init(); auth_init(); /* Initialise the auth code */ resolver_init(); /* Needs to be setup before the io loop */ modules_init(); read_conf_files(1); /* cold start init conf files */ - server_capab_init(); /* Set up default_server_capabs */ + capab_init(); /* Set up default_server_capabs */ initialize_global_set_options(); /* Has to be called after read_conf_files() */ - channel_init(); + channel_mode_init(); read_links_file(); motd_init(); user_modes_init(); @@ -465,7 +452,7 @@ me.connection->firsttime = CurrentTime; SetMe(&me); - make_server(&me); + server_make(&me); hash_add_id(&me); hash_add_client(&me); @@ -500,7 +487,7 @@ event_add(&event_write_links_file, NULL); } - ilog(LOG_TYPE_IRCD, "Server Ready"); + ilog(LOG_TYPE_IRCD, "Server ready. Running version: %s(%s)", ircd_version, serno); io_loop(); return 0; diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/ircd_signal.c ircd-hybrid-8.2.24+dfsg.1/src/ircd_signal.c --- ircd-hybrid-8.2.22+dfsg.1/src/ircd_signal.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/ircd_signal.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file ircd_signal.c * \brief responsible for ircd's signal handling. - * \version $Id: ircd_signal.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: ircd_signal.c 8411 2018-03-21 17:19:52Z michael $ */ #include "stdinc.h" @@ -113,31 +113,31 @@ sigaddset(&act.sa_mask, SIGCHLD); #ifdef SIGXFSZ - sigaction(SIGXFSZ, &act, 0); + sigaction(SIGXFSZ, &act, NULL); #endif #ifdef SIGWINCH - sigaction(SIGWINCH, &act, 0); + sigaction(SIGWINCH, &act, NULL); #endif #ifdef SIGTRAP - sigaction(SIGTRAP, &act, 0); + sigaction(SIGTRAP, &act, NULL); #endif - sigaction(SIGPIPE, &act, 0); - sigaction(SIGALRM, &act, 0); + sigaction(SIGPIPE, &act, NULL); + sigaction(SIGALRM, &act, NULL); act.sa_handler = sighup_handler; - sigaction(SIGHUP, &act, 0); + sigaction(SIGHUP, &act, NULL); act.sa_handler = sigint_handler; - sigaction(SIGINT, &act, 0); + sigaction(SIGINT, &act, NULL); act.sa_handler = sigterm_handler; - sigaction(SIGTERM, &act, 0); + sigaction(SIGTERM, &act, NULL); act.sa_handler = sigusr1_handler; - sigaction(SIGUSR1, &act, 0); + sigaction(SIGUSR1, &act, NULL); act.sa_handler = sigchld_handler; - sigaction(SIGCHLD, &act, 0); + sigaction(SIGCHLD, &act, NULL); sigprocmask(SIG_UNBLOCK, &act.sa_mask, NULL); } diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/irc_string.c ircd-hybrid-8.2.24+dfsg.1/src/irc_string.c --- ircd-hybrid-8.2.22+dfsg.1/src/irc_string.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/irc_string.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file irc_string.c * \brief IRC string functions. - * \version $Id: irc_string.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: irc_string.c 8280 2018-02-20 19:30:33Z michael $ */ #include "config.h" @@ -161,97 +161,99 @@ return s; } +/* $OpenBSD: strlcat.c,v 1.18 2016/10/16 17:37:39 dtucker Exp $ */ +/* $OpenBSD: strlcpy.c,v 1.15 2016/10/16 17:37:39 dtucker Exp $ */ /* - * strlcat and strlcpy were ripped from openssh 2.5.1p2 - * They had the following Copyright info: + * Copyright (c) 1998, 2015 Todd C. Miller * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. * - * Copyright (c) 1998 Todd C. Miller - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED `AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #ifndef HAVE_STRLCAT +/* + * Appends src to string dst of size dsize (unlike strncat, dsize is the + * full size of dst, not space left). At most dsize-1 characters + * will be copied. Always NUL terminates (unless dsize <= strlen(dst)). + * Returns strlen(src) + MIN(dsize, strlen(initial dst)). + * If retval >= dsize, truncation occurred. + */ size_t -strlcat(char *dst, const char *src, size_t siz) +strlcat(char *dst, const char *src, size_t dsize) { - char *d = dst; - const char *s = src; - size_t n = siz, dlen; - - while (n-- != 0 && *d != '\0') - d++; + const char *odst = dst; + const char *osrc = src; + size_t n = dsize; + size_t dlen; + + /* Find the end of dst and adjust bytes left but don't go past end. */ + while (n-- != 0 && *dst != '\0') + dst++; - dlen = d - dst; - n = siz - dlen; + dlen = dst - odst; + n = dsize - dlen; - if (n == 0) - return dlen + strlen(s); + if (n-- == 0) + return dlen + strlen(src); - while (*s != '\0') + while (*src != '\0') { - if (n != 1) + if (n != 0) { - *d++ = *s; + *dst++ = *src; n--; } - s++; + src++; } - *d = '\0'; - return dlen + (s - src); /* count does not include NUL */ + *dst = '\0'; + + return dlen + (src - osrc); /* count does not include NUL */ } #endif #ifndef HAVE_STRLCPY +/* + * Copy string src to buffer dst of size dsize. At most dsize-1 + * chars will be copied. Always NUL terminates (unless dsize == 0). + * Returns strlen(src); if retval >= dsize, truncation occurred. + */ size_t -strlcpy(char *dst, const char *src, size_t siz) +strlcpy(char *dst, const char *src, size_t dsize) { - char *d = dst; - const char *s = src; - size_t n = siz; + const char *osrc = src; + size_t nleft = dsize; - /* Copy as many bytes as will fit */ - if (n != 0 && --n != 0) + /* Copy as many bytes as will fit. */ + if (nleft != 0) { - do + while (--nleft != 0) { - if ((*d++ = *s++) == 0) + if ((*dst++ = *src++) == '\0') break; - } while (--n != 0); + } } - /* Not enough room in dst, add NUL and traverse rest of src */ - if (n == 0) + /* Not enough room in dst, add NUL and traverse rest of src. */ + if (nleft == 0) { - if (siz != 0) - *d = '\0'; /* NUL-terminate dst */ - while (*s++) + if (dsize != 0) + *dst = '\0'; /* NUL-terminate dst */ + + while (*src++) ; } - return s - src - 1; /* count does not include NUL */ + return src - osrc - 1; /* count does not include NUL */ } #endif diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/isupport.c ircd-hybrid-8.2.24+dfsg.1/src/isupport.c --- ircd-hybrid-8.2.22+dfsg.1/src/isupport.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/isupport.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file isupport.c * \brief Contains functions pertaining to RPL_ISUPPORT. - * \version $Id: isupport.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: isupport.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/list.c ircd-hybrid-8.2.24+dfsg.1/src/list.c --- ircd-hybrid-8.2.22+dfsg.1/src/list.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/list.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2000-2017 ircd-hybrid development team + * Copyright (c) 2000-2018 ircd-hybrid development team * * 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 @@ -21,29 +21,14 @@ /*! \file list.c * \brief Maintains doubly-linked lists. - * \version $Id: list.c 8058 2017-03-23 16:13:10Z michael $ + * \version $Id: list.c 8396 2018-03-18 13:47:47Z michael $ */ #include "stdinc.h" #include "list.h" -#include "mempool.h" +#include "memory.h" -static mp_pool_t *dnode_pool; - - -/* init_dlink_nodes() - * - * inputs - NONE - * output - NONE - * side effects - initializes the dnode BlockHeap - */ -void -init_dlink_nodes(void) -{ - dnode_pool = mp_pool_new(sizeof(dlink_node), MP_CHUNK_SIZE_DNODE); -} - /* make_dlink_node() * * inputs - NONE @@ -53,7 +38,7 @@ dlink_node * make_dlink_node(void) { - dlink_node *node = mp_pool_get(dnode_pool); + dlink_node *node = xcalloc(sizeof(*node)); return node; } @@ -67,7 +52,7 @@ void free_dlink_node(dlink_node *node) { - mp_pool_release(node); + xfree(node); } /* @@ -132,6 +117,8 @@ void dlinkDelete(dlink_node *m, dlink_list *list) { + assert(list->length > 0); + /* Assumption: If m->next == NULL, then list->tail == m * and: If m->prev == NULL, then list->head == m */ @@ -152,7 +139,9 @@ } /* Set this to NULL does matter */ - m->next = m->prev = NULL; + m->next = NULL; + m->prev = NULL; + list->length--; } diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/listener.c ircd-hybrid-8.2.24+dfsg.1/src/listener.c --- ircd-hybrid-8.2.22+dfsg.1/src/listener.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/listener.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1999-2017 ircd-hybrid development team + * Copyright (c) 1999-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file listener.c * \brief Implementation for handling listening sockets. - * \version $Id: listener.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: listener.c 8348 2018-03-04 13:23:49Z michael $ */ #include "stdinc.h" @@ -52,10 +52,10 @@ static struct Listener * listener_make(const int port, const struct irc_ssaddr *addr) { - struct Listener *listener = xcalloc(sizeof(struct Listener)); + struct Listener *listener = xcalloc(sizeof(*listener)); listener->port = port; - memcpy(&listener->addr, addr, sizeof(struct irc_ssaddr)); + memcpy(&listener->addr, addr, sizeof(listener->addr)); return listener; } @@ -89,7 +89,7 @@ } static void -listener_accept_connection(fde_t *pfd, void *data) +listener_accept_connection(fde_t *F, void *data) { static uintmax_t rate = 0; struct irc_ssaddr addr; @@ -98,6 +98,9 @@ struct Listener *const listener = data; assert(listener); + assert(listener->fd == F); + assert(listener->fd); + assert(listener->fd->flags.open); /* There may be many reasons for error return, but * in otherwise correctly working environment the @@ -109,7 +112,7 @@ * point, just assume that connections cannot * be accepted until some old is closed first. */ - while ((fd = comm_accept(listener, &addr)) != -1) + while ((fd = comm_accept(listener->fd->fd, &addr)) != -1) { /* * check for connection limit @@ -157,7 +160,7 @@ } /* Re-register a new IO request for the next accept .. */ - comm_setselect(&listener->fd, COMM_SELECT_READ, listener_accept_connection, + comm_setselect(listener->fd, COMM_SELECT_READ, listener_accept_connection, listener, 0); } @@ -190,19 +193,19 @@ /* * At first, open a new socket */ - if (comm_open(&listener->fd, listener->addr.ss.ss_family, SOCK_STREAM, 0, - "Listener socket") == -1) + int fd = comm_socket(listener->addr.ss.ss_family, SOCK_STREAM, 0); + if (fd == -1) { report_error(L_ALL, "opening listener socket %s:%s", listener_get_name(listener), errno); return 0; } - if (setsockopt(listener->fd.fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt))) + if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt))) { report_error(L_ALL, "setting SO_REUSEADDR for listener %s:%s", listener_get_name(listener), errno); - fd_close(&listener->fd); + close(fd); return 0; } @@ -212,25 +215,27 @@ */ lsin.ss_port = htons(listener->port); - if (bind(listener->fd.fd, (struct sockaddr *)&lsin, lsin.ss_len)) + if (bind(fd, (struct sockaddr *)&lsin, lsin.ss_len)) { report_error(L_ALL, "binding listener socket %s:%s", listener_get_name(listener), errno); - fd_close(&listener->fd); + close(fd); return 0; } - if (listen(listener->fd.fd, HYBRID_SOMAXCONN)) + if (listen(fd, HYBRID_SOMAXCONN)) { report_error(L_ALL, "listen failed for %s:%s", listener_get_name(listener), errno); - fd_close(&listener->fd); + close(fd); return 0; } + listener->fd = fd_open(fd, 1, "Listener socket"); + /* Listen completion events are READ events .. */ - listener_accept_connection(&listener->fd, listener); + listener_accept_connection(listener->fd, listener); return 1; } @@ -246,11 +251,14 @@ listener = node->data; if ((port == listener->port) && - (!memcmp(addr, &listener->addr, sizeof(struct irc_ssaddr)))) + (!memcmp(addr, &listener->addr, sizeof(*addr)))) { /* Try to return an open listener, otherwise reuse a closed one */ - if (!listener->fd.flags.open) + if (listener->fd) + { + assert(listener->fd->flags.open); last_closed = listener; + } else return (listener); } @@ -265,8 +273,13 @@ static void listener_close(struct Listener *listener) { - if (listener->fd.flags.open) - fd_close(&listener->fd); + if (listener->fd) + { + assert(listener->fd->flags.open); + + fd_close(listener->fd); + listener->fd = NULL; + } listener->active = 0; @@ -282,7 +295,7 @@ void listener_close_marked(void) { - dlink_node *node = NULL, *node_next = NULL; + dlink_node *node, *node_next; /* close all 'extra' listening ports we have */ DLINK_FOREACH_SAFE(node, node_next, listener_list.head) @@ -378,8 +391,11 @@ { listener->flags = flags; - if (listener->fd.flags.open) + if (listener->fd) + { + assert(listener->fd->flags.open); return; + } } else { diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/log.c ircd-hybrid-8.2.24+dfsg.1/src/log.c --- ircd-hybrid-8.2.22+dfsg.1/src/log.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/log.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file log.c * \brief Logger functions. - * \version $Id: log.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: log.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/Makefile.am ircd-hybrid-8.2.24+dfsg.1/src/Makefile.am --- ircd-hybrid-8.2.22+dfsg.1/src/Makefile.am 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/Makefile.am 2018-04-04 22:33:37.000000000 +0000 @@ -13,6 +13,7 @@ channel.c \ channel_mode.c \ client.c \ + client_svstag.c \ conf.c \ conf_class.c \ conf_cluster.c \ @@ -41,7 +42,6 @@ log.c \ match.c \ memory.c \ - mempool.c \ misc.c \ modules.c \ motd.c \ @@ -62,6 +62,7 @@ s_bsd.c \ send.c \ server.c \ + server_capab.c \ user.c \ userhost.c \ version.c \ diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/Makefile.in ircd-hybrid-8.2.24+dfsg.1/src/Makefile.in --- ircd-hybrid-8.2.22+dfsg.1/src/Makefile.in 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/Makefile.in 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -91,21 +91,20 @@ bin_PROGRAMS = ircd$(EXEEXT) subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \ - $(top_srcdir)/m4/ax_append_compile_flags.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_arg_enable_assert.m4 \ $(top_srcdir)/m4/ax_arg_enable_debugging.m4 \ + $(top_srcdir)/m4/ax_arg_enable_efence.m4 \ $(top_srcdir)/m4/ax_arg_enable_warnings.m4 \ $(top_srcdir)/m4/ax_arg_gnutls.m4 \ $(top_srcdir)/m4/ax_arg_ioloop_mechanism.m4 \ - $(top_srcdir)/m4/ax_arg_libgeoip.m4 \ $(top_srcdir)/m4/ax_arg_openssl.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ + $(top_srcdir)/m4/ax_define_dir.m4 \ + $(top_srcdir)/m4/ax_gcc_stack_protect.m4 \ $(top_srcdir)/m4/ax_library_net.m4 \ - $(top_srcdir)/m4/ax_mempool_chunksizes.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ - $(top_srcdir)/m4/gcc_stack_protect.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltargz.m4 \ $(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ @@ -120,9 +119,10 @@ am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_ircd_OBJECTS = auth.$(OBJEXT) channel.$(OBJEXT) \ - channel_mode.$(OBJEXT) client.$(OBJEXT) conf.$(OBJEXT) \ - conf_class.$(OBJEXT) conf_cluster.$(OBJEXT) conf_db.$(OBJEXT) \ - conf_gecos.$(OBJEXT) conf_pseudo.$(OBJEXT) conf_resv.$(OBJEXT) \ + channel_mode.$(OBJEXT) client.$(OBJEXT) \ + client_svstag.$(OBJEXT) conf.$(OBJEXT) conf_class.$(OBJEXT) \ + conf_cluster.$(OBJEXT) conf_db.$(OBJEXT) conf_gecos.$(OBJEXT) \ + conf_pseudo.$(OBJEXT) conf_resv.$(OBJEXT) \ conf_service.$(OBJEXT) conf_shared.$(OBJEXT) \ conf_parser.$(OBJEXT) conf_lexer.$(OBJEXT) dbuf.$(OBJEXT) \ event.$(OBJEXT) fdlist.$(OBJEXT) getopt.$(OBJEXT) \ @@ -130,14 +130,14 @@ ipcache.$(OBJEXT) irc_string.$(OBJEXT) ircd.$(OBJEXT) \ ircd_signal.$(OBJEXT) isupport.$(OBJEXT) list.$(OBJEXT) \ listener.$(OBJEXT) log.$(OBJEXT) match.$(OBJEXT) \ - memory.$(OBJEXT) mempool.$(OBJEXT) misc.$(OBJEXT) \ - modules.$(OBJEXT) motd.$(OBJEXT) numeric.$(OBJEXT) \ - packet.$(OBJEXT) parse.$(OBJEXT) s_bsd_epoll.$(OBJEXT) \ - s_bsd_poll.$(OBJEXT) s_bsd_devpoll.$(OBJEXT) \ - s_bsd_kqueue.$(OBJEXT) tls_gnutls.$(OBJEXT) tls_none.$(OBJEXT) \ - tls_openssl.$(OBJEXT) res.$(OBJEXT) reslib.$(OBJEXT) \ - restart.$(OBJEXT) rng_mt.$(OBJEXT) s_bsd.$(OBJEXT) \ - send.$(OBJEXT) server.$(OBJEXT) user.$(OBJEXT) \ + memory.$(OBJEXT) misc.$(OBJEXT) modules.$(OBJEXT) \ + motd.$(OBJEXT) numeric.$(OBJEXT) packet.$(OBJEXT) \ + parse.$(OBJEXT) s_bsd_epoll.$(OBJEXT) s_bsd_poll.$(OBJEXT) \ + s_bsd_devpoll.$(OBJEXT) s_bsd_kqueue.$(OBJEXT) \ + tls_gnutls.$(OBJEXT) tls_none.$(OBJEXT) tls_openssl.$(OBJEXT) \ + res.$(OBJEXT) reslib.$(OBJEXT) restart.$(OBJEXT) \ + rng_mt.$(OBJEXT) s_bsd.$(OBJEXT) send.$(OBJEXT) \ + server.$(OBJEXT) server_capab.$(OBJEXT) user.$(OBJEXT) \ userhost.$(OBJEXT) version.$(OBJEXT) watch.$(OBJEXT) \ whowas.$(OBJEXT) ircd_OBJECTS = $(am_ircd_OBJECTS) @@ -383,6 +383,7 @@ channel.c \ channel_mode.c \ client.c \ + client_svstag.c \ conf.c \ conf_class.c \ conf_cluster.c \ @@ -411,7 +412,6 @@ log.c \ match.c \ memory.c \ - mempool.c \ misc.c \ modules.c \ motd.c \ @@ -432,6 +432,7 @@ s_bsd.c \ send.c \ server.c \ + server_capab.c \ user.c \ userhost.c \ version.c \ @@ -538,6 +539,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/channel.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/channel_mode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/client.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/client_svstag.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conf_class.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/conf_cluster.Po@am__quote@ @@ -566,7 +568,6 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/match.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mempool.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/modules.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/motd.Po@am__quote@ @@ -584,6 +585,7 @@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s_bsd_poll.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/send.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/server.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/server_capab.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tls_gnutls.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tls_none.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tls_openssl.Po@am__quote@ diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/match.c ircd-hybrid-8.2.24+dfsg.1/src/match.c --- ircd-hybrid-8.2.22+dfsg.1/src/match.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/match.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file match.c * \brief Functions to match/compare strings. - * \version $Id: match.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: match.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/memory.c ircd-hybrid-8.2.24+dfsg.1/src/memory.c --- ircd-hybrid-8.2.22+dfsg.1/src/memory.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/memory.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file memory.c * \brief Memory utilities. - * \version $Id: memory.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: memory.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/mempool.c ircd-hybrid-8.2.24+dfsg.1/src/mempool.c --- ircd-hybrid-8.2.22+dfsg.1/src/mempool.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/mempool.c 1970-01-01 00:00:00.000000000 +0000 @@ -1,760 +0,0 @@ -/* - * Copyright (c) 2007-2012, The Tor Project, Inc. - * Copyright (c) 2012-2017 ircd-hybrid development team - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - * * Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following disclaimer - * in the documentation and/or other materials provided with the - * distribution. - * - * * Neither the names of the copyright owners nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/*! \file mempool.c - * \brief A pooling allocator - * \version $Id: mempool.c 7925 2016-12-31 13:57:24Z michael $ - */ - -#include "stdinc.h" -#include "memory.h" -#include "event.h" -#include "log.h" -#include "mempool.h" - - -/** Returns floor(log2(u64)). If u64 is 0, (incorrectly) returns 0. */ -static int -tor_log2(uint64_t u64) -{ - int r = 0; - - if (u64 >= (1LLU << 32)) - { - u64 >>= 32; - r = 32; - } - - if (u64 >= (1LLU << 16)) - { - u64 >>= 16; - r += 16; - } - - if (u64 >= (1LLU << 8)) - { - u64 >>= 8; - r += 8; - } - - if (u64 >= (1LLU << 4)) - { - u64 >>= 4; - r += 4; - } - - if (u64 >= (1LLU << 2)) - { - u64 >>= 2; - r += 2; - } - - if (u64 >= (1LLU << 1)) - { - u64 >>= 1; - r += 1; - } - - return r; -} - -/** Return the power of 2 in range [1,UINT64_MAX] closest to u64. If - * there are two powers of 2 equally close, round down. */ -static uint64_t -round_to_power_of_2(uint64_t u64) -{ - int lg2; - uint64_t low; - uint64_t high; - - if (u64 == 0) - return 1; - - lg2 = tor_log2(u64); - low = 1LLU << lg2; - - if (lg2 == 63) - return low; - - high = 1LLU << (lg2 + 1); - if (high - u64 < u64 - low) - return high; - else - return low; -} - -/* OVERVIEW: - * - * This is an implementation of memory pools for Tor cells. It may be - * useful for you too. - * - * Generally, a memory pool is an allocation strategy optimized for large - * numbers of identically-sized objects. Rather than the elaborate arena - * and coalescing strategies you need to get good performance for a - * general-purpose malloc(), pools use a series of large memory "chunks", - * each of which is carved into a bunch of smaller "items" or - * "allocations". - * - * To get decent performance, you need to: - * - Minimize the number of times you hit the underlying allocator. - * - Try to keep accesses as local in memory as possible. - * - Try to keep the common case fast. - * - * Our implementation uses three lists of chunks per pool. Each chunk can - * be either "full" (no more room for items); "empty" (no items); or - * "used" (not full, not empty). There are independent doubly-linked - * lists for each state. - * - * CREDIT: - * - * I wrote this after looking at 3 or 4 other pooling allocators, but - * without copying. The strategy this most resembles (which is funny, - * since that's the one I looked at longest ago) is the pool allocator - * underlying Python's obmalloc code. Major differences from obmalloc's - * pools are: - * - We don't even try to be threadsafe. - * - We only handle objects of one size. - * - Our list of empty chunks is doubly-linked, not singly-linked. - * (This could change pretty easily; it's only doubly-linked for - * consistency.) - * - We keep a list of full chunks (so we can have a "nuke everything" - * function). Obmalloc's pools leave full chunks to float unanchored. - * - * LIMITATIONS: - * - Not even slightly threadsafe. - * - Likes to have lots of items per chunks. - * - One pointer overhead per allocated thing. (The alternative is - * something like glib's use of an RB-tree to keep track of what - * chunk any given piece of memory is in.) - * - Only aligns allocated things to void* level: redefine ALIGNMENT_TYPE - * if you need doubles. - * - Could probably be optimized a bit; the representation contains - * a bit more info than it really needs to have. - */ - -/* Tuning parameters */ -/** Largest type that we need to ensure returned memory items are aligned to. - * Change this to "double" if we need to be safe for structs with doubles. */ -#define ALIGNMENT_TYPE void * -/** Increment that we need to align allocated. */ -#define ALIGNMENT sizeof(ALIGNMENT_TYPE) -/** Largest memory chunk that we should allocate. */ -#define MAX_CHUNK (8 *(1L << 20)) -/** Smallest memory chunk size that we should allocate. */ -#define MIN_CHUNK 4096 - -typedef struct mp_allocated_t mp_allocated_t; -typedef struct mp_chunk_t mp_chunk_t; - -/** Holds a single allocated item, allocated as part of a chunk. */ -struct mp_allocated_t -{ - /** The chunk that this item is allocated in. This adds overhead to each - * allocated item, thus making this implementation inappropriate for - * very small items. */ - mp_chunk_t *in_chunk; - - union - { - /** If this item is free, the next item on the free list. */ - mp_allocated_t *next_free; - - /** If this item is not free, the actual memory contents of this item. - * (Not actual size.) */ - char mem[1]; - - /** An extra element to the union to insure correct alignment. */ - ALIGNMENT_TYPE dummy_; - } u; -}; - -/** 'Magic' value used to detect memory corruption. */ -#define MP_CHUNK_MAGIC 0x09870123 - -/** A chunk of memory. Chunks come from malloc; we use them */ -struct mp_chunk_t -{ - uint32_t magic; /**< Must be MP_CHUNK_MAGIC if this chunk is valid. */ - mp_chunk_t *next; /**< The next free, used, or full chunk in sequence. */ - mp_chunk_t *prev; /**< The previous free, used, or full chunk in sequence. */ - mp_pool_t *pool; /**< The pool that this chunk is part of. */ - - /** First free item in the freelist for this chunk. Note that this may be - * NULL even if this chunk is not at capacity: if so, the free memory at - * next_mem has not yet been carved into items. - */ - mp_allocated_t *first_free; - int n_allocated; /**< Number of currently allocated items in this chunk. */ - int capacity; /**< Number of items that can be fit into this chunk. */ - size_t mem_size; /**< Number of usable bytes in mem. */ - char *next_mem; /**< Pointer into part of mem not yet carved up. */ - char mem[]; /**< Storage for this chunk. */ -}; - -static mp_pool_t *mp_allocated_pools; - -/** Number of extra bytes needed beyond mem_size to allocate a chunk. */ -#define CHUNK_OVERHEAD offsetof(mp_chunk_t, mem[0]) - -/** Given a pointer to a mp_allocated_t, return a pointer to the memory - * item it holds. */ -#define A2M(a) (&(a)->u.mem) -/** Given a pointer to a memory_item_t, return a pointer to its enclosing - * mp_allocated_t. */ -#define M2A(p) (((char *)p) - offsetof(mp_allocated_t, u.mem)) - -void -mp_pool_init(void) -{ - static struct event event_mp_gc = - { - .name = "mp_pool_garbage_collect", - .handler = mp_pool_garbage_collect, - .when = 187 - }; - - event_add(&event_mp_gc, NULL); -} - -/** Helper: Allocate and return a new memory chunk for pool. Does not - * link the chunk into any list. */ -static mp_chunk_t * -mp_chunk_new(mp_pool_t *pool) -{ - size_t sz = pool->new_chunk_capacity * pool->item_alloc_size; - mp_chunk_t *chunk = xcalloc(CHUNK_OVERHEAD + sz); - -#ifdef MEMPOOL_STATS - ++pool->total_chunks_allocated; -#endif - chunk->magic = MP_CHUNK_MAGIC; - chunk->capacity = pool->new_chunk_capacity; - chunk->mem_size = sz; - chunk->next_mem = chunk->mem; - chunk->pool = pool; - return chunk; -} - -/** Take a chunk that has just been allocated or removed from - * pool's empty chunk list, and add it to the head of the used chunk - * list. */ -static void -add_newly_used_chunk_to_used_list(mp_pool_t *pool, mp_chunk_t *chunk) -{ - chunk->next = pool->used_chunks; - if (chunk->next) - chunk->next->prev = chunk; - pool->used_chunks = chunk; - assert(!chunk->prev); -} - -/** Return a newly allocated item from pool. */ -void * -mp_pool_get(mp_pool_t *pool) -{ - mp_chunk_t *chunk; - mp_allocated_t *allocated; - - if (pool->used_chunks) - { - /* - * Common case: there is some chunk that is neither full nor empty. Use - * that one. (We can't use the full ones, obviously, and we should fill - * up the used ones before we start on any empty ones. - */ - chunk = pool->used_chunks; - - } - else if (pool->empty_chunks) - { - /* - * We have no used chunks, but we have an empty chunk that we haven't - * freed yet: use that. (We pull from the front of the list, which should - * get us the most recently emptied chunk.) - */ - chunk = pool->empty_chunks; - - /* Remove the chunk from the empty list. */ - pool->empty_chunks = chunk->next; - if (chunk->next) - chunk->next->prev = NULL; - - /* Put the chunk on the 'used' list*/ - add_newly_used_chunk_to_used_list(pool, chunk); - - assert(!chunk->prev); - --pool->n_empty_chunks; - if (pool->n_empty_chunks < pool->min_empty_chunks) - pool->min_empty_chunks = pool->n_empty_chunks; - } - else - { - /* We have no used or empty chunks: allocate a new chunk. */ - chunk = mp_chunk_new(pool); - - /* Add the new chunk to the used list. */ - add_newly_used_chunk_to_used_list(pool, chunk); - } - - assert(chunk->n_allocated < chunk->capacity); - - if (chunk->first_free) - { - /* If there's anything on the chunk's freelist, unlink it and use it. */ - allocated = chunk->first_free; - chunk->first_free = allocated->u.next_free; - allocated->u.next_free = NULL; /* For debugging; not really needed. */ - assert(allocated->in_chunk == chunk); - } - else - { - /* Otherwise, the chunk had better have some free space left on it. */ - assert(chunk->next_mem + pool->item_alloc_size <= - chunk->mem + chunk->mem_size); - - /* Good, it did. Let's carve off a bit of that free space, and use - * that. */ - allocated = (void *)chunk->next_mem; - chunk->next_mem += pool->item_alloc_size; - allocated->in_chunk = chunk; - allocated->u.next_free = NULL; /* For debugging; not really needed. */ - } - - ++chunk->n_allocated; -#ifdef MEMPOOL_STATS - ++pool->total_items_allocated; -#endif - - if (chunk->n_allocated == chunk->capacity) - { - /* This chunk just became full. */ - assert(chunk == pool->used_chunks); - assert(chunk->prev == NULL); - - /* Take it off the used list. */ - pool->used_chunks = chunk->next; - if (chunk->next) - chunk->next->prev = NULL; - - /* Put it on the full list. */ - chunk->next = pool->full_chunks; - if (chunk->next) - chunk->next->prev = chunk; - pool->full_chunks = chunk; - } - - /* And return the memory portion of the mp_allocated_t. */ - void *ptr = A2M(allocated); - memset(ptr, 0, pool->item_size); - - return ptr; -} - -/** Return an allocated memory item to its memory pool. */ -void -mp_pool_release(void *item) -{ - mp_allocated_t *allocated = (void *)M2A(item); - mp_chunk_t *chunk = allocated->in_chunk; - - assert(chunk); - assert(chunk->magic == MP_CHUNK_MAGIC); - assert(chunk->n_allocated > 0); - - allocated->u.next_free = chunk->first_free; - chunk->first_free = allocated; - - if (chunk->n_allocated == chunk->capacity) - { - /* This chunk was full and is about to be used. */ - mp_pool_t *pool = chunk->pool; - /* unlink from the full list */ - if (chunk->prev) - chunk->prev->next = chunk->next; - if (chunk->next) - chunk->next->prev = chunk->prev; - if (chunk == pool->full_chunks) - pool->full_chunks = chunk->next; - - /* link to the used list. */ - chunk->next = pool->used_chunks; - chunk->prev = NULL; - - if (chunk->next) - chunk->next->prev = chunk; - pool->used_chunks = chunk; - } - else if (chunk->n_allocated == 1) - { - /* This was used and is about to be empty. */ - mp_pool_t *pool = chunk->pool; - - /* Unlink from the used list */ - if (chunk->prev) - chunk->prev->next = chunk->next; - if (chunk->next) - chunk->next->prev = chunk->prev; - if (chunk == pool->used_chunks) - pool->used_chunks = chunk->next; - - /* Link to the empty list */ - chunk->next = pool->empty_chunks; - chunk->prev = NULL; - if (chunk->next) - chunk->next->prev = chunk; - pool->empty_chunks = chunk; - - /* Reset the guts of this chunk to defragment it, in case it gets - * used again. */ - chunk->first_free = NULL; - chunk->next_mem = chunk->mem; - - ++pool->n_empty_chunks; - } - - --chunk->n_allocated; -} - -/** Allocate a new memory pool to hold items of size item_size. We'll - * try to fit about chunk_capacity bytes in each chunk. */ -mp_pool_t * -mp_pool_new(size_t item_size, size_t chunk_capacity) -{ - mp_pool_t *pool; - size_t alloc_size, new_chunk_cap; - -/* assert(item_size < SIZE_T_CEILING); - assert(chunk_capacity < SIZE_T_CEILING); - assert(SIZE_T_CEILING / item_size > chunk_capacity); -*/ - pool = xcalloc(sizeof(mp_pool_t)); - /* - * First, we figure out how much space to allow per item. We'll want to - * use make sure we have enough for the overhead plus the item size. - */ - alloc_size = (size_t)(offsetof(mp_allocated_t, u.mem) + item_size); - /* - * If the item_size is less than sizeof(next_free), we need to make - * the allocation bigger. - */ - if (alloc_size < sizeof(mp_allocated_t)) - alloc_size = sizeof(mp_allocated_t); - - /* If we're not an even multiple of ALIGNMENT, round up. */ - if (alloc_size % ALIGNMENT) - alloc_size = alloc_size + ALIGNMENT - (alloc_size % ALIGNMENT); - if (alloc_size < ALIGNMENT) - alloc_size = ALIGNMENT; - - assert((alloc_size % ALIGNMENT) == 0); - - /* - * Now we figure out how many items fit in each chunk. We need to fit at - * least 2 items per chunk. No chunk can be more than MAX_CHUNK bytes long, - * or less than MIN_CHUNK. - */ - if (chunk_capacity > MAX_CHUNK) - chunk_capacity = MAX_CHUNK; - - /* - * Try to be around a power of 2 in size, since that's what allocators like - * handing out. 512K-1 byte is a lot better than 512K+1 byte. - */ - chunk_capacity = (size_t) round_to_power_of_2(chunk_capacity); - - while (chunk_capacity < alloc_size * 2 + CHUNK_OVERHEAD) - chunk_capacity *= 2; - if (chunk_capacity < MIN_CHUNK) - chunk_capacity = MIN_CHUNK; - - new_chunk_cap = (chunk_capacity-CHUNK_OVERHEAD) / alloc_size; - assert(new_chunk_cap < INT_MAX); - pool->new_chunk_capacity = (int)new_chunk_cap; - - pool->item_size = item_size; - pool->item_alloc_size = alloc_size; - - pool->next = mp_allocated_pools; - mp_allocated_pools = pool; - - ilog(LOG_TYPE_DEBUG, "Capacity is %lu, item size is %zu, alloc size is %lu", - (unsigned long)pool->new_chunk_capacity, - pool->item_alloc_size, - (unsigned long)(pool->new_chunk_capacity*pool->item_alloc_size)); - - return pool; -} - -/** Helper function for qsort: used to sort pointers to mp_chunk_t into - * descending order of fullness. */ -static int -mp_pool_sort_used_chunks_helper(const void *_a, const void *_b) -{ - mp_chunk_t *a = *(mp_chunk_t * const *)_a; - mp_chunk_t *b = *(mp_chunk_t * const *)_b; - return b->n_allocated - a->n_allocated; -} - -/** Sort the used chunks in pool into descending order of fullness, - * so that we preferentially fill up mostly full chunks before we make - * nearly empty chunks less nearly empty. */ -static void -mp_pool_sort_used_chunks(mp_pool_t *pool) -{ - int i, n = 0, inverted = 0; - mp_chunk_t **chunks, *chunk; - - for (chunk = pool->used_chunks; chunk; chunk = chunk->next) - { - ++n; - if (chunk->next && chunk->next->n_allocated > chunk->n_allocated) - ++inverted; - } - - if (!inverted) - return; - - chunks = xcalloc(sizeof(mp_chunk_t *) * n); - - for (i = 0, chunk = pool->used_chunks; chunk; chunk = chunk->next) - chunks[i++] = chunk; - - qsort(chunks, n, sizeof(mp_chunk_t *), mp_pool_sort_used_chunks_helper); - pool->used_chunks = chunks[0]; - chunks[0]->prev = NULL; - - for (i = 1; i < n; ++i) - { - chunks[i - 1]->next = chunks[i]; - chunks[i]->prev = chunks[i - 1]; - } - - chunks[n - 1]->next = NULL; - xfree(chunks); - mp_pool_assert_ok(pool); -} - -/** If there are more than n empty chunks in pool, free the - * excess ones that have been empty for the longest. If - * keep_recently_used is true, do not free chunks unless they have been - * empty since the last call to this function. - **/ -void -mp_pool_clean(mp_pool_t *pool, int n_to_keep, int keep_recently_used) -{ - mp_chunk_t *chunk, **first_to_free; - - mp_pool_sort_used_chunks(pool); - assert(n_to_keep >= 0); - - if (keep_recently_used) - { - int n_recently_used = pool->n_empty_chunks - pool->min_empty_chunks; - - if (n_to_keep < n_recently_used) - n_to_keep = n_recently_used; - } - - assert(n_to_keep >= 0); - - first_to_free = &pool->empty_chunks; - - while (*first_to_free && n_to_keep > 0) - { - first_to_free = &(*first_to_free)->next; - --n_to_keep; - } - - if (!*first_to_free) - { - pool->min_empty_chunks = pool->n_empty_chunks; - return; - } - - chunk = *first_to_free; - - while (chunk) - { - mp_chunk_t *next = chunk->next; - chunk->magic = 0xdeadbeef; - xfree(chunk); -#ifdef MEMPOOL_STATS - ++pool->total_chunks_freed; -#endif - --pool->n_empty_chunks; - chunk = next; - } - - pool->min_empty_chunks = pool->n_empty_chunks; - *first_to_free = NULL; -} - -#if 0 -/** Helper: Given a list of chunks, free all the chunks in the list. */ -static void -destroy_chunks(mp_chunk_t *chunk) -{ - mp_chunk_t *next; - - while (chunk) { - chunk->magic = 0xd3adb33f; - next = chunk->next; - xfree(chunk); - chunk = next; - } -} -#endif - -/** Helper: make sure that a given chunk list is not corrupt. */ -static int -assert_chunks_ok(mp_pool_t *pool, mp_chunk_t *chunk, int empty, int full) -{ - mp_allocated_t *allocated; - int n = 0; - - if (chunk) - assert(chunk->prev == NULL); - - while (chunk) - { - n++; - assert(chunk->magic == MP_CHUNK_MAGIC); - assert(chunk->pool == pool); - - for (allocated = chunk->first_free; allocated; - allocated = allocated->u.next_free) - assert(allocated->in_chunk == chunk); - - if (empty) - assert(chunk->n_allocated == 0); - else if (full) - assert(chunk->n_allocated == chunk->capacity); - else - assert(chunk->n_allocated > 0 && chunk->n_allocated < chunk->capacity); - - assert(chunk->capacity == pool->new_chunk_capacity); - - assert(chunk->mem_size == - pool->new_chunk_capacity * pool->item_alloc_size); - - assert(chunk->next_mem >= chunk->mem && - chunk->next_mem <= chunk->mem + chunk->mem_size); - - if (chunk->next) - assert(chunk->next->prev == chunk); - - chunk = chunk->next; - } - - return n; -} - -/** Fail with an assertion if pool is not internally consistent. */ -void -mp_pool_assert_ok(mp_pool_t *pool) -{ - int n_empty; - - n_empty = assert_chunks_ok(pool, pool->empty_chunks, 1, 0); - assert_chunks_ok(pool, pool->full_chunks, 0, 1); - assert_chunks_ok(pool, pool->used_chunks, 0, 0); - - assert(pool->n_empty_chunks == n_empty); -} - -void -mp_pool_garbage_collect(void *unused) -{ - for (mp_pool_t *pool = mp_allocated_pools; pool; pool = pool->next) - mp_pool_clean(pool, 0, 1); -} - -/** Dump information about pool's memory usage to the Tor log at level - * severity. */ -void -mp_pool_log_status(mp_pool_t *pool) -{ - uint64_t bytes_used = 0; - uint64_t bytes_allocated = 0; - uint64_t bu = 0, ba = 0; - mp_chunk_t *chunk; - int n_full = 0, n_used = 0; - - assert(pool); - - for (chunk = pool->empty_chunks; chunk; chunk = chunk->next) - bytes_allocated += chunk->mem_size; - - ilog(LOG_TYPE_DEBUG, "%ju bytes in %d empty chunks", - bytes_allocated, pool->n_empty_chunks); - for (chunk = pool->used_chunks; chunk; chunk = chunk->next) - { - ++n_used; - bu += chunk->n_allocated * pool->item_alloc_size; - ba += chunk->mem_size; - - ilog(LOG_TYPE_DEBUG, " used chunk: %d items allocated", - chunk->n_allocated); - } - - ilog(LOG_TYPE_DEBUG, "%ju/%ju bytes in %d partially full chunks", - bu, ba, n_used); - bytes_used += bu; - bytes_allocated += ba; - bu = ba = 0; - - for (chunk = pool->full_chunks; chunk; chunk = chunk->next) - { - ++n_full; - bu += chunk->n_allocated * pool->item_alloc_size; - ba += chunk->mem_size; - } - - ilog(LOG_TYPE_DEBUG, "%ju/%ju bytes in %d full chunks", - bu, ba, n_full); - bytes_used += bu; - bytes_allocated += ba; - - ilog(LOG_TYPE_DEBUG, "Total: %ju/%ju bytes allocated " - "for cell pools are full.", - bytes_used, bytes_allocated); - -#ifdef MEMPOOL_STATS - ilog(LOG_TYPE_DEBUG, "%ju cell allocations ever; " - "%ju chunk allocations ever; " - "%ju chunk frees ever.", - pool->total_items_allocated, - pool->total_chunks_allocated, - pool->total_chunks_freed); -#endif -} diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/misc.c ircd-hybrid-8.2.24+dfsg.1/src/misc.c --- ircd-hybrid-8.2.22+dfsg.1/src/misc.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/misc.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file s_misc.c * \brief Yet another miscellaneous functions file. - * \version $Id: misc.c 7940 2017-01-27 15:04:09Z michael $ + * \version $Id: misc.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/modules.c ircd-hybrid-8.2.24+dfsg.1/src/modules.c --- ircd-hybrid-8.2.22+dfsg.1/src/modules.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/modules.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2000-2017 ircd-hybrid development team + * Copyright (c) 2000-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file modules.c * \brief A module loader. - * \version $Id: modules.c 8058 2017-03-23 16:13:10Z michael $ + * \version $Id: modules.c 8430 2018-03-27 18:48:40Z michael $ */ #include "ltdl.h" @@ -129,7 +129,7 @@ if (findmodule_byname((mod_basename = libio_basename(path)))) return 1; - if (!(tmpptr = lt_dlopen(path))) + if ((tmpptr = lt_dlopen(path)) == NULL) { const char *err = ((err = lt_dlerror())) ? err : ""; @@ -229,7 +229,7 @@ if (mod_find_path(path)) return; - pathst = xcalloc(sizeof(struct module_path)); + pathst = xcalloc(sizeof(*pathst)); pathst->path = xstrdup(path); dlinkAdd(pathst, &pathst->node, &modules_path); } @@ -245,7 +245,7 @@ { struct module_path *pathst; - pathst = xcalloc(sizeof(struct module_path)); + pathst = xcalloc(sizeof(*pathst)); pathst->path = xstrdup(name); dlinkAdd(pathst, &pathst->node, &modules_conf); } diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/motd.c ircd-hybrid-8.2.24+dfsg.1/src/motd.c --- ircd-hybrid-8.2.22+dfsg.1/src/motd.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/motd.c 2018-04-04 22:33:37.000000000 +0000 @@ -2,7 +2,7 @@ * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * * Copyright (c) 2000 Kevin L. Mitchell - * Copyright (c) 2013-2017 ircd-hybrid development team + * Copyright (c) 2013-2018 ircd-hybrid development team * * 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 @@ -22,7 +22,7 @@ /*! \file motd.c * \brief Message-of-the-day manipulation implementation. - * \version $Id: motd.c 7935 2017-01-27 14:29:29Z michael $ + * \version $Id: motd.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -57,7 +57,7 @@ static struct Motd * motd_create(const char *mask, const char *path) { - struct Motd *motd = xcalloc(sizeof(struct Motd)); + struct Motd *motd = xcalloc(sizeof(*motd)); if (EmptyString(mask)) motd->type = MOTD_UNIVERSAL; @@ -140,7 +140,7 @@ } /* Ok, allocate a structure; we'll realloc later to trim memory */ - struct MotdCache *cache = xcalloc(sizeof(struct MotdCache) + (MOTD_LINESIZE * MOTD_MAXLINES)); + struct MotdCache *cache = xcalloc(sizeof(*cache) + (MOTD_LINESIZE * MOTD_MAXLINES)); cache->ref = 1; cache->path = xstrdup(motd->path); cache->maxcount = motd->maxcount; @@ -159,8 +159,8 @@ fclose(file); /* Close the file */ /* Trim memory usage a little */ - motd->cache = xcalloc(sizeof(struct MotdCache) + (MOTD_LINESIZE * cache->count)); - memcpy(motd->cache, cache, sizeof(struct MotdCache) + (MOTD_LINESIZE * cache->count)); + motd->cache = xcalloc(sizeof(*motd->cache) + (MOTD_LINESIZE * cache->count)); + memcpy(motd->cache, cache, sizeof(*motd->cache) + (MOTD_LINESIZE * cache->count)); xfree(cache); /* Now link it in */ @@ -237,7 +237,7 @@ { case MOTD_CLASS: { - const struct ClassItem *class = get_class_ptr(&client_p->connection->confs); + const struct ClassItem *class = class_get_ptr(&client_p->connection->confs); if (!match(motd->mask, class->name)) return motd; break; @@ -247,14 +247,14 @@ return motd; break; case MOTD_IPMASKV4: - if (client_p->connection->aftype == AF_INET) - if (match_ipv4(&client_p->connection->ip, &motd->address, motd->addrbits)) - return motd; + if (client_p->connection->aftype == AF_INET) + if (match_ipv4(&client_p->connection->ip, &motd->address, motd->addrbits)) + return motd; break; case MOTD_IPMASKV6: - if (client_p->connection->aftype == AF_INET6) - if (match_ipv6(&client_p->connection->ip, &motd->address, motd->addrbits)) - return motd; + if (client_p->connection->aftype == AF_INET6) + if (match_ipv6(&client_p->connection->ip, &motd->address, motd->addrbits)) + return motd; break; default: break; } diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/numeric.c ircd-hybrid-8.2.24+dfsg.1/src/numeric.c --- ircd-hybrid-8.2.22+dfsg.1/src/numeric.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/numeric.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file numeric.c * \brief Declarations of numeric replies. - * \version $Id: numeric.c 8083 2017-03-26 10:14:41Z michael $ + * \version $Id: numeric.c 8490 2018-04-04 22:02:18Z michael $ */ #include "stdinc.h" @@ -30,10 +30,10 @@ static const char *const replies[] = { - /* 001 */ [RPL_WELCOME] = ":Welcome to the %s Internet Relay Chat Network %s", + /* 001 */ [RPL_WELCOME] = ":Welcome to the %s Internet Relay Chat Network %s!%s@%s", /* 002 */ [RPL_YOURHOST] = ":Your host is %s, running version %s", /* 003 */ [RPL_CREATED] = ":This server was created %s", - /* 004 */ [RPL_MYINFO] = "%s %s %s bchiklmnoprstuveCILMORST bkloveIh", + /* 004 */ [RPL_MYINFO] = "%s %s %s bchiklmnoprstuveCILMNORST bkloveIh", /* 005 */ [RPL_ISUPPORT] = "%s :are supported by this server", /* 010 */ [RPL_REDIR] = "%s %u :Please use this Server/Port instead", /* 015 */ [RPL_MAP] = ":%s%s", @@ -60,12 +60,13 @@ /* 221 */ [RPL_UMODEIS] = "%s", /* 225 */ [RPL_STATSDLINE] = "%c %s :%s", /* 226 */ [RPL_STATSALINE] = "%s", + /* 227 */ [RPL_STATSPSEUDO] = "s %s %s %s@%s :%s", /* 241 */ [RPL_STATSLLINE] = "%c %s * %s %u %s", /* 242 */ [RPL_STATSUPTIME] = ":Server Up %s", /* 243 */ [RPL_STATSOLINE] = "%c %s@%s * %s %s %s", /* 244 */ [RPL_STATSHLINE] = "%c %s * %s %u %s", /* 245 */ [RPL_STATSTLINE] = "T %s %s", - /* 246 */ [RPL_STATSSERVICE] = "%c %s * %s %u %u", + /* 246 */ [RPL_STATSSERVICE] = "S %s * %s %u %u", /* 247 */ [RPL_STATSXLINE] = "%c %s :%s", /* 248 */ [RPL_STATSULINE] = "U %s %s@%s %s", /* 250 */ [RPL_STATSCONN] = ":Highest connection count: %u (%u clients) (%ju connections received)", @@ -165,6 +166,7 @@ /* 441 */ [ERR_USERNOTINCHANNEL] = "%s %s :They aren't on that channel", /* 442 */ [ERR_NOTONCHANNEL] = "%s :You are not on that channel", /* 443 */ [ERR_USERONCHANNEL] = "%s %s :is already on channel", + /* 447 */ [ERR_NONICKCHANGE] = ":Cannot change nickname while on %s (+N)", /* 451 */ [ERR_NOTREGISTERED] = ":You have not registered", /* 456 */ [ERR_ACCEPTFULL] = ":Accept list is full", /* 457 */ [ERR_ACCEPTEXIST] = "%s!%s@%s :is already on your accept list", diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/packet.c ircd-hybrid-8.2.24+dfsg.1/src/packet.c --- ircd-hybrid-8.2.22+dfsg.1/src/packet.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/packet.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file packet.c * \brief Packet handlers. - * \version $Id: packet.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: packet.c 8413 2018-03-22 18:09:06Z michael $ */ #include "stdinc.h" @@ -255,7 +255,7 @@ * once a second on any given client. We then attempt to flush some data. */ void -flood_recalc(fde_t *fd, void *data) +flood_recalc(fde_t *F, void *data) { struct Client *const client_p = data; @@ -277,7 +277,7 @@ if (!IsDead(client_p)) { /* and finally, reset the flood check */ - comm_setflush(fd, 1000, flood_recalc, client_p); + comm_setflush(F, 1000, flood_recalc, client_p); } } @@ -285,12 +285,17 @@ * read_packet - Read a 'packet' of data from a connection and process it. */ void -read_packet(fde_t *fd, void *data) +read_packet(fde_t *F, void *data) { struct Client *const client_p = data; int length = 0; int want_write = 0; + assert(client_p); + assert(client_p->connection); + assert(client_p->connection->fd); + assert(client_p->connection->fd == F); + if (IsDefunct(client_p)) return; @@ -301,15 +306,15 @@ */ do { - if (tls_isusing(&fd->ssl)) + if (tls_isusing(&F->ssl)) { - length = tls_read(&fd->ssl, readBuf, sizeof(readBuf), &want_write); + length = tls_read(&F->ssl, readBuf, sizeof(readBuf), &want_write); if (want_write) - comm_setselect(fd, COMM_SELECT_WRITE, sendq_unblocked, client_p, 0); + comm_setselect(F, COMM_SELECT_WRITE, sendq_unblocked, client_p, 0); } else - length = recv(fd->fd, readBuf, sizeof(readBuf), 0); + length = recv(F->fd, readBuf, sizeof(readBuf), 0); if (length <= 0) { @@ -317,7 +322,7 @@ * If true, then we can recover from this error. Just jump out of * the loop and re-register a new io-request. */ - if (length < 0 && ignoreErrno(errno)) + if (length < 0 && comm_ignore_errno(errno)) break; dead_link_on_read(client_p, length); @@ -348,8 +353,8 @@ exit_client(client_p, "Excess Flood"); return; } - } while (length == sizeof(readBuf) || tls_isusing(&fd->ssl)); + } while (length == sizeof(readBuf) || tls_isusing(&F->ssl)); /* If we get here, we need to register for another COMM_SELECT_READ */ - comm_setselect(fd, COMM_SELECT_READ, read_packet, client_p, 0); + comm_setselect(F, COMM_SELECT_READ, read_packet, client_p, 0); } diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/parse.c ircd-hybrid-8.2.24+dfsg.1/src/parse.c --- ircd-hybrid-8.2.22+dfsg.1/src/parse.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/parse.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file parse.c * \brief The message parser. - * \version $Id: parse.c 7996 2017-03-14 13:17:39Z michael $ + * \version $Id: parse.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -251,7 +251,11 @@ if (IsDefunct(client_p)) return; - assert(client_p->connection->fd.flags.open); + assert(client_p->connection); + assert(client_p->connection->fd); + assert(client_p->connection->fd->flags.open); + + assert((bufend - pbuffer) < IRCD_BUFSIZE); for (ch = pbuffer; *ch == ' '; ++ch) /* Skip spaces */ @@ -400,7 +404,7 @@ if (*s == ':') { /* The rest is single parameter--can include blanks also. */ - para[++parc] = s + (!numeric); /* Keep the colon if it's a numeric */ + para[++parc] = s + (numeric == 0); /* Keep the colon if it's a numeric */ break; } @@ -463,7 +467,7 @@ */ if ((ntree_p = mtree_p->pointers[*cmd & (MAXPTRLEN - 1)]) == NULL) { - ntree_p = xcalloc(sizeof(struct MessageTree)); + ntree_p = xcalloc(sizeof(*ntree_p)); mtree_p->pointers[*cmd & (MAXPTRLEN - 1)] = ntree_p; mtree_p->links++; /* Have new pointer, so up ref count */ @@ -561,10 +565,8 @@ assert(msg->cmd); /* Command already added? */ - if (msg_tree_parse(msg->cmd)) - return; - - add_msg_element(&msg_tree, msg, msg->cmd); + if (msg_tree_parse(msg->cmd) == NULL) + add_msg_element(&msg_tree, msg, msg->cmd); } /* mod_del_cmd() @@ -579,10 +581,8 @@ assert(msg); assert(msg->cmd); - if (!msg_tree_parse(msg->cmd)) - return; - - del_msg_element(&msg_tree, msg->cmd); + if (msg_tree_parse(msg->cmd)) + del_msg_element(&msg_tree, msg->cmd); } /* find_command() diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/res.c ircd-hybrid-8.2.24+dfsg.1/src/res.c --- ircd-hybrid-8.2.22+dfsg.1/src/res.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/res.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file res.c * \brief ircd resolver functions - * \version $Id: res.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: res.c 8436 2018-03-29 09:04:53Z michael $ */ /* @@ -52,9 +52,9 @@ #include "fdlist.h" #include "s_bsd.h" #include "misc.h" -#include "mempool.h" #include "res.h" #include "reslib.h" +#include "memory.h" #if (CHAR_BIT != 8) #error this code needs to be able to address individual octets @@ -92,9 +92,8 @@ void *callback_ctx; /**< Context pointer for callback. */ }; -static fde_t ResolverFileDescriptor; +static fde_t *ResolverFileDescriptor; static dlink_list request_list; -static mp_pool_t *dns_pool; /* @@ -106,7 +105,7 @@ rem_request(struct reslist *request) { dlinkDelete(&request->node, &request_list); - mp_pool_release(request); + xfree(request); } /* @@ -115,7 +114,7 @@ static struct reslist * make_request(dns_callback_fnc callback, void *ctx) { - struct reslist *request = mp_pool_get(dns_pool); + struct reslist *request = xcalloc(sizeof(*request)); request->sentat = CurrentTime; request->retries = 2; @@ -186,14 +185,16 @@ { irc_res_init(); - if (!ResolverFileDescriptor.flags.open) + if (!ResolverFileDescriptor) { - if (comm_open(&ResolverFileDescriptor, irc_nsaddr_list[0].ss.ss_family, - SOCK_DGRAM, 0, "UDP resolver socket") == -1) + int fd = comm_socket(irc_nsaddr_list[0].ss.ss_family, SOCK_DGRAM, 0); + if (fd == -1) return; + ResolverFileDescriptor = fd_open(fd, 1, "UDP resolver socket"); + /* At the moment, the resolver FD data is global .. */ - comm_setselect(&ResolverFileDescriptor, COMM_SELECT_READ, res_readreply, NULL, 0); + comm_setselect(ResolverFileDescriptor, COMM_SELECT_READ, res_readreply, NULL, 0); } } @@ -203,7 +204,12 @@ void restart_resolver(void) { - fd_close(&ResolverFileDescriptor); + if (ResolverFileDescriptor) + { + fd_close(ResolverFileDescriptor); + ResolverFileDescriptor = NULL; + } + start_resolver(); } @@ -244,7 +250,7 @@ max_queries = 1; for (unsigned int i = 0; i < max_queries; ++i) - sendto(ResolverFileDescriptor.fd, msg, len, 0, + sendto(ResolverFileDescriptor->fd, msg, len, 0, (struct sockaddr *)&irc_nsaddr_list[i], irc_nsaddr_list[i].ss_len); } @@ -487,6 +493,7 @@ memcpy(&v4->sin_addr, current, sizeof(struct in_addr)); return 1; break; + case T_AAAA: if (request->type != T_AAAA) return 0; @@ -500,6 +507,7 @@ memcpy(&v6->sin6_addr, current, sizeof(struct in6_addr)); return 1; break; + case T_PTR: if (request->type != T_PTR) return 0; @@ -511,9 +519,11 @@ request->namelength = strlcpy(request->name, hostbuf, sizeof(request->name)); return 1; break; + case T_CNAME: current += rd_length; break; + default: return 0; break; @@ -527,7 +537,7 @@ * res_readreply - read a dns reply from the nameserver and process it. */ static void -res_readreply(fde_t *fd, void *data) +res_readreply(fde_t *F, void *data) { unsigned char buf[sizeof(HEADER) + MAXPACKET]; struct reslist *request = NULL; @@ -535,7 +545,7 @@ socklen_t len = sizeof(struct irc_ssaddr); struct irc_ssaddr lsin; - while ((rc = recvfrom(fd->fd, buf, sizeof(buf), 0, (struct sockaddr *)&lsin, &len)) != -1) + while ((rc = recvfrom(F->fd, buf, sizeof(buf), 0, (struct sockaddr *)&lsin, &len)) != -1) { if (rc <= (ssize_t)sizeof(HEADER)) continue; @@ -543,7 +553,7 @@ /* * Check against possibly fake replies */ - if (!res_ourserver(&lsin)) + if (res_ourserver(&lsin) == 0) continue; /* @@ -578,7 +588,7 @@ * We only give it one shot. If it fails, just leave the client * unresolved. */ - if (!proc_answer(request, header, buf, buf + rc)) + if (proc_answer(request, header, buf, buf + rc) == 0) { (*request->callback)(request->callback_ctx, NULL, NULL, 0); rem_request(request); @@ -620,7 +630,7 @@ continue; } - comm_setselect(fd, COMM_SELECT_READ, res_readreply, NULL, 0); + comm_setselect(F, COMM_SELECT_READ, res_readreply, NULL, 0); } /* @@ -683,8 +693,6 @@ .when = 1 }; - dns_pool = mp_pool_new(sizeof(struct reslist), MP_CHUNK_SIZE_DNS); - start_resolver(); event_add(&event_timeout_resolver, NULL); } diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/restart.c ircd-hybrid-8.2.24+dfsg.1/src/restart.c --- ircd-hybrid-8.2.22+dfsg.1/src/restart.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/restart.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file restart.c * \brief Functions to allow the ircd to restart. - * \version $Id: restart.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: restart.c 8338 2018-03-03 22:26:59Z michael $ */ #include "stdinc.h" @@ -64,7 +64,7 @@ save_all_databases(NULL); send_queued_all(); - close_fds(NULL); + close_fds(); unlink(pidFileName); diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/s_bsd.c ircd-hybrid-8.2.24+dfsg.1/src/s_bsd.c --- ircd-hybrid-8.2.22+dfsg.1/src/s_bsd.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/s_bsd.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file s_bsd.c * \brief Network functions. - * \version $Id: s_bsd.c 7956 2017-03-05 11:52:53Z michael $ + * \version $Id: s_bsd.c 8430 2018-03-27 18:48:40Z michael $ */ #include "stdinc.h" @@ -41,7 +41,6 @@ #include "packet.h" #include "res.h" #include "restart.h" -#include "auth.h" #include "conf.h" #include "log.h" #include "server.h" @@ -66,21 +65,21 @@ static void comm_connect_tryconnect(fde_t *, void *); -/* get_sockerr - get the error value from the socket or the current errno +/* comm_get_sockerr - get the error value from the socket or the current errno * * Get the *real* error from the socket (well try to anyway..). * This may only work when SO_DEBUG is enabled but its worth the * gamble anyway. */ int -get_sockerr(int fd) +comm_get_sockerr(int fd) { int errtmp = errno; #ifdef SO_ERROR int err = 0; socklen_t len = sizeof(err); - if (-1 < fd && !getsockopt(fd, SOL_SOCKET, SO_ERROR, &err, &len)) + if (fd > -1 && !getsockopt(fd, SOL_SOCKET, SO_ERROR, &err, &len)) { if (err) errtmp = err; @@ -108,9 +107,8 @@ * * Actually stderr is still there IFF ircd was run with -s --Rodder */ - void -report_error(int level, const char* text, const char* who, int error) +report_error(int level, const char *text, const char *who, int error) { who = (who) ? who : ""; @@ -140,84 +138,20 @@ } /* - * close_connection - * Close the physical connection. This function must make - * MyConnect(client_p) == FALSE, and set client_p->from == NULL. - */ -void -close_connection(struct Client *client_p) -{ - assert(client_p); - - if (!IsDead(client_p)) - { - /* attempt to flush any pending dbufs. Evil, but .. -- adrian */ - /* there is still a chance that we might send data to this socket - * even if it is marked as blocked (COMM_SELECT_READ handler is called - * before COMM_SELECT_WRITE). Let's try, nothing to lose.. -adx - */ - DelFlag(client_p, FLAGS_BLOCKED); - send_queued_write(client_p); - } - - if (IsClient(client_p)) - { - ++ServerStats.is_cl; - ServerStats.is_cbs += client_p->connection->send.bytes; - ServerStats.is_cbr += client_p->connection->recv.bytes; - ServerStats.is_cti += CurrentTime - client_p->connection->firsttime; - } - else if (IsServer(client_p)) - { - dlink_node *node = NULL; - - ++ServerStats.is_sv; - ServerStats.is_sbs += client_p->connection->send.bytes; - ServerStats.is_sbr += client_p->connection->recv.bytes; - ServerStats.is_sti += CurrentTime - client_p->connection->firsttime; - - DLINK_FOREACH(node, connect_items.head) - { - struct MaskItem *conf = node->data; - - if (irccmp(conf->name, client_p->name)) - continue; - - /* - * Reset next-connect cycle of all connect{} blocks that match - * this servername. - */ - conf->until = CurrentTime + conf->class->con_freq; - } - } - else - ++ServerStats.is_ni; - - if (tls_isusing(&client_p->connection->fd.ssl)) - tls_shutdown(&client_p->connection->fd.ssl); - - if (client_p->connection->fd.flags.open) - fd_close(&client_p->connection->fd); - - dbuf_clear(&client_p->connection->buf_sendq); - dbuf_clear(&client_p->connection->buf_recvq); - - xfree(client_p->connection->password); - client_p->connection->password = NULL; - - detach_conf(client_p, CONF_CLIENT | CONF_OPER | CONF_SERVER); -} - -/* * ssl_handshake - let OpenSSL initialize the protocol. Register for * read/write events if necessary. */ static void -ssl_handshake(fde_t *fd, void *data) +ssl_handshake(fde_t *F, void *data) { struct Client *client_p = data; - tls_handshake_status_t ret = tls_handshake(&client_p->connection->fd.ssl, TLS_ROLE_SERVER, NULL); + assert(client_p); + assert(client_p->connection); + assert(client_p->connection->fd); + assert(client_p->connection->fd == F); + + tls_handshake_status_t ret = tls_handshake(&F->ssl, TLS_ROLE_SERVER, NULL); if (ret != TLS_HANDSHAKE_DONE) { if ((CurrentTime - client_p->connection->firsttime) > CONNECTTIMEOUT) @@ -229,11 +163,11 @@ switch (ret) { case TLS_HANDSHAKE_WANT_WRITE: - comm_setselect(&client_p->connection->fd, COMM_SELECT_WRITE, + comm_setselect(client_p->connection->fd, COMM_SELECT_WRITE, ssl_handshake, client_p, CONNECTTIMEOUT); return; case TLS_HANDSHAKE_WANT_READ: - comm_setselect(&client_p->connection->fd, COMM_SELECT_READ, + comm_setselect(client_p->connection->fd, COMM_SELECT_READ, ssl_handshake, client_p, CONNECTTIMEOUT); return; default: @@ -242,9 +176,9 @@ } } - comm_settimeout(&client_p->connection->fd, 0, NULL, NULL); + comm_settimeout(F, 0, NULL, NULL); - if (!tls_verify_cert(&client_p->connection->fd.ssl, ConfigServerInfo.message_digest_algorithm, &client_p->certfp)) + if (!tls_verify_cert(&F->ssl, ConfigServerInfo.message_digest_algorithm, &client_p->certfp)) ilog(LOG_TYPE_IRCD, "Client %s!%s@%s gave bad TLS client certificate", client_p->name, client_p->username, client_p->host); @@ -263,52 +197,34 @@ { struct Client *client_p = client_make(NULL); - fd_open(&client_p->connection->fd, fd, 1, - (listener->flags & LISTENER_SSL) ? - "Incoming SSL connection" : "Incoming connection"); + client_p->connection->fd = fd_open(fd, 1, (listener->flags & LISTENER_SSL) ? + "Incoming SSL connection" : "Incoming connection"); /* * copy address to 'sockhost' as a string, copy it to host too * so we have something valid to put into error messages... */ - memcpy(&client_p->connection->ip, irn, sizeof(struct irc_ssaddr)); + memcpy(&client_p->connection->ip, irn, sizeof(client_p->connection->ip)); getnameinfo((const struct sockaddr *)&client_p->connection->ip, client_p->connection->ip.ss_len, client_p->sockhost, sizeof(client_p->sockhost), NULL, 0, NI_NUMERICHOST); client_p->connection->aftype = client_p->connection->ip.ss.ss_family; -#ifdef HAVE_LIBGEOIP - if (irn->ss.ss_family == AF_INET && GeoIPv4_ctx) + if (client_p->sockhost[0] == ':') { - GeoIPLookup gl; - const struct sockaddr_in *const v4 = (const struct sockaddr_in *)&client_p->connection->ip; - client_p->connection->country_id = GeoIP_id_by_ipnum_gl(GeoIPv4_ctx, (unsigned long)ntohl(v4->sin_addr.s_addr), &gl); - } - else if (irn->ss.ss_family == AF_INET6 && GeoIPv6_ctx) - { - GeoIPLookup gl; - const struct sockaddr_in6 *const v6 = (const struct sockaddr_in6 *)&client_p->connection->ip; - client_p->connection->country_id = GeoIP_id_by_ipnum_v6_gl(GeoIPv6_ctx, v6->sin6_addr, &gl); - } -#endif - - if (client_p->sockhost[0] == ':' && client_p->sockhost[1] == ':') - { - strlcpy(client_p->host, "0", sizeof(client_p->host)); - strlcpy(client_p->host + 1, client_p->sockhost, sizeof(client_p->host) - 1); - memmove(client_p->sockhost + 1, client_p->sockhost, sizeof(client_p->sockhost) - 1); client_p->sockhost[0] = '0'; + memmove(client_p->sockhost + 1, client_p->sockhost, sizeof(client_p->sockhost) - 1); } - else - strlcpy(client_p->host, client_p->sockhost, sizeof(client_p->host)); + + strlcpy(client_p->host, client_p->sockhost, sizeof(client_p->host)); client_p->connection->listener = listener; ++listener->ref_count; if (listener->flags & LISTENER_SSL) { - if (!tls_new(&client_p->connection->fd.ssl, fd, TLS_ROLE_SERVER)) + if (!tls_new(&client_p->connection->fd->ssl, fd, TLS_ROLE_SERVER)) { SetDead(client_p); exit_client(client_p, "TLS context initialization failed"); @@ -316,7 +232,7 @@ } AddFlag(client_p, FLAGS_SSL); - ssl_handshake(NULL, client_p); + ssl_handshake(client_p->connection->fd, client_p); } else auth_start(client_p); @@ -329,7 +245,7 @@ * -- adrian */ int -ignoreErrno(int ierrno) +comm_ignore_errno(int ierrno) { switch (ierrno) { @@ -355,13 +271,13 @@ * Set the timeout for the fd */ void -comm_settimeout(fde_t *fd, uintmax_t timeout, void (*callback)(fde_t *, void *), void *cbdata) +comm_settimeout(fde_t *F, uintmax_t timeout, void (*callback)(fde_t *, void *), void *cbdata) { - assert(fd->flags.open); + assert(F->flags.open); - fd->timeout = CurrentTime + (timeout / 1000); - fd->timeout_handler = callback; - fd->timeout_data = cbdata; + F->timeout = CurrentTime + (timeout / 1000); + F->timeout_handler = callback; + F->timeout_data = cbdata; } /* @@ -377,13 +293,13 @@ * comm_close() is replaced with fd_close() in fdlist.c */ void -comm_setflush(fde_t *fd, uintmax_t timeout, void (*callback)(fde_t *, void *), void *cbdata) +comm_setflush(fde_t *F, uintmax_t timeout, void (*callback)(fde_t *, void *), void *cbdata) { - assert(fd->flags.open); + assert(F->flags.open); - fd->flush_timeout = CurrentTime + (timeout / 1000); - fd->flush_handler = callback; - fd->flush_data = cbdata; + F->flush_timeout = CurrentTime + (timeout / 1000); + F->flush_handler = callback; + F->flush_data = cbdata; } /* @@ -396,37 +312,37 @@ void comm_checktimeouts(void *unused) { - fde_t *F; void (*hdl)(fde_t *, void *); void *data; - for (unsigned int i = 0; i < FD_HASH_SIZE; i++) + for (int fd = 0; fd <= highest_fd; ++fd) { - for (F = fd_hash[i]; F != NULL; F = fd_next_in_loop) + fde_t *F = &fd_table[fd]; + + if (F->flags.open == 0) + continue; + + /* check flush functions */ + if (F->flush_handler && F->flush_timeout > 0 && + F->flush_timeout < CurrentTime) + { + hdl = F->flush_handler; + data = F->flush_data; + + comm_setflush(F, 0, NULL, NULL); + hdl(F, data); + } + + /* check timeouts */ + if (F->timeout_handler && F->timeout > 0 && + F->timeout < CurrentTime) { - assert(F->flags.open); - fd_next_in_loop = F->hnext; + /* Call timeout handler */ + hdl = F->timeout_handler; + data = F->timeout_data; - /* check flush functions */ - if (F->flush_handler && F->flush_timeout > 0 && - F->flush_timeout < CurrentTime) - { - hdl = F->flush_handler; - data = F->flush_data; - comm_setflush(F, 0, NULL, NULL); - hdl(F, data); - } - - /* check timeouts */ - if (F->timeout_handler && F->timeout > 0 && - F->timeout < CurrentTime) - { - /* Call timeout handler */ - hdl = F->timeout_handler; - data = F->timeout_data; - comm_settimeout(F, 0, NULL, NULL); - hdl(F, data); - } + comm_settimeout(F, 0, NULL, NULL); + hdl(F, data); } } } @@ -445,7 +361,7 @@ * may be called now, or it may be called later. */ void -comm_connect_tcp(fde_t *fd, const char *host, unsigned short port, struct sockaddr *clocal, +comm_connect_tcp(fde_t *F, const char *host, unsigned short port, struct sockaddr *clocal, int socklen, void (*callback)(fde_t *, int, void *), void *data, int aftype, uintmax_t timeout) { @@ -453,11 +369,11 @@ char portname[PORTNAMELEN + 1]; assert(callback); - fd->connect.callback = callback; - fd->connect.data = data; + F->connect.callback = callback; + F->connect.data = data; - fd->connect.hostaddr.ss.ss_family = aftype; - fd->connect.hostaddr.ss_port = htons(port); + F->connect.hostaddr.ss.ss_family = aftype; + F->connect.hostaddr.ss_port = htons(port); /* Note that we're using a passed sockaddr here. This is because * generally you'll be bind()ing to a sockaddr grabbed from @@ -466,10 +382,10 @@ * virtual host IP, for completeness. * -- adrian */ - if (clocal && bind(fd->fd, clocal, socklen) < 0) + if (clocal && bind(F->fd, clocal, socklen) < 0) { /* Failure, call the callback with COMM_ERR_BIND */ - comm_connect_callback(fd, COMM_ERR_BIND); + comm_connect_callback(F, COMM_ERR_BIND); return; /* ... and quit */ } @@ -489,9 +405,9 @@ { /* Send the DNS request, for the next level */ if (aftype == AF_INET6) - gethost_byname_type(comm_connect_dns_callback, fd, host, T_AAAA); + gethost_byname_type(comm_connect_dns_callback, F, host, T_AAAA); else - gethost_byname_type(comm_connect_dns_callback, fd, host, T_A); + gethost_byname_type(comm_connect_dns_callback, F, host, T_A); } else { @@ -499,13 +415,14 @@ /* Make sure we actually set the timeout here .. */ assert(res); - memcpy(&fd->connect.hostaddr, res->ai_addr, res->ai_addrlen); - fd->connect.hostaddr.ss_len = res->ai_addrlen; - fd->connect.hostaddr.ss.ss_family = res->ai_family; + memcpy(&F->connect.hostaddr, res->ai_addr, res->ai_addrlen); + F->connect.hostaddr.ss_len = res->ai_addrlen; + F->connect.hostaddr.ss.ss_family = res->ai_family; + freeaddrinfo(res); - comm_settimeout(fd, timeout * 1000, comm_connect_timeout, NULL); - comm_connect_tryconnect(fd, NULL); + comm_settimeout(F, timeout * 1000, comm_connect_timeout, NULL); + comm_connect_tryconnect(F, NULL); } } @@ -513,23 +430,23 @@ * comm_connect_callback() - call the callback, and continue with life */ static void -comm_connect_callback(fde_t *fd, int status) +comm_connect_callback(fde_t *F, int status) { void (*hdl)(fde_t *, int, void *); /* This check is gross..but probably necessary */ - if (fd->connect.callback == NULL) + if (F->connect.callback == NULL) return; /* Clear the connect flag + handler */ - hdl = fd->connect.callback; - fd->connect.callback = NULL; + hdl = F->connect.callback; + F->connect.callback = NULL; /* Clear the timeout handler */ - comm_settimeout(fd, 0, NULL, NULL); + comm_settimeout(F, 0, NULL, NULL); /* Call the handler */ - hdl(fd, status, fd->connect.data); + hdl(F, status, F->connect.data); } /* @@ -538,10 +455,10 @@ * called .. */ static void -comm_connect_timeout(fde_t *fd, void *unused) +comm_connect_timeout(fde_t *F, void *unused) { /* error! */ - comm_connect_callback(fd, COMM_ERR_TIMEOUT); + comm_connect_callback(F, COMM_ERR_TIMEOUT); } /* @@ -561,8 +478,8 @@ return; } - /* No error, set a 10 second timeout */ - comm_settimeout(F, 30*1000, comm_connect_timeout, NULL); + /* No error, set a 30 second timeout */ + comm_settimeout(F, 30 * 1000, comm_connect_timeout, NULL); /* Copy over the DNS reply info so we can use it in the connect() */ /* @@ -580,7 +497,7 @@ comm_connect_tryconnect(F, NULL); } -/* static void comm_connect_tryconnect(int fd, void *unused) +/* static void comm_connect_tryconnect(fde_t *fd, void *unused) * Input: The fd, the handler data(unused). * Output: None. * Side-effects: Try and connect with pending connect data for the FD. If @@ -589,14 +506,14 @@ * to select for a write event on this FD. */ static void -comm_connect_tryconnect(fde_t *fd, void *unused) +comm_connect_tryconnect(fde_t *F, void *unused) { /* This check is needed or re-entrant s_bsd_* like sigio break it. */ - if (fd->connect.callback == NULL) + if (F->connect.callback == NULL) return; /* Try the connect() */ - int retval = connect(fd->fd, (struct sockaddr *)&fd->connect.hostaddr, fd->connect.hostaddr.ss_len); + int retval = connect(F->fd, (struct sockaddr *)&F->connect.hostaddr, F->connect.hostaddr.ss_len); /* Error? */ if (retval < 0) @@ -607,18 +524,18 @@ * -- adrian */ if (errno == EISCONN) - comm_connect_callback(fd, COMM_OK); - else if (ignoreErrno(errno)) + comm_connect_callback(F, COMM_OK); + else if (comm_ignore_errno(errno)) /* Ignore error? Reschedule */ - comm_setselect(fd, COMM_SELECT_WRITE, comm_connect_tryconnect, NULL, 0); + comm_setselect(F, COMM_SELECT_WRITE, comm_connect_tryconnect, NULL, 0); else /* Error? Fail with COMM_ERR_CONNECT */ - comm_connect_callback(fd, COMM_ERR_CONNECT); + comm_connect_callback(F, COMM_ERR_CONNECT); return; } /* If we get here, we've suceeded, so call with COMM_OK */ - comm_connect_callback(fd, COMM_OK); + comm_connect_callback(F, COMM_OK); } /* @@ -640,7 +557,7 @@ * to run out of file descriptors. */ int -comm_open(fde_t *F, int family, int sock_type, int proto, const char *note) +comm_socket(int family, int sock_type, int proto) { /* First, make sure we aren't going to run out of file descriptors */ if (number_fd >= hard_fdlimit) @@ -660,9 +577,7 @@ setup_socket(fd); - /* update things in our fd tracking */ - fd_open(F, fd, 1, note); - return 0; + return fd; } /* @@ -673,7 +588,7 @@ * fd_open (this function no longer does it). */ int -comm_accept(struct Listener *lptr, struct irc_ssaddr *addr) +comm_accept(int fd, struct irc_ssaddr *addr) { socklen_t addrlen = sizeof(struct irc_ssaddr); @@ -683,23 +598,23 @@ return -1; } - memset(addr, 0, sizeof(struct irc_ssaddr)); + memset(addr, 0, sizeof(*addr)); /* * Next, do the accept(). if we get an error, we should drop the * reserved fd limit, but we can deal with that when comm_open() * also does it. XXX -- adrian */ - int fd = accept(lptr->fd.fd, (struct sockaddr *)addr, &addrlen); - if (fd < 0) + int new_fd = accept(fd, (struct sockaddr *)addr, &addrlen); + if (new_fd < 0) return -1; remove_ipv6_mapping(addr); - setup_socket(fd); + setup_socket(new_fd); /* .. and return */ - return fd; + return new_fd; } /* diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/s_bsd_devpoll.c ircd-hybrid-8.2.24+dfsg.1/src/s_bsd_devpoll.c --- ircd-hybrid-8.2.22+dfsg.1/src/s_bsd_devpoll.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/s_bsd_devpoll.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2001-2017 ircd-hybrid development team + * Copyright (c) 2001-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file s_bsd_devpoll.c * \brief /dev/poll compatible network routines. - * \version $Id: s_bsd_devpoll.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: s_bsd_devpoll.c 8430 2018-03-27 18:48:40Z michael $ */ #include "stdinc.h" @@ -42,27 +42,25 @@ #include "s_bsd.h" #include "log.h" -static fde_t dpfd; +static int devpoll_fd; /* - * netio_init + * comm_select_init * * This is a needed exported function which will be called to initialise * the network loop code. */ void -netio_init(void) +comm_select_init(void) { - int fd; - - if ((fd = open("/dev/poll", O_RDWR)) < 0) + if ((devpoll_fd = open("/dev/poll", O_RDWR)) < 0) { - ilog(LOG_TYPE_IRCD, "netio_init: couldn't open /dev/poll: %s", + ilog(LOG_TYPE_IRCD, "comm_select_init: couldn't open /dev/poll: %s", strerror(errno)); exit(EXIT_FAILURE); /* Whee! */ } - fd_open(&dpfd, fd, 0, "/dev/poll file descriptor"); + fd_open(devpoll_fd, 0, "/dev/poll file descriptor"); } /* @@ -82,7 +80,7 @@ pfd.events = events; /* Write the thing to our poll fd */ - if (write(dpfd.fd, &pfd, sizeof(pfd)) != sizeof(pfd)) + if (write(devpoll_fd, &pfd, sizeof(pfd)) != sizeof(pfd)) ilog(LOG_TYPE_IRCD, "devpoll_write_update: dpfd write failed %d: %s", errno, strerror(errno)); } @@ -114,7 +112,7 @@ new_events = (F->read_handler ? POLLIN : 0) | (F->write_handler ? POLLOUT : 0); - if (timeout != 0) + if (timeout) { F->timeout = CurrentTime + (timeout / 1000); F->timeout_handler = handler; @@ -140,16 +138,15 @@ void comm_select(void) { - int num, i; + int num; struct pollfd pollfds[128]; struct dvpoll dopoll; void (*hdl)(fde_t *, void *); - fde_t *F; dopoll.dp_timeout = SELECT_DELAY; dopoll.dp_nfds = 128; dopoll.dp_fds = &pollfds[0]; - num = ioctl(dpfd.fd, DP_POLL, &dopoll); + num = ioctl(devpoll_fd, DP_POLL, &dopoll); set_time(); @@ -160,30 +157,33 @@ return; } - for (i = 0; i < num; i++) + for (int i = 0; i < num; ++i) { - F = lookup_fd(dopoll.dp_fds[i].fd); - if (F == NULL || !F->flags.open) + fde_t *F = &fd_table[dopoll.dp_fds[i].fd]; + + if (F->flags.open == 0) continue; if ((dopoll.dp_fds[i].revents & POLLIN)) { - if ((hdl = F->read_handler) != NULL) + if ((hdl = F->read_handler)) { F->read_handler = NULL; hdl(F, F->read_data); - if (!F->flags.open) + + if (F->flags.open == 0) continue; } } if ((dopoll.dp_fds[i].revents & POLLOUT)) { - if ((hdl = F->write_handler) != NULL) + if ((hdl = F->write_handler)) { F->write_handler = NULL; hdl(F, F->write_data); - if (!F->flags.open) + + if (F->flags.open == 0) continue; } } diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/s_bsd_epoll.c ircd-hybrid-8.2.24+dfsg.1/src/s_bsd_epoll.c --- ircd-hybrid-8.2.22+dfsg.1/src/s_bsd_epoll.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/s_bsd_epoll.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2005-2017 ircd-hybrid development team + * Copyright (c) 2005-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file s_bsd_epoll.c * \brief Linux epoll() compatible network routines. - * \version $Id: s_bsd_epoll.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: s_bsd_epoll.c 8465 2018-04-02 14:04:25Z michael $ */ #include "stdinc.h" @@ -33,28 +33,26 @@ #include #include -static fde_t efd; +static int epoll_fd; /* - * netio_init + * comm_select_init * * This is a needed exported function which will be called to initialise * the network loop code. */ void -netio_init(void) +comm_select_init(void) { - int fd; - - if ((fd = epoll_create(hard_fdlimit)) < 0) + if ((epoll_fd = epoll_create(hard_fdlimit)) < 0) { - ilog(LOG_TYPE_IRCD, "netio_init: couldn't open epoll fd: %s", + ilog(LOG_TYPE_IRCD, "comm_select_init: couldn't open epoll fd: %s", strerror(errno)); exit(EXIT_FAILURE); /* Whee! */ } - fd_open(&efd, fd, 0, "epoll file descriptor"); + fd_open(epoll_fd, 0, "epoll file descriptor"); } /* @@ -70,6 +68,8 @@ int new_events, op; struct epoll_event ep_event = { 0, { 0 } }; + assert(F->flags.open); + if ((type & COMM_SELECT_READ)) { F->read_handler = handler; @@ -85,7 +85,7 @@ new_events = (F->read_handler ? EPOLLIN : 0) | (F->write_handler ? EPOLLOUT : 0); - if (timeout != 0) + if (timeout) { F->timeout = CurrentTime + (timeout / 1000); F->timeout_handler = handler; @@ -102,9 +102,9 @@ op = EPOLL_CTL_MOD; ep_event.events = F->evcache = new_events; - ep_event.data.fd = F->fd; + ep_event.data.ptr = F; - if (epoll_ctl(efd.fd, op, F->fd, &ep_event) != 0) + if (epoll_ctl(epoll_fd, op, F->fd, &ep_event)) { ilog(LOG_TYPE_IRCD, "comm_setselect: epoll_ctl() failed: %s", strerror(errno)); abort(); @@ -124,11 +124,10 @@ comm_select(void) { struct epoll_event ep_fdlist[128]; - int num, i; + int num; void (*hdl)(fde_t *, void *); - fde_t *F; - num = epoll_wait(efd.fd, ep_fdlist, 128, SELECT_DELAY); + num = epoll_wait(epoll_fd, ep_fdlist, 128, SELECT_DELAY); set_time(); @@ -139,10 +138,11 @@ return; } - for (i = 0; i < num; i++) + for (int i = 0; i < num; ++i) { - F = lookup_fd(ep_fdlist[i].data.fd); - if (F == NULL || !F->flags.open) + fde_t *F = ep_fdlist[i].data.ptr; + + if (F->flags.open == 0) continue; if ((ep_fdlist[i].events & (EPOLLIN | EPOLLHUP | EPOLLERR))) @@ -151,7 +151,8 @@ { F->read_handler = NULL; hdl(F, F->read_data); - if (!F->flags.open) + + if (F->flags.open == 0) continue; } } @@ -162,7 +163,8 @@ { F->write_handler = NULL; hdl(F, F->write_data); - if (!F->flags.open) + + if (F->flags.open == 0) continue; } } diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/s_bsd_kqueue.c ircd-hybrid-8.2.24+dfsg.1/src/s_bsd_kqueue.c --- ircd-hybrid-8.2.22+dfsg.1/src/s_bsd_kqueue.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/s_bsd_kqueue.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2000-2017 ircd-hybrid development team + * Copyright (c) 2000-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file s_bsd_kqueue.c * \brief kqueue() compatible network routines. - * \version $Id: s_bsd_kqueue.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: s_bsd_kqueue.c 8430 2018-03-27 18:48:40Z michael $ */ #include "stdinc.h" @@ -34,48 +34,47 @@ enum { KE_LENGTH = 128 }; -static fde_t kqfd; +static int kqueue_fd; static struct kevent kq_fdlist[KE_LENGTH]; /* kevent buffer */ static int kqoff; /* offset into the buffer */ /* - * netio_init + * comm_select_init * * This is a needed exported function which will be called to initialise * the network loop code. */ void -netio_init(void) +comm_select_init(void) { - int fd; - - if ((fd = kqueue()) < 0) + if ((kqueue_fd = kqueue()) < 0) { - ilog(LOG_TYPE_IRCD, "netio_init: couldn't open kqueue fd: %s", strerror(errno)); + ilog(LOG_TYPE_IRCD, "comm_select_init: couldn't open kqueue fd: %s", + strerror(errno)); exit(EXIT_FAILURE); /* Whee! */ } - fd_open(&kqfd, fd, 0, "kqueue() file descriptor"); + fd_open(kqueue_fd, 0, "kqueue() file descriptor"); } /* * Write a single update to the kqueue list. */ static void -kq_update_events(int fd, int filter, int what) +kq_update_events(fde_t *F, int filter, int what) { const struct timespec zero_timespec = { .tv_sec = 0, .tv_nsec = 0 }; struct kevent *kep = kq_fdlist + kqoff; - EV_SET(kep, (uintptr_t) fd, (short) filter, what, 0, 0, NULL); + EV_SET(kep, (uintptr_t) F->fd, (short) filter, what, 0, 0, F); if (++kqoff == KE_LENGTH) { int i; for (i = 0; i < kqoff; ++i) - kevent(kqfd.fd, &kq_fdlist[i], 1, NULL, 0, &zero_timespec); + kevent(kqueue_fd, &kq_fdlist[i], 1, NULL, 0, &zero_timespec); kqoff = 0; } } @@ -107,7 +106,7 @@ new_events = (F->read_handler ? COMM_SELECT_READ : 0) | (F->write_handler ? COMM_SELECT_WRITE : 0); - if (timeout != 0) + if (timeout) { F->timeout = CurrentTime + (timeout / 1000); F->timeout_handler = handler; @@ -117,11 +116,9 @@ diff = new_events ^ F->evcache; if ((diff & COMM_SELECT_READ)) - kq_update_events(F->fd, EVFILT_READ, - (new_events & COMM_SELECT_READ) ? EV_ADD : EV_DELETE); + kq_update_events(F, EVFILT_READ, (new_events & COMM_SELECT_READ) ? EV_ADD : EV_DELETE); if ((diff & COMM_SELECT_WRITE)) - kq_update_events(F->fd, EVFILT_WRITE, - (new_events & COMM_SELECT_WRITE) ? EV_ADD : EV_DELETE); + kq_update_events(F, EVFILT_WRITE, (new_events & COMM_SELECT_WRITE) ? EV_ADD : EV_DELETE); F->evcache = new_events; } @@ -137,11 +134,10 @@ void comm_select(void) { - int num, i; + int num; static struct kevent ke[KE_LENGTH]; struct timespec poll_time; void (*hdl)(fde_t *, void *); - fde_t *F; /* * remember we are doing NANOseconds here, not micro/milli. God knows @@ -150,7 +146,7 @@ */ poll_time.tv_sec = 0; poll_time.tv_nsec = SELECT_DELAY * 1000000; - num = kevent(kqfd.fd, kq_fdlist, kqoff, ke, KE_LENGTH, &poll_time); + num = kevent(kqueue_fd, kq_fdlist, kqoff, ke, KE_LENGTH, &poll_time); kqoff = 0; set_time(); @@ -162,30 +158,33 @@ return; } - for (i = 0; i < num; i++) + for (int i = 0; i < num; ++i) { - F = lookup_fd(ke[i].ident); - if (F == NULL || !F->flags.open || (ke[i].flags & EV_ERROR)) + fde_t *F = ke[i].udata; + + if (F->flags.open == 0 || (ke[i].flags & EV_ERROR)) continue; if (ke[i].filter == EVFILT_READ) { - if ((hdl = F->read_handler) != NULL) + if ((hdl = F->read_handler)) { F->read_handler = NULL; hdl(F, F->read_data); - if (!F->flags.open) + + if (F->flags.open == 0) continue; } } if (ke[i].filter == EVFILT_WRITE) { - if ((hdl = F->write_handler) != NULL) + if ((hdl = F->write_handler)) { F->write_handler = NULL; hdl(F, F->write_data); - if (!F->flags.open) + + if (F->flags.open == 0) continue; } } diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/s_bsd_poll.c ircd-hybrid-8.2.24+dfsg.1/src/s_bsd_poll.c --- ircd-hybrid-8.2.22+dfsg.1/src/s_bsd_poll.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/s_bsd_poll.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2000-2017 ircd-hybrid development team + * Copyright (c) 2000-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file s_bsd_poll.c * \brief POSIX poll() compatible network routines. - * \version $Id: s_bsd_poll.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: s_bsd_poll.c 8430 2018-03-27 18:48:40Z michael $ */ #include "stdinc.h" @@ -48,13 +48,13 @@ /* - * netio_init + * comm_select_init * * This is a needed exported function which will be called to initialise * the network loop code. */ void -netio_init(void) +comm_select_init(void) { pollfds_size = hard_fdlimit; pollfds = xcalloc(sizeof(struct pollfd) * pollfds_size); @@ -87,7 +87,7 @@ new_events = (F->read_handler ? POLLRDNORM : 0) | (F->write_handler ? POLLWRNORM : 0); - if (timeout != 0) + if (timeout) { F->timeout = CurrentTime + (timeout / 1000); F->timeout_handler = handler; @@ -100,7 +100,7 @@ { if (F->comm_index != pollnum - 1) { - fde_t *other = lookup_fd(pollfds[pollnum - 1].fd); + fde_t *other = &fd_table[pollfds[pollnum - 1].fd]; pollfds[F->comm_index].fd = pollfds[pollnum - 1].fd; pollfds[F->comm_index].events = pollfds[pollnum - 1].events; @@ -146,9 +146,8 @@ void comm_select(void) { - int num, ci; + int num; void (*hdl)(fde_t *, void *); - fde_t *F; num = poll(pollfds, pollnum, SELECT_DELAY); @@ -161,17 +160,17 @@ return; } - for (ci = 0; ci < pollnum && num > 0; ci++) + for (int ci = 0; ci < pollnum && num > 0; ++ci) { int revents = pollfds[ci].revents; - if (revents == 0) continue; - num--; - F = lookup_fd(pollfds[ci].fd); - assert(F); - if (!F->flags.open) + --num; + + fde_t *F = &fd_table[pollfds[ci].fd]; + + if (F->flags.open == 0) continue; if (revents & (POLLRDNORM | POLLIN | POLLHUP | POLLERR)) @@ -180,7 +179,8 @@ { F->read_handler = NULL; hdl(F, F->read_data); - if (!F->flags.open) + + if (F->flags.open == 0) continue; } } @@ -191,7 +191,8 @@ { F->write_handler = NULL; hdl(F, F->write_data); - if (!F->flags.open) + + if (F->flags.open == 0) continue; } } diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/send.c ircd-hybrid-8.2.24+dfsg.1/src/send.c --- ircd-hybrid-8.2.22+dfsg.1/src/send.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/send.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file send.c * \brief Functions for sending messages. - * \version $Id: send.c 8035 2017-03-17 17:49:11Z michael $ + * \version $Id: send.c 8413 2018-03-22 18:09:06Z michael $ */ #include "stdinc.h" @@ -33,7 +33,7 @@ #include "irc_string.h" #include "ircd.h" #include "s_bsd.h" -#include "server.h" +#include "server_capab.h" #include "conf_class.h" #include "log.h" @@ -149,10 +149,14 @@ ** Called when a socket is ready for writing. */ void -sendq_unblocked(fde_t *fd, void *data) +sendq_unblocked(fde_t *F, void *data) { struct Client *const client_p = data; - assert(fd == &client_p->connection->fd); + + assert(client_p); + assert(client_p->connection); + assert(client_p->connection->fd); + assert(client_p->connection->fd == F); DelFlag(client_p, FLAGS_BLOCKED); send_queued_write(client_p); @@ -184,17 +188,17 @@ { const struct dbuf_block *first = to->connection->buf_sendq.blocks.head->data; - if (tls_isusing(&to->connection->fd.ssl)) + if (tls_isusing(&to->connection->fd->ssl)) { - retlen = tls_write(&to->connection->fd.ssl, first->data + to->connection->buf_sendq.pos, - first->size - to->connection->buf_sendq.pos, &want_read); + retlen = tls_write(&to->connection->fd->ssl, first->data + to->connection->buf_sendq.pos, + first->size - to->connection->buf_sendq.pos, &want_read); if (want_read) return; /* Retry later, don't register for write events */ } else - retlen = send(to->connection->fd.fd, first->data + to->connection->buf_sendq.pos, - first->size - to->connection->buf_sendq.pos, 0); + retlen = send(to->connection->fd->fd, first->data + to->connection->buf_sendq.pos, + first->size - to->connection->buf_sendq.pos, 0); if (retlen <= 0) break; @@ -206,12 +210,12 @@ me.connection->send.bytes += retlen; } while (dbuf_length(&to->connection->buf_sendq)); - if (retlen < 0 && ignoreErrno(errno)) + if (retlen < 0 && comm_ignore_errno(errno)) { AddFlag(to, FLAGS_BLOCKED); /* we have a non-fatal error, reschedule a write */ - comm_setselect(&to->connection->fd, COMM_SELECT_WRITE, sendq_unblocked, to, 0); + comm_setselect(to->connection->fd, COMM_SELECT_WRITE, sendq_unblocked, to, 0); } else if (retlen <= 0) { @@ -230,7 +234,7 @@ void send_queued_all(void) { - dlink_node *node = NULL; + dlink_node *node; /* Servers are processed first, mainly because this can generate * a notice to opers, which is to be delivered by this function. @@ -352,7 +356,7 @@ { va_list alocal, aremote; struct dbuf_block *local_buf, *remote_buf; - dlink_node *node = NULL; + dlink_node *node; local_buf = dbuf_alloc(), remote_buf = dbuf_alloc(); @@ -536,7 +540,7 @@ unsigned int poscap, unsigned int negcap, const char *pattern, ...) { va_list args; - dlink_node *node = NULL; + dlink_node *node; struct dbuf_block *buffer = dbuf_alloc(); va_start(args, pattern); @@ -607,7 +611,7 @@ const char *mask, int what, const char *pattern, ...) { va_list alocal, aremote; - dlink_node *node = NULL; + dlink_node *node; struct dbuf_block *local_buf, *remote_buf; local_buf = dbuf_alloc(), remote_buf = dbuf_alloc(); @@ -683,7 +687,7 @@ const char *pattern, ...) { va_list args; - dlink_node *node = NULL; + dlink_node *node; struct dbuf_block *buffer = dbuf_alloc(); dbuf_put_fmt(buffer, ":%s ", source_p->id); @@ -851,7 +855,7 @@ sendto_wallops_flags(unsigned int flags, const struct Client *source_p, const char *pattern, ...) { - dlink_node *node = NULL; + dlink_node *node; va_list args; struct dbuf_block *buffer = dbuf_alloc(); diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/server.c ircd-hybrid-8.2.24+dfsg.1/src/server.c --- ircd-hybrid-8.2.22+dfsg.1/src/server.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/server.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -19,9 +19,9 @@ * USA */ -/*! \file s_serv.c +/*! \file server.c * \brief Server related functions. - * \version $Id: server.c 7996 2017-03-14 13:17:39Z michael $ + * \version $Id: server.c 8436 2018-03-29 09:04:53Z michael $ */ #include "stdinc.h" @@ -36,6 +36,7 @@ #include "packet.h" #include "conf.h" #include "server.h" +#include "server_capab.h" #include "log.h" #include "send.h" #include "memory.h" @@ -43,8 +44,7 @@ dlink_list flatten_links; -static dlink_list server_capabilities_list; -static void serv_connect_callback(fde_t *, int, void *); +static void server_connect_callback(fde_t *, int, void *); /* @@ -270,7 +270,7 @@ assert(conf->class); /* Also when already connecting! (update holdtimes) --SRB */ - if (!conf->port || !IsConfAllowAutoConn(conf)) + if (conf->port == 0 || !IsConfAllowAutoConn(conf)) continue; /* @@ -305,11 +305,11 @@ return; /* - * We used to only print this if serv_connect() actually + * We used to only print this if server_connect() actually * succeeded, but since comm_tcp_connect() can call the callback * immediately if there is an error, we were getting error messages * in the wrong order. SO, we just print out the activated line, - * and let serv_connect() / serv_connect_callback() print an + * and let server_connect() / server_connect_callback() print an * error afterwards if it fails. * -- adrian */ @@ -322,7 +322,7 @@ "Connection to %s[%s] activated.", conf->name, conf->host); - serv_connect(conf, NULL); + server_connect(conf, NULL); /* We connect only one at time... */ return; } @@ -330,7 +330,7 @@ } int -valid_servname(const char *name) +server_valid_name(const char *name) { unsigned int dots = 0; const char *p = name; @@ -347,120 +347,7 @@ return dots && (p - name) <= HOSTLEN; } -/* server_capab_init() - * - * inputs - none - * output - none - */ -void -server_capab_init(void) -{ - add_capability("QS", CAPAB_QS); - add_capability("EOB", CAPAB_EOB); - add_capability("CLUSTER", CAPAB_CLUSTER); - add_capability("SVS", CAPAB_SVS); - add_capability("CHW", CAPAB_CHW); - add_capability("HOPS", CAPAB_HOPS); -} - -/* add_capability() - * - * inputs - string name of CAPAB - * - int flag of capability - * output - NONE - * side effects - Adds given capability name and bit mask to - * current supported capabilities. This allows - * modules to dynamically add or subtract their capability. - */ -void -add_capability(const char *name, unsigned int flag) -{ - struct Capability *cap = xcalloc(sizeof(*cap)); - - cap->name = xstrdup(name); - cap->cap = flag; - dlinkAdd(cap, &cap->node, &server_capabilities_list); -} - -/* delete_capability() - * - * inputs - string name of CAPAB - * output - NONE - * side effects - delete given capability from ones known. - */ -void -delete_capability(const char *name) -{ - dlink_node *node, *node_next; - - DLINK_FOREACH_SAFE(node, node_next, server_capabilities_list.head) - { - struct Capability *cap = node->data; - - if (!irccmp(cap->name, name)) - { - dlinkDelete(node, &server_capabilities_list); - xfree(cap->name); - xfree(cap); - } - } -} - -/* - * find_capability() - * - * inputs - string name of capab to find - * output - 0 if not found CAPAB otherwise - * side effects - none - */ -unsigned int -find_capability(const char *name) -{ - dlink_node *node; - - DLINK_FOREACH(node, server_capabilities_list.head) - { - const struct Capability *cap = node->data; - - if (!irccmp(cap->name, name)) - return cap->cap; - } - - return 0; -} - -/* - * show_capabilities - show current server capabilities - * - * inputs - pointer to a struct Client - * output - pointer to static string - * side effects - build up string representing capabilities of server listed - */ -const char * -get_capabilities(const struct Client *client_p) -{ - static char buf[IRCD_BUFSIZE] = ""; - dlink_node *node; - - buf[0] = '\0'; - - DLINK_FOREACH(node, server_capabilities_list.head) - { - const struct Capability *cap = node->data; - - if (client_p && !IsCapable(client_p, cap->cap)) - continue; - - strlcat(buf, cap->name, sizeof(buf)); - - if (node->next) - strlcat(buf, " ", sizeof(buf)); - } - - return buf; -} - -/* make_server() +/* server_make() * * inputs - pointer to client struct * output - pointer to struct Server @@ -468,20 +355,15 @@ * if it was not previously allocated. */ struct Server * -make_server(struct Client *client_p) +server_make(struct Client *client_p) { if (client_p->serv == NULL) - client_p->serv = xcalloc(sizeof(struct Server)); + client_p->serv = xcalloc(sizeof(*client_p->serv)); return client_p->serv; } -/* New server connection code - * Based upon the stuff floating about in s_bsd.c - * -- adrian - */ - -/* serv_connect() - initiate a server connection +/* server_connect() - initiate a server connection * * inputs - pointer to conf * - pointer to client doing the connect @@ -498,9 +380,8 @@ * it suceeded or not, and 0 if it fails in here somewhere. */ int -serv_connect(struct MaskItem *conf, struct Client *by) +server_connect(struct MaskItem *conf, struct Client *by) { - struct Client *client_p = NULL; char buf[HOSTIPLEN + 1] = ""; /* conversion structs */ @@ -508,11 +389,12 @@ /* Make sure conf is useful */ assert(conf); + assert(conf->type == CONF_SERVER); + assert(hash_find_server(conf->name) == NULL); /* This should have been checked by the caller */ getnameinfo((const struct sockaddr *)&conf->addr, conf->addr.ss_len, buf, sizeof(buf), NULL, 0, NI_NUMERICHOST); - ilog(LOG_TYPE_IRCD, "Connect to %s[%s] @%s", conf->name, conf->host, - buf); + ilog(LOG_TYPE_IRCD, "Connect to %s[%s] @%s", conf->name, conf->host, buf); /* Still processing a DNS lookup? -> exit */ if (conf->dns_pending) @@ -531,26 +413,17 @@ return 0; } - /* - * Make sure this server isn't already connected. - * Note: conf should ALWAYS be a valid connect {} block - */ - if ((client_p = hash_find_server(conf->name))) + /* Create a socket for the server connection */ + int fd = comm_socket(conf->addr.ss.ss_family, SOCK_STREAM, 0); + if (fd == -1) { - sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, - "Server %s already present from %s", - conf->name, client_get_name(client_p, SHOW_IP)); - sendto_realops_flags(UMODE_SERVNOTICE, L_OPER, SEND_NOTICE, - "Server %s already present from %s", - conf->name, client_get_name(client_p, MASK_IP)); - if (by && IsClient(by) && !MyClient(by)) - sendto_one_notice(by, &me, ":Server %s already present from %s", - conf->name, client_get_name(client_p, MASK_IP)); + /* Eek, failure to create the socket */ + report_error(L_ALL, "opening stream socket to %s: %s", conf->name, errno); return 0; } /* Create a local client */ - client_p = client_make(NULL); + struct Client *client_p = client_make(NULL); /* Copy in the server, hostname, fd */ strlcpy(client_p->name, conf->name, sizeof(client_p->name)); @@ -559,45 +432,18 @@ /* We already converted the ip once, so lets use it - stu */ strlcpy(client_p->sockhost, buf, sizeof(client_p->sockhost)); - /* Create a socket for the server connection */ - if (comm_open(&client_p->connection->fd, conf->addr.ss.ss_family, SOCK_STREAM, 0, NULL) < 0) - { - /* Eek, failure to create the socket */ - report_error(L_ALL, "opening stream socket to %s: %s", conf->name, errno); - - SetDead(client_p); - exit_client(client_p, "Connection failed"); - return 0; - } + client_p->connection->fd = fd_open(fd, 1, NULL); /* Server names are always guaranteed under HOSTLEN chars */ - fd_note(&client_p->connection->fd, "Server: %s", client_p->name); + fd_note(client_p->connection->fd, "Server: %s", client_p->name); /* - * Attach config entries to client here rather than in serv_connect_callback(). + * Attach config entries to client here rather than in server_connect_callback(). * This to avoid null pointer references. */ - if (!attach_connect_block(client_p, conf->name, conf->host)) - { - sendto_realops_flags(UMODE_SERVNOTICE, L_ALL, SEND_NOTICE, - "Host %s is not enabled for connecting: no connect {} block", - conf->name); - if (by && IsClient(by) && !MyClient(by)) - sendto_one_notice(by, &me, ":Connect to host %s failed: no connect {} block", client_p->name); + conf_attach(client_p, conf); - SetDead(client_p); - exit_client(client_p, "Connection failed"); - return 0; - } - - /* - * At this point we have a connection in progress and a connect {} block - * attached to the client, the socket info should be saved in the client - * and it should either be resolved or have a valid address. - * - * The socket has been connected or connect is in progress. - */ - make_server(client_p); + server_make(client_p); if (by && IsClient(by)) strlcpy(client_p->serv->by, by->name, sizeof(client_p->serv->by)); @@ -615,33 +461,38 @@ { case AF_INET: v4 = (struct sockaddr_in*)&conf->bind; + if (v4->sin_addr.s_addr) { struct irc_ssaddr ipn; - memset(&ipn, 0, sizeof(struct irc_ssaddr)); + + memset(&ipn, 0, sizeof(ipn)); ipn.ss.ss_family = AF_INET; ipn.ss_port = 0; - memcpy(&ipn, &conf->bind, sizeof(struct irc_ssaddr)); - comm_connect_tcp(&client_p->connection->fd, conf->host, conf->port, + memcpy(&ipn, &conf->bind, sizeof(ipn)); + + comm_connect_tcp(client_p->connection->fd, conf->host, conf->port, (struct sockaddr *)&ipn, ipn.ss_len, - serv_connect_callback, client_p, conf->aftype, + server_connect_callback, client_p, conf->aftype, CONNECTTIMEOUT); } else if (ConfigServerInfo.specific_ipv4_vhost) { struct irc_ssaddr ipn; - memset(&ipn, 0, sizeof(struct irc_ssaddr)); + + memset(&ipn, 0, sizeof(ipn)); ipn.ss.ss_family = AF_INET; ipn.ss_port = 0; - memcpy(&ipn, &ConfigServerInfo.ip, sizeof(struct irc_ssaddr)); - comm_connect_tcp(&client_p->connection->fd, conf->host, conf->port, + memcpy(&ipn, &ConfigServerInfo.ip, sizeof(ipn)); + + comm_connect_tcp(client_p->connection->fd, conf->host, conf->port, (struct sockaddr *)&ipn, ipn.ss_len, - serv_connect_callback, client_p, conf->aftype, + server_connect_callback, client_p, conf->aftype, CONNECTTIMEOUT); } else - comm_connect_tcp(&client_p->connection->fd, conf->host, conf->port, - NULL, 0, serv_connect_callback, client_p, conf->aftype, + comm_connect_tcp(client_p->connection->fd, conf->host, conf->port, + NULL, 0, server_connect_callback, client_p, conf->aftype, CONNECTTIMEOUT); break; case AF_INET6: @@ -650,45 +501,54 @@ struct sockaddr_in6 *v6; struct sockaddr_in6 *v6conf; - memset(&ipn, 0, sizeof(struct irc_ssaddr)); + memset(&ipn, 0, sizeof(ipn)); v6conf = (struct sockaddr_in6 *)&conf->bind; v6 = (struct sockaddr_in6 *)&ipn; if (memcmp(&v6conf->sin6_addr, &v6->sin6_addr, sizeof(struct in6_addr))) { - memcpy(&ipn, &conf->bind, sizeof(struct irc_ssaddr)); + memcpy(&ipn, &conf->bind, sizeof(ipn)); ipn.ss.ss_family = AF_INET6; ipn.ss_port = 0; - comm_connect_tcp(&client_p->connection->fd, + + comm_connect_tcp(client_p->connection->fd, conf->host, conf->port, (struct sockaddr *)&ipn, ipn.ss_len, - serv_connect_callback, client_p, + server_connect_callback, client_p, conf->aftype, CONNECTTIMEOUT); } else if (ConfigServerInfo.specific_ipv6_vhost) { - memcpy(&ipn, &ConfigServerInfo.ip6, sizeof(struct irc_ssaddr)); + memcpy(&ipn, &ConfigServerInfo.ip6, sizeof(ipn)); ipn.ss.ss_family = AF_INET6; ipn.ss_port = 0; - comm_connect_tcp(&client_p->connection->fd, + + comm_connect_tcp(client_p->connection->fd, conf->host, conf->port, (struct sockaddr *)&ipn, ipn.ss_len, - serv_connect_callback, client_p, + server_connect_callback, client_p, conf->aftype, CONNECTTIMEOUT); } else - comm_connect_tcp(&client_p->connection->fd, + comm_connect_tcp(client_p->connection->fd, conf->host, conf->port, - NULL, 0, serv_connect_callback, client_p, + NULL, 0, server_connect_callback, client_p, conf->aftype, CONNECTTIMEOUT); } } + /* + * At this point we have a connection in progress and a connect {} block + * attached to the client, the socket info should be saved in the client + * and it should either be resolved or have a valid address. + * + * The socket has been connected or connect is in progress. + */ return 1; } static void -finish_ssl_server_handshake(struct Client *client_p) +server_finish_tls_handshake(struct Client *client_p) { const struct MaskItem *conf = find_conf_name(&client_p->connection->confs, client_p->name, CONF_SERVER); @@ -705,37 +565,28 @@ sendto_one(client_p, "PASS %s TS %u %s", conf->spasswd, TS_CURRENT, me.id); - sendto_one(client_p, "CAPAB :%s", get_capabilities(NULL)); + sendto_one(client_p, "CAPAB :%s", capab_get(NULL)); sendto_one(client_p, "SERVER %s 1 :%s%s", me.name, ConfigServerHide.hidden ? "(H) " : "", me.info); - /* - * If we've been marked dead because a send failed, just exit - * here now and save everyone the trouble of us ever existing. - */ - if (IsDead(client_p)) - { - sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, - "%s went dead during handshake", client_get_name(client_p, SHOW_IP)); - sendto_realops_flags(UMODE_SERVNOTICE, L_OPER, SEND_NOTICE, - "%s went dead during handshake", client_get_name(client_p, MASK_IP)); - return; - } - - /* don't move to serv_list yet -- we haven't sent a burst! */ /* If we get here, we're ok, so lets start reading some data */ - comm_setselect(&client_p->connection->fd, COMM_SELECT_READ, read_packet, client_p, 0); + read_packet(client_p->connection->fd, client_p); } static void -ssl_server_handshake(fde_t *fd, void *data) +server_tls_handshake(fde_t *F, void *data) { struct Client *client_p = data; const char *sslerr = NULL; - tls_handshake_status_t ret = tls_handshake(&client_p->connection->fd.ssl, TLS_ROLE_CLIENT, &sslerr); + assert(client_p); + assert(client_p->connection); + assert(client_p->connection->fd); + assert(client_p->connection->fd == F); + + tls_handshake_status_t ret = tls_handshake(&F->ssl, TLS_ROLE_CLIENT, &sslerr); if (ret != TLS_HANDSHAKE_DONE) { if ((CurrentTime - client_p->connection->firsttime) > CONNECTTIMEOUT) @@ -747,12 +598,12 @@ switch (ret) { case TLS_HANDSHAKE_WANT_WRITE: - comm_setselect(&client_p->connection->fd, COMM_SELECT_WRITE, - ssl_server_handshake, client_p, CONNECTTIMEOUT); + comm_setselect(F, COMM_SELECT_WRITE, + server_tls_handshake, client_p, CONNECTTIMEOUT); return; case TLS_HANDSHAKE_WANT_READ: - comm_setselect(&client_p->connection->fd, COMM_SELECT_READ, - ssl_server_handshake, client_p, CONNECTTIMEOUT); + comm_setselect(F, COMM_SELECT_READ, + server_tls_handshake, client_p, CONNECTTIMEOUT); return; default: { @@ -765,19 +616,24 @@ } } - comm_settimeout(&client_p->connection->fd, 0, NULL, NULL); + comm_settimeout(F, 0, NULL, NULL); - if (!tls_verify_cert(&client_p->connection->fd.ssl, ConfigServerInfo.message_digest_algorithm, &client_p->certfp)) + if (!tls_verify_cert(&F->ssl, ConfigServerInfo.message_digest_algorithm, &client_p->certfp)) ilog(LOG_TYPE_IRCD, "Server %s!%s@%s gave bad TLS client certificate", client_p->name, client_p->username, client_p->host); - finish_ssl_server_handshake(client_p); + server_finish_tls_handshake(client_p); } static void -ssl_connect_init(struct Client *client_p, const struct MaskItem *conf, fde_t *fd) +server_tls_connect_init(struct Client *client_p, const struct MaskItem *conf, fde_t *F) { - if (!tls_new(&client_p->connection->fd.ssl, fd->fd, TLS_ROLE_CLIENT)) + assert(client_p); + assert(client_p->connection); + assert(client_p->connection->fd); + assert(client_p->connection->fd == F); + + if (!tls_new(&F->ssl, F->fd, TLS_ROLE_CLIENT)) { SetDead(client_p); exit_client(client_p, "TLS context initialization failed"); @@ -785,12 +641,12 @@ } if (!EmptyString(conf->cipher_list)) - tls_set_ciphers(&client_p->connection->fd.ssl, conf->cipher_list); + tls_set_ciphers(&F->ssl, conf->cipher_list); - ssl_server_handshake(NULL, client_p); + server_tls_handshake(F, client_p); } -/* serv_connect_callback() - complete a server connection. +/* server_connect_callback() - complete a server connection. * * This routine is called after the server connection attempt has * completed. If unsucessful, an error is sent to ops and the client @@ -799,16 +655,18 @@ * marked for reading. */ static void -serv_connect_callback(fde_t *fd, int status, void *data) +server_connect_callback(fde_t *F, int status, void *data) { struct Client *const client_p = data; /* First, make sure it's a real client! */ assert(client_p); - assert(&client_p->connection->fd == fd); + assert(client_p->connection); + assert(client_p->connection->fd); + assert(client_p->connection->fd == F); /* Next, for backward purposes, record the ip of the server */ - memcpy(&client_p->connection->ip, &fd->connect.hostaddr, sizeof(struct irc_ssaddr)); + memcpy(&client_p->connection->ip, &F->connect.hostaddr, sizeof(client_p->connection->ip)); /* Check the status */ if (status != COMM_OK) @@ -849,33 +707,19 @@ if (IsConfSSL(conf)) { - ssl_connect_init(client_p, conf, fd); + server_tls_connect_init(client_p, conf, F); return; } sendto_one(client_p, "PASS %s TS %u %s", conf->spasswd, TS_CURRENT, me.id); - sendto_one(client_p, "CAPAB :%s", get_capabilities(NULL)); + sendto_one(client_p, "CAPAB :%s", capab_get(NULL)); sendto_one(client_p, "SERVER %s 1 :%s%s", me.name, ConfigServerHide.hidden ? "(H) " : "", me.info); - /* - * If we've been marked dead because a send failed, just exit - * here now and save everyone the trouble of us ever existing. - */ - if (IsDead(client_p)) - { - sendto_realops_flags(UMODE_SERVNOTICE, L_ADMIN, SEND_NOTICE, - "%s went dead during handshake", client_get_name(client_p, SHOW_IP)); - sendto_realops_flags(UMODE_SERVNOTICE, L_OPER, SEND_NOTICE, - "%s went dead during handshake", client_get_name(client_p, MASK_IP)); - return; - } - - /* don't move to serv_list yet -- we haven't sent a burst! */ /* If we get here, we're ok, so lets start reading some data */ - comm_setselect(fd, COMM_SELECT_READ, read_packet, client_p, 0); + read_packet(client_p->connection->fd, client_p); } struct Client * diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/server_capab.c ircd-hybrid-8.2.24+dfsg.1/src/server_capab.c --- ircd-hybrid-8.2.22+dfsg.1/src/server_capab.c 1970-01-01 00:00:00.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/server_capab.c 2018-04-04 22:33:37.000000000 +0000 @@ -0,0 +1,149 @@ +/* + * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) + * + * Copyright (c) 1997-2018 ircd-hybrid development team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 + * USA + */ + +/*! \file server_capab.c + * \brief Server CAPAB related functions. + * \version $Id: server_capab.c 8415 2018-03-24 18:37:03Z michael $ + */ + +#include "stdinc.h" +#include "list.h" +#include "client.h" +#include "irc_string.h" +#include "ircd_defs.h" +#include "server_capab.h" +#include "memory.h" + + +static dlink_list capab_list; /* List of capabilities supported by this server */ + + +/* capab_init() + * + * inputs - none + * output - none + */ +void +capab_init(void) +{ + capab_add("QS", CAPAB_QS); + capab_add("EOB", CAPAB_EOB); + capab_add("CLUSTER", CAPAB_CLUSTER); + capab_add("SVS", CAPAB_SVS); + capab_add("RHOST", CAPAB_RHOST); +} + +/* capab_add() + * + * inputs - string name of CAPAB + * - int flag of capability + * output - NONE + * side effects - Adds given capability name and bit mask to + * current supported capabilities. This allows + * modules to dynamically add or subtract their capability. + */ +void +capab_add(const char *name, unsigned int flag) +{ + struct Capability *cap = xcalloc(sizeof(*cap)); + + cap->name = xstrdup(name); + cap->cap = flag; + dlinkAdd(cap, &cap->node, &capab_list); +} + +/* capab_del() + * + * inputs - string name of CAPAB + * output - NONE + * side effects - delete given capability from ones known. + */ +void +capab_del(const char *name) +{ + dlink_node *node, *node_next; + + DLINK_FOREACH_SAFE(node, node_next, capab_list.head) + { + struct Capability *cap = node->data; + + if (!irccmp(cap->name, name)) + { + dlinkDelete(node, &capab_list); + xfree(cap->name); + xfree(cap); + } + } +} + +/* + * capab_find() + * + * inputs - string name of capab to find + * output - 0 if not found CAPAB otherwise + * side effects - none + */ +unsigned int +capab_find(const char *name) +{ + dlink_node *node; + + DLINK_FOREACH(node, capab_list.head) + { + const struct Capability *cap = node->data; + + if (!irccmp(cap->name, name)) + return cap->cap; + } + + return 0; +} + +/* + * capab_get() - show current server capabilities + * + * inputs - pointer to a struct Client + * output - pointer to static string + * side effects - build up string representing capabilities of server listed + */ +const char * +capab_get(const void *ptr) +{ + static char buf[IRCD_BUFSIZE] = ""; + dlink_node *node; + + buf[0] = '\0'; + + DLINK_FOREACH(node, capab_list.head) + { + const struct Capability *cap = node->data; + + if (ptr && !IsCapable(((const struct Client *)ptr), cap->cap)) + continue; + + strlcat(buf, cap->name, sizeof(buf)); + + if (node->next) + strlcat(buf, " ", sizeof(buf)); + } + + return buf; +} diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/tls_gnutls.c ircd-hybrid-8.2.24+dfsg.1/src/tls_gnutls.c --- ircd-hybrid-8.2.22+dfsg.1/src/tls_gnutls.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/tls_gnutls.c 2018-04-04 22:33:37.000000000 +0000 @@ -3,7 +3,7 @@ * * Copyright (c) 2015 Attila Molnar * Copyright (c) 2015 Adam - * Copyright (c) 2015-2017 ircd-hybrid development team + * Copyright (c) 2015-2018 ircd-hybrid development team * * 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 @@ -23,7 +23,7 @@ /*! \file tls_gnutls.c * \brief Includes all GnuTLS-specific TLS functions - * \version $Id: tls_gnutls.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: tls_gnutls.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/tls_none.c ircd-hybrid-8.2.24+dfsg.1/src/tls_none.c --- ircd-hybrid-8.2.22+dfsg.1/src/tls_none.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/tls_none.c 2018-04-04 22:33:37.000000000 +0000 @@ -3,7 +3,7 @@ * * Copyright (c) 2015 Attila Molnar * Copyright (c) 2015 Adam - * Copyright (c) 2015-2017 ircd-hybrid development team + * Copyright (c) 2015-2018 ircd-hybrid development team * * 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 @@ -23,7 +23,7 @@ /*! \file tls_none.c * \brief Dummy file for no TLS support - * \version $Id: tls_none.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: tls_none.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/tls_openssl.c ircd-hybrid-8.2.24+dfsg.1/src/tls_openssl.c --- ircd-hybrid-8.2.22+dfsg.1/src/tls_openssl.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/tls_openssl.c 2018-04-04 22:33:37.000000000 +0000 @@ -3,7 +3,7 @@ * * Copyright (c) 2015 Attila Molnar * Copyright (c) 2015 Adam - * Copyright (c) 2005-2017 ircd-hybrid development team + * Copyright (c) 2005-2018 ircd-hybrid development team * * 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 @@ -23,7 +23,7 @@ /*! \file tls_openssl.c * \brief Includes all OpenSSL-specific TLS functions - * \version $Id: tls_openssl.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: tls_openssl.c 8280 2018-02-20 19:30:33Z michael $ */ #include "stdinc.h" diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/user.c ircd-hybrid-8.2.24+dfsg.1/src/user.c --- ircd-hybrid-8.2.22+dfsg.1/src/user.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/user.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file user.c * \brief User related functions. - * \version $Id: user.c 8062 2017-03-23 17:13:05Z michael $ + * \version $Id: user.c 8438 2018-03-29 13:05:42Z michael $ */ #include "stdinc.h" @@ -41,6 +41,7 @@ #include "conf_gecos.h" #include "log.h" #include "server.h" +#include "server_capab.h" /* TBR: RHOST compatibility mode */ #include "send.h" #include "memory.h" #include "packet.h" @@ -83,7 +84,6 @@ { 's', UMODE_SERVNOTICE }, { 'u', UMODE_UNAUTH }, { 'w', UMODE_WALLOP }, - { 'x', UMODE_HIDDENHOST }, { 'y', UMODE_SPY }, { '\0', 0 } }; @@ -124,8 +124,8 @@ if (dlink_list_length(&unknown_list)) sendto_one_numeric(client_p, &me, RPL_LUSERUNKNOWN, dlink_list_length(&unknown_list)); - if (dlink_list_length(&channel_list)) - sendto_one_numeric(client_p, &me, RPL_LUSERCHANNELS, dlink_list_length(&channel_list)); + if (dlink_list_length(channel_get_list())) + sendto_one_numeric(client_p, &me, RPL_LUSERCHANNELS, dlink_list_length(channel_get_list())); if (!ConfigServerHide.hide_servers || HasUMode(client_p, UMODE_OPER)) { @@ -220,14 +220,25 @@ if (server_p == client_p->from) continue; - sendto_one(server_p, ":%s UID %s %u %ju %s %s %s %s %s %s :%s", - client_p->servptr->id, - client_p->name, client_p->hopcount+1, - client_p->tsinfo, - buf, client_p->username, client_p->host, - client_p->sockhost, client_p->id, - client_p->account, - client_p->info); + /* TBR: compatibility mode */ + if (IsCapable(server_p, CAPAB_RHOST)) + sendto_one(server_p, ":%s UID %s %u %ju %s %s %s %s %s %s %s :%s", + client_p->servptr->id, + client_p->name, client_p->hopcount+1, + client_p->tsinfo, + buf, client_p->username, client_p->host, client_p->realhost, + client_p->sockhost, client_p->id, + client_p->account, + client_p->info); + else + sendto_one(server_p, ":%s UID %s %u %ju %s %s %s %s %s %s :%s", + client_p->servptr->id, + client_p->name, client_p->hopcount+1, + client_p->tsinfo, + buf, client_p->username, client_p->host, + client_p->sockhost, client_p->id, + client_p->account, + client_p->info); if (!EmptyString(client_p->certfp)) sendto_one(server_p, ":%s CERTFP %s", client_p->id, client_p->certfp); @@ -249,11 +260,11 @@ { AddUMode(client_p, UMODE_SSL); sendto_one_notice(client_p, &me, ":*** Connected securely via %s", - tls_get_cipher(&client_p->connection->fd.ssl)); + tls_get_cipher(&client_p->connection->fd->ssl)); } sendto_one_numeric(client_p, &me, RPL_WELCOME, ConfigServerInfo.network_name, - client_p->name); + client_p->name, client_p->username, client_p->realhost); sendto_one_numeric(client_p, &me, RPL_YOURHOST, listener_get_name(client_p->connection->listener), ircd_version); sendto_one_numeric(client_p, &me, RPL_CREATED, built_date); @@ -315,7 +326,7 @@ { do client_p->connection->random_ping = genrand_int32(); - while (!client_p->connection->random_ping); + while (client_p->connection->random_ping == 0); sendto_one(client_p, "PING :%u", client_p->connection->random_ping); AddFlag(client_p, FLAGS_PINGSENT); @@ -333,13 +344,6 @@ if (!check_client(client_p)) return; - if (!valid_hostname(client_p->host)) - { - sendto_one_notice(client_p, &me, ":*** Notice -- You have an illegal " - "character in your hostname"); - strlcpy(client_p->host, client_p->sockhost, sizeof(client_p->host)); - } - conf = client_p->connection->confs.head->data; if (!HasFlag(client_p, FLAGS_GOTID)) @@ -438,7 +442,7 @@ sendto_realops_flags(UMODE_CCONN, L_ALL, SEND_NOTICE, "Client connecting: %s (%s@%s) [%s] {%s} [%s] <%s>", - client_p->name, client_p->username, client_p->host, + client_p->name, client_p->username, client_p->realhost, client_p->sockhost, get_client_class(&client_p->connection->confs), client_p->info, client_p->id); @@ -521,7 +525,7 @@ sendto_realops_flags(UMODE_FARCONNECT, L_ALL, SEND_NOTICE, "Client connecting at %s: %s (%s@%s) [%s] [%s] <%s>", client_p->servptr->name, - client_p->name, client_p->username, client_p->host, + client_p->name, client_p->username, client_p->realhost, client_p->sockhost, client_p->info, client_p->id); introduce_client(client_p); @@ -706,24 +710,13 @@ } void -user_set_hostmask(struct Client *client_p, const char *hostname, const int what) +user_set_hostmask(struct Client *client_p, const char *hostname) { dlink_node *node; if (!strcmp(client_p->host, hostname)) return; - switch (what) - { - case MODE_ADD: - AddUMode(client_p, UMODE_HIDDENHOST); - break; - case MODE_DEL: - DelUMode(client_p, UMODE_HIDDENHOST); - break; - default: return; - } - if (ConfigGeneral.cycle_on_host_change) sendto_common_channels_local(client_p, 0, 0, CAP_CHGHOST, ":%s!%s@%s QUIT :Changing hostname", client_p->name, client_p->username, client_p->host); diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/userhost.c ircd-hybrid-8.2.24+dfsg.1/src/userhost.c --- ircd-hybrid-8.2.22+dfsg.1/src/userhost.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/userhost.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 2003-2017 ircd-hybrid development team + * Copyright (c) 2003-2018 ircd-hybrid development team * * 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 @@ -21,26 +21,17 @@ /*! \file userhost.c * \brief Global user limits. - * \version $Id: userhost.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: userhost.c 8384 2018-03-16 20:06:38Z michael $ */ #include "list.h" #include "hash.h" #include "client.h" #include "userhost.h" -#include "mempool.h" #include "irc_string.h" +#include "memory.h" -static mp_pool_t *userhost_pool; - - -void -userhost_init(void) -{ - userhost_pool = mp_pool_new(sizeof(struct UserHost), MP_CHUNK_SIZE_USERHOST); -} - /* userhost_count() * * inputs - user name @@ -80,7 +71,7 @@ if ((userhost = hash_find_userhost(host))) return userhost; - userhost = mp_pool_get(userhost_pool); + userhost = xcalloc(sizeof(*userhost)); strlcpy(userhost->host, host, sizeof(userhost->host)); hash_add_userhost(userhost); @@ -136,6 +127,6 @@ if (userhost->gcount == 0 && userhost->lcount == 0) { hash_del_userhost(userhost); - mp_pool_release(userhost); + xfree(userhost); } } diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/version.c ircd-hybrid-8.2.24+dfsg.1/src/version.c --- ircd-hybrid-8.2.22+dfsg.1/src/version.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/version.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,7 +21,7 @@ /*! \file version.c * \brief Includes license and version information shown in /info. - * \version $Id: version.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: version.c 8280 2018-02-20 19:30:33Z michael $ */ #include "patchlevel.h" @@ -36,7 +36,7 @@ "ircd-hybrid --", "Based on the original code written by Jarkko Oikarinen", "Copyright (c) 1988-1991 University of Oulu, Computing Center", - "Copyright (c) 1997-2017 ircd-hybrid development team", + "Copyright (c) 1997-2018 ircd-hybrid development team", "", "This program is free software; you can redistribute it and/or", "modify it under the terms of the GNU General Public License as", @@ -92,7 +92,7 @@ "madmax, Paul Lomax ", "metalrock, Jack Low ", "r0d3nt, Andrew Strutt ", - "Riedel, Dennis Vink ", + "Riedel, Dennis Vink ", "scuzzy, David Todd ", "spookey, David Colburn ", "TimeMr14C, Yusuf Iskenderoglu ", diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/watch.c ircd-hybrid-8.2.24+dfsg.1/src/watch.c --- ircd-hybrid-8.2.22+dfsg.1/src/watch.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/watch.c 2018-04-04 22:33:37.000000000 +0000 @@ -2,7 +2,7 @@ * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * * Copyright (c) 1997 Jukka Santala (Donwulff) - * Copyright (c) 2005-2017 ircd-hybrid development team + * Copyright (c) 2005-2018 ircd-hybrid development team * * 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 @@ -22,31 +22,23 @@ /*! \file watch.c * \brief File including functions for WATCH support - * \version $Id: watch.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: watch.c 8384 2018-03-16 20:06:38Z michael $ */ #include "stdinc.h" #include "list.h" +#include "memory.h" #include "client.h" #include "hash.h" #include "irc_string.h" #include "ircd.h" #include "numeric.h" #include "send.h" -#include "mempool.h" #include "watch.h" -static mp_pool_t *watch_pool; static dlink_list watchTable[HASHSIZE]; -/*! \brief Initializes the watch table - */ -void -watch_init(void) -{ - watch_pool = mp_pool_new(sizeof(struct Watch), MP_CHUNK_SIZE_WATCH); -} /* * Rough figure of the datastructures for watch: @@ -130,7 +122,7 @@ /* If found NULL (no header for this name), make one... */ if ((watch = watch_find_hash(name)) == NULL) { - watch = mp_pool_get(watch_pool); + watch = xcalloc(sizeof(*watch)); watch->lasttime = CurrentTime; strlcpy(watch->name, name, sizeof(watch->name)); @@ -178,7 +170,7 @@ { assert(dlinkFind(&watchTable[strhash(watch->name)], watch)); dlinkDelete(&watch->node, &watchTable[strhash(watch->name)]); - mp_pool_release(watch); + xfree(watch); } } @@ -207,7 +199,7 @@ assert(dlinkFind(&watchTable[strhash(watch->name)], watch)); dlinkDelete(&watch->node, &watchTable[strhash(watch->name)]); - mp_pool_release(watch); + xfree(watch); } dlinkDelete(node, &client_p->connection->watches); diff -Nru ircd-hybrid-8.2.22+dfsg.1/src/whowas.c ircd-hybrid-8.2.24+dfsg.1/src/whowas.c --- ircd-hybrid-8.2.22+dfsg.1/src/whowas.c 2017-03-26 15:37:50.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/src/whowas.c 2018-04-04 22:33:37.000000000 +0000 @@ -1,7 +1,7 @@ /* * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd) * - * Copyright (c) 1997-2017 ircd-hybrid development team + * Copyright (c) 1997-2018 ircd-hybrid development team * * 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 @@ -21,12 +21,12 @@ /*! \file whowas.c * \brief WHOWAS user cache. - * \version $Id: whowas.c 7925 2016-12-31 13:57:24Z michael $ + * \version $Id: whowas.c 8384 2018-03-16 20:06:38Z michael $ */ #include "stdinc.h" #include "list.h" -#include "mempool.h" +#include "memory.h" #include "whowas.h" #include "client.h" #include "hash.h" @@ -35,20 +35,10 @@ #include "conf.h" -static mp_pool_t *whowas_pool; - static dlink_list whowas_list; /*! Chain of struct Whowas pointers */ static dlink_list whowas_hash[HASHSIZE]; -/*! \brief Initializes the whowas memory pool. - */ -void -whowas_init(void) -{ - whowas_pool = mp_pool_new(sizeof(struct Whowas), MP_CHUNK_SIZE_WHOWAS); -} - /*! \brief Returns a slot of the whowas_hash by the hash value associated with it. * \param hashv Hash value. */ @@ -77,14 +67,14 @@ } /*! \brief Unlinks a Whowas struct from its associated lists - * and returns memory back to the pooling allocator. + * and frees memory. * \param whowas Pointer to Whowas struct to be unlinked and freed. */ static void whowas_free(struct Whowas *whowas) { whowas_unlink(whowas); - mp_pool_release(whowas); + xfree(whowas); } /*! \brief Returns a Whowas struct for further use. Either allocates @@ -100,7 +90,7 @@ dlink_list_length(&whowas_list) >= ConfigGeneral.whowas_history_length) whowas = whowas_unlink(whowas_list.tail->data); /* Re-use oldest item */ else - whowas = mp_pool_get(whowas_pool); + whowas = xcalloc(sizeof(*whowas)); return whowas; } @@ -138,6 +128,7 @@ strlcpy(whowas->name, client_p->name, sizeof(whowas->name)); strlcpy(whowas->username, client_p->username, sizeof(whowas->username)); strlcpy(whowas->hostname, client_p->host, sizeof(whowas->hostname)); + strlcpy(whowas->realhost, client_p->realhost, sizeof(whowas->realhost)); strlcpy(whowas->sockhost, client_p->sockhost, sizeof(whowas->sockhost)); strlcpy(whowas->realname, client_p->info, sizeof(whowas->realname)); strlcpy(whowas->servername, client_p->servptr->name, sizeof(whowas->servername)); diff -Nru ircd-hybrid-8.2.22+dfsg.1/tools/Makefile.in ircd-hybrid-8.2.24+dfsg.1/tools/Makefile.in --- ircd-hybrid-8.2.22+dfsg.1/tools/Makefile.in 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/tools/Makefile.in 2018-04-04 22:33:33.000000000 +0000 @@ -1,7 +1,7 @@ -# Makefile.in generated by automake 1.15 from Makefile.am. +# Makefile.in generated by automake 1.15.1 from Makefile.am. # @configure_input@ -# Copyright (C) 1994-2014 Free Software Foundation, Inc. +# Copyright (C) 1994-2017 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, @@ -91,21 +91,20 @@ bin_PROGRAMS = mkpasswd$(EXEEXT) subdir = tools ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/m4/ac_define_dir.m4 \ - $(top_srcdir)/m4/ax_append_compile_flags.m4 \ +am__aclocal_m4_deps = $(top_srcdir)/m4/ax_append_compile_flags.m4 \ $(top_srcdir)/m4/ax_append_flag.m4 \ $(top_srcdir)/m4/ax_arg_enable_assert.m4 \ $(top_srcdir)/m4/ax_arg_enable_debugging.m4 \ + $(top_srcdir)/m4/ax_arg_enable_efence.m4 \ $(top_srcdir)/m4/ax_arg_enable_warnings.m4 \ $(top_srcdir)/m4/ax_arg_gnutls.m4 \ $(top_srcdir)/m4/ax_arg_ioloop_mechanism.m4 \ - $(top_srcdir)/m4/ax_arg_libgeoip.m4 \ $(top_srcdir)/m4/ax_arg_openssl.m4 \ $(top_srcdir)/m4/ax_check_compile_flag.m4 \ + $(top_srcdir)/m4/ax_define_dir.m4 \ + $(top_srcdir)/m4/ax_gcc_stack_protect.m4 \ $(top_srcdir)/m4/ax_library_net.m4 \ - $(top_srcdir)/m4/ax_mempool_chunksizes.m4 \ $(top_srcdir)/m4/ax_require_defined.m4 \ - $(top_srcdir)/m4/gcc_stack_protect.m4 \ $(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltargz.m4 \ $(top_srcdir)/m4/ltdl.m4 $(top_srcdir)/m4/ltoptions.m4 \ $(top_srcdir)/m4/ltsugar.m4 $(top_srcdir)/m4/ltversion.m4 \ diff -Nru ircd-hybrid-8.2.22+dfsg.1/tools/mkpasswd.c ircd-hybrid-8.2.24+dfsg.1/tools/mkpasswd.c --- ircd-hybrid-8.2.22+dfsg.1/tools/mkpasswd.c 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/tools/mkpasswd.c 2018-04-04 22:33:33.000000000 +0000 @@ -8,7 +8,7 @@ ** /dev/random for salt generation added by ** Aaron Sethman ** -** $Id: mkpasswd.c 7667 2016-07-20 17:09:36Z michael $ +** $Id: mkpasswd.c 8436 2018-03-29 09:04:53Z michael $ */ #include @@ -20,17 +20,16 @@ enum { - FLAG_SHA256 = 0x00000001, - FLAG_SHA512 = 0x00000002, - FLAG_BLOWFISH = 0x00000004, - FLAG_RAW = 0x00000008, - FLAG_SALT = 0x00000010, - FLAG_LENGTH = 0x00000020, - FLAG_ROUNDS = 0x00000040, - FLAG_PASS = 0x00000080, + FLAG_SHA256 = 1 << 0, + FLAG_SHA512 = 1 << 1, + FLAG_BLOWFISH = 1 << 2, + FLAG_RAW = 1 << 3, + FLAG_SALT = 1 << 4, + FLAG_LENGTH = 1 << 5, + FLAG_ROUNDS = 1 << 6, + FLAG_PASS = 1 << 7, }; - extern char *crypt(); diff -Nru ircd-hybrid-8.2.22+dfsg.1/ylwrap ircd-hybrid-8.2.24+dfsg.1/ylwrap --- ircd-hybrid-8.2.22+dfsg.1/ylwrap 2017-03-26 15:37:51.000000000 +0000 +++ ircd-hybrid-8.2.24+dfsg.1/ylwrap 2018-04-04 22:33:37.000000000 +0000 @@ -1,9 +1,9 @@ #! /bin/sh # ylwrap - wrapper for lex/yacc invocations. -scriptversion=2013-01-12.17; # UTC +scriptversion=2016-01-11.22; # UTC -# Copyright (C) 1996-2014 Free Software Foundation, Inc. +# Copyright (C) 1996-2017 Free Software Foundation, Inc. # # Written by Tom Tromey . # @@ -242,6 +242,6 @@ # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" -# time-stamp-time-zone: "UTC" +# time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: