Index: AUTHORS =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/AUTHORS,v retrieving revision 1.5.2.2 retrieving revision 1.8.2.1 diff -u -r1.5.2.2 -r1.8.2.1 --- AUTHORS 3 Feb 2004 16:01:29 -0000 1.5.2.2 +++ AUTHORS 7 May 2004 11:24:17 -0000 1.8.2.1 @@ -19,6 +19,7 @@ ~~~~~~~~~~~~ Goetz Hoffart, (goetz) Ilja Osthoff, (ilja) +Benjamin Pineau, Sean Reifschneider, @@ -30,4 +31,4 @@ -- -$Id: AUTHORS,v 1.5.2.2 2004/02/03 16:01:29 alex Exp $ +$Id: AUTHORS,v 1.8.2.1 2004/05/07 11:24:17 alex Exp $ Index: ChangeLog =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/ChangeLog,v retrieving revision 1.188.2.24 retrieving revision 1.233.2.5 diff -u -r1.188.2.24 -r1.233.2.5 --- ChangeLog 5 Feb 2004 13:33:24 -0000 1.188.2.24 +++ ChangeLog 26 Jun 2004 09:12:38 -0000 1.233.2.5 @@ -10,6 +10,43 @@ -- ChangeLog -- +ngircd 0.8.0 (2004-06-26) + + - Fixed wrong buffer size calculation for results of the resolver. + + ngircd 0.8.0-pre2 (2004-05-16) + - Enhanced logging to console when running in "no-detached mode": added + PID and log messages of resolver sub-processes. + - Fixed host name lookups when using IDENT user lookups. + - "make clean" and "make maintainer-clean" remove more files mow. + + ngIRCd 0.8.0-pre1 (2004-05-07) + - Two new configuration options: "ChrootDir" and "MotdPhrase", thanks to + Benjamin Pineau . Now you can force the daemon to change + its root and working directory to something "safe". MotdPhrase is used + to define an "MOTD string" instead of a whole file, useful if the + "real" MOTD file would be outside the "jail". + - INVITE- and BAN-lists become synchronized between IRC+ servers when + establishing new connections, if the peer supports this as well. + - Reorganized autogen.sh and configure scripts. + - Fixed a wrong assert() which could cause the daemon to exit spuriously + when closing down connections. + - Better logging of decompression errors returned by zlib. + - Servers other than the destination server didn't clean up the invite + list of an "invite-only" channel properly when an INVITE'd user joined. + - Changed the reply of the MODE command to match the syntax of the + original ircd exactly: the unnecessary but missing ":" before the last + parameter has been added. + - Fixed TRACE: don't output "Serv" lines for ourself; display more info. + - Results of the resolver (hostnames and IDENT names) are discarded after + the client is successfully registered with the server. + - Better logging while establishing and shutting down connections. + - The type of service (TOS) of all sockets is set to "interactive" now. + - Added short command line option "-t" as alternative to "--configtest". + - Added optional support for "IDENT" lookups on incoming connections. You + have to enable this function with the ./configure switch "--with-ident". + The default is not to do IDENT lookups. + ngIRCd 0.7.7 (2004-02-05) - The info text ("real name") of users is set to "-" if none has been @@ -493,4 +530,4 @@ -- -$Id: ChangeLog,v 1.188.2.24 2004/02/05 13:33:24 alex Exp $ +$Id: ChangeLog,v 1.233.2.5 2004/06/26 09:12:38 alex Exp $ Index: INSTALL =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/INSTALL,v retrieving revision 1.15.2.2 retrieving revision 1.18.2.1 diff -u -r1.15.2.2 -r1.18.2.1 --- INSTALL 3 Feb 2004 16:01:29 -0000 1.15.2.2 +++ INSTALL 7 May 2004 11:24:17 -0000 1.18.2.1 @@ -75,6 +75,11 @@ and/or disable some features of ngIRCd. All these options are shown using "./configure --help", too. +Compiling a static binary will avoid you the hassle of feeding a chroot dir +(if you want use the chroot feature). Just do something like: + CFLAGS=-static ./configure [--your-options ...] +Then you can use a void directory as ChrootDir (like OpenSSH's /var/empty). + 3): "make" @@ -148,7 +153,7 @@ -p, --passive Server-links won't be automatically established. ---configtest +-t, --configtest Reads, validates and dumps the configuration file as interpreted by the server. Then exits. @@ -158,4 +163,4 @@ -- -$Id: INSTALL,v 1.15.2.2 2004/02/03 16:01:29 alex Exp $ +$Id: INSTALL,v 1.18.2.1 2004/05/07 11:24:17 alex Exp $ Index: Makefile.am =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/Makefile.am,v retrieving revision 1.10.4.2 retrieving revision 1.14.2.1 diff -u -r1.10.4.2 -r1.14.2.1 --- Makefile.am 9 Jul 2003 21:14:08 -0000 1.10.4.2 +++ Makefile.am 11 May 2004 00:38:17 -0000 1.14.2.1 @@ -8,18 +8,21 @@ # (at your option) any later version. # Please read the file COPYING, README and AUTHORS for more information. # -# $Id: Makefile.am,v 1.10.4.2 2003/07/09 21:14:08 alex Exp $ +# $Id: Makefile.am,v 1.14.2.1 2004/05/11 00:38:17 alex Exp $ # AUTOMAKE_OPTIONS = gnu -SUBDIRS = doc MacOSX src man contrib debian +SUBDIRS = doc src man contrib + +clean-local: + rm -f build-stamp* maintainer-clean-local: rm -rf autom4te.cache rm -f Makefile.in Makefile aclocal.m4 configure rm -f mkinstalldirs missing depcomp install-sh - rm -f config.log + rm -f config.log debian lint: make -C src/ngircd lint @@ -28,6 +31,7 @@ rpm -ta ngircd-*.tar.gz deb: + [ -f debian/rules ] || ln -s contrib/Debian debian dpkg-buildpackage -rfakeroot # -eof- Index: NEWS =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/NEWS,v retrieving revision 1.53.2.6 retrieving revision 1.64.2.3 diff -u -r1.53.2.6 -r1.64.2.3 --- NEWS 3 Feb 2004 16:01:29 -0000 1.53.2.6 +++ NEWS 26 Jun 2004 09:12:38 -0000 1.64.2.3 @@ -10,6 +10,21 @@ -- NEWS -- +ngIRCd 0.8.0 (2004-06-26) + + - Two new configuration options: "ChrootDir" and "MotdPhrase", thanks to + Benjamin Pineau . Now you can force the daemon to change + its root and working directory to something "safe". MotdPhrase is used + to define an "MOTD string" instead of a whole file, useful if the + "real" MOTD file would be outside the "jail". + - INVITE- and BAN-lists become synchronized between IRC+ servers when + establishing new connections, if the peer supports this as well. + - The type of service (TOS) of all sockets is set to "interactive" now. + - Added short command line option "-t" as alternative to "--configtest". + - Added optional support for "IDENT" lookups on incoming connections. You + have to enable this function with the ./configure switch "--with-ident". + The default is not to do IDENT lookups. + ngIRCd 0.7.5 (2003-07-11) - New configuration variable "MaxConnectionsIP" to limit the number of @@ -18,7 +33,7 @@ (DoS), the default is 5 connections per client IP. - Added new configuration variable "Listen" to bind all listening sockets of the server to a single IP address. - + ngIRCd 0.7.1 (2003-07-18) - Added support for GNU/Hurd. @@ -174,4 +189,4 @@ -- -$Id: NEWS,v 1.53.2.6 2004/02/03 16:01:29 alex Exp $ +$Id: NEWS,v 1.64.2.3 2004/06/26 09:12:38 alex Exp $ Index: README =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/README,v retrieving revision 1.17.2.1 retrieving revision 1.18.2.1 diff -u -r1.17.2.1 -r1.18.2.1 --- README 3 Feb 2004 16:01:29 -0000 1.17.2.1 +++ README 7 May 2004 11:24:17 -0000 1.18.2.1 @@ -45,7 +45,8 @@ - ngIRCd will be developed on in the future. - supported platforms (tested versions): AIX (3.2.5), A/UX (3.0.1), FreeBSD (4.5), HP-UX (10.20), IRIX (6.5), Linux (2.x), Mac OS X (10.x), NetBSD - (1.5.2/i386, 1.5.3/m68k), Solaris (2.5.1, 2.6), and Windows with Cygwin. + (1.5.2/i386, 1.5.3/m68k), Solaris (2.5.1, 2.6), Windows with Cygwin, and + OpenBSD (3.4/i386). IV. Documentation @@ -83,4 +84,4 @@ -- -$Id: README,v 1.17.2.1 2004/02/03 16:01:29 alex Exp $ +$Id: README,v 1.18.2.1 2004/05/07 11:24:17 alex Exp $ Index: autogen.sh =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/autogen.sh,v retrieving revision 1.6.2.1 retrieving revision 1.12 diff -u -r1.6.2.1 -r1.12 --- autogen.sh 22 Apr 2003 10:18:41 -0000 1.6.2.1 +++ autogen.sh 5 Apr 2004 12:02:21 -0000 1.12 @@ -1,15 +1,183 @@ #!/bin/sh # -# $Id: autogen.sh,v 1.6.2.1 2003/04/22 10:18:41 alex Exp $ +# ngIRCd -- The Next Generation IRC Daemon +# Copyright (c)2001-2004 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 +# 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: autogen.sh,v 1.12 2004/04/05 12:02:21 alex Exp $ +# + +# +# Usage: [VAR=] ./autogen.sh [] +# +# This script generates the ./configure script using GNU automake and +# GNU autoconf. It tries to be smart in finding the correct/usable/available +# installed versions of these tools on your system. +# +# The following strategy is used for each of aclocal, autoheader, automake, +# and autoconf: first, "tool" (the regular name of the tool, e. g. "autoconf" +# or "automake") is checked. If this fails, "tool" (for example +# "automake16") and "tool-." (e. g. "autoconf-2.54") are tried +# with being 2 for tool of GNU autoconf and 1 for tools of automake; +# is tried from 99 to 0. The first occurrence will be used. +# +# When you pass to autogen.sh it will call the generated +# ./configure script on success and pass these parameters to it. +# +# You can tweak the behaviour using these environment variables: +# +# - ACLOCAL=, AUTOHEADER=, AUTOMAKE=, AUTOCONF= +# Name and optionally path to the particular tool. +# - PREFIX= +# Search the GNU autoconf and GNU automake tools in first. If the +# generated ./configure script will be called, pass "--prefix=" to it. +# - EXIST= +# Use to test for aclocal, autoheader etc. pp. ... +# When not specified, either "type" or "which" is used. +# - VERBOSE=1 +# Output the detected names of the GNU automake and GNU autoconf tools. +# - GO=1 +# Call ./configure even if no arguments have been passed to autogen.sh. +# +# Examples: +# +# - ./autogen.sh +# Generates the ./configure script. +# - GO=1 ./autogen.sh +# Generates the ./configure script and runs it as "./configure". +# - VERBOSE=1 ./autogen.sh --with-ident +# Show tool names, generates the ./configure script, and runs it with +# these arguments: "./configure --with-ident". +# - ACLOCAL=aclocal-1.6 GO=1 PREFIX=$HOME ./autogen.sh +# Uses "aclocal-1.6" as aclocal tool, generates the ./configure script, +# and runs it with these arguments: "./configure --prefix=$HOME". +# + +Search() +{ + [ $# -eq 2 ] || exit 1 -WANT_AUTOMAKE=1.6 + searchlist="$1" + major="$2" + minor=99 + + [ -n "$PREFIX" ] && searchlist="${PREFIX}/$1 ${PREFIX}/bin/$1 $searchlist" + + for name in $searchlist; do + $EXIST "${name}" >/dev/null 2>&1 + if [ $? -eq 0 ]; then + echo "${name}" + return 0 + fi + done + + while [ $minor -ge 0 ]; do + for name in $searchlist; do + $EXIST "${name}${major}${minor}" >/dev/null 2>&1 + if [ $? -eq 0 ]; then + echo "${name}${major}${minor}" + return 0 + fi + $EXIST "${name}-${major}.${minor}" >/dev/null 2>&1 + if [ $? -eq 0 ]; then + echo "${name}-${major}.${minor}" >/dev/null 2>&1 + return 0 + fi + done + minor=`expr $minor - 1` + done + return 1 +} + +Notfound() +{ + echo "Error: $* not found!" + echo "Please install recent versions of GNU autoconf and GNU automake." + exit 1 +} + +# Reset locale settings to suppress warning messages of Perl +unset LC_ALL +unset LANG + +# Which command should be used to detect the automake/autoconf tools? +[ -z "$EXIST" ] && existlist="type which" || existlist="$EXIST" +EXIST="" +for t in $existlist; do + $t /bin/ls >/dev/null 2>&1 + if [ $? -eq 0 ]; then + rm -f /tmp/test.$$ + $t /tmp/test.$$ >/dev/null 2>&1 + [ $? -ne 0 ] && EXIST="$t" + fi + [ -n "$EXIST" ] && break +done +if [ -z "$EXIST" ]; then + echo "Didn't detect a working command to test for the autoconf/automake tools!" + echo "Searchlist: $existlist" + exit 1 +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 +# the wrapper scripts of Gentoo Linux): +WANT_AUTOMAKE=1.7 export WANT_AUTOMAKE -aclocal && \ - autoheader && \ - automake --add-missing && \ - autoconf && \ - echo "Okay, autogen.sh done." +# Try to detect the needed tools when no environment variable already +# spezifies one: +echo "Searching tools ..." +[ -z "$ACLOCAL" ] && ACLOCAL=`Search aclocal 1` +[ "$VERBOSE" = "1" ] && echo "ACLOCAL=$ACLOCAL" +[ -z "$AUTOHEADER" ] && AUTOHEADER=`Search autoheader 2` +[ "$VERBOSE" = "1" ] && echo "AUTOHEADER=$AUTOHEADER" +[ -z "$AUTOMAKE" ] && AUTOMAKE=`Search automake 1` +[ "$VERBOSE" = "1" ] && echo "AUTOMAKE=$AUTOMAKE" +[ -z "$AUTOCONF" ] && AUTOCONF=`Search autoconf 2` +[ "$VERBOSE" = "1" ] && echo "AUTOCONF=$AUTOCONF" + +# Call ./configure when parameters have been passed to this script and +# GO isn't already defined. +[ -z "$GO" -a $# -gt 0 ] && GO=1 + +# Verify that all tools have been found +[ -z "$AUTOCONF" ] && Notfound autoconf +[ -z "$AUTOHEADER" ] && Notfound autoheader +[ -z "$AUTOMAKE" ] && Notfound automake +[ -z "$AUTOCONF" ] && Notfound autoconf + +export AUTOCONF AUTOHEADER AUTOMAKE AUTOCONF + +# Generate files +echo "Generating files ..." +$ACLOCAL && \ + $AUTOHEADER && \ + $AUTOMAKE --add-missing && \ + $AUTOCONF + +if [ $? -eq 0 -a -x ./configure ]; then + # Success: if we got some parameters we call ./configure and pass + # all of them to it. + if [ "$GO" = "1" ]; then + [ -n "$PREFIX" ] && p=" --prefix=$PREFIX" || p="" + [ -n "$*" ] && a=" $*" || a="" + c="./configure${p}${a}" + echo "Calling \"$c\" ..." + $c + exit $? + else + echo "Okay, autogen.sh done; now run the \"configure\" script." + exit 0 + fi +else + # Failure!? + echo "Error! Check your installation of GNU automake and autoconf!" + exit 1 +fi # -eof- Index: config.guess =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/config.guess,v retrieving revision 1.1.8.2 diff -u -r1.1.8.2 config.guess --- config.guess 7 Nov 2003 21:04:21 -0000 1.1.8.2 +++ config.guess 26 Jun 2004 14:04:08 -0000 @@ -3,7 +3,7 @@ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. -timestamp='2003-10-07' +timestamp='2004-03-12' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by @@ -197,12 +197,18 @@ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; + amd64:OpenBSD:*:*) + echo x86_64-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; + cats:OpenBSD:*:*) + echo arm-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; @@ -221,6 +227,9 @@ mvmeppc:OpenBSD:*:*) echo powerpc-unknown-openbsd${UNAME_RELEASE} exit 0 ;; + pegasos:OpenBSD:*:*) + echo powerpc-unknown-openbsd${UNAME_RELEASE} + exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; @@ -236,10 +245,24 @@ *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE} exit 0 ;; + *:ekkoBSD:*:*) + echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} + exit 0 ;; + macppc:MirBSD:*:*) + echo powerppc-unknown-mirbsd${UNAME_RELEASE} + exit 0 ;; + *:MirBSD:*:*) + echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} + exit 0 ;; alpha:OSF1:*:*) - if test $UNAME_RELEASE = "V4.0"; then + case $UNAME_RELEASE in + *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` - fi + ;; + *5.*) + UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` + ;; + esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU @@ -277,11 +300,12 @@ "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac + # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. - echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` + echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha*:OpenVMS:*:*) echo alpha-hp-vms @@ -307,6 +331,9 @@ *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; + *:OS400:*:*) + echo powerpc-ibm-os400 + exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; @@ -399,6 +426,9 @@ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; + m68k:machten:*:*) + echo m68k-apple-machten${UNAME_RELEASE} + exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; @@ -742,6 +772,11 @@ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; + 5000:UNIX_System_V:4.*:*) + FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` + FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` + echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" + exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; @@ -818,6 +853,9 @@ ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; + m32r*:Linux:*:*) + echo ${UNAME_MACHINE}-unknown-linux-gnu + exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; @@ -986,6 +1024,9 @@ i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit 0 ;; + i*86:syllable:*:*) + echo ${UNAME_MACHINE}-pc-syllable + exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; @@ -1172,7 +1213,7 @@ *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; - NSR-[DGKLNPTVWY]:NONSTOP_KERNEL:*:*) + NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) @@ -1216,6 +1257,9 @@ SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit 0 ;; + *:DragonFly:*:*) + echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` + exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 Index: config.sub =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/config.sub,v retrieving revision 1.1.8.2 diff -u -r1.1.8.2 config.sub --- config.sub 7 Nov 2003 21:04:47 -0000 1.1.8.2 +++ config.sub 26 Jun 2004 14:04:08 -0000 @@ -3,7 +3,7 @@ # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003 Free Software Foundation, Inc. -timestamp='2003-10-07' +timestamp='2004-03-12' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software @@ -118,7 +118,8 @@ # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in - nto-qnx* | linux-gnu* | linux-dietlibc | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) + nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \ + kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; @@ -236,7 +237,7 @@ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ - | m32r | m68000 | m68k | m88k | mcore \ + | m32r | m32rle | m68000 | m68k | m88k | mcore \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ @@ -261,7 +262,7 @@ | pyramid \ | sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ - | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv9 | sparcv9b \ + | sparc | sparc64 | sparc86x | sparclet | sparclite | sparcv8 | sparcv9 | sparcv9b \ | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ @@ -307,7 +308,7 @@ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ - | m32r-* \ + | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ @@ -335,7 +336,7 @@ | sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc86x-* | sparclet-* | sparclite-* \ - | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ + | sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ @@ -362,6 +363,9 @@ basic_machine=a29k-amd os=-udi ;; + abacus) + basic_machine=abacus-unknown + ;; adobe68k) basic_machine=m68010-adobe os=-scout @@ -379,6 +383,9 @@ amd64) basic_machine=x86_64-pc ;; + amd64-*) + basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` + ;; amdahl) basic_machine=580-amdahl os=-sysv @@ -438,12 +445,20 @@ basic_machine=j90-cray os=-unicos ;; + cr16c) + basic_machine=cr16c-unknown + os=-elf + ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; + crx) + basic_machine=crx-unknown + os=-elf + ;; da30 | da30-*) basic_machine=m68k-da30 ;; @@ -743,6 +758,10 @@ basic_machine=or32-unknown os=-coff ;; + os400) + basic_machine=powerpc-ibm + os=-os400 + ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose @@ -963,6 +982,10 @@ tower | tower-32) basic_machine=m68k-ncr ;; + tpf) + basic_machine=s390x-ibm + os=-tpf + ;; udi29k) basic_machine=a29k-amd os=-udi @@ -1058,7 +1081,7 @@ sh64) basic_machine=sh64-unknown ;; - sparc | sparcv9 | sparcv9b) + sparc | sparcv8 | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) @@ -1131,19 +1154,20 @@ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ - | -hiux* | -386bsd* | -knetbsd* | -netbsd* | -openbsd* | -kfreebsd* | -freebsd* | -riscix* \ - | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ + | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \ + | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ + | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ - | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ + | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ - | -powermax* | -dnix* | -nx6 | -nx7 | -sei*) + | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) @@ -1182,6 +1206,9 @@ -opened*) os=-openedition ;; + -os400*) + os=-os400 + ;; -wince*) os=-wince ;; @@ -1203,6 +1230,9 @@ -atheos*) os=-atheos ;; + -syllable*) + os=-syllable + ;; -386bsd) os=-bsd ;; @@ -1225,6 +1255,9 @@ -sinix*) os=-sysv4 ;; + -tpf*) + os=-tpf + ;; -triton*) os=-sysv3 ;; @@ -1473,9 +1506,15 @@ -mvs* | -opened*) vendor=ibm ;; + -os400*) + vendor=ibm + ;; -ptx*) vendor=sequent ;; + -tpf*) + vendor=ibm + ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; Index: configure.in =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/configure.in,v retrieving revision 1.89.2.16 retrieving revision 1.102.2.3 diff -u -r1.89.2.16 -r1.102.2.3 --- configure.in 5 Feb 2004 13:33:24 -0000 1.89.2.16 +++ configure.in 26 Jun 2004 09:19:58 -0000 1.102.2.3 @@ -1,6 +1,6 @@ # # ngIRCd -- The Next Generation IRC Daemon -# Copyright (c)2001-2003 by Alexander Barton (alex@barton.de) +# Copyright (c)2001-2004 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,19 +8,19 @@ # (at your option) any later version. # Please read the file COPYING, README and AUTHORS for more information. # -# $Id: configure.in,v 1.89.2.16 2004/02/05 13:33:24 alex Exp $ +# $Id: configure.in,v 1.102.2.3 2004/06/26 09:19:58 alex Exp $ # -# -- Initialisierung -- +# -- Initialisation -- AC_PREREQ(2.50) -AC_INIT(ngircd, 0.7.7) +AC_INIT(ngircd, 0.8.0) AC_CONFIG_SRCDIR(src/ngircd/ngircd.c) AC_CANONICAL_TARGET AM_INIT_AUTOMAKE(1.6) AM_CONFIG_HEADER(src/config.h) -# -- Templates fuer config.h -- +# -- Templates for config.h -- AH_TEMPLATE([DEBUG], [Define if debug-mode should be enabled]) AH_TEMPLATE([HAVE_socklen_t], [Define if socklen_t exists]) @@ -31,6 +31,7 @@ AH_TEMPLATE([TCPWRAP], [Define if TCP wrappers should be used]) AH_TEMPLATE([IRCPLUS], [Define if IRC+ protocol should be used]) AH_TEMPLATE([RENDEZVOUS], [Define if Rendezvous support should be included]) +AH_TEMPLATE([IDENTAUTH], [Define if the server should do IDENT requests]) AH_TEMPLATE([TARGET_OS], [Target operating system name]) AH_TEMPLATE([TARGET_VENDOR], [Target system vendor]) @@ -40,7 +41,7 @@ AC_PROG_CC -# -- Hilfsprogramme -- +# -- Helper programs -- AC_PROG_AWK AC_PROG_INSTALL @@ -50,47 +51,33 @@ # -- Compiler Features -- -AC_LANG_C - AM_C_PROTOTYPES AC_C_CONST -# -- Defines -- - -os=`uname` +# -- Hard coded system and compiler dependencies/features/options ... -- -if test "$os" = "Linux" -o $os = "GNU"; then - # define _POSIX_SOURCE, _GNU_SOURCE and _BSD_SOURCE when compiling - # on Linux or Hurd (glibc-based systems): - AC_MSG_RESULT([detected ${os}, defining _POSIX_SOURCE, _GNU_SOURCE and _BSD_SOURCE]) - add_DEFINES="-D_POSIX_SOURCE -D_GNU_SOURCE -D_BSD_SOURCE $add_DEFINES" +if test "$GCC" = "yes"; then + # We are using the GNU C compiler. Good! + CFLAGS="$CFLAGS -pipe -W -Wall -Wpointer-arith -Wstrict-prototypes" fi -if test "$os" = "A/UX"; then - # define _POSIX_SOURCE when compiling on A/UX: - AC_MSG_RESULT([detected A/UX, defining _POSIX_SOURCE]) - add_DEFINES="-D_POSIX_SOURCE $add_DEFINES" -fi +case "$target_os" in + hpux*) + # This is HP/UX, we need to define _XOPEN_SOURCE_EXTENDED + # (tested with HP/UX 11.11) + CFLAGS="$CFLAGS -D_XOPEN_SOURCE_EXTENDED" + ;; +esac -if test "$os" = "HP-UX"; then - # define _XOPEN_SOURCE_EXTENDED when compiling on HP-UX (11.11): - AC_MSG_RESULT([detected HP-UX, defining _XOPEN_SOURCE_EXTENDED]) - add_DEFINES="-D_XOPEN_SOURCE_EXTENDED $add_DEFINES" -fi +# Add additional CFLAGS, eventually specified on the command line: +test -n "$CFLAGS_ADD" && CFLAGS="$CFLAGS $CFLAGS_ADD" -if test "$os" = "SunOS"; then - # define _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED=1 and __EXTENSIONS__ - # when compiling on SunOS (tested with 5.6): - AC_MSG_RESULT([detected SunOS, defining _XOPEN_SOURCE, _XOPEN_SOURCE_EXTENDED=1 and __EXTENSIONS__]) - add_DEFINES="-D_XOPEN_SOURCE -D_XOPEN_SOURCE_EXTENDED=1 -D__EXTENSIONS__ $add_DEFINES" -fi +CFLAGS="$CFLAGS -DSYSCONFDIR='\"\$(sysconfdir)\"'" -# -- Header -- +# -- Headers -- AC_HEADER_STDC - AC_HEADER_TIME - AC_HEADER_SYS_WAIT AC_CHECK_HEADERS([ \ @@ -100,7 +87,7 @@ AC_CHECK_HEADERS([arpa/inet.h ctype.h malloc.h stdint.h varargs.h]) -# -- Datentypen -- +# -- Datatypes -- AC_MSG_CHECKING(whether socklen_t exists) AC_TRY_COMPILE([ @@ -116,7 +103,6 @@ ]) AC_TYPE_SIGNAL - AC_TYPE_SIZE_T # -- Libraries -- @@ -125,18 +111,15 @@ AC_CHECK_LIB(socket,bind) AC_CHECK_LIB(nsl,gethostent) -# -- Funktionen -- - -AC_FUNC_MALLOC +# -- Functions -- AC_FUNC_FORK - AC_FUNC_STRFTIME AC_CHECK_FUNCS([ \ - bind gethostbyaddr gethostbyname gethostname inet_ntoa memmove \ - memset setsockopt socket strcasecmp strchr strerror strstr waitpid \ - ],,AC_MSG_ERROR([required function missing!])) + bind gethostbyaddr gethostbyname gethostname inet_ntoa malloc memmove \ + memset realloc setsid setsockopt socket strcasecmp strchr strerror \ + strstr waitpid],,AC_MSG_ERROR([required function missing!])) AC_CHECK_FUNCS(inet_aton isdigit sigaction snprintf vsnprintf strlcpy strlcat) @@ -144,7 +127,7 @@ AC_MSG_ERROR([required function select() is missing!]) ) -# -- Konfigurationsoptionen -- +# -- Configuration options -- x_syslog_on=no AC_ARG_WITH(syslog, @@ -223,6 +206,22 @@ AC_CHECK_HEADERS(DNSServiceDiscovery/DNSServiceDiscovery.h mach/port.h) fi +x_identauth_on=no +AC_ARG_WITH(ident, + [ --with-ident enable "IDENT" ("AUTH") protocol support], + [ if test "$withval" = "yes"; then + AC_CHECK_LIB(ident, ident_id) + AC_CHECK_FUNCS(ident_id, x_identauth_on=yes, + AC_MSG_ERROR([Can't enable IDENT support!]) + ) + fi + ] +) +if test "$x_identauth_on" = "yes"; then + AC_DEFINE(IDENTAUTH, 1) + AC_CHECK_HEADERS(ident.h) +fi + x_ircplus_on=yes AC_ARG_ENABLE(ircplus, [ --disable-ircplus disable IRC+ protocol], @@ -247,6 +246,7 @@ ) if test "$x_debug_on" = "yes"; then AC_DEFINE(DEBUG, 1) + test "$GCC" = "yes" && CFLAGS="-pedantic $CFLAGS" fi x_strict_rfc_on=no @@ -258,59 +258,21 @@ fi ) -# -- Definitionen -- +# -- Definitions -- AC_DEFINE_UNQUOTED(TARGET_CPU, "$target_cpu" ) AC_DEFINE_UNQUOTED(TARGET_VENDOR, "$target_vendor" ) AC_DEFINE_UNQUOTED(TARGET_OS, "$target_os" ) -# -- Variablen -- +# Add additional CFLAGS, eventually specified on the command line, but after +# running this configure script. Useful for "-Werror" for example. +test -n "$CFLAGS_END" && CFLAGS="$CFLAGS $CFLAGS_END" -if test "$GCC" = "yes"; then - the_CFLAGS="-Wmissing-declarations -Wpointer-arith -Wstrict-prototypes" - ansi=" -ansi" - pedantic=" -pedantic" - - $CC --version | grep 20020420 >/dev/null 2>&1 - if test $? -eq 0; then - # Mac OS X (and Darwin?) ship with a slightly broken - # prerelease of GCC 3.1 which don't like -pedantic: - AC_MSG_RESULT([detected broken GNU C compiler, disabling "-pedantic"]) - pedantic="" - fi - - $CC --version | grep 20030304 >/dev/null 2>&1 - if test $? -eq 0; then - # Mac OS X 10.3 (and Darwin 7.0?) have a strange gcc (or - # system header files?) which produces lots of errors when - # using -ansi; so we don't =:-) - AC_MSG_RESULT([detected broken GNU C compiler, disabling "-ansi"]) - ansi="" - fi - - uname | grep "CYGWIN" >/dev/null 2>&1 - if test $? -eq 0; then - # The include files of Cygwin don't like -ansi, - # so we disable it: - AC_MSG_RESULT([detected Cygwin, disabling "-ansi"]) - ansi="" - fi - - add_CFLAGS="-pipe -Wall -W${ansi}${pedantic} $CFLAGS $CFLAGS_ADD" -else - the_CFLAGS="$CFLAGS" - add_CFLAGS="$CFLAGS_ADD" -fi - -CFLAGS="$the_CFLAGS $add_CFLAGS $add_DEFINES -DSYSCONFDIR='\"\$(sysconfdir)\"'" - -# -- Ausgabe der Dateien -- +# -- Generate files -- AC_OUTPUT([ \ Makefile \ doc/Makefile \ - MacOSX/Makefile \ - MacOSX/ngircd.pbproj/Makefile \ src/Makefile \ src/portab/Makefile \ src/tool/Makefile \ @@ -318,9 +280,18 @@ src/testsuite/Makefile \ man/Makefile \ contrib/Makefile \ - debian/Makefile \ + contrib/Debian/Makefile \ + contrib/MacOSX/Makefile \ ]) +type dpkg >/dev/null 2>&1 +if test $? -eq 0; then + # Generate debian/ link if the dpkg command exists + # (read: if we are running on a debian compatible system) + echo "creating Debian-specific links ..." + test -f debian/rules || ln -s contrib/Debian debian +fi + # -- Result -- echo @@ -334,11 +305,10 @@ M=`eval echo ${mandir}` ; M=`eval echo ${M}` D=`eval echo ${datadir}/doc/${PACKAGE}` ; D=`eval echo ${D}` -echo " Host: ${host}" +echo " Target: ${target}" +test "$target" != "$host" && echo " Host: ${host}" echo " Compiler: ${CC}" -echo " Compiler flags: ${the_CFLAGS}" -test -n "$add_CFLAGS" && echo " ${add_CFLAGS}" -test -n "$add_DEFINES" && echo " ${add_DEFINES}" +test -n "$CFLAGS" && echo " Compiler flags: ${CFLAGS}" test -n "$CPPFLAGS" && echo " Preprocessor flags: ${CPPFLAGS}" test -n "$LDFLAGS" && echo " Linker flags: ${LDFLAGS}" test -n "$LIBS" && echo " Libraries: ${LIBS}" @@ -384,6 +354,12 @@ test "$x_ircplus_on" = "yes" \ && echo "yes" \ || echo "no" -echo + +echo $ECHO_N " IDENT support: $ECHO_C" +test "$x_identauth_on" = "yes" \ + && echo $ECHO_N "yes $ECHO_C" \ + || echo $ECHO_N "no $ECHO_C" + +echo; echo # -eof- Index: contrib/Makefile.am =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/contrib/Makefile.am,v retrieving revision 1.1 retrieving revision 1.4 diff -u -r1.1 -r1.4 --- contrib/Makefile.am 1 Oct 2002 09:57:08 -0000 1.1 +++ contrib/Makefile.am 28 Apr 2004 12:18:02 -0000 1.4 @@ -1,6 +1,6 @@ # # ngIRCd -- The Next Generation IRC Daemon -# Copyright (c)2001,2002 by Alexander Barton (alex@barton.de) +# Copyright (c)2001-2004 Alexander Barton # # Dieses Programm ist freie Software. Sie koennen es unter den Bedingungen # der GNU General Public License (GPL), wie von der Free Software Foundation @@ -9,10 +9,12 @@ # 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.1 2002/10/01 09:57:08 alex Exp $ +# $Id: Makefile.am,v 1.4 2004/04/28 12:18:02 alex Exp $ # -EXTRA_DIST = ngircd.spec +SUBDIRS = Debian MacOSX + +EXTRA_DIST = README ngircd.spec systrace.policy maintainer-clean-local: rm -f Makefile Makefile.in Index: contrib/ngircd.spec =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/contrib/ngircd.spec,v retrieving revision 1.2.4.7 retrieving revision 1.4.2.3 diff -u -r1.2.4.7 -r1.4.2.3 --- contrib/ngircd.spec 5 Feb 2004 13:33:24 -0000 1.2.4.7 +++ contrib/ngircd.spec 26 Jun 2004 09:19:58 -0000 1.4.2.3 @@ -1,5 +1,5 @@ %define name ngircd -%define version 0.7.7 +%define version 0.8.0 %define release 1 %define prefix %{_prefix} Index: doc/FAQ.txt =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/doc/FAQ.txt,v retrieving revision 1.5.2.1 retrieving revision 1.7 diff -u -r1.5.2.1 -r1.7 --- doc/FAQ.txt 29 Apr 2003 13:45:09 -0000 1.5.2.1 +++ doc/FAQ.txt 7 Nov 2003 21:32:15 -0000 1.7 @@ -64,4 +64,4 @@ -- -$Id: FAQ.txt,v 1.5.2.1 2003/04/29 13:45:09 alex Exp $ +$Id: FAQ.txt,v 1.7 2003/11/07 21:32:15 alex Exp $ Index: doc/Makefile.am =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/doc/Makefile.am,v retrieving revision 1.16.2.1 retrieving revision 1.17 diff -u -r1.16.2.1 -r1.17 --- doc/Makefile.am 22 Apr 2003 23:52:48 -0000 1.16.2.1 +++ doc/Makefile.am 22 Apr 2003 23:50:18 -0000 1.17 @@ -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.16.2.1 2003/04/22 23:52:48 alex Exp $ +# $Id: Makefile.am,v 1.17 2003/04/22 23:50:18 alex Exp $ # EXTRA_DIST = CVS.txt FAQ.txt Protocol.txt Platforms.txt \ Index: doc/Platforms.txt =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/doc/Platforms.txt,v retrieving revision 1.1.2.5 retrieving revision 1.11 diff -u -r1.1.2.5 -r1.11 --- doc/Platforms.txt 18 Jul 2003 20:48:20 -0000 1.1.2.5 +++ doc/Platforms.txt 5 Apr 2004 11:11:05 -0000 1.11 @@ -1,7 +1,7 @@ ngIRCd - Next Generation IRC Server - (c)2001-2003 by Alexander Barton, + (c)2001-2004 Alexander Barton alex@barton.de, http://www.barton.de/ ngIRCd is free software and published under the @@ -26,31 +26,34 @@ | | | | Platform Compiler ngIRCd Date Tester C M T R See --------------------------- ------------ ---------- -------- ------ - - - - --- -i386/pc/solaris2.9 gcc 3.2.2 0.7.x-CVS 03-04-28 alex Y Y Y Y +i386/pc/solaris2.9 gcc 3.2.2 CVSHEAD 04-02-24 alex Y Y Y Y i386/unknown/freebsd5.0 gcc 3.2.1 0.7.0 03-05-15 alex Y Y Y Y i386/unknown/gnu0.3 gcc 3.2.3 CVSHEAD 03-05-05 alex Y Y n Y -i386/unknown/netbsdelf1.6.1 gcc 2.95.3 0.7.x-CVS 03-04-23 alex Y Y Y Y +i386/unknown/netbsdelf1.6.1 gcc 2.95.3 CVSHEAD 04-02-24 alex Y Y Y Y i686/pc/cygwin gcc 3.2 0.7.x-CVS 03-04-24 alex Y Y n Y -i686/pc/linux-gnu gcc 2.95/3.x 0.7.0 03-05-15 alex Y Y Y Y (1) +i686/pc/linux-gnu gcc 2.95 0.7.0 03-05-15 alex Y Y Y Y (1) +i686/pc/linux-gnu gcc 3.3.3 CVSHEAD 04-02-22 alex Y Y Y Y (1) m68k/apple/aux3.1.1 Orig. A/UX 0.7.x-CVS 03-04-22 alex Y Y Y Y (2) m68k/hp/hp-ux9.10 Orig. HPUX 0.7.x-CVS 03-04-30 goetz Y Y Y Y +m88k/dg/dgux5.4R3.10 gcc 2.5.8 CVSHEAD 04-03-15 alex Y Y ? ? powerpc/apple/darwin6.5 gcc 3.1 0.7.x-CVS 03-04-23 alex Y Y Y Y +powerpc/apple/darwin7.2.0 gcc 3.3 CVSHEAD 04-02-22 alex Y Y Y Y sparc/sun/solaris2.6 gcc 2.95.3 0.7.x-CVS 03-04-22 alex Y Y Y Y -sparc/sun/solaris2.7 gcc 3.3 CVSHEAD 03-07-06 alex Y Y Y Y +sparc/sun/solaris2.7 gcc 3.3 CVSHEAD 04-02-24 alex Y Y Y Y Notes ~~~~~ (1) i686/pc/linux-gnu: ngIRCd has been tested with various Linux distributions, such as SuSE, - RedHat, Debian, and Gentoo using Kernels 2.2.x or 2.4.x and various - versions of the GNU C compiler (2.95.3, 3.0, 3.2 and 3.3). The eldest - glibc used was glibc-2.0.7. ngIRCd compiled and run on all these systems - without problems. + RedHat, Debian, and Gentoo using Kernels 2.2.x, 2.4.x and 2.6.x with + various versions of the GNU C compiler (2.95.3, 3.0, 3.2, and 3.3). The + eldest glibc used was glibc-2.0.7. ngIRCd compiled and run on all these + systems without problems. (2) This compiler is an pre-ANSI C compiler, therefore the source code is automatically converted using the included ansi2knr tool while building. -- -$Id: Platforms.txt,v 1.1.2.5 2003/07/18 20:48:20 alex Exp $ +$Id: Platforms.txt,v 1.11 2004/04/05 11:11:05 alex Exp $ Index: doc/Protocol.txt =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/doc/Protocol.txt,v retrieving revision 1.9.2.2 retrieving revision 1.12 diff -u -r1.9.2.2 -r1.12 --- doc/Protocol.txt 8 Dec 2003 14:24:13 -0000 1.9.2.2 +++ doc/Protocol.txt 25 Apr 2004 15:44:10 -0000 1.12 @@ -75,6 +75,10 @@ - C: The server supports the CHANINFO command. +- L: INVITE- and BAN-lists should be synchronized between servers: if the + peer understands this flag, it will send "MODE +I" and "MODE +b" + commands after the server link has been established. + - o: IRC operators are allowed to change channel- and channel-user-modes even if they aren't channel-operator of the affected channel. @@ -111,4 +115,4 @@ -- -$Id: Protocol.txt,v 1.9.2.2 2003/12/08 14:24:13 alex Exp $ +$Id: Protocol.txt,v 1.12 2004/04/25 15:44:10 alex Exp $ Index: doc/README-BeOS.txt =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/doc/README-BeOS.txt,v retrieving revision 1.6.2.1 retrieving revision 1.7 diff -u -r1.6.2.1 -r1.7 --- doc/README-BeOS.txt 18 Jul 2003 20:48:20 -0000 1.6.2.1 +++ doc/README-BeOS.txt 15 May 2003 21:47:57 -0000 1.7 @@ -50,4 +50,4 @@ Fuer eine Aenderung im CVS ist es aber meiner Meinung nach noch zu frueh ... -- -$Id: README-BeOS.txt,v 1.6.2.1 2003/07/18 20:48:20 alex Exp $ +$Id: README-BeOS.txt,v 1.7 2003/05/15 21:47:57 alex Exp $ Index: doc/sample-ngircd.conf =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/doc/sample-ngircd.conf,v retrieving revision 1.20.2.4 retrieving revision 1.25.2.1 diff -u -r1.20.2.4 -r1.25.2.1 --- doc/sample-ngircd.conf 19 Dec 2003 14:30:49 -0000 1.20.2.4 +++ doc/sample-ngircd.conf 7 May 2004 11:24:17 -0000 1.25.2.1 @@ -1,4 +1,4 @@ -# $Id: sample-ngircd.conf,v 1.20.2.4 2003/12/19 14:30:49 alex Exp $ +# $Id: sample-ngircd.conf,v 1.25.2.1 2004/05/07 11:24:17 alex Exp $ # # This is a sample configuration file for the ngIRCd, which must be adepted @@ -23,7 +23,7 @@ # Info text of the server. This will be shown by WHOIS and # LINKS requests for example. Info = Server Info Text - + # Global password for all users needed to connect to the server ;Password = abc @@ -45,6 +45,10 @@ # be shown to all users connecting to the server: ;MotdFile = /usr/local/etc/ngircd.motd + # 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. + ;MotdPhrase = "Hello world!" + # User ID under which the server should run; you can use the name # of the user or the numerical ID. ATTENTION: For this to work the # server must have been started with root privileges! In addition, @@ -57,6 +61,13 @@ # server must have been started with root privileges! ;ServerGID = 65534 + # 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. + # ATTENTION: For this to work the server must have been started + # with root privileges! + ;ChrootDir = /var/empty + # After seconds of inactivity the server will send a # PING to the peer to test whether it is alive or not. ;PingTimeout = 120 Index: man/ngircd.8 =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/man/ngircd.8,v retrieving revision 1.8 retrieving revision 1.9 diff -u -r1.8 -r1.9 --- man/ngircd.8 10 Mar 2003 00:58:06 -0000 1.8 +++ man/ngircd.8 5 Apr 2004 10:59:10 -0000 1.9 @@ -1,5 +1,5 @@ .\" -.\" $Id: ngircd.8,v 1.8 2003/03/10 00:58:06 alex Exp $ +.\" $Id: ngircd.8,v 1.9 2004/04/05 10:59:10 alex Exp $ .\" .TH ngircd 8 "March 2003" ngircd "ngIRCd Manual" .SH NAME @@ -36,9 +36,6 @@ .PP You can use these options to modify this default: .TP -\fB\-\-configtest\fR -Read, validate and display the configuration; then exit. -.TP \fB\-f\fR \fIfile\fR, \fB\-\-config\fR \fIfile\fR Use .I file @@ -52,6 +49,9 @@ 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 Index: man/ngircd.conf.5 =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/man/ngircd.conf.5,v retrieving revision 1.9.2.2 retrieving revision 1.12.2.1 diff -u -r1.9.2.2 -r1.12.2.1 --- man/ngircd.conf.5 7 Nov 2003 20:51:10 -0000 1.9.2.2 +++ man/ngircd.conf.5 7 May 2004 11:24:18 -0000 1.12.2.1 @@ -1,5 +1,5 @@ .\" -.\" $Id: ngircd.conf.5,v 1.9.2.2 2003/11/07 20:51:10 alex Exp $ +.\" $Id: ngircd.conf.5,v 1.12.2.1 2004/05/07 11:24:18 alex Exp $ .\" .TH ngircd.conf 5 "Mai 2003" ngircd "ngIRCd Manual" .SH NAME @@ -75,6 +75,10 @@ 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. @@ -98,6 +102,18 @@ 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 \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. Index: src/ngircd/Makefile.am =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/Makefile.am,v retrieving revision 1.39.2.3 retrieving revision 1.42 diff -u -r1.39.2.3 -r1.42 --- src/ngircd/Makefile.am 4 Dec 2003 14:13:42 -0000 1.39.2.3 +++ src/ngircd/Makefile.am 4 Dec 2003 14:05:16 -0000 1.42 @@ -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.39.2.3 2003/12/04 14:13:42 alex Exp $ +# $Id: Makefile.am,v 1.42 2003/12/04 14:05:16 alex Exp $ # AUTOMAKE_OPTIONS = ../portab/ansi2knr Index: src/ngircd/channel.c =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/channel.c,v retrieving revision 1.42.2.1 retrieving revision 1.45 diff -u -r1.42.2.1 -r1.45 --- src/ngircd/channel.c 7 Nov 2003 20:51:10 -0000 1.42.2.1 +++ src/ngircd/channel.c 11 Mar 2004 22:16:31 -0000 1.45 @@ -17,12 +17,13 @@ #include "portab.h" -static char UNUSED id[] = "$Id: channel.c,v 1.42.2.1 2003/11/07 20:51:10 alex Exp $"; +static char UNUSED id[] = "$Id: channel.c,v 1.45 2004/03/11 22:16:31 alex Exp $"; #include "imp.h" #include #include #include +#include #include "conn-func.h" #include "client.h" @@ -707,7 +708,7 @@ assert( Name != NULL ); - c = malloc( sizeof( CHANNEL )); + c = (CHANNEL *)malloc( sizeof( CHANNEL )); if( ! c ) { Log( LOG_EMERG, "Can't allocate memory! [New_Chan]" ); @@ -759,7 +760,7 @@ assert( Client != NULL ); /* neue CL2CHAN-Struktur anlegen */ - cl2chan = malloc( sizeof( CL2CHAN )); + cl2chan = (CL2CHAN *)malloc( sizeof( CL2CHAN )); if( ! cl2chan ) { Log( LOG_EMERG, "Can't allocate memory! [Add_Client]" ); Index: src/ngircd/client.c =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/client.c,v retrieving revision 1.74 retrieving revision 1.76 diff -u -r1.74 -r1.76 --- src/ngircd/client.c 31 Mar 2003 15:54:21 -0000 1.74 +++ src/ngircd/client.c 11 Mar 2004 22:16:31 -0000 1.76 @@ -17,7 +17,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: client.c,v 1.74 2003/03/31 15:54:21 alex Exp $"; +static char UNUSED id[] = "$Id: client.c,v 1.76 2004/03/11 22:16:31 alex Exp $"; #include "imp.h" #include @@ -25,6 +25,7 @@ #include #include #include +#include #include #include "conn.h" @@ -1023,7 +1024,7 @@ CLIENT *c; - c = malloc( sizeof( CLIENT )); + c = (CLIENT *)malloc( sizeof( CLIENT )); if( ! c ) { Log( LOG_EMERG, "Can't allocate memory! [New_Client_Struct]" ); Index: src/ngircd/conf.c =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/conf.c,v retrieving revision 1.57.2.4 retrieving revision 1.63.2.1 diff -u -r1.57.2.4 -r1.63.2.1 --- src/ngircd/conf.c 19 Dec 2003 14:30:49 -0000 1.57.2.4 +++ src/ngircd/conf.c 7 May 2004 11:24:18 -0000 1.63.2.1 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: conf.c,v 1.57.2.4 2003/12/19 14:30:49 alex Exp $"; +static char UNUSED id[] = "$Id: conf.c,v 1.63.2.1 2004/05/07 11:24:18 alex Exp $"; #include "imp.h" #include @@ -23,6 +23,7 @@ #include #include #include +#include #include #include #include @@ -113,6 +114,8 @@ printf( " AdminInfo2 = %s\n", Conf_ServerAdmin2 ); printf( " AdminEMail = %s\n", Conf_ServerAdminMail ); printf( " MotdFile = %s\n", Conf_MotdFile ); + printf( " MotdPhrase = %s\n", Conf_MotdPhrase ); + printf( " ChrootDir= %s\n", Conf_Chroot ); printf( " Ports = " ); for( i = 0; i < Conf_ListenPorts_Count; i++ ) { @@ -342,6 +345,10 @@ strlcpy( Conf_MotdFile, SYSCONFDIR, sizeof( Conf_MotdFile )); strlcat( Conf_MotdFile, MOTD_FILE, sizeof( Conf_MotdFile )); + strlcpy( Conf_MotdPhrase, MOTD_PHRASE, sizeof( Conf_MotdPhrase )); + + strlcpy( Conf_Chroot, CHROOT_DIR, sizeof( Conf_Chroot )); + Conf_ListenPorts_Count = 0; strcpy( Conf_ListenAddress, "" ); @@ -612,6 +619,18 @@ if( strlcpy( Conf_MotdFile, Arg, sizeof( Conf_MotdFile )) >= sizeof( Conf_MotdFile )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"MotdFile\" too long!", NGIRCd_ConfFile, Line ); return; } + if( strcasecmp( Var, "MotdPhrase" ) == 0 ) + { + /* "Message of the day" phrase (instead of file) */ + if( strlcpy( Conf_MotdPhrase, Arg, sizeof( Conf_MotdPhrase )) >= sizeof( Conf_MotdPhrase )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"MotdPhrase\" too long!", NGIRCd_ConfFile, Line ); + return; + } + if( strcasecmp( Var, "ChrootDir" ) == 0 ) + { + /* directory for chroot() */ + if( strlcpy( Conf_Chroot, Arg, sizeof( Conf_Chroot )) >= sizeof( Conf_Chroot )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"ChrootDir\" too long!", NGIRCd_ConfFile, Line ); + return; + } if( strcasecmp( Var, "ServerUID" ) == 0 ) { /* UID the daemon should switch to */ @@ -620,7 +639,7 @@ else { #ifdef HAVE_ISDIGIT - if( ! isdigit( *Arg )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"ServerUID\" is not a number!", NGIRCd_ConfFile, Line ); + if( ! isdigit( (INT)*Arg )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"ServerUID\" is not a number!", NGIRCd_ConfFile, Line ); else #endif Conf_UID = (UINT)atoi( Arg ); @@ -635,7 +654,7 @@ else { #ifdef HAVE_ISDIGIT - if( ! isdigit( *Arg )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"ServerGID\" is not a number!", NGIRCd_ConfFile, Line ); + if( ! isdigit( (INT)*Arg )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"ServerGID\" is not a number!", NGIRCd_ConfFile, Line ); else #endif Conf_GID = (UINT)atoi( Arg ); @@ -688,7 +707,7 @@ { /* Maximum number of connections. Values <= 0 are equal to "no limit". */ #ifdef HAVE_ISDIGIT - if( ! isdigit( *Arg )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"MaxConnections\" is not a number!", NGIRCd_ConfFile, Line ); + if( ! isdigit( (INT)*Arg )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"MaxConnections\" is not a number!", NGIRCd_ConfFile, Line ); else #endif Conf_MaxConnections = atol( Arg ); @@ -698,7 +717,7 @@ { /* Maximum number of simoultanous connections from one IP. Values <= 0 are equal to "no limit". */ #ifdef HAVE_ISDIGIT - if( ! isdigit( *Arg )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"MaxConnectionsIP\" is not a number!", NGIRCd_ConfFile, Line ); + if( ! isdigit( (INT)*Arg )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"MaxConnectionsIP\" is not a number!", NGIRCd_ConfFile, Line ); else #endif Conf_MaxConnectionsIP = atoi( Arg ); @@ -708,7 +727,7 @@ { /* Maximum number of channels a user can join. Values <= 0 are equal to "no limit". */ #ifdef HAVE_ISDIGIT - if( ! isdigit( *Arg )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"MaxJoins\" is not a number!", NGIRCd_ConfFile, Line ); + if( ! isdigit( (INT)*Arg )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"MaxJoins\" is not a number!", NGIRCd_ConfFile, Line ); else #endif Conf_MaxJoins = atoi( Arg ); @@ -801,7 +820,7 @@ { /* Server group */ #ifdef HAVE_ISDIGIT - if( ! isdigit( *Arg )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"Group\" is not a number!", NGIRCd_ConfFile, Line ); + if( ! isdigit( (INT)*Arg )) Config_Error( LOG_WARNING, "%s, line %d: Value of \"Group\" is not a number!", NGIRCd_ConfFile, Line ); else #endif New_Server.group = atoi( Arg ); Index: src/ngircd/conf.h =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/conf.h,v retrieving revision 1.26.2.1 retrieving revision 1.28.2.1 diff -u -r1.26.2.1 -r1.28.2.1 --- src/ngircd/conf.h 7 Nov 2003 20:51:11 -0000 1.26.2.1 +++ src/ngircd/conf.h 7 May 2004 11:24:18 -0000 1.28.2.1 @@ -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.26.2.1 2003/11/07 20:51:11 alex Exp $ + * $Id: conf.h,v 1.28.2.1 2004/05/07 11:24:18 alex Exp $ * * Configuration management (header) */ @@ -72,6 +72,9 @@ /* File with MOTD text */ GLOBAL CHAR Conf_MotdFile[FNAME_LEN]; +/* Phrase with MOTD text */ +GLOBAL CHAR Conf_MotdPhrase[LINE_LEN]; + /* Ports the server should listen on */ GLOBAL UINT Conf_ListenPorts[MAX_LISTEN_PORTS]; GLOBAL INT Conf_ListenPorts_Count; @@ -83,6 +86,9 @@ GLOBAL UINT Conf_UID; GLOBAL UINT Conf_GID; +/* A directory to chroot() in */ +GLOBAL CHAR Conf_Chroot[FNAME_LEN]; + /* Timeouts for PING and PONG */ GLOBAL INT Conf_PingTimeout; GLOBAL INT Conf_PongTimeout; Index: src/ngircd/conn-func.c =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/conn-func.c,v retrieving revision 1.1.2.2 retrieving revision 1.3 diff -u -r1.1.2.2 -r1.3 --- src/ngircd/conn-func.c 26 Dec 2003 16:16:48 -0000 1.1.2.2 +++ src/ngircd/conn-func.c 26 Dec 2003 15:55:07 -0000 1.3 @@ -16,7 +16,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: conn-func.c,v 1.1.2.2 2003/12/26 16:16:48 alex Exp $"; +static char UNUSED id[] = "$Id: conn-func.c,v 1.3 2003/12/26 15:55:07 alex Exp $"; #include "imp.h" #include Index: src/ngircd/conn-zip.c =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/conn-zip.c,v retrieving revision 1.3.2.1 retrieving revision 1.5 diff -u -r1.3.2.1 -r1.5 --- src/ngircd/conn-zip.c 26 Dec 2003 16:16:48 -0000 1.3.2.1 +++ src/ngircd/conn-zip.c 25 Apr 2004 13:55:36 -0000 1.5 @@ -19,7 +19,7 @@ #ifdef ZLIB -static char UNUSED id[] = "$Id: conn-zip.c,v 1.3.2.1 2003/12/26 16:16:48 alex Exp $"; +static char UNUSED id[] = "$Id: conn-zip.c,v 1.5 2004/04/25 13:55:36 alex Exp $"; #include "imp.h" #include @@ -161,7 +161,7 @@ result = inflate( in, Z_SYNC_FLUSH ); if( result != Z_OK ) { - Log( LOG_ALERT, "Decompression error: code %d (ni=%d, ai=%d, no=%d, ao=%d)!?", result, in->next_in, in->avail_in, in->next_out, in->avail_out ); + Log( LOG_ALERT, "Decompression error: %s (code=%d, ni=%d, ai=%d, no=%d, ao=%d)!?", in->msg, result, in->next_in, in->avail_in, in->next_out, in->avail_out ); Conn_Close( Idx, "Decompression error!", NULL, FALSE ); return FALSE; } Index: src/ngircd/conn-zip.h =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/conn-zip.h,v retrieving revision 1.1.2.1 retrieving revision 1.2 diff -u -r1.1.2.1 -r1.2 --- src/ngircd/conn-zip.h 26 Dec 2003 16:16:48 -0000 1.1.2.1 +++ src/ngircd/conn-zip.h 26 Dec 2003 15:55:07 -0000 1.2 @@ -8,7 +8,7 @@ * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: conn-zip.h,v 1.1.2.1 2003/12/26 16:16:48 alex Exp $ + * $Id: conn-zip.h,v 1.2 2003/12/26 15:55:07 alex Exp $ * * Connection compression using ZLIB (header) */ Index: src/ngircd/conn.c =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/conn.c,v retrieving revision 1.122.2.4 retrieving revision 1.134.2.2 diff -u -r1.122.2.4 -r1.134.2.2 --- src/ngircd/conn.c 3 Feb 2004 13:54:36 -0000 1.122.2.4 +++ src/ngircd/conn.c 30 May 2004 16:24:21 -0000 1.134.2.2 @@ -1,6 +1,6 @@ /* * ngIRCd -- The Next Generation IRC Daemon - * Copyright (c)2001-2003 by Alexander Barton (alex@barton.de) + * Copyright (c)2001-2004 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 @@ -16,7 +16,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: conn.c,v 1.122.2.4 2004/02/03 13:54:36 alex Exp $"; +static char UNUSED id[] = "$Id: conn.c,v 1.134.2.2 2004/05/30 16:24:21 alex Exp $"; #include "imp.h" #include @@ -33,18 +33,22 @@ #include #include +#ifdef HAVE_NETINET_IP_H +# include +#endif + #ifdef HAVE_ARPA_INET_H -#include +# include #else -#define PF_INET AF_INET +# define PF_INET AF_INET #endif #ifdef HAVE_STDINT_H -#include /* e.g. for Mac OS X */ +# include /* e.g. for Mac OS X */ #endif #ifdef TCPWRAP -#include /* for TCP Wrappers */ +# include /* for TCP Wrappers */ #endif #include "defines.h" @@ -64,7 +68,7 @@ #include "tool.h" #ifdef RENDEZVOUS -#include "rendezvous.h" +# include "rendezvous.h" #endif #include "exp.h" @@ -113,7 +117,7 @@ /* konfiguriertes Limit beachten */ if( Pool_Size > Conf_MaxConnections ) Pool_Size = Conf_MaxConnections; } - My_Connections = malloc( sizeof( CONNECTION ) * Pool_Size ); + My_Connections = (CONNECTION *)malloc( sizeof( CONNECTION ) * Pool_Size ); if( ! My_Connections ) { /* Speicher konnte nicht alloziert werden! */ @@ -610,6 +614,7 @@ * sub-processes are closed down. */ CLIENT *c; + CHAR *txt; DOUBLE in_k, out_k; #ifdef ZLIB DOUBLE in_z_k, out_z_k; @@ -617,7 +622,6 @@ #endif assert( Idx > NONE ); - assert( My_Connections[Idx].sock > NONE ); /* Is this link already shutting down? */ if( My_Connections[Idx].options & CONN_ISCLOSING ) @@ -627,8 +631,16 @@ return; } + assert( My_Connections[Idx].sock > NONE ); + /* Mark link as "closing" */ My_Connections[Idx].options |= CONN_ISCLOSING; + + if( LogMsg ) txt = LogMsg; + else txt = FwdMsg; + if( ! txt ) txt = "Reason unknown"; + + Log( LOG_INFO, "Shutting down connection %d (%s) with %s:%d ...", Idx, LogMsg ? LogMsg : FwdMsg, My_Connections[Idx].host, ntohs( My_Connections[Idx].addr.sin_port )); /* Search client, if any */ c = Client_GetFromConn( Idx ); @@ -647,7 +659,6 @@ /* Send ERROR to client (see RFC!) */ if( FwdMsg ) Conn_WriteStr( Idx, "ERROR :%s", FwdMsg ); else Conn_WriteStr( Idx, "ERROR :Closing connection." ); - if( My_Connections[Idx].sock == NONE ) return; } /* Try to write out the write buffer */ @@ -868,11 +879,9 @@ return FALSE; } -#ifdef DEBUG - Log( LOG_DEBUG, "Connection %d with \"%s:%d\" established, now sendig PASS and SERVER ...", Idx, My_Connections[Idx].host, Conf_Server[Conf_GetServer( Idx )].port ); -#endif + Log( LOG_INFO, "Connection %d with \"%s:%d\" established. Now logging in ...", Idx, My_Connections[Idx].host, Conf_Server[Conf_GetServer( Idx )].port ); - /* PASS und SERVER verschicken */ + /* Send PASS and SERVER command to peer */ Conn_WriteStr( Idx, "PASS %s %s", Conf_Server[Conf_GetServer( Idx )].pwd_out, NGIRCd_ProtoID ); return Conn_WriteStr( Idx, "SERVER %s :%s", Conf_ServerName, Conf_ServerInfo ); } @@ -995,11 +1004,11 @@ /* zunaechst realloc() versuchen; wenn das scheitert, malloc() versuchen * und Daten ggf. "haendisch" umkopieren. (Haesslich! Eine wirklich * dynamische Verwaltung waere wohl _deutlich_ besser ...) */ - ptr = realloc( My_Connections, sizeof( CONNECTION ) * new_size ); + ptr = (POINTER *)realloc( My_Connections, sizeof( CONNECTION ) * new_size ); if( ! ptr ) { /* realloc() ist fehlgeschlagen. Nun malloc() probieren: */ - ptr = malloc( sizeof( CONNECTION ) * new_size ); + ptr = (POINTER *)malloc( sizeof( CONNECTION ) * new_size ); if( ! ptr ) { /* Offenbar steht kein weiterer Sepeicher zur Verfuegung :-( */ @@ -1021,7 +1030,7 @@ #endif /* Adjust pointer to new block */ - My_Connections = ptr; + My_Connections = (CONNECTION *)ptr; /* Initialize new items */ for( idx = Pool_Size; idx < new_size; idx++ ) Init_Conn_Struct( idx ); @@ -1055,7 +1064,11 @@ /* Hostnamen ermitteln */ strlcpy( My_Connections[idx].host, inet_ntoa( new_addr.sin_addr ), sizeof( My_Connections[idx].host )); Client_SetHostname( c, My_Connections[idx].host ); +#ifdef IDENTAUTH + s = Resolve_Addr( &new_addr, My_Connections[idx].sock ); +#else s = Resolve_Addr( &new_addr ); +#endif if( s ) { /* Sub-Prozess wurde asyncron gestartet */ @@ -1546,23 +1559,39 @@ LOCAL BOOLEAN Init_Socket( INT Sock ) { - /* Socket-Optionen setzen */ + /* Initialize socket (set options) */ - INT on = 1; + INT value; -#ifdef O_NONBLOCK /* A/UX kennt das nicht? */ +#ifdef O_NONBLOCK /* unknown on A/UX */ if( fcntl( Sock, F_SETFL, O_NONBLOCK ) != 0 ) { - Log( LOG_CRIT, "Can't enable non-blocking mode: %s!", strerror( errno )); + Log( LOG_CRIT, "Can't enable non-blocking mode for socket: %s!", strerror( errno )); close( Sock ); return FALSE; } #endif - if( setsockopt( Sock, SOL_SOCKET, SO_REUSEADDR, &on, (socklen_t)sizeof( on )) != 0) + + /* Don't block this port after socket shutdown */ + value = 1; + if( setsockopt( Sock, SOL_SOCKET, SO_REUSEADDR, &value, (socklen_t)sizeof( value )) != 0 ) + { + Log( LOG_ERR, "Can't set socket option SO_REUSEADDR: %s!", strerror( errno )); + /* ignore this error */ + } + + /* Set type of service (TOS) */ +#if defined(IP_TOS) && defined(IPTOS_LOWDELAY) + value = IPTOS_LOWDELAY; +#ifdef DEBUG + Log( LOG_DEBUG, "Setting option IP_TOS on socket %d to IPTOS_LOWDELAY (%d).", Sock, value ); +#endif + if( setsockopt( Sock, SOL_IP, IP_TOS, &value, (socklen_t)sizeof( value )) != 0 ) { - Log( LOG_ERR, "Can't set socket options: %s!", strerror( errno )); - /* dieser Fehler kann ignoriert werden. */ + Log( LOG_ERR, "Can't set socket option IP_TOS: %s!", strerror( errno )); + /* ignore this error */ } +#endif return TRUE; } /* Init_Socket */ @@ -1571,35 +1600,28 @@ LOCAL VOID Read_Resolver_Result( INT r_fd ) { - /* Ergebnis von Resolver Sub-Prozess aus Pipe lesen - * und entsprechende Connection aktualisieren */ + /* Read result of resolver sub-process from pipe and update the + * apropriate connection/client structure(s): hostname and/or + * IDENT user name.*/ - CHAR result[HOST_LEN]; CLIENT *c; INT len, i, n; + RES_STAT *s; + CHAR *ptr; - FD_CLR( r_fd, &Resolver_FDs ); - - /* Anfrage vom Parent lesen */ - len = read( r_fd, result, HOST_LEN - 1 ); - if( len < 0 ) - { - /* Fehler beim Lesen aus der Pipe */ - close( r_fd ); - Log( LOG_CRIT, "Resolver: Can't read result: %s!", strerror( errno )); - return; - } - result[len] = '\0'; - - /* zugehoerige Connection suchen */ + /* Search associated connection ... */ for( i = 0; i < Pool_Size; i++ ) { - if(( My_Connections[i].sock != NONE ) && ( My_Connections[i].res_stat ) && ( My_Connections[i].res_stat->pipe[0] == r_fd )) break; + if(( My_Connections[i].sock != NONE ) + && ( My_Connections[i].res_stat != NULL ) + && ( My_Connections[i].res_stat->pipe[0] == r_fd )) + break; } if( i >= Pool_Size ) { - /* Opsa! Keine passende Connection gefunden!? Vermutlich - * wurde sie schon wieder geschlossen. */ + /* Ops, none found? Probably the connection has already + * been closed!? We'll ignore that ... */ + FD_CLR( r_fd, &Resolver_FDs ); close( r_fd ); #ifdef DEBUG Log( LOG_DEBUG, "Resolver: Got result for unknown connection!?" ); @@ -1607,33 +1629,103 @@ return; } + /* Get resolver structure */ + s = My_Connections[i].res_stat; + assert( s != NULL ); + + /* Read result from pipe */ + len = read( r_fd, s->buffer + s->bufpos, sizeof( s->buffer ) - s->bufpos - 1 ); + if( len < 0 ) + { + /* Error! */ + close( r_fd ); + Log( LOG_CRIT, "Resolver: Can't read result: %s!", strerror( errno )); + return; + } + s->bufpos += len; + s->buffer[s->bufpos] = '\0'; + + /* If the result string is incomplete, return to main loop and + * wait until we can read in more bytes. */ +#ifdef IDENTAUTH +try_resolve: +#endif + ptr = strchr( s->buffer, '\n' ); + if( ! ptr ) return; + *ptr = '\0'; + #ifdef DEBUG - Log( LOG_DEBUG, "Resolver: %s is \"%s\".", My_Connections[i].host, result ); + Log( LOG_DEBUG, "Got result from resolver: \"%s\" (%d bytes), stage %d.", s->buffer, len, s->stage ); #endif - /* Aufraeumen */ - close( My_Connections[i].res_stat->pipe[0] ); - close( My_Connections[i].res_stat->pipe[1] ); - free( My_Connections[i].res_stat ); - My_Connections[i].res_stat = NULL; - + /* Okay, we got a complete result: this is a host name for outgoing + * connections and a host name or IDENT user name (if enabled) for + * incoming conneciions.*/ if( My_Connections[i].sock > NONE ) { - /* Eingehende Verbindung: Hostnamen setzen */ + /* Incoming connection */ + + /* Search client ... */ c = Client_GetFromConn( i ); assert( c != NULL ); - strlcpy( My_Connections[i].host, result, sizeof( My_Connections[i].host )); - Client_SetHostname( c, result ); + + /* Only update client information of unregistered clients */ + if( Client_Type( c ) == CLIENT_UNKNOWN ) + { + if( s->stage == 0 ) + { + /* host name */ + strlcpy( My_Connections[i].host, s->buffer, sizeof( My_Connections[i].host )); + Client_SetHostname( c, s->buffer ); + +#ifdef IDENTAUTH + /* clean up buffer for IDENT result */ + len = strlen( s->buffer ) + 1; + memmove( s->buffer, s->buffer + len, sizeof( s->buffer ) - len ); + s->bufpos -= len; + + /* Don't close pipe and clean up, but + * instead wait for IDENT result */ + s->stage = 1; + goto try_resolve; + } + else if( s->stage == 1 ) + { + /* IDENT user name */ + if( s->buffer[0] ) + { + Log( LOG_INFO, "IDENT lookup for connection %ld: \"%s\".", i, s->buffer ); + Client_SetUser( c, s->buffer, TRUE ); + } + else Log( LOG_INFO, "IDENT lookup for connection %ld: no result.", i ); +#endif + } + else Log( LOG_ERR, "Resolver: got result for unknown stage %d!?", s->stage ); + } +#ifdef DEBUG + else Log( LOG_DEBUG, "Resolver: discarding result for already registered connection %d.", i ); +#endif } else { - /* Ausgehende Verbindung (=Server): IP setzen */ + /* Outgoing connection (server link): set the IP address + * so that we can connect to it in the main loop. */ + + /* Search server ... */ n = Conf_GetServer( i ); - if( n > NONE ) strlcpy( Conf_Server[n].ip, result, sizeof( Conf_Server[n].ip )); - else Log( LOG_ERR, "Got resolver result for non-configured server!?" ); + assert( n > NONE ); + + strlcpy( Conf_Server[n].ip, s->buffer, sizeof( Conf_Server[n].ip )); } - /* Penalty-Zeit zurueck setzen */ + /* Clean up ... */ + FD_CLR( r_fd, &Resolver_FDs ); + close( My_Connections[i].res_stat->pipe[0] ); + close( My_Connections[i].res_stat->pipe[1] ); + free( My_Connections[i].res_stat ); + My_Connections[i].res_stat = NULL; + + /* Reset penalty time */ Conn_ResetPenalty( i ); } /* Read_Resolver_Result */ Index: src/ngircd/conn.h =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/conn.h,v retrieving revision 1.31.2.1 retrieving revision 1.32 diff -u -r1.31.2.1 -r1.32 --- src/ngircd/conn.h 26 Dec 2003 16:16:48 -0000 1.31.2.1 +++ src/ngircd/conn.h 26 Dec 2003 15:55:07 -0000 1.32 @@ -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.31.2.1 2003/12/26 16:16:48 alex Exp $ + * $Id: conn.h,v 1.32 2003/12/26 15:55:07 alex Exp $ * * Connection management (header) */ Index: src/ngircd/defines.h =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/defines.h,v retrieving revision 1.42.2.2 retrieving revision 1.45.2.1 diff -u -r1.42.2.2 -r1.45.2.1 --- src/ngircd/defines.h 26 Dec 2003 16:16:48 -0000 1.42.2.2 +++ src/ngircd/defines.h 7 May 2004 11:24:18 -0000 1.45.2.1 @@ -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.42.2.2 2003/12/26 16:16:48 alex Exp $ + * $Id: defines.h,v 1.45.2.1 2004/05/07 11:24:18 alex Exp $ * * Global defines of ngIRCd. */ @@ -67,7 +67,7 @@ #define PROTOIRCPLUS "-IRC+" /* Protokoll-Suffix fŸr IRC+-Protokoll */ #ifdef IRCPLUS -# define IRCPLUSFLAGS "C" /* IRC+-Flags, die immer zutreffen */ +# define IRCPLUSFLAGS "CL" /* IRC+-Flags, die immer zutreffen */ #endif #define STARTUP_DELAY 1 /* Erst n Sek. nach Start zu anderen Servern verbinden */ @@ -83,6 +83,8 @@ #define CONFIG_FILE "/ngircd.conf" #define MOTD_FILE "/ngircd.motd" +#define MOTD_PHRASE "" +#define CHROOT_DIR "" #define ERROR_DIR "/tmp" Index: src/ngircd/irc-channel.c =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/irc-channel.c,v retrieving revision 1.25 retrieving revision 1.27 diff -u -r1.25 -r1.27 --- src/ngircd/irc-channel.c 8 Jan 2003 22:04:05 -0000 1.25 +++ src/ngircd/irc-channel.c 9 Apr 2004 20:46:48 -0000 1.27 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: irc-channel.c,v 1.25 2003/01/08 22:04:05 alex Exp $"; +static char UNUSED id[] = "$Id: irc-channel.c,v 1.27 2004/04/09 20:46:48 alex Exp $"; #include "imp.h" #include @@ -68,7 +68,7 @@ channame = strtok( Req->argv[0], "," ); while( channame ) { - chan = flags = NULL; + chan = NULL; flags = NULL; /* wird der Channel neu angelegt? */ if( Channel_Search( channame )) is_new_chan = FALSE; @@ -86,7 +86,7 @@ } } - /* Lokaler Client? */ + /* Local client? */ if( Client_Type( Client ) == CLIENT_USER ) { /* Test if the user has reached his maximum channel count */ @@ -159,6 +159,16 @@ } } } + else + { + /* Remote server: we don't need to know whether the + * client is invited or not, but we have to make sure + * that the "one shot" entries (generated by INVITE + * commands) in this list become deleted when a user + * joins a channel this way. */ + chan = Channel_Search( channame ); + if( chan != NULL ) (VOID)Lists_CheckInvited( target, chan ); + } /* Channel joinen (und ggf. anlegen) */ if( ! Channel_Join( target, channame )) Index: src/ngircd/irc-info.c =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/irc-info.c,v retrieving revision 1.16.2.4 retrieving revision 1.21.2.1 diff -u -r1.16.2.4 -r1.21.2.1 --- src/ngircd/irc-info.c 26 Dec 2003 16:16:48 -0000 1.16.2.4 +++ src/ngircd/irc-info.c 7 May 2004 11:24:18 -0000 1.21.2.1 @@ -14,13 +14,14 @@ #include "portab.h" -static char UNUSED id[] = "$Id: irc-info.c,v 1.16.2.4 2003/12/26 16:16:48 alex Exp $"; +static char UNUSED id[] = "$Id: irc-info.c,v 1.21.2.1 2004/05/07 11:24:18 alex Exp $"; #include "imp.h" #include #include #include #include +#include #include "ngircd.h" #include "cvs-version.h" @@ -772,6 +773,13 @@ assert( Client != NULL ); + if( Conf_MotdPhrase[0] ) + { + if( ! IRC_WriteStrClient( Client, RPL_MOTDSTART_MSG, Client_ID( Client ), Client_ID( Client_ThisServer( )))) return DISCONNECTED; + if( ! IRC_WriteStrClient( Client, RPL_MOTD_MSG, Client_ID( Client ), Conf_MotdPhrase )) return DISCONNECTED; + return IRC_WriteStrClient( Client, RPL_ENDOFMOTD_MSG, Client_ID( Client )); + } + fd = fopen( Conf_MotdFile, "r" ); if( ! fd ) { @@ -779,7 +787,7 @@ return IRC_WriteStrClient( Client, ERR_NOMOTD_MSG, Client_ID( Client ) ); } - IRC_WriteStrClient( Client, RPL_MOTDSTART_MSG, Client_ID( Client ), Client_ID( Client_ThisServer( ))); + if( ! IRC_WriteStrClient( Client, RPL_MOTDSTART_MSG, Client_ID( Client ), Client_ID( Client_ThisServer( )))) return DISCONNECTED; while( TRUE ) { if( ! fgets( line, 126, fd )) break; Index: src/ngircd/irc-login.c =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/irc-login.c,v retrieving revision 1.34.2.3 retrieving revision 1.40 diff -u -r1.34.2.3 -r1.40 --- src/ngircd/irc-login.c 4 Feb 2004 20:04:54 -0000 1.34.2.3 +++ src/ngircd/irc-login.c 11 Mar 2004 22:16:31 -0000 1.40 @@ -14,13 +14,14 @@ #include "portab.h" -static char UNUSED id[] = "$Id: irc-login.c,v 1.34.2.3 2004/02/04 20:04:54 alex Exp $"; +static char UNUSED id[] = "$Id: irc-login.c,v 1.40 2004/03/11 22:16:31 alex Exp $"; #include "imp.h" #include #include #include #include +#include #include "ngircd.h" #include "resolve.h" @@ -285,6 +286,10 @@ GLOBAL BOOLEAN IRC_USER( CLIENT *Client, REQUEST *Req ) { +#ifdef IDENTAUTH + CHAR *ptr; +#endif + assert( Client != NULL ); assert( Req != NULL ); @@ -298,11 +303,15 @@ if( Req->argc != 4 ) return IRC_WriteStrClient( Client, ERR_NEEDMOREPARAMS_MSG, Client_ID( Client ), Req->command ); /* User name */ +#ifdef IDENTAUTH + ptr = Client_User( Client ); + if( ! ptr || ! *ptr || *ptr == '~' ) Client_SetUser( Client, Req->argv[0], FALSE ); +#else Client_SetUser( Client, Req->argv[0], FALSE ); +#endif - /* "Real name" or user info text: Don't set it to the empty - * string, the original ircd can't deal with such "real names" - * (e. g. "USER user * * :") ... */ + /* "Real name" or user info text: Don't set it to the empty string, the original ircd + * can't deal with such "real names" (e. g. "USER user * * :") ... */ if( *Req->argv[3] ) Client_SetInfo( Client, Req->argv[3] ); else Client_SetInfo( Client, "-" ); @@ -500,7 +509,7 @@ assert( Nick != NULL ); assert( Reason != NULL ); - r.prefix = Client_ThisServer( ); + r.prefix = (CHAR *)Client_ThisServer( ); r.argv[0] = Nick; r.argv[1] = Reason; r.argc = 2; Index: src/ngircd/irc-mode.c =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/irc-mode.c,v retrieving revision 1.31.2.1 retrieving revision 1.35 diff -u -r1.31.2.1 -r1.35 --- src/ngircd/irc-mode.c 7 Nov 2003 20:51:11 -0000 1.31.2.1 +++ src/ngircd/irc-mode.c 25 Apr 2004 15:42:05 -0000 1.35 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: irc-mode.c,v 1.31.2.1 2003/11/07 20:51:11 alex Exp $"; +static char UNUSED id[] = "$Id: irc-mode.c,v 1.35 2004/04/25 15:42:05 alex Exp $"; #include "imp.h" #include @@ -225,7 +225,7 @@ else { /* Send reply to client and inform other servers */ - ok = IRC_WriteStrClientPrefix( Client, Origin, "MODE %s %s", Client_ID( Target ), the_modes ); + ok = IRC_WriteStrClientPrefix( Client, Origin, "MODE %s :%s", Client_ID( Target ), the_modes ); IRC_WriteStrServersPrefix( Client, Origin, "MODE %s :%s", Client_ID( Target ), the_modes ); } Log( LOG_DEBUG, "User \"%s\": Mode change, now \"%s\".", Client_Mask( Target ), Client_Modes( Target )); @@ -635,6 +635,7 @@ Add_Invite( CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, CHAR *Pattern ) { CHAR *mask; + BOOLEAN already; assert( Client != NULL ); assert( Channel != NULL ); @@ -642,7 +643,12 @@ mask = Lists_MakeMask( Pattern ); - if( ! Lists_AddInvited( Prefix, mask, Channel, FALSE )) return CONNECTED; + already = Lists_IsInviteEntry( mask, Channel ); + + if( ! Lists_AddInvited( mask, Channel, FALSE )) return CONNECTED; + + if(( Client_Type( Prefix ) == CLIENT_SERVER ) && ( already == TRUE )) return CONNECTED; + return Send_ListChange( "+I", Prefix, Client, Channel, mask ); } /* Add_Invite */ @@ -651,6 +657,7 @@ Add_Ban( CLIENT *Prefix, CLIENT *Client, CHANNEL *Channel, CHAR *Pattern ) { CHAR *mask; + BOOLEAN already; assert( Client != NULL ); assert( Channel != NULL ); @@ -658,7 +665,12 @@ mask = Lists_MakeMask( Pattern ); - if( ! Lists_AddBanned( Prefix, mask, Channel )) return CONNECTED; + already = Lists_IsBanEntry( mask, Channel ); + + if( ! Lists_AddBanned( mask, Channel )) return CONNECTED; + + if(( Client_Type( Prefix ) == CLIENT_SERVER ) && ( already == TRUE )) return CONNECTED; + return Send_ListChange( "+b", Prefix, Client, Channel, mask ); } /* Add_Ban */ Index: src/ngircd/irc-op.c =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/irc-op.c,v retrieving revision 1.11.4.1 retrieving revision 1.13 diff -u -r1.11.4.1 -r1.13 --- src/ngircd/irc-op.c 5 Dec 2003 13:33:12 -0000 1.11.4.1 +++ src/ngircd/irc-op.c 9 Apr 2004 21:41:52 -0000 1.13 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: irc-op.c,v 1.11.4.1 2003/12/05 13:33:12 alex Exp $"; +static char UNUSED id[] = "$Id: irc-op.c,v 1.13 2004/04/09 21:41:52 alex Exp $"; #include "imp.h" #include @@ -104,7 +104,7 @@ if( remember ) { /* We must memember this invite */ - if( ! Lists_AddInvited( from, Client_Mask( target ), chan, TRUE )) return CONNECTED; + if( ! Lists_AddInvited( Client_Mask( target ), chan, TRUE )) return CONNECTED; } } Index: src/ngircd/irc-server.c =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/irc-server.c,v retrieving revision 1.32.2.2 retrieving revision 1.36.2.1 diff -u -r1.32.2.2 -r1.36.2.1 --- src/ngircd/irc-server.c 26 Dec 2003 16:16:48 -0000 1.32.2.2 +++ src/ngircd/irc-server.c 15 May 2004 23:52:17 -0000 1.36.2.1 @@ -14,14 +14,16 @@ #include "portab.h" -static char UNUSED id[] = "$Id: irc-server.c,v 1.32.2.2 2003/12/26 16:16:48 alex Exp $"; +static char UNUSED id[] = "$Id: irc-server.c,v 1.36.2.1 2004/05/15 23:52:17 alex Exp $"; #include "imp.h" #include #include #include #include +#include +#include "defines.h" #include "resolve.h" #include "conn.h" #include "conn-zip.h" @@ -29,6 +31,7 @@ #include "client.h" #include "channel.h" #include "irc-write.h" +#include "lists.h" #include "log.h" #include "messages.h" #include "parse.h" @@ -182,6 +185,9 @@ /* 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 ); @@ -238,6 +244,18 @@ if( ! IRC_WriteStrClient( Client, "%s", str )) return DISCONNECTED; } +#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( ! Lists_SendInvites( Client )) return DISCONNECTED; + if( ! Lists_SendBans( Client )) return DISCONNECTED; + } +#endif + /* naechsten Channel suchen */ chan = Channel_Next( chan ); } Index: src/ngircd/irc-write.c =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/irc-write.c,v retrieving revision 1.14.2.1 retrieving revision 1.15 diff -u -r1.14.2.1 -r1.15 --- src/ngircd/irc-write.c 7 Nov 2003 20:51:11 -0000 1.14.2.1 +++ src/ngircd/irc-write.c 5 Nov 2003 23:24:48 -0000 1.15 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: irc-write.c,v 1.14.2.1 2003/11/07 20:51:11 alex Exp $"; +static char UNUSED id[] = "$Id: irc-write.c,v 1.15 2003/11/05 23:24:48 alex Exp $"; #include "imp.h" #include Index: src/ngircd/irc-write.h =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/irc-write.h,v retrieving revision 1.5.4.1 retrieving revision 1.6 diff -u -r1.5.4.1 -r1.6 --- src/ngircd/irc-write.h 7 Nov 2003 20:51:11 -0000 1.5.4.1 +++ src/ngircd/irc-write.h 5 Nov 2003 23:24:48 -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-write.h,v 1.5.4.1 2003/11/07 20:51:11 alex Exp $ + * $Id: irc-write.h,v 1.6 2003/11/05 23:24:48 alex Exp $ * * Sending IRC commands over the network (header) */ Index: src/ngircd/irc.c =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/irc.c,v retrieving revision 1.120.2.3 retrieving revision 1.124 diff -u -r1.120.2.3 -r1.124 --- src/ngircd/irc.c 26 Dec 2003 16:16:48 -0000 1.120.2.3 +++ src/ngircd/irc.c 28 Feb 2004 02:18:16 -0000 1.124 @@ -1,6 +1,6 @@ /* * ngIRCd -- The Next Generation IRC Daemon - * Copyright (c)2001-2003 by Alexander Barton (alex@barton.de) + * Copyright (c)2001-2004 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 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: irc.c,v 1.120.2.3 2003/12/26 16:16:48 alex Exp $"; +static char UNUSED id[] = "$Id: irc.c,v 1.124 2004/02/28 02:18:16 alex Exp $"; #include "imp.h" #include @@ -210,6 +210,7 @@ { CLIENT *from, *target, *c; CONN_ID idx, idx2; + CHAR user[CLIENT_USER_LEN]; assert( Client != NULL ); assert( Req != NULL ); @@ -251,7 +252,9 @@ if( Client_Type( c ) == CLIENT_SERVER ) { /* Server link */ - if( ! IRC_WriteStrClient( from, RPL_TRACESERVER_MSG, Client_ID( from ), Client_ID( c ), Client_Mask( c ), Option_String( Client_Conn( c )))) return DISCONNECTED; + strlcpy( user, Client_User( c ), sizeof( user )); + if( user[0] == '~' ) strlcpy( user, "unknown", sizeof( user )); + if( ! IRC_WriteStrClient( from, RPL_TRACESERVER_MSG, Client_ID( from ), Client_ID( c ), user, Client_Hostname( c ), Client_Mask( Client_ThisServer( )), Option_String( Client_Conn( c )))) return DISCONNECTED; } if(( Client_Type( c ) == CLIENT_USER ) && ( strchr( Client_Modes( c ), 'o' ))) { @@ -262,9 +265,6 @@ c = Client_Next( c ); } - /* Some information about us */ - if( ! IRC_WriteStrClient( from, RPL_TRACESERVER_MSG, Client_ID( from ), Conf_ServerName, Client_Mask( Client_ThisServer( )), Option_String( Client_Conn( Client )))) return DISCONNECTED; - IRC_SetPenalty( Client, 3 ); return IRC_WriteStrClient( from, RPL_TRACEEND_MSG, Client_ID( from ), Conf_ServerName, PACKAGE_NAME, PACKAGE_VERSION, NGIRCd_DebugLevel ); } /* IRC_TRACE */ Index: src/ngircd/lists.c =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/lists.c,v retrieving revision 1.11 retrieving revision 1.15 diff -u -r1.11 -r1.15 --- src/ngircd/lists.c 26 Dec 2002 16:25:43 -0000 1.11 +++ src/ngircd/lists.c 25 Apr 2004 15:40:19 -0000 1.15 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: lists.c,v 1.11 2002/12/26 16:25:43 alex Exp $"; +static char UNUSED id[] = "$Id: lists.c,v 1.15 2004/04/25 15:40:19 alex Exp $"; #include "imp.h" #include @@ -30,6 +30,7 @@ #include #include +#include #include "exp.h" #include "lists.h" @@ -101,19 +102,24 @@ GLOBAL BOOLEAN -Lists_AddInvited( CLIENT *From, CHAR *Mask, CHANNEL *Chan, BOOLEAN OnlyOnce ) +Lists_IsInviteEntry( CHAR *Mask, CHANNEL *Chan ) +{ + assert( Mask != NULL ); + assert( Chan != NULL ); + + return Already_Registered( My_Invites, Mask, Chan ); +} /* Lists_IsInviteEntry */ + + +GLOBAL BOOLEAN +Lists_AddInvited( CHAR *Mask, CHANNEL *Chan, BOOLEAN OnlyOnce ) { C2C *c2c; assert( Mask != NULL ); assert( Chan != NULL ); - if( Already_Registered( My_Invites, Mask, Chan )) - { - /* Eintrag ist bereits vorhanden */ - IRC_WriteStrClient( From, RPL_INVITELIST_MSG, Client_ID( From ), Channel_Name( Chan ), Mask ); - return FALSE; - } + if( Already_Registered( My_Invites, Mask, Chan )) return TRUE; c2c = New_C2C( Mask, Chan, OnlyOnce ); if( ! c2c ) @@ -181,6 +187,40 @@ GLOBAL BOOLEAN +Lists_SendInvites( CLIENT *Client ) +{ + C2C *c2c; + + assert( Client != NULL ); + + c2c = My_Invites; + while( c2c ) + { + if( ! IRC_WriteStrClient( Client, "MODE %s +I %s", Channel_Name( c2c->channel ), c2c->mask )) return DISCONNECTED; + c2c = c2c->next; + } + return CONNECTED; +} /* Lists_SendInvites */ + + +GLOBAL BOOLEAN +Lists_SendBans( CLIENT *Client ) +{ + C2C *c2c; + + assert( Client != NULL ); + + c2c = My_Bans; + while( c2c ) + { + if( ! IRC_WriteStrClient( Client, "MODE %s +b %s", Channel_Name( c2c->channel ), c2c->mask )) return DISCONNECTED; + c2c = c2c->next; + } + return CONNECTED; +} /* Lists_SendBans */ + + +GLOBAL BOOLEAN Lists_CheckBanned( CLIENT *Client, CHANNEL *Chan ) { return Check_List( &My_Bans, Client, Chan ); @@ -188,19 +228,24 @@ GLOBAL BOOLEAN -Lists_AddBanned( CLIENT *From, CHAR *Mask, CHANNEL *Chan ) +Lists_IsBanEntry( CHAR *Mask, CHANNEL *Chan ) +{ + assert( Mask != NULL ); + assert( Chan != NULL ); + + return Already_Registered( My_Bans, Mask, Chan ); +} /* Lists_IsBanEntry */ + + +GLOBAL BOOLEAN +Lists_AddBanned( CHAR *Mask, CHANNEL *Chan ) { C2C *c2c; assert( Mask != NULL ); assert( Chan != NULL ); - if( Already_Registered( My_Bans, Mask, Chan )) - { - /* Eintrag ist bereits vorhanden */ - IRC_WriteStrClient( From, RPL_BANLIST_MSG, Client_ID( From ), Channel_Name( Chan ), Mask ); - return FALSE; - } + if( Already_Registered( My_Bans, Mask, Chan )) return TRUE; c2c = New_C2C( Mask, Chan, FALSE ); if( ! c2c ) @@ -370,7 +415,7 @@ assert( Chan != NULL ); /* Speicher fuer Eintrag anfordern */ - c2c = malloc( sizeof( C2C )); + c2c = (C2C *)malloc( sizeof( C2C )); if( ! c2c ) { Log( LOG_EMERG, "Can't allocate memory! [New_C2C]" ); Index: src/ngircd/lists.h =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/lists.h,v retrieving revision 1.9 retrieving revision 1.11 diff -u -r1.9 -r1.11 --- src/ngircd/lists.h 12 Dec 2002 12:23:43 -0000 1.9 +++ src/ngircd/lists.h 25 Apr 2004 15:40:19 -0000 1.11 @@ -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.9 2002/12/12 12:23:43 alex Exp $ + * $Id: lists.h,v 1.11 2004/04/25 15:40:19 alex Exp $ * * Management of IRC lists: ban, invite, ... (header) */ @@ -22,14 +22,18 @@ GLOBAL VOID Lists_Exit PARAMS(( VOID )); GLOBAL BOOLEAN Lists_CheckInvited PARAMS(( CLIENT *Client, CHANNEL *Chan )); -GLOBAL BOOLEAN Lists_AddInvited PARAMS(( CLIENT *From, CHAR *Mask, CHANNEL *Chan, BOOLEAN OnlyOnce )); +GLOBAL BOOLEAN Lists_AddInvited PARAMS(( CHAR *Mask, CHANNEL *Chan, BOOLEAN OnlyOnce )); GLOBAL VOID Lists_DelInvited PARAMS(( CHAR *Mask, CHANNEL *Chan )); GLOBAL BOOLEAN Lists_ShowInvites PARAMS(( CLIENT *Client, CHANNEL *Channel )); +GLOBAL BOOLEAN Lists_SendInvites PARAMS(( CLIENT *Client )); +GLOBAL BOOLEAN Lists_IsInviteEntry PARAMS(( CHAR *Mask, CHANNEL *Chan )); GLOBAL BOOLEAN Lists_CheckBanned PARAMS(( CLIENT *Client, CHANNEL *Chan )); -GLOBAL BOOLEAN Lists_AddBanned PARAMS(( CLIENT *From, CHAR *Mask, CHANNEL *Chan )); +GLOBAL BOOLEAN Lists_AddBanned PARAMS(( CHAR *Mask, CHANNEL *Chan )); GLOBAL VOID Lists_DelBanned PARAMS(( CHAR *Mask, CHANNEL *Chan )); GLOBAL BOOLEAN Lists_ShowBans PARAMS(( CLIENT *Client, CHANNEL *Channel )); +GLOBAL BOOLEAN Lists_SendBans PARAMS(( CLIENT *Client )); +GLOBAL BOOLEAN Lists_IsBanEntry PARAMS(( CHAR *Mask, CHANNEL *Chan )); GLOBAL VOID Lists_DeleteChannel PARAMS(( CHANNEL *Chan )); Index: src/ngircd/log.c =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/log.c,v retrieving revision 1.43.2.1 retrieving revision 1.44.2.3 diff -u -r1.43.2.1 -r1.44.2.3 --- src/ngircd/log.c 26 Dec 2003 16:16:48 -0000 1.43.2.1 +++ src/ngircd/log.c 26 Jun 2004 09:06:27 -0000 1.44.2.3 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: log.c,v 1.43.2.1 2003/12/26 16:16:48 alex Exp $"; +static char UNUSED id[] = "$Id: log.c,v 1.44.2.3 2004/06/26 09:06:27 alex Exp $"; #include "imp.h" #include @@ -85,6 +85,8 @@ } #endif if( Init_Txt[0] ) Log( LOG_INFO, "Activating: %s.", Init_Txt ); + + Error_File[0] = '\0'; } /* Log_Init */ @@ -122,8 +124,11 @@ if( NGIRCd_SignalRestart ) Log( LOG_NOTICE, "%s done (restarting).", PACKAGE_NAME ); else Log( LOG_NOTICE, "%s done.", PACKAGE_NAME ); - /* Error-File (stderr) loeschen */ - if( unlink( Error_File ) != 0 ) Log( LOG_ERR, "Can't delete \"%s\": %s", Error_File, strerror( errno )); + if( Error_File[0] ) + { + /* Error-File (stderr) loeschen */ + if( unlink( Error_File ) != 0 ) Log( LOG_ERR, "Can't delete \"%s\": %s", Error_File, strerror( errno )); + } #ifdef SYSLOG /* syslog abmelden */ @@ -177,7 +182,7 @@ if( NGIRCd_NoDaemon ) { /* auf Konsole ausgeben */ - fprintf( stdout, "[%d] %s\n", Level, msg ); + fprintf( stdout, "[%d:%d] %s\n", (INT)getpid( ), Level, msg ); fflush( stdout ); } #ifdef SYSLOG @@ -209,12 +214,14 @@ #ifdef SYSLOG openlog( PACKAGE_NAME, LOG_CONS|LOG_PID, LOG_LOCAL5 ); #endif + Log_Resolver( LOG_DEBUG, "Resolver sub-process starting, PID %d.", getpid( )); } /* Log_Init_Resolver */ GLOBAL VOID Log_Exit_Resolver( VOID ) { + Log_Resolver( LOG_DEBUG, "Resolver sub-process %d done.", getpid( )); #ifdef SYSLOG closelog( ); #endif @@ -234,17 +241,11 @@ { /* Eintrag des Resolver in Logfile(s) schreiben */ -#ifndef SYSLOG - return; -#else - CHAR msg[MAX_LOG_MSG_LEN]; va_list ap; assert( Format != NULL ); - if( NGIRCd_NoDaemon ) return; - #ifdef DEBUG if(( Level == LOG_DEBUG ) && ( ! NGIRCd_Debug )) return; #else @@ -260,9 +261,15 @@ vsnprintf( msg, MAX_LOG_MSG_LEN, Format, ap ); va_end( ap ); - /* ... und ausgeben */ - syslog( Level, msg ); - + /* Output */ + if( NGIRCd_NoDaemon ) + { + /* Output to console */ + fprintf( stdout, "[%d:%d] %s\n", (INT)getpid( ), Level, msg ); + fflush( stdout ); + } +#ifdef SYSLOG + else syslog( Level, msg ); #endif } /* Log_Resolver */ Index: src/ngircd/log.h =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/log.h,v retrieving revision 1.13.4.1 retrieving revision 1.14 diff -u -r1.13.4.1 -r1.14 --- src/ngircd/log.h 26 Dec 2003 16:16:48 -0000 1.13.4.1 +++ src/ngircd/log.h 26 Dec 2003 15:55:07 -0000 1.14 @@ -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.13.4.1 2003/12/26 16:16:48 alex Exp $ + * $Id: log.h,v 1.14 2003/12/26 15:55:07 alex Exp $ * * Logging functions (header) */ Index: src/ngircd/messages.h =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/messages.h,v retrieving revision 1.64.2.1 retrieving revision 1.66 diff -u -r1.64.2.1 -r1.66 --- src/ngircd/messages.h 26 Dec 2003 16:16:48 -0000 1.64.2.1 +++ src/ngircd/messages.h 28 Feb 2004 02:18:16 -0000 1.66 @@ -1,6 +1,6 @@ /* * ngIRCd -- The Next Generation IRC Daemon - * Copyright (c)2001-2003 by Alexander Barton (alex@barton.de) + * Copyright (c)2001-2004 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,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.64.2.1 2003/12/26 16:16:48 alex Exp $ + * $Id: messages.h,v 1.66 2004/02/28 02:18:16 alex Exp $ * * IRC numerics (Header) */ @@ -26,7 +26,7 @@ #define RPL_TRACELINK_MSG "200 %s Link %s-%s %s %s V%s %ld %d %d" #define RPL_TRACEOPERATOR_MSG "204 %s Oper 2 :%s" -#define RPL_TRACESERVER_MSG "206 %s Serv 1 0S 0C %s *!*@%s :V%s" +#define RPL_TRACESERVER_MSG "206 %s Serv 1 0S 0C %s[%s@%s] *!*@%s :V%s" #define RPL_STATSLINKINFO_MSG "211 %s %s %d %ld %ld %ld %ld :%ld" #define RPL_STATSCOMMANDS_MSG "212 %s %s %ld %ld %ld" #define RPL_ENDOFSTATS_MSG "219 %s %c :End of STATS report" Index: src/ngircd/ngircd.c =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/ngircd.c,v retrieving revision 1.76.2.3 retrieving revision 1.83.2.2 diff -u -r1.76.2.3 -r1.83.2.2 --- src/ngircd/ngircd.c 2 Jan 2004 19:24:46 -0000 1.76.2.3 +++ src/ngircd/ngircd.c 15 May 2004 23:52:17 -0000 1.83.2.2 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: ngircd.c,v 1.76.2.3 2004/01/02 19:24:46 alex Exp $"; +static char UNUSED id[] = "$Id: ngircd.c,v 1.83.2.2 2004/05/15 23:52:17 alex Exp $"; #include "imp.h" #include @@ -24,20 +24,20 @@ #include #include #include +#include #include #include #include -#include #include #include +#include "defines.h" #include "resolve.h" #include "conn.h" #include "client.h" #include "channel.h" #include "conf.h" #include "cvs-version.h" -#include "defines.h" #include "lists.h" #include "log.h" #include "parse.h" @@ -183,6 +183,11 @@ ok = TRUE; } #endif + if( argv[i][n] == 't' ) + { + configtest = TRUE; + ok = TRUE; + } if( ! ok ) { @@ -223,6 +228,38 @@ while( ! NGIRCd_SignalQuit ) { + /* Initialize global variables */ + NGIRCd_Start = time( NULL ); + (VOID)strftime( NGIRCd_StartStr, 64, "%a %b %d %Y at %H:%M:%S (%Z)", localtime( &NGIRCd_Start )); + + NGIRCd_SignalRehash = FALSE; + NGIRCd_SignalRestart = FALSE; + NGIRCd_SignalQuit = FALSE; + + /* Initialize modules, part I */ + Log_Init( ); + Conf_Init( ); + + if( Conf_Chroot[0] ) + { + /* Chroot */ + if( chdir( Conf_Chroot ) != 0 ) Log( LOG_ERR, "Can't chdir() in ChrootDir (%s): %s", Conf_Chroot, strerror( errno )); + + if( chroot( Conf_Chroot ) != 0 ) Log( LOG_ERR, "Can't change root directory to \"%s\": %s", Conf_Chroot, strerror( errno )); + else Log( LOG_INFO, "Changed root and working directory to \"%s\".", Conf_Chroot ); + } + + if( Conf_GID != 0 ) + { + /* Set new group ID */ + if( setgid( Conf_GID ) != 0 ) Log( LOG_ERR, "Can't change group ID to %u: %s", Conf_GID, strerror( errno )); + } + if( Conf_UID != 0 ) + { + /* Set new user ID */ + if( setuid( Conf_UID ) != 0 ) Log( LOG_ERR, "Can't change user ID to %u: %s", Conf_UID, strerror( errno )); + } + /* In der Regel wird ein Sub-Prozess ge-fork()'t, der * nicht mehr mit dem Terminal verbunden ist. Mit der * Option "--nodaemon" kann dies (z.B. zum Debuggen) @@ -247,18 +284,10 @@ (VOID)setsid( ); chdir( "/" ); } - - /* Globale Variablen initialisieren */ - NGIRCd_Start = time( NULL ); - (VOID)strftime( NGIRCd_StartStr, 64, "%a %b %d %Y at %H:%M:%S (%Z)", localtime( &NGIRCd_Start )); - NGIRCd_SignalRehash = FALSE; - NGIRCd_SignalRestart = FALSE; - NGIRCd_SignalQuit = FALSE; - /* Module initialisieren */ - Log_Init( ); + /* Initialize modules, part II: these functions are eventually + * called with already dropped privileges ... */ Resolve_Init( ); - Conf_Init( ); Lists_Init( ); Channel_Init( ); Client_Init( ); @@ -267,28 +296,15 @@ #endif Conn_Init( ); - /* Wenn als root ausgefuehrt und eine andere UID - * konfiguriert ist, jetzt zu dieser wechseln */ - if( getuid( ) == 0 ) - { - if( Conf_GID != 0 ) - { - /* Neue Group-ID setzen */ - if( setgid( Conf_GID ) != 0 ) Log( LOG_ERR, "Can't change Group-ID to %u: %s", Conf_GID, strerror( errno )); - } - if( Conf_UID != 0 ) - { - /* Neue User-ID setzen */ - if( setuid( Conf_UID ) != 0 ) Log( LOG_ERR, "Can't change User-ID to %u: %s", Conf_UID, strerror( errno )); - } - } - - /* User, Gruppe und Prozess-ID des Daemon ausgeben */ + /* Show user, group, and PID of the running daemon */ pwd = getpwuid( getuid( )); grp = getgrgid( getgid( )); Log( LOG_INFO, "Running as user %s(%ld), group %s(%ld), with PID %ld.", pwd ? pwd->pw_name : "unknown", (LONG)getuid( ), grp ? grp->gr_name : "unknown", (LONG)getgid( ), (LONG)getpid( )); - /* stderr in "Error-File" umlenken */ - Log_InitErrorfile( ); + /* Redirect stderr handle to "error file" for debugging. + * But don't try to write in the chroot jail, since it's more + * secure to have a chroot dir not writable by the daemon. + */ + if( ! Conf_Chroot[0] ) Log_InitErrorfile( ); /* Signal-Handler initialisieren */ Initialize_Signal_Handler( ); @@ -377,6 +393,10 @@ if( txt[0] ) strcat( txt, "+" ); strcat( txt, "RENDEZVOUS" ); #endif +#ifdef IDENTAUTH + if( txt[0] ) strcat( txt, "+" ); + strcat( txt, "IDENT" ); +#endif #ifdef DEBUG if( txt[0] ) strcat( txt, "+" ); strcat( txt, "DEBUG" ); @@ -413,30 +433,26 @@ Log( LOG_NOTICE|LOG_snotice, "Re-reading configuration NOW!" ); NGIRCd_SignalRehash = FALSE; - /* Alle Listen-Sockets schliessen */ + /* Close down all listening sockets */ Conn_ExitListeners( ); - /* Alten Server-Namen merken */ -#ifdef DEBUG - assert( sizeof( old_name ) == sizeof( Conf_ServerName )); -#endif + /* Remember old server name */ strcpy( old_name, Conf_ServerName ); - /* Konfiguration neu lesen ... */ + /* Re-read configuration ... */ Conf_Rehash( ); - /* Alten Server-Namen wiederherstellen: dieser - * kann nicht zur Laufzeit geaendert werden ... */ + /* Recover old server name: it can't be changed during run-time */ if( strcmp( old_name, Conf_ServerName ) != 0 ) { strcpy( Conf_ServerName, old_name ); Log( LOG_ERR, "Can't change \"ServerName\" on runtime! Ignored new name." ); } - /* neue pre-defined Channel anlegen: */ + /* Create new pre-defined channels */ Channel_InitPredefined( ); - /* Listen-Sockets neu anlegen: */ + /* Start listening on sockets */ Conn_InitListeners( ); /* Sync configuration with established connections */ @@ -548,7 +564,7 @@ #ifdef SNIFFER puts( " -s, --sniffer enable network sniffer and display all IRC traffic" ); #endif - puts( " --configtest read, validate and display configuration; then exit" ); + puts( " -t, --configtest read, validate and display configuration; then exit" ); puts( " --version output version information and exit" ); puts( " --help display this help and exit" ); } /* Show_Help */ Index: src/ngircd/parse.c =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/parse.c,v retrieving revision 1.59 retrieving revision 1.60 diff -u -r1.59 -r1.60 --- src/ngircd/parse.c 15 Jan 2003 13:49:20 -0000 1.59 +++ src/ngircd/parse.c 17 Jan 2004 03:17:49 -0000 1.60 @@ -14,13 +14,14 @@ #include "portab.h" -static char UNUSED id[] = "$Id: parse.c,v 1.59 2003/01/15 13:49:20 alex Exp $"; +static char UNUSED id[] = "$Id: parse.c,v 1.60 2004/01/17 03:17:49 alex Exp $"; #include "imp.h" #include #include #include #include +#include #include "ngircd.h" #include "defines.h" Index: src/ngircd/resolve.c =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/resolve.c,v retrieving revision 1.6 retrieving revision 1.8.2.1 diff -u -r1.6 -r1.8.2.1 --- src/ngircd/resolve.c 21 Apr 2003 10:52:51 -0000 1.6 +++ src/ngircd/resolve.c 15 May 2004 23:52:17 -0000 1.8.2.1 @@ -1,6 +1,6 @@ /* * ngIRCd -- The Next Generation IRC Daemon - * Copyright (c)2001,2002 by Alexander Barton (alex@barton.de) + * Copyright (c)2001-2003 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 @@ -14,7 +14,7 @@ #include "portab.h" -static char UNUSED id[] = "$Id: resolve.c,v 1.6 2003/04/21 10:52:51 alex Exp $"; +static char UNUSED id[] = "$Id: resolve.c,v 1.8.2.1 2004/05/15 23:52:17 alex Exp $"; #include "imp.h" #include @@ -27,6 +27,12 @@ #include #include +#ifdef IDENTAUTH +#ifdef HAVE_IDENT_H +#include +#endif +#endif + #include "conn.h" #include "defines.h" #include "log.h" @@ -35,7 +41,12 @@ #include "resolve.h" +#ifdef IDENTAUTH +LOCAL VOID Do_ResolveAddr PARAMS(( struct sockaddr_in *Addr, INT Sock, INT w_fd )); +#else LOCAL VOID Do_ResolveAddr PARAMS(( struct sockaddr_in *Addr, INT w_fd )); +#endif + LOCAL VOID Do_ResolveName PARAMS(( CHAR *Host, INT w_fd )); #ifdef h_errno @@ -46,31 +57,35 @@ GLOBAL VOID Resolve_Init( VOID ) { - /* Modul initialisieren */ + /* Initialize module */ FD_ZERO( &Resolver_FDs ); } /* Resolve_Init */ +#ifdef IDENTAUTH +GLOBAL RES_STAT * +Resolve_Addr( struct sockaddr_in *Addr, int Sock ) +#else GLOBAL RES_STAT * Resolve_Addr( struct sockaddr_in *Addr ) +#endif { - /* IP (asyncron!) aufloesen. Bei Fehler, z.B. wenn der - * Child-Prozess nicht erzeugt werden kann, wird NULL geliefert. - * Der Host kann dann nicht aufgeloest werden. */ + /* Resolve IP (asynchronous!). On errors, e.g. if the child process + * can't be forked, this functions returns NULL. */ RES_STAT *s; INT pid; - /* Speicher anfordern */ - s = malloc( sizeof( RES_STAT )); + /* Allocate memory */ + s = (RES_STAT *)malloc( sizeof( RES_STAT )); if( ! s ) { Log( LOG_EMERG, "Resolver: Can't allocate memory! [Resolve_Addr]" ); return NULL; } - /* Pipe fuer Antwort initialisieren */ + /* Initialize pipe for result */ if( pipe( s->pipe ) != 0 ) { free( s ); @@ -78,28 +93,34 @@ return NULL; } - /* Sub-Prozess erzeugen */ + /* For sub-process */ pid = fork( ); if( pid > 0 ) { - /* Haupt-Prozess */ + /* Main process */ Log( LOG_DEBUG, "Resolver for %s created (PID %d).", inet_ntoa( Addr->sin_addr ), pid ); FD_SET( s->pipe[0], &Resolver_FDs ); if( s->pipe[0] > Conn_MaxFD ) Conn_MaxFD = s->pipe[0]; s->pid = pid; + s->stage = 0; + s->bufpos = 0; return s; } else if( pid == 0 ) { - /* Sub-Prozess */ + /* Sub process */ Log_Init_Resolver( ); +#ifdef IDENTAUTH + Do_ResolveAddr( Addr, Sock, s->pipe[1] ); +#else Do_ResolveAddr( Addr, s->pipe[1] ); +#endif Log_Exit_Resolver( ); exit( 0 ); } else { - /* Fehler */ + /* Error! */ free( s ); Log( LOG_CRIT, "Resolver: Can't fork: %s!", strerror( errno )); return NULL; @@ -110,22 +131,21 @@ GLOBAL RES_STAT * Resolve_Name( CHAR *Host ) { - /* Hostnamen (asyncron!) aufloesen. Bei Fehler, z.B. wenn der - * Child-Prozess nicht erzeugt werden kann, wird NULL geliefert. - * Der Host kann dann nicht aufgeloest werden. */ + /* Resolve hostname (asynchronous!). On errors, e.g. if the child + * process can't be forked, this functions returns NULL. */ RES_STAT *s; INT pid; - /* Speicher anfordern */ - s = malloc( sizeof( RES_STAT )); + /* Allocate memory */ + s = (RES_STAT *)malloc( sizeof( RES_STAT )); if( ! s ) { Log( LOG_EMERG, "Resolver: Can't allocate memory! [Resolve_Name]" ); return NULL; } - /* Pipe fuer Antwort initialisieren */ + /* Initialize the pipe for the result */ if( pipe( s->pipe ) != 0 ) { free( s ); @@ -133,20 +153,22 @@ return NULL; } - /* Sub-Prozess erzeugen */ + /* Fork sub-process */ pid = fork( ); if( pid > 0 ) { - /* Haupt-Prozess */ + /* Main process */ Log( LOG_DEBUG, "Resolver for \"%s\" created (PID %d).", Host, pid ); FD_SET( s->pipe[0], &Resolver_FDs ); if( s->pipe[0] > Conn_MaxFD ) Conn_MaxFD = s->pipe[0]; s->pid = pid; + s->stage = 0; + s->bufpos = 0; return s; } else if( pid == 0 ) { - /* Sub-Prozess */ + /* Sub process */ Log_Init_Resolver( ); Do_ResolveName( Host, s->pipe[1] ); Log_Exit_Resolver( ); @@ -154,7 +176,7 @@ } else { - /* Fehler */ + /* Error! */ free( s ); Log( LOG_CRIT, "Resolver: Can't fork: %s!", strerror( errno )); return NULL; @@ -162,17 +184,26 @@ } /* Resolve_Name */ +#ifdef IDENTAUTH +LOCAL VOID +Do_ResolveAddr( struct sockaddr_in *Addr, int Sock, INT w_fd ) +#else LOCAL VOID Do_ResolveAddr( struct sockaddr_in *Addr, INT w_fd ) +#endif { - /* Resolver Sub-Prozess: IP aufloesen und Ergebnis in Pipe schreiben. */ + /* Resolver sub-process: resolve IP address and write result into + * pipe to parent. */ CHAR hostname[HOST_LEN]; struct hostent *h; + INT len; +#ifdef IDENTAUTH + CHAR *res; +#endif + /* Resolve IP address */ Log_Resolver( LOG_DEBUG, "Now resolving %s ...", inet_ntoa( Addr->sin_addr )); - - /* Namen aufloesen */ h = gethostbyaddr( (CHAR *)&Addr->sin_addr, sizeof( Addr->sin_addr ), AF_INET ); if( h ) strlcpy( hostname, h->h_name, sizeof( hostname )); else @@ -184,31 +215,52 @@ #endif strlcpy( hostname, inet_ntoa( Addr->sin_addr ), sizeof( hostname )); } + Log_Resolver( LOG_DEBUG, "Ok, translated %s to \"%s\".", inet_ntoa( Addr->sin_addr ), hostname ); - /* Antwort an Parent schreiben */ - if( (size_t)write( w_fd, hostname, strlen( hostname ) + 1 ) != (size_t)( strlen( hostname ) + 1 )) + /* Write resolver result into pipe to parent */ + len = strlen( hostname ); + hostname[len] = '\n'; len++; + if( (size_t)write( w_fd, hostname, len ) != (size_t)len ) { Log_Resolver( LOG_CRIT, "Resolver: Can't write to parent: %s!", strerror( errno )); close( w_fd ); return; } - Log_Resolver( LOG_DEBUG, "Ok, translated %s to \"%s\".", inet_ntoa( Addr->sin_addr ), hostname ); +#ifdef IDENTAUTH + /* Do "IDENT" (aka "AUTH") lookup and write result to parent */ + Log_Resolver( LOG_DEBUG, "Doing IDENT lookup on socket %d ...", Sock ); + res = ident_id( Sock, 10 ); + Log_Resolver( LOG_DEBUG, "Ok, IDENT lookup on socket %d done: \"%s\"", Sock, res ? res : "" ); + + /* Write IDENT result into pipe to parent */ + len = strlen( res ? res : "" ); + if( res != NULL ) res[len] = '\n'; + len++; + if( (size_t)write( w_fd, res ? res : "\n", len ) != (size_t)len ) + { + Log_Resolver( LOG_CRIT, "Resolver: Can't write to parent (IDENT): %s!", strerror( errno )); + close( w_fd ); + } + free( res ); +#endif } /* Do_ResolveAddr */ LOCAL VOID Do_ResolveName( CHAR *Host, INT w_fd ) { - /* Resolver Sub-Prozess: Name aufloesen und Ergebnis in Pipe schreiben. */ + /* Resolver sub-process: resolve name and write result into pipe + * to parent. */ CHAR ip[16]; struct hostent *h; struct in_addr *addr; + INT len; Log_Resolver( LOG_DEBUG, "Now resolving \"%s\" ...", Host ); - /* Namen aufloesen */ + /* Resolve hostname */ h = gethostbyname( Host ); if( h ) { @@ -224,16 +276,16 @@ #endif strcpy( ip, "" ); } + if( ip[0] ) Log_Resolver( LOG_DEBUG, "Ok, translated \"%s\" to %s.", Host, ip ); - /* Antwort an Parent schreiben */ - if( (size_t)write( w_fd, ip, strlen( ip ) + 1 ) != (size_t)( strlen( ip ) + 1 )) + /* Write result into pipe to parent */ + len = strlen( ip ); + ip[len] = '\n'; len++; + if( (size_t)write( w_fd, ip, len ) != (size_t)len ) { Log_Resolver( LOG_CRIT, "Resolver: Can't write to parent: %s!", strerror( errno )); close( w_fd ); - return; } - - if( ip[0] ) Log_Resolver( LOG_DEBUG, "Ok, translated \"%s\" to %s.", Host, ip ); } /* Do_ResolveName */ @@ -242,7 +294,7 @@ LOCAL CHAR * Get_Error( INT H_Error ) { - /* Fehlerbeschreibung fuer H_Error liefern */ + /* Get error message for H_Error */ switch( H_Error ) { Index: src/ngircd/resolve.h =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/ngircd/resolve.h,v retrieving revision 1.5 retrieving revision 1.6.2.1 diff -u -r1.5 -r1.6.2.1 --- src/ngircd/resolve.h 21 Apr 2003 10:53:10 -0000 1.5 +++ src/ngircd/resolve.h 15 May 2004 23:52:17 -0000 1.6.2.1 @@ -1,6 +1,6 @@ /* * ngIRCd -- The Next Generation IRC Daemon - * Copyright (c)2001,2002 by Alexander Barton (alex@barton.de) + * Copyright (c)2001-2003 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 @@ -8,7 +8,7 @@ * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: resolve.h,v 1.5 2003/04/21 10:53:10 alex Exp $ + * $Id: resolve.h,v 1.6.2.1 2004/05/15 23:52:17 alex Exp $ * * Asynchronous resolver (header) */ @@ -29,6 +29,9 @@ { INT pid; /* PID des Child-Prozess */ INT pipe[2]; /* Pipe fuer IPC */ + INT stage; /* Hostname/IP(0) or IDENT(1)? */ + INT bufpos; /* Position in buffer */ + CHAR buffer[HOST_LEN]; /* Buffer */ } RES_STAT; @@ -37,7 +40,12 @@ GLOBAL VOID Resolve_Init PARAMS(( VOID )); +#ifdef IDENTAUTH +GLOBAL RES_STAT *Resolve_Addr PARAMS(( struct sockaddr_in *Addr, int Sock )); +#else GLOBAL RES_STAT *Resolve_Addr PARAMS(( struct sockaddr_in *Addr )); +#endif + GLOBAL RES_STAT *Resolve_Name PARAMS(( CHAR *Host )); Index: src/portab/portab.h =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/portab/portab.h,v retrieving revision 1.15 retrieving revision 1.17 diff -u -r1.15 -r1.17 --- src/portab/portab.h 31 Mar 2003 19:01:02 -0000 1.15 +++ src/portab/portab.h 15 Mar 2004 19:26:39 -0000 1.17 @@ -8,7 +8,7 @@ * (at your option) any later version. * Please read the file COPYING, README and AUTHORS for more information. * - * $Id: portab.h,v 1.15 2003/03/31 19:01:02 alex Exp $ + * $Id: portab.h,v 1.17 2004/03/15 19:26:39 alex Exp $ * * Portability functions and declarations (header for libngbportab). */ @@ -21,13 +21,13 @@ #include "config.h" #ifdef HAVE_SYS_TYPES_H -#include +# include #endif /* compiler features */ -#ifdef __GNUC__ +#if (__GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)) # define PUNUSED(x) __attribute__ ((unused)) x # define UNUSED __attribute__ ((unused)) #else Index: src/testsuite/channel-test.e =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/testsuite/channel-test.e,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- src/testsuite/channel-test.e 9 Sep 2002 21:26:00 -0000 1.2 +++ src/testsuite/channel-test.e 27 Dec 2003 13:01:12 -0000 1.3 @@ -1,4 +1,4 @@ -# $Id: channel-test.e,v 1.2 2002/09/09 21:26:00 alex Exp $ +# $Id: channel-test.e,v 1.3 2003/12/27 13:01:12 alex Exp $ spawn telnet localhost 6789 expect { @@ -16,7 +16,7 @@ send "join #channel\r" expect { timeout { exit 1 } - ":nick!~user@* JOIN :#channel" + "@* JOIN :#channel" } expect { timeout { exit 1 } @@ -26,13 +26,17 @@ send "topic #channel :Test-Topic\r" expect { timeout { exit 1 } - ":nick!~user@* TOPIC #channel :Test-Topic" + "@* TOPIC #channel :Test-Topic" } send "who #channel\r" expect { timeout { exit 1 } - "352 nick #channel ~user * nick H@ :0 User" + "352 nick #channel" +} +expect { + timeout { exit 1 } + "* nick H@ :0 User" } expect { timeout { exit 1 } @@ -62,7 +66,7 @@ send "part #channel\r" expect { timeout { exit 1 } - ":nick!~user@* PART #channel :nick" + "@* PART #channel :nick" } send "quit\r" Index: src/testsuite/getpid.sh =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/testsuite/getpid.sh,v retrieving revision 1.2.4.2 retrieving revision 1.4 diff -u -r1.2.4.2 -r1.4 --- src/testsuite/getpid.sh 7 Nov 2003 20:51:11 -0000 1.2.4.2 +++ src/testsuite/getpid.sh 22 Aug 2003 11:31:18 -0000 1.4 @@ -1,6 +1,6 @@ #!/bin/sh # ngIRCd Test Suite -# $Id: getpid.sh,v 1.2.4.2 2003/11/07 20:51:11 alex Exp $ +# $Id: getpid.sh,v 1.4 2003/08/22 11:31:18 alex Exp $ # did we get a name? [ $# -ne 1 ] && exit 1 Index: src/testsuite/mode-test.e =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/testsuite/mode-test.e,v retrieving revision 1.4 retrieving revision 1.6 diff -u -r1.4 -r1.6 --- src/testsuite/mode-test.e 15 Dec 2002 15:52:34 -0000 1.4 +++ src/testsuite/mode-test.e 10 Mar 2004 20:40:06 -0000 1.6 @@ -1,4 +1,4 @@ -# $Id: mode-test.e,v 1.4 2002/12/15 15:52:34 alex Exp $ +# $Id: mode-test.e,v 1.6 2004/03/10 20:40:06 alex Exp $ spawn telnet localhost 6789 expect { @@ -16,7 +16,7 @@ send "mode nick +i\r" expect { timeout { exit 1 } - ":nick!~user@* MODE nick +i" + "@* MODE nick :+i" } send "mode nick\r" @@ -28,7 +28,7 @@ send "mode nick -i\r" expect { timeout { exit 1 } - ":nick!~user@* MODE nick -i" + "@* MODE nick :-i" } send "oper TestOp 123\r" @@ -50,7 +50,7 @@ send "join #channel\r" expect { timeout { exit 1 } - ":nick!~user@* JOIN :#channel" + "@* JOIN :#channel" } expect { timeout { exit 1 } @@ -60,7 +60,7 @@ send "mode #channel +tn\r" expect { timeout { exit 1 } - ":nick!~user@* MODE #channel +tn" + "@* MODE #channel +tn" } send "mode #channel\r" @@ -72,31 +72,31 @@ send "mode #channel +v nick\r" expect { timeout { exit 1 } - ":nick!~user@* MODE #channel +v nick" + "@* MODE #channel +v nick" } send "mode #channel +I nick1\r" expect { timeout { exit 1 } - ":nick!~user@* MODE #channel +I nick1!*@*" + "@* MODE #channel +I nick1!*@*" } send "mode #channel +b nick2@domain\r" expect { timeout { exit 1 } - ":nick!~user@* MODE #channel +b nick2!*@domain" + "@* MODE #channel +b nick2!*@domain" } send "mode #channel +I nick3!user\r" expect { timeout { exit 1 } - ":nick!~user@* MODE #channel +I nick3!user@*" + "@* MODE #channel +I nick3!user@*" } send "mode #channel -vo nick nick\r" expect { timeout { exit 1 } - ":nick!~user@* MODE #channel -vo nick nick" + "@* MODE #channel -vo nick nick" } send "quit\r" Index: src/testsuite/ngircd-test.conf =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/testsuite/ngircd-test.conf,v retrieving revision 1.3.4.1 retrieving revision 1.4 diff -u -r1.3.4.1 -r1.4 --- src/testsuite/ngircd-test.conf 7 Nov 2003 20:51:11 -0000 1.3.4.1 +++ src/testsuite/ngircd-test.conf 5 Nov 2003 23:31:43 -0000 1.4 @@ -1,4 +1,4 @@ -# $Id: ngircd-test.conf,v 1.3.4.1 2003/11/07 20:51:11 alex Exp $ +# $Id: ngircd-test.conf,v 1.4 2003/11/05 23:31:43 alex Exp $ [Global] Name = ngircd.test.server Index: src/testsuite/start-server.sh =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/testsuite/start-server.sh,v retrieving revision 1.10.4.1 retrieving revision 1.11 diff -u -r1.10.4.1 -r1.11 --- src/testsuite/start-server.sh 7 Nov 2003 20:51:11 -0000 1.10.4.1 +++ src/testsuite/start-server.sh 22 Aug 2003 11:31:18 -0000 1.11 @@ -1,6 +1,6 @@ #!/bin/sh # ngIRCd Test Suite -# $Id: start-server.sh,v 1.10.4.1 2003/11/07 20:51:11 alex Exp $ +# $Id: start-server.sh,v 1.11 2003/08/22 11:31:18 alex Exp $ [ -z "$srcdir" ] && srcdir=`dirname $0` Index: src/testsuite/stop-server.sh =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/testsuite/stop-server.sh,v retrieving revision 1.9.4.1 retrieving revision 1.10 diff -u -r1.9.4.1 -r1.10 --- src/testsuite/stop-server.sh 7 Nov 2003 20:51:11 -0000 1.9.4.1 +++ src/testsuite/stop-server.sh 22 Aug 2003 11:31:18 -0000 1.10 @@ -1,6 +1,6 @@ #!/bin/sh # ngIRCd Test Suite -# $Id: stop-server.sh,v 1.9.4.1 2003/11/07 20:51:11 alex Exp $ +# $Id: stop-server.sh,v 1.10 2003/08/22 11:31:18 alex Exp $ [ -z "$srcdir" ] && srcdir=`dirname $0` Index: src/testsuite/stress-server.sh =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/testsuite/stress-server.sh,v retrieving revision 1.6.4.2 retrieving revision 1.8 diff -u -r1.6.4.2 -r1.8 --- src/testsuite/stress-server.sh 7 Nov 2003 20:51:11 -0000 1.6.4.2 +++ src/testsuite/stress-server.sh 22 Aug 2003 11:31:18 -0000 1.8 @@ -1,6 +1,6 @@ #!/bin/sh # ngIRCd Test Suite -# $Id: stress-server.sh,v 1.6.4.2 2003/11/07 20:51:11 alex Exp $ +# $Id: stress-server.sh,v 1.8 2003/08/22 11:31:18 alex Exp $ [ -z "$srcdir" ] && srcdir=`dirname $0` Index: src/testsuite/tests.sh =================================================================== RCS file: /usr/local/CVS/ngircd/ngircd/src/testsuite/tests.sh,v retrieving revision 1.3.6.1 retrieving revision 1.4 diff -u -r1.3.6.1 -r1.4 --- src/testsuite/tests.sh 7 Nov 2003 20:51:11 -0000 1.3.6.1 +++ src/testsuite/tests.sh 22 Aug 2003 11:31:18 -0000 1.4 @@ -1,6 +1,6 @@ #!/bin/sh # ngIRCd Test Suite -# $Id: tests.sh,v 1.3.6.1 2003/11/07 20:51:11 alex Exp $ +# $Id: tests.sh,v 1.4 2003/08/22 11:31:18 alex Exp $ name=`basename $0` test=`echo ${name} | cut -d '.' -f 1`