ngIRCd: Patch to upgrade ngIRCd 0.10.3 to version 0.11.0-pre1. .cvsignore | 7 AUTHORS | 12 ChangeLog | 36 INSTALL | 4 NEWS | 18 README | 8 autogen.sh | 23 configure.in | 6 contrib/.cvsignore | 2 contrib/Debian/.cvsignore | 2 contrib/Debian/changelog | 18 contrib/Debian/ngircd.init | 2 contrib/Debian/ngircd.postinst | 17 contrib/MacOSX/.cvsignore | 2 contrib/MacOSX/config.h | 92 + contrib/MacOSX/ngIRCd.xcodeproj/project.pbxproj | 1216 ++++++++++-------------- contrib/ngircd.spec | 2 doc/.cvsignore | 2 doc/CVS.txt | 2 doc/Makefile.am | 6 doc/Platforms.txt | 2 doc/Protocol.txt | 52 - doc/Zeroconf.txt | 2 doc/sample-ngircd.conf | 30 doc/src/.cvsignore | 3 doc/src/Makefile.am | 2 man/.cvsignore | 4 man/Makefile.am | 17 man/ngircd.8 | 80 - man/ngircd.8.tmpl | 81 + man/ngircd.conf.5 | 256 ----- man/ngircd.conf.5.tmpl | 281 +++++ src/.cvsignore | 5 src/ngircd/.cvsignore | 8 src/ngircd/Makefile.am | 6 src/ngircd/array.c | 8 src/ngircd/channel.c | 4 src/ngircd/channel.h | 2 src/ngircd/client.c | 14 src/ngircd/client.h | 2 src/ngircd/conf.c | 88 + src/ngircd/conf.h | 10 src/ngircd/conn-func.c | 12 src/ngircd/conn-func.h | 3 src/ngircd/conn-zip.c | 2 src/ngircd/conn.c | 159 +-- src/ngircd/conn.h | 5 src/ngircd/defines.h | 11 src/ngircd/hash.c | 2 src/ngircd/hash.h | 2 src/ngircd/io.c | 72 - src/ngircd/io.h | 2 src/ngircd/irc-channel.c | 2 src/ngircd/irc-info.c | 168 ++- src/ngircd/irc-info.h | 3 src/ngircd/irc-login.c | 9 src/ngircd/irc-mode.c | 28 src/ngircd/irc-op.c | 2 src/ngircd/irc-oper.c | 68 + src/ngircd/irc-oper.h | 3 src/ngircd/irc-server.c | 210 ---- src/ngircd/irc-server.h | 4 src/ngircd/irc-write.c | 2 src/ngircd/lists.c | 2 src/ngircd/lists.h | 2 src/ngircd/log.c | 2 src/ngircd/log.h | 2 src/ngircd/match.c | 2 src/ngircd/match.h | 2 src/ngircd/messages.h | 5 src/ngircd/ngircd.c | 22 src/ngircd/numeric.c | 334 ++++++ src/ngircd/numeric.h | 24 src/ngircd/parse.c | 60 - src/ngircd/parse.h | 13 src/ngircd/resolve.c | 10 src/portab/.cvsignore | 4 src/testsuite/.cvsignore | 7 src/testsuite/Makefile.am | 5 src/testsuite/getpid.sh | 2 src/testsuite/ngircd-test.conf | 4 src/tool/.cvsignore | 3 src/tool/tool.c | 22 src/tool/tool.h | 10 84 files changed, 2203 insertions(+), 1537 deletions(-) Index: .cvsignore =================================================================== RCS file: .cvsignore diff -N .cvsignore --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ .cvsignore 28 Dec 2006 13:20:07 -0000 1.1 @@ -0,0 +1,7 @@ +Makefile +Makefile.in +aclocal.m4 +autom4te.cache +config.log +config.status +configure Index: AUTHORS =================================================================== RCS file: /srv/cvs/ngircd/ngircd/AUTHORS,v retrieving revision 1.11 retrieving revision 1.13 diff -u -p -r1.11 -r1.13 --- AUTHORS 19 Mar 2005 14:24:52 -0000 1.11 +++ AUTHORS 4 Oct 2007 15:18:48 -0000 1.13 @@ -1,7 +1,7 @@ ngIRCd - Next Generation IRC Server - (c)2001-2005 Alexander Barton, + (c)2001-2007 Alexander Barton, alex@barton.de, http://www.barton.de/ ngIRCd is free software and published under the @@ -10,9 +10,16 @@ -- AUTHORS and CONTRIBUTORS -- +Note: If you have critics, patches or something else, please feel free to +post a mail to the ngIRCd mailing list: (please see + for details). Don't mail the contributors +directly, if possible! + + Main Authors ~~~~~~~~~~~~ Alexander Barton, (alex) +Florian Westphal, (fw) Contributors @@ -21,7 +28,6 @@ Goetz Hoffart, (goetz Ilja Osthoff, (ilja) Benjamin Pineau, Sean Reifschneider, -Florian Westphal, (fw) Code snippets @@ -32,4 +38,4 @@ Andrew Tridgell & Martin Pool: strl{cpy| -- -$Id: AUTHORS,v 1.11 2005/03/19 14:24:52 alex Exp $ +$Id: AUTHORS,v 1.13 2007/10/04 15:18:48 alex Exp $ Index: ChangeLog =================================================================== RCS file: /srv/cvs/ngircd/ngircd/ChangeLog,v retrieving revision 1.302.2.19 retrieving revision 1.332.2.2 diff -u -p -r1.302.2.19 -r1.332.2.2 --- ChangeLog 31 Jul 2007 19:33:51 -0000 1.302.2.19 +++ ChangeLog 2 Jan 2008 21:39:59 -0000 1.332.2.2 @@ -1,7 +1,7 @@ ngIRCd - Next Generation IRC Server - (c)2001-2007 Alexander Barton, + (c)2001-2008 Alexander Barton, alex@barton.de, http://www.barton.de/ ngIRCd is free software and published under the @@ -10,7 +10,37 @@ -- ChangeLog -- -ngIRCd 0.10.3 (2007-07-31) +ngIRCd 0.11.0-pre1 (2008-01-02) + + - Use dotted-decimal IP address if hostname is >= 64. + - Add support for /STAT u (server uptime) command. + - New [Server] configuration Option "Bind" allows to specify + the source ip adress to use when connecting to remote server. + - New configuration option "MaxNickLength" to specify the allowed maximum + length of user nick names. Note: must be unique in an IRC network! + - Enhanced the IRC+ protocol to support an enhanced "server handshake" and + enable server to recognice numeric 005 (ISUPPORT) and 376 (ENDOFMOTD). + See doc/Protocol.txt for details. + - Re-added doc/SSL.txt to distribution -- got lost somewhere!? + - Fixes the wrong logging output when nested servers are introduced + to the network as well as the wrong output of the LINKS command. + - Update Mac OS X Xcode project file for Xcode 3. + - Adjust test suite to be usable on HP/UX 11.11 :-) + - Fix code to compile using K&R C compiler and ansi2kr again. + - New config option NoDNS: Disables DNS lookups when clients connect. + - Fixed propagation of channel mode 'P' on server links. + - Numeric 317: implemented "signon time" (displayed in WHOIS result). + - Fixed code that prevented GCC 2.95 to compile ngIRCd. + - Adjust path names in manual pages according to "./configure" settings. + - Added new server configuration option "Passive" for "Server" blocks to + disable automatic outgoing connections (similar to -p option to ngircd, + but only for the specified server). (Tassilo Schweyer) + - Don't connect to a server if a connection to another server within the + same group is already in progress. + - Added support for the WALLOPS command. Usage is restricted to IRC + operators. + +ngIRCd 0.10.3 (2007-08-01) - SECURITY: Fixed a severe bug in handling JOIN commands, which could cause the server to crash. Thanks to Sebastian Vesper, . @@ -694,4 +724,4 @@ ngIRCd 0.0.1, 31.12.2001 -- -$Id: ChangeLog,v 1.302.2.19 2007/07/31 19:33:51 alex Exp $ +$Id: ChangeLog,v 1.332.2.2 2008/01/02 21:39:59 alex Exp $ Index: INSTALL =================================================================== RCS file: /srv/cvs/ngircd/ngircd/INSTALL,v retrieving revision 1.23.2.2 retrieving revision 1.26 diff -u -p -r1.23.2.2 -r1.26 --- INSTALL 3 Apr 2007 22:08:50 -0000 1.23.2.2 +++ INSTALL 8 Apr 2007 11:39:08 -0000 1.26 @@ -1,7 +1,7 @@ ngIRCd - Next Generation IRC Server - (c)2001-2006 by Alexander Barton, + (c)2001-2007 Alexander Barton, alex@barton.de, http://www.barton.de/ ngIRCd is free software and published under the @@ -247,4 +247,4 @@ number. In both cases the server exits a -- -$Id: INSTALL,v 1.23.2.2 2007/04/03 22:08:50 fw Exp $ +$Id: INSTALL,v 1.26 2007/04/08 11:39:08 alex Exp $ Index: NEWS =================================================================== RCS file: /srv/cvs/ngircd/ngircd/NEWS,v retrieving revision 1.75.2.7 retrieving revision 1.83.2.1 diff -u -p -r1.75.2.7 -r1.83.2.1 --- NEWS 8 Jun 2007 09:05:23 -0000 1.75.2.7 +++ NEWS 2 Jan 2008 21:21:55 -0000 1.83.2.1 @@ -1,7 +1,7 @@ ngIRCd - Next Generation IRC Server - (c)2001-2007 Alexander Barton, + (c)2001-2008 Alexander Barton, alex@barton.de, http://www.barton.de/ ngIRCd is free software and published under the @@ -10,6 +10,20 @@ -- NEWS -- +ngIRCd 0.11.0-pre1 (2008-01-02) + + - Add support for /STAT u (server uptime) command. + - New [Server] configuration Option "Bind" allows to specify + the source ip adress to use when connecting to remote server. + - New configuration option "MaxNickLength" to specify the allowed maximum + length of user nick names. Note: must be unique in an IRC network! + - Numeric 317: implemented "signon time" (displayed in WHOIS result). + - Added new server configuration option "Passive" for "Server" blocks to + disable automatic outgoing connections (similar to -p option to ngircd, + but only for the specified server). (Tassilo Schweyer) + - Added support for the WALLOPS command. Usage is restricted to IRC + operators. + ngIRCd 0.10.2 (2007-06-08) - Predefined channel configuration now allows specification of channel key @@ -237,4 +251,4 @@ ngIRCd 0.0.1, 31.12.2001 -- -$Id: NEWS,v 1.75.2.7 2007/06/08 09:05:23 alex Exp $ +$Id: NEWS,v 1.83.2.1 2008/01/02 21:21:55 alex Exp $ Index: README =================================================================== RCS file: /srv/cvs/ngircd/ngircd/README,v retrieving revision 1.21.2.2 retrieving revision 1.25 diff -u -p -r1.21.2.2 -r1.25 --- README 5 May 2007 20:25:20 -0000 1.21.2.2 +++ README 4 Oct 2007 15:18:48 -0000 1.25 @@ -37,7 +37,8 @@ Implemented IRC-commands are: ADMIN, AWAY, CHANINFO, CONNECT, DIE, DISCONNECT, ERROR, HELP, INVITE, ISON, JOIN, KICK, KILL, LINKS, LIST, LUSERS, MODE, MOTD, NAMES, NICK, NJOIN, NOTICE, OPER, PART, PASS, PING, PONG, PRIVMSG, QUIT, REHASH, RESTART, SERVER, SQUIT, -STATS, TIME, TOPIC, TRACE, USER, USERHOST, VERSION, WHO, WHOIS, WHOWAS. +STATS, TIME, TOPIC, TRACE, USER, USERHOST, VERSION, WALLOPS, WHO, WHOIS, +WHOWAS. III. Features (or: why use ngIRCd?) @@ -82,8 +83,9 @@ them at the following URL: There you can read about known bugs and limitations, too. If you have critics, patches or something else, please feel free to post a -mail to . +mail to the ngIRCd mailing list: (please see + for details). -- -$Id: README,v 1.21.2.2 2007/05/05 20:25:20 alex Exp $ +$Id: README,v 1.25 2007/10/04 15:18:48 alex Exp $ Index: autogen.sh =================================================================== RCS file: /srv/cvs/ngircd/ngircd/autogen.sh,v retrieving revision 1.14 retrieving revision 1.15 diff -u -p -r1.14 -r1.15 --- autogen.sh 21 Feb 2005 15:23:23 -0000 1.14 +++ autogen.sh 7 Oct 2007 13:02:15 -0000 1.15 @@ -9,7 +9,7 @@ # (at your option) any later version. # Please read the file COPYING, README and AUTHORS for more information. # -# $Id: autogen.sh,v 1.14 2005/02/21 15:23:23 alex Exp $ +# $Id: autogen.sh,v 1.15 2007/10/07 13:02:15 alex Exp $ # # @@ -124,17 +124,22 @@ if [ -z "$EXIST" ]; then fi [ "$VERBOSE" = "1" ] && echo "Using \"$EXIST\" to test for tools." -# We want to use GNU automake 1.7, if available (WANT_AUTOMAKE is used by +# We want to use GNU automake 1.9, if available (WANT_AUTOMAKE is used by # the wrapper scripts of Gentoo Linux, AUTOMAKE_VERSION is used by OpenBSD); -# same applies for GNU autoconf, we want to use version 2.59. -AUTOMAKE_VERSION=1.7 -AUTOCONF_VERSION=2.59 -export AUTOMAKE_VERSION AUTOCONF_VERSION -WANT_AUTOMAKE=1.7 -export WANT_AUTOMAKE +# same applies for GNU autoconf, we want to use version 2.59. -- But only +# set these preferences if not already set! +if [ -z "$AUTOMAKE_VERSION" -a -z "$WANT_AUTOMAKE" ]; then + AUTOMAKE_VERSION=1.9 + WANT_AUTOMAKE=1.9 +fi +if [ -z "$AUTOCONF_VERSION" -a -z "$WANT_AUTOCONF" ]; then + AUTOCONF_VERSION=2.59 + WANT_AUTOCONF=2.59 +fi +export AUTOMAKE_VERSION WANT_AUTOMAKE AUTOCONF_VERSION WANT_AUTOCONF # Try to detect the needed tools when no environment variable already -# spezifies one: +# specifies one: echo "Searching tools ..." [ -z "$ACLOCAL" ] && ACLOCAL=`Search aclocal 1` [ "$VERBOSE" = "1" ] && echo "ACLOCAL=$ACLOCAL" Index: configure.in =================================================================== RCS file: /srv/cvs/ngircd/ngircd/configure.in,v retrieving revision 1.118.2.13 retrieving revision 1.125.2.1 diff -u -p -r1.118.2.13 -r1.125.2.1 --- configure.in 31 Jul 2007 19:07:59 -0000 1.118.2.13 +++ configure.in 2 Jan 2008 21:21:55 -0000 1.125.2.1 @@ -1,6 +1,6 @@ # # ngIRCd -- The Next Generation IRC Daemon -# Copyright (c)2001-2007 Alexander Barton +# Copyright (c)2001-2005 Alexander Barton # # 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 @@ -8,13 +8,13 @@ # (at your option) any later version. # Please read the file COPYING, README and AUTHORS for more information. # -# $Id: configure.in,v 1.118.2.13 2007/07/31 19:07:59 alex Exp $ +# $Id: configure.in,v 1.125.2.1 2008/01/02 21:21:55 alex Exp $ # # -- Initialisation -- AC_PREREQ(2.50) -AC_INIT(ngircd, 0.10.3) +AC_INIT(ngircd, 0.11.0-pre1) AC_CONFIG_SRCDIR(src/ngircd/ngircd.c) AC_CANONICAL_TARGET AM_INIT_AUTOMAKE(1.6) Index: contrib/.cvsignore =================================================================== RCS file: contrib/.cvsignore diff -N contrib/.cvsignore --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ contrib/.cvsignore 28 Dec 2006 13:20:07 -0000 1.1 @@ -0,0 +1,2 @@ +Makefile +Makefile.in Index: contrib/ngircd.spec =================================================================== RCS file: /srv/cvs/ngircd/ngircd/contrib/ngircd.spec,v retrieving revision 1.4.6.6 retrieving revision 1.4.8.1 diff -u -p -r1.4.6.6 -r1.4.8.1 --- contrib/ngircd.spec 31 Jul 2007 19:08:00 -0000 1.4.6.6 +++ contrib/ngircd.spec 2 Jan 2008 21:21:56 -0000 1.4.8.1 @@ -1,5 +1,5 @@ %define name ngircd -%define version 0.10.3 +%define version 0.11.0-pre1 %define release 1 %define prefix %{_prefix} Index: contrib/Debian/.cvsignore =================================================================== RCS file: contrib/Debian/.cvsignore diff -N contrib/Debian/.cvsignore --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ contrib/Debian/.cvsignore 28 Dec 2006 13:20:08 -0000 1.1 @@ -0,0 +1,2 @@ +Makefile +Makefile.in Index: contrib/Debian/changelog =================================================================== RCS file: /srv/cvs/ngircd/ngircd/contrib/Debian/changelog,v retrieving revision 1.12.2.9 retrieving revision 1.14.2.1 diff -u -p -r1.12.2.9 -r1.14.2.1 --- contrib/Debian/changelog 31 Jul 2007 19:08:01 -0000 1.12.2.9 +++ contrib/Debian/changelog 2 Jan 2008 21:21:57 -0000 1.14.2.1 @@ -1,20 +1,8 @@ -ngircd (0.10.3-0ab1) unstable; urgency=high +ngircd (0.11.0-0ab0-pre1) unstable; urgency=low - * New "upstream" release: 0.10.3 - fixing a security bug. - - -- Alexander Barton Tue, 31 Jul 2007 21:02:52 +0200 - -ngircd (0.10.2-0ab1) unstable; urgency=low - - * New "upstream" release: 0.10.2 - - -- Alexander Barton Fri, 8 Jun 2007 10:49:36 +0200 - -ngircd (0.10.1-0ab1) unstable; urgency=low - - * New "upstream" release: 0.10.1 + * Prerelease of upcoming new "upstream release". - -- Alexander Barton Sun, 17 Dec 2006 14:52:06 +0100 + -- Alexander Barton Wed, 2 Jan 2008 21:33:15 +0100 ngircd (0.10.0-0ab1) unstable; urgency=low Index: contrib/Debian/ngircd.init =================================================================== RCS file: /srv/cvs/ngircd/ngircd/contrib/Debian/ngircd.init,v retrieving revision 1.6.2.1 retrieving revision 1.7 diff -u -p -r1.6.2.1 -r1.7 --- contrib/Debian/ngircd.init 3 Apr 2007 22:08:50 -0000 1.6.2.1 +++ contrib/Debian/ngircd.init 26 Dec 2006 14:43:46 -0000 1.7 @@ -2,7 +2,7 @@ # # ngIRCd start and stop script for Debian-based systems # -# $Id: ngircd.init,v 1.6.2.1 2007/04/03 22:08:50 fw Exp $ +# $Id: ngircd.init,v 1.7 2006/12/26 14:43:46 alex Exp $ # ### BEGIN INIT INFO Index: contrib/Debian/ngircd.postinst =================================================================== RCS file: /srv/cvs/ngircd/ngircd/contrib/Debian/ngircd.postinst,v retrieving revision 1.1 retrieving revision 1.2 diff -u -p -r1.1 -r1.2 --- contrib/Debian/ngircd.postinst 31 Dec 2003 17:20:11 -0000 1.1 +++ contrib/Debian/ngircd.postinst 26 Dec 2006 14:44:40 -0000 1.2 @@ -1,13 +1,20 @@ #!/bin/sh # # Debian post-installation script -# $Id: ngircd.postinst,v 1.1 2003/12/31 17:20:11 alex Exp $ +# $Id: ngircd.postinst,v 1.2 2006/12/26 14:44:40 alex Exp $ # -if [ -f /etc/ngircd/ngircd.conf ]; then - # make sure that configuration file is not world readable - chmod o= /etc/ngircd/ngircd.conf -fi +set -e + +case "$1" in + configure) + if [ -f /etc/ngircd/ngircd.conf ]; then + # make sure that the configuration file is not + # world-readable, it contains passwords! + chmod o= /etc/ngircd/ngircd.conf + fi + ;; +esac #DEBHELPER# Index: contrib/MacOSX/.cvsignore =================================================================== RCS file: contrib/MacOSX/.cvsignore diff -N contrib/MacOSX/.cvsignore --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ contrib/MacOSX/.cvsignore 28 Dec 2006 13:20:08 -0000 1.1 @@ -0,0 +1,2 @@ +Makefile +Makefile.in Index: contrib/MacOSX/config.h =================================================================== RCS file: contrib/MacOSX/config.h diff -N contrib/MacOSX/config.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ contrib/MacOSX/config.h 19 Nov 2007 22:11:36 -0000 1.1 @@ -0,0 +1,92 @@ +/* + * ngIRCd -- The Next Generation IRC Daemon + * Copyright (c)2001-2007 Alexander Barton (alex@barton.de). + * + * 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. + * Please read the file COPYING, README and AUTHORS for more information. + * + * $Id: config.h,v 1.1 2007/11/19 22:11:36 alex Exp $ + * + * Static configuration file for Mac OS X Xcode project + */ + +#define PACKAGE_NAME "ngircd" +#define VERSION "??" +#define SYSCONFDIR "/etc/ngircd" + +/* -- Build options -- */ + +/* Define if debug-mode should be enabled */ +#define DEBUG 1 + +/* Define if the server should do IDENT requests */ +/*#define IDENTAUTH 1*/ + +/* Define if IRC+ protocol should be used */ +#define IRCPLUS 1 + +/* Define if IRC sniffer should be enabled */ +/*#define SNIFFER 1*/ + +/* Define if syslog should be used for logging */ +#define SYSLOG 1 + +/* Define if TCP wrappers should be used */ +/*#define TCPWRAP 1*/ + +/* Define if support for Zeroconf should be included */ +/*#define ZEROCONF 1*/ + +/* Define if zlib compression should be enabled */ +#define ZLIB 1 + +/* -- Supported features -- */ + +/* Define if SSP C support is enabled. */ +#define ENABLE_SSP_CC 1 + +/* Define to 1 if the C compiler supports function prototypes. */ +#define PROTOTYPES 1 +/* Define like PROTOTYPES; this can be used by system headers. */ +#define __PROTOTYPES 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 +/* Define to 1 if you have the header file. */ +#define HAVE_STDDEF_H 1 +/* Define to 1 if you have the header file. */ +#define HAVE_STDBOOL_H 1 +/* Define to 1 if you have the header file. */ +#define HAVE_ARPA_INET_H 1 + +/* Define to 1 if you have the `kqueue' function. */ +#define HAVE_KQUEUE 1 +/* Define to 1 if you have the `inet_ntoa' function. */ +#define HAVE_INET_NTOA 1 +/* Define to 1 if you have the `snprintf' function. */ +#define HAVE_SNPRINTF 1 +/* Define to 1 if you have the `strlcat' function. */ +#define HAVE_STRLCAT 1 +/* Define to 1 if you have the `strlcpy' function. */ +#define HAVE_STRLCPY 1 +/* Define to 1 if you have the `strdup' function. */ +#define HAVE_STRDUP 1 +/* Define to 1 if you have the `vsnprintf' function. */ +#define HAVE_VSNPRINTF 1 + +/* Define if socklen_t exists */ +#define HAVE_socklen_t 1 + +#ifdef ZEROCONF +/* Define to 1 if you have the header file. */ +#define HAVE_DNSSERVICEDISCOVERY_DNSSERVICEDISCOVERY_H 1 +/* Define to 1 if you have the `DNSServiceRegistrationCreate' function. */ +#define HAVE_DNSSERVICEREGISTRATIONCREATE 1 +#endif + +/* -eof- */ \ No newline at end of file Index: contrib/MacOSX/cvs-version.h =================================================================== RCS file: contrib/MacOSX/cvs-version.h diff -N contrib/MacOSX/cvs-version.h Index: contrib/MacOSX/ngIRCd.xcodeproj/project.pbxproj =================================================================== RCS file: /srv/cvs/ngircd/ngircd/contrib/MacOSX/ngIRCd.xcodeproj/project.pbxproj,v retrieving revision 1.2 retrieving revision 1.7 diff -u -p -r1.2 -r1.7 --- contrib/MacOSX/ngIRCd.xcodeproj/project.pbxproj 3 Sep 2005 15:13:14 -0000 1.2 +++ contrib/MacOSX/ngIRCd.xcodeproj/project.pbxproj 21 Nov 2007 12:16:34 -0000 1.7 @@ -3,97 +3,40 @@ archiveVersion = 1; classes = { }; - objectVersion = 42; + objectVersion = 44; objects = { /* Begin PBXBuildFile section */ - FA2329EE08C9E7A30093207B /* array.c in Sources */ = {isa = PBXBuildFile; fileRef = FA2329EC08C9E7A30093207B /* array.c */; }; - FA2329EF08C9E7A30093207B /* array.h in Headers */ = {isa = PBXBuildFile; fileRef = FA2329ED08C9E7A30093207B /* array.h */; }; - FA2329F208C9E7C40093207B /* io.c in Sources */ = {isa = PBXBuildFile; fileRef = FA2329F008C9E7C40093207B /* io.c */; }; - FA2329F308C9E7C40093207B /* io.h in Headers */ = {isa = PBXBuildFile; fileRef = FA2329F108C9E7C40093207B /* io.h */; }; - FA2329F508C9E8070093207B /* strdup.c in Sources */ = {isa = PBXBuildFile; fileRef = FA2329F408C9E8070093207B /* strdup.c */; }; - FA2329F708C9E81A0093207B /* portab.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B5705F14AB40081A16E /* portab.h */; }; - FA232A7D08C9F0480093207B /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B8F05F14C6C0081A16E /* config.h */; }; - FA83332B0627391D00A909F0 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FA83332A0627391D00A909F0 /* libz.dylib */; }; - FADE2B2305F14A960081A16E /* irc-server.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2AF205F14A960081A16E /* irc-server.h */; }; - FADE2B2405F14A960081A16E /* irc-op.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2AF305F14A960081A16E /* irc-op.c */; }; - FADE2B2505F14A960081A16E /* irc-login.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2AF405F14A960081A16E /* irc-login.c */; }; - FADE2B2605F14A960081A16E /* conn-zip.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2AF505F14A960081A16E /* conn-zip.h */; }; - FADE2B2705F14A960081A16E /* match.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2AF605F14A960081A16E /* match.h */; }; - FADE2B2805F14A960081A16E /* irc-oper.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2AF705F14A960081A16E /* irc-oper.c */; }; - FADE2B2905F14A960081A16E /* irc-mode.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2AF805F14A960081A16E /* irc-mode.c */; }; - FADE2B2A05F14A960081A16E /* conn.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2AF905F14A960081A16E /* conn.h */; }; - FADE2B2B05F14A960081A16E /* messages.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2AFA05F14A960081A16E /* messages.h */; }; - FADE2B2C05F14A960081A16E /* irc.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2AFB05F14A960081A16E /* irc.h */; }; - FADE2B2D05F14A960081A16E /* conf.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2AFC05F14A960081A16E /* conf.c */; }; - FADE2B2E05F14A960081A16E /* irc.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2AFD05F14A960081A16E /* irc.c */; }; - FADE2B2F05F14A960081A16E /* hash.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2AFE05F14A960081A16E /* hash.h */; }; - FADE2B3005F14A960081A16E /* parse.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2AFF05F14A960081A16E /* parse.c */; }; - FADE2B3105F14A960081A16E /* resolve.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B0005F14A960081A16E /* resolve.c */; }; - FADE2B3205F14A960081A16E /* channel.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B0105F14A960081A16E /* channel.c */; }; - FADE2B3305F14A960081A16E /* defines.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B0205F14A960081A16E /* defines.h */; }; - FADE2B3405F14A960081A16E /* conf.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B0305F14A960081A16E /* conf.h */; }; - FADE2B3505F14A960081A16E /* rendezvous.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B0405F14A960081A16E /* rendezvous.c */; }; - FADE2B3605F14A960081A16E /* lists.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B0505F14A960081A16E /* lists.h */; }; - FADE2B3705F14A960081A16E /* ngircd.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B0605F14A960081A16E /* ngircd.h */; }; - FADE2B3805F14A960081A16E /* irc-channel.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B0705F14A960081A16E /* irc-channel.h */; }; - FADE2B3905F14A960081A16E /* channel.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B0805F14A960081A16E /* channel.h */; }; - FADE2B3A05F14A960081A16E /* irc-server.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B0905F14A960081A16E /* irc-server.c */; }; - FADE2B3B05F14A960081A16E /* log.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B0A05F14A960081A16E /* log.h */; }; - FADE2B3C05F14A960081A16E /* irc-mode.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B0B05F14A960081A16E /* irc-mode.h */; }; - FADE2B3D05F14A960081A16E /* irc-info.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B0C05F14A960081A16E /* irc-info.h */; }; - FADE2B3E05F14A960081A16E /* conn-zip.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B0D05F14A960081A16E /* conn-zip.c */; }; - FADE2B3F05F14A960081A16E /* irc-write.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B0E05F14A960081A16E /* irc-write.c */; }; - FADE2B4005F14A960081A16E /* match.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B0F05F14A960081A16E /* match.c */; }; - FADE2B4105F14A960081A16E /* irc-op.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B1005F14A960081A16E /* irc-op.h */; }; - FADE2B4205F14A960081A16E /* irc-login.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B1105F14A960081A16E /* irc-login.h */; }; - FADE2B4305F14A960081A16E /* conn.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B1205F14A960081A16E /* conn.c */; }; - FADE2B4405F14A960081A16E /* client.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B1305F14A960081A16E /* client.h */; }; - FADE2B4505F14A960081A16E /* irc-write.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B1405F14A960081A16E /* irc-write.h */; }; - FADE2B4605F14A960081A16E /* irc-oper.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B1505F14A960081A16E /* irc-oper.h */; }; - FADE2B4705F14A960081A16E /* rendezvous.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B1605F14A960081A16E /* rendezvous.h */; }; - FADE2B4805F14A960081A16E /* ngircd.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B1705F14A960081A16E /* ngircd.c */; }; - FADE2B4905F14A960081A16E /* irc-channel.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B1805F14A960081A16E /* irc-channel.c */; }; - FADE2B4A05F14A960081A16E /* parse.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B1905F14A960081A16E /* parse.h */; }; - FADE2B4B05F14A960081A16E /* lists.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B1A05F14A960081A16E /* lists.c */; }; - FADE2B4C05F14A960081A16E /* resolve.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B1B05F14A960081A16E /* resolve.h */; }; - FADE2B4D05F14A960081A16E /* hash.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B1C05F14A960081A16E /* hash.c */; }; - FADE2B4E05F14A960081A16E /* irc-info.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B1D05F14A960081A16E /* irc-info.c */; }; - FADE2B4F05F14A960081A16E /* conn-func.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B1E05F14A960081A16E /* conn-func.c */; }; - FADE2B5005F14A960081A16E /* log.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B1F05F14A960081A16E /* log.c */; }; - FADE2B5105F14A960081A16E /* client.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B2005F14A960081A16E /* client.c */; }; - FADE2B5205F14A960081A16E /* conn-func.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B2105F14A960081A16E /* conn-func.h */; }; - FADE2BBD05F14DEF0081A16E /* exp.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B5805F14AB40081A16E /* exp.h */; }; - FADE2BBF05F14DEF0081A16E /* imp.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B5405F14AB40081A16E /* imp.h */; }; - FADE2BC105F14DF10081A16E /* portab.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B5705F14AB40081A16E /* portab.h */; }; - FADE2BC305F14DF40081A16E /* strlcpy.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B5905F14AB40081A16E /* strlcpy.c */; }; - FADE2BC505F14DF50081A16E /* vsnprintf.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B5C05F14AB40081A16E /* vsnprintf.c */; }; - FADE2CB205F151490081A16E /* exp.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B5805F14AB40081A16E /* exp.h */; }; - FADE2CB305F151490081A16E /* imp.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B5405F14AB40081A16E /* imp.h */; }; - FADE2CB405F151490081A16E /* portabtest.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B5A05F14AB40081A16E /* portabtest.c */; }; - FADE2CC005F152770081A16E /* tool.c in Sources */ = {isa = PBXBuildFile; fileRef = FADE2B7805F14B530081A16E /* tool.c */; }; - FADE2CC205F152780081A16E /* tool.h in Headers */ = {isa = PBXBuildFile; fileRef = FADE2B7905F14B530081A16E /* tool.h */; }; + FA322D350CEF74B1001761B3 /* array.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322CD90CEF74B1001761B3 /* array.c */; }; + FA322D360CEF74B1001761B3 /* channel.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322CDB0CEF74B1001761B3 /* channel.c */; }; + FA322D370CEF74B1001761B3 /* client.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322CDD0CEF74B1001761B3 /* client.c */; }; + FA322D380CEF74B1001761B3 /* conf.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322CDF0CEF74B1001761B3 /* conf.c */; }; + FA322D390CEF74B1001761B3 /* conn-func.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322CE10CEF74B1001761B3 /* conn-func.c */; }; + FA322D3A0CEF74B1001761B3 /* conn-zip.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322CE30CEF74B1001761B3 /* conn-zip.c */; }; + FA322D3B0CEF74B1001761B3 /* conn.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322CE50CEF74B1001761B3 /* conn.c */; }; + FA322D3C0CEF74B1001761B3 /* hash.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322CE80CEF74B1001761B3 /* hash.c */; }; + FA322D3D0CEF74B1001761B3 /* io.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322CEA0CEF74B1001761B3 /* io.c */; }; + FA322D3E0CEF74B1001761B3 /* irc-channel.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322CEC0CEF74B1001761B3 /* irc-channel.c */; }; + FA322D3F0CEF74B1001761B3 /* irc-info.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322CEE0CEF74B1001761B3 /* irc-info.c */; }; + FA322D400CEF74B1001761B3 /* irc-login.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322CF00CEF74B1001761B3 /* irc-login.c */; }; + FA322D410CEF74B1001761B3 /* irc-mode.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322CF20CEF74B1001761B3 /* irc-mode.c */; }; + FA322D420CEF74B1001761B3 /* irc-op.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322CF40CEF74B1001761B3 /* irc-op.c */; }; + FA322D430CEF74B1001761B3 /* irc-oper.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322CF60CEF74B1001761B3 /* irc-oper.c */; }; + FA322D440CEF74B1001761B3 /* irc-server.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322CF80CEF74B1001761B3 /* irc-server.c */; }; + FA322D450CEF74B1001761B3 /* irc-write.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322CFA0CEF74B1001761B3 /* irc-write.c */; }; + FA322D460CEF74B1001761B3 /* irc.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322CFC0CEF74B1001761B3 /* irc.c */; }; + FA322D470CEF74B1001761B3 /* lists.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322CFE0CEF74B1001761B3 /* lists.c */; }; + FA322D480CEF74B1001761B3 /* log.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322D000CEF74B1001761B3 /* log.c */; }; + FA322D490CEF74B1001761B3 /* match.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322D030CEF74B1001761B3 /* match.c */; }; + FA322D4A0CEF74B1001761B3 /* ngircd.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322D060CEF74B1001761B3 /* ngircd.c */; }; + FA322D4B0CEF74B1001761B3 /* parse.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322D080CEF74B1001761B3 /* parse.c */; }; + FA322D4C0CEF74B1001761B3 /* rendezvous.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322D0A0CEF74B1001761B3 /* rendezvous.c */; }; + FA322D4D0CEF74B1001761B3 /* resolve.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322D0C0CEF74B1001761B3 /* resolve.c */; }; + FA322DBE0CEF7766001761B3 /* tool.c in Sources */ = {isa = PBXBuildFile; fileRef = FA322D330CEF74B1001761B3 /* tool.c */; }; + FA322DC10CEF77CB001761B3 /* libz.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = FA322DC00CEF77CB001761B3 /* libz.dylib */; }; + FAE5CC2E0CF2308A007D69B6 /* numeric.c in Sources */ = {isa = PBXBuildFile; fileRef = FAE5CC2D0CF2308A007D69B6 /* numeric.c */; }; /* End PBXBuildFile section */ -/* Begin PBXBuildStyle section */ - 014CEA520018CE5811CA2923 /* Development */ = { - isa = PBXBuildStyle; - buildSettings = { - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - ZERO_LINK = YES; - }; - name = Development; - }; - FA2002770807EE21005A2F4C /* Deployment */ = { - isa = PBXBuildStyle; - buildSettings = { - }; - name = Deployment; - }; -/* End PBXBuildStyle section */ - /* Begin PBXCopyFilesBuildPhase section */ 8DD76FAF0486AB0100D96B5E /* CopyFiles */ = { isa = PBXCopyFilesBuildPhase; @@ -104,152 +47,160 @@ ); runOnlyForDeploymentPostprocessing = 1; }; - FADE2C9805F1511B0081A16E /* CopyFiles */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 8; - dstPath = /usr/share/man/man1/; - dstSubfolderSpec = 0; - files = ( - ); - runOnlyForDeploymentPostprocessing = 1; - }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - FA2329E908C9E74D0093207B /* config.guess */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = config.guess; path = ../../config.guess; sourceTree = SOURCE_ROOT; }; - FA2329EA08C9E74D0093207B /* config.sub */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = config.sub; path = ../../config.sub; sourceTree = SOURCE_ROOT; }; - FA2329EC08C9E7A30093207B /* array.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = array.c; path = ../../src/ngircd/array.c; sourceTree = SOURCE_ROOT; }; - FA2329ED08C9E7A30093207B /* array.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = array.h; path = ../../src/ngircd/array.h; sourceTree = SOURCE_ROOT; }; - FA2329F008C9E7C40093207B /* io.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = io.c; path = ../../src/ngircd/io.c; sourceTree = SOURCE_ROOT; }; - FA2329F108C9E7C40093207B /* io.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = io.h; path = ../../src/ngircd/io.h; sourceTree = SOURCE_ROOT; }; - FA2329F408C9E8070093207B /* strdup.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = strdup.c; path = ../../src/portab/strdup.c; sourceTree = SOURCE_ROOT; }; - FA2329FA08C9E8450093207B /* functions.inc */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = functions.inc; path = ../../src/testsuite/functions.inc; sourceTree = SOURCE_ROOT; }; - FA2329FB08C9E85D0093207B /* README */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = README; path = ../../src/testsuite/README; sourceTree = SOURCE_ROOT; }; - FA2329FC08C9E8700093207B /* test-loop.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = "test-loop.sh"; path = "../../src/testsuite/test-loop.sh"; sourceTree = SOURCE_ROOT; }; - FA2329FD08C9E87B0093207B /* wait-tests.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = "wait-tests.sh"; path = "../../src/testsuite/wait-tests.sh"; sourceTree = SOURCE_ROOT; }; - FA232A0108C9E8BF0093207B /* Doxyfile */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Doxyfile; path = ../../doc/src/Doxyfile; sourceTree = SOURCE_ROOT; }; - FA232A0208C9E8BF0093207B /* footer.inc.html */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.html; name = footer.inc.html; path = ../../doc/src/footer.inc.html; sourceTree = SOURCE_ROOT; }; - FA232A0308C9E8BF0093207B /* header.inc.html */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.html; name = header.inc.html; path = ../../doc/src/header.inc.html; sourceTree = SOURCE_ROOT; }; - FA232A0408C9E8BF0093207B /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Makefile.am; path = ../../doc/src/Makefile.am; sourceTree = SOURCE_ROOT; }; - FA232A0508C9E8BF0093207B /* ngircd-doc.css */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = "ngircd-doc.css"; path = "../../doc/src/ngircd-doc.css"; sourceTree = SOURCE_ROOT; }; - FA232A0708C9E8EC0093207B /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Makefile.am; path = ../Makefile.am; sourceTree = SOURCE_ROOT; }; - FA232A0808C9E8EC0093207B /* ngircd.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = ngircd.sh; path = ../ngircd.sh; sourceTree = SOURCE_ROOT; }; - FA232A0908C9E8EC0093207B /* ngircd.spec */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = ngircd.spec; path = ../ngircd.spec; sourceTree = SOURCE_ROOT; }; - FA232A0A08C9E8EC0093207B /* README */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = README; path = ../README; sourceTree = SOURCE_ROOT; }; - FA232A0B08C9E8EC0093207B /* systrace.policy */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = systrace.policy; path = ../systrace.policy; sourceTree = SOURCE_ROOT; }; - FA83332A0627391D00A909F0 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; sourceTree = ""; }; - FA8B5EFD08C9E4C900B781D4 /* SSL.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = SSL.txt; path = ../../doc/SSL.txt; sourceTree = SOURCE_ROOT; }; - FA8B5EFE08C9E4C900B781D4 /* Zeroconf.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Zeroconf.txt; path = ../../doc/Zeroconf.txt; sourceTree = SOURCE_ROOT; }; - FAC0DF4A05F25A150024C8CE /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = SOURCE_ROOT; }; - FADE2AA705F1499A0081A16E /* autogen.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = autogen.sh; path = ../../autogen.sh; sourceTree = SOURCE_ROOT; }; - FADE2AA805F1499A0081A16E /* COPYING */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = COPYING; path = ../../COPYING; sourceTree = SOURCE_ROOT; }; - FADE2AA905F1499A0081A16E /* NEWS */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = NEWS; path = ../../NEWS; sourceTree = SOURCE_ROOT; }; - FADE2AAA05F1499A0081A16E /* README */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = README; path = ../../README; sourceTree = SOURCE_ROOT; }; - FADE2AAB05F1499A0081A16E /* configure.in */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = configure.in; path = ../../configure.in; sourceTree = SOURCE_ROOT; }; - FADE2AAC05F1499A0081A16E /* ChangeLog */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = ChangeLog; path = ../../ChangeLog; sourceTree = SOURCE_ROOT; }; - FADE2AAD05F1499A0081A16E /* INSTALL */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = INSTALL; path = ../../INSTALL; sourceTree = SOURCE_ROOT; }; - FADE2AAE05F1499A0081A16E /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = AUTHORS; path = ../../AUTHORS; sourceTree = SOURCE_ROOT; }; - FADE2AB705F149C50081A16E /* README-BeOS.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = "README-BeOS.txt"; path = "../../doc/README-BeOS.txt"; sourceTree = SOURCE_ROOT; }; - FADE2AB805F149C50081A16E /* FAQ.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = FAQ.txt; path = ../../doc/FAQ.txt; sourceTree = SOURCE_ROOT; }; - FADE2AB905F149C50081A16E /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Makefile.am; path = ../../doc/Makefile.am; sourceTree = SOURCE_ROOT; }; - FADE2ABA05F149C50081A16E /* README-AUX.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = "README-AUX.txt"; path = "../../doc/README-AUX.txt"; sourceTree = SOURCE_ROOT; }; - FADE2ABB05F149C50081A16E /* sample-ngircd.conf */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = "sample-ngircd.conf"; path = "../../doc/sample-ngircd.conf"; sourceTree = SOURCE_ROOT; }; - FADE2ABC05F149C50081A16E /* RFC.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = RFC.txt; path = ../../doc/RFC.txt; sourceTree = SOURCE_ROOT; }; - FADE2ABD05F149C50081A16E /* Protocol.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Protocol.txt; path = ../../doc/Protocol.txt; sourceTree = SOURCE_ROOT; }; - FADE2ABE05F149C50081A16E /* CVS.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = CVS.txt; path = ../../doc/CVS.txt; sourceTree = SOURCE_ROOT; }; - FADE2ABF05F149C50081A16E /* Platforms.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Platforms.txt; path = ../../doc/Platforms.txt; sourceTree = SOURCE_ROOT; }; - FADE2AC905F149D70081A16E /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Makefile.am; path = ../../Makefile.am; sourceTree = SOURCE_ROOT; }; - FADE2ACB05F149EA0081A16E /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Makefile.am; path = ../../man/Makefile.am; sourceTree = SOURCE_ROOT; }; - FADE2ACC05F149EA0081A16E /* ngircd.conf.5 */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = ngircd.conf.5; path = ../../man/ngircd.conf.5; sourceTree = SOURCE_ROOT; }; - FADE2ACD05F149EA0081A16E /* ngircd.8 */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = ngircd.8; path = ../../man/ngircd.8; sourceTree = SOURCE_ROOT; }; - FADE2AD305F14A0B0081A16E /* copyright */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = copyright; path = ../Debian/copyright; sourceTree = SOURCE_ROOT; }; - FADE2AD405F14A0B0081A16E /* rules */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = rules; path = ../Debian/rules; sourceTree = SOURCE_ROOT; }; - FADE2AD505F14A0B0081A16E /* ngircd.postinst */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = ngircd.postinst; path = ../Debian/ngircd.postinst; sourceTree = SOURCE_ROOT; }; - FADE2AD605F14A0B0081A16E /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Makefile.am; path = ../Debian/Makefile.am; sourceTree = SOURCE_ROOT; }; - FADE2AD705F14A0B0081A16E /* control */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = control; path = ../Debian/control; sourceTree = SOURCE_ROOT; }; - FADE2AD805F14A0B0081A16E /* ngircd.init */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = ngircd.init; path = ../Debian/ngircd.init; sourceTree = SOURCE_ROOT; }; - FADE2AD905F14A0B0081A16E /* compat */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = compat; path = ../Debian/compat; sourceTree = SOURCE_ROOT; }; - FADE2ADA05F14A0B0081A16E /* ngircd.default */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = ngircd.default; path = ../Debian/ngircd.default; sourceTree = SOURCE_ROOT; }; - FADE2ADB05F14A0B0081A16E /* changelog */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = changelog; path = ../Debian/changelog; sourceTree = SOURCE_ROOT; }; - FADE2AF105F14A960081A16E /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Makefile.am; path = ../../src/ngircd/Makefile.am; sourceTree = SOURCE_ROOT; }; - FADE2AF205F14A960081A16E /* irc-server.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "irc-server.h"; path = "../../src/ngircd/irc-server.h"; sourceTree = SOURCE_ROOT; }; - FADE2AF305F14A960081A16E /* irc-op.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "irc-op.c"; path = "../../src/ngircd/irc-op.c"; sourceTree = SOURCE_ROOT; }; - FADE2AF405F14A960081A16E /* irc-login.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "irc-login.c"; path = "../../src/ngircd/irc-login.c"; sourceTree = SOURCE_ROOT; }; - FADE2AF505F14A960081A16E /* conn-zip.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "conn-zip.h"; path = "../../src/ngircd/conn-zip.h"; sourceTree = SOURCE_ROOT; }; - FADE2AF605F14A960081A16E /* match.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = match.h; path = ../../src/ngircd/match.h; sourceTree = SOURCE_ROOT; }; - FADE2AF705F14A960081A16E /* irc-oper.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "irc-oper.c"; path = "../../src/ngircd/irc-oper.c"; sourceTree = SOURCE_ROOT; }; - FADE2AF805F14A960081A16E /* irc-mode.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "irc-mode.c"; path = "../../src/ngircd/irc-mode.c"; sourceTree = SOURCE_ROOT; }; - FADE2AF905F14A960081A16E /* conn.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = conn.h; path = ../../src/ngircd/conn.h; sourceTree = SOURCE_ROOT; }; - FADE2AFA05F14A960081A16E /* messages.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = messages.h; path = ../../src/ngircd/messages.h; sourceTree = SOURCE_ROOT; }; - FADE2AFB05F14A960081A16E /* irc.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = irc.h; path = ../../src/ngircd/irc.h; sourceTree = SOURCE_ROOT; }; - FADE2AFC05F14A960081A16E /* conf.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = conf.c; path = ../../src/ngircd/conf.c; sourceTree = SOURCE_ROOT; }; - FADE2AFD05F14A960081A16E /* irc.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = irc.c; path = ../../src/ngircd/irc.c; sourceTree = SOURCE_ROOT; }; - FADE2AFE05F14A960081A16E /* hash.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = hash.h; path = ../../src/ngircd/hash.h; sourceTree = SOURCE_ROOT; }; - FADE2AFF05F14A960081A16E /* parse.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = parse.c; path = ../../src/ngircd/parse.c; sourceTree = SOURCE_ROOT; }; - FADE2B0005F14A960081A16E /* resolve.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = resolve.c; path = ../../src/ngircd/resolve.c; sourceTree = SOURCE_ROOT; }; - FADE2B0105F14A960081A16E /* channel.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = channel.c; path = ../../src/ngircd/channel.c; sourceTree = SOURCE_ROOT; }; - FADE2B0205F14A960081A16E /* defines.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = defines.h; path = ../../src/ngircd/defines.h; sourceTree = SOURCE_ROOT; }; - FADE2B0305F14A960081A16E /* conf.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = conf.h; path = ../../src/ngircd/conf.h; sourceTree = SOURCE_ROOT; }; - FADE2B0405F14A960081A16E /* rendezvous.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = rendezvous.c; path = ../../src/ngircd/rendezvous.c; sourceTree = SOURCE_ROOT; }; - FADE2B0505F14A960081A16E /* lists.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = lists.h; path = ../../src/ngircd/lists.h; sourceTree = SOURCE_ROOT; }; - FADE2B0605F14A960081A16E /* ngircd.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = ngircd.h; path = ../../src/ngircd/ngircd.h; sourceTree = SOURCE_ROOT; }; - FADE2B0705F14A960081A16E /* irc-channel.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "irc-channel.h"; path = "../../src/ngircd/irc-channel.h"; sourceTree = SOURCE_ROOT; }; - FADE2B0805F14A960081A16E /* channel.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = channel.h; path = ../../src/ngircd/channel.h; sourceTree = SOURCE_ROOT; }; - FADE2B0905F14A960081A16E /* irc-server.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "irc-server.c"; path = "../../src/ngircd/irc-server.c"; sourceTree = SOURCE_ROOT; }; - FADE2B0A05F14A960081A16E /* log.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = log.h; path = ../../src/ngircd/log.h; sourceTree = SOURCE_ROOT; }; - FADE2B0B05F14A960081A16E /* irc-mode.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "irc-mode.h"; path = "../../src/ngircd/irc-mode.h"; sourceTree = SOURCE_ROOT; }; - FADE2B0C05F14A960081A16E /* irc-info.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "irc-info.h"; path = "../../src/ngircd/irc-info.h"; sourceTree = SOURCE_ROOT; }; - FADE2B0D05F14A960081A16E /* conn-zip.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "conn-zip.c"; path = "../../src/ngircd/conn-zip.c"; sourceTree = SOURCE_ROOT; }; - FADE2B0E05F14A960081A16E /* irc-write.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "irc-write.c"; path = "../../src/ngircd/irc-write.c"; sourceTree = SOURCE_ROOT; }; - FADE2B0F05F14A960081A16E /* match.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = match.c; path = ../../src/ngircd/match.c; sourceTree = SOURCE_ROOT; }; - FADE2B1005F14A960081A16E /* irc-op.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "irc-op.h"; path = "../../src/ngircd/irc-op.h"; sourceTree = SOURCE_ROOT; }; - FADE2B1105F14A960081A16E /* irc-login.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "irc-login.h"; path = "../../src/ngircd/irc-login.h"; sourceTree = SOURCE_ROOT; }; - FADE2B1205F14A960081A16E /* conn.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = conn.c; path = ../../src/ngircd/conn.c; sourceTree = SOURCE_ROOT; }; - FADE2B1305F14A960081A16E /* client.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = client.h; path = ../../src/ngircd/client.h; sourceTree = SOURCE_ROOT; }; - FADE2B1405F14A960081A16E /* irc-write.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "irc-write.h"; path = "../../src/ngircd/irc-write.h"; sourceTree = SOURCE_ROOT; }; - FADE2B1505F14A960081A16E /* irc-oper.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "irc-oper.h"; path = "../../src/ngircd/irc-oper.h"; sourceTree = SOURCE_ROOT; }; - FADE2B1605F14A960081A16E /* rendezvous.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = rendezvous.h; path = ../../src/ngircd/rendezvous.h; sourceTree = SOURCE_ROOT; }; - FADE2B1705F14A960081A16E /* ngircd.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = ngircd.c; path = ../../src/ngircd/ngircd.c; sourceTree = SOURCE_ROOT; }; - FADE2B1805F14A960081A16E /* irc-channel.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "irc-channel.c"; path = "../../src/ngircd/irc-channel.c"; sourceTree = SOURCE_ROOT; }; - FADE2B1905F14A960081A16E /* parse.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = parse.h; path = ../../src/ngircd/parse.h; sourceTree = SOURCE_ROOT; }; - FADE2B1A05F14A960081A16E /* lists.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = lists.c; path = ../../src/ngircd/lists.c; sourceTree = SOURCE_ROOT; }; - FADE2B1B05F14A960081A16E /* resolve.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = resolve.h; path = ../../src/ngircd/resolve.h; sourceTree = SOURCE_ROOT; }; - FADE2B1C05F14A960081A16E /* hash.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = hash.c; path = ../../src/ngircd/hash.c; sourceTree = SOURCE_ROOT; }; - FADE2B1D05F14A960081A16E /* irc-info.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "irc-info.c"; path = "../../src/ngircd/irc-info.c"; sourceTree = SOURCE_ROOT; }; - FADE2B1E05F14A960081A16E /* conn-func.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = "conn-func.c"; path = "../../src/ngircd/conn-func.c"; sourceTree = SOURCE_ROOT; }; - FADE2B1F05F14A960081A16E /* log.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = log.c; path = ../../src/ngircd/log.c; sourceTree = SOURCE_ROOT; }; - FADE2B2005F14A960081A16E /* client.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = client.c; path = ../../src/ngircd/client.c; sourceTree = SOURCE_ROOT; }; - FADE2B2105F14A960081A16E /* conn-func.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = "conn-func.h"; path = "../../src/ngircd/conn-func.h"; sourceTree = SOURCE_ROOT; }; - FADE2B5305F14AB40081A16E /* splint.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = splint.h; path = ../../src/portab/splint.h; sourceTree = SOURCE_ROOT; }; - FADE2B5405F14AB40081A16E /* imp.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = imp.h; path = ../../src/portab/imp.h; sourceTree = SOURCE_ROOT; }; - FADE2B5505F14AB40081A16E /* ansi2knr.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = ansi2knr.c; path = ../../src/portab/ansi2knr.c; sourceTree = SOURCE_ROOT; }; - FADE2B5605F14AB40081A16E /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Makefile.am; path = ../../src/portab/Makefile.am; sourceTree = SOURCE_ROOT; }; - FADE2B5705F14AB40081A16E /* portab.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = portab.h; path = ../../src/portab/portab.h; sourceTree = SOURCE_ROOT; }; - FADE2B5805F14AB40081A16E /* exp.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = exp.h; path = ../../src/portab/exp.h; sourceTree = SOURCE_ROOT; }; - FADE2B5905F14AB40081A16E /* strlcpy.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = strlcpy.c; path = ../../src/portab/strlcpy.c; sourceTree = SOURCE_ROOT; }; - FADE2B5A05F14AB40081A16E /* portabtest.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = portabtest.c; path = ../../src/portab/portabtest.c; sourceTree = SOURCE_ROOT; }; - FADE2B5B05F14AB40081A16E /* ansi2knr.1 */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.man; name = ansi2knr.1; path = ../../src/portab/ansi2knr.1; sourceTree = SOURCE_ROOT; }; - FADE2B5C05F14AB40081A16E /* vsnprintf.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = vsnprintf.c; path = ../../src/portab/vsnprintf.c; sourceTree = SOURCE_ROOT; }; - FADE2B6805F14B300081A16E /* tests.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = tests.sh; path = ../../src/testsuite/tests.sh; sourceTree = SOURCE_ROOT; }; - FADE2B6905F14B300081A16E /* stress-server.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = "stress-server.sh"; path = "../../src/testsuite/stress-server.sh"; sourceTree = SOURCE_ROOT; }; - FADE2B6A05F14B300081A16E /* channel-test.e */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = "channel-test.e"; path = "../../src/testsuite/channel-test.e"; sourceTree = SOURCE_ROOT; }; - FADE2B6B05F14B300081A16E /* stop-server.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = "stop-server.sh"; path = "../../src/testsuite/stop-server.sh"; sourceTree = SOURCE_ROOT; }; - FADE2B6C05F14B300081A16E /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Makefile.am; path = ../../src/testsuite/Makefile.am; sourceTree = SOURCE_ROOT; }; - FADE2B6D05F14B300081A16E /* getpid.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = getpid.sh; path = ../../src/testsuite/getpid.sh; sourceTree = SOURCE_ROOT; }; - FADE2B6E05F14B300081A16E /* connect-test.e */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = "connect-test.e"; path = "../../src/testsuite/connect-test.e"; sourceTree = SOURCE_ROOT; }; - FADE2B6F05F14B300081A16E /* check-idle.e */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = "check-idle.e"; path = "../../src/testsuite/check-idle.e"; sourceTree = SOURCE_ROOT; }; - FADE2B7005F14B300081A16E /* ngircd-test.conf */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = "ngircd-test.conf"; path = "../../src/testsuite/ngircd-test.conf"; sourceTree = SOURCE_ROOT; }; - FADE2B7105F14B300081A16E /* stress-A.e */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = "stress-A.e"; path = "../../src/testsuite/stress-A.e"; sourceTree = SOURCE_ROOT; }; - FADE2B7205F14B300081A16E /* stress-B.e */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = "stress-B.e"; path = "../../src/testsuite/stress-B.e"; sourceTree = SOURCE_ROOT; }; - FADE2B7305F14B300081A16E /* mode-test.e */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = "mode-test.e"; path = "../../src/testsuite/mode-test.e"; sourceTree = SOURCE_ROOT; }; - FADE2B7405F14B300081A16E /* start-server.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = "start-server.sh"; path = "../../src/testsuite/start-server.sh"; sourceTree = SOURCE_ROOT; }; - FADE2B7705F14B530081A16E /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Makefile.am; path = ../../src/tool/Makefile.am; sourceTree = SOURCE_ROOT; }; - FADE2B7805F14B530081A16E /* tool.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; name = tool.c; path = ../../src/tool/tool.c; sourceTree = SOURCE_ROOT; }; - FADE2B7905F14B530081A16E /* tool.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = tool.h; path = ../../src/tool/tool.h; sourceTree = SOURCE_ROOT; }; - FADE2B7B05F14B9F0081A16E /* ngIRCd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ngIRCd; sourceTree = BUILT_PRODUCTS_DIR; }; - FADE2B8F05F14C6C0081A16E /* config.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; name = config.h; path = ../../src/config.h; sourceTree = SOURCE_ROOT; }; - FADE2B9005F14C6C0081A16E /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Makefile.am; path = ../../src/Makefile.am; sourceTree = SOURCE_ROOT; }; - FADE2C9905F1511B0081A16E /* portabtest */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = portabtest; sourceTree = BUILT_PRODUCTS_DIR; }; + FA322BBA0CEF72E4001761B3 /* ngIRCd */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ngIRCd; sourceTree = BUILT_PRODUCTS_DIR; }; + FA322CD50CEF74B1001761B3 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = .cvsignore; sourceTree = ""; }; + FA322CD60CEF74B1001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + FA322CD80CEF74B1001761B3 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = .cvsignore; sourceTree = ""; }; + FA322CD90CEF74B1001761B3 /* array.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = array.c; sourceTree = ""; }; + FA322CDA0CEF74B1001761B3 /* array.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = array.h; sourceTree = ""; }; + FA322CDB0CEF74B1001761B3 /* channel.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = channel.c; sourceTree = ""; }; + FA322CDC0CEF74B1001761B3 /* channel.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = channel.h; sourceTree = ""; }; + FA322CDD0CEF74B1001761B3 /* client.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = client.c; sourceTree = ""; }; + FA322CDE0CEF74B1001761B3 /* client.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = client.h; sourceTree = ""; }; + FA322CDF0CEF74B1001761B3 /* conf.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = conf.c; sourceTree = ""; }; + FA322CE00CEF74B1001761B3 /* conf.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = conf.h; sourceTree = ""; }; + FA322CE10CEF74B1001761B3 /* conn-func.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = "conn-func.c"; sourceTree = ""; }; + FA322CE20CEF74B1001761B3 /* conn-func.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = "conn-func.h"; sourceTree = ""; }; + FA322CE30CEF74B1001761B3 /* conn-zip.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = "conn-zip.c"; sourceTree = ""; }; + FA322CE40CEF74B1001761B3 /* conn-zip.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = "conn-zip.h"; sourceTree = ""; }; + FA322CE50CEF74B1001761B3 /* conn.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = conn.c; sourceTree = ""; }; + FA322CE60CEF74B1001761B3 /* conn.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = conn.h; sourceTree = ""; }; + FA322CE70CEF74B1001761B3 /* defines.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = defines.h; sourceTree = ""; }; + FA322CE80CEF74B1001761B3 /* hash.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = hash.c; sourceTree = ""; }; + FA322CE90CEF74B1001761B3 /* hash.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = hash.h; sourceTree = ""; }; + FA322CEA0CEF74B1001761B3 /* io.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = io.c; sourceTree = ""; }; + FA322CEB0CEF74B1001761B3 /* io.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = io.h; sourceTree = ""; }; + FA322CEC0CEF74B1001761B3 /* irc-channel.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = "irc-channel.c"; sourceTree = ""; }; + FA322CED0CEF74B1001761B3 /* irc-channel.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = "irc-channel.h"; sourceTree = ""; }; + FA322CEE0CEF74B1001761B3 /* irc-info.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = "irc-info.c"; sourceTree = ""; }; + FA322CEF0CEF74B1001761B3 /* irc-info.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = "irc-info.h"; sourceTree = ""; }; + FA322CF00CEF74B1001761B3 /* irc-login.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = "irc-login.c"; sourceTree = ""; }; + FA322CF10CEF74B1001761B3 /* irc-login.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = "irc-login.h"; sourceTree = ""; }; + FA322CF20CEF74B1001761B3 /* irc-mode.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = "irc-mode.c"; sourceTree = ""; }; + FA322CF30CEF74B1001761B3 /* irc-mode.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = "irc-mode.h"; sourceTree = ""; }; + FA322CF40CEF74B1001761B3 /* irc-op.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = "irc-op.c"; sourceTree = ""; }; + FA322CF50CEF74B1001761B3 /* irc-op.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = "irc-op.h"; sourceTree = ""; }; + FA322CF60CEF74B1001761B3 /* irc-oper.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = "irc-oper.c"; sourceTree = ""; }; + FA322CF70CEF74B1001761B3 /* irc-oper.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = "irc-oper.h"; sourceTree = ""; }; + FA322CF80CEF74B1001761B3 /* irc-server.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = "irc-server.c"; sourceTree = ""; }; + FA322CF90CEF74B1001761B3 /* irc-server.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = "irc-server.h"; sourceTree = ""; }; + FA322CFA0CEF74B1001761B3 /* irc-write.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = "irc-write.c"; sourceTree = ""; }; + FA322CFB0CEF74B1001761B3 /* irc-write.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = "irc-write.h"; sourceTree = ""; }; + FA322CFC0CEF74B1001761B3 /* irc.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = irc.c; sourceTree = ""; }; + FA322CFD0CEF74B1001761B3 /* irc.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = irc.h; sourceTree = ""; }; + FA322CFE0CEF74B1001761B3 /* lists.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = lists.c; sourceTree = ""; }; + FA322CFF0CEF74B1001761B3 /* lists.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = lists.h; sourceTree = ""; }; + FA322D000CEF74B1001761B3 /* log.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = log.c; sourceTree = ""; }; + FA322D010CEF74B1001761B3 /* log.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = ""; }; + FA322D020CEF74B1001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + FA322D030CEF74B1001761B3 /* match.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = match.c; sourceTree = ""; }; + FA322D040CEF74B1001761B3 /* match.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = match.h; sourceTree = ""; }; + FA322D050CEF74B1001761B3 /* messages.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = messages.h; sourceTree = ""; }; + FA322D060CEF74B1001761B3 /* ngircd.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = ngircd.c; sourceTree = ""; }; + FA322D070CEF74B1001761B3 /* ngircd.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = ngircd.h; sourceTree = ""; }; + FA322D080CEF74B1001761B3 /* parse.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = parse.c; sourceTree = ""; }; + FA322D090CEF74B1001761B3 /* parse.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = parse.h; sourceTree = ""; }; + FA322D0A0CEF74B1001761B3 /* rendezvous.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = rendezvous.c; sourceTree = ""; }; + FA322D0B0CEF74B1001761B3 /* rendezvous.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = rendezvous.h; sourceTree = ""; }; + FA322D0C0CEF74B1001761B3 /* resolve.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = resolve.c; sourceTree = ""; }; + FA322D0D0CEF74B1001761B3 /* resolve.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = resolve.h; sourceTree = ""; }; + FA322D0F0CEF74B1001761B3 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = .cvsignore; sourceTree = ""; }; + FA322D100CEF74B1001761B3 /* ansi2knr.1 */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.man; path = ansi2knr.1; sourceTree = ""; }; + FA322D110CEF74B1001761B3 /* ansi2knr.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = ansi2knr.c; sourceTree = ""; }; + FA322D120CEF74B1001761B3 /* exp.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = exp.h; sourceTree = ""; }; + FA322D130CEF74B1001761B3 /* imp.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = imp.h; sourceTree = ""; }; + FA322D140CEF74B1001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + FA322D150CEF74B1001761B3 /* portab.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = portab.h; sourceTree = ""; }; + FA322D160CEF74B1001761B3 /* portabtest.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = portabtest.c; sourceTree = ""; }; + FA322D170CEF74B1001761B3 /* splint.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = splint.h; sourceTree = ""; }; + FA322D180CEF74B1001761B3 /* strdup.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = strdup.c; sourceTree = ""; }; + FA322D190CEF74B1001761B3 /* strlcpy.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = strlcpy.c; sourceTree = ""; }; + FA322D1A0CEF74B1001761B3 /* vsnprintf.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = vsnprintf.c; sourceTree = ""; }; + FA322D1C0CEF74B1001761B3 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = .cvsignore; sourceTree = ""; }; + FA322D1D0CEF74B1001761B3 /* channel-test.e */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = "channel-test.e"; sourceTree = ""; }; + FA322D1E0CEF74B1001761B3 /* check-idle.e */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = "check-idle.e"; sourceTree = ""; }; + FA322D1F0CEF74B1001761B3 /* connect-test.e */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = "connect-test.e"; sourceTree = ""; }; + FA322D200CEF74B1001761B3 /* functions.inc */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.pascal; path = functions.inc; sourceTree = ""; }; + FA322D210CEF74B1001761B3 /* getpid.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = getpid.sh; sourceTree = ""; }; + FA322D220CEF74B1001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + FA322D230CEF74B1001761B3 /* mode-test.e */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = "mode-test.e"; sourceTree = ""; }; + FA322D240CEF74B1001761B3 /* ngircd-test.conf */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = "ngircd-test.conf"; sourceTree = ""; }; + FA322D250CEF74B1001761B3 /* README */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = README; sourceTree = ""; }; + FA322D260CEF74B1001761B3 /* start-server.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = "start-server.sh"; sourceTree = ""; }; + FA322D270CEF74B1001761B3 /* stop-server.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = "stop-server.sh"; sourceTree = ""; }; + FA322D280CEF74B1001761B3 /* stress-A.e */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = "stress-A.e"; sourceTree = ""; }; + FA322D290CEF74B1001761B3 /* stress-B.e */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = "stress-B.e"; sourceTree = ""; }; + FA322D2A0CEF74B1001761B3 /* stress-server.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = "stress-server.sh"; sourceTree = ""; }; + FA322D2B0CEF74B1001761B3 /* test-loop.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = "test-loop.sh"; sourceTree = ""; }; + FA322D2C0CEF74B1001761B3 /* tests.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = tests.sh; sourceTree = ""; }; + FA322D2D0CEF74B1001761B3 /* wait-tests.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = "wait-tests.sh"; sourceTree = ""; }; + FA322D2F0CEF74B1001761B3 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = .cvsignore; sourceTree = ""; }; + FA322D300CEF74B1001761B3 /* ansi2knr.1 */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.man; path = ansi2knr.1; sourceTree = ""; }; + FA322D310CEF74B1001761B3 /* ansi2knr.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = ansi2knr.c; sourceTree = ""; }; + FA322D320CEF74B1001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + FA322D330CEF74B1001761B3 /* tool.c */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.c; path = tool.c; sourceTree = ""; }; + FA322D340CEF74B1001761B3 /* tool.h */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = sourcecode.c.h; path = tool.h; sourceTree = ""; }; + FA322D5A0CEF750F001761B3 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = AUTHORS; path = ../../AUTHORS; sourceTree = SOURCE_ROOT; }; + FA322D5B0CEF750F001761B3 /* autogen.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = autogen.sh; path = ../../autogen.sh; sourceTree = SOURCE_ROOT; }; + FA322D5C0CEF750F001761B3 /* ChangeLog */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = ChangeLog; path = ../../ChangeLog; sourceTree = SOURCE_ROOT; }; + FA322D5E0CEF750F001761B3 /* config.guess */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = config.guess; path = ../../config.guess; sourceTree = SOURCE_ROOT; }; + FA322D5F0CEF750F001761B3 /* config.sub */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; name = config.sub; path = ../../config.sub; sourceTree = SOURCE_ROOT; }; + FA322D600CEF750F001761B3 /* configure.in */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = configure.in; path = ../../configure.in; sourceTree = SOURCE_ROOT; }; + FA322D610CEF750F001761B3 /* COPYING */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = COPYING; path = ../../COPYING; sourceTree = SOURCE_ROOT; }; + FA322D620CEF750F001761B3 /* INSTALL */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = INSTALL; path = ../../INSTALL; sourceTree = SOURCE_ROOT; }; + FA322D630CEF750F001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = Makefile.am; path = ../../Makefile.am; sourceTree = SOURCE_ROOT; }; + FA322D640CEF750F001761B3 /* NEWS */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = NEWS; path = ../../NEWS; sourceTree = SOURCE_ROOT; }; + FA322D650CEF750F001761B3 /* README */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; name = README; path = ../../README; sourceTree = SOURCE_ROOT; }; + FA322D670CEF7523001761B3 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = .cvsignore; sourceTree = ""; }; + FA322D690CEF7523001761B3 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = .cvsignore; sourceTree = ""; }; + FA322D6A0CEF7523001761B3 /* changelog */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = changelog; sourceTree = ""; }; + FA322D6B0CEF7523001761B3 /* compat */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = compat; sourceTree = ""; }; + FA322D6C0CEF7523001761B3 /* control */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = control; sourceTree = ""; }; + FA322D6D0CEF7523001761B3 /* copyright */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = copyright; sourceTree = ""; }; + FA322D6E0CEF7523001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + FA322D6F0CEF7523001761B3 /* ngircd.default */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = ngircd.default; sourceTree = ""; }; + FA322D700CEF7523001761B3 /* ngircd.init */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = ngircd.init; sourceTree = ""; }; + FA322D710CEF7523001761B3 /* ngircd.postinst */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = ngircd.postinst; sourceTree = ""; }; + FA322D720CEF7523001761B3 /* rules */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = rules; sourceTree = ""; }; + FA322D740CEF7523001761B3 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = .cvsignore; sourceTree = ""; }; + FA322D8D0CEF7523001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + FA322D8E0CEF7523001761B3 /* ngIRCd.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; path = ngIRCd.xcodeproj; sourceTree = ""; }; + FA322D910CEF7523001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + FA322D920CEF7523001761B3 /* ngindent */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = ngindent; sourceTree = ""; }; + FA322D930CEF7523001761B3 /* ngircd.sh */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.script.sh; path = ngircd.sh; sourceTree = ""; }; + FA322D940CEF7523001761B3 /* ngircd.spec */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = ngircd.spec; sourceTree = ""; }; + FA322D950CEF7523001761B3 /* README */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = README; sourceTree = ""; }; + FA322D960CEF7523001761B3 /* systrace.policy */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = systrace.policy; sourceTree = ""; }; + FA322D980CEF752C001761B3 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = .cvsignore; sourceTree = ""; }; + FA322D990CEF752C001761B3 /* CVS.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = CVS.txt; sourceTree = ""; }; + FA322D9A0CEF752C001761B3 /* FAQ.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = FAQ.txt; sourceTree = ""; }; + FA322D9B0CEF752C001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + FA322D9C0CEF752C001761B3 /* Platforms.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Platforms.txt; sourceTree = ""; }; + FA322D9D0CEF752C001761B3 /* Protocol.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Protocol.txt; sourceTree = ""; }; + FA322D9E0CEF752C001761B3 /* README-AUX.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = "README-AUX.txt"; sourceTree = ""; }; + FA322D9F0CEF752C001761B3 /* README-BeOS.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = "README-BeOS.txt"; sourceTree = ""; }; + FA322DA00CEF752C001761B3 /* RFC.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = RFC.txt; sourceTree = ""; }; + FA322DA10CEF752C001761B3 /* sample-ngircd.conf */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = "sample-ngircd.conf"; sourceTree = ""; }; + FA322DA30CEF752C001761B3 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = .cvsignore; sourceTree = ""; }; + FA322DA40CEF752C001761B3 /* Doxyfile */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Doxyfile; sourceTree = ""; }; + FA322DA50CEF752C001761B3 /* footer.inc.html */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.html; path = footer.inc.html; sourceTree = ""; }; + FA322DA60CEF752C001761B3 /* header.inc.html */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.html; path = header.inc.html; sourceTree = ""; }; + FA322DA70CEF752C001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + FA322DA80CEF752C001761B3 /* ngircd-doc.css */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text.css; path = "ngircd-doc.css"; sourceTree = ""; }; + FA322DA90CEF752C001761B3 /* SSL.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = SSL.txt; sourceTree = ""; }; + FA322DAA0CEF752C001761B3 /* Zeroconf.txt */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Zeroconf.txt; sourceTree = ""; }; + FA322DAC0CEF7538001761B3 /* .cvsignore */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = .cvsignore; sourceTree = ""; }; + FA322DAD0CEF7538001761B3 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + FA322DAE0CEF7538001761B3 /* ngircd.8.tmpl */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = ngircd.8.tmpl; sourceTree = ""; }; + FA322DAF0CEF7538001761B3 /* ngircd.conf.5.tmpl */ = {isa = PBXFileReference; fileEncoding = 5; lastKnownFileType = text; path = ngircd.conf.5.tmpl; sourceTree = ""; }; + FA322DB10CEF7565001761B3 /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; + FA322DBB0CEF773C001761B3 /* cvs-version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "cvs-version.h"; sourceTree = ""; }; + FA322DC00CEF77CB001761B3 /* libz.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libz.dylib; path = /usr/lib/libz.dylib; sourceTree = ""; }; + FAE5CC2C0CF2308A007D69B6 /* numeric.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = numeric.h; sourceTree = ""; }; + FAE5CC2D0CF2308A007D69B6 /* numeric.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = numeric.c; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -257,14 +208,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FA83332B0627391D00A909F0 /* libz.dylib in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FADE2C9605F1511B0081A16E /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( + FA322DC10CEF77CB001761B3 /* libz.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -274,354 +218,359 @@ 08FB7794FE84155DC02AAC07 /* ngIRCd */ = { isa = PBXGroup; children = ( - 08FB7795FE84155DC02AAC07 /* src */, - C6A0FF2B0290797F04C91782 /* doc */, - FADE2AA505F149580081A16E /* man */, - FADE2AA605F1495F0081A16E /* contrib */, - FADE2AC905F149D70081A16E /* Makefile.am */, - FADE2AAE05F1499A0081A16E /* AUTHORS */, - FADE2AAC05F1499A0081A16E /* ChangeLog */, - FADE2AA805F1499A0081A16E /* COPYING */, - FADE2AAD05F1499A0081A16E /* INSTALL */, - FADE2AA905F1499A0081A16E /* NEWS */, - FADE2AAA05F1499A0081A16E /* README */, - FADE2AA705F1499A0081A16E /* autogen.sh */, - FADE2AAB05F1499A0081A16E /* configure.in */, - FA2329E908C9E74D0093207B /* config.guess */, - FA2329EA08C9E74D0093207B /* config.sub */, + FA322D970CEF752C001761B3 /* doc */, + FA322D660CEF7523001761B3 /* contrib */, + FA322DAB0CEF7538001761B3 /* man */, + FA322CD40CEF74B0001761B3 /* src */, + FA322D5A0CEF750F001761B3 /* AUTHORS */, + FA322D610CEF750F001761B3 /* COPYING */, + FA322D620CEF750F001761B3 /* INSTALL */, + FA322D640CEF750F001761B3 /* NEWS */, + FA322D650CEF750F001761B3 /* README */, + FA322D5B0CEF750F001761B3 /* autogen.sh */, + FA322D5C0CEF750F001761B3 /* ChangeLog */, + FA322D5E0CEF750F001761B3 /* config.guess */, + FA322D5F0CEF750F001761B3 /* config.sub */, + FA322D600CEF750F001761B3 /* configure.in */, + FA322D630CEF750F001761B3 /* Makefile.am */, 1AB674ADFE9D54B511CA2CBB /* Products */, + FA322DC00CEF77CB001761B3 /* libz.dylib */, ); name = ngIRCd; sourceTree = ""; }; - 08FB7795FE84155DC02AAC07 /* src */ = { + 1AB674ADFE9D54B511CA2CBB /* Products */ = { + isa = PBXGroup; + children = ( + FA322BBA0CEF72E4001761B3 /* ngIRCd */, + ); + name = Products; + sourceTree = ""; + }; + FA322CD40CEF74B0001761B3 /* src */ = { isa = PBXGroup; children = ( - FADE2B9005F14C6C0081A16E /* Makefile.am */, - FADE2AED05F14A6A0081A16E /* ngircd */, - FADE2AEE05F14A700081A16E /* portab */, - FADE2AEF05F14A760081A16E /* testsuite */, - FADE2AF005F14A840081A16E /* tool */, - FADE2B8F05F14C6C0081A16E /* config.h */, + FA322CD70CEF74B1001761B3 /* ngircd */, + FA322D0E0CEF74B1001761B3 /* portab */, + FA322D1B0CEF74B1001761B3 /* testsuite */, + FA322D2E0CEF74B1001761B3 /* tool */, + FA322CD50CEF74B1001761B3 /* .cvsignore */, + FA322CD60CEF74B1001761B3 /* Makefile.am */, ); name = src; + path = ../../src; + sourceTree = SOURCE_ROOT; + }; + FA322CD70CEF74B1001761B3 /* ngircd */ = { + isa = PBXGroup; + children = ( + FA322CD80CEF74B1001761B3 /* .cvsignore */, + FA322CD90CEF74B1001761B3 /* array.c */, + FA322CDA0CEF74B1001761B3 /* array.h */, + FA322CDB0CEF74B1001761B3 /* channel.c */, + FA322CDC0CEF74B1001761B3 /* channel.h */, + FA322CDD0CEF74B1001761B3 /* client.c */, + FA322CDE0CEF74B1001761B3 /* client.h */, + FA322CDF0CEF74B1001761B3 /* conf.c */, + FA322CE00CEF74B1001761B3 /* conf.h */, + FA322CE10CEF74B1001761B3 /* conn-func.c */, + FA322CE20CEF74B1001761B3 /* conn-func.h */, + FA322CE30CEF74B1001761B3 /* conn-zip.c */, + FA322CE40CEF74B1001761B3 /* conn-zip.h */, + FA322CE50CEF74B1001761B3 /* conn.c */, + FA322CE60CEF74B1001761B3 /* conn.h */, + FA322CE70CEF74B1001761B3 /* defines.h */, + FA322CE80CEF74B1001761B3 /* hash.c */, + FA322CE90CEF74B1001761B3 /* hash.h */, + FA322CEA0CEF74B1001761B3 /* io.c */, + FA322CEB0CEF74B1001761B3 /* io.h */, + FA322CEC0CEF74B1001761B3 /* irc-channel.c */, + FA322CED0CEF74B1001761B3 /* irc-channel.h */, + FA322CEE0CEF74B1001761B3 /* irc-info.c */, + FA322CEF0CEF74B1001761B3 /* irc-info.h */, + FA322CF00CEF74B1001761B3 /* irc-login.c */, + FA322CF10CEF74B1001761B3 /* irc-login.h */, + FA322CF20CEF74B1001761B3 /* irc-mode.c */, + FA322CF30CEF74B1001761B3 /* irc-mode.h */, + FA322CF40CEF74B1001761B3 /* irc-op.c */, + FA322CF50CEF74B1001761B3 /* irc-op.h */, + FA322CF60CEF74B1001761B3 /* irc-oper.c */, + FA322CF70CEF74B1001761B3 /* irc-oper.h */, + FA322CF80CEF74B1001761B3 /* irc-server.c */, + FA322CF90CEF74B1001761B3 /* irc-server.h */, + FA322CFA0CEF74B1001761B3 /* irc-write.c */, + FA322CFB0CEF74B1001761B3 /* irc-write.h */, + FA322CFC0CEF74B1001761B3 /* irc.c */, + FA322CFD0CEF74B1001761B3 /* irc.h */, + FA322CFE0CEF74B1001761B3 /* lists.c */, + FA322CFF0CEF74B1001761B3 /* lists.h */, + FA322D000CEF74B1001761B3 /* log.c */, + FA322D010CEF74B1001761B3 /* log.h */, + FA322D020CEF74B1001761B3 /* Makefile.am */, + FA322D030CEF74B1001761B3 /* match.c */, + FA322D040CEF74B1001761B3 /* match.h */, + FA322D050CEF74B1001761B3 /* messages.h */, + FA322D060CEF74B1001761B3 /* ngircd.c */, + FA322D070CEF74B1001761B3 /* ngircd.h */, + FAE5CC2D0CF2308A007D69B6 /* numeric.c */, + FAE5CC2C0CF2308A007D69B6 /* numeric.h */, + FA322D080CEF74B1001761B3 /* parse.c */, + FA322D090CEF74B1001761B3 /* parse.h */, + FA322D0A0CEF74B1001761B3 /* rendezvous.c */, + FA322D0B0CEF74B1001761B3 /* rendezvous.h */, + FA322D0C0CEF74B1001761B3 /* resolve.c */, + FA322D0D0CEF74B1001761B3 /* resolve.h */, + ); + path = ngircd; + sourceTree = ""; + }; + FA322D0E0CEF74B1001761B3 /* portab */ = { + isa = PBXGroup; + children = ( + FA322D0F0CEF74B1001761B3 /* .cvsignore */, + FA322D100CEF74B1001761B3 /* ansi2knr.1 */, + FA322D110CEF74B1001761B3 /* ansi2knr.c */, + FA322D120CEF74B1001761B3 /* exp.h */, + FA322D130CEF74B1001761B3 /* imp.h */, + FA322D140CEF74B1001761B3 /* Makefile.am */, + FA322D150CEF74B1001761B3 /* portab.h */, + FA322D160CEF74B1001761B3 /* portabtest.c */, + FA322D170CEF74B1001761B3 /* splint.h */, + FA322D180CEF74B1001761B3 /* strdup.c */, + FA322D190CEF74B1001761B3 /* strlcpy.c */, + FA322D1A0CEF74B1001761B3 /* vsnprintf.c */, + ); + path = portab; + sourceTree = ""; + }; + FA322D1B0CEF74B1001761B3 /* testsuite */ = { + isa = PBXGroup; + children = ( + FA322D1C0CEF74B1001761B3 /* .cvsignore */, + FA322D1D0CEF74B1001761B3 /* channel-test.e */, + FA322D1E0CEF74B1001761B3 /* check-idle.e */, + FA322D1F0CEF74B1001761B3 /* connect-test.e */, + FA322D200CEF74B1001761B3 /* functions.inc */, + FA322D210CEF74B1001761B3 /* getpid.sh */, + FA322D220CEF74B1001761B3 /* Makefile.am */, + FA322D230CEF74B1001761B3 /* mode-test.e */, + FA322D240CEF74B1001761B3 /* ngircd-test.conf */, + FA322D250CEF74B1001761B3 /* README */, + FA322D260CEF74B1001761B3 /* start-server.sh */, + FA322D270CEF74B1001761B3 /* stop-server.sh */, + FA322D280CEF74B1001761B3 /* stress-A.e */, + FA322D290CEF74B1001761B3 /* stress-B.e */, + FA322D2A0CEF74B1001761B3 /* stress-server.sh */, + FA322D2B0CEF74B1001761B3 /* test-loop.sh */, + FA322D2C0CEF74B1001761B3 /* tests.sh */, + FA322D2D0CEF74B1001761B3 /* wait-tests.sh */, + ); + path = testsuite; + sourceTree = ""; + }; + FA322D2E0CEF74B1001761B3 /* tool */ = { + isa = PBXGroup; + children = ( + FA322D2F0CEF74B1001761B3 /* .cvsignore */, + FA322D300CEF74B1001761B3 /* ansi2knr.1 */, + FA322D310CEF74B1001761B3 /* ansi2knr.c */, + FA322D320CEF74B1001761B3 /* Makefile.am */, + FA322D330CEF74B1001761B3 /* tool.c */, + FA322D340CEF74B1001761B3 /* tool.h */, + ); + path = tool; + sourceTree = ""; + }; + FA322D660CEF7523001761B3 /* contrib */ = { + isa = PBXGroup; + children = ( + FA322D670CEF7523001761B3 /* .cvsignore */, + FA322D680CEF7523001761B3 /* Debian */, + FA322D730CEF7523001761B3 /* MacOSX */, + FA322D910CEF7523001761B3 /* Makefile.am */, + FA322D920CEF7523001761B3 /* ngindent */, + FA322D930CEF7523001761B3 /* ngircd.sh */, + FA322D940CEF7523001761B3 /* ngircd.spec */, + FA322D950CEF7523001761B3 /* README */, + FA322D960CEF7523001761B3 /* systrace.policy */, + ); + name = contrib; + path = ..; + sourceTree = SOURCE_ROOT; + }; + FA322D680CEF7523001761B3 /* Debian */ = { + isa = PBXGroup; + children = ( + FA322D690CEF7523001761B3 /* .cvsignore */, + FA322D6A0CEF7523001761B3 /* changelog */, + FA322D6B0CEF7523001761B3 /* compat */, + FA322D6C0CEF7523001761B3 /* control */, + FA322D6D0CEF7523001761B3 /* copyright */, + FA322D6E0CEF7523001761B3 /* Makefile.am */, + FA322D6F0CEF7523001761B3 /* ngircd.default */, + FA322D700CEF7523001761B3 /* ngircd.init */, + FA322D710CEF7523001761B3 /* ngircd.postinst */, + FA322D720CEF7523001761B3 /* rules */, + ); + path = Debian; sourceTree = ""; }; - 1AB674ADFE9D54B511CA2CBB /* Products */ = { + FA322D730CEF7523001761B3 /* MacOSX */ = { isa = PBXGroup; children = ( - FADE2B7B05F14B9F0081A16E /* ngIRCd */, - FADE2C9905F1511B0081A16E /* portabtest */, - FA83332A0627391D00A909F0 /* libz.dylib */, + FA322D740CEF7523001761B3 /* .cvsignore */, + FA322D750CEF7523001761B3 /* build */, + FA322D8D0CEF7523001761B3 /* Makefile.am */, + FA322D8E0CEF7523001761B3 /* ngIRCd.xcodeproj */, + FA322DB10CEF7565001761B3 /* config.h */, + FA322DBB0CEF773C001761B3 /* cvs-version.h */, ); - name = Products; + path = MacOSX; sourceTree = ""; }; - C6A0FF2B0290797F04C91782 /* doc */ = { + FA322D750CEF7523001761B3 /* build */ = { isa = PBXGroup; children = ( - FA2329FF08C9E8AC0093207B /* src */, - FADE2AB905F149C50081A16E /* Makefile.am */, - FADE2ABE05F149C50081A16E /* CVS.txt */, - FADE2AB805F149C50081A16E /* FAQ.txt */, - FADE2ABF05F149C50081A16E /* Platforms.txt */, - FADE2ABD05F149C50081A16E /* Protocol.txt */, - FADE2AB705F149C50081A16E /* README-BeOS.txt */, - FADE2ABA05F149C50081A16E /* README-AUX.txt */, - FADE2ABC05F149C50081A16E /* RFC.txt */, - FA8B5EFD08C9E4C900B781D4 /* SSL.txt */, - FA8B5EFE08C9E4C900B781D4 /* Zeroconf.txt */, - FADE2ABB05F149C50081A16E /* sample-ngircd.conf */, + FA322D760CEF7523001761B3 /* ngIRCd.build */, ); - name = doc; + path = build; sourceTree = ""; }; - FA2329FF08C9E8AC0093207B /* src */ = { + FA322D760CEF7523001761B3 /* ngIRCd.build */ = { isa = PBXGroup; children = ( - FA232A0408C9E8BF0093207B /* Makefile.am */, - FA232A0108C9E8BF0093207B /* Doxyfile */, - FA232A0208C9E8BF0093207B /* footer.inc.html */, - FA232A0308C9E8BF0093207B /* header.inc.html */, - FA232A0508C9E8BF0093207B /* ngircd-doc.css */, + FA322D770CEF7523001761B3 /* Default */, + FA322D7F0CEF7523001761B3 /* ngIRCd.pbxindex */, ); - name = src; + path = ngIRCd.build; sourceTree = ""; }; - FADE2AA505F149580081A16E /* man */ = { + FA322D770CEF7523001761B3 /* Default */ = { isa = PBXGroup; children = ( - FADE2ACB05F149EA0081A16E /* Makefile.am */, - FADE2ACC05F149EA0081A16E /* ngircd.conf.5 */, - FADE2ACD05F149EA0081A16E /* ngircd.8 */, + FA322D780CEF7523001761B3 /* ngIRCd.build */, ); - name = man; + path = Default; sourceTree = ""; }; - FADE2AA605F1495F0081A16E /* contrib */ = { + FA322D780CEF7523001761B3 /* ngIRCd.build */ = { isa = PBXGroup; children = ( - FA232A0708C9E8EC0093207B /* Makefile.am */, - FADE2AD205F149FD0081A16E /* Mac OS X */, - FADE2AD105F149F70081A16E /* Debian */, - FA232A0808C9E8EC0093207B /* ngircd.sh */, - FA232A0908C9E8EC0093207B /* ngircd.spec */, - FA232A0A08C9E8EC0093207B /* README */, - FA232A0B08C9E8EC0093207B /* systrace.policy */, + FA322D7A0CEF7523001761B3 /* Objects-normal */, ); - name = contrib; + path = ngIRCd.build; sourceTree = ""; }; - FADE2AD105F149F70081A16E /* Debian */ = { + FA322D7A0CEF7523001761B3 /* Objects-normal */ = { isa = PBXGroup; children = ( - FADE2AD605F14A0B0081A16E /* Makefile.am */, - FADE2ADB05F14A0B0081A16E /* changelog */, - FADE2AD905F14A0B0081A16E /* compat */, - FADE2AD705F14A0B0081A16E /* control */, - FADE2AD305F14A0B0081A16E /* copyright */, - FADE2ADA05F14A0B0081A16E /* ngircd.default */, - FADE2AD805F14A0B0081A16E /* ngircd.init */, - FADE2AD505F14A0B0081A16E /* ngircd.postinst */, - FADE2AD405F14A0B0081A16E /* rules */, - ); - name = Debian; - sourceTree = ""; - }; - FADE2AD205F149FD0081A16E /* Mac OS X */ = { - isa = PBXGroup; - children = ( - FAC0DF4A05F25A150024C8CE /* Makefile.am */, - ); - name = "Mac OS X"; - sourceTree = ""; - }; - FADE2AED05F14A6A0081A16E /* ngircd */ = { - isa = PBXGroup; - children = ( - FADE2AF105F14A960081A16E /* Makefile.am */, - FA2329EC08C9E7A30093207B /* array.c */, - FA2329ED08C9E7A30093207B /* array.h */, - FADE2B0105F14A960081A16E /* channel.c */, - FADE2B0805F14A960081A16E /* channel.h */, - FADE2B2005F14A960081A16E /* client.c */, - FADE2B1305F14A960081A16E /* client.h */, - FADE2AFC05F14A960081A16E /* conf.c */, - FADE2B0305F14A960081A16E /* conf.h */, - FADE2B1E05F14A960081A16E /* conn-func.c */, - FADE2B2105F14A960081A16E /* conn-func.h */, - FADE2B0D05F14A960081A16E /* conn-zip.c */, - FADE2AF505F14A960081A16E /* conn-zip.h */, - FADE2B1205F14A960081A16E /* conn.c */, - FADE2AF905F14A960081A16E /* conn.h */, - FADE2B0205F14A960081A16E /* defines.h */, - FADE2B1C05F14A960081A16E /* hash.c */, - FADE2AFE05F14A960081A16E /* hash.h */, - FA2329F008C9E7C40093207B /* io.c */, - FA2329F108C9E7C40093207B /* io.h */, - FADE2B1805F14A960081A16E /* irc-channel.c */, - FADE2B0705F14A960081A16E /* irc-channel.h */, - FADE2B1D05F14A960081A16E /* irc-info.c */, - FADE2B0C05F14A960081A16E /* irc-info.h */, - FADE2AF405F14A960081A16E /* irc-login.c */, - FADE2B1105F14A960081A16E /* irc-login.h */, - FADE2AF805F14A960081A16E /* irc-mode.c */, - FADE2B0B05F14A960081A16E /* irc-mode.h */, - FADE2AF305F14A960081A16E /* irc-op.c */, - FADE2B1005F14A960081A16E /* irc-op.h */, - FADE2AF705F14A960081A16E /* irc-oper.c */, - FADE2B1505F14A960081A16E /* irc-oper.h */, - FADE2B0905F14A960081A16E /* irc-server.c */, - FADE2AF205F14A960081A16E /* irc-server.h */, - FADE2B0E05F14A960081A16E /* irc-write.c */, - FADE2B1405F14A960081A16E /* irc-write.h */, - FADE2AFD05F14A960081A16E /* irc.c */, - FADE2AFB05F14A960081A16E /* irc.h */, - FADE2B1A05F14A960081A16E /* lists.c */, - FADE2B0505F14A960081A16E /* lists.h */, - FADE2B1F05F14A960081A16E /* log.c */, - FADE2B0A05F14A960081A16E /* log.h */, - FADE2B0F05F14A960081A16E /* match.c */, - FADE2AF605F14A960081A16E /* match.h */, - FADE2AFA05F14A960081A16E /* messages.h */, - FADE2B1705F14A960081A16E /* ngircd.c */, - FADE2B0605F14A960081A16E /* ngircd.h */, - FADE2AFF05F14A960081A16E /* parse.c */, - FADE2B1905F14A960081A16E /* parse.h */, - FADE2B0405F14A960081A16E /* rendezvous.c */, - FADE2B1605F14A960081A16E /* rendezvous.h */, - FADE2B0005F14A960081A16E /* resolve.c */, - FADE2B1B05F14A960081A16E /* resolve.h */, - ); - name = ngircd; - sourceTree = ""; - }; - FADE2AEE05F14A700081A16E /* portab */ = { - isa = PBXGroup; - children = ( - FADE2B5605F14AB40081A16E /* Makefile.am */, - FADE2B5B05F14AB40081A16E /* ansi2knr.1 */, - FADE2B5505F14AB40081A16E /* ansi2knr.c */, - FADE2B5805F14AB40081A16E /* exp.h */, - FADE2B5405F14AB40081A16E /* imp.h */, - FADE2B5705F14AB40081A16E /* portab.h */, - FADE2B5A05F14AB40081A16E /* portabtest.c */, - FADE2B5305F14AB40081A16E /* splint.h */, - FA2329F408C9E8070093207B /* strdup.c */, - FADE2B5905F14AB40081A16E /* strlcpy.c */, - FADE2B5C05F14AB40081A16E /* vsnprintf.c */, - ); - name = portab; - sourceTree = ""; - }; - FADE2AEF05F14A760081A16E /* testsuite */ = { - isa = PBXGroup; - children = ( - FADE2B6C05F14B300081A16E /* Makefile.am */, - FA2329FB08C9E85D0093207B /* README */, - FADE2B6A05F14B300081A16E /* channel-test.e */, - FADE2B6F05F14B300081A16E /* check-idle.e */, - FADE2B6E05F14B300081A16E /* connect-test.e */, - FA2329FA08C9E8450093207B /* functions.inc */, - FADE2B6D05F14B300081A16E /* getpid.sh */, - FADE2B7305F14B300081A16E /* mode-test.e */, - FADE2B7005F14B300081A16E /* ngircd-test.conf */, - FADE2B7405F14B300081A16E /* start-server.sh */, - FADE2B6B05F14B300081A16E /* stop-server.sh */, - FADE2B7105F14B300081A16E /* stress-A.e */, - FADE2B7205F14B300081A16E /* stress-B.e */, - FADE2B6905F14B300081A16E /* stress-server.sh */, - FA2329FC08C9E8700093207B /* test-loop.sh */, - FADE2B6805F14B300081A16E /* tests.sh */, - FA2329FD08C9E87B0093207B /* wait-tests.sh */, - ); - name = testsuite; - sourceTree = ""; - }; - FADE2AF005F14A840081A16E /* tool */ = { - isa = PBXGroup; - children = ( - FADE2B7705F14B530081A16E /* Makefile.am */, - FADE2B7805F14B530081A16E /* tool.c */, - FADE2B7905F14B530081A16E /* tool.h */, + FA322D7B0CEF7523001761B3 /* i386 */, + FA322D7D0CEF7523001761B3 /* ppc */, ); - name = tool; + path = "Objects-normal"; sourceTree = ""; }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 8DD76FAA0486AB0100D96B5E /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - FADE2B2305F14A960081A16E /* irc-server.h in Headers */, - FADE2B2605F14A960081A16E /* conn-zip.h in Headers */, - FADE2B2705F14A960081A16E /* match.h in Headers */, - FADE2B2A05F14A960081A16E /* conn.h in Headers */, - FADE2B2B05F14A960081A16E /* messages.h in Headers */, - FADE2B2C05F14A960081A16E /* irc.h in Headers */, - FADE2B2F05F14A960081A16E /* hash.h in Headers */, - FADE2B3305F14A960081A16E /* defines.h in Headers */, - FADE2B3405F14A960081A16E /* conf.h in Headers */, - FADE2B3605F14A960081A16E /* lists.h in Headers */, - FADE2B3705F14A960081A16E /* ngircd.h in Headers */, - FADE2B3805F14A960081A16E /* irc-channel.h in Headers */, - FADE2B3905F14A960081A16E /* channel.h in Headers */, - FADE2B3B05F14A960081A16E /* log.h in Headers */, - FADE2B3C05F14A960081A16E /* irc-mode.h in Headers */, - FADE2B3D05F14A960081A16E /* irc-info.h in Headers */, - FADE2B4105F14A960081A16E /* irc-op.h in Headers */, - FADE2B4205F14A960081A16E /* irc-login.h in Headers */, - FADE2B4405F14A960081A16E /* client.h in Headers */, - FADE2B4505F14A960081A16E /* irc-write.h in Headers */, - FADE2B4605F14A960081A16E /* irc-oper.h in Headers */, - FADE2B4705F14A960081A16E /* rendezvous.h in Headers */, - FADE2B4A05F14A960081A16E /* parse.h in Headers */, - FADE2B4C05F14A960081A16E /* resolve.h in Headers */, - FADE2B5205F14A960081A16E /* conn-func.h in Headers */, - FADE2BBD05F14DEF0081A16E /* exp.h in Headers */, - FADE2BBF05F14DEF0081A16E /* imp.h in Headers */, - FADE2BC105F14DF10081A16E /* portab.h in Headers */, - FADE2CC205F152780081A16E /* tool.h in Headers */, - FA2329EF08C9E7A30093207B /* array.h in Headers */, - FA2329F308C9E7C40093207B /* io.h in Headers */, + FA322D7B0CEF7523001761B3 /* i386 */ = { + isa = PBXGroup; + children = ( ); - runOnlyForDeploymentPostprocessing = 0; + path = i386; + sourceTree = ""; }; - FADE2C5F05F1511B0081A16E /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - FADE2CB205F151490081A16E /* exp.h in Headers */, - FADE2CB305F151490081A16E /* imp.h in Headers */, - FA2329F708C9E81A0093207B /* portab.h in Headers */, - FA232A7D08C9F0480093207B /* config.h in Headers */, + FA322D7D0CEF7523001761B3 /* ppc */ = { + isa = PBXGroup; + children = ( ); - runOnlyForDeploymentPostprocessing = 0; + path = ppc; + sourceTree = ""; + }; + FA322D7F0CEF7523001761B3 /* ngIRCd.pbxindex */ = { + isa = PBXGroup; + children = ( + FA322D880CEF7523001761B3 /* strings.pbxstrings */, + ); + path = ngIRCd.pbxindex; + sourceTree = ""; + }; + FA322D880CEF7523001761B3 /* strings.pbxstrings */ = { + isa = PBXGroup; + children = ( + ); + path = strings.pbxstrings; + sourceTree = ""; + }; + FA322D8F0CEF7523001761B3 /* Products */ = { + isa = PBXGroup; + children = ( + ); + name = Products; + sourceTree = ""; + }; + FA322D970CEF752C001761B3 /* doc */ = { + isa = PBXGroup; + children = ( + FA322D980CEF752C001761B3 /* .cvsignore */, + FA322D990CEF752C001761B3 /* CVS.txt */, + FA322D9A0CEF752C001761B3 /* FAQ.txt */, + FA322D9B0CEF752C001761B3 /* Makefile.am */, + FA322D9C0CEF752C001761B3 /* Platforms.txt */, + FA322D9D0CEF752C001761B3 /* Protocol.txt */, + FA322D9E0CEF752C001761B3 /* README-AUX.txt */, + FA322D9F0CEF752C001761B3 /* README-BeOS.txt */, + FA322DA00CEF752C001761B3 /* RFC.txt */, + FA322DA10CEF752C001761B3 /* sample-ngircd.conf */, + FA322DA20CEF752C001761B3 /* src */, + FA322DA90CEF752C001761B3 /* SSL.txt */, + FA322DAA0CEF752C001761B3 /* Zeroconf.txt */, + ); + name = doc; + path = ../../doc; + sourceTree = SOURCE_ROOT; + }; + FA322DA20CEF752C001761B3 /* src */ = { + isa = PBXGroup; + children = ( + FA322DA30CEF752C001761B3 /* .cvsignore */, + FA322DA40CEF752C001761B3 /* Doxyfile */, + FA322DA50CEF752C001761B3 /* footer.inc.html */, + FA322DA60CEF752C001761B3 /* header.inc.html */, + FA322DA70CEF752C001761B3 /* Makefile.am */, + FA322DA80CEF752C001761B3 /* ngircd-doc.css */, + ); + path = src; + sourceTree = ""; }; -/* End PBXHeadersBuildPhase section */ + FA322DAB0CEF7538001761B3 /* man */ = { + isa = PBXGroup; + children = ( + FA322DAC0CEF7538001761B3 /* .cvsignore */, + FA322DAD0CEF7538001761B3 /* Makefile.am */, + FA322DAE0CEF7538001761B3 /* ngircd.8.tmpl */, + FA322DAF0CEF7538001761B3 /* ngircd.conf.5.tmpl */, + ); + name = man; + path = ../../man; + sourceTree = SOURCE_ROOT; + }; +/* End PBXGroup section */ /* Begin PBXNativeTarget section */ 8DD76FA90486AB0100D96B5E /* ngIRCd */ = { isa = PBXNativeTarget; - buildConfigurationList = FA8B5E9508C9DB5600B781D4 /* Build configuration list for PBXNativeTarget "ngIRCd" */; + buildConfigurationList = 1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "ngIRCd" */; buildPhases = ( - 8DD76FAA0486AB0100D96B5E /* Headers */, 8DD76FAB0486AB0100D96B5E /* Sources */, 8DD76FAD0486AB0100D96B5E /* Frameworks */, - 8DD76FAE0486AB0100D96B5E /* Rez */, 8DD76FAF0486AB0100D96B5E /* CopyFiles */, ); buildRules = ( ); - buildSettings = { - GCC_PREPROCESSOR_DEFINITIONS = "SYSCONFDIR='\"/opt/ngircd/etc\"'"; - GCC_TREAT_WARNINGS_AS_ERRORS = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_PARAMETER = YES; - GCC_WARN_UNUSED_VALUE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRODUCT_NAME = ngIRCd; - WARNING_CFLAGS = "-Wall"; - }; dependencies = ( ); name = ngIRCd; productInstallPath = "$(HOME)/bin"; productName = ngIRCd; - productReference = FADE2B7B05F14B9F0081A16E /* ngIRCd */; - productType = "com.apple.product-type.tool"; - }; - FADE2C5E05F1511B0081A16E /* portabtest */ = { - isa = PBXNativeTarget; - buildConfigurationList = FA8B5E9908C9DB5600B781D4 /* Build configuration list for PBXNativeTarget "portabtest" */; - buildPhases = ( - FADE2C5F05F1511B0081A16E /* Headers */, - FADE2C7C05F1511B0081A16E /* Sources */, - FADE2C9605F1511B0081A16E /* Frameworks */, - FADE2C9705F1511B0081A16E /* Rez */, - FADE2C9805F1511B0081A16E /* CopyFiles */, - ); - buildRules = ( - ); - buildSettings = { - GCC_TREAT_WARNINGS_AS_ERRORS = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_PARAMETER = YES; - GCC_WARN_UNUSED_VALUE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - PRODUCT_NAME = portabtest; - WARNING_CFLAGS = "-Wall"; - }; - dependencies = ( - ); - name = portabtest; - productInstallPath = "$(HOME)/bin"; - productName = ngIRCd; - productReference = FADE2C9905F1511B0081A16E /* portabtest */; + productReference = FA322BBA0CEF72E4001761B3 /* ngIRCd */; productType = "com.apple.product-type.tool"; }; /* End PBXNativeTarget section */ @@ -629,213 +578,104 @@ /* Begin PBXProject section */ 08FB7793FE84155DC02AAC07 /* Project object */ = { isa = PBXProject; - buildConfigurationList = FA8B5E9D08C9DB5600B781D4 /* Build configuration list for PBXProject "ngIRCd" */; - buildSettings = { - }; - buildStyles = ( - 014CEA520018CE5811CA2923 /* Development */, - FA2002770807EE21005A2F4C /* Deployment */, - ); + buildConfigurationList = 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "ngIRCd" */; + compatibilityVersion = "Xcode 3.0"; hasScannedForEncodings = 1; mainGroup = 08FB7794FE84155DC02AAC07 /* ngIRCd */; projectDirPath = ""; + projectReferences = ( + { + ProductGroup = FA322D8F0CEF7523001761B3 /* Products */; + ProjectRef = FA322D8E0CEF7523001761B3 /* ngIRCd.xcodeproj */; + }, + ); + projectRoot = ""; targets = ( 8DD76FA90486AB0100D96B5E /* ngIRCd */, - FADE2C5E05F1511B0081A16E /* portabtest */, ); }; /* End PBXProject section */ -/* Begin PBXRezBuildPhase section */ - 8DD76FAE0486AB0100D96B5E /* Rez */ = { - isa = PBXRezBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FADE2C9705F1511B0081A16E /* Rez */ = { - isa = PBXRezBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXRezBuildPhase section */ - /* Begin PBXSourcesBuildPhase section */ 8DD76FAB0486AB0100D96B5E /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - FADE2B2405F14A960081A16E /* irc-op.c in Sources */, - FADE2B2505F14A960081A16E /* irc-login.c in Sources */, - FADE2B2805F14A960081A16E /* irc-oper.c in Sources */, - FADE2B2905F14A960081A16E /* irc-mode.c in Sources */, - FADE2B2D05F14A960081A16E /* conf.c in Sources */, - FADE2B2E05F14A960081A16E /* irc.c in Sources */, - FADE2B3005F14A960081A16E /* parse.c in Sources */, - FADE2B3105F14A960081A16E /* resolve.c in Sources */, - FADE2B3205F14A960081A16E /* channel.c in Sources */, - FADE2B3505F14A960081A16E /* rendezvous.c in Sources */, - FADE2B3A05F14A960081A16E /* irc-server.c in Sources */, - FADE2B3E05F14A960081A16E /* conn-zip.c in Sources */, - FADE2B3F05F14A960081A16E /* irc-write.c in Sources */, - FADE2B4005F14A960081A16E /* match.c in Sources */, - FADE2B4305F14A960081A16E /* conn.c in Sources */, - FADE2B4805F14A960081A16E /* ngircd.c in Sources */, - FADE2B4905F14A960081A16E /* irc-channel.c in Sources */, - FADE2B4B05F14A960081A16E /* lists.c in Sources */, - FADE2B4D05F14A960081A16E /* hash.c in Sources */, - FADE2B4E05F14A960081A16E /* irc-info.c in Sources */, - FADE2B4F05F14A960081A16E /* conn-func.c in Sources */, - FADE2B5005F14A960081A16E /* log.c in Sources */, - FADE2B5105F14A960081A16E /* client.c in Sources */, - FADE2BC305F14DF40081A16E /* strlcpy.c in Sources */, - FADE2BC505F14DF50081A16E /* vsnprintf.c in Sources */, - FADE2CC005F152770081A16E /* tool.c in Sources */, - FA2329EE08C9E7A30093207B /* array.c in Sources */, - FA2329F208C9E7C40093207B /* io.c in Sources */, - FA2329F508C9E8070093207B /* strdup.c in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - FADE2C7C05F1511B0081A16E /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - FADE2CB405F151490081A16E /* portabtest.c in Sources */, + FA322D350CEF74B1001761B3 /* array.c in Sources */, + FA322D360CEF74B1001761B3 /* channel.c in Sources */, + FA322D370CEF74B1001761B3 /* client.c in Sources */, + FA322D380CEF74B1001761B3 /* conf.c in Sources */, + FA322D390CEF74B1001761B3 /* conn-func.c in Sources */, + FA322D3A0CEF74B1001761B3 /* conn-zip.c in Sources */, + FA322D3B0CEF74B1001761B3 /* conn.c in Sources */, + FA322D3C0CEF74B1001761B3 /* hash.c in Sources */, + FA322D3D0CEF74B1001761B3 /* io.c in Sources */, + FA322D3E0CEF74B1001761B3 /* irc-channel.c in Sources */, + FA322D3F0CEF74B1001761B3 /* irc-info.c in Sources */, + FA322D400CEF74B1001761B3 /* irc-login.c in Sources */, + FA322D410CEF74B1001761B3 /* irc-mode.c in Sources */, + FA322D420CEF74B1001761B3 /* irc-op.c in Sources */, + FA322D430CEF74B1001761B3 /* irc-oper.c in Sources */, + FA322D440CEF74B1001761B3 /* irc-server.c in Sources */, + FA322D450CEF74B1001761B3 /* irc-write.c in Sources */, + FA322D460CEF74B1001761B3 /* irc.c in Sources */, + FA322D470CEF74B1001761B3 /* lists.c in Sources */, + FA322D480CEF74B1001761B3 /* log.c in Sources */, + FA322D490CEF74B1001761B3 /* match.c in Sources */, + FA322D4A0CEF74B1001761B3 /* ngircd.c in Sources */, + FA322D4B0CEF74B1001761B3 /* parse.c in Sources */, + FA322D4C0CEF74B1001761B3 /* rendezvous.c in Sources */, + FA322D4D0CEF74B1001761B3 /* resolve.c in Sources */, + FA322DBE0CEF7766001761B3 /* tool.c in Sources */, + FAE5CC2E0CF2308A007D69B6 /* numeric.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ - FA8B5E9608C9DB5600B781D4 /* Development */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - PRODUCT_NAME = ngIRCd; - ZERO_LINK = YES; - }; - name = Development; - }; - FA8B5E9708C9DB5600B781D4 /* Deployment */ = { + 1DEB928708733DD80010E9CD /* Default */ = { isa = XCBuildConfiguration; buildSettings = { - GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_OPTIMIZATION_LEVEL = 2; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_MODEL_TUNING = G5; + INSTALL_PATH = /usr/local/bin; PRODUCT_NAME = ngIRCd; - ZERO_LINK = NO; }; - name = Deployment; + name = Default; }; - FA8B5E9A08C9DB5600B781D4 /* Development */ = { + 1DEB928B08733DD80010E9CD /* Default */ = { isa = XCBuildConfiguration; buildSettings = { - GCC_ENABLE_FIX_AND_CONTINUE = YES; - GCC_GENERATE_DEBUGGING_SYMBOLS = YES; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_TREAT_WARNINGS_AS_ERRORS = NO; - PRODUCT_NAME = portabtest; - ZERO_LINK = YES; - }; - name = Development; - }; - FA8B5E9B08C9DB5600B781D4 /* Deployment */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_ENABLE_FIX_AND_CONTINUE = NO; - GCC_GENERATE_DEBUGGING_SYMBOLS = NO; - GCC_OPTIMIZATION_LEVEL = 2; - GCC_TREAT_WARNINGS_AS_ERRORS = NO; - PRODUCT_NAME = portabtest; - ZERO_LINK = NO; - }; - name = Deployment; - }; - FA8B5E9E08C9DB5600B781D4 /* Development */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PREPROCESSOR_DEFINITIONS = "SYSCONFDIR='\"/opt/ngircd/etc\"'"; - GCC_TREAT_WARNINGS_AS_ERRORS = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + ARCHS = ( + ppc, + i386, + ); GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_PEDANTIC = YES; - GCC_WARN_SHADOW = YES; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - GCC_WARN_UNINITIALIZED_AUTOS = NO; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_PARAMETER = YES; - GCC_WARN_UNUSED_VALUE = YES; GCC_WARN_UNUSED_VARIABLE = YES; - WARNING_CFLAGS = "-Wall"; + PREBINDING = NO; + SDKROOT = "$(DEVELOPER_SDK_DIR)/MacOSX10.5.sdk"; }; - name = Development; - }; - FA8B5E9F08C9DB5600B781D4 /* Deployment */ = { - isa = XCBuildConfiguration; - buildSettings = { - GCC_PREPROCESSOR_DEFINITIONS = "SYSCONFDIR='\"/opt/ngircd/etc\"'"; - GCC_TREAT_WARNINGS_AS_ERRORS = YES; - GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_CHECK_SWITCH_STATEMENTS = YES; - GCC_WARN_INITIALIZER_NOT_FULLY_BRACKETED = YES; - GCC_WARN_MISSING_PARENTHESES = YES; - GCC_WARN_PEDANTIC = YES; - GCC_WARN_SHADOW = YES; - GCC_WARN_SIGN_COMPARE = YES; - GCC_WARN_TYPECHECK_CALLS_TO_PRINTF = YES; - GCC_WARN_UNINITIALIZED_AUTOS = NO; - GCC_WARN_UNKNOWN_PRAGMAS = YES; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_LABEL = YES; - GCC_WARN_UNUSED_PARAMETER = YES; - GCC_WARN_UNUSED_VALUE = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - WARNING_CFLAGS = "-Wall"; - }; - name = Deployment; + name = Default; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ - FA8B5E9508C9DB5600B781D4 /* Build configuration list for PBXNativeTarget "ngIRCd" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - FA8B5E9608C9DB5600B781D4 /* Development */, - FA8B5E9708C9DB5600B781D4 /* Deployment */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Development; - }; - FA8B5E9908C9DB5600B781D4 /* Build configuration list for PBXNativeTarget "portabtest" */ = { + 1DEB928508733DD80010E9CD /* Build configuration list for PBXNativeTarget "ngIRCd" */ = { isa = XCConfigurationList; buildConfigurations = ( - FA8B5E9A08C9DB5600B781D4 /* Development */, - FA8B5E9B08C9DB5600B781D4 /* Deployment */, + 1DEB928708733DD80010E9CD /* Default */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Development; + defaultConfigurationName = Default; }; - FA8B5E9D08C9DB5600B781D4 /* Build configuration list for PBXProject "ngIRCd" */ = { + 1DEB928908733DD80010E9CD /* Build configuration list for PBXProject "ngIRCd" */ = { isa = XCConfigurationList; buildConfigurations = ( - FA8B5E9E08C9DB5600B781D4 /* Development */, - FA8B5E9F08C9DB5600B781D4 /* Deployment */, + 1DEB928B08733DD80010E9CD /* Default */, ); defaultConfigurationIsVisible = 0; - defaultConfigurationName = Development; + defaultConfigurationName = Default; }; /* End XCConfigurationList section */ }; Index: doc/.cvsignore =================================================================== RCS file: doc/.cvsignore diff -N doc/.cvsignore --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ doc/.cvsignore 28 Dec 2006 13:20:08 -0000 1.1 @@ -0,0 +1,2 @@ +Makefile +Makefile.in Index: doc/CVS.txt =================================================================== RCS file: /srv/cvs/ngircd/ngircd/doc/CVS.txt,v retrieving revision 1.8.2.1 retrieving revision 1.9 diff -u -p -r1.8.2.1 -r1.9 --- doc/CVS.txt 2 Aug 2006 09:04:20 -0000 1.8.2.1 +++ doc/CVS.txt 3 Aug 2006 14:37:29 -0000 1.9 @@ -54,4 +54,4 @@ repository would be handy, please contac -- -$Id: CVS.txt,v 1.8.2.1 2006/08/02 09:04:20 alex Exp $ +$Id: CVS.txt,v 1.9 2006/08/03 14:37:29 alex Exp $ Index: doc/Makefile.am =================================================================== RCS file: /srv/cvs/ngircd/ngircd/doc/Makefile.am,v retrieving revision 1.21 retrieving revision 1.22 diff -u -p -r1.21 -r1.22 --- doc/Makefile.am 29 Nov 2005 20:59:57 -0000 1.21 +++ doc/Makefile.am 20 Nov 2007 21:39:35 -0000 1.22 @@ -1,6 +1,6 @@ # # ngIRCd -- The Next Generation IRC Daemon -# Copyright (c)2001-2003 by Alexander Barton (alex@barton.de) +# Copyright (c)2001-2007 by Alexander Barton (alex@barton.de) # # Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen # der GNU General Public License (GPL), wie von der Free Software Foundation @@ -9,13 +9,13 @@ # Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste # der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS. # -# $Id: Makefile.am,v 1.21 2005/11/29 20:59:57 alex Exp $ +# $Id: Makefile.am,v 1.22 2007/11/20 21:39:35 alex Exp $ # SUBDIRS = src EXTRA_DIST = CVS.txt FAQ.txt Protocol.txt Platforms.txt README-AUX.txt \ - README-BeOS.txt RFC.txt Zeroconf.txt sample-ngircd.conf + README-BeOS.txt RFC.txt SSL.txt Zeroconf.txt sample-ngircd.conf maintainer-clean-local: rm -f Makefile Makefile.in Index: doc/Platforms.txt =================================================================== RCS file: /srv/cvs/ngircd/ngircd/doc/Platforms.txt,v retrieving revision 1.14.2.2 retrieving revision 1.18 diff -u -p -r1.14.2.2 -r1.18 --- doc/Platforms.txt 3 Apr 2007 22:08:51 -0000 1.14.2.2 +++ doc/Platforms.txt 8 Oct 2006 14:09:16 -0000 1.18 @@ -74,4 +74,4 @@ Notes (3) Using the kqueue() IO interface. -- -$Id: Platforms.txt,v 1.14.2.2 2007/04/03 22:08:51 fw Exp $ +$Id: Platforms.txt,v 1.18 2006/10/08 14:09:16 alex Exp $ Index: doc/Protocol.txt =================================================================== RCS file: /srv/cvs/ngircd/ngircd/doc/Protocol.txt,v retrieving revision 1.13 retrieving revision 1.14 diff -u -p -r1.13 -r1.14 --- doc/Protocol.txt 27 Aug 2005 19:00:06 -0000 1.13 +++ doc/Protocol.txt 21 Nov 2007 12:16:35 -0000 1.14 @@ -1,7 +1,7 @@ ngIRCd - Next Generation IRC Server - (c)2001-2003 by Alexander Barton, + (c)2001-2007 Alexander Barton, alex@barton.de, http://www.barton.de/ ngIRCd is free software and published under the @@ -79,6 +79,9 @@ The following are defined peer understands this flag, it will send "MODE +I" and "MODE +b" commands after the server link has been established. +- H: The server supports the "enhanced server handshake", see section II.2 + for a detailed description. + - o: IRC operators are allowed to change channel- and channel-user-modes even if they aren't channel-operator of the affected channel. @@ -90,7 +93,50 @@ The optional parameter is used defined in RFC 2813, section 4.1.1. -II.2 Exchange channel-modes, topics, and persistent channels +II.2 Enhanced Server Handshake + +The "enhanced server handshake" is used when both servers support this IRC+ +extension, which is indicated by the 'H' flag in the sent with +the PASS command, see section II.1. + +It basically means, that after exchanging the PASS and SERVER commands the +server is not registered in the network (as usual), but that IRC numerics +are exchanged until the numeric 376 (ENDOFMOTD) is received. Afterwards the +peer is registered in the network as with the regular IRC protocol. + +A server implementing the enhanced server handshake (and indicating this +using 'H' in the ) MUST ignore all unknown numerics to it +silently. + +In addition, such a server should at least send the numeric 005 (ISUPPORT) +to its peer, containing the following information. Syntax: =, +one token per IRC parameter. If the server has to send more than 12 token +it must send separate ISUPPORT numerics (this is a limitation of the IRC +protocol which allows at max 15 arguments per command). + + - NICKLEN: Maximum nickname length. Default: 9. + - CASEMAPPING: Case mapping used for nick- and channel name comparing. + Default: "ascii", the chars [a-z] are lowercase of [A-Z]. + - PREFIX: List of channel modes a person can get and the respective prefix + a channel or nickname will get in case the person has it. The order of the + modes goes from most powerful to least powerful. Default: "(ov)@+" + - CHANTYPES: Supported channel prefixes. Default: "#". + - CHANMODES: List of channel modes for 4 types, separated by comma (","): + Mode that adds or removes a nick or address to a list, mode that changes + a setting (both have always has a parameter), mode that changes a setting + and only has a parameter when set, and mode that changes a setting and + never has a parameter. For example "bI,k,l,imnPst". + - CHANLIMIT: Maximum number of channels allowed to join by channel prefix, + for example "#:10". + +Please see for details. + +The information exchanged using ISUPPORT can be used to detect configuration +incompatibilities (different maximum nick name length, for example) and +therefore to disconnect the peer prior to registering it in the network. + + +II.3 Exchange channel-modes, topics, and persistent channels Command: CHANINFO Parameters: + [] @@ -115,4 +161,4 @@ channel mode). In this case shou -- -$Id: Protocol.txt,v 1.13 2005/08/27 19:00:06 alex Exp $ +$Id: Protocol.txt,v 1.14 2007/11/21 12:16:35 alex Exp $ Index: doc/Zeroconf.txt =================================================================== RCS file: /srv/cvs/ngircd/ngircd/doc/Zeroconf.txt,v retrieving revision 1.1.2.1 retrieving revision 1.2 diff -u -p -r1.1.2.1 -r1.2 --- doc/Zeroconf.txt 2 Aug 2006 09:04:20 -0000 1.1.2.1 +++ doc/Zeroconf.txt 3 Aug 2006 14:37:29 -0000 1.2 @@ -37,4 +37,4 @@ Links: -- -$Id: Zeroconf.txt,v 1.1.2.1 2006/08/02 09:04:20 alex Exp $ +$Id: Zeroconf.txt,v 1.2 2006/08/03 14:37:29 alex Exp $ Index: doc/sample-ngircd.conf =================================================================== RCS file: /srv/cvs/ngircd/ngircd/doc/sample-ngircd.conf,v retrieving revision 1.37.2.2 retrieving revision 1.43 diff -u -p -r1.37.2.2 -r1.43 --- doc/sample-ngircd.conf 3 Apr 2007 22:08:51 -0000 1.37.2.2 +++ doc/sample-ngircd.conf 23 Nov 2007 16:26:03 -0000 1.43 @@ -1,4 +1,4 @@ -# $Id: sample-ngircd.conf,v 1.37.2.2 2007/04/03 22:08:51 fw Exp $ +# $Id: sample-ngircd.conf,v 1.43 2007/11/23 16:26:03 fw Exp $ # # This is a sample configuration file for the ngIRCd, which must be adepted @@ -6,6 +6,10 @@ # # Comments are started with "#" or ";". # +# A lot of configuration options in this file start with a ";". You have +# to remove the ";" in front of each variable to actually set a value! +# The disabled variables are shown with example values for completeness. +# # Use "ngircd --configtest" (see manual page ngircd(8)) to validate that the # server interprets the configuration file as expected! # @@ -97,16 +101,21 @@ ;PredefChannelsOnly = no # Maximum number of simultaneous connection the server is allowed - # to accept (<=0: unlimited): - ;MaxConnections = -1 + # to accept (0: unlimited): + ;MaxConnections = 0 # Maximum number of simultaneous connections from a single IP address - # the server will accept (<=0: unlimited): + # the server will accept (0: unlimited): ;MaxConnectionsIP = 5 - # Maximum number of channels a user can be member of (<=0: no limit): + # Maximum number of channels a user can be member of (0: no limit): ;MaxJoins = 10 + # Maximum length of an user nick name (Default: 9, as in RFC 2812). + # Please note that all servers in an IRC network MUST use the same + # maximum nick name length! + ;MaxNickLength = 9 + [Operator] # [Operator] sections are used to define IRC Operators. There may be # more than one [Operator] block, one for each local operator. @@ -145,6 +154,10 @@ # this server should establish the connection). ;Host = connect-to-host.the.net + # IP address to use as _source_ address for the connection. if unspecified, + # ngircd will let the operating system pick an address. + ;Bind = 10.0.0.1 + # Port of the server to which the ngIRCd should connect. If you # assign no port the ngIRCd waits for incoming connections. ;Port = 6667 @@ -160,6 +173,13 @@ # Group of this server (optional) ;Group = 123 + # Set the "Passive" option to "yes" if you don't want this ngIRCd to + # connect to the configured peer (same as leaving the "Port" variable + # empty). The advantage of this option is that you can actually configure + # a port an use the IRC command CONNECT more easily to manually connect + # this specific server later. + ;Passive = no + [Server] # More [Server] sections, if you like ... Index: doc/src/.cvsignore =================================================================== RCS file: doc/src/.cvsignore diff -N doc/src/.cvsignore --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ doc/src/.cvsignore 28 Dec 2006 14:12:45 -0000 1.2 @@ -0,0 +1,3 @@ +Makefile +Makefile.in +html Index: doc/src/Makefile.am =================================================================== RCS file: /srv/cvs/ngircd/ngircd/doc/src/Makefile.am,v retrieving revision 1.2.2.1 retrieving revision 1.3 diff -u -p -r1.2.2.1 -r1.3 --- doc/src/Makefile.am 3 Apr 2007 22:08:52 -0000 1.2.2.1 +++ doc/src/Makefile.am 28 Dec 2006 14:04:28 -0000 1.3 @@ -8,7 +8,7 @@ # (at your option) any later version. # Please read the file COPYING, README and AUTHORS for more information. # -# $Id: Makefile.am,v 1.2.2.1 2007/04/03 22:08:52 fw Exp $ +# $Id: Makefile.am,v 1.3 2006/12/28 14:04:28 alex Exp $ # maintainer-clean-local: Index: man/.cvsignore =================================================================== RCS file: man/.cvsignore diff -N man/.cvsignore --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ man/.cvsignore 28 Dec 2006 13:20:09 -0000 1.1 @@ -0,0 +1,4 @@ +Makefile +Makefile.in +ngircd.8 +ngircd.conf.5 Index: man/Makefile.am =================================================================== RCS file: /srv/cvs/ngircd/ngircd/man/Makefile.am,v retrieving revision 1.5 retrieving revision 1.6 diff -u -p -r1.5 -r1.6 --- man/Makefile.am 4 Apr 2002 13:02:41 -0000 1.5 +++ man/Makefile.am 25 Dec 2006 16:13:26 -0000 1.6 @@ -9,12 +9,25 @@ # Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste # der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS. # -# $Id: Makefile.am,v 1.5 2002/04/04 13:02:41 alex Exp $ +# $Id: Makefile.am,v 1.6 2006/12/25 16:13:26 alex Exp $ # +TEMPLATE_MANS = ngircd.conf.5.tmpl ngircd.8.tmpl + +SUFFIXES = .tmpl . + +.tmpl: + sed \ + -e s@:SBINDIR:@${sbindir}@ \ + -e s@:BINDIR:@${bindir}@ \ + -e s@:ETCDIR:@${sysconfdir}@ \ + <$< >$@ + man_MANS = ngircd.conf.5 ngircd.8 -EXTRA_DIST = $(man_MANS) +CLEANFILES = $(man_MANS) + +EXTRA_DIST = $(TEMPLATE_MANS) maintainer-clean-local: rm -f Makefile Makefile.in Index: man/ngircd.8 =================================================================== RCS file: man/ngircd.8 diff -N man/ngircd.8 --- man/ngircd.8 12 Aug 2005 13:20:54 -0000 1.11 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,80 +0,0 @@ -.\" -.\" $Id: ngircd.8,v 1.11 2005/08/12 13:20:54 alex Exp $ -.\" -.TH ngircd 8 "August 2005" ngircd "ngIRCd Manual" -.SH NAME -ngIRCd \- the next generation IRC daemon -.SH SYNOPSIS -.B ngircd [ -.I Options -.B ] -.SH DESCRIPTION -.BR ngIRCd -is a free open source daemon for the Internet Relay Chat (IRC), -developed under the GNU General Public License (GPL). -.PP -It's written from scratch and is not based upon the original IRCd like -many others. It is easy to configure, supports server links (even with -original ircd's) and runs on hosts with changing IP addresses (such as -dial-in networks). -.PP -Currently supported platforms include AIX, A/UX, FreeBSD, HP-UX, IRIX, -Linux, Mac OS X, NetBSD, OpenBSD, Solaris, and Windows with Cygwin. -.PP -As ngIRCd relies on UNIX standards and uses GNU automake and GNU autoconf -there are good chances that it also supports other UNIX-based operating -systems as well. -.SH OPTIONS -The default behaviour of -.BR ngircd -is to read its standard configuration file (see below), to detach from the -controlling terminal and to wait for clients. -.PP -You can use these options to modify this default: -.TP -\fB\-f\fR \fIfile\fR, \fB\-\-config\fR \fIfile\fR -Use -.I file -as configuration file. -.TP -\fB\-n\fR, \fB\-\-nodaemon\fR -Don't fork a child and don't detach from controlling terminal. -All log messages go to the console and you can use CTRL-C to -terminate the server. -.TP -\fB\-p\fR, \fB\-\-passive\fR -Disable automatic connections to other servers. You can use the IRC command -CONNECT later on as IRC Operator to link this ngIRCd to other servers. -.TP -\fB\-t\fR, \fB\-\-configtest\fR -Read, validate and display the configuration; then exit. -.TP -\fB\-\-version\fR -Output version information and exit. -.TP -\fB\-\-help\fR -Display a brief help text and exit. -.SH FILES -.I /usr/local/etc/ngircd.conf -.RS -The system wide default configuration file. -.RE -.I /usr/local/etc/ngircd.motd -.RS -Default "message of the day" (MOTD). -.RE -.SH AUTHOR -Alexander Barton, -.UR mailto:alex@barton.de -alex@barton.de -.UE -.br -Homepage: -.UR http://ngircd.barton.de/ -http://ngircd.barton.de/ -.UE -.SH "SEE ALSO" -.BR ngircd.conf (5), -.BR ircd (8) -.\" -.\" -eof- Index: man/ngircd.8.tmpl =================================================================== RCS file: man/ngircd.8.tmpl diff -N man/ngircd.8.tmpl --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ man/ngircd.8.tmpl 15 Nov 2007 01:03:29 -0000 1.2 @@ -0,0 +1,81 @@ +.\" +.\" $Id: ngircd.8.tmpl,v 1.2 2007/11/15 01:03:29 fw Exp $ +.\" +.TH ngircd 8 "August 2005" ngircd "ngIRCd Manual" +.SH NAME +ngIRCd \- the next generation IRC daemon +.SH SYNOPSIS +.B ngircd [ +.I Options +.B ] +.SH DESCRIPTION +.BR ngIRCd +is a free open source daemon for the Internet Relay Chat (IRC), +developed under the GNU General Public License (GPL). +.PP +It's written from scratch and is not based upon the original IRCd like +many others. It is easy to configure, supports server links (even with +original ircd's) and runs on hosts with changing IP addresses (such as +dial-in networks). +.PP +Currently supported platforms include AIX, A/UX, FreeBSD, HP-UX, IRIX, +Linux, Mac OS X, NetBSD, OpenBSD, Solaris, and Windows with Cygwin. +.PP +As ngIRCd relies on UNIX standards and uses GNU automake and GNU autoconf +there are good chances that it also supports other UNIX-based operating +systems as well. By default, ngIRCd writes diagnostic and informational messages using +the syslog mechanism. +.SH OPTIONS +The default behaviour of +.BR ngircd +is to read its standard configuration file (see below), to detach from the +controlling terminal and to wait for clients. +.PP +You can use these options to modify this default: +.TP +\fB\-f\fR \fIfile\fR, \fB\-\-config\fR \fIfile\fR +Use +.I file +as configuration file. +.TP +\fB\-n\fR, \fB\-\-nodaemon\fR +Don't fork a child and don't detach from controlling terminal. +All log messages go to the console and you can use CTRL-C to +terminate the server. +.TP +\fB\-p\fR, \fB\-\-passive\fR +Disable automatic connections to other servers. You can use the IRC command +CONNECT later on as IRC Operator to link this ngIRCd to other servers. +.TP +\fB\-t\fR, \fB\-\-configtest\fR +Read, validate and display the configuration; then exit. +.TP +\fB\-\-version\fR +Output version information and exit. +.TP +\fB\-\-help\fR +Display a brief help text and exit. +.SH FILES +.I :ETCDIR:/ngircd.conf +.RS +The system wide default configuration file. +.RE +.I :ETCDIR:/ngircd.motd +.RS +Default "message of the day" (MOTD). +.RE +.SH AUTHOR +Alexander Barton, +.UR mailto:alex@barton.de +alex@barton.de +.UE +.br +Homepage: +.UR http://ngircd.barton.de/ +http://ngircd.barton.de/ +.UE +.SH "SEE ALSO" +.BR ngircd.conf (5), +.BR ircd (8) +.\" +.\" -eof- Index: man/ngircd.conf.5 =================================================================== RCS file: man/ngircd.conf.5 diff -N man/ngircd.conf.5 --- man/ngircd.conf.5 11 Dec 2006 22:08:14 -0000 1.20.2.1 +++ /dev/null 1 Jan 1970 00:00:00 -0000 @@ -1,256 +0,0 @@ -.\" -.\" $Id: ngircd.conf.5,v 1.20.2.1 2006/12/11 22:08:14 fw Exp $ -.\" -.TH ngircd.conf 5 "August 2005" ngircd "ngIRCd Manual" -.SH NAME -ngircd.conf \- configuration file of ngIRCd -.SH SYNOPSIS -.B /usr/local/etc/ngircd.conf -.SH DESCRIPTION -.BR ngircd.conf -is the configuration file of the -.BR ngircd (8) -Internet Relay Chat (IRC) daemon which you should adept to your local -preferences and needs. -.SH "FILE FORMAT" -The file consists of sections and parameters. A section begins with the name -of the section in square brackets and continues until the next section -begins. -.PP -Sections contain parameters of the form -.PP -.RS -.I name -= -.I value -.RE -.PP -Empty lines and any line beginning with a semicolon (';') or a hash ('#') -character is treated as a comment and will be ignored. -.PP -The file format is line-based - that means, each newline-terminated line -represents either a comment, a section name or a parameter. -.PP -Section and parameter names are not case sensitive. -.SH "SECTION OVERVIEW" -The file can contain blocks of four types: [Global], [Operator], [Server], -and [Channel]. -.PP -In the -.I [Global] -section, there is the main configuration like the server name and the -ports on which the server should be listening. IRC operators of this -server are defined in -.I [Operator] -blocks. -.I [Server] -is the section where server links are configured. And -.I [Channel] -blocks are used to configure pre-defined ("persistent") IRC channels. -.PP -There can be more than one [Operator], [Server] and [Channel] sections -per configuration file, but only one [Global] section. -.SH [GLOBAL] -The -.I [Global] -section is used to define the server main configuration, like the server -name and the ports on which the server should be listening. -.TP -\fBName\fR -Server name in the IRC network -.TP -\fBInfo\fR -Info text of the server. This will be shown by WHOIS and LINKS requests for -example. -.TP -\fBAdminInfo1\fR, \fBAdminInfo2\fR, \fBAdminEMail\fR -Information about the server and the administrator, used by the ADMIN -command. -.TP -\fBPorts\fR -Ports on which the server should listen. There may be more than one port, -separated with ','. Default: 6667. -.TP -\fBListen\fR -The IP address on which the server should listen. Default is empty, so -the server listens on all configured IP addresses and interfaces. -.TP -\fBMotdFile\fR -Text file with the "message of the day" (MOTD). This message will be shown -to all users connecting to the server. -.TP -\fBMotdPhrase\fR -A simple Phrase (<256 chars) if you don't want to use a MOTD file. -If it is set no MotdFile will be read at all. -.TP -\fBServerUID\fR -User ID under which the server should run; you can use the name of the user -or the numerical ID. -.PP -.RS -.B Attention: -.br -For this to work the server must have been -started with root privileges! In addition, the configuration and MOTD files -must be readable by this user, otherwise RESTART and REHASH won't work! -.RE -.TP -\fBServerGID\fR -Group ID under which the ngIRCd should run; you can use the name of the -group or the numerical ID. -.PP -.RS -.B Attention: -.br -For this to work the server must have -been started with root privileges! -.RE -.TP -\fBChrootDir\fR -A directory to chroot in when everything is initialized. It doesn't need -to be populated if ngIRCd is compiled as a static binary. By default ngIRCd -won't use the chroot() feature. -.PP -.RS -.B Attention: -.br -For this to work the server must have -been started with root privileges! -.RE -.TP -\fBPidFile\fR -This tells ngIRCd to write its current process ID to a file. Note that the -pidfile is written AFTER chroot and switching the user ID, i. e. the -directory the pidfile resides in must be writeable by the ngIRCd user and -exist in the chroot directory (if configured, see above). -.RE -.TP -\fBPingTimeout\fR -After seconds of inactivity the server will send a PING to -the peer to test whether it is alive or not. Default: 120. -.TP -\fBPongTimeout\fR -If a client fails to answer a PING with a PONG within -seconds, it will be disconnected by the server. Default: 20. -.TP -\fBConnectRetry\fR -The server tries every seconds to establish a link to not yet -(or no longer) connected servers. Default: 60. -.TP -\fBOperCanUseMode\fR -Should IRC Operators be allowed to use the MODE command even if they are -not(!) channel-operators? Default: no. -.TP -\fBOperServerMode\fR -If OperCanUseMode is enabled, this may lead the compatibility problems with -Servers that run the ircd-irc2 Software. This Option "masks" mode requests -by non-chanops as if they were coming from the server. Default: no. -.TP -\fBPredefChannelsOnly\fR -If enabled, no new channels can be created. Useful if -you do not want to have channels other than those defined in -the config file. -.TP -\fBMaxConnections\fR -Maximum number of simultaneous connection the server is allowed to accept -(<=0: unlimited). Default: -1. -.TP -\fBMaxConnectionsIP\fR -Maximum number of simultaneous connections from a single IP address that -the server will accept (<=0: unlimited). This configuration options lowers -the risk of denial of service attacks (DoS). Default: 5. -.TP -\fBMaxJoins\fR -Maximum number of channels a user can be member of (<=0: no limit). -Default: 10. -.SH [OPERATOR] -.I [Operator] -sections are used to define IRC Operators. There may be more than one -.I [Operator] -block, one for each local operator. -.TP -\fBName\fR -ID of the operator (may be different of the nick name). -.TP -\fBPassword\fR -Password of the IRC operator. -.TP -\fBMask\fR -Mask that is to be checked before an /OPER for this account is accepted. -Example: nick!ident@*.example.com -.SH [SERVER] -Other servers are configured in -.I [Server] -sections. If you configure a port for the connection, then this ngIRCd -tries to connect to to the other server on the given port; if not, it waits -for the other server to connect. -.PP -The ngIRCd allows "server groups": You can assign an "ID" to every server -with which you want this ngIRCd to link. If a server of a group won't -answer, the ngIRCd tries to connect to the next server in the given group. -But ngIRCd never tries to connect to two servers with the same group ID. -.PP -There may be more than one -.I [Server] -block. -.TP -\fBName\fR -IRC name of the server -.TP -\fBHost\fR -Internet host name of the peer -.TP -\fBPort\fR -Port of the server to which the ngIRCd should connect. If you assign no port -the ngIRCd waits for incoming connections. -.TP -\fBMyPassword\fR -Own password for this connection. This password has to be configured as -"PeerPassword" on the other server. Must not have ':' as first character. -.TP -\fBPeerPassword\fR -Foreign password for this connection. This password has to be configured as -"MyPassword" on the other server. -.TP -\fBGroup\fR -Group of this server (optional). -.SH [CHANNEL] -Pre-defined channels can be configured in -.I [Channel] -sections. Such channels are created by the server when starting up and even -persist when there are no more members left. -.PP -Persistent channels are marked with the mode 'P', which can be set and unset -by IRC operators like other modes on the fly. -.PP -There may be more than one -.I [Channel] -block. -.TP -\fBName\fR -Name of the channel -.TP -\fBTopic\fR -Topic for this channel -.TP -\fBModes\fR -Initial channel modes. -.SH HINTS -It's wise to use "ngircd --configtest" to validate the configuration file -after changing it. See -.BR ngircd (8) -for details. -.SH AUTHOR -Alexander Barton, -.UR mailto:alex@barton.de -alex@barton.de -.UE -.br -Homepage: -.UR http://ngircd.barton.de/ -http://ngircd.barton.de/ -.UE -.SH "SEE ALSO" -.BR ngircd (8) -.\" -.\" -eof- Index: man/ngircd.conf.5.tmpl =================================================================== RCS file: man/ngircd.conf.5.tmpl diff -N man/ngircd.conf.5.tmpl --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ man/ngircd.conf.5.tmpl 23 Nov 2007 16:26:03 -0000 1.7 @@ -0,0 +1,281 @@ +.\" +.\" $Id: ngircd.conf.5.tmpl,v 1.7 2007/11/23 16:26:03 fw Exp $ +.\" +.TH ngircd.conf 5 "August 2005" ngircd "ngIRCd Manual" +.SH NAME +ngircd.conf \- configuration file of ngIRCd +.SH SYNOPSIS +.B :ETCDIR:/ngircd.conf +.SH DESCRIPTION +.BR ngircd.conf +is the configuration file of the +.BR ngircd (8) +Internet Relay Chat (IRC) daemon which you should adept to your local +preferences and needs. +.SH "FILE FORMAT" +The file consists of sections and parameters. A section begins with the name +of the section in square brackets and continues until the next section +begins. +.PP +Sections contain parameters of the form +.PP +.RS +.I name += +.I value +.RE +.PP +Empty lines and any line beginning with a semicolon (';') or a hash ('#') +character is treated as a comment and will be ignored. +.PP +The file format is line-based - that means, each newline-terminated line +represents either a comment, a section name or a parameter. +.PP +Section and parameter names are not case sensitive. +.SH "SECTION OVERVIEW" +The file can contain blocks of four types: [Global], [Operator], [Server], +and [Channel]. +.PP +In the +.I [Global] +section, there is the main configuration like the server name and the +ports on which the server should be listening. IRC operators of this +server are defined in +.I [Operator] +blocks. +.I [Server] +is the section where server links are configured. And +.I [Channel] +blocks are used to configure pre-defined ("persistent") IRC channels. +.PP +There can be more than one [Operator], [Server] and [Channel] sections +per configuration file, but only one [Global] section. +.SH [GLOBAL] +The +.I [Global] +section is used to define the server main configuration, like the server +name and the ports on which the server should be listening. +.TP +\fBName\fR +Server name in the IRC network +.TP +\fBInfo\fR +Info text of the server. This will be shown by WHOIS and LINKS requests for +example. +.TP +\fBAdminInfo1\fR, \fBAdminInfo2\fR, \fBAdminEMail\fR +Information about the server and the administrator, used by the ADMIN +command. +.TP +\fBPorts\fR +Ports on which the server should listen. There may be more than one port, +separated with ','. Default: 6667. +.TP +\fBListen\fR +The IP address on which the server should listen. Default is empty, so +the server listens on all configured IP addresses and interfaces. +.TP +\fBMotdFile\fR +Text file with the "message of the day" (MOTD). This message will be shown +to all users connecting to the server. +.TP +\fBMotdPhrase\fR +A simple Phrase (<256 chars) if you don't want to use a MOTD file. +If it is set no MotdFile will be read at all. +.TP +\fBServerUID\fR +User ID under which the server should run; you can use the name of the user +or the numerical ID. +.PP +.RS +.B Attention: +.br +For this to work the server must have been +started with root privileges! In addition, the configuration and MOTD files +must be readable by this user, otherwise RESTART and REHASH won't work! +.RE +.TP +\fBServerGID\fR +Group ID under which the ngIRCd should run; you can use the name of the +group or the numerical ID. +.PP +.RS +.B Attention: +.br +For this to work the server must have +been started with root privileges! +.RE +.TP +\fBChrootDir\fR +A directory to chroot in when everything is initialized. It doesn't need +to be populated if ngIRCd is compiled as a static binary. By default ngIRCd +won't use the chroot() feature. +.PP +.RS +.B Attention: +.br +For this to work the server must have +been started with root privileges! +.RE +.TP +\fBPidFile\fR +This tells ngIRCd to write its current process ID to a file. Note that the +pidfile is written AFTER chroot and switching the user ID, i. e. the +directory the pidfile resides in must be writeable by the ngIRCd user and +exist in the chroot directory (if configured, see above). +.RE +.TP +\fBPingTimeout\fR +After seconds of inactivity the server will send a PING to +the peer to test whether it is alive or not. Default: 120. +.TP +\fBPongTimeout\fR +If a client fails to answer a PING with a PONG within +seconds, it will be disconnected by the server. Default: 20. +.TP +\fBConnectRetry\fR +The server tries every seconds to establish a link to not yet +(or no longer) connected servers. Default: 60. +.TP +\fBOperCanUseMode\fR +Should IRC Operators be allowed to use the MODE command even if they are +not(!) channel-operators? Default: no. +.TP +\fBOperServerMode\fR +If OperCanUseMode is enabled, this may lead the compatibility problems with +Servers that run the ircd-irc2 Software. This Option "masks" mode requests +by non-chanops as if they were coming from the server. Default: no. +.TP +\fBPredefChannelsOnly\fR +If enabled, no new channels can be created. Useful if +you do not want to have channels other than those defined in +the config file. +Default: No. +.TP +\fBNoDNS\fR +If enabled, ngircd will not make DNS lookups when clients connect. +If you configure ngircd to connect to other servers, ngircd may still +perform a DNS lookup if required. +Default: No. +.TP +\fBMaxConnections\fR +Maximum number of simultaneous connection the server is allowed to accept +(0: unlimited). Default: 0. +.TP +\fBMaxConnectionsIP\fR +Maximum number of simultaneous connections from a single IP address that +the server will accept (0: unlimited). This configuration options lowers +the risk of denial of service attacks (DoS). Default: 5. +.TP +\fBMaxJoins\fR +Maximum number of channels a user can be member of (0: no limit). +Default: 10. +.TP +\fBMaxNickLength\fR +Maximum length of an user nick name (Default: 9, as in RFC 2812). Please +note that all servers in an IRC network MUST use the same maximum nick name +length! +.SH [OPERATOR] +.I [Operator] +sections are used to define IRC Operators. There may be more than one +.I [Operator] +block, one for each local operator. +.TP +\fBName\fR +ID of the operator (may be different of the nick name). +.TP +\fBPassword\fR +Password of the IRC operator. +.TP +\fBMask\fR +Mask that is to be checked before an /OPER for this account is accepted. +Example: nick!ident@*.example.com +.SH [SERVER] +Other servers are configured in +.I [Server] +sections. If you configure a port for the connection, then this ngIRCd +tries to connect to to the other server on the given port; if not, it waits +for the other server to connect. +.PP +The ngIRCd allows "server groups": You can assign an "ID" to every server +with which you want this ngIRCd to link. If a server of a group won't +answer, the ngIRCd tries to connect to the next server in the given group. +But ngIRCd never tries to connect to two servers with the same group ID. +.PP +There may be more than one +.I [Server] +block. +.TP +\fBName\fR +IRC name of the server +.TP +\fBHost\fR +Internet host name of the peer +.TP +\fBBind\fR +IP address to use as source IP for the outgoing connection. Default ist +to let the operating system decide. +.TP +\fBPort\fR +Port of the server to which the ngIRCd should connect. If you assign no port +the ngIRCd waits for incoming connections. +.TP +\fBMyPassword\fR +Own password for this connection. This password has to be configured as +"PeerPassword" on the other server. Must not have ':' as first character. +.TP +\fBPeerPassword\fR +Foreign password for this connection. This password has to be configured as +"MyPassword" on the other server. +.TP +\fBGroup\fR +Group of this server (optional). +\fBPassive\fR +Disable automatic connection even if port value is specified. Default: false. +You can use the IRC Operator command CONNECT later on to create the link. +.SH [CHANNEL] +Pre-defined channels can be configured in +.I [Channel] +sections. Such channels are created by the server when starting up and even +persist when there are no more members left. +.PP +Persistent channels are marked with the mode 'P', which can be set and unset +by IRC operators like other modes on the fly. +.PP +There may be more than one +.I [Channel] +block. +.TP +\fBName\fR +Name of the channel +.TP +\fBTopic\fR +Topic for this channel +.TP +\fBModes\fR +Initial channel modes. +.TP +\fBKey\fR +Sets initial channel key (only relevant if mode k is set) +.TP +\fBMaxUsers\fR +Set maximum user limit for this channel (only relevant if mode l is set) +.SH HINTS +It's wise to use "ngircd --configtest" to validate the configuration file +after changing it. See +.BR ngircd (8) +for details. +.SH AUTHOR +Alexander Barton, +.UR mailto:alex@barton.de +alex@barton.de +.UE +.br +Homepage: +.UR http://ngircd.barton.de/ +http://ngircd.barton.de/ +.UE +.SH "SEE ALSO" +.BR ngircd (8) +.\" +.\" -eof- Index: src/.cvsignore =================================================================== RCS file: src/.cvsignore diff -N src/.cvsignore --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/.cvsignore 28 Dec 2006 13:20:09 -0000 1.1 @@ -0,0 +1,5 @@ +Makefile +Makefile.in +config.h +config.h.in +stamp-h1 Index: src/ngircd/.cvsignore =================================================================== RCS file: src/ngircd/.cvsignore diff -N src/ngircd/.cvsignore --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/ngircd/.cvsignore 28 Dec 2006 13:20:10 -0000 1.1 @@ -0,0 +1,8 @@ +Makefile +Makefile.in +.deps +check-help +check-version +cvs-version.h +cvs-version.new +ngircd Index: src/ngircd/Makefile.am =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/Makefile.am,v retrieving revision 1.49 retrieving revision 1.50 diff -u -p -r1.49 -r1.50 --- src/ngircd/Makefile.am 11 Mar 2006 01:48:50 -0000 1.49 +++ src/ngircd/Makefile.am 21 Nov 2007 12:16:36 -0000 1.50 @@ -8,7 +8,7 @@ # (at your option) any later version. # Please read the file COPYING, README and AUTHORS for more information. # -# $Id: Makefile.am,v 1.49 2006/03/11 01:48:50 alex Exp $ +# $Id: Makefile.am,v 1.50 2007/11/21 12:16:36 alex Exp $ # AUTOMAKE_OPTIONS = ../portab/ansi2knr @@ -23,7 +23,7 @@ sbin_PROGRAMS = ngircd ngircd_SOURCES = ngircd.c array.c channel.c client.c conf.c conn.c conn-func.c \ conn-zip.c hash.c io.c irc.c irc-channel.c irc-info.c irc-login.c \ irc-mode.c irc-op.c irc-oper.c irc-server.c irc-write.c lists.c log.c \ - match.c parse.c rendezvous.c resolve.c + match.c numeric.c parse.c rendezvous.c resolve.c ngircd_LDFLAGS = -L../portab -L../tool @@ -32,7 +32,7 @@ ngircd_LDADD = -lngportab -lngtool noinst_HEADERS = ngircd.h array.h channel.h client.h conf.h conn.h conn-func.h \ conn-zip.h hash.h io.h irc.h irc-channel.h irc-info.h irc-login.h \ irc-mode.h irc-op.h irc-oper.h irc-server.h irc-write.h lists.h log.h \ - match.h parse.h rendezvous.h resolve.h \ + match.h numeric.h parse.h rendezvous.h resolve.h \ defines.h messages.h clean-local: Index: src/ngircd/array.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/array.c,v retrieving revision 1.11.2.3 retrieving revision 1.15 diff -u -p -r1.11.2.3 -r1.15 --- src/ngircd/array.c 3 Apr 2007 22:08:52 -0000 1.11.2.3 +++ src/ngircd/array.c 18 Nov 2007 15:05:35 -0000 1.15 @@ -12,7 +12,7 @@ #include "array.h" -static char UNUSED id[] = "$Id: array.c,v 1.11.2.3 2007/04/03 22:08:52 fw Exp $"; +static char UNUSED id[] = "$Id: array.c,v 1.15 2007/11/18 15:05:35 alex Exp $"; #include @@ -28,9 +28,9 @@ static char UNUSED id[] = "$Id: array.c, #define array_UNUSABLE(x) ( !(x)->mem || (0 == (x)->allocated) ) -#define ALIGN_32U(x) (((x)+31U ) & ~(31U)) -#define ALIGN_1024U(x) (((x)+1023U) & ~(1023U)) -#define ALIGN_4096U(x) (((x)+4095U) & ~(4095U)) +#define ALIGN_32U(x) (((x)+(unsigned)31 ) & ~((unsigned)31)) +#define ALIGN_1024U(x) (((x)+(unsigned)1023) & ~((unsigned)1023)) +#define ALIGN_4096U(x) (((x)+(unsigned)4095) & ~((unsigned)4095)) static bool Index: src/ngircd/channel.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/channel.c,v retrieving revision 1.56.2.3 retrieving revision 1.63 diff -u -p -r1.56.2.3 -r1.63 --- src/ngircd/channel.c 3 Apr 2007 22:08:52 -0000 1.56.2.3 +++ src/ngircd/channel.c 11 Jun 2007 20:06:46 -0000 1.63 @@ -17,7 +17,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: channel.c,v 1.56.2.3 2007/04/03 22:08:52 fw Exp $"; +static char UNUSED id[] = "$Id: channel.c,v 1.63 2007/06/11 20:06:46 fw Exp $"; #include "imp.h" #include @@ -602,7 +602,7 @@ Channel_IsMemberOf( CHANNEL *Chan, CLIEN assert( Chan != NULL ); assert( Client != NULL ); - return Get_Cl2Chan(Chan, Client); + return Get_Cl2Chan(Chan, Client) != NULL; } /* Channel_IsMemberOf */ Index: src/ngircd/channel.h =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/channel.h,v retrieving revision 1.29.2.2 retrieving revision 1.33 diff -u -p -r1.29.2.2 -r1.33 --- src/ngircd/channel.h 3 Apr 2007 20:23:31 -0000 1.29.2.2 +++ src/ngircd/channel.h 7 Dec 2006 22:23:39 -0000 1.33 @@ -8,7 +8,7 @@ * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: channel.h,v 1.29.2.2 2007/04/03 20:23:31 fw Exp $ + * $Id: channel.h,v 1.33 2006/12/07 22:23:39 fw Exp $ * * Channel management (header) */ Index: src/ngircd/client.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/client.c,v retrieving revision 1.91.2.2 retrieving revision 1.97 diff -u -p -r1.91.2.2 -r1.97 --- src/ngircd/client.c 3 Apr 2007 22:08:52 -0000 1.91.2.2 +++ src/ngircd/client.c 21 Nov 2007 12:16:36 -0000 1.97 @@ -17,7 +17,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: client.c,v 1.91.2.2 2007/04/03 22:08:52 fw Exp $"; +static char UNUSED id[] = "$Id: client.c,v 1.97 2007/11/21 12:16:36 alex Exp $"; #include "imp.h" #include @@ -94,9 +94,10 @@ Client_Init( void ) This_Server->hops = 0; gethostname( This_Server->host, CLIENT_HOST_LEN ); - h = gethostbyname( This_Server->host ); - if( h ) strlcpy( This_Server->host, h->h_name, sizeof( This_Server->host )); - + if (!Conf_NoDNS) { + h = gethostbyname( This_Server->host ); + if (h) strlcpy(This_Server->host, h->h_name, sizeof(This_Server->host)); + } Client_SetID( This_Server, Conf_ServerName ); Client_SetInfo( This_Server, Conf_ServerInfo ); @@ -608,7 +609,8 @@ Client_ID( CLIENT *Client ) assert( Client != NULL ); #ifdef DEBUG - if( Client->type == CLIENT_USER ) assert( strlen( Client->id ) < CLIENT_NICK_LEN ); + if(Client->type == CLIENT_USER) + assert(strlen(Client->id) < Conf_MaxNickLength); #endif if( Client->id[0] ) return Client->id; @@ -951,7 +953,7 @@ Client_IsValidNick( const char *Nick ) if( Nick[0] == '#' ) return false; if( strchr( goodchars, Nick[0] )) return false; - if( strlen( Nick ) >= CLIENT_NICK_LEN ) return false; + if( strlen( Nick ) >= Conf_MaxNickLength) return false; ptr = Nick; while( *ptr ) Index: src/ngircd/client.h =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/client.h,v retrieving revision 1.42.2.3 retrieving revision 1.46 diff -u -p -r1.42.2.3 -r1.46 --- src/ngircd/client.h 3 Apr 2007 22:08:52 -0000 1.42.2.3 +++ src/ngircd/client.h 23 Jan 2007 16:07:19 -0000 1.46 @@ -8,7 +8,7 @@ * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: client.h,v 1.42.2.3 2007/04/03 22:08:52 fw Exp $ + * $Id: client.h,v 1.46 2007/01/23 16:07:19 alex Exp $ * * Client management (header) */ Index: src/ngircd/conf.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/conf.c,v retrieving revision 1.92.2.4 retrieving revision 1.103 diff -u -p -r1.92.2.4 -r1.103 --- src/ngircd/conf.c 3 Apr 2007 22:08:52 -0000 1.92.2.4 +++ src/ngircd/conf.c 23 Nov 2007 16:26:04 -0000 1.103 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: conf.c,v 1.92.2.4 2007/04/03 22:08:52 fw Exp $"; +static char UNUSED id[] = "$Id: conf.c,v 1.103 2007/11/23 16:26:04 fw Exp $"; #include "imp.h" #include @@ -205,9 +205,11 @@ Conf_Test( void ) printf( " OperCanUseMode = %s\n", Conf_OperCanMode == true ? "yes" : "no" ); printf( " OperServerMode = %s\n", Conf_OperServerMode == true? "yes" : "no" ); printf( " PredefChannelsOnly = %s\n", Conf_PredefChannelsOnly == true ? "yes" : "no" ); - printf( " MaxConnections = %ld\n", Conf_MaxConnections>0 ? Conf_MaxConnections : -1); - printf( " MaxConnectionsIP = %d\n", Conf_MaxConnectionsIP>0 ? Conf_MaxConnectionsIP : -1); - printf( " MaxJoins = %d\n\n", Conf_MaxJoins>0 ? Conf_MaxJoins : -1); + printf( " NoDNS = %s\n", Conf_NoDNS ? "yes" : "no"); + printf( " MaxConnections = %ld\n", Conf_MaxConnections); + printf( " MaxConnectionsIP = %d\n", Conf_MaxConnectionsIP); + printf( " MaxJoins = %d\n", Conf_MaxJoins>0 ? Conf_MaxJoins : -1); + printf( " MaxNickLength = %u\n\n", Conf_MaxNickLength - 1); for( i = 0; i < Conf_Oper_Count; i++ ) { if( ! Conf_Oper[i].name[0] ) continue; @@ -230,7 +232,8 @@ Conf_Test( void ) printf( " Port = %u\n", (unsigned int)Conf_Server[i].port ); printf( " MyPassword = %s\n", Conf_Server[i].pwd_in ); printf( " PeerPassword = %s\n", Conf_Server[i].pwd_out ); - printf( " Group = %d\n\n", Conf_Server[i].group ); + printf( " Group = %d\n", Conf_Server[i].group ); + printf( " Passive = %s\n\n", Conf_Server[i].flags & CONF_SFLAG_DISABLED ? "yes" : "no"); } for( i = 0; i < Conf_Channel_Count; i++ ) { @@ -337,6 +340,24 @@ Conf_EnableServer( char *Name, UINT16 Po GLOBAL bool +Conf_EnablePassiveServer(const char *Name) +{ + /* Enable specified server */ + int i; + + assert( Name != NULL ); + for (i = 0; i < MAX_SERVERS; i++) { + if ((strcasecmp( Conf_Server[i].name, Name ) == 0) && (Conf_Server[i].port > 0)) { + /* BINGO! Enable server */ + Conf_Server[i].flags &= ~CONF_SFLAG_DISABLED; + return true; + } + } + return false; +} /* Conf_EnablePassiveServer */ + + +GLOBAL bool Conf_DisableServer( char *Name ) { /* Enable specified server and adjust port */ @@ -425,12 +446,14 @@ Set_Defaults( bool InitServers ) Conf_Channel_Count = 0; Conf_OperCanMode = false; + Conf_NoDNS = false; Conf_PredefChannelsOnly = false; Conf_OperServerMode = false; - Conf_MaxConnections = -1; + Conf_MaxConnections = 0; Conf_MaxConnectionsIP = 5; Conf_MaxJoins = 10; + Conf_MaxNickLength = CLIENT_NICK_LEN_DEFAULT; /* Initialize server configuration structures */ if( InitServers ) for( i = 0; i < MAX_SERVERS; Init_Server_Struct( &Conf_Server[i++] )); @@ -617,6 +640,27 @@ Check_ArgIsTrue( const char *Arg ) } /* Check_ArgIsTrue */ +static unsigned int Handle_MaxNickLength(int Line, const char *Arg) +{ + unsigned new; + + new = (unsigned) atoi(Arg) + 1; + if (new > CLIENT_NICK_LEN) { + Config_Error(LOG_WARNING, + "%s, line %d: Value of \"MaxNickLength\" exceeds %u!", + NGIRCd_ConfFile, Line, CLIENT_NICK_LEN - 1); + return CLIENT_NICK_LEN; + } + if (new < 2) { + Config_Error(LOG_WARNING, + "%s, line %d: Value of \"MaxNickLength\" must be at least 1!", + NGIRCd_ConfFile, Line); + return 2; + } + return new; +} /* Handle_MaxNickLength */ + + static void Handle_GLOBAL( int Line, char *Var, char *Arg ) { @@ -764,6 +808,11 @@ Handle_GLOBAL( int Line, char *Var, char Conf_PredefChannelsOnly = Check_ArgIsTrue( Arg ); return; } + if( strcasecmp( Var, "NoDNS" ) == 0 ) { + /* don't do reverse dns lookups when clients connect? */ + Conf_NoDNS = Check_ArgIsTrue( Arg ); + return; + } if( strcasecmp( Var, "OperCanUseMode" ) == 0 ) { /* Are IRC operators allowed to use MODE in channels they aren't Op in? */ Conf_OperCanMode = Check_ArgIsTrue( Arg ); @@ -775,7 +824,7 @@ Handle_GLOBAL( int Line, char *Var, char return; } if( strcasecmp( Var, "MaxConnections" ) == 0 ) { - /* Maximum number of connections. Values <= 0 are equal to "no limit". */ + /* Maximum number of connections. 0 -> "no limit". */ #ifdef HAVE_ISDIGIT if( ! isdigit( (int)*Arg )) Config_Error_NaN( Line, Var); else @@ -784,7 +833,7 @@ Handle_GLOBAL( int Line, char *Var, char return; } if( strcasecmp( Var, "MaxConnectionsIP" ) == 0 ) { - /* Maximum number of simultaneous connections from one IP. Values <= 0 -> "no limit" */ + /* Maximum number of simultaneous connections from one IP. 0 -> "no limit" */ #ifdef HAVE_ISDIGIT if( ! isdigit( (int)*Arg )) Config_Error_NaN( Line, Var ); else @@ -793,7 +842,7 @@ Handle_GLOBAL( int Line, char *Var, char return; } if( strcasecmp( Var, "MaxJoins" ) == 0 ) { - /* Maximum number of channels a user can join. Values <= 0 are equal to "no limit". */ + /* Maximum number of channels a user can join. 0 -> "no limit". */ #ifdef HAVE_ISDIGIT if( ! isdigit( (int)*Arg )) Config_Error_NaN( Line, Var ); else @@ -801,6 +850,13 @@ Handle_GLOBAL( int Line, char *Var, char Conf_MaxJoins = atoi( Arg ); return; } + if( strcasecmp( Var, "MaxNickLength" ) == 0 ) { + /* Maximum length of a nick name; must be same on all servers + * within the IRC network! */ + Conf_MaxNickLength = Handle_MaxNickLength(Line, Arg); + return; + } + if( strcasecmp( Var, "Listen" ) == 0 ) { /* IP-Address to bind sockets */ len = strlcpy( Conf_ListenAddress, Arg, sizeof( Conf_ListenAddress )); @@ -881,6 +937,14 @@ Handle_SERVER( int Line, char *Var, char Config_Error_TooLong( Line, Var ); return; } + if (strcasecmp(Var, "Bind") == 0) { + if (ngt_IPStrToBin(Arg, &New_Server.bind_addr)) + return; + + Config_Error(LOG_ERR, "%s, line %d (section \"Server\"): Can't parse IP address \"%s\"", + NGIRCd_ConfFile, Line, Arg); + return; + } if( strcasecmp( Var, "MyPassword" ) == 0 ) { /* Password of this server which is sent to the peer */ if (*Arg == ':') { @@ -920,6 +984,11 @@ Handle_SERVER( int Line, char *Var, char New_Server.group = atoi( Arg ); return; } + if( strcasecmp( Var, "Passive" ) == 0 ) { + if (Check_ArgIsTrue(Arg)) + New_Server.flags |= CONF_SFLAG_DISABLED; + return; + } Config_Error( LOG_ERR, "%s, line %d (section \"Server\"): Unknown variable \"%s\"!", NGIRCd_ConfFile, Line, Var ); @@ -1144,6 +1213,7 @@ Init_Server_Struct( CONF_SERVER *Server Resolve_Init(&Server->res_stat); Server->conn_id = NONE; + Server->bind_addr.s_addr = htonl(INADDR_ANY); } /* Init_Server_Struct */ Index: src/ngircd/conf.h =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/conf.h,v retrieving revision 1.40.2.2 retrieving revision 1.47 diff -u -p -r1.40.2.2 -r1.47 --- src/ngircd/conf.h 3 Apr 2007 22:08:52 -0000 1.40.2.2 +++ src/ngircd/conf.h 23 Nov 2007 16:28:37 -0000 1.47 @@ -8,7 +8,7 @@ * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: conf.h,v 1.40.2.2 2007/04/03 22:08:52 fw Exp $ + * $Id: conf.h,v 1.47 2007/11/23 16:28:37 fw Exp $ * * Configuration management (header) */ @@ -33,7 +33,6 @@ typedef struct _Conf_Oper typedef struct _Conf_Server { char host[HOST_LEN]; /* Hostname */ - char ip[16]; /* IP address (Resolver) */ char name[CLIENT_ID_LEN]; /* IRC-Client-ID */ char pwd_in[CLIENT_PASS_LEN]; /* Password which must be received */ char pwd_out[CLIENT_PASS_LEN]; /* Password to send to peer */ @@ -43,6 +42,7 @@ typedef struct _Conf_Server RES_STAT res_stat; /* Status of the resolver */ int flags; /* Flags */ CONN_ID conn_id; /* ID of server connection or NONE */ + struct in_addr bind_addr; /* source address to use for outgoing connections */ } CONF_SERVER; typedef struct _Conf_Channel @@ -118,6 +118,9 @@ GLOBAL bool Conf_PredefChannelsOnly; /* Are IRC operators allowed to always use MODE? */ GLOBAL bool Conf_OperCanMode; +/* Disable all DNS functions? */ +GLOBAL bool Conf_NoDNS; + /* If an IRC op gives chanop privileges without being a chanop, * ircd2 will ignore the command. This enables a workaround: * It masks the command as coming from the server */ @@ -132,6 +135,8 @@ GLOBAL int Conf_MaxJoins; /* Maximum number of connections per IP address */ GLOBAL int Conf_MaxConnectionsIP; +/* Maximum length of a nick name */ +GLOBAL unsigned int Conf_MaxNickLength; GLOBAL void Conf_Init PARAMS((void)); GLOBAL void Conf_Rehash PARAMS((void)); @@ -142,6 +147,7 @@ GLOBAL void Conf_SetServer PARAMS(( int GLOBAL int Conf_GetServer PARAMS(( CONN_ID Idx )); GLOBAL bool Conf_EnableServer PARAMS(( char *Name, UINT16 Port )); +GLOBAL bool Conf_EnablePassiveServer PARAMS((const char *Name)); GLOBAL bool Conf_DisableServer PARAMS(( char *Name )); GLOBAL bool Conf_AddServer PARAMS(( char *Name, UINT16 Port, char *Host, char *MyPwd, char *PeerPwd )); Index: src/ngircd/conn-func.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/conn-func.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -p -r1.10 -r1.11 --- src/ngircd/conn-func.c 10 May 2006 21:24:01 -0000 1.10 +++ src/ngircd/conn-func.c 4 Oct 2007 15:03:56 -0000 1.11 @@ -16,7 +16,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: conn-func.c,v 1.10 2006/05/10 21:24:01 alex Exp $"; +static char UNUSED id[] = "$Id: conn-func.c,v 1.11 2007/10/04 15:03:56 alex Exp $"; #include "imp.h" #include @@ -39,6 +39,16 @@ Conn_UpdateIdle( CONN_ID Idx ) } +/* + * Get signon time of a connection. + */ +GLOBAL time_t +Conn_GetSignon(CONN_ID Idx) +{ + assert(Idx > NONE); + return My_Connections[Idx].signon; +} + GLOBAL time_t Conn_GetIdle( CONN_ID Idx ) { Index: src/ngircd/conn-func.h =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/conn-func.h,v retrieving revision 1.5.2.1 retrieving revision 1.7 diff -u -p -r1.5.2.1 -r1.7 --- src/ngircd/conn-func.h 3 Apr 2007 22:08:52 -0000 1.5.2.1 +++ src/ngircd/conn-func.h 4 Oct 2007 15:03:56 -0000 1.7 @@ -8,7 +8,7 @@ * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: conn-func.h,v 1.5.2.1 2007/04/03 22:08:52 fw Exp $ + * $Id: conn-func.h,v 1.7 2007/10/04 15:03:56 alex Exp $ * * Connection management: Global functions (header) */ @@ -27,6 +27,7 @@ GLOBAL void Conn_UpdateIdle PARAMS(( CONN_ID Idx )); +GLOBAL time_t Conn_GetSignon PARAMS((CONN_ID Idx)); GLOBAL time_t Conn_GetIdle PARAMS(( CONN_ID Idx )); GLOBAL time_t Conn_LastPing PARAMS(( CONN_ID Idx )); GLOBAL time_t Conn_StartTime PARAMS(( CONN_ID Idx )); Index: src/ngircd/conn-zip.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/conn-zip.c,v retrieving revision 1.11.2.1 retrieving revision 1.16 diff -u -p -r1.11.2.1 -r1.16 --- src/ngircd/conn-zip.c 18 May 2007 22:11:19 -0000 1.11.2.1 +++ src/ngircd/conn-zip.c 17 May 2007 23:34:24 -0000 1.16 @@ -22,7 +22,7 @@ /* enable more zlib related debug messages: */ /* #define DEBUG_ZLIB */ -static char UNUSED id[] = "$Id: conn-zip.c,v 1.11.2.1 2007/05/18 22:11:19 alex Exp $"; +static char UNUSED id[] = "$Id: conn-zip.c,v 1.16 2007/05/17 23:34:24 alex Exp $"; #include "imp.h" #include Index: src/ngircd/conn.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/conn.c,v retrieving revision 1.198.2.6 retrieving revision 1.220 diff -u -p -r1.198.2.6 -r1.220 --- src/ngircd/conn.c 18 May 2007 22:11:19 -0000 1.198.2.6 +++ src/ngircd/conn.c 13 Dec 2007 01:30:16 -0000 1.220 @@ -17,7 +17,7 @@ #include "portab.h" #include "io.h" -static char UNUSED id[] = "$Id: conn.c,v 1.198.2.6 2007/05/18 22:11:19 alex Exp $"; +static char UNUSED id[] = "$Id: conn.c,v 1.220 2007/12/13 01:30:16 fw Exp $"; #include "imp.h" #include @@ -41,12 +41,6 @@ static char UNUSED id[] = "$Id: conn.c,v # include #endif -#ifdef HAVE_ARPA_INET_H -# include -#else -# define PF_INET AF_INET -#endif - #ifdef HAVE_STDINT_H # include /* e.g. for Mac OS X */ #endif @@ -92,7 +86,7 @@ static void Check_Connections PARAMS(( v static void Check_Servers PARAMS(( void )); static void Init_Conn_Struct PARAMS(( CONN_ID Idx )); static bool Init_Socket PARAMS(( int Sock )); -static void New_Server PARAMS(( int Server )); +static void New_Server PARAMS(( int Server, struct in_addr *dest)); static void Simple_Message PARAMS(( int Sock, const char *Msg )); static int Count_Connections PARAMS(( struct sockaddr_in addr )); static int NewListener PARAMS(( const UINT16 Port )); @@ -260,10 +254,10 @@ Conn_Exit( void ) } /* Conn_Exit */ -static int +static unsigned int ports_initlisteners(array *a, void (*func)(int,short)) { - int created = 0; + unsigned int created = 0; size_t len; int fd; UINT16 *port; @@ -291,12 +285,12 @@ ports_initlisteners(array *a, void (*fun } -GLOBAL int +GLOBAL unsigned int Conn_InitListeners( void ) { /* Initialize ports on which the server should accept connections */ - int created; + unsigned int created; if (!io_library_init(CONNECTION_POOL)) { Log(LOG_EMERG, "Cannot initialize IO routines: %s", strerror(errno)); @@ -333,6 +327,42 @@ Conn_ExitListeners( void ) } /* Conn_ExitListeners */ +static void +InitSinaddr(struct sockaddr_in *addr, UINT16 Port) +{ + struct in_addr inaddr; + + memset(addr, 0, sizeof(*addr)); + memset( &inaddr, 0, sizeof(inaddr)); + + addr->sin_family = AF_INET; + addr->sin_port = htons(Port); + inaddr.s_addr = htonl(INADDR_ANY); + addr->sin_addr = inaddr; +} + + +static bool +InitSinaddrListenAddr(struct sockaddr_in *addr, UINT16 Port) +{ + struct in_addr inaddr; + + InitSinaddr(addr, Port); + + if (!Conf_ListenAddress[0]) + return true; + + if (!ngt_IPStrToBin(Conf_ListenAddress, &inaddr)) { + Log( LOG_CRIT, "Can't bind to %s:%u: can't convert ip address \"%s\"", + Conf_ListenAddress, Port, Conf_ListenAddress); + return false; + } + + addr->sin_addr = inaddr; + return true; +} + + /* return new listening port file descriptor or -1 on failure */ static int NewListener( const UINT16 Port ) @@ -340,33 +370,15 @@ NewListener( const UINT16 Port ) /* Create new listening socket on specified port */ struct sockaddr_in addr; - struct in_addr inaddr; int sock; #ifdef ZEROCONF char name[CLIENT_ID_LEN], *info; #endif - /* Server-"Listen"-Socket initialisieren */ - memset( &addr, 0, sizeof( addr )); - memset( &inaddr, 0, sizeof( inaddr )); - addr.sin_family = (sa_family_t)AF_INET; + InitSinaddrListenAddr(&addr, Port); + + addr.sin_family = AF_INET; addr.sin_port = htons( Port ); - if( Conf_ListenAddress[0] ) - { -#ifdef HAVE_INET_ATON - if( inet_aton( Conf_ListenAddress, &inaddr ) == 0 ) -#else - inaddr.s_addr = inet_addr( Conf_ListenAddress ); - if( inaddr.s_addr == (unsigned)-1 ) -#endif - { - Log( LOG_CRIT, "Can't listen on %s:%u: can't convert ip address %s!", - Conf_ListenAddress, Port, Conf_ListenAddress ); - return -1; - } - } - else inaddr.s_addr = htonl( INADDR_ANY ); - addr.sin_addr = inaddr; sock = socket( PF_INET, SOCK_STREAM, 0); if( sock < 0 ) { @@ -1039,11 +1051,11 @@ New_Connection( int Sock ) Client_SetHostname( c, My_Connections[new_sock].host ); - Resolve_Addr(&My_Connections[new_sock].res_stat, &new_addr, - My_Connections[new_sock].sock, cb_Read_Resolver_Result); + if (!Conf_NoDNS) + Resolve_Addr(&My_Connections[new_sock].res_stat, &new_addr, + My_Connections[new_sock].sock, cb_Read_Resolver_Result); - /* Penalty-Zeit setzen */ - Conn_SetPenalty( new_sock, 4 ); + Conn_SetPenalty(new_sock, 4); return new_sock; } /* New_Connection */ @@ -1333,7 +1345,7 @@ Check_Servers( void ) if( Conf_Server[i].group > NONE ) { for (n = 0; n < MAX_SERVERS; n++) { if (n == i) continue; - if ((Conf_Server[n].conn_id > NONE) && + if ((Conf_Server[n].conn_id != NONE) && (Conf_Server[n].group == Conf_Server[i].group)) break; } @@ -1347,6 +1359,7 @@ Check_Servers( void ) /* Okay, try to connect now */ Conf_Server[i].lasttry = time_now; + Conf_Server[i].conn_id = SERVER_WAIT; assert(Resolve_Getfd(&Conf_Server[i].res_stat) < 0); Resolve_Name(&Conf_Server[i].res_stat, Conf_Server[i].host, cb_Connect_to_Server); } @@ -1354,36 +1367,19 @@ Check_Servers( void ) static void -New_Server( int Server ) +New_Server( int Server , struct in_addr *dest) { /* Establish new server link */ - + struct sockaddr_in local_addr; struct sockaddr_in new_addr; - struct in_addr inaddr; int res, new_sock; CLIENT *c; assert( Server > NONE ); - Log( LOG_INFO, "Establishing connection to \"%s\", %s, port %d ... ", Conf_Server[Server].host, - Conf_Server[Server].ip, Conf_Server[Server].port ); - -#ifdef HAVE_INET_ATON - if( inet_aton( Conf_Server[Server].ip, &inaddr ) == 0 ) -#else - memset( &inaddr, 0, sizeof( inaddr )); - inaddr.s_addr = inet_addr( Conf_Server[Server].ip ); - if( inaddr.s_addr == (unsigned)-1 ) -#endif - { - Log( LOG_ERR, "Can't connect to \"%s\": can't convert ip address %s!", - Conf_Server[Server].host, Conf_Server[Server].ip ); - return; - } - - memset( &new_addr, 0, sizeof( new_addr )); - new_addr.sin_family = (sa_family_t)AF_INET; - new_addr.sin_addr = inaddr; + memset(&new_addr, 0, sizeof( new_addr )); + new_addr.sin_family = AF_INET; + new_addr.sin_addr = *dest; new_addr.sin_port = htons( Conf_Server[Server].port ); new_sock = socket( PF_INET, SOCK_STREAM, 0 ); @@ -1394,6 +1390,12 @@ New_Server( int Server ) if( ! Init_Socket( new_sock )) return; + /* if we fail to bind, just continue and let connect() pick a source address */ + InitSinaddr(&local_addr, 0); + local_addr.sin_addr = Conf_Server[Server].bind_addr; + if (bind(new_sock, (struct sockaddr *)&local_addr, (socklen_t)sizeof(local_addr))) + Log(LOG_WARNING, "Can't bind socket to %s: %s!", inet_ntoa(Conf_Server[Server].bind_addr), strerror( errno )); + res = connect(new_sock, (struct sockaddr *)&new_addr, (socklen_t)sizeof(new_addr)); if(( res != 0 ) && ( errno != EINPROGRESS )) { @@ -1401,7 +1403,7 @@ New_Server( int Server ) close( new_sock ); return; } - + if (!array_alloc(&My_ConnArray, sizeof(CONNECTION), (size_t)new_sock)) { Log(LOG_ALERT, "Cannot allocate memory for server connection (socket %d)", @@ -1448,14 +1450,17 @@ New_Server( int Server ) } /* New_Server */ +/** + * Initialize connection structure. + */ static void -Init_Conn_Struct( CONN_ID Idx ) +Init_Conn_Struct(CONN_ID Idx) { - time_t now = time( NULL ); - /* Connection-Struktur initialisieren */ + time_t now = time(NULL); - memset( &My_Connections[Idx], 0, sizeof ( CONNECTION )); + memset(&My_Connections[Idx], 0, sizeof(CONNECTION)); My_Connections[Idx].sock = -1; + My_Connections[Idx].signon = now; My_Connections[Idx].lastdata = now; My_Connections[Idx].lastprivmsg = now; Resolve_Init(&My_Connections[Idx].res_stat); @@ -1505,6 +1510,7 @@ cb_Connect_to_Server(int fd, UNUSED shor /* Read result of resolver sub-process from pipe and start connection */ int i; size_t len; + struct in_addr dest_addr; char readbuf[HOST_LEN + 1]; LogDebug("Resolver: Got forward lookup callback on fd %d, events %d", fd, events); @@ -1513,7 +1519,7 @@ cb_Connect_to_Server(int fd, UNUSED shor if (Resolve_Getfd(&Conf_Server[i].res_stat) == fd ) break; } - + if( i >= MAX_SERVERS) { /* Ops, no matching server found?! */ io_close( fd ); @@ -1522,16 +1528,23 @@ cb_Connect_to_Server(int fd, UNUSED shor } /* Read result from pipe */ - len = Resolve_Read(&Conf_Server[i].res_stat, readbuf, sizeof readbuf -1); + len = Resolve_Read(&Conf_Server[i].res_stat, readbuf, sizeof(readbuf)-1); if (len == 0) return; - + readbuf[len] = '\0'; LogDebug("Got result from resolver: \"%s\" (%u bytes read).", readbuf, len); - strlcpy( Conf_Server[i].ip, readbuf, sizeof( Conf_Server[i].ip )); + if (!ngt_IPStrToBin(readbuf, &dest_addr)) { + Log(LOG_ERR, "Can't connect to \"%s\": can't convert ip address %s!", + Conf_Server[i].host, readbuf); + return; + } + + Log( LOG_INFO, "Establishing connection to \"%s\", %s, port %d ... ", + Conf_Server[i].host, readbuf, Conf_Server[i].port ); /* connect() */ - New_Server(i); + New_Server(i, &dest_addr); } /* cb_Read_Forward_Lookup */ @@ -1598,10 +1611,10 @@ cb_Read_Resolver_Result( int r_fd, UNUSE #ifdef IDENTAUTH ++identptr; if (*identptr) { - Log( LOG_INFO, "IDENT lookup for connection %ld: \"%s\".", i, identptr); - Client_SetUser( c, identptr, true ); + Log(LOG_INFO, "IDENT lookup for connection %d: \"%s\".", i, identptr); + Client_SetUser(c, identptr, true); } else { - Log( LOG_INFO, "IDENT lookup for connection %ld: no result.", i ); + Log(LOG_INFO, "IDENT lookup for connection %d: no result.", i); } #endif } Index: src/ngircd/conn.h =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/conn.h,v retrieving revision 1.42.2.1 retrieving revision 1.45 diff -u -p -r1.42.2.1 -r1.45 --- src/ngircd/conn.h 9 May 2007 13:21:38 -0000 1.42.2.1 +++ src/ngircd/conn.h 4 Oct 2007 15:03:56 -0000 1.45 @@ -8,7 +8,7 @@ * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: conn.h,v 1.42.2.1 2007/05/09 13:21:38 fw Exp $ + * $Id: conn.h,v 1.45 2007/10/04 15:03:56 alex Exp $ * * Connection management (header) */ @@ -59,6 +59,7 @@ typedef struct _Connection char host[HOST_LEN]; /* Hostname */ array rbuf; /* Read buffer */ array wbuf; /* Write buffer */ + time_t signon; /* Signon ("connect") time */ time_t lastdata; /* Last activity */ time_t lastping; /* Last PING */ time_t lastprivmsg; /* Last PRIVMSG */ @@ -83,7 +84,7 @@ GLOBAL long WCounter; GLOBAL void Conn_Init PARAMS((void )); GLOBAL void Conn_Exit PARAMS(( void )); -GLOBAL int Conn_InitListeners PARAMS(( void )); +GLOBAL unsigned int Conn_InitListeners PARAMS(( void )); GLOBAL void Conn_ExitListeners PARAMS(( void )); GLOBAL void Conn_Handler PARAMS(( void )); Index: src/ngircd/defines.h =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/defines.h,v retrieving revision 1.58.2.1 retrieving revision 1.62 diff -u -p -r1.58.2.1 -r1.62 --- src/ngircd/defines.h 18 May 2007 22:11:19 -0000 1.58.2.1 +++ src/ngircd/defines.h 21 Nov 2007 12:16:36 -0000 1.62 @@ -8,7 +8,7 @@ * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: defines.h,v 1.58.2.1 2007/05/18 22:11:19 alex Exp $ + * $Id: defines.h,v 1.62 2007/11/21 12:16:36 alex Exp $ */ @@ -47,14 +47,15 @@ #define CLIENT_ID_LEN 64 /* Max. length of an IRC ID; see RFC RFC 2812 section 1.1 and 1.2.1 */ -#define CLIENT_NICK_LEN 10 /* Max. nick length, see. RFC 2812 - section 1.2.1 */ +#define CLIENT_NICK_LEN_DEFAULT 10 /* Default nick length, see. RFC 2812 + * section 1.2.1 */ +#define CLIENT_NICK_LEN 32 /* Maximum nick name length */ #define CLIENT_PASS_LEN 21 /* Max. password length */ #define CLIENT_USER_LEN 10 /* Max. length of user name ("login") see RFC 2812, section 1.2.1 */ #define CLIENT_NAME_LEN 32 /* Max. length of "real names" */ #define CLIENT_HOST_LEN 64 /* Max. host name length */ -#define CLIENT_MODE_LEN 8 /* Max. lenth of all client modes */ +#define CLIENT_MODE_LEN 9 /* Max. lenth of all client modes */ #define CLIENT_INFO_LEN 64 /* Max. length of server info texts */ #define CLIENT_AWAY_LEN 128 /* Max. length of away messages */ #define CLIENT_FLAGS_LEN 100 /* Max. length of client flags */ @@ -81,7 +82,7 @@ protocol, see doc/Protocol.txt */ #ifdef IRCPLUS -# define IRCPLUSFLAGS "CL" /* Standard IRC+ flags */ +# define IRCPLUSFLAGS "CHL" /* Standard IRC+ flags */ #endif #define STARTUP_DELAY 1 /* Delay outgoing connections n seconds Index: src/ngircd/hash.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/hash.c,v retrieving revision 1.12.2.1 retrieving revision 1.13 diff -u -p -r1.12.2.1 -r1.13 --- src/ngircd/hash.c 2 Dec 2006 13:18:22 -0000 1.12.2.1 +++ src/ngircd/hash.c 6 Oct 2006 21:23:47 -0000 1.13 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: hash.c,v 1.12.2.1 2006/12/02 13:18:22 fw Exp $"; +static char UNUSED id[] = "$Id: hash.c,v 1.13 2006/10/06 21:23:47 fw Exp $"; #include "imp.h" #include Index: src/ngircd/hash.h =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/hash.h,v retrieving revision 1.5.4.1 retrieving revision 1.6 diff -u -p -r1.5.4.1 -r1.6 --- src/ngircd/hash.h 2 Dec 2006 13:18:22 -0000 1.5.4.1 +++ src/ngircd/hash.h 6 Oct 2006 21:23:47 -0000 1.6 @@ -8,7 +8,7 @@ * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: hash.h,v 1.5.4.1 2006/12/02 13:18:22 fw Exp $ + * $Id: hash.h,v 1.6 2006/10/06 21:23:47 fw Exp $ * * Hash calculation (header) */ Index: src/ngircd/io.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/io.c,v retrieving revision 1.16.2.1 retrieving revision 1.28 diff -u -p -r1.16.2.1 -r1.28 --- src/ngircd/io.c 3 Apr 2007 22:08:52 -0000 1.16.2.1 +++ src/ngircd/io.c 2 Jan 2008 10:29:51 -0000 1.28 @@ -12,7 +12,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: io.c,v 1.16.2.1 2007/04/03 22:08:52 fw Exp $"; +static char UNUSED id[] = "$Id: io.c,v 1.28 2008/01/02 10:29:51 fw Exp $"; #include #include @@ -30,7 +30,11 @@ static char UNUSED id[] = "$Id: io.c,v 1 /* #define DEBUG_IO */ typedef struct { +#ifdef PROTOTYPES void (*callback)(int, short); +#else + void (*callback)(); +#endif short what; } io_event; @@ -88,7 +92,7 @@ static bool io_event_change_kqueue(int, static array pollfds; static int poll_maxfd; -static bool io_event_change_poll(int fd, short what); +static bool io_event_change_poll PARAMS((int fd, short what)); #endif #ifdef IO_USE_DEVPOLL @@ -524,7 +528,11 @@ io_close_devpoll(int fd) write(io_masterfd, &p, sizeof p); } #else -static inline void io_close_devpoll(int UNUSED x) { /* NOTHING */ } +static inline void +io_close_devpoll(int UNUSED x) +{ + /* NOTHING */ +} #endif @@ -576,7 +584,11 @@ io_close_select(int fd) } } #else -static inline void io_close_select(int UNUSED x) { /* NOTHING */ } +static inline void +io_close_select(int UNUSED x) +{ + /* NOTHING */ +} #endif @@ -623,6 +635,9 @@ io_event_del(int fd, short what) #endif if (!i) return false; + if (!(i->what & what)) /* event is already disabled */ + return true; + i->what &= ~what; #ifdef IO_USE_DEVPOLL @@ -830,15 +845,9 @@ io_dispatch_kqueue(struct timeval *tv) newevents_len = (int) array_length(&io_evcache, sizeof (struct kevent)); newevents = (newevents_len > 0) ? array_start(&io_evcache) : NULL; assert(newevents_len >= 0); - if (newevents_len < 0) - newevents_len = 0; -#ifdef DEBUG - if (newevents_len) - assert(newevents != NULL); -#endif - ret = kevent(io_masterfd, newevents, newevents_len, kev, - 100, &ts); - if ((newevents_len>0) && ret != -1) + + ret = kevent(io_masterfd, newevents, newevents_len, kev, 100, &ts); + if (newevents && ret != -1) array_trunc(&io_evcache); total += ret; @@ -846,30 +855,31 @@ io_dispatch_kqueue(struct timeval *tv) return total; for (i = 0; i < ret; i++) { - if (kev[i].flags & EV_EOF) { -#ifdef DEBUG - LogDebug("kev.flag has EV_EOF set, setting IO_ERROR", - kev[i].filter, kev[i].ident); +#ifdef DEBUG_IO + LogDebug("fd %d, kev.flags: %x", (int)kev[i].ident, kev[i].flags); #endif + if (kev[i].flags & (EV_EOF|EV_ERROR)) { + if (kev[i].flags & EV_ERROR) + Log(LOG_ERR, "kevent fd %d: EV_ERROR (%s)", + (int)kev[i].ident, strerror((int)kev[i].data)); io_docallback((int)kev[i].ident, IO_ERROR); continue; } switch (kev[i].filter) { - case EVFILT_READ: - io_docallback((int)kev[i].ident, IO_WANTREAD); - break; - case EVFILT_WRITE: - io_docallback((int)kev[i].ident, IO_WANTWRITE); - break; - default: -#ifdef DEBUG - LogDebug("Unknown kev.filter number %d for fd %d", - kev[i].filter, kev[i].ident); /* Fall through */ -#endif - case EV_ERROR: - io_docallback((int)kev[i].ident, IO_ERROR); - break; + case EVFILT_READ: + io_docallback((int)kev[i].ident, IO_WANTREAD); + break; + case EVFILT_WRITE: + io_docallback((int)kev[i].ident, IO_WANTWRITE); + break; + default: + LogDebug("Unknown kev.filter number %d for fd %d", + kev[i].filter, kev[i].ident); + /* Fall through */ + case EV_ERROR: + io_docallback((int)kev[i].ident, IO_ERROR); + break; } } ts.tv_sec = 0; Index: src/ngircd/io.h =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/io.h,v retrieving revision 1.3.2.1 retrieving revision 1.4 diff -u -p -r1.3.2.1 -r1.4 --- src/ngircd/io.h 3 Apr 2007 22:08:52 -0000 1.3.2.1 +++ src/ngircd/io.h 25 Dec 2006 22:53:52 -0000 1.4 @@ -7,7 +7,7 @@ * * I/O abstraction interface header * - * $Id: io.h,v 1.3.2.1 2007/04/03 22:08:52 fw Exp $ + * $Id: io.h,v 1.4 2006/12/25 22:53:52 alex Exp $ */ #ifndef io_H_included Index: src/ngircd/irc-channel.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/irc-channel.c,v retrieving revision 1.35.2.4 retrieving revision 1.40 diff -u -p -r1.35.2.4 -r1.40 --- src/ngircd/irc-channel.c 31 Jul 2007 18:54:30 -0000 1.35.2.4 +++ src/ngircd/irc-channel.c 31 Jul 2007 18:56:14 -0000 1.40 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: irc-channel.c,v 1.35.2.4 2007/07/31 18:54:30 alex Exp $"; +static char UNUSED id[] = "$Id: irc-channel.c,v 1.40 2007/07/31 18:56:14 alex Exp $"; #include "imp.h" #include Index: src/ngircd/irc-info.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/irc-info.c,v retrieving revision 1.33.2.2 retrieving revision 1.41 diff -u -p -r1.33.2.2 -r1.41 --- src/ngircd/irc-info.c 2 Dec 2006 14:26:53 -0000 1.33.2.2 +++ src/ngircd/irc-info.c 11 Dec 2007 11:29:44 -0000 1.41 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: irc-info.c,v 1.33.2.2 2006/12/02 14:26:53 fw Exp $"; +static char UNUSED id[] = "$Id: irc-info.c,v 1.41 2007/12/11 11:29:44 fw Exp $"; #include "imp.h" #include @@ -335,6 +335,41 @@ IRC_NAMES( CLIENT *Client, REQUEST *Req } /* IRC_NAMES */ +static unsigned int +t_diff(time_t *t, const time_t div) +{ + time_t diff, remain; + + diff = *t / div; + + remain = diff * div; + *t -= remain; + + return diff; +} + + +static unsigned int +uptime_days(time_t *now) +{ + return t_diff(now, 60 * 60 * 24); +} + + +static unsigned int +uptime_hrs(time_t *now) +{ + return t_diff(now, 60 * 60); +} + + +static unsigned int +uptime_mins(time_t *now) +{ + return t_diff(now, 60); +} + + GLOBAL bool IRC_STATS( CLIENT *Client, REQUEST *Req ) { @@ -342,75 +377,94 @@ IRC_STATS( CLIENT *Client, REQUEST *Req CONN_ID con; char query; COMMAND *cmd; + time_t time_now; + unsigned int days, hrs, mins; assert( Client != NULL ); assert( Req != NULL ); /* Falsche Anzahl Parameter? */ - if( Req->argc > 2 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command ); + if (Req->argc > 2) + return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, Client_ID(Client), Req->command); /* From aus Prefix ermitteln */ - if( Client_Type( Client ) == CLIENT_SERVER ) from = Client_Search( Req->prefix ); - else from = Client; - if( ! from ) return IRC_WriteStrClient( Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix ); + if (Client_Type(Client) == CLIENT_SERVER) + from = Client_Search(Req->prefix); + else + from = Client; - if( Req->argc == 2 ) - { + if (! from) + return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG, Client_ID( Client ), Req->prefix); + + if (Req->argc == 2) { /* an anderen Server forwarden */ target = Client_Search( Req->argv[1] ); - if(( ! target ) || ( Client_Type( target ) != CLIENT_SERVER )) return IRC_WriteStrClient( from, ERR_NOSUCHSERVER_MSG, Client_ID( from ), Req->argv[1] ); + if(( ! target ) || ( Client_Type( target ) != CLIENT_SERVER )) + return IRC_WriteStrClient( from, ERR_NOSUCHSERVER_MSG, Client_ID( from ), Req->argv[1] ); - if( target != Client_ThisServer( )) - { + if( target != Client_ThisServer()) { /* Ok, anderer Server ist das Ziel: forwarden */ return IRC_WriteStrClientPrefix( target, from, "STATS %s %s", Req->argv[0], Req->argv[1] ); } } - if( Req->argc > 0 ) query = Req->argv[0][0] ? Req->argv[0][0] : '*'; - else query = '*'; + if (Req->argc > 0) + query = Req->argv[0][0] ? Req->argv[0][0] : '*'; + else + query = '*'; - switch ( query ) - { + switch (query) { case 'l': /* Links */ case 'L': - con = Conn_First( ); - while( con != NONE ) - { - cl = Conn_GetClient( con ); - if( cl && (( Client_Type( cl ) == CLIENT_SERVER ) || ( cl == Client ))) - { + time_now = time(NULL); + for (con = Conn_First(); con != NONE ;con = Conn_Next(con)) { + cl = Conn_GetClient(con); + if (!cl) + continue; + if ((Client_Type(cl) == CLIENT_SERVER) || (cl == Client)) { /* Server link or our own connection */ #ifdef ZLIB - if( Conn_Options( con ) & CONN_ZIP ) - { - if( ! IRC_WriteStrClient( from, RPL_STATSLINKINFOZIP_MSG, Client_ID( from ), Client_Mask( cl ), Conn_SendQ( con ), Conn_SendMsg( con ), Zip_SendBytes( con ), Conn_SendBytes( con ), Conn_RecvMsg( con ), Zip_RecvBytes( con ), Conn_RecvBytes( con ), (long)( time( NULL ) - Conn_StartTime( con )))) return DISCONNECTED; + if (Conn_Options(con) & CONN_ZIP) { + if (!IRC_WriteStrClient(from, RPL_STATSLINKINFOZIP_MSG, + Client_ID(from), Client_Mask(cl), Conn_SendQ(con), + Conn_SendMsg(con), Zip_SendBytes(con), Conn_SendBytes(con), + Conn_RecvMsg(con), Zip_RecvBytes(con), Conn_RecvBytes(con), (long)(time_now - Conn_StartTime(con)))) + return DISCONNECTED; + continue; } - else #endif - { - if( ! IRC_WriteStrClient( from, RPL_STATSLINKINFO_MSG, Client_ID( from ), Client_Mask( cl ), Conn_SendQ( con ), Conn_SendMsg( con ), Conn_SendBytes( con ), Conn_RecvMsg( con ), Conn_RecvBytes( con ), (long)( time( NULL ) - Conn_StartTime( con )))) return DISCONNECTED; - } + if (!IRC_WriteStrClient(from, RPL_STATSLINKINFO_MSG, Client_ID(from), + Client_Mask(cl), Conn_SendQ(con), Conn_SendMsg(con), Conn_SendBytes(con), + Conn_RecvMsg(con), Conn_RecvBytes(con), (long)(time_now - Conn_StartTime(con)))) + return DISCONNECTED; } - con = Conn_Next( con ); } break; - case 'm': /* IRC-Befehle */ + case 'm': /* IRC-Commands */ case 'M': cmd = Parse_GetCommandStruct( ); - while( cmd->name ) - { - if( cmd->lcount > 0 || cmd->rcount > 0 ) - { - if( ! IRC_WriteStrClient( from, RPL_STATSCOMMANDS_MSG, Client_ID( from ), cmd->name, cmd->lcount, cmd->bytes, cmd->rcount )) return DISCONNECTED; - } - cmd++; + for (; cmd->name ; cmd++) { + if (cmd->lcount == 0 && cmd->rcount == 0) + continue; + if (!IRC_WriteStrClient(from, RPL_STATSCOMMANDS_MSG, Client_ID(from), + cmd->name, cmd->lcount, cmd->bytes, cmd->rcount)) + return DISCONNECTED; } break; + case 'u': /* server uptime */ + case 'U': + time_now = time(NULL) - NGIRCd_Start; + days = uptime_days(&time_now); + hrs = uptime_hrs(&time_now); + mins = uptime_mins(&time_now); + if (!IRC_WriteStrClient(from, RPL_STATSUPTIME, Client_ID(from), + days, hrs, mins, (unsigned int) time_now)) + return DISCONNECTED; + break; } - IRC_SetPenalty( from, 2 ); - return IRC_WriteStrClient( from, RPL_ENDOFSTATS_MSG, Client_ID( from ), query ); + IRC_SetPenalty(from, 2); + return IRC_WriteStrClient(from, RPL_ENDOFSTATS_MSG, Client_ID(from), query); } /* IRC_STATS */ @@ -707,10 +761,13 @@ IRC_WHOIS( CLIENT *Client, REQUEST *Req if( ! IRC_WriteStrClient( from, RPL_WHOISOPERATOR_MSG, Client_ID( from ), Client_ID( c ))) return DISCONNECTED; } - /* Idle (only local clients) */ - if( Client_Conn( c ) > NONE ) - { - if( ! IRC_WriteStrClient( from, RPL_WHOISIDLE_MSG, Client_ID( from ), Client_ID( c ), Conn_GetIdle( Client_Conn ( c )))) return DISCONNECTED; + /* Idle and signon time (local clients only!) */ + if (Client_Conn(c) > NONE ) { + if (! IRC_WriteStrClient(from, RPL_WHOISIDLE_MSG, + Client_ID(from), Client_ID(c), + (unsigned long)Conn_GetIdle(Client_Conn(c)), + (unsigned long)Conn_GetSignon(Client_Conn(c)))) + return DISCONNECTED; } /* Away? */ @@ -882,18 +939,21 @@ IRC_Send_LUSERS( CLIENT *Client ) } /* IRC_Send_LUSERS */ -static bool Show_MOTD_Start(CLIENT *Client) +static bool +Show_MOTD_Start(CLIENT *Client) { return IRC_WriteStrClient(Client, RPL_MOTDSTART_MSG, Client_ID( Client ), Client_ID( Client_ThisServer( ))); } -static bool Show_MOTD_Sendline(CLIENT *Client, const char *msg) +static bool +Show_MOTD_Sendline(CLIENT *Client, const char *msg) { return IRC_WriteStrClient(Client, RPL_MOTD_MSG, Client_ID( Client ), msg); } -static bool Show_MOTD_End(CLIENT *Client) +static bool +Show_MOTD_End(CLIENT *Client) { return IRC_WriteStrClient( Client, RPL_ENDOFMOTD_MSG, Client_ID( Client )); } @@ -1044,4 +1104,22 @@ IRC_Send_WHO( CLIENT *Client, CHANNEL *C } /* IRC_Send_WHO */ +/** + * Send the ISUPPORT numeric (005). + * This numeric indicates the features that are supported by this server. + * See for details. + */ +GLOBAL bool +IRC_Send_ISUPPORT PARAMS((CLIENT * Client)) +{ + if (!IRC_WriteStrClient(Client, RPL_ISUPPORT1_MSG, Client_ID(Client), + Conf_MaxJoins)) + return DISCONNECTED; + return IRC_WriteStrClient(Client, RPL_ISUPPORT2_MSG, Client_ID(Client), + CHANNEL_NAME_LEN - 1, Conf_MaxNickLength - 1, + COMMAND_LEN - 23, CLIENT_AWAY_LEN - 1, + COMMAND_LEN - 113); +} /* IRC_Send_ISUPPORT */ + + /* -eof- */ Index: src/ngircd/irc-info.h =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/irc-info.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -p -r1.3 -r1.4 --- src/ngircd/irc-info.h 19 Mar 2005 18:43:48 -0000 1.3 +++ src/ngircd/irc-info.h 21 Nov 2007 12:16:36 -0000 1.4 @@ -8,7 +8,7 @@ * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: irc-info.h,v 1.3 2005/03/19 18:43:48 fw Exp $ + * $Id: irc-info.h,v 1.4 2007/11/21 12:16:36 alex Exp $ * * IRC info commands (header) */ @@ -36,6 +36,7 @@ GLOBAL bool IRC_Send_LUSERS PARAMS(( CLI GLOBAL bool IRC_Send_NAMES PARAMS(( CLIENT *Client, CHANNEL *Chan )); GLOBAL bool IRC_Show_MOTD PARAMS(( CLIENT *Client )); GLOBAL bool IRC_Send_WHO PARAMS(( CLIENT *Client, CHANNEL *Chan, bool OnlyOps )); +GLOBAL bool IRC_Send_ISUPPORT PARAMS(( CLIENT *Client )); #endif Index: src/ngircd/irc-login.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/irc-login.c,v retrieving revision 1.49.2.2 retrieving revision 1.54 diff -u -p -r1.49.2.2 -r1.54 --- src/ngircd/irc-login.c 2 Dec 2006 14:26:53 -0000 1.49.2.2 +++ src/ngircd/irc-login.c 21 Nov 2007 12:16:36 -0000 1.54 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: irc-login.c,v 1.49.2.2 2006/12/02 14:26:53 fw Exp $"; +static char UNUSED id[] = "$Id: irc-login.c,v 1.54 2007/11/21 12:16:36 alex Exp $"; #include "imp.h" #include @@ -618,12 +618,7 @@ Hello_User( CLIENT *Client ) /* Features supported by this server (005 numeric, ISUPPORT), * see for details. */ - if (! IRC_WriteStrClient(Client, RPL_ISUPPORT1_MSG, Client_ID(Client), - Conf_MaxJoins)) - return DISCONNECTED; - if (! IRC_WriteStrClient(Client, RPL_ISUPPORT2_MSG, Client_ID(Client), - CHANNEL_NAME_LEN-1, CLIENT_NICK_LEN-1, COMMAND_LEN-23, - CLIENT_AWAY_LEN-1, COMMAND_LEN-113)) + if (! IRC_Send_ISUPPORT(Client)) return DISCONNECTED; Client_SetType( Client, CLIENT_USER ); Index: src/ngircd/irc-mode.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/irc-mode.c,v retrieving revision 1.45.2.2 retrieving revision 1.50 diff -u -p -r1.45.2.2 -r1.50 --- src/ngircd/irc-mode.c 3 Apr 2007 20:23:31 -0000 1.45.2.2 +++ src/ngircd/irc-mode.c 14 Oct 2007 12:08:57 -0000 1.50 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: irc-mode.c,v 1.45.2.2 2007/04/03 20:23:31 fw Exp $"; +static char UNUSED id[] = "$Id: irc-mode.c,v 1.50 2007/10/14 12:08:57 alex Exp $"; #include "imp.h" #include @@ -164,6 +164,7 @@ Client_Mode( CLIENT *Client, REQUEST *Re { case 'i': /* Invisible */ case 's': /* Server messages */ + case 'w': /* Wallops messages */ x[0] = *mode_ptr; break; @@ -431,16 +432,21 @@ Channel_Mode( CLIENT *Client, REQUEST *R break; case 'P': /* Persistent channel */ - if( modeok ) - { - if( set && ( ! Client_OperByMe( Client ))) - { - /* Only IRC operators are allowed to set P mode */ - ok = IRC_WriteStrClient( Origin, ERR_NOPRIVILEGES_MSG, Client_ID( Origin )); - } - else x[0] = 'P'; - } - else ok = IRC_WriteStrClient( Origin, ERR_CHANOPRIVSNEEDED_MSG, Client_ID( Origin ), Channel_Name( Channel )); + if (modeok) { + /* Only IRC operators are allowed to + * set the 'P' channel mode! */ + if (set && ! (Client_OperByMe(Client) + || Client_Type(Client) == CLIENT_SERVER)) { + ok = IRC_WriteStrClient(Origin, + ERR_NOPRIVILEGES_MSG, + Client_ID(Origin)); + } else + x[0] = 'P'; + } else + ok = IRC_WriteStrClient(Origin, + ERR_CHANOPRIVSNEEDED_MSG, + Client_ID(Origin), + Channel_Name(Channel)); break; /* --- Channel user modes --- */ Index: src/ngircd/irc-op.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/irc-op.c,v retrieving revision 1.15.4.2 retrieving revision 1.17 diff -u -p -r1.15.4.2 -r1.17 --- src/ngircd/irc-op.c 3 Apr 2007 20:23:31 -0000 1.15.4.2 +++ src/ngircd/irc-op.c 7 Dec 2006 17:57:20 -0000 1.17 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: irc-op.c,v 1.15.4.2 2007/04/03 20:23:31 fw Exp $"; +static char UNUSED id[] = "$Id: irc-op.c,v 1.17 2006/12/07 17:57:20 fw Exp $"; #include "imp.h" #include Index: src/ngircd/irc-oper.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/irc-oper.c,v retrieving revision 1.27 retrieving revision 1.29 diff -u -p -r1.27 -r1.29 --- src/ngircd/irc-oper.c 23 Jul 2006 15:43:18 -0000 1.27 +++ src/ngircd/irc-oper.c 2 Aug 2007 10:14:26 -0000 1.29 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: irc-oper.c,v 1.27 2006/07/23 15:43:18 alex Exp $"; +static char UNUSED id[] = "$Id: irc-oper.c,v 1.29 2007/08/02 10:14:26 fw Exp $"; #include "imp.h" #include @@ -191,12 +191,12 @@ IRC_CONNECT(CLIENT * Client, REQUEST * R Client_ID(Client)); /* Bad number of parameters? */ - if ((Req->argc != 2) && (Req->argc != 5)) + if ((Req->argc != 1) && (Req->argc != 2) && (Req->argc != 5)) return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, Client_ID(Client), Req->command); /* Invalid port number? */ - if (atoi(Req->argv[1]) < 1) + if ((Req->argc > 1) && atoi(Req->argv[1]) < 1) return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, Client_ID(Client), Req->command); @@ -204,14 +204,22 @@ IRC_CONNECT(CLIENT * Client, REQUEST * R "Got CONNECT command from \"%s\" for \"%s\".", Client_Mask(Client), Req->argv[0]); - if (Req->argc == 2) { + switch (Req->argc) { + case 1: + if (!Conf_EnablePassiveServer(Req->argv[0])) + return IRC_WriteStrClient(Client, ERR_NOSUCHSERVER_MSG, + Client_ID(Client), + Req->argv[0]); + break; + case 2: /* Connect configured server */ if (!Conf_EnableServer (Req->argv[0], (UINT16) atoi(Req->argv[1]))) return IRC_WriteStrClient(Client, ERR_NOSUCHSERVER_MSG, Client_ID(Client), Req->argv[0]); - } else { + break; + default: /* Add server */ if (!Conf_AddServer (Req->argv[0], (UINT16) atoi(Req->argv[1]), Req->argv[2], @@ -255,4 +263,54 @@ IRC_DISCONNECT(CLIENT *Client, REQUEST * } /* IRC_CONNECT */ +GLOBAL bool +IRC_WALLOPS( CLIENT *Client, REQUEST *Req ) +{ + CLIENT *to, *from; + int client_type; + + assert( Client != NULL ); + assert( Req != NULL ); + + if (Req->argc != 1) + return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, Client_ID(Client), Req->command); + + client_type = Client_Type(Client); + switch (client_type) { + case CLIENT_USER: + if (!Client_OperByMe(Client)) + return IRC_WriteStrClient(Client, ERR_NOPRIVILEGES_MSG, Client_ID(Client)); + from = Client; + break; + case CLIENT_SERVER: + from = Client_Search(Req->prefix); + break; + default: + return CONNECTED; + } + + if (!from) + return IRC_WriteStrClient(Client, ERR_NOSUCHNICK_MSG, Client_ID(Client), Req->prefix); + + for (to=Client_First(); to != NULL; to=Client_Next(to)) { + if (Client_Conn(to) < 0) /* no local connection or WALLOPS origin */ + continue; + + client_type = Client_Type(to); + switch (client_type) { + case CLIENT_USER: + if (Client_HasMode(to, 'w')) + IRC_WriteStrClientPrefix(to, from, "WALLOPS :%s", Req->argv[0]); + break; + case CLIENT_SERVER: + if (to != Client) + IRC_WriteStrClientPrefix(to, from, "WALLOPS :%s", Req->argv[0]); + break; + } + } + return CONNECTED; +} + + + /* -eof- */ Index: src/ngircd/irc-oper.h =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/irc-oper.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -p -r1.11 -r1.12 --- src/ngircd/irc-oper.h 19 Mar 2005 18:43:48 -0000 1.11 +++ src/ngircd/irc-oper.h 2 Aug 2007 10:14:26 -0000 1.12 @@ -8,7 +8,7 @@ * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: irc-oper.h,v 1.11 2005/03/19 18:43:48 fw Exp $ + * $Id: irc-oper.h,v 1.12 2007/08/02 10:14:26 fw Exp $ * * IRC operator commands (header) */ @@ -24,6 +24,7 @@ GLOBAL bool IRC_REHASH PARAMS((CLIENT *C GLOBAL bool IRC_RESTART PARAMS((CLIENT *Client, REQUEST *Req )); GLOBAL bool IRC_CONNECT PARAMS((CLIENT *Client, REQUEST *Req )); GLOBAL bool IRC_DISCONNECT PARAMS((CLIENT *Client, REQUEST *Req )); +GLOBAL bool IRC_WALLOPS PARAMS(( CLIENT *Client, REQUEST *Req )); #endif Index: src/ngircd/irc-server.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/irc-server.c,v retrieving revision 1.39.2.3 retrieving revision 1.46 diff -u -p -r1.39.2.3 -r1.46 --- src/ngircd/irc-server.c 3 Apr 2007 20:23:31 -0000 1.39.2.3 +++ src/ngircd/irc-server.c 21 Nov 2007 12:16:36 -0000 1.46 @@ -1,6 +1,6 @@ /* * ngIRCd -- The Next Generation IRC Daemon - * Copyright (c)2001-2006 Alexander Barton (alex@barton.de) + * Copyright (c)2001-2007 Alexander Barton (alex@barton.de) * * 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 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: irc-server.c,v 1.39.2.3 2007/04/03 20:23:31 fw Exp $"; +static char UNUSED id[] = "$Id: irc-server.c,v 1.46 2007/11/21 12:16:36 alex Exp $"; #include "imp.h" #include @@ -35,56 +35,14 @@ static char UNUSED id[] = "$Id: irc-serv #include "log.h" #include "messages.h" #include "parse.h" +#include "numeric.h" #include "ngircd.h" +#include "irc-info.h" #include "exp.h" #include "irc-server.h" -#ifdef IRCPLUS -static bool -Synchronize_Lists( CLIENT *Client ) -{ - CHANNEL *c; - struct list_head *head; - struct list_elem *elem; - - assert( Client != NULL ); - - c = Channel_First(); - - while (c) { - head = Channel_GetListBans(c); - - elem = Lists_GetFirst(head); - while (elem) { - if( ! IRC_WriteStrClient( Client, "MODE %s +b %s", - Channel_Name(c), Lists_GetMask(elem))) - { - return false; - } - elem = Lists_GetNext(elem); - } - - head = Channel_GetListInvites(c); - elem = Lists_GetFirst(head); - while (elem) { - if( ! IRC_WriteStrClient( Client, "MODE %s +I %s", - Channel_Name( c ), Lists_GetMask(elem))) - { - return false; - } - elem = Lists_GetNext(elem); - } - c = Channel_Next(c); - } - return true; -} -#endif - - - - /** * Handler for the IRC command "SERVER". * See RFC 2813 section 4.1.2. @@ -92,12 +50,10 @@ Synchronize_Lists( CLIENT *Client ) GLOBAL bool IRC_SERVER( CLIENT *Client, REQUEST *Req ) { - char str[LINE_LEN], *ptr, *modes, *topic; - CLIENT *from, *c, *cl; - CL2CHAN *cl2chan; - int max_hops, i; - CHANNEL *chan; + char str[LINE_LEN], *ptr; + CLIENT *from, *c; bool ok; + int i; CONN_ID con; assert( Client != NULL ); @@ -166,10 +122,10 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req Client_SetToken( Client, atoi( Req->argv[1] )); } - Log( LOG_NOTICE|LOG_snotice, "Server \"%s\" registered (connection %d, 1 hop - direct link).", Client_ID( Client ), con ); - - Client_SetType( Client, CLIENT_SERVER ); - Conf_SetServer( i, con ); + /* Mark this connection as belonging to an configured server */ + Conf_SetServer(i, con); + + Client_SetType(Client, CLIENT_UNKNOWNSERVER); #ifdef ZLIB /* Kompression initialisieren, wenn erforderlich */ @@ -184,140 +140,23 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req } #endif - /* maximalen Hop Count ermitteln */ - max_hops = 0; - c = Client_First( ); - while( c ) - { - if( Client_Hops( c ) > max_hops ) max_hops = Client_Hops( c ); - c = Client_Next( c ); - } - - /* Alle bisherigen Server dem neuen Server bekannt machen, - * die bisherigen Server ueber den neuen informierenn */ - for( i = 0; i < ( max_hops + 1 ); i++ ) - { - c = Client_First( ); - while( c ) - { - if(( Client_Type( c ) == CLIENT_SERVER ) && ( c != Client ) && ( c != Client_ThisServer( )) && ( Client_Hops( c ) == i )) - { - if( Client_Conn( c ) > NONE ) - { - /* Dem gefundenen Server gleich den neuen - * Server bekannt machen */ - if( ! IRC_WriteStrClient( c, "SERVER %s %d %d :%s", Client_ID( Client ), Client_Hops( Client ) + 1, Client_MyToken( Client ), Client_Info( Client ))) return DISCONNECTED; - } - - /* Den neuen Server ueber den alten informieren */ - if( ! IRC_WriteStrClientPrefix( Client, Client_Hops( c ) == 1 ? Client_ThisServer( ) : Client_Introducer( c ), "SERVER %s %d %d :%s", Client_ID( c ), Client_Hops( c ) + 1, Client_MyToken( c ), Client_Info( c ))) return DISCONNECTED; - } - c = Client_Next( c ); - } - } - - /* alle User dem neuen Server bekannt machen */ - c = Client_First( ); - while( c ) - { - if( Client_Type( c ) == CLIENT_USER ) - { - /* User an neuen Server melden */ - if( ! IRC_WriteStrClient( Client, "NICK %s %d %s %s %d +%s :%s", Client_ID( c ), Client_Hops( c ) + 1, Client_User( c ), Client_Hostname( c ), Client_MyToken( Client_Introducer( c )), Client_Modes( c ), Client_Info( c ))) return DISCONNECTED; - } - c = Client_Next( c ); - } - - /* Channels dem neuen Server bekannt machen */ - chan = Channel_First( ); - while( chan ) - { #ifdef IRCPLUS - /* Send CHANINFO if the peer supports it */ - if( strchr( Client_Flags( Client ), 'C' )) - { -#ifdef DEBUG - Log( LOG_DEBUG, "Sending CHANINFO commands ..." ); -#endif - modes = Channel_Modes( chan ); - topic = Channel_Topic( chan ); - - if( *modes || *topic ) - { - /* send CHANINFO */ - if(( ! strchr( Channel_Modes( chan ), 'k' )) && ( ! strchr( Channel_Modes( chan ), 'l' )) && ( ! *topic )) - { - /* "CHANINFO +" */ - if( ! IRC_WriteStrClient( Client, "CHANINFO %s +%s", Channel_Name( chan ), modes )) return DISCONNECTED; - } - else if(( ! strchr( Channel_Modes( chan ), 'k' )) && ( ! strchr( Channel_Modes( chan ), 'l' ))) - { - /* "CHANINFO + :" */ - if( ! IRC_WriteStrClient( Client, "CHANINFO %s +%s :%s", Channel_Name( chan ), modes, topic )) return DISCONNECTED; - } - else - { - /* "CHANINFO + :" */ - if( ! IRC_WriteStrClient( Client, "CHANINFO %s +%s %s %lu :%s", - Channel_Name( chan ), modes, - strchr( Channel_Modes( chan ), 'k' ) ? Channel_Key( chan ) : "*", - strchr( Channel_Modes( chan ), 'l' ) ? Channel_MaxUsers( chan ) : 0UL, topic )) - { - return DISCONNECTED; - } - } - } - } + if (strchr(Client_Flags(Client), 'H')) { + LogDebug("Peer supports IRC+ extended server handshake ..."); + if (!IRC_Send_ISUPPORT(Client)) + return DISCONNECTED; + return IRC_WriteStrClient(Client, RPL_ENDOFMOTD_MSG, + Client_ID(Client)); + } else { #endif - - /* alle Member suchen */ - cl2chan = Channel_FirstMember( chan ); - snprintf( str, sizeof( str ), "NJOIN %s :", Channel_Name( chan )); - while( cl2chan ) - { - cl = Channel_GetClient( cl2chan ); - assert( cl != NULL ); - - /* Nick, ggf. mit Modes, anhaengen */ - if( str[strlen( str ) - 1] != ':' ) strlcat( str, ",", sizeof( str )); - if( strchr( Channel_UserModes( chan, cl ), 'v' )) strlcat( str, "+", sizeof( str )); - if( strchr( Channel_UserModes( chan, cl ), 'o' )) strlcat( str, "@", sizeof( str )); - strlcat( str, Client_ID( cl ), sizeof( str )); - - if( strlen( str ) > ( LINE_LEN - CLIENT_NICK_LEN - 8 )) - { - /* Zeile senden */ - if( ! IRC_WriteStrClient( Client, "%s", str )) return DISCONNECTED; - snprintf( str, sizeof( str ), "NJOIN %s :", Channel_Name( chan )); - } - - cl2chan = Channel_NextMember( chan, cl2chan ); - } - - /* noch Daten da? */ - if( str[strlen( str ) - 1] != ':') - { - /* Ja; Also senden ... */ - if( ! IRC_WriteStrClient( Client, "%s", str )) return DISCONNECTED; - } - - /* Get next channel ... */ - chan = Channel_Next(chan); - } - + if (Conf_MaxNickLength != CLIENT_NICK_LEN_DEFAULT) + Log(LOG_CRIT, + "Attention: this server uses a non-standard nick length, but the peer doesn't support the IRC+ extended server handshake!"); #ifdef IRCPLUS - if (strchr(Client_Flags(Client), 'L')) { -#ifdef DEBUG - Log(LOG_DEBUG, - "Synchronizing INVITE- and BAN-lists ..."); -#endif - /* Synchronize INVITE- and BAN-lists */ - if (!Synchronize_Lists(Client)) - return DISCONNECTED; } #endif - return CONNECTED; + return IRC_Num_ENDOFMOTD(Client, Req); } else if( Client_Type( Client ) == CLIENT_SERVER ) { @@ -361,8 +200,9 @@ IRC_SERVER( CLIENT *Client, REQUEST *Req IRC_WriteStrServersPrefix( Client, from, "SERVER %s %d %d :%s", Client_ID( c ), Client_Hops( c ) + 1, Client_MyToken( c ), Client_Info( c )); return CONNECTED; - } - else return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command ); + } else + return IRC_WriteStrClient(Client, ERR_NEEDMOREPARAMS_MSG, + Client_ID(Client), Req->command); } /* IRC_SERVER */ Index: src/ngircd/irc-server.h =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/irc-server.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -p -r1.5 -r1.6 --- src/ngircd/irc-server.h 19 Mar 2005 18:43:49 -0000 1.5 +++ src/ngircd/irc-server.h 21 Nov 2007 12:16:36 -0000 1.6 @@ -8,7 +8,7 @@ * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: irc-server.h,v 1.5 2005/03/19 18:43:49 fw Exp $ + * $Id: irc-server.h,v 1.6 2007/11/21 12:16:36 alex Exp $ * * IRC commands for server links (header) */ @@ -22,6 +22,8 @@ GLOBAL bool IRC_SERVER PARAMS((CLIENT *C GLOBAL bool IRC_NJOIN PARAMS((CLIENT *Client, REQUEST *Req )); GLOBAL bool IRC_SQUIT PARAMS((CLIENT *Client, REQUEST *Req )); +GLOBAL bool IRC_ENDOFMOTD_Server PARAMS((CLIENT *Client)); + #endif Index: src/ngircd/irc-write.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/irc-write.c,v retrieving revision 1.20.2.1 retrieving revision 1.21 diff -u -p -r1.20.2.1 -r1.21 --- src/ngircd/irc-write.c 2 Dec 2006 13:06:50 -0000 1.20.2.1 +++ src/ngircd/irc-write.c 12 Aug 2006 11:56:24 -0000 1.21 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: irc-write.c,v 1.20.2.1 2006/12/02 13:06:50 fw Exp $"; +static char UNUSED id[] = "$Id: irc-write.c,v 1.21 2006/08/12 11:56:24 fw Exp $"; #include "imp.h" #include Index: src/ngircd/lists.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/lists.c,v retrieving revision 1.18.2.3 retrieving revision 1.21 diff -u -p -r1.18.2.3 -r1.21 --- src/ngircd/lists.c 3 Apr 2007 22:08:52 -0000 1.18.2.3 +++ src/ngircd/lists.c 29 Jan 2007 21:13:26 -0000 1.21 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: lists.c,v 1.18.2.3 2007/04/03 22:08:52 fw Exp $"; +static char UNUSED id[] = "$Id: lists.c,v 1.21 2007/01/29 21:13:26 fw Exp $"; #include "imp.h" #include Index: src/ngircd/lists.h =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/lists.h,v retrieving revision 1.12.4.1 retrieving revision 1.13 diff -u -p -r1.12.4.1 -r1.13 --- src/ngircd/lists.h 3 Apr 2007 20:23:31 -0000 1.12.4.1 +++ src/ngircd/lists.h 7 Dec 2006 17:57:20 -0000 1.13 @@ -8,7 +8,7 @@ * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: lists.h,v 1.12.4.1 2007/04/03 20:23:31 fw Exp $ + * $Id: lists.h,v 1.13 2006/12/07 17:57:20 fw Exp $ * * Management of IRC lists: ban, invite, ... (header) */ Index: src/ngircd/log.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/log.c,v retrieving revision 1.61.2.1 retrieving revision 1.62 diff -u -p -r1.61.2.1 -r1.62 --- src/ngircd/log.c 2 Dec 2006 13:02:07 -0000 1.61.2.1 +++ src/ngircd/log.c 5 Aug 2006 09:16:21 -0000 1.62 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: log.c,v 1.61.2.1 2006/12/02 13:02:07 fw Exp $"; +static char UNUSED id[] = "$Id: log.c,v 1.62 2006/08/05 09:16:21 fw Exp $"; #include "imp.h" #include Index: src/ngircd/log.h =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/log.h,v retrieving revision 1.19.2.1 retrieving revision 1.20 diff -u -p -r1.19.2.1 -r1.20 --- src/ngircd/log.h 2 Dec 2006 13:02:07 -0000 1.19.2.1 +++ src/ngircd/log.h 5 Aug 2006 09:16:21 -0000 1.20 @@ -8,7 +8,7 @@ * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: log.h,v 1.19.2.1 2006/12/02 13:02:07 fw Exp $ + * $Id: log.h,v 1.20 2006/08/05 09:16:21 fw Exp $ * * Logging functions (header) */ Index: src/ngircd/match.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/match.c,v retrieving revision 1.4.2.1 retrieving revision 1.5 diff -u -p -r1.4.2.1 -r1.5 --- src/ngircd/match.c 2 Dec 2006 13:01:11 -0000 1.4.2.1 +++ src/ngircd/match.c 6 Oct 2006 21:23:47 -0000 1.5 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: match.c,v 1.4.2.1 2006/12/02 13:01:11 fw Exp $"; +static char UNUSED id[] = "$Id: match.c,v 1.5 2006/10/06 21:23:47 fw Exp $"; #include "imp.h" #include Index: src/ngircd/match.h =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/match.h,v retrieving revision 1.3.4.1 retrieving revision 1.4 diff -u -p -r1.3.4.1 -r1.4 --- src/ngircd/match.h 2 Dec 2006 13:01:11 -0000 1.3.4.1 +++ src/ngircd/match.h 6 Oct 2006 21:23:47 -0000 1.4 @@ -8,7 +8,7 @@ * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: match.h,v 1.3.4.1 2006/12/02 13:01:11 fw Exp $ + * $Id: match.h,v 1.4 2006/10/06 21:23:47 fw Exp $ * * Wildcard pattern matching (header) */ Index: src/ngircd/messages.h =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/messages.h,v retrieving revision 1.67.2.2 retrieving revision 1.74 diff -u -p -r1.67.2.2 -r1.74 --- src/ngircd/messages.h 2 Dec 2006 14:26:53 -0000 1.67.2.2 +++ src/ngircd/messages.h 11 Dec 2007 11:29:44 -0000 1.74 @@ -8,7 +8,7 @@ * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: messages.h,v 1.67.2.2 2006/12/02 14:26:53 fw Exp $ + * $Id: messages.h,v 1.74 2007/12/11 11:29:44 fw Exp $ * * IRC numerics (Header) */ @@ -32,6 +32,7 @@ #define RPL_STATSCOMMANDS_MSG "212 %s %s %ld %ld %ld" #define RPL_ENDOFSTATS_MSG "219 %s %c :End of STATS report" #define RPL_UMODEIS_MSG "221 %s +%s" +#define RPL_STATSUPTIME "242 %s :Server Up %u days %u:%02u:%02u" #define RPL_LUSERCLIENT_MSG "251 %s :There are %ld users and %ld services on %ld servers" #define RPL_LUSEROP_MSG "252 %s %lu :operator(s) online" #define RPL_LUSERUNKNOWN_MSG "253 %s %lu :unknown connection(s)" @@ -55,7 +56,7 @@ #define RPL_WHOISOPERATOR_MSG "313 %s %s :is an IRC operator" #define RPL_WHOWASUSER_MSG "314 %s %s %s %s * :%s" #define RPL_ENDOFWHO_MSG "315 %s %s :End of WHO list" -#define RPL_WHOISIDLE_MSG "317 %s %s %ld :seconds idle" +#define RPL_WHOISIDLE_MSG "317 %s %s %lu %lu :seconds idle, signon time" #define RPL_ENDOFWHOIS_MSG "318 %s %s :End of WHOIS list" #define RPL_WHOISCHANNELS_MSG "319 %s %s :" #define RPL_LIST_MSG "322 %s %s %ld :%s" Index: src/ngircd/ngircd.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/ngircd.c,v retrieving revision 1.113.2.2 retrieving revision 1.117 diff -u -p -r1.113.2.2 -r1.117 --- src/ngircd/ngircd.c 5 May 2007 20:25:47 -0000 1.113.2.2 +++ src/ngircd/ngircd.c 21 Nov 2007 12:16:36 -0000 1.117 @@ -12,7 +12,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: ngircd.c,v 1.113.2.2 2007/05/05 20:25:47 alex Exp $"; +static char UNUSED id[] = "$Id: ngircd.c,v 1.117 2007/11/21 12:16:36 alex Exp $"; /** * @file @@ -422,6 +422,7 @@ GLOBAL void NGIRCd_Rehash( void ) { char old_name[CLIENT_ID_LEN]; + unsigned old_nicklen; Log( LOG_NOTICE|LOG_snotice, "Re-reading configuration NOW!" ); NGIRCd_SignalRehash = false; @@ -429,17 +430,22 @@ NGIRCd_Rehash( void ) /* Close down all listening sockets */ Conn_ExitListeners( ); - /* Remember old server name */ + /* Remember old server name and nick name length */ strlcpy( old_name, Conf_ServerName, sizeof old_name ); + old_nicklen = Conf_MaxNickLength; /* Re-read configuration ... */ Conf_Rehash( ); - /* Recover old server name: it can't be changed during run-time */ - if( strcmp( old_name, Conf_ServerName ) != 0 ) - { - strlcpy( Conf_ServerName, old_name, sizeof Conf_ServerName ); - Log( LOG_ERR, "Can't change \"ServerName\" on runtime! Ignored new name." ); + /* Recover old server name and nick name length: these values can't + * be changed during run-time */ + if (strcmp(old_name, Conf_ServerName) != 0 ) { + strlcpy(Conf_ServerName, old_name, sizeof Conf_ServerName); + Log(LOG_ERR, "Can't change \"ServerName\" on runtime! Ignored new name."); + } + if (old_nicklen != Conf_MaxNickLength) { + Conf_MaxNickLength = old_nicklen; + Log(LOG_ERR, "Can't change \"MaxNickLength\" on runtime! Ignored new value."); } /* Create new pre-defined channels */ @@ -797,7 +803,7 @@ NGIRCd_Init( bool NGIRCd_NoDaemon ) if( chdir( pwd->pw_dir ) == 0 ) Log( LOG_DEBUG, "Changed working directory to \"%s\" ...", pwd->pw_dir ); else - Log( LOG_ERR, "Can't change working directory to \"%s\": %s", + Log( LOG_INFO, "Notice: Can't change working directory to \"%s\": %s", pwd->pw_dir, strerror( errno )); } } else { Index: src/ngircd/numeric.c =================================================================== RCS file: src/ngircd/numeric.c diff -N src/ngircd/numeric.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/ngircd/numeric.c 21 Nov 2007 12:20:32 -0000 1.1 @@ -0,0 +1,334 @@ +/* + * ngIRCd -- The Next Generation IRC Daemon + * Copyright (c)2001-2007 Alexander Barton (alex@barton.de) + * + * 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. + * Please read the file COPYING, README and AUTHORS for more information. + * + * Handlers for IRC numerics sent to the server + */ + +#include "portab.h" + +static char UNUSED id[] = "$Id: numeric.c,v 1.1 2007/11/21 12:20:32 alex Exp $"; + +#include "imp.h" +#include +#include +#include +#include + +#include "defines.h" +#include "resolve.h" +#include "conn.h" +#include "conf.h" +#include "conn.h" +#include "client.h" +#include "channel.h" +#include "irc-write.h" +#include "lists.h" +#include "log.h" +#include "messages.h" +#include "parse.h" + +#include "exp.h" +#include "numeric.h" + + +/** + * Announce new server in the network + * @param Client New server + * @param Server Existing server in the network + */ +static bool +Announce_Server(CLIENT * Client, CLIENT * Server) +{ + CLIENT *c; + + if (Client_Conn(Server) > NONE) { + /* Announce the new server to the one already registered + * which is directly connected to the local server */ + if (!IRC_WriteStrClient + (Server, "SERVER %s %d %d :%s", Client_ID(Client), + Client_Hops(Client) + 1, Client_MyToken(Client), + Client_Info(Client))) + return DISCONNECTED; + } + + if (Client_Hops(Server) == 1) + c = Client_ThisServer(); + else + c = Client_Introducer(Server); + + /* Inform new server about the one already registered in the network */ + return IRC_WriteStrClientPrefix(Client, c, "SERVER %s %d %d :%s", + Client_ID(Server), Client_Hops(Server) + 1, + Client_MyToken(Server), Client_Info(Server)); +} /* Announce_Server */ + + +/** + * Announce existing user to a new server + * @param Client New server + * @param User Existing user in the network + */ +static bool +Announce_User(CLIENT * Client, CLIENT * User) +{ + return IRC_WriteStrClient(Client, "NICK %s %d %s %s %d +%s :%s", + Client_ID(User), Client_Hops(User) + 1, Client_User(User), + Client_Hostname(User), Client_MyToken(Client_Introducer(User)), + Client_Modes(User), Client_Info(User)); +} /* Announce_User */ + + +#ifdef IRCPLUS + +/** + * Synchronize invite and ban lists between servers + * @param Client New server + */ +static bool +Synchronize_Lists(CLIENT * Client) +{ + CHANNEL *c; + struct list_head *head; + struct list_elem *elem; + + assert(Client != NULL); + + c = Channel_First(); + while (c) { + /* ban list */ + head = Channel_GetListBans(c); + elem = Lists_GetFirst(head); + while (elem) { + if (!IRC_WriteStrClient(Client, "MODE %s +b %s", + Channel_Name(c), + Lists_GetMask(elem))) { + return DISCONNECTED; + } + elem = Lists_GetNext(elem); + } + + /* invite list */ + head = Channel_GetListInvites(c); + elem = Lists_GetFirst(head); + while (elem) { + if (!IRC_WriteStrClient(Client, "MODE %s +I %s", + Channel_Name(c), + Lists_GetMask(elem))) { + return DISCONNECTED; + } + elem = Lists_GetNext(elem); + } + + c = Channel_Next(c); + } + return CONNECTED; +} + + +/** + * Send CHANINFO commands to a new server (inform it about existing channels). + * @param Client New server + * @param Chan Channel + */ +static bool +Send_CHANINFO(CLIENT * Client, CHANNEL * Chan) +{ + char *modes, *topic; + bool has_k, has_l; + +#ifdef DEBUG + Log(LOG_DEBUG, "Sending CHANINFO commands ..."); +#endif + + modes = Channel_Modes(Chan); + topic = Channel_Topic(Chan); + + if (!*modes && !*topic) + return CONNECTED; + + has_k = strchr(modes, 'k') != NULL; + has_l = strchr(modes, 'l') != NULL; + + /* send CHANINFO */ + if (!has_k && !has_l) { + if (!*topic) { + /* "CHANINFO +" */ + return IRC_WriteStrClient(Client, "CHANINFO %s +%s", + Channel_Name(Chan), modes); + } + /* "CHANINFO + :" */ + return IRC_WriteStrClient(Client, "CHANINFO %s +%s :%s", + Channel_Name(Chan), modes, topic); + } + /* "CHANINFO + :" */ + return IRC_WriteStrClient(Client, "CHANINFO %s +%s %s %lu :%s", + Channel_Name(Chan), modes, + has_k ? Channel_Key(Chan) : "*", + has_l ? Channel_MaxUsers(Chan) : 0, topic); +} /* Send_CHANINFO */ + +#endif /* IRCPLUS */ + + +/** + * Handle ENDOFMOTD (376) numeric and login remote server. + * The peer is either an IRC server (no IRC+ protocol), or we got the + * ENDOFMOTD numeric from an IRC+ server. We have to register the new server. + */ +GLOBAL bool +IRC_Num_ENDOFMOTD(CLIENT * Client, UNUSED REQUEST * Req) +{ + char str[LINE_LEN]; + int max_hops, i; + CLIENT *c, *cl; + CHANNEL *chan; + CL2CHAN *cl2chan; + + Client_SetType(Client, CLIENT_SERVER); + + Log(LOG_NOTICE | LOG_snotice, + "Server \"%s\" registered (connection %d, 1 hop - direct link).", + Client_ID(Client), Client_Conn(Client)); + + /* Get highest hop count */ + max_hops = 0; + c = Client_First(); + while (c) { + if (Client_Hops(c) > max_hops) + max_hops = Client_Hops(c); + c = Client_Next(c); + } + + /* Inform the new server about all other servers, and announce the + * new server to all the already registered ones. Important: we have + * to do this "in order" and can't introduce servers of which the + * "toplevel server" isn't known already. */ + for (i = 0; i < (max_hops + 1); i++) { + for (c = Client_First(); c != NULL; c = Client_Next(c)) { + if (Client_Type(c) != CLIENT_SERVER) + continue; /* not a server */ + if (Client_Hops(c) != i) + continue; /* not actual "nesting level" */ + if (c == Client || c == Client_ThisServer()) + continue; /* that's us or the peer! */ + + if (!Announce_Server(Client, c)) + return DISCONNECTED; + } + } + + /* Announce all the users to the new server */ + c = Client_First(); + while (c) { + if (Client_Type(c) == CLIENT_USER) { + if (!Announce_User(Client, c)) + return DISCONNECTED; + } + c = Client_Next(c); + } + + /* Announce all channels to the new server */ + chan = Channel_First(); + while (chan) { +#ifdef IRCPLUS + /* Send CHANINFO if the peer supports it */ + if (strchr(Client_Flags(Client), 'C')) { + if (!Send_CHANINFO(Client, chan)) + return DISCONNECTED; + } +#endif + + /* Get all the members of this channel */ + cl2chan = Channel_FirstMember(chan); + snprintf(str, sizeof(str), "NJOIN %s :", Channel_Name(chan)); + while (cl2chan) { + cl = Channel_GetClient(cl2chan); + assert(cl != NULL); + + /* Nick name, with modes (if applicable) */ + if (str[strlen(str) - 1] != ':') + strlcat(str, ",", sizeof(str)); + if (strchr(Channel_UserModes(chan, cl), 'v')) + strlcat(str, "+", sizeof(str)); + if (strchr(Channel_UserModes(chan, cl), 'o')) + strlcat(str, "@", sizeof(str)); + strlcat(str, Client_ID(cl), sizeof(str)); + + /* Send the data if the buffer is "full" */ + if (strlen(str) > (LINE_LEN - CLIENT_NICK_LEN - 8)) { + if (!IRC_WriteStrClient(Client, "%s", str)) + return DISCONNECTED; + snprintf(str, sizeof(str), "NJOIN %s :", + Channel_Name(chan)); + } + + cl2chan = Channel_NextMember(chan, cl2chan); + } + + /* Data left in the buffer? */ + if (str[strlen(str) - 1] != ':') { + /* Yes, send it ... */ + if (!IRC_WriteStrClient(Client, "%s", str)) + return DISCONNECTED; + } + + /* Get next channel ... */ + chan = Channel_Next(chan); + } + +#ifdef IRCPLUS + if (strchr(Client_Flags(Client), 'L')) { + LogDebug("Synchronizing INVITE- and BAN-lists ..."); + if (!Synchronize_Lists(Client)) + return DISCONNECTED; + } +#endif + + return CONNECTED; +} /* IRC_Num_ENDOFMOTD */ + + +/** + * Handle ISUPPORT (005) numeric. + */ +GLOBAL bool +IRC_Num_ISUPPORT(CLIENT * Client, REQUEST * Req) +{ + int i; + char *key, *value; + + for (i = 1; i < Req->argc - 1; i++) { + key = Req->argv[i]; + value = strchr(key, '='); + if (value) + *value++ = '\0'; + else + value = ""; + + if (strcmp("NICKLEN", key) == 0) { + if ((unsigned int)atol(value) == Conf_MaxNickLength - 1) + continue; + + /* Nick name length settings are different! */ + Log(LOG_ERR, + "Peer uses incompatible nick name length (%d/%d)! Disconnecting ...", + Conf_MaxNickLength - 1, atoi(value)); + Conn_Close(Client_Conn(Client), + "Incompatible nick name length", + NULL, false); + return DISCONNECTED; + } + } + + return CONNECTED; +} /* IRC_Num_ISUPPORT */ + + +/* -eof- */ Index: src/ngircd/numeric.h =================================================================== RCS file: src/ngircd/numeric.h diff -N src/ngircd/numeric.h --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/ngircd/numeric.h 21 Nov 2007 12:20:32 -0000 1.1 @@ -0,0 +1,24 @@ +/* + * ngIRCd -- The Next Generation IRC Daemon + * Copyright (c)2001-2007 by Alexander Barton (alex@barton.de) + * + * 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. + * Please read the file COPYING, README and AUTHORS for more information. + * + * $Id: numeric.h,v 1.1 2007/11/21 12:20:32 alex Exp $ + * + * Handlers for IRC numerics sent to the server (header) + */ + +#ifndef __numeric_h__ +#define __numeric_h__ + +GLOBAL bool IRC_Num_ENDOFMOTD PARAMS((CLIENT *Client, UNUSED REQUEST *Req)); +GLOBAL bool IRC_Num_ISUPPORT PARAMS((CLIENT *Client, REQUEST *Req)); + +#endif + +/* -eof- */ Index: src/ngircd/parse.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/parse.c,v retrieving revision 1.67 retrieving revision 1.69 diff -u -p -r1.67 -r1.69 --- src/ngircd/parse.c 23 Apr 2006 10:37:27 -0000 1.67 +++ src/ngircd/parse.c 21 Nov 2007 12:16:36 -0000 1.69 @@ -12,7 +12,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: parse.c,v 1.67 2006/04/23 10:37:27 fw Exp $"; +static char UNUSED id[] = "$Id: parse.c,v 1.69 2007/11/21 12:16:36 alex Exp $"; /** * @file @@ -48,6 +48,7 @@ static char UNUSED id[] = "$Id: parse.c, #include "irc-oper.h" #include "irc-server.h" #include "irc-write.h" +#include "numeric.h" #include "exp.h" @@ -93,6 +94,7 @@ COMMAND My_Commands[] = { "USER", IRC_USER, 0xFFFF, 0, 0, 0 }, { "USERHOST", IRC_USERHOST, CLIENT_USER, 0, 0, 0 }, { "VERSION", IRC_VERSION, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 }, + { "WALLOPS", IRC_WALLOPS, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 }, { "WHO", IRC_WHO, CLIENT_USER, 0, 0, 0 }, { "WHOIS", IRC_WHOIS, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 }, { "WHOWAS", IRC_WHOWAS, CLIENT_USER|CLIENT_SERVER, 0, 0, 0 }, @@ -102,6 +104,13 @@ COMMAND My_Commands[] = { NULL, NULL, 0x0, 0, 0, 0 } /* Ende-Marke */ }; +NUMERIC My_Numerics[] = +{ + { 005, IRC_Num_ISUPPORT }, + { 376, IRC_Num_ENDOFMOTD }, + { 0, NULL } /* end marker */ +}; + static void Init_Request PARAMS(( REQUEST *Req )); @@ -348,6 +357,7 @@ Handle_Request( CONN_ID Idx, REQUEST *Re char str[LINE_LEN]; bool result; COMMAND *cmd; + NUMERIC *num; int i; assert( Idx >= 0 ); @@ -357,25 +367,45 @@ Handle_Request( CONN_ID Idx, REQUEST *Re client = Conn_GetClient( Idx ); assert( client != NULL ); - /* Statuscode? */ - if(( Client_Type( client ) == CLIENT_SERVER ) && ( strlen( Req->command ) == 3 ) && ( atoi( Req->command ) > 100 )) - { - /* Command is a status code from an other server */ + /* Numeric? */ + if ((Client_Type(client) == CLIENT_SERVER || + Client_Type(client) == CLIENT_UNKNOWNSERVER) + && strlen(Req->command) == 3 && atoi(Req->command) > 1) { + /* Command is a status code ("numeric") from an other server */ /* Determine target */ - if( Req->argc > 0 ) target = Client_Search( Req->argv[0] ); - else target = NULL; - if( ! target ) - { + if (Req->argc > 0) + target = Client_Search( Req->argv[0] ); + else + target = NULL; + if (!target) { /* Status code without target!? */ - if( Req->argc > 0 ) Log( LOG_WARNING, "Unknown target for status code %s: \"%s\"", Req->command, Req->argv[0] ); - else Log( LOG_WARNING, "Unknown target for status code %s!", Req->command ); + if (Req->argc > 0) + Log(LOG_WARNING, + "Unknown target for status code %s: \"%s\"", + Req->command, Req->argv[0]); + else + Log(LOG_WARNING, + "Unknown target for status code %s!", + Req->command); return true; } - if( target == Client_ThisServer( )) - { - /* This server is the target, ignore it */ - Log( LOG_DEBUG, "Ignored status code %s from \"%s\".", Req->command, Client_ID( client )); + if (target == Client_ThisServer()) { + /* This server is the target of the numeric */ + i = atoi(Req->command); + + num = My_Numerics; + while (num->numeric > 0) { + if (i != num->numeric) { + num++; + continue; + } + result = (num->function)(client, Req); + return result; + } + + LogDebug("Ignored status code %s from \"%s\".", + Req->command, Client_ID(client)); return true; } Index: src/ngircd/parse.h =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/parse.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -p -r1.11 -r1.12 --- src/ngircd/parse.h 19 Mar 2005 18:43:49 -0000 1.11 +++ src/ngircd/parse.h 21 Nov 2007 12:16:36 -0000 1.12 @@ -8,7 +8,7 @@ * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: parse.h,v 1.11 2005/03/19 18:43:49 fw Exp $ + * $Id: parse.h,v 1.12 2007/11/21 12:16:36 alex Exp $ * * IRC command parser and validator (header) */ @@ -33,11 +33,18 @@ typedef struct _COMMAND char *name; /* command name */ bool (*function) PARAMS(( CLIENT *Client, REQUEST *Request )); CLIENT_TYPE type; /* valid client types (bit mask) */ - long lcount, rcount; /* number of local and remote calls */ - long bytes; /* number of bytes created */ + long lcount, rcount; /* number of local and remote calls */ + long bytes; /* number of bytes created */ } COMMAND; +typedef struct _NUMERIC +{ + int numeric; /* numeric */ + bool (*function) PARAMS(( CLIENT *Client, REQUEST *Request )); +} NUMERIC; + + GLOBAL bool Parse_Request PARAMS((CONN_ID Idx, char *Request )); GLOBAL COMMAND *Parse_GetCommandStruct PARAMS(( void )); Index: src/ngircd/resolve.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/ngircd/resolve.c,v retrieving revision 1.24.2.2 retrieving revision 1.28 diff -u -p -r1.24.2.2 -r1.28 --- src/ngircd/resolve.c 17 Dec 2006 22:59:56 -0000 1.24.2.2 +++ src/ngircd/resolve.c 2 Jan 2008 11:03:29 -0000 1.28 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: resolve.c,v 1.24.2.2 2006/12/17 22:59:56 fw Exp $"; +static char UNUSED id[] = "$Id: resolve.c,v 1.28 2008/01/02 11:03:29 fw Exp $"; #include "imp.h" #include @@ -24,7 +24,6 @@ static char UNUSED id[] = "$Id: resolve. #include #include #include -#include #include #ifdef IDENTAUTH @@ -36,6 +35,7 @@ static char UNUSED id[] = "$Id: resolve. #include "conn.h" #include "defines.h" #include "log.h" +#include "tool.h" #include "exp.h" #include "resolve.h" @@ -153,8 +153,8 @@ Do_ResolveAddr( struct sockaddr_in *Addr /* Resolver sub-process: resolve IP address and write result into * pipe to parent. */ - char hostname[HOST_LEN]; - char ipstr[HOST_LEN]; + char hostname[CLIENT_HOST_LEN]; + char ipstr[CLIENT_HOST_LEN]; struct hostent *h; size_t len; struct in_addr *addr; @@ -169,7 +169,7 @@ Do_ResolveAddr( struct sockaddr_in *Addr Log_Resolver( LOG_DEBUG, "Now resolving %s ...", inet_ntoa( Addr->sin_addr )); #endif h = gethostbyaddr( (char *)&Addr->sin_addr, sizeof( Addr->sin_addr ), AF_INET ); - if (!h) { + if (!h || strlen(h->h_name) >= sizeof(hostname)) { #ifdef h_errno Log_Resolver( LOG_WARNING, "Can't resolve address \"%s\": %s!", inet_ntoa( Addr->sin_addr ), Get_Error( h_errno )); #else Index: src/portab/.cvsignore =================================================================== RCS file: src/portab/.cvsignore diff -N src/portab/.cvsignore --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/portab/.cvsignore 28 Dec 2006 13:34:43 -0000 1.2 @@ -0,0 +1,4 @@ +Makefile +Makefile.in +.deps +portabtest Index: src/testsuite/.cvsignore =================================================================== RCS file: src/testsuite/.cvsignore diff -N src/testsuite/.cvsignore --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/testsuite/.cvsignore 28 Dec 2006 13:20:11 -0000 1.1 @@ -0,0 +1,7 @@ +Makefile +Makefile.in +T-ngircd +logs +ngircd-test.log +ngircd-test.motd +tests Index: src/testsuite/Makefile.am =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/testsuite/Makefile.am,v retrieving revision 1.14 retrieving revision 1.15 diff -u -p -r1.14 -r1.15 --- src/testsuite/Makefile.am 8 Sep 2004 09:40:51 -0000 1.14 +++ src/testsuite/Makefile.am 18 Nov 2007 15:07:16 -0000 1.15 @@ -9,7 +9,7 @@ # Naehere Informationen entnehmen Sie bitter der Datei COPYING. Eine Liste # der an ngIRCd beteiligten Autoren finden Sie in der Datei AUTHORS. # -# $Id: Makefile.am,v 1.14 2004/09/08 09:40:51 alex Exp $ +# $Id: Makefile.am,v 1.15 2007/11/18 15:07:16 alex Exp $ # AUTOMAKE_OPTIONS = ../portab/ansi2knr @@ -40,12 +40,15 @@ ngircd-TEST-Binary: [ -f getpid.sh ] || ln -s $(srcdir)/getpid.sh . connect-test: tests.sh + rm -f connect-test ln -s $(srcdir)/tests.sh connect-test channel-test: tests.sh + rm -f channel-test ln -s $(srcdir)/tests.sh channel-test mode-test: tests.sh + rm -f mode-test ln -s $(srcdir)/tests.sh mode-test TESTS = start-server.sh \ Index: src/testsuite/getpid.sh =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/testsuite/getpid.sh,v retrieving revision 1.4.6.1 retrieving revision 1.5 diff -u -p -r1.4.6.1 -r1.5 --- src/testsuite/getpid.sh 17 Dec 2006 13:49:49 -0000 1.4.6.1 +++ src/testsuite/getpid.sh 5 Aug 2006 00:15:28 -0000 1.5 @@ -1,6 +1,6 @@ #!/bin/sh # ngIRCd Test Suite -# $Id: getpid.sh,v 1.4.6.1 2006/12/17 13:49:49 alex Exp $ +# $Id: getpid.sh,v 1.5 2006/08/05 00:15:28 alex Exp $ # did we get a name? [ $# -ne 1 ] && exit 1 Index: src/testsuite/ngircd-test.conf =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/testsuite/ngircd-test.conf,v retrieving revision 1.4 retrieving revision 1.5 diff -u -p -r1.4 -r1.5 --- src/testsuite/ngircd-test.conf 5 Nov 2003 23:31:43 -0000 1.4 +++ src/testsuite/ngircd-test.conf 18 Nov 2007 15:07:16 -0000 1.5 @@ -1,4 +1,4 @@ -# $Id: ngircd-test.conf,v 1.4 2003/11/05 23:31:43 alex Exp $ +# $Id: ngircd-test.conf,v 1.5 2007/11/18 15:07:16 alex Exp $ [Global] Name = ngircd.test.server @@ -7,6 +7,8 @@ MotdFile = ngircd-test.motd AdminEMail = admin@irc.server MaxConnectionsIP = 0 + ServerUID = 1 + ServerGID = 1 [Operator] Name = TestOp Index: src/tool/.cvsignore =================================================================== RCS file: src/tool/.cvsignore diff -N src/tool/.cvsignore --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/tool/.cvsignore 28 Dec 2006 13:20:11 -0000 1.1 @@ -0,0 +1,3 @@ +Makefile +Makefile.in +.deps Index: src/tool/tool.c =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/tool/tool.c,v retrieving revision 1.6 retrieving revision 1.8 diff -u -p -r1.6 -r1.8 --- src/tool/tool.c 9 Apr 2006 12:53:07 -0000 1.6 +++ src/tool/tool.c 25 Nov 2007 18:42:38 -0000 1.8 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: tool.c,v 1.6 2006/04/09 12:53:07 alex Exp $"; +static char UNUSED id[] = "$Id: tool.c,v 1.8 2007/11/25 18:42:38 fw Exp $"; #include "imp.h" #include @@ -22,6 +22,8 @@ static char UNUSED id[] = "$Id: tool.c,v #include #include +#include + #include "exp.h" #include "tool.h" @@ -105,4 +107,22 @@ ngt_TrimLastChr( char *String, const cha } /* ngt_TrimLastChr */ +GLOBAL bool +ngt_IPStrToBin(const char *ip_str, struct in_addr *inaddr) +{ + /* AF is always AF_INET for now */ +#ifdef HAVE_INET_ATON + if (inet_aton(ip_str, inaddr) == 0) + return false; +#else + inaddr->s_addr = inet_addr(ip_str); + if (inaddr->s_addr == (unsigned)-1) + return false; +#endif + return true; +} + + + + /* -eof- */ Index: src/tool/tool.h =================================================================== RCS file: /srv/cvs/ngircd/ngircd/src/tool/tool.h,v retrieving revision 1.3 retrieving revision 1.5 diff -u -p -r1.3 -r1.5 --- src/tool/tool.h 19 Mar 2005 18:43:53 -0000 1.3 +++ src/tool/tool.h 25 Nov 2007 18:42:38 -0000 1.5 @@ -8,7 +8,7 @@ * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: tool.h,v 1.3 2005/03/19 18:43:53 fw Exp $ + * $Id: tool.h,v 1.5 2007/11/25 18:42:38 fw Exp $ * * Tool functions (Header) */ @@ -16,7 +16,13 @@ #ifndef __tool_h__ #define __tool_h__ +#include "portab.h" +#ifdef HAVE_ARPA_INET_H +# include +#else +# define PF_INET AF_INET +#endif GLOBAL void ngt_TrimLastChr PARAMS((char *String, const char Chr )); @@ -24,7 +30,7 @@ GLOBAL void ngt_TrimStr PARAMS((char *St GLOBAL char *ngt_LowerStr PARAMS((char *String )); - +GLOBAL bool ngt_IPStrToBin PARAMS((const char *ip_str, struct in_addr *inaddr)); #endif