irc-dev-cvs Mailing List for IRC-Dev ircd development (Page 10)
Brought to you by:
zolty
You can subscribe to this list here.
2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(22) |
Sep
|
Oct
(2) |
Nov
|
Dec
(2) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2003 |
Jan
(30) |
Feb
(4) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(1) |
Nov
(27) |
Dec
(17) |
2004 |
Jan
|
Feb
(4) |
Mar
|
Apr
(4) |
May
(8) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(14) |
Dec
(2) |
2005 |
Jan
(18) |
Feb
(2) |
Mar
(12) |
Apr
(18) |
May
(16) |
Jun
(3) |
Jul
(2) |
Aug
|
Sep
(3) |
Oct
(9) |
Nov
|
Dec
|
2007 |
Jan
|
Feb
|
Mar
|
Apr
(8) |
May
|
Jun
|
Jul
(3) |
Aug
|
Sep
(5) |
Oct
|
Nov
(3) |
Dec
(2) |
2008 |
Jan
(6) |
Feb
|
Mar
|
Apr
|
May
|
Jun
(4) |
Jul
(8) |
Aug
(14) |
Sep
(4) |
Oct
(11) |
Nov
(1) |
Dec
|
From: Toni G. <zo...@us...> - 2003-11-01 17:23:17
|
CVSROOT : /cvsroot/irc-dev Module : ircd-ircdev Commit time: 2003-11-01 17:23:16 UTC Log message: Directory /cvsroot/irc-dev/ircd-ircdev/libs added to the repository |
From: Toni G. <zo...@us...> - 2003-11-01 17:19:48
|
CVSROOT : /cvsroot/irc-dev Module : ircd-ircdev Commit time: 2003-11-01 17:19:46 UTC Modified files: .cvsignore ChangeLog ChangeLog.es aclocal.m4 config.h.in configure configure.in include/channel.h include/patchlevel.h ircd/IPcheck.c ircd/Makefile.in ircd/channel.c ircd/gline.c ircd/ircd_events.c ircd/m_whois.c Added files: TODO TODO.es ircd/.cvsignore ircd/engine_epoll.c Log message: Author: zoltan <zo...@ir...> Log message: 2003-11-01 Toni Garcia <zo...@ir...> 1.0.alpha3 * Implementacion del engine de epoll(). * Actualizacion al u2.10.11.05 de Undernet. ---------------------- diff included ---------------------- Index: ircd-ircdev/.cvsignore diff -u ircd-ircdev/.cvsignore:1.1.1.1 ircd-ircdev/.cvsignore:1.2 --- ircd-ircdev/.cvsignore:1.1.1.1 Mon Sep 8 03:34:25 2003 +++ ircd-ircdev/.cvsignore Sat Nov 1 09:19:35 2003 @@ -5,3 +5,4 @@ stamp-h config.status config.cache +autom4te.cache Index: ircd-ircdev/ChangeLog diff -u ircd-ircdev/ChangeLog:1.3 ircd-ircdev/ChangeLog:1.4 --- ircd-ircdev/ChangeLog:1.3 Sat Nov 1 07:26:45 2003 +++ ircd-ircdev/ChangeLog Sat Nov 1 09:19:35 2003 @@ -1,10 +1,14 @@ # # ChangeLog for ircd-ircdev # -# $Id: ChangeLog,v 1.3 2003/11/01 15:26:45 zolty Exp $ +# $Id: ChangeLog,v 1.4 2003/11/01 17:19:35 zolty Exp $ # # Insert new changes at beginning of the change list. # +2003-11-01 Toni Garcia <zo...@ir...> 1.0.alpha3 + * Implementation epoll() engine. + * Upgrade to Undernet u2.10.11.05. + 2003-11-01 Toni Garcia <zo...@ir...> 1.0.alpha2 * New format ircd.conf. Index: ircd-ircdev/ChangeLog.es diff -u ircd-ircdev/ChangeLog.es:1.3 ircd-ircdev/ChangeLog.es:1.4 --- ircd-ircdev/ChangeLog.es:1.3 Sat Nov 1 07:26:45 2003 +++ ircd-ircdev/ChangeLog.es Sat Nov 1 09:19:35 2003 @@ -1,12 +1,16 @@ # # Log de Cambios para ircd-ircdev # -# $Id: ChangeLog.es,v 1.3 2003/11/01 15:26:45 zolty Exp $ +# $Id: ChangeLog.es,v 1.4 2003/11/01 17:19:35 zolty Exp $ # # Insertar los nuevos cambios al principio de esta lista de cambios. # +2003-11-01 Toni Garcia <zo...@ir...> 1.0.alpha3 + * Implementacion del engine de epoll(). + * Actualizacion al u2.10.11.05 de Undernet. + 2003-11-01 Toni Garcia <zo...@ir...> 1.0.alpha2 - * Nuevo formato del ircd.conf + * Nuevo formato del ircd.conf. 2003-10-07 Toni Garcia <zo...@ir...> 1.0.alpha1 * Limpieza en el 005. Index: ircd-ircdev/TODO diff -u /dev/null ircd-ircdev/TODO:1.1 --- /dev/null Sat Nov 1 09:19:46 2003 +++ ircd-ircdev/TODO Sat Nov 1 09:19:35 2003 @@ -0,0 +1,8 @@ +# +# TODO for ircd-ircdev +# +# $Id: TODO,v 1.1 2003/11/01 17:19:35 zolty Exp $ +# +# Insert new entraces at beginning of the TODO list. +# + Index: ircd-ircdev/TODO.es diff -u /dev/null ircd-ircdev/TODO.es:1.1 --- /dev/null Sat Nov 1 09:19:46 2003 +++ ircd-ircdev/TODO.es Sat Nov 1 09:19:35 2003 @@ -0,0 +1,12 @@ +# +# TODO para ircd-ircdev +# +# $Id: TODO.es,v 1.1 2003/11/01 17:19:35 zolty Exp $ +# +# Insertar las nuevas entradas al principio de la lista TODO. +# + +1/Nov/2003 +Bug en el configure al elegir entre poll() y epoll() en linux que tienen fuentes pero no estan activados. + +Bug en las U-lines (uworld y jupes) Index: ircd-ircdev/aclocal.m4 diff -u ircd-ircdev/aclocal.m4:1.1.1.1 ircd-ircdev/aclocal.m4:1.2 --- ircd-ircdev/aclocal.m4:1.1.1.1 Mon Sep 8 03:34:25 2003 +++ ircd-ircdev/aclocal.m4 Sat Nov 1 09:19:35 2003 @@ -1,4 +1,4 @@ -dnl aclocal.m4 generated automatically by aclocal 1.4 +dnl aclocal.m4 generated automatically by aclocal 1.4-p4 dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation @@ -225,6 +225,825 @@ AC_CHECK_FUNC(socket, , AC_CHECK_LIB(socket, socket, , AC_CHECK_LIB(socket, socket, LIBS="-lsocket -lnsl $LIBS", , -lnsl))) ]) + +# lib-prefix.m4 serial 3 (gettext-0.12.2) +dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl From Bruno Haible. + +dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and +dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't +dnl require excessive bracketing. +ifdef([AC_HELP_STRING], +[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], +[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) + +dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed +dnl to access previously installed libraries. The basic assumption is that +dnl a user will want packages to use other packages he previously installed +dnl with the same --prefix option. +dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate +dnl libraries, but is otherwise very convenient. +AC_DEFUN([AC_LIB_PREFIX], +[ + AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib-prefix], +[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib + --without-lib-prefix don't search for libraries in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/lib" + fi + fi +]) + if test $use_additional = yes; then + dnl Potentially add $additional_includedir to $CPPFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's already present in $CPPFLAGS, + dnl 3. if it's /usr/local/include and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + for x in $CPPFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $CPPFLAGS. + CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" + fi + fi + fi + fi + dnl Potentially add $additional_libdir to $LDFLAGS. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's already present in $LDFLAGS, + dnl 3. if it's /usr/local/lib and we are using GCC on Linux, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/lib"; then + haveit= + for x in $LDFLAGS; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test "X$additional_libdir" = "X/usr/local/lib"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LDFLAGS. + LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" + fi + fi + fi + fi + fi +]) + +dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, +dnl acl_final_exec_prefix, containing the values to which $prefix and +dnl $exec_prefix will expand at the end of the configure script. +AC_DEFUN([AC_LIB_PREPARE_PREFIX], +[ + dnl Unfortunately, prefix and exec_prefix get only finally determined + dnl at the end of configure. + if test "X$prefix" = "XNONE"; then + acl_final_prefix="$ac_default_prefix" + else + acl_final_prefix="$prefix" + fi + if test "X$exec_prefix" = "XNONE"; then + acl_final_exec_prefix='${prefix}' + else + acl_final_exec_prefix="$exec_prefix" + fi + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" + prefix="$acl_save_prefix" +]) + +dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the +dnl variables prefix and exec_prefix bound to the values they will have +dnl at the end of the configure script. +AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], +[ + acl_save_prefix="$prefix" + prefix="$acl_final_prefix" + acl_save_exec_prefix="$exec_prefix" + exec_prefix="$acl_final_exec_prefix" + $1 + exec_prefix="$acl_save_exec_prefix" + prefix="$acl_save_prefix" +]) + +# lib-link.m4 serial 4 (gettext-0.12) +dnl Copyright (C) 2001-2003 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl From Bruno Haible. + +dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and +dnl augments the CPPFLAGS variable. +AC_DEFUN([AC_LIB_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + define([Name],[translit([$1],[./-], [___])]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + ac_cv_lib[]Name[]_libs="$LIB[]NAME" + ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" + ac_cv_lib[]Name[]_cppflags="$INC[]NAME" + ]) + LIB[]NAME="$ac_cv_lib[]Name[]_libs" + LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" + INC[]NAME="$ac_cv_lib[]Name[]_cppflags" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the + dnl results of this search when this library appears as a dependency. + HAVE_LIB[]NAME=yes + undefine([Name]) + undefine([NAME]) +]) + +dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) +dnl searches for libname and the libraries corresponding to explicit and +dnl implicit dependencies, together with the specified include files and +dnl the ability to compile and link the specified testcode. If found, it +dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and +dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and +dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs +dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. +AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], +[ + AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) + AC_REQUIRE([AC_LIB_RPATH]) + define([Name],[translit([$1],[./-], [___])]) + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + + dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME + dnl accordingly. + AC_LIB_LINKFLAGS_BODY([$1], [$2]) + + dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, + dnl because if the user has installed lib[]Name and not disabled its use + dnl via --without-lib[]Name-prefix, he wants to use it. + ac_save_CPPFLAGS="$CPPFLAGS" + AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) + + AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ + ac_save_LIBS="$LIBS" + LIBS="$LIBS $LIB[]NAME" + AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) + LIBS="$ac_save_LIBS" + ]) + if test "$ac_cv_lib[]Name" = yes; then + HAVE_LIB[]NAME=yes + AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) + AC_MSG_CHECKING([how to link with lib[]$1]) + AC_MSG_RESULT([$LIB[]NAME]) + else + HAVE_LIB[]NAME=no + dnl If $LIB[]NAME didn't lead to a usable library, we don't need + dnl $INC[]NAME either. + CPPFLAGS="$ac_save_CPPFLAGS" + LIB[]NAME= + LTLIB[]NAME= + fi + AC_SUBST([HAVE_LIB]NAME) + AC_SUBST([LIB]NAME) + AC_SUBST([LTLIB]NAME) + undefine([Name]) + undefine([NAME]) +]) + +dnl Determine the platform dependent parameters needed to use rpath: +dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator, +dnl hardcode_direct, hardcode_minus_L. +AC_DEFUN([AC_LIB_RPATH], +[ + AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS + AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld + AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host + AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir + AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ + CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ + ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh + . ./conftest.sh + rm -f ./conftest.sh + acl_cv_rpath=done + ]) + wl="$acl_cv_wl" + libext="$acl_cv_libext" + shlibext="$acl_cv_shlibext" + hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" + hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" + hardcode_direct="$acl_cv_hardcode_direct" + hardcode_minus_L="$acl_cv_hardcode_minus_L" + dnl Determine whether the user wants rpath handling at all. + AC_ARG_ENABLE(rpath, + [ --disable-rpath do not hardcode runtime library paths], + :, enable_rpath=yes) +]) + +dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and +dnl the libraries corresponding to explicit and implicit dependencies. +dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. +AC_DEFUN([AC_LIB_LINKFLAGS_BODY], +[ + define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], + [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) + dnl By default, look in $includedir and $libdir. + use_additional=yes + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + AC_LIB_ARG_WITH([lib$1-prefix], +[ --with-lib$1-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib + --without-lib$1-prefix don't search for lib$1 in includedir and libdir], +[ + if test "X$withval" = "Xno"; then + use_additional=no + else + if test "X$withval" = "X"; then + AC_LIB_WITH_FINAL_PREFIX([ + eval additional_includedir=\"$includedir\" + eval additional_libdir=\"$libdir\" + ]) + else + additional_includedir="$withval/include" + additional_libdir="$withval/lib" + fi + fi +]) + dnl Search the library and its dependencies in $additional_libdir and + dnl $LDFLAGS. Using breadth-first-seach. + LIB[]NAME= + LTLIB[]NAME= + INC[]NAME= + rpathdirs= + ltrpathdirs= + names_already_handled= + names_next_round='$1 $2' + while test -n "$names_next_round"; do + names_this_round="$names_next_round" + names_next_round= + for name in $names_this_round; do + already_handled= + for n in $names_already_handled; do + if test "$n" = "$name"; then + already_handled=yes + break + fi + done + if test -z "$already_handled"; then + names_already_handled="$names_already_handled $name" + dnl See if it was already located by an earlier AC_LIB_LINKFLAGS + dnl or AC_LIB_HAVE_LINKFLAGS call. + uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` + eval value=\"\$HAVE_LIB$uppername\" + if test -n "$value"; then + if test "$value" = yes; then + eval value=\"\$LIB$uppername\" + test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" + eval value=\"\$LTLIB$uppername\" + test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" + else + dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined + dnl that this library doesn't exist. So just drop it. + : + fi + else + dnl Search the library lib$name in $additional_libdir and $LDFLAGS + dnl and the already constructed $LIBNAME/$LTLIBNAME. + found_dir= + found_la= + found_so= + found_a= + if test $use_additional = yes; then + if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then + found_dir="$additional_libdir" + found_so="$additional_libdir/lib$name.$shlibext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + else + if test -f "$additional_libdir/lib$name.$libext"; then + found_dir="$additional_libdir" + found_a="$additional_libdir/lib$name.$libext" + if test -f "$additional_libdir/lib$name.la"; then + found_la="$additional_libdir/lib$name.la" + fi + fi + fi + fi + if test "X$found_dir" = "X"; then + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + case "$x" in + -L*) + dir=`echo "X$x" | sed -e 's/^X-L//'` + if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then + found_dir="$dir" + found_so="$dir/lib$name.$shlibext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + else + if test -f "$dir/lib$name.$libext"; then + found_dir="$dir" + found_a="$dir/lib$name.$libext" + if test -f "$dir/lib$name.la"; then + found_la="$dir/lib$name.la" + fi + fi + fi + ;; + esac + if test "X$found_dir" != "X"; then + break + fi + done + fi + if test "X$found_dir" != "X"; then + dnl Found the library. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" + if test "X$found_so" != "X"; then + dnl Linking with a shared library. We attempt to hardcode its + dnl directory into the executable's runpath, unless it's the + dnl standard /usr/lib. + if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/lib"; then + dnl No hardcoding is needed. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $found_dir" + fi + dnl The hardcoding into $LIBNAME is system dependent. + if test "$hardcode_direct" = yes; then + dnl Using DIR/libNAME.so during linking hardcodes DIR into the + dnl resulting binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + if test -n "$hardcode_libdir_flag_spec" && test "$hardcode_minus_L" = no; then + dnl Use an explicit option to hardcode DIR into the resulting + dnl binary. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $found_dir" + fi + else + dnl Rely on "-L$found_dir". + dnl But don't add it if it's already contained in the LDFLAGS + dnl or the already constructed $LIBNAME + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$found_dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" + fi + if test "$hardcode_minus_L" != no; then + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" + else + dnl We cannot use $hardcode_runpath_var and LD_RUN_PATH + dnl here, because this doesn't fit in flags passed to the + dnl compiler. So give up. No hardcoding. This affects only + dnl very old systems. + dnl FIXME: Not sure whether we should use + dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" + dnl here. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + fi + fi + fi + fi + else + if test "X$found_a" != "X"; then + dnl Linking with a static library. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" + else + dnl We shouldn't come here, but anyway it's good to have a + dnl fallback. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" + fi + fi + dnl Assume the include files are nearby. + additional_includedir= + case "$found_dir" in + */lib | */lib/) + basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'` + additional_includedir="$basedir/include" + ;; + esac + if test "X$additional_includedir" != "X"; then + dnl Potentially add $additional_includedir to $INCNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/include, + dnl 2. if it's /usr/local/include and we are using GCC on Linux, + dnl 3. if it's already present in $CPPFLAGS or the already + dnl constructed $INCNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_includedir" != "X/usr/include"; then + haveit= + if test "X$additional_includedir" = "X/usr/local/include"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + for x in $CPPFLAGS $INC[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-I$additional_includedir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_includedir"; then + dnl Really add $additional_includedir to $INCNAME. + INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" + fi + fi + fi + fi + fi + dnl Look for dependencies. + if test -n "$found_la"; then + dnl Read the .la file. It defines the variables + dnl dlname, library_names, old_library, dependency_libs, current, + dnl age, revision, installed, dlopen, dlpreopen, libdir. + save_libdir="$libdir" + case "$found_la" in + */* | *\\*) . "$found_la" ;; + *) . "./$found_la" ;; + esac + libdir="$save_libdir" + dnl We use only dependency_libs. + for dep in $dependency_libs; do + case "$dep" in + -L*) + additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` + dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. + dnl But don't add it + dnl 1. if it's the standard /usr/lib, + dnl 2. if it's /usr/local/lib and we are using GCC on Linux, + dnl 3. if it's already present in $LDFLAGS or the already + dnl constructed $LIBNAME, + dnl 4. if it doesn't exist as a directory. + if test "X$additional_libdir" != "X/usr/lib"; then + haveit= + if test "X$additional_libdir" = "X/usr/local/lib"; then + if test -n "$GCC"; then + case $host_os in + linux*) haveit=yes;; + esac + fi + fi + if test -z "$haveit"; then + haveit= + for x in $LDFLAGS $LIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LIBNAME. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" + fi + fi + haveit= + for x in $LDFLAGS $LTLIB[]NAME; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X-L$additional_libdir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + if test -d "$additional_libdir"; then + dnl Really add $additional_libdir to $LTLIBNAME. + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" + fi + fi + fi + fi + ;; + -R*) + dir=`echo "X$dep" | sed -e 's/^X-R//'` + if test "$enable_rpath" != no; then + dnl Potentially add DIR to rpathdirs. + dnl The rpathdirs will be appended to $LIBNAME at the end. + haveit= + for x in $rpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + rpathdirs="$rpathdirs $dir" + fi + dnl Potentially add DIR to ltrpathdirs. + dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. + haveit= + for x in $ltrpathdirs; do + if test "X$x" = "X$dir"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + ltrpathdirs="$ltrpathdirs $dir" + fi + fi + ;; + -l*) + dnl Handle this in the next round. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` + ;; + *.la) + dnl Handle this in the next round. Throw away the .la's + dnl directory; it is already contained in a preceding -L + dnl option. + names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` + ;; + *) + dnl Most likely an immediate library name. + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" + ;; + esac + done + fi + else + dnl Didn't find the library; assume it is in the system directories + dnl known to the linker and runtime loader. (All the system + dnl directories known to the linker should also be known to the + dnl runtime loader, otherwise the system is severely misconfigured.) + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" + fi + fi + fi + done + done + if test "X$rpathdirs" != "X"; then + if test -n "$hardcode_libdir_separator"; then + dnl Weird platform: only the last -rpath option counts, the user must + dnl pass all path elements in one option. We can arrange that for a + dnl single library, but not when more than one $LIBNAMEs are used. + alldirs= + for found_dir in $rpathdirs; do + alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir" + done + dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl. + acl_save_libdir="$libdir" + libdir="$alldirs" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + else + dnl The -rpath options are cumulative. + for found_dir in $rpathdirs; do + acl_save_libdir="$libdir" + libdir="$found_dir" + eval flag=\"$hardcode_libdir_flag_spec\" + libdir="$acl_save_libdir" + LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" + done + fi + fi + if test "X$ltrpathdirs" != "X"; then + dnl When using libtool, the option that works for both libraries and + dnl executables is -R. The -R options are cumulative. + for found_dir in $ltrpathdirs; do + LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" + done + fi +]) + +dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, +dnl unless already present in VAR. +dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes +dnl contains two or three consecutive elements that belong together. +AC_DEFUN([AC_LIB_APPENDTOVAR], +[ + for element in [$2]; do + haveit= + for x in $[$1]; do + AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) + if test "X$x" = "X$element"; then + haveit=yes + break + fi + done + if test -z "$haveit"; then + [$1]="${[$1]}${[$1]:+ }$element" + fi + done +]) + +# lib-ld.m4 serial 2 (gettext-0.12) +dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. +dnl This file is free software, distributed under the terms of the GNU +dnl General Public License. As a special exception to the GNU General +dnl Public License, this file may be distributed as part of a program +dnl that contains a configuration script generated by Autoconf, under +dnl the same distribution terms as the rest of that program. + +dnl Subroutines of libtool.m4, +dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision +dnl with libtool.m4. + +dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. +AC_DEFUN([AC_LIB_PROG_LD_GNU], +[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, +[# I'd rather use --version here, but apparently some GNU ld's only accept -v. +if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then + acl_cv_prog_gnu_ld=yes +else + acl_cv_prog_gnu_ld=no +fi]) +with_gnu_ld=$acl_cv_prog_gnu_ld +]) + +dnl From libtool-1.4. Sets the variable LD. +AC_DEFUN([AC_LIB_PROG_LD], +[AC_ARG_WITH(gnu-ld, +[ --with-gnu-ld assume the C compiler uses GNU ld [default=no]], +test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no) +AC_REQUIRE([AC_PROG_CC])dnl +AC_REQUIRE([AC_CANONICAL_HOST])dnl +# Prepare PATH_SEPARATOR. +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi +ac_prog=ld +if test "$GCC" = yes; then + # Check if gcc -print-prog-name=ld gives a path. + AC_MSG_CHECKING([for ld used by GCC]) + case $host in + *-*-mingw*) + # gcc leaves a trailing carriage return which upsets mingw + ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; + *) + ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; + esac + case $ac_prog in + # Accept absolute paths. + [[\\/]* | [A-Za-z]:[\\/]*)] + [re_direlt='/[^/][^/]*/\.\./'] + # Canonicalize the path of ld + ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` + while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do + ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` + done + test -z "$LD" && LD="$ac_prog" + ;; + "") + # If it fails, then pretend we aren't using GCC. + ac_prog=ld + ;; + *) + # If it is relative, then search for the first ld in PATH. + with_gnu_ld=unknown + ;; + esac +elif test "$with_gnu_ld" = yes; then + AC_MSG_CHECKING([for GNU ld]) +else + AC_MSG_CHECKING([for non-GNU ld]) +fi +AC_CACHE_VAL(acl_cv_path_LD, +[if test -z "$LD"; then + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" + for ac_dir in $PATH; do + test -z "$ac_dir" && ac_dir=. + if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then + acl_cv_path_LD="$ac_dir/$ac_prog" + # Check to see if the program is GNU ld. I'd rather use --version, + # but apparently some GNU ld's only accept -v. + # Break only if it was the GNU/non-GNU ld that we prefer. + if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then + test "$with_gnu_ld" != no && break + else + test "$with_gnu_ld" != yes && break + fi + fi + done + IFS="$ac_save_ifs" +else + acl_cv_path_LD="$LD" # Let the user override the test with a path. +fi]) +LD="$acl_cv_path_LD" +if test -n "$LD"; then + AC_MSG_RESULT($LD) +else + AC_MSG_RESULT(no) +fi +test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) +AC_LIB_PROG_LD_GNU +]) # serial 1 Index: ircd-ircdev/config.h.in diff -u ircd-ircdev/config.h.in:1.1.1.1 ircd-ircdev/config.h.in:1.2 --- ircd-ircdev/config.h.in:1.1.1.1 Mon Sep 8 03:34:25 2003 +++ ircd-ircdev/config.h.in Sat Nov 1 09:19:35 2003 @@ -1,4 +1,4 @@ -/* config.h.in. Generated automatically from configure.in by autoheader. */ +/* config.h.in. Generated from configure.in by autoheader. */ #ifndef INCLUDED_config_h #define INCLUDED_config_h /* @@ -19,34 +19,11 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: config.h.in,v 1.1.1.1 2003/09/08 10:34:25 zolty Exp $ + * $Id: config.h.in,v 1.2 2003/11/01 17:19:35 zolty Exp $ */ -/* Define to `int' if <sys/types.h> doesn't define. */ -#undef gid_t - -/* Define if system calls automatically restart after interruption - by a signal. */ -#undef HAVE_RESTARTABLE_SYSCALLS - -/* Define to `unsigned' if <sys/types.h> doesn't define. */ -#undef size_t - -/* Define if you have the ANSI C header files. */ -#undef STDC_HEADERS - -/* Define if you can safely include both <sys/time.h> and <time.h>. */ -#undef TIME_WITH_SYS_TIME - -/* Define if your <sys/time.h> declares struct tm. */ -#undef TM_IN_SYS_TIME - -/* Define to `int' if <sys/types.h> doesn't define. */ -#undef uid_t - -/* Define if your processor stores words with the most significant - byte first (like Motorola and SPARC, unlike Intel and VAX). */ -#undef WORDS_BIGENDIAN +/* Define if you have the setrlimit function */ +#undef HAVE_SETRLIMIT /* Define one of these, depending on wether you have * POSIX, BSD or SYSV non-blocking stuff @@ -69,79 +46,207 @@ #undef u_int16_t #undef u_int32_t -/* The number of bytes in a int. */ -#undef SIZEOF_INT +/* Define to force the poll() function to be used */ +#undef USE_POLL +/* Define to enable the /dev/poll engine */ +#undef USE_DEVPOLL +/* Define to enable the kqueue engine */ +#undef USE_KQUEUE -/* The number of bytes in a long. */ -#undef SIZEOF_LONG +/* Define to enable various debugging code in the server; DO NOT USE + * THIS ON PRODUCTION SERVERS ON PAIN OF DELINKING! + */ +#undef DEBUGMODE -/* The number of bytes in a short. */ -#undef SIZEOF_SHORT +/* Define this to DISable various assertion checking statements */ +#undef NDEBUG -/* The number of bytes in a void *. */ -#undef SIZEOF_VOID_P +/* Define to force certain critical functions to be inlined */ +#undef FORCEINLINE + +/* Define to be the local domain name for some statics gathering */ +#undef DOMAINNAME + +/* Define to be the name of the executable to be executed on /restart */ +#undef SPATH -/* Define if you have the getrusage function. */ +/* Define to be the path to the data directory */ +#undef DPATH + +/* Define to be the name of the configuration file */ +#undef CPATH + +/* Define to be the name of the debugging log file */ +#undef LPATH + +/* Define to be the maximum number of network connections */ +#undef MAXCONNECTIONS + + +/* Configuration file name */ +#undef CPATH + +/* Enable debugging code */ +#undef DEBUGMODE + +/* Domain name to be used for some statistics gathering */ +#undef DOMAINNAME + +/* Path to data directory */ +#undef DPATH + +/* Force inlining for a few critical functions */ +#undef FORCEINLINE + +/* Define to 1 if you have the `getrusage' function. */ #undef HAVE_GETRUSAGE -/* Define if you have the kqueue function. */ +/* Define to 1 if you have the <inttypes.h> header file. */ +#undef HAVE_INTTYPES_H + +/* Define to 1 if you have the `kqueue' function. */ #undef HAVE_KQUEUE -/* Define if you have the setrlimit function. */ -#undef HAVE_SETRLIMIT +/* Define to 1 if you have the `nsl' library (-lnsl). */ +#undef HAVE_LIBNSL -/* Define if you have the times function. */ -#undef HAVE_TIMES +/* Define to 1 if you have the `resolv' library (-lresolv). */ +#undef HAVE_LIBRESOLV + +/* Define to 1 if you have the `socket' library (-lsocket). */ +#undef HAVE_LIBSOCKET -/* Define if you have the <poll.h> header file. */ +/* Define to 1 if you have the <memory.h> header file. */ +#undef HAVE_MEMORY_H + +/* Define to 1 if you have the <poll.h> header file. */ #undef HAVE_POLL_H -/* Define if you have the <sys/devpoll.h> header file. */ +/* Define to 1 if system calls automatically restart after interruption by a + signal. */ +#undef HAVE_RESTARTABLE_SYSCALLS + +/* Define to 1 if you have the `setrlimit' function. */ +#undef HAVE_SETRLIMIT + +/* Define to 1 if you have the <stdint.h> header file. */ +#undef HAVE_STDINT_H + +/* Define to 1 if you have the <stdlib.h> header file. */ +#undef HAVE_STDLIB_H + +/* Define to 1 if you have the <strings.h> header file. */ +#undef HAVE_STRINGS_H + +/* Define to 1 if you have the <string.h> header file. */ +#undef HAVE_STRING_H + +/* Define to 1 if you have the <sys/devpoll.h> header file. */ #undef HAVE_SYS_DEVPOLL_H -/* Define if you have the <sys/event.h> header file. */ +/* Define to 1 if you have the <sys/epoll.h> header file. */ +#undef HAVE_SYS_EPOLL_H + +/* Define to 1 if you have the <sys/event.h> header file. */ #undef HAVE_SYS_EVENT_H -/* Define if you have the nsl library (-lnsl). */ -#undef HAVE_LIBNSL +/* Define to 1 if you have the <sys/stat.h> header file. */ +#undef HAVE_SYS_STAT_H -/* Define if you have the socket library (-lsocket). */ -#undef HAVE_LIBSOCKET +/* Define to 1 if you have the <sys/types.h> header file. */ +#undef HAVE_SYS_TYPES_H -/* Specify whether or not to use poll() */ -#undef USE_POLL +/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */ +#undef HAVE_SYS_WAIT_H -/* Enable debugging code */ -#undef DEBUGMODE +/* Define to 1 if you have the `times' function. */ +#undef HAVE_TIMES + +/* Define to 1 if you have the <unistd.h> header file. */ +#undef HAVE_UNISTD_H + +/* Path to debugging log file */ +#undef LPATH + +/* Maximum number of network connections */ +#undef MAXCONNECTIONS /* Disable assertions */ #undef NDEBUG -/* Force inlining for a few critical functions */ -#undef FORCEINLINE +/* Define to the address where bug reports for this package should be sent. */ +#undef PACKAGE_BUGREPORT + +/* Define to the full name of this package. */ +#undef PACKAGE_NAME + +/* Define to the full name and version of this package. */ +#undef PACKAGE_STRING + +/* Define to the one symbol short name of this package. */ +#undef PACKAGE_TARNAME + +/* Define to the version of this package. */ +#undef PACKAGE_VERSION + +/* The size of a `int', as computed by sizeof. */ +#undef SIZEOF_INT + +/* The size of a `long', as computed by sizeof. */ +#undef SIZEOF_LONG + +/* The size of a `short', as computed by sizeof. */ +#undef SIZEOF_SHORT + +/* The size of a `void *', as computed by sizeof. */ +#undef SIZEOF_VOID_P + +/* Path to executable for restarts */ +#undef SPATH + +/* Define to 1 if you have the ANSI C header files. */ +#undef STDC_HEADERS + +/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */ +#undef TIME_WITH_SYS_TIME + +/* Define to 1 if your <sys/time.h> declares `struct tm'. */ +#undef TM_IN_SYS_TIME /* Define to enable the /dev/poll engine */ #undef USE_DEVPOLL +/* Define to enable the epoll engine */ +#undef USE_EPOLL + /* Define to enable the kqueue engine */ #undef USE_KQUEUE -/* Domain name to be used for some statistics gathering */ -#undef DOMAINNAME +/* Specify whether or not to use poll() */ +#undef USE_POLL -/* Path to executable for restarts */ -#undef SPATH +/* Define to 1 if your processor stores words with the most significant byte + first (like Motorola and SPARC, unlike Intel and VAX). */ +#undef WORDS_BIGENDIAN -/* Path to data directory */ -#undef DPATH +/* Define to `int' if <sys/types.h> doesn't define. */ +#undef gid_t -/* Configuration file name */ -#undef CPATH +/* Define to `short' if <sys/types.h> does not define. */ +#undef int16_t -/* Path to debugging log file */ -#undef LPATH +/* Define to `long' if <sys/types.h> does not define. */ +#undef int32_t -/* Maximum number of network connections */ -#undef MAXCONNECTIONS +/* Define to `unsigned' if <sys/types.h> does not define. */ +#undef size_t + +/* Define to `unsigned short' if <sys/types.h> does not define. */ +#undef u_int16_t + +/* Define to `unsigned long' if <sys/types.h> does not define. */ +#undef u_int32_t +/* Define to `int' if <sys/types.h> doesn't define. */ +#undef uid_t #endif /* INCLUDED_config_h */ Index: ircd-ircdev/configure diff -u ircd-ircdev/configure:1.2 ircd-ircdev/configure:1.3 --- ircd-ircdev/configure:1.2 Sat Nov 1 07:26:45 2003 +++ ircd-ircdev/configure Sat Nov 1 09:19:35 2003 @@ -855,6 +855,7 @@ --disable-inlines Disable inlining for a few critical functions --disable-devpoll Disable the /dev/poll-based engine --disable-kqueue Disable the kqueue-based engine + --disable-epoll Disable the epoll-based engine Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -3641,7 +3642,8 @@ -for ac_header in poll.h sys/devpoll.h sys/event.h + +for ac_header in poll.h sys/devpoll.h sys/event.h sys/epoll.h do as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` if eval "test \"\${$as_ac_Header+set}\" = set"; then @@ -7201,6 +7203,11 @@ echo "$as_me:$LINENO: result: Linux ($host) found." >&5 echo "${ECHO_T}Linux ($host) found." >&6 unet_poll_syscall=yes +# if test x"$ac_cv_header_sys_epoll_h" = xyes; then +# unet_poll_syscall=no +# else +# unet_poll_syscall=yes +# fi OSDEP_C=os_linux.c ;; @@ -7518,6 +7525,37 @@ ENGINE_C="engine_kqueue.c $ENGINE_C" fi +echo "$as_me:$LINENO: checking whether to enable the epoll event engine" >&5 +echo $ECHO_N "checking whether to enable the epoll event engine... $ECHO_C" >&6 +# Check whether --enable-epoll or --disable-epoll was given. +if test "${enable_epoll+set}" = set; then + enableval="$enable_epoll" + unet_cv_enable_epoll=$enable_epoll +else + if test "${unet_cv_enable_epoll+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + unet_cv_enable_epoll=yes +fi + +fi; + +if test x"$ac_cv_header_sys_epoll_h" = xno -o x"$ac_cv_func_epoll" = xno; then + unet_cv_enable_epoll=no +fi + +echo "$as_me:$LINENO: result: $unet_cv_enable_epoll" >&5 +echo "${ECHO_T}$unet_cv_enable_epoll" >&6 + +if test x"$unet_cv_enable_epoll" != no; then + +cat >>confdefs.h <<\_ACEOF +#define USE_EPOLL +_ACEOF + + ENGINE_C="engine_epoll.c $ENGINE_C" + fi + echo "$as_me:$LINENO: checking what name to give the symlink" >&5 echo $ECHO_N "checking what name to give the symlink... $ECHO_C" >&6 @@ -9115,5 +9153,6 @@ echo " Maximum connections: $unet_cv_with_maxcon" echo "" echo " poll() engine: $unet_cv_enable_poll" +echo " epoll() engine: $unet_cv_enable_epoll" echo " kqueue() engine: $unet_cv_enable_kqueue" echo " /dev/poll engine: $unet_cv_enable_devpoll" Index: ircd-ircdev/configure.in diff -u ircd-ircdev/configure.in:1.2 ircd-ircdev/configure.in:1.3 --- ircd-ircdev/configure.in:1.2 Sat Nov 1 07:26:45 2003 +++ ircd-ircdev/configure.in Sat Nov 1 09:19:35 2003 @@ -19,7 +19,7 @@ dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. dnl -dnl $Id: configure.in,v 1.2 2003/11/01 15:26:45 zolty Exp $ +dnl $Id: configure.in,v 1.3 2003/11/01 17:19:35 zolty Exp $ dnl Make sure we are in the correct directory (someone could have run dnl 'configure' with a wrong '--srcdir'). @@ -113,7 +113,7 @@ dnl Checks for header files. AC_HEADER_STDC -AC_CHECK_HEADERS(poll.h sys/devpoll.h sys/event.h) +AC_CHECK_HEADERS(poll.h sys/devpoll.h sys/event.h sys/epoll.h) dnl Checks for typedefs, structures, and compiler characteristics dnl AC_C_CONST @@ -154,6 +154,11 @@ *-linux*) AC_MSG_RESULT([Linux ($host) found.]) unet_poll_syscall=yes +# if test x"$ac_cv_header_sys_epoll_h" = xyes; then +# unet_poll_syscall=no +# else +# unet_poll_syscall=yes +# fi OSDEP_C=os_linux.c ;; @@ -362,6 +367,25 @@ ENGINE_C="engine_kqueue.c $ENGINE_C" fi +dnl --disable-epoll check +AC_MSG_CHECKING([whether to enable the epoll event engine]) +AC_ARG_ENABLE([epoll], +[ --disable-epoll Disable the epoll-based engine], +[unet_cv_enable_epoll=$enable_epoll], +[AC_CACHE_VAL(unet_cv_enable_epoll, +[unet_cv_enable_epoll=yes])]) + +if test x"$ac_cv_header_sys_epoll_h" = xno -o x"$ac_cv_func_epoll" = xno; then + unet_cv_enable_epoll=no +fi + +AC_MSG_RESULT([$unet_cv_enable_epoll]) + +if test x"$unet_cv_enable_epoll" != no; then + AC_DEFINE([USE_EPOLL], , [Define to enable the epoll engine]) + ENGINE_C="engine_epoll.c $ENGINE_C" + fi + dnl --with-symlink lets us set the name of the symlink; defaults to "ircd" AC_MSG_CHECKING([what name to give the symlink]) AC_ARG_WITH([symlink], @@ -683,5 +707,6 @@ echo " Maximum connections: $unet_cv_with_maxcon" echo "" echo " poll() engine: $unet_cv_enable_poll" +echo " epoll() engine: $unet_cv_enable_epoll" echo " kqueue() engine: $unet_cv_enable_kqueue" echo " /dev/poll engine: $unet_cv_enable_devpoll" Index: ircd-ircdev/include/channel.h diff -u ircd-ircdev/include/channel.h:1.1.1.1 ircd-ircdev/include/channel.h:1.2 --- ircd-ircdev/include/channel.h:1.1.1.1 Mon Sep 8 03:34:27 2003 +++ ircd-ircdev/include/channel.h Sat Nov 1 09:19:35 2003 @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: channel.h,v 1.1.1.1 2003/09/08 10:34:27 zolty Exp $ + * $Id: channel.h,v 1.2 2003/11/01 17:19:35 zolty Exp $ */ #ifndef INCLUDED_channel_h #define INCLUDED_channel_h @@ -66,6 +66,7 @@ #define CHFL_BANVALID 0x0800 /* CHFL_BANNED bit is valid */ #define CHFL_BANNED 0x1000 /* Channel member is banned */ #define CHFL_SILENCE_IPMASK 0x2000 /* silence mask is an IP-number mask */ +#define CHFL_USER_PARTING 0x4000 /* User is already parting that channel */ #define CHFL_OVERLAP (CHFL_CHANOP | CHFL_VOICE) #define CHFL_BANVALIDMASK (CHFL_BANVALID | CHFL_BANNED) @@ -180,6 +181,7 @@ #define IsServOpOk(x) ((x)->status & CHFL_SERVOPOK) #define IsBurstJoined(x) ((x)->status & CHFL_BURST_JOINED) #define IsVoicedOrOpped(x) ((x)->status & CHFL_VOICED_OR_OPPED) +#define IsUserParting(x) ((x)->status & CHFL_USER_PARTING) #define SetBanned(x) ((x)->status |= CHFL_BANNED) #define SetBanValid(x) ((x)->status |= CHFL_BANVALID) @@ -187,6 +189,7 @@ #define SetServOpOk(x) ((x)->status |= CHFL_SERVOPOK) #define SetBurstJoined(x) ((x)->status |= CHFL_BURST_JOINED) #define SetZombie(x) ((x)->status |= CHFL_ZOMBIE) +#define SetUserParting(x) ((x)->status |= CHFL_USER_PARTING) #define ClearBanned(x) ((x)->status &= ~CHFL_BANNED) #define ClearBanValid(x) ((x)->status &= ~CHFL_BANVALID) Index: ircd-ircdev/include/patchlevel.h diff -u ircd-ircdev/include/patchlevel.h:1.3 ircd-ircdev/include/patchlevel.h:1.4 --- ircd-ircdev/include/patchlevel.h:1.3 Sat Nov 1 07:26:45 2003 +++ ircd-ircdev/include/patchlevel.h Sat Nov 1 09:19:35 2003 @@ -15,10 +15,10 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: patchlevel.h,v 1.3 2003/11/01 15:26:45 zolty Exp $ + * $Id: patchlevel.h,v 1.4 2003/11/01 17:19:35 zolty Exp $ * */ -#define PATCHLEVEL ".alpha2" +#define PATCHLEVEL ".alpha3" #define RELEASE "1.0" Index: ircd-ircdev/ircd/.cvsignore diff -u /dev/null ircd-ircdev/ircd/.cvsignore:1.1 --- /dev/null Sat Nov 1 09:19:46 2003 +++ ircd-ircdev/ircd/.cvsignore Sat Nov 1 09:19:36 2003 @@ -0,0 +1,6 @@ + chkconf + table_gen + chattr.tab.c +lex.yy.c +y.tab.c +y.tab.h Index: ircd-ircdev/ircd/IPcheck.c diff -u ircd-ircdev/ircd/IPcheck.c:1.1.1.1 ircd-ircdev/ircd/IPcheck.c:1.2 --- ircd-ircdev/ircd/IPcheck.c:1.1.1.1 Mon Sep 8 03:34:28 2003 +++ ircd-ircdev/ircd/IPcheck.c Sat Nov 1 09:19:36 2003 @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: IPcheck.c,v 1.1.1.1 2003/09/08 10:34:28 zolty Exp $ + * $Id: IPcheck.c,v 1.2 2003/11/01 17:19:36 zolty Exp $ * * * This file should be edited in a window with a width of 141 characters @@ -397,7 +397,7 @@ /* * If this was the last one, set `last_connect' to disconnect time (used for expiration) */ - assert(entry->connected>0); + /* assert(entry->connected>0); */ if (0 == --entry->connected) { if (CONNECTED_SINCE(entry->last_connect) > IPCHECK_CLONE_LIMIT * IPCHECK_CLONE_PERIOD) { /* Index: ircd-ircdev/ircd/Makefile.in diff -u ircd-ircdev/ircd/Makefile.in:1.3 ircd-ircdev/ircd/Makefile.in:1.4 --- ircd-ircdev/ircd/Makefile.in:1.3 Sat Nov 1 07:26:46 2003 +++ ircd-ircdev/ircd/Makefile.in Sat Nov 1 09:19:36 2003 @@ -75,6 +75,7 @@ ENGINE_SRC = \ engine_devpoll.c \ + engine_epoll.c \ engine_poll.c \ engine_kqueue.c \ engine_select.c Index: ircd-ircdev/ircd/channel.c diff -u ircd-ircdev/ircd/channel.c:1.1.1.1 ircd-ircdev/ircd/channel.c:1.2 --- ircd-ircdev/ircd/channel.c:1.1.1.1 Mon Sep 8 03:34:28 2003 +++ ircd-ircdev/ircd/channel.c Sat Nov 1 09:19:36 2003 @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: channel.c,v 1.1.1.1 2003/09/08 10:34:28 zolty Exp $ + * $Id: channel.c,v 1.2 2003/11/01 17:19:36 zolty Exp $ */ #include "config.h" @@ -2024,7 +2024,7 @@ /* clean up the key string */ s = t_str; while (*++s > ' ' && *s != ':' && --t_len) - ; + s++; *s = '\0'; if (!*t_str) { /* warn if empty */ @@ -2685,6 +2685,11 @@ if (jbuf->jb_type == JOINBUF_TYPE_PART || jbuf->jb_type == JOINBUF_TYPE_PARTALL) { + struct Membership *member = find_member_link(chan, jbuf->jb_source); + if (IsUserParting(member)) + return; + SetUserParting(member); + /* Send notification to channel */ if (!(flags & CHFL_ZOMBIE)) sendcmdto_channel_butserv_butone(jbuf->jb_source, CMD_PART, chan, NULL, Index: ircd-ircdev/ircd/engine_epoll.c diff -u /dev/null ircd-ircdev/ircd/engine_epoll.c:1.1 --- /dev/null Sat Nov 1 09:19:46 2003 +++ ircd-ircdev/ircd/engine_epoll.c Sat Nov 1 09:19:36 2003 @@ -0,0 +1,285 @@ +/* + * IRC - Internet Relay Chat, ircd/engine_epoll.c + * Copyright (C) 2003 Michael Poole <md...@tr...> + * + * 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 1, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * $Id: engine_epoll.c,v 1.1 2003/11/01 17:19:36 zolty Exp $ + */ +#include "config.h" + +#include "ircd.h" +#include "ircd_events.h" +#include "ircd_alloc.h" +#include "ircd_features.h" +#include "ircd_log.h" +#include "s_debug.h" + +#include <assert.h> +#include <errno.h> +#include <sys/epoll.h> +#include <sys/socket.h> +#include <time.h> +#include <linux/unistd.h> + +/* The GNU C library may have a valid header but stub implementations + * of the epoll system calls. If so, provide our own. */ +#if defined(__stub_epoll_create) || defined(__stub___epoll_create) + +/* Oh, did we mention that some glibc releases do not even define the + * syscall numbers? */ +#if !defined(__NR_epoll_create) +#if defined(__i386__) +#define __NR_epoll_create 254 +#define __NR_epoll_ctl 255 +#define __NR_epoll_wait 256 +#elif defined(__ia64__) +#define __NR_epoll_create 1243 +#define __NR_epoll_ctl 1244 +#define __NR_epoll_wait 1245 +#elif defined(__x86_64__) +#define __NR_epoll_create 214 +#define __NR_epoll_ctl 233 +#define __NR_epoll_wait 232 +#else /* cpu types */ +#error No system call numbers defined for epoll family. +#endif /* cpu types */ +#endif /* !defined(__NR_epoll_create) */ + +_syscall1(int, epoll_create, int, size) +_syscall4(int, epoll_ctl, int, epfd, int, op, int, fd, struct epoll_event *, event) +_syscall4(int, epoll_wait, int, epfd, struct epoll_event *, pevents, int, maxevents, int, timeout) + +#endif /* epoll_create defined as stub */ + +#define EPOLL_ERROR_THRESHOLD 20 /* after 20 epoll errors, restart */ +#define ERROR_EXPIRE_TIME 3600 /* expire errors after an hour */ + +static int epoll_fd; +static int errors; +static struct Timer clear_error; + +/* decrements the error count once per hour */ +static void +error_clear(struct Event *ev) +{ + if (!--errors) + timer_del(ev_timer(ev)); +} + +/* initialize the epoll engine */ +static int +engine_init(int max_sockets) +{ + if ((epoll_fd = epoll_create(max_sockets)) < 0) { + log_write(LS_SYSTEM, L_WARNING, 0, + "epoll() engine cannot initialize: %m"); + return 0; + } + return 1; +} + +static void +set_events(struct Socket *sock, enum SocketState state, unsigned int events, struct epoll_event *evt) +{ + assert(0 != sock); + assert(0 <= s_fd(sock)); + + evt->data.ptr = sock; + + switch (state) { + case SS_CONNECTING: + evt->events = EPOLLOUT; + break; + + case SS_LISTENING: + case SS_NOTSOCK: + evt->events = EPOLLIN; + break; + + case SS_CONNECTED: + case SS_DATAGRAM: + case SS_CONNECTDG: + switch (events & SOCK_EVENT_MASK) { + case 0: + evt->events = 0; + break; + case SOCK_EVENT_READABLE: + evt->events = EPOLLIN; + break; + case SOCK_EVENT_WRITABLE: + evt->events = EPOLLOUT; + break; + case SOCK_EVENT_READABLE|SOCK_EVENT_WRITABLE: + evt->events = EPOLLIN|EPOLLOUT; + break; + } + break; + } +} + +static int +engine_add(struct Socket *sock) +{ + struct epoll_event evt; + + assert(0 != sock); + Debug((DEBUG_ENGINE, "epoll: Adding socket %d [%p], state %s, to engine", + s_fd(sock), sock, state_to_name(s_state(sock)))); + set_events(sock, s_state(sock), s_events(sock), &evt); + if (epoll_ctl(epoll_fd, EPOLL_CTL_ADD, s_fd(sock), &evt) < 0) { + event_generate(ET_ERROR, sock, errno); + return 0; + } + return 1; +} + +static void +engine_set_state(struct Socket *sock, enum SocketState new_state) +{ + struct epoll_event evt; + + assert(0 != sock); + Debug((DEBUG_ENGINE, "epoll: Changing state for socket %p to %s", + sock, state_to_name(new_state))); + set_events(sock, new_state, s_events(sock), &evt); + if (epoll_ctl(epoll_fd, EPOLL_CTL_MOD, s_fd(sock), &evt) < 0) + event_generate(ET_ERROR, sock, errno); +} + +static void +engine_set_events(struct Socket *sock, unsigned new_events) +{ + struct epoll_event evt; + + assert(0 != sock); + Debug((DEBUG_ENGINE, "epoll: Changing event mask for socket %p to [%s]", + sock, sock_flags(new_events))); + set_events(sock, s_state(sock), new_events, &evt); + if (epoll_ctl(epoll_fd, EPOLL_CTL_MOD, s_fd(sock), &evt) < 0) + event_generate(ET_ERROR, sock, errno); +} + +static void +engine_delete(struct Socket *sock) +{ + assert(0 != sock); + Debug((DEBUG_ENGINE, "epoll: Deleting socket %d [%p], state %s", + s_fd(sock), sock, state_to_name(s_state(sock)))); + if (epoll_ctl(epoll_fd, EPOLL_CTL_DEL, s_fd(sock), NULL) < 0) + ... [truncated message content] |
From: Toni G. <zo...@us...> - 2003-11-01 15:27:06
|
CVSROOT : /cvsroot/irc-dev Module : ircd-ircdev Commit time: 2003-11-01 15:26:56 UTC Modified files: ChangeLog ChangeLog.es configure configure.in include/class.h include/ircd_features.h include/motd.h include/patchlevel.h include/s_conf.h include/supported.h ircd/Makefile.in ircd/class.c ircd/ircd.c ircd/ircd_features.c ircd/m_clearmode.c ircd/m_join.c ircd/m_trace.c ircd/m_whois.c ircd/motd.c ircd/s_conf.c ircd/s_err.c Added files: doc/ircd.sample-en.conf ircd/ircd_lexer.l ircd/ircd_parser.y Removed files: doc/en/ircd.conf.sample Log message: Author: zoltan <zo...@ir...> Log message: 2003-11-01 Toni Garcia <zo...@ir...> 1.0.alpha2 * Nuevo formato del ircd.conf ---------------------- diff included ---------------------- Index: ircd-ircdev/ChangeLog diff -u ircd-ircdev/ChangeLog:1.2 ircd-ircdev/ChangeLog:1.3 --- ircd-ircdev/ChangeLog:1.2 Tue Oct 7 11:52:17 2003 +++ ircd-ircdev/ChangeLog Sat Nov 1 07:26:45 2003 @@ -1,10 +1,12 @@ # # ChangeLog for ircd-ircdev # -# $Id: ChangeLog,v 1.2 2003/10/07 18:52:17 zolty Exp $ +# $Id: ChangeLog,v 1.3 2003/11/01 15:26:45 zolty Exp $ # # Insert new changes at beginning of the change list. # +2003-11-01 Toni Garcia <zo...@ir...> 1.0.alpha2 + * New format ircd.conf. 2003-10-07 Toni Garcia <zo...@ir...> 1.0.alpha1 * Cleanup in the 005. Index: ircd-ircdev/ChangeLog.es diff -u ircd-ircdev/ChangeLog.es:1.2 ircd-ircdev/ChangeLog.es:1.3 --- ircd-ircdev/ChangeLog.es:1.2 Tue Oct 7 11:52:17 2003 +++ ircd-ircdev/ChangeLog.es Sat Nov 1 07:26:45 2003 @@ -1,10 +1,12 @@ # # Log de Cambios para ircd-ircdev # -# $Id: ChangeLog.es,v 1.2 2003/10/07 18:52:17 zolty Exp $ +# $Id: ChangeLog.es,v 1.3 2003/11/01 15:26:45 zolty Exp $ # # Insertar los nuevos cambios al principio de esta lista de cambios. # +2003-11-01 Toni Garcia <zo...@ir...> 1.0.alpha2 + * Nuevo formato del ircd.conf 2003-10-07 Toni Garcia <zo...@ir...> 1.0.alpha1 * Limpieza en el 005. Index: ircd-ircdev/configure diff -u ircd-ircdev/configure:1.1.1.1 ircd-ircdev/configure:1.2 --- ircd-ircdev/configure:1.1.1.1 Mon Sep 8 03:34:26 2003 +++ ircd-ircdev/configure Sat Nov 1 07:26:45 2003 @@ -1,71 +1,325 @@ #! /bin/sh - # Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.13 -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# Generated by GNU Autoconf 2.57. # +# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi + +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + -# Defaults: -ac_help= +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +exec 6>&1 + +# +# Initializations. +# ac_default_prefix=/usr/local -# Any additions from configure.in: +ac_config_libobj_dir=. +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_unique_file="ircd/ircd.c" ac_default_prefix=$HOME -ac_help="$ac_help - --enable-poll Force poll to be used regardless of whether or not - it is a system call" -ac_help="$ac_help - --enable-debug Turn on debugging mode" -ac_help="$ac_help - --disable-asserts Disable assertion checking" -ac_help="$ac_help - --disable-symbols Disable debugging symbols (remove -g from CFLAGS)" -ac_help="$ac_help - --enable-profile Enable profiling support (add -pg to CFLAGS)" -ac_help="$ac_help - --enable-pedantic Enable pedantic warnings (add -pedantic to CFLAGS)" -ac_help="$ac_help - --enable-warnings Enable warnings (add -Wall to CFLAGS)" -ac_help="$ac_help - --disable-inlines Disable inlining for a few critical functions" -ac_help="$ac_help - --disable-devpoll Disable the /dev/poll-based engine" -ac_help="$ac_help - --disable-kqueue Disable the kqueue-based engine" -ac_help="$ac_help - --with-symlink=name Name to give the symlink; if name is "no," no - symlink will be created." -ac_help="$ac_help - --with-mode=mode Permissions (in octal) to give the binary" -ac_help="$ac_help - --with-owner=owner Specify owner of the installed binary" -ac_help="$ac_help - --with-group=group Specify group owner of the installed binary" -ac_help="$ac_help - --with-domain=domain Domain name to use in local statistics gathering" -ac_help="$ac_help - --with-chroot=dir Specify that the server will be operated under - a different root directory given by dir. See - doc/readme.chroot for more information." -ac_help="$ac_help - --with-dpath=dir Directory for all server data files" -ac_help="$ac_help - --with-cpath=file Set server configuration file" -ac_help="$ac_help - --with-lpath=file Set the debugging log file" -ac_help="$ac_help - --with-maxcon=maxcon Maximum number of connections server will accept" +# Factoring default headers for most tests. +ac_includes_default="\ +#include <stdio.h> +#if HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif +#if HAVE_SYS_STAT_H +# include <sys/stat.h> +#endif +#if STDC_HEADERS +# include <stdlib.h> +# include <stddef.h> +#else +# if HAVE_STDLIB_H +# include <stdlib.h> +# endif +#endif +#if HAVE_STRING_H +# if !STDC_HEADERS && HAVE_MEMORY_H +# include <memory.h> +# endif +# include <string.h> +#endif +#if HAVE_STRINGS_H +# include <strings.h> +#endif +#if HAVE_INTTYPES_H +# include <inttypes.h> +#else +# if HAVE_STDINT_H +# include <stdint.h> +# endif +#endif +#if HAVE_UNISTD_H +# include <unistd.h> +#endif" + +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP AWK SET_MAKE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S RMPROG SHPROG OSDEP_C ENGINE_C INSTALL_RULE SYMLINK IRCDMODE IRCDOWN IRCDGRP DPATH LIBOBJS LTLIBOBJS' +ac_subst_files='' # Initialize some variables set by options. +ac_init_help= +ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. -build=NONE -cache_file=./config.cache +cache_file=/dev/null exec_prefix=NONE -host=NONE no_create= -nonopt=NONE no_recursion= prefix=NONE program_prefix=NONE @@ -74,10 +328,15 @@ silent= site= srcdir= -target=NONE verbose= x_includes=NONE x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' @@ -91,17 +350,9 @@ infodir='${prefix}/info' mandir='${prefix}/man' -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} -# Maximum number of lines to put in a shell here document. -ac_max_here_lines=12 - ac_prev= for ac_option do - # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" @@ -109,59 +360,59 @@ continue fi - case "$ac_option" in - -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) ac_optarg= ;; - esac + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. - case "$ac_option" in + case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir="$ac_optarg" ;; + bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) - ac_prev=build ;; + ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$ac_optarg" ;; + build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file="$ac_optarg" ;; + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) - datadir="$ac_optarg" ;; + datadir=$ac_optarg ;; -disable-* | --disable-*) - ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) - ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac - eval "enable_${ac_feature}='$ac_optarg'" ;; + eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -170,95 +421,47 @@ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) - exec_prefix="$ac_optarg" ;; + exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; - -help | --help | --hel | --he) - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat << EOF -Usage: configure [options] [host] -Options: [defaults in brackets after descriptions] -Configuration: - --cache-file=FILE cache test results in FILE - --help print this message - --no-create do not create output files - --quiet, --silent do not print \`checking...' messages - --version print the version of autoconf that created configure -Directory and file names: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [same as prefix] - --bindir=DIR user executables in DIR [EPREFIX/bin] - --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] - --libexecdir=DIR program executables in DIR [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data in DIR - [PREFIX/share] - --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data in DIR - [PREFIX/com] - --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] - --libdir=DIR object code libraries in DIR [EPREFIX/lib] - --includedir=DIR C header files in DIR [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] - --infodir=DIR info documentation in DIR [PREFIX/info] - --mandir=DIR man documentation in DIR [PREFIX/man] - --srcdir=DIR find the sources in DIR [configure dir or ..] - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM - run sed PROGRAM on installed program names -EOF - cat << EOF -Host type: - --build=BUILD configure for building on BUILD [BUILD=HOST] - --host=HOST configure for HOST [guessed] - --target=TARGET configure for TARGET [TARGET=HOST] -Features and packages: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -EOF - if test -n "$ac_help"; then - echo "--enable and --with options recognized:$ac_help" - fi - exit 0 ;; + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; -host | --host | --hos | --ho) - ac_prev=host ;; + ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) - host="$ac_optarg" ;; + host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir="$ac_optarg" ;; + includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir="$ac_optarg" ;; + infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir="$ac_optarg" ;; + libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) - libexecdir="$ac_optarg" ;; + libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ @@ -267,19 +470,19 @@ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - localstatedir="$ac_optarg" ;; + localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir="$ac_optarg" ;; + mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) + | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ @@ -293,26 +496,26 @@ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir="$ac_optarg" ;; + oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix="$ac_optarg" ;; + prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix="$ac_optarg" ;; + program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix="$ac_optarg" ;; + program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ @@ -329,7 +532,7 @@ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name="$ac_optarg" ;; + program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) @@ -339,7 +542,7 @@ ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) - sbindir="$ac_optarg" ;; + sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ @@ -350,58 +553,57 @@ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) - sharedstatedir="$ac_optarg" ;; + sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) - site="$ac_optarg" ;; + site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir="$ac_optarg" ;; + srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir="$ac_optarg" ;; + sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target ;; + ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target="$ac_optarg" ;; + target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; - -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.13" - exit 0 ;; + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; -with-* | --with-*) - ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac - eval "with_${ac_package}='$ac_optarg'" ;; + eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) - ac_package=`echo $ac_option|sed -e 's/-*without-//'` + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=no" ;; + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. @@ -412,99 +614,110 @@ ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes="$ac_optarg" ;; + x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries="$ac_optarg" ;; + x_libraries=$ac_optarg ;; - -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + *) - if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then - echo "configure: warning: $ac_option: invalid host type" 1>&2 - fi - if test "x$nonopt" != xNONE; then - { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } - fi - nonopt="$ac_option" + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then - { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } -fi - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 6 checking for... messages and results -# 5 compiler messages saved in config.log -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } fi -exec 5>./config.log -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -" 1>&5 +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done -# Strip out --no-create and --no-recursion so they do not pile up. -# Also quote any args containing shell metacharacters. -ac_configure_args= -for ac_arg +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir do - case "$ac_arg" in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ac_configure_args="$ac_configure_args '$ac_arg'" ;; - *) ac_configure_args="$ac_configure_args $ac_arg" ;; + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; esac done -# NLS nuisances. -# Only set these to C if already set. These must not be set unconditionally -# because not all systems understand e.g. LANG=C (notably SCO). -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! -# Non-C LC_CTYPE values break the ctype check. -if test "${LANG+set}" = set; then LANG=C; export LANG; fi -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi -if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo > confdefs.h +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file=ircd/ircd.c # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. - ac_prog=$0 - ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. @@ -514,13 +727,458 @@ fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then - { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } else - { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } fi fi -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CC_set=${CC+set} +ac_env_CC_value=$CC +ac_cv_env_CC_set=${CC+set} +ac_cv_env_CC_value=$CC +ac_env_CFLAGS_set=${CFLAGS+set} +ac_env_CFLAGS_value=$CFLAGS +ac_cv_env_CFLAGS_set=${CFLAGS+set} +ac_cv_env_CFLAGS_value=$CFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_env_CPP_set=${CPP+set} +ac_env_CPP_value=$CPP +ac_cv_env_CPP_set=${CPP+set} +ac_cv_env_CPP_value=$CPP + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +_ACEOF + + cat <<_ACEOF +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_ACEOF + + cat <<\_ACEOF + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-poll Force poll to be used regardless of whether or not + it is a system call + --enable-debug Turn on debugging mode + --disable-asserts Disable assertion checking + --disable-symbols Disable debugging symbols (remove -g from CFLAGS) + --enable-profile Enable profiling support (add -pg to CFLAGS) + --enable-pedantic Enable pedantic warnings (add -pedantic to CFLAGS) + --enable-warnings Enable warnings (add -Wall to CFLAGS) + --disable-inlines Disable inlining for a few critical functions + --disable-devpoll Disable the /dev/poll-based engine + --disable-kqueue Disable the kqueue-based engine + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-symlink=name Name to give the symlink; if name is "no," no + symlink will be created. + --with-mode=mode Permissions (in octal) to give the binary + --with-owner=owner Specify owner of the installed binary + --with-group=group Specify group owner of the installed binary + --with-domain=domain Domain name to use in local statistics gathering + --with-chroot=dir Specify that the server will be operated under + a different root directory given by dir. See + doc/readme.chroot for more information. + --with-dpath=dir Directory for all server data files + --with-cpath=file Set server configuration file + --with-lpath=file Set the debugging log file + --with-maxcon=maxcon Maximum number of connections server will accept + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a + nonstandard directory <lib dir> + CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have + headers in a nonstandard directory <include dir> + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be +# absolute. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` +ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_srcdir/configure.gnu; then + echo + $SHELL $ac_srcdir/configure.gnu --help=recursive + elif test -f $ac_srcdir/configure; then + echo + $SHELL $ac_srcdir/configure --help=recursive + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd "$ac_popdir" + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF + +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 +Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit 0 +fi +exec 5>config.log +cat >&5 <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.57. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_sep= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then @@ -531,47 +1189,111 @@ fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then - echo "loading cache $cache_file" - . $cache_file + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi else - echo "creating cache $cache_file" - > $cache_file + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val="\$ac_cv_env_${ac_var}_value" + eval ac_new_val="\$ac_env_${ac_var}_value" + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } fi ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + + -ac_exeext= -ac_objext=o -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says gh...@ca.... - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ac_n= ac_c=' -' ac_t=' ' - else - ac_n=-n ac_c= ac_t= - fi -else - ac_n= ac_c='\c' ac_t= -fi -echo $ac_n "checking for installation prefix""... $ac_c" 1>&6 -echo "configure:573: checking for installation prefix" >&5 -if eval "test \"`echo '$''{'unet_cv_prefix'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 + +echo "$as_me:$LINENO: checking for installation prefix" >&5 +echo $ECHO_N "checking for installation prefix... $ECHO_C" >&6 +if test "${unet_cv_prefix+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else unet_cv_prefix=$HOME fi @@ -579,9 +1301,11 @@ if test x"$prefix" != xNONE; then unet_cv_prefix=$prefix fi -echo "$ac_t""$unet_cv_prefix" 1>&6 +echo "$as_me:$LINENO: result: $unet_cv_prefix" >&5 +echo "${ECHO_T}$unet_cv_prefix" >&6 ac_default_prefix=$unet_cv_prefix + ac_config_headers="$ac_config_headers config.h" @@ -596,251 +1320,713 @@ ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break fi done if test -z "$ac_aux_dir"; then - { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } -fi -ac_config_guess=$ac_aux_dir/config.guess -ac_config_sub=$ac_aux_dir/config.sub -ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. - + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Make sure we can run config.sub. -if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : -else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } -fi - -echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:616: checking host system type" >&5 - -host_alias=$host -case "$host_alias" in -NONE) - case $nonopt in - NONE) - if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : - else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } - fi ;; - *) host_alias=$nonopt ;; - esac ;; -esac +$ac_config_sub sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6 +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_build_alias=$build_alias +test -z "$ac_cv_build_alias" && + ac_cv_build_alias=`$ac_config_guess` +test -z "$ac_cv_build_alias" && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6 +build=$ac_cv_build +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6 +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_host_alias=$host_alias +test -z "$ac_cv_host_alias" && + ac_cv_host_alias=$ac_cv_build_alias +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6 +host=$ac_cv_host +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` -host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -echo "$ac_t""$host" 1>&6 -# Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:640: checking for $ac_word" >&5 -if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 +ac_ext=c +ac_cpp='$CPP $CPPFLAGS' +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu +if test -n "$ac_tool_prefix"; then + # Extract the fi... [truncated message content] |
From: Toni G. <zo...@us...> - 2003-10-07 18:52:39
|
CVSROOT : /cvsroot/irc-dev Module : ircd-ircdev Commit time: 2003-10-07 18:52:28 UTC Modified files: ChangeLog ChangeLog.es doc/en/ircd.conf.sample include/handlers.h include/hash.h include/ircd_features.h include/list.h include/msg.h include/numeric.h include/patchlevel.h include/struct.h include/supported.h ircd/Makefile.in ircd/hash.c ircd/ircd_features.c ircd/parse.c ircd/s_err.c ircd/s_misc.c ircd/s_user.c Added files: include/watch.h ircd/m_watch.c ircd/watch.c Log message: Author: zoltan <zoltan.irc-dev.net> Log message: Version 1.0.alpha1 * Limpieza en el 005. * Implementación del comando WATCH. * Raw del "No such Gline" cambiado del 512 al 521 por compatibilidad WATCH. ---------------------- diff included ---------------------- Index: ircd-ircdev/ChangeLog diff -u ircd-ircdev/ChangeLog:1.1.1.1 ircd-ircdev/ChangeLog:1.2 --- ircd-ircdev/ChangeLog:1.1.1.1 Mon Sep 8 03:34:25 2003 +++ ircd-ircdev/ChangeLog Tue Oct 7 11:52:17 2003 @@ -1,10 +1,16 @@ # # ChangeLog for ircd-ircdev # -# $Id: ChangeLog,v 1.1.1.1 2003/09/08 10:34:25 zolty Exp $ +# $Id: ChangeLog,v 1.2 2003/10/07 18:52:17 zolty Exp $ # # Insert new changes at beginning of the change list. # + +2003-10-07 Toni Garcia <zo...@ir...> 1.0.alpha1 + * Cleanup in the 005. + * Implementation of WATCH command. + * Raw of "No such Gline" changed from the 512 to the 521 by + WATCH compatibility. 2003-08-01 Toni Garcia <zo...@ir...> 1.0.alpha0 * Start IRC-Dev's irc daemon :). Index: ircd-ircdev/ChangeLog.es diff -u ircd-ircdev/ChangeLog.es:1.1.1.1 ircd-ircdev/ChangeLog.es:1.2 --- ircd-ircdev/ChangeLog.es:1.1.1.1 Mon Sep 8 03:34:25 2003 +++ ircd-ircdev/ChangeLog.es Tue Oct 7 11:52:17 2003 @@ -1,10 +1,16 @@ # # Log de Cambios para ircd-ircdev # -# $Id: ChangeLog.es,v 1.1.1.1 2003/09/08 10:34:25 zolty Exp $ +# $Id: ChangeLog.es,v 1.2 2003/10/07 18:52:17 zolty Exp $ # # Insertar los nuevos cambios al principio de esta lista de cambios. # + +2003-10-07 Toni Garcia <zo...@ir...> 1.0.alpha1 + * Limpieza en el 005. + * Implementación del comando WATCH. + * Raw del "No such Gline" cambiado del 512 al 521 por + compatibilidad WATCH. 2003-08-01 Toni Garcia <zo...@ir...> 1.0.alpha0 * Comienzo del IRCD de IRC-Dev :). Index: ircd-ircdev/doc/en/ircd.conf.sample diff -u ircd-ircdev/doc/en/ircd.conf.sample:1.1.1.1 ircd-ircdev/doc/en/ircd.conf.sample:1.2 --- ircd-ircdev/doc/en/ircd.conf.sample:1.1.1.1 Mon Sep 8 03:34:27 2003 +++ ircd-ircdev/doc/en/ircd.conf.sample Tue Oct 7 11:52:17 2003 @@ -465,6 +465,7 @@ #F:AVBANLEN:40 #F:MAXBANS:30 #F:MAXSILES:15 +#F:MAXWATCHS:128 #F:HANGONGOODLINK:300 #F:HANGONRETRYDELAY:10 #F:CONNECTTIMEOUT:90 Index: ircd-ircdev/include/handlers.h diff -u ircd-ircdev/include/handlers.h:1.1.1.1 ircd-ircdev/include/handlers.h:1.2 --- ircd-ircdev/include/handlers.h:1.1.1.1 Mon Sep 8 03:34:27 2003 +++ ircd-ircdev/include/handlers.h Tue Oct 7 11:52:17 2003 @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: handlers.h,v 1.1.1.1 2003/09/08 10:34:27 zolty Exp $ + * $Id: handlers.h,v 1.2 2003/10/07 18:52:17 zolty Exp $ */ #ifndef INCLUDED_handlers_h #define INCLUDED_handlers_h @@ -83,7 +83,9 @@ struct Client; - +/* + * User commands + */ extern int m_admin(struct Client*, struct Client*, int, char*[]); extern int m_away(struct Client*, struct Client*, int, char*[]); extern int m_cnotice(struct Client*, struct Client*, int, char*[]); @@ -112,7 +114,6 @@ extern int m_notice(struct Client*, struct Client*, int, char*[]); extern int m_oper(struct Client*, struct Client*, int, char*[]); extern int m_part(struct Client*, struct Client*, int, char*[]); -extern int mr_pass(struct Client*, struct Client*, int, char*[]); extern int m_ping(struct Client*, struct Client*, int, char*[]); extern int m_pong(struct Client*, struct Client*, int, char*[]); extern int m_private(struct Client*, struct Client*, int, char*[]); @@ -133,9 +134,14 @@ extern int m_version(struct Client*, struct Client*, int, char*[]); extern int m_wallchops(struct Client*, struct Client*, int, char*[]); extern int m_wallvoices(struct Client*, struct Client*, int, char*[]); +extern int m_watch(struct Client*, struct Client*, int, char*[]); extern int m_who(struct Client*, struct Client*, int, char*[]); extern int m_whois(struct Client*, struct Client*, int, char*[]); extern int m_whowas(struct Client*, struct Client*, int, char*[]); + +/* + * Privileged commands (Admins & Opers & Helpers) + */ extern int mo_admin(struct Client*, struct Client*, int, char*[]); extern int mo_asll(struct Client*, struct Client*, int, char*[]); extern int mo_clearmode(struct Client*, struct Client*, int, char*[]); @@ -166,10 +172,18 @@ extern int mo_version(struct Client*, struct Client*, int, char*[]); extern int mo_wallops(struct Client*, struct Client*, int, char*[]); extern int mo_wallusers(struct Client*, struct Client*, int, char*[]); + +/* + * Non-registered commands + */ extern int mr_error(struct Client*, struct Client*, int, char*[]); -extern int mr_error(struct Client*, struct Client*, int, char*[]); +extern int mr_pass(struct Client*, struct Client*, int, char*[]); extern int mr_pong(struct Client*, struct Client*, int, char*[]); extern int mr_server(struct Client*, struct Client*, int, char*[]); + +/* + * Server commands + */ extern int ms_account(struct Client*, struct Client*, int, char*[]); extern int ms_admin(struct Client*, struct Client*, int, char*[]); extern int ms_asll(struct Client*, struct Client*, int, char*[]); Index: ircd-ircdev/include/hash.h diff -u ircd-ircdev/include/hash.h:1.1.1.1 ircd-ircdev/include/hash.h:1.2 --- ircd-ircdev/include/hash.h:1.1.1.1 Mon Sep 8 03:34:27 2003 +++ ircd-ircdev/include/hash.h Tue Oct 7 11:52:17 2003 @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: hash.h,v 1.1.1.1 2003/09/08 10:34:27 zolty Exp $ + * $Id: hash.h,v 1.2 2003/10/07 18:52:17 zolty Exp $ */ #ifndef INCLUDED_hash_h @@ -24,6 +24,7 @@ struct Client; struct Channel; +struct Watch; /* * general defines @@ -49,6 +50,7 @@ #define SeekClient(name) hSeekClient((name), ~0) #define SeekUser(name) hSeekClient((name), (STAT_USER)) #define SeekServer(name) hSeekClient((name), (STAT_ME | STAT_SERVER)) +#define SeekWatch(name) hSeekWatch((name)) /* Safer macros with sanity check on name, WARNING: these are _macros_, no side effects allowed on <name> ! */ @@ -56,6 +58,7 @@ #define FindClient(name) (BadPtr((name)) ? 0 : SeekClient(name)) #define FindUser(name) (BadPtr((name)) ? 0 : SeekUser(name)) #define FindServer(name) (BadPtr((name)) ? 0 : SeekServer(name)) +#define FindWatch(name) (BadPtr((name)) ? 0 : SeekWatch(name)) /* * Proto types @@ -64,11 +67,14 @@ extern void init_hash(void); /* Call me on startup */ extern int hAddClient(struct Client *cptr); extern int hAddChannel(struct Channel *chptr); +extern int hAddWatch(struct Watch *wptr); extern int hRemClient(struct Client *cptr); extern int hChangeClient(struct Client *cptr, const char *newname); extern int hRemChannel(struct Channel *chptr); +extern int hRemWatch(struct Watch *wptr); extern struct Client *hSeekClient(const char *name, int TMask); extern struct Channel *hSeekChannel(const char *name); +extern struct Watch *hSeekWatch(const char *name); extern int m_hash(struct Client *cptr, struct Client *sptr, int parc, char *parv[]); Index: ircd-ircdev/include/ircd_features.h diff -u ircd-ircdev/include/ircd_features.h:1.1.1.1 ircd-ircdev/include/ircd_features.h:1.2 --- ircd-ircdev/include/ircd_features.h:1.1.1.1 Mon Sep 8 03:34:27 2003 +++ ircd-ircdev/include/ircd_features.h Tue Oct 7 11:52:17 2003 @@ -18,7 +18,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: ircd_features.h,v 1.1.1.1 2003/09/08 10:34:27 zolty Exp $ + * $Id: ircd_features.h,v 1.2 2003/10/07 18:52:17 zolty Exp $ */ struct Client; @@ -56,6 +56,7 @@ FEAT_AVBANLEN, FEAT_MAXBANS, FEAT_MAXSILES, + FEAT_MAXWATCHS, FEAT_HANGONGOODLINK, FEAT_HANGONRETRYDELAY, FEAT_CONNECTTIMEOUT, Index: ircd-ircdev/include/list.h diff -u ircd-ircdev/include/list.h:1.1.1.1 ircd-ircdev/include/list.h:1.2 --- ircd-ircdev/include/list.h:1.1.1.1 Mon Sep 8 03:34:27 2003 +++ ircd-ircdev/include/list.h Tue Oct 7 11:52:17 2003 @@ -1,7 +1,7 @@ /* * list.h * - * $Id: list.h,v 1.1.1.1 2003/09/08 10:34:27 zolty Exp $ + * $Id: list.h,v 1.2 2003/10/07 18:52:17 zolty Exp $ */ #ifndef INCLUDED_list_h #define INCLUDED_list_h @@ -14,6 +14,7 @@ struct Connection; struct Channel; struct ConfItem; +struct Watch; /* * Structures @@ -25,6 +26,7 @@ struct Client *cptr; struct Channel *chptr; struct ConfItem *aconf; + struct Watch *wptr; char *cp; struct { char *banstr; Index: ircd-ircdev/include/msg.h diff -u ircd-ircdev/include/msg.h:1.1.1.1 ircd-ircdev/include/msg.h:1.2 --- ircd-ircdev/include/msg.h:1.1.1.1 Mon Sep 8 03:34:27 2003 +++ ircd-ircdev/include/msg.h Tue Oct 7 11:52:18 2003 @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: msg.h,v 1.1.1.1 2003/09/08 10:34:27 zolty Exp $ + * $Id: msg.h,v 1.2 2003/10/07 18:52:18 zolty Exp $ */ #ifndef INCLUDED_msg_h #define INCLUDED_msg_h @@ -352,6 +352,9 @@ #define MSG_PRIVS "PRIVS" /* PRIV */ #define TOK_PRIVS "PRIVS" + +#define MSG_WATCH "WATCH" /* WATC */ +#define TOK_WATCH "WATCH" /* * Constants Index: ircd-ircdev/include/numeric.h diff -u ircd-ircdev/include/numeric.h:1.1.1.1 ircd-ircdev/include/numeric.h:1.2 --- ircd-ircdev/include/numeric.h:1.1.1.1 Mon Sep 8 03:34:27 2003 +++ ircd-ircdev/include/numeric.h Tue Oct 7 11:52:18 2003 @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: numeric.h,v 1.1.1.1 2003/09/08 10:34:27 zolty Exp $ + * $Id: numeric.h,v 1.2 2003/10/07 18:52:18 zolty Exp $ */ #ifndef INCLUDED_numeric_h #define INCLUDED_numeric_h @@ -427,8 +427,8 @@ #define ERR_SILELISTFULL 511 /* Undernet extension */ /* ERR_NOTIFYFULL 512 aircd */ -/* ERR_TOOMANYWATCH 512 Numeric List: Dalnet */ -#define ERR_NOSUCHGLINE 512 /* Undernet extension */ +#define ERR_TOOMANYWATCH 512 /* Dalnet extension */ +/* ERR_NOSUCHGLINE 512 Undernet extension (old) */ #define ERR_BADPING 513 /* Undernet extension */ /* ERR_NEEDPONG 512 Numeric List: Dalnet */ #define ERR_NOSUCHJUPE 514 /* Undernet extension - jupe -Kev */ @@ -443,22 +443,25 @@ /* ERR_OPERONLY 520 unreal */ #define ERR_MASKTOOWIDE 520 /* Undernet extension -Kev */ /* ERR_WHOTRUNC 520 austnet */ +#define ERR_NOSUCHGLINE 521 /* Undernet extension (new) */ /* ERR_LISTSYNTAX 521 dalnet ERR_WHOSYNTAX 522 dalnet ERR_WHOLIMEXCEED 523 dalnet */ #define ERR_QUARANTINED 524 /* Undernet extension -Vampire */ -#define ERR_LASTERROR 525 -/* RPL_LOGON 600 dalnet,unreal - RPL_LOGOFF 601 dalnet,unreal - RPL_WATCHOFF 602 dalnet,unreal - RPL_WATCHSTAT 603 dalnet,unreal - RPL_NOWON 604 dalnet,unreal - RPL_NOWOFF 605 dalnet,unreal - RPL_WATCHLIST 606 dalnet,unreal - RPL_ENDOFWATCHLIST 607 dalnet,unreal +#define RPL_LOGON 600 /* Dalnet extension */ +#define RPL_LOGOFF 601 /* Dalnet extension */ +#define RPL_WATCHOFF 602 /* Dalnet extension */ +#define RPL_WATCHSTAT 603 /* Dalnet extension */ +#define RPL_NOWON 604 /* Dalnet extension */ +#define RPL_NOWOFF 605 /* Dalnet extension */ +#define RPL_WATCHLIST 606 /* Dalnet extension */ +#define RPL_ENDOFWATCHLIST 607 /* Dalnet extension */ +#define ERR_LASTERROR 608 + +/* RPL_MAPMORE 610 unreal RPL_MAPMORE 615 PTlink Index: ircd-ircdev/include/patchlevel.h diff -u ircd-ircdev/include/patchlevel.h:1.1.1.1 ircd-ircdev/include/patchlevel.h:1.2 --- ircd-ircdev/include/patchlevel.h:1.1.1.1 Mon Sep 8 03:34:27 2003 +++ ircd-ircdev/include/patchlevel.h Tue Oct 7 11:52:18 2003 @@ -15,10 +15,10 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: patchlevel.h,v 1.1.1.1 2003/09/08 10:34:27 zolty Exp $ + * $Id: patchlevel.h,v 1.2 2003/10/07 18:52:18 zolty Exp $ * */ -#define PATCHLEVEL ".alpha0" +#define PATCHLEVEL ".alpha1" #define RELEASE "1.0" Index: ircd-ircdev/include/struct.h diff -u ircd-ircdev/include/struct.h:1.1.1.1 ircd-ircdev/include/struct.h:1.2 --- ircd-ircdev/include/struct.h:1.1.1.1 Mon Sep 8 03:34:28 2003 +++ ircd-ircdev/include/struct.h Tue Oct 7 11:52:18 2003 @@ -18,7 +18,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: struct.h,v 1.1.1.1 2003/09/08 10:34:28 zolty Exp $ + * $Id: struct.h,v 1.2 2003/10/07 18:52:18 zolty Exp $ */ #ifndef INCLUDED_struct_h #define INCLUDED_struct_h @@ -67,11 +67,13 @@ struct Membership* channel; /* chain of channel pointer blocks */ struct SLink* invited; /* chain of invite pointer blocks */ struct SLink* silence; /* chain of silence pointer blocks */ + struct SLink* watch; /* chain of watch pointer blocks */ char* away; /* pointer to away message */ time_t last; unsigned int refcnt; /* Number of times this block is referenced */ unsigned int joined; /* number of channels joined */ unsigned int invites; /* Number of channels we've been invited to */ + unsigned int watches; /* Number of entrances in the watch list */ char username[USERLEN + 1]; char host[HOSTLEN + 1]; char realhost[HOSTLEN + 1]; Index: ircd-ircdev/include/supported.h diff -u ircd-ircdev/include/supported.h:1.1.1.1 ircd-ircdev/include/supported.h:1.2 --- ircd-ircdev/include/supported.h:1.1.1.1 Mon Sep 8 03:34:28 2003 +++ ircd-ircdev/include/supported.h Tue Oct 7 11:52:18 2003 @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: supported.h,v 1.1.1.1 2003/09/08 10:34:28 zolty Exp $ + * $Id: supported.h,v 1.2 2003/10/07 18:52:18 zolty Exp $ * * Description: This file has the featureset that ircu announces on connecting * a client. It's in this .h because it's likely to be appended @@ -32,34 +32,49 @@ * 'Features' supported by this ircd */ #define FEATURES1 \ - "WHOX"\ - " WALLCHOPS"\ - " WALLVOICES"\ - " USERIP"\ - " CPRIVMSG"\ - " CNOTICE"\ - " SILENCE=%i" \ + "AWAYLEN=%i"\ + " CHANNELLEN=%i"\ + " NICKLEN=%i"\ + " TOPICLEN=%i" + +#define FEATURES2 \ + "CHANMODES=%s" \ + " CHANTYPES=%s" \ + " PREFIX=%s" + +#define FEATURES3 \ + "MAXCHANNELS=%i" \ + " MAXBANS=%i" \ + " MAXTARGETS=%i" \ " MODES=%i" \ - " MAXCHANNELS=%i" \ - " MAXBANS=%i" \ - " NICKLEN=%i" \ - " TOPICLEN=%i" \ - " AWAYLEN=%i" \ - " KICKLEN=%i" - -#define FEATURES2 "CHANTYPES=%s" \ - " PREFIX=%s" \ - " CHANMODES=%s" \ - " CASEMAPPING=%s" \ - " NETWORK=%s" - -#define FEATURESVALUES1 feature_int(FEAT_MAXSILES), MAXMODEPARAMS, \ - feature_int(FEAT_MAXCHANNELSPERUSER), \ - feature_int(FEAT_MAXBANS), NICKLEN, TOPICLEN, \ - AWAYLEN, TOPICLEN + " SILENCE=%i" \ + " WATCH=%i" + +#define FEATURES4 \ + "CNOTICE" \ + " CPRIVMSG" \ + " MAP" \ + " USERIP" \ + " WALLCHOPS" \ + " WALLVOICES" \ + " WHOX" + +#define FEATURES5 "CHARMAPPING=%s" \ + " NETWORK=%s" \ + " FNC" \ + " SAFELIST" + + +#define FEATURESVALUES1 AWAYLEN, CHANNELLEN, NICKLEN, TOPICLEN + +#define FEATURESVALUES2 "b,k,l,imnpstr", "#&", "(ov)@+" + +#define FEATURESVALUES3 feature_int(FEAT_MAXCHANNELSPERUSER), feature_int(FEAT_MAXBANS), \ + MAXTARGETS, MAXMODEPARAMS, feature_int(FEAT_MAXSILES), \ + feature_int(FEAT_MAXWATCHS) + +#define FEATURESVALUES5 "rfc1459", feature_str(FEAT_NETWORK) -#define FEATURESVALUES2 "#&", "(ov)@+", "b,k,l,imnpstr", "rfc1459", \ - feature_str(FEAT_NETWORK) #endif /* INCLUDED_supported_h */ Index: ircd-ircdev/include/watch.h diff -u /dev/null ircd-ircdev/include/watch.h:1.1 --- /dev/null Tue Oct 7 11:52:28 2003 +++ ircd-ircdev/include/watch.h Tue Oct 7 11:52:18 2003 @@ -0,0 +1,66 @@ +/* + * IRC - Internet Relay Chat, include/watch.h + * Copyright (C) 2003 IRC-Dev - zoltan <zo...@ir...> + * + * 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, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * $Id: watch.h,v 1.1 2003/10/07 18:52:18 zolty Exp $ + */ +#ifndef INCLUDED_watch_h +#define INCLUDED_watch_h +#ifndef INCLUDED_config_h +#include "config.h" +#endif +#ifndef INCLUDED_sys_types_h +#include <sys/types.h> +#define INCLUDED_sys_types_h +#endif + + +struct Client; + +/* + * Structures + */ + +struct Watch { + struct Watch *wt_next; + struct SLink *wt_watch; /* Pointer to watch list */ + char *wt_nick; /* Nick */ + time_t wt_lasttime; /* last time status change */ +}; + + +/* + * Macros + */ + +#define wt_next(wt) ((wt)->wt_next) +#define wt_watch(wt) ((wt)->wt_watch) +#define wt_nick(wt) ((wt)->wt_nick) +#define wt_lasttime(wt) ((wt)->wt_lasttime) + + +/* + * Proto types + */ +extern void check_status_watch(struct Client *sptr, int raw); +extern void show_status_watch(struct Client *sptr, char *nick, int raw1, int raw2); +extern int add_nick_watch(struct Client *sptr, char *nick); +extern int del_nick_watch(struct Client *sptr, char *nick); +extern int del_list_watch(struct Client *sptr); +extern int watch_memory_count(size_t *wt_size); + +#endif /* INCLUDED_watch_h */ Index: ircd-ircdev/ircd/Makefile.in diff -u ircd-ircdev/ircd/Makefile.in:1.1.1.1 ircd-ircdev/ircd/Makefile.in:1.2 --- ircd-ircdev/ircd/Makefile.in:1.1.1.1 Mon Sep 8 03:34:28 2003 +++ ircd-ircdev/ircd/Makefile.in Tue Oct 7 11:52:18 2003 @@ -169,6 +169,7 @@ m_wallvoices.c \ m_wallops.c \ m_wallusers.c \ + m_watch.c \ m_who.c \ m_whois.c \ m_whowas.c \ @@ -196,6 +197,7 @@ support.c \ uping.c \ userload.c \ + watch.c \ whocmds.c \ whowas.c @@ -345,917 +347,960 @@ # DO NOT DELETE THIS LINE -- make depend depends on it. -IPcheck.o: IPcheck.c ../config.h ../include/IPcheck.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ - ../include/struct.h ../include/msg.h ../include/numnicks.h \ - ../include/ircd_alloc.h ../include/s_debug.h ../include/s_user.h \ - ../include/send.h +IPcheck.o: IPcheck.c ../config.h ../include/IPcheck.h \ + ../include/client.h ../include/ircd_defs.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/ircd.h ../include/struct.h ../include/msg.h \ + ../include/numnicks.h ../include/ircd_alloc.h ../include/s_debug.h \ + ../include/s_user.h ../include/send.h channel.o: channel.c ../config.h ../include/channel.h \ - ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ - ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ - ../include/hash.h ../include/ircd.h ../include/struct.h \ - ../include/ircd_alloc.h ../include/ircd_chattr.h \ - ../include/ircd_features.h ../include/ircd_log.h \ - ../include/ircd_reply.h ../include/ircd_snprintf.h \ - ../include/ircd_string.h ../include/list.h ../include/match.h \ - ../include/msg.h ../include/numeric.h ../include/numnicks.h \ - ../include/querycmds.h ../include/s_bsd.h ../include/s_conf.h \ - ../include/s_debug.h ../include/s_misc.h ../include/s_user.h \ - ../include/send.h ../include/support.h ../include/sys.h \ - ../include/whowas.h + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_alloc.h ../include/ircd_chattr.h \ + ../include/ircd_features.h ../include/ircd_log.h \ + ../include/ircd_reply.h ../include/ircd_snprintf.h \ + ../include/ircd_string.h ../include/list.h ../include/match.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/querycmds.h ../include/s_bsd.h ../include/s_conf.h \ + ../include/s_debug.h ../include/s_misc.h ../include/s_user.h \ + ../include/send.h ../include/support.h ../include/sys.h \ + ../include/whowas.h class.o: class.c ../config.h ../include/class.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ - ../include/struct.h ../include/ircd_alloc.h ../include/ircd_features.h \ - ../include/ircd_reply.h ../include/list.h ../include/numeric.h \ - ../include/s_conf.h ../include/s_debug.h ../include/send.h -client.o: client.c ../config.h ../include/client.h ../include/ircd_defs.h \ - ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ - ../include/ircd_handler.h ../include/class.h ../include/ircd.h \ - ../include/struct.h ../include/ircd_features.h ../include/ircd_reply.h \ - ../include/list.h ../include/numeric.h ../include/s_conf.h \ - ../include/s_debug.h ../include/send.h + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_alloc.h \ + ../include/ircd_features.h ../include/ircd_reply.h ../include/list.h \ + ../include/numeric.h ../include/s_conf.h ../include/s_debug.h \ + ../include/send.h +client.o: client.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/class.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_features.h \ + ../include/ircd_reply.h ../include/list.h ../include/numeric.h \ + ../include/s_conf.h ../include/s_debug.h ../include/send.h crule.o: crule.c ../config.h ../include/crule.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ - ../include/struct.h ../include/ircd_alloc.h ../include/ircd_chattr.h \ - ../include/ircd_string.h ../include/match.h ../include/s_bsd.h \ - ../include/s_debug.h + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_alloc.h ../include/ircd_chattr.h \ + ../include/ircd_string.h ../include/match.h ../include/s_bsd.h \ + ../include/s_debug.h dbuf.o: dbuf.c ../config.h ../include/dbuf.h ../include/ircd_alloc.h \ - ../include/ircd_chattr.h ../include/ircd_features.h ../include/send.h \ - ../include/sys.h + ../include/ircd_chattr.h ../include/ircd_features.h ../include/send.h \ + ../include/sys.h fda.o: fda.c ../config.h fileio.o: fileio.c ../config.h ../include/fileio.h \ - ../include/ircd_alloc.h + ../include/ircd_alloc.h gline.o: gline.c ../config.h ../include/gline.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ - ../include/struct.h ../include/ircd_alloc.h ../include/ircd_features.h \ - ../include/ircd_log.h ../include/ircd_reply.h \ - ../include/ircd_snprintf.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/match.h ../include/numeric.h \ - ../include/s_bsd.h ../include/s_debug.h ../include/s_misc.h \ - ../include/s_stats.h ../include/send.h ../include/support.h \ - ../include/msg.h ../include/numnicks.h ../include/sys.h \ - ../include/whocmds.h + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_alloc.h \ + ../include/ircd_features.h ../include/ircd_log.h \ + ../include/ircd_reply.h ../include/ircd_snprintf.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/match.h \ + ../include/numeric.h ../include/s_bsd.h ../include/s_debug.h \ + ../include/s_misc.h ../include/s_stats.h ../include/send.h \ + ../include/support.h ../include/msg.h ../include/numnicks.h \ + ../include/sys.h ../include/whocmds.h hash.o: hash.c ../config.h ../include/hash.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/channel.h \ - ../include/ircd_chattr.h ../include/ircd_string.h ../include/ircd.h \ - ../include/struct.h ../include/msg.h ../include/send.h \ - ../include/support.h ../include/sys.h + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/channel.h ../include/ircd_chattr.h \ + ../include/ircd_string.h ../include/ircd.h ../include/struct.h \ + ../include/msg.h ../include/send.h ../include/support.h \ + ../include/sys.h ../include/watch.h ircd.o: ircd.c ../config.h ../include/ircd.h ../include/struct.h \ - ../include/ircd_defs.h ../include/IPcheck.h ../include/class.h \ - ../include/client.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/crule.h \ - ../include/hash.h ../include/ircd_alloc.h ../include/ircd_features.h \ - ../include/ircd_log.h ../include/ircd_reply.h ../include/ircd_signal.h \ - ../include/ircd_string.h ../include/ircd_chattr.h ../include/jupe.h \ - ../include/list.h ../include/match.h ../include/motd.h ../include/msg.h \ - ../include/numeric.h ../include/numnicks.h ../include/opercmds.h \ - ../include/parse.h ../include/res.h ../include/s_auth.h \ - ../include/s_bsd.h ../include/s_conf.h ../include/s_debug.h \ - ../include/s_misc.h ../include/s_stats.h ../include/send.h \ - ../include/sys.h ../include/uping.h ../include/userload.h \ - ../include/version.h ../include/whowas.h + ../include/ircd_defs.h ../include/IPcheck.h ../include/class.h \ + ../include/client.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/crule.h \ + ../include/hash.h ../include/ircd_alloc.h ../include/ircd_features.h \ + ../include/ircd_log.h ../include/ircd_reply.h \ + ../include/ircd_signal.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/jupe.h ../include/list.h \ + ../include/match.h ../include/motd.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/opercmds.h \ + ../include/parse.h ../include/res.h ../include/s_auth.h \ + ../include/s_bsd.h ../include/s_conf.h ../include/s_debug.h \ + ../include/s_misc.h ../include/s_stats.h ../include/send.h \ + ../include/sys.h ../include/uping.h ../include/userload.h \ + ../include/version.h ../include/whowas.h ircd_alloc.o: ircd_alloc.c ../config.h ../include/ircd_alloc.h \ - ../include/ircd_string.h ../include/ircd_chattr.h ../include/s_debug.h \ - ../include/ircd_defs.h + ../include/ircd_string.h ../include/ircd_chattr.h \ + ../include/s_debug.h ../include/ircd_defs.h ircd_events.o: ircd_events.c ../config.h ../include/ircd_events.h \ - ../include/ircd.h ../include/struct.h ../include/ircd_defs.h \ - ../include/ircd_alloc.h ../include/ircd_log.h \ - ../include/ircd_snprintf.h ../include/s_debug.h -ircd_features.o: ircd_features.c ../config.h ../include/ircd_features.h \ - ../include/channel.h ../include/ircd_defs.h ../include/class.h \ - ../include/client.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ - ../include/ircd.h ../include/struct.h ../include/ircd_alloc.h \ - ../include/ircd_log.h ../include/ircd_reply.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/match.h ../include/motd.h \ - ../include/msg.h ../include/numeric.h ../include/numnicks.h \ - ../include/random.h ../include/s_bsd.h ../include/s_debug.h \ - ../include/s_misc.h ../include/s_stats.h ../include/send.h \ - ../include/support.h ../include/sys.h ../include/whowas.h + ../include/ircd.h ../include/struct.h ../include/ircd_defs.h \ + ../include/ircd_alloc.h ../include/ircd_log.h \ + ../include/ircd_snprintf.h ../include/s_debug.h +ircd_features.o: ircd_features.c ../config.h \ + ../include/ircd_features.h ../include/channel.h \ + ../include/ircd_defs.h ../include/class.h ../include/client.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/hash.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_alloc.h ../include/ircd_log.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/match.h ../include/motd.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/random.h ../include/s_bsd.h ../include/s_debug.h \ + ../include/s_misc.h ../include/s_stats.h ../include/send.h \ + ../include/support.h ../include/sys.h ../include/whowas.h ircd_log.o: ircd_log.c ../config.h ../include/ircd_log.h \ - ../include/client.h ../include/ircd_defs.h ../include/dbuf.h \ - ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ - ../include/ircd_alloc.h ../include/ircd_reply.h \ - ../include/ircd_snprintf.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/ircd.h ../include/struct.h \ - ../include/numeric.h ../include/s_debug.h ../include/send.h + ../include/client.h ../include/ircd_defs.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/ircd_alloc.h ../include/ircd_reply.h \ + ../include/ircd_snprintf.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/ircd.h ../include/struct.h \ + ../include/numeric.h ../include/s_debug.h ../include/send.h ircd_relay.o: ircd_relay.c ../config.h ../include/ircd_relay.h \ - ../include/channel.h ../include/ircd_defs.h ../include/client.h \ - ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ - ../include/ircd_handler.h ../include/hash.h ../include/ircd.h \ - ../include/struct.h ../include/ircd_chattr.h ../include/ircd_reply.h \ - ../include/ircd_string.h ../include/match.h ../include/msg.h \ - ../include/numeric.h ../include/numnicks.h ../include/s_debug.h \ - ../include/s_misc.h ../include/s_user.h ../include/send.h + ../include/channel.h ../include/ircd_defs.h ../include/client.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/hash.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_chattr.h \ + ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/match.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_debug.h \ + ../include/s_misc.h ../include/s_user.h ../include/send.h ircd_reply.o: ircd_reply.c ../config.h ../include/ircd_reply.h \ - ../include/client.h ../include/ircd_defs.h ../include/dbuf.h \ - ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ - ../include/ircd.h ../include/struct.h ../include/ircd_snprintf.h \ - ../include/msg.h ../include/numeric.h ../include/s_conf.h \ - ../include/s_debug.h ../include/send.h + ../include/client.h ../include/ircd_defs.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_snprintf.h \ + ../include/msg.h ../include/numeric.h ../include/s_conf.h \ + ../include/s_debug.h ../include/send.h ircd_signal.o: ircd_signal.c ../config.h ../include/ircd.h \ - ../include/struct.h ../include/ircd_defs.h ../include/ircd_events.h \ - ../include/ircd_signal.h ../include/s_conf.h + ../include/struct.h ../include/ircd_defs.h ../include/ircd_events.h \ + ../include/ircd_signal.h ../include/s_conf.h ircd_snprintf.o: ircd_snprintf.c ../config.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/channel.h \ - ../include/ircd_snprintf.h ../include/struct.h + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/channel.h ../include/ircd_snprintf.h ../include/struct.h ircd_string.o: ircd_string.c ../config.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/ircd_defs.h ../include/ircd_log.h \ - chattr.tab.c + ../include/ircd_chattr.h ../include/ircd_defs.h ../include/ircd_log.h \ + chattr.tab.c ircd_xopen.o: ircd_xopen.c ../config.h ../include/ircd_xopen.h jupe.o: jupe.c ../config.h ../include/jupe.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ - ../include/ircd.h ../include/struct.h ../include/ircd_alloc.h \ - ../include/ircd_features.h ../include/ircd_log.h \ - ../include/ircd_reply.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/match.h ../include/msg.h \ - ../include/numeric.h ../include/numnicks.h ../include/s_bsd.h \ - ../include/s_misc.h ../include/send.h ../include/support.h \ - ../include/sys.h + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_alloc.h \ + ../include/ircd_features.h ../include/ircd_log.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/match.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_bsd.h \ + ../include/s_misc.h ../include/send.h ../include/support.h \ + ../include/sys.h list.o: list.c ../config.h ../include/list.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ - ../include/struct.h ../include/ircd_alloc.h ../include/ircd_reply.h \ - ../include/ircd_string.h ../include/ircd_chattr.h ../include/listener.h \ - ../include/match.h ../include/numeric.h ../include/res.h \ - ../include/s_auth.h ../include/s_bsd.h ../include/s_conf.h \ - ../include/s_debug.h ../include/s_misc.h ../include/s_user.h \ - ../include/send.h ../include/support.h ../include/whowas.h + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_alloc.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h \ + ../include/listener.h ../include/match.h ../include/numeric.h \ + ../include/res.h ../include/s_auth.h ../include/s_bsd.h \ + ../include/s_conf.h ../include/s_debug.h ../include/s_misc.h \ + ../include/s_user.h ../include/send.h ../include/support.h \ + ../include/whowas.h listener.o: listener.c ../config.h ../include/listener.h \ - ../include/ircd_defs.h ../include/ircd_events.h ../include/client.h \ - ../include/dbuf.h ../include/msgq.h ../include/ircd_handler.h \ - ../include/ircd.h ../include/struct.h ../include/ircd_alloc.h \ - ../include/ircd_features.h ../include/ircd_osdep.h \ - ../include/ircd_reply.h ../include/ircd_snprintf.h \ - ../include/ircd_string.h ../include/ircd_chattr.h ../include/numeric.h \ - ../include/s_bsd.h ../include/s_conf.h ../include/s_misc.h \ - ../include/s_stats.h ../include/send.h ../include/sys.h + ../include/ircd_defs.h ../include/ircd_events.h ../include/client.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_handler.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_alloc.h \ + ../include/ircd_features.h ../include/ircd_osdep.h \ + ../include/ircd_reply.h ../include/ircd_snprintf.h \ + ../include/ircd_string.h ../include/ircd_chattr.h \ + ../include/numeric.h ../include/s_bsd.h ../include/s_conf.h \ + ../include/s_misc.h ../include/s_stats.h ../include/send.h \ + ../include/sys.h m_account.o: m_account.c ../config.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ - ../include/struct.h ../include/ircd_reply.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/msg.h ../include/numnicks.h \ - ../include/s_user.h ../include/send.h + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numnicks.h \ + ../include/s_user.h ../include/send.h m_admin.o: m_admin.c ../config.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ - ../include/ircd.h ../include/struct.h ../include/ircd_features.h \ - ../include/ircd_reply.h ../include/msg.h ../include/numeric.h \ - ../include/numnicks.h ../include/s_conf.h ../include/s_user.h -m_asll.o: m_asll.c ../config.h ../include/client.h ../include/ircd_defs.h \ - ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ - ../include/ircd_handler.h ../include/hash.h ../include/ircd.h \ - ../include/struct.h ../include/ircd_reply.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/numeric.h ../include/numnicks.h \ - ../include/match.h ../include/msg.h ../include/send.h \ - ../include/s_bsd.h ../include/s_user.h -m_away.o: m_away.c ../config.h ../include/client.h ../include/ircd_defs.h \ - ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ - ../include/ircd_handler.h ../include/ircd.h ../include/struct.h \ - ../include/ircd_alloc.h ../include/ircd_reply.h \ - ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ - ../include/numeric.h ../include/numnicks.h ../include/s_user.h \ - ../include/send.h + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_features.h \ + ../include/ircd_reply.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/s_conf.h ../include/s_user.h +m_asll.o: m_asll.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h \ + ../include/numeric.h ../include/numnicks.h ../include/match.h \ + ../include/msg.h ../include/send.h ../include/s_bsd.h \ + ../include/s_user.h +m_away.o: m_away.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_alloc.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_user.h \ + ../include/send.h m_burst.o: m_burst.c ../config.h ../include/channel.h \ - ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ - ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ - ../include/hash.h ../include/ircd.h ../include/struct.h \ - ../include/ircd_alloc.h ../include/ircd_features.h \ - ../include/ircd_reply.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/list.h ../include/match.h \ - ../include/msg.h ../include/numeric.h ../include/numnicks.h \ - ../include/s_conf.h ../include/s_misc.h ../include/send.h \ - ../include/support.h + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_alloc.h ../include/ircd_features.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/list.h ../include/match.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/s_conf.h ../include/s_misc.h ../include/send.h \ + ../include/support.h m_clearmode.o: m_clearmode.c ../config.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/channel.h \ - ../include/hash.h ../include/ircd.h ../include/struct.h \ - ../include/ircd_alloc.h ../include/ircd_features.h \ - ../include/ircd_log.h ../include/ircd_reply.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/list.h ../include/msg.h \ - ../include/numeric.h ../include/numnicks.h ../include/s_conf.h \ - ../include/send.h ../include/support.h + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/channel.h ../include/hash.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_alloc.h \ + ../include/ircd_features.h ../include/ircd_log.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/list.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_conf.h \ + ../include/send.h ../include/support.h m_close.o: m_close.c ../config.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ - ../include/struct.h ../include/ircd_reply.h ../include/numeric.h \ - ../include/s_bsd.h ../include/send.h + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_reply.h ../include/numeric.h \ + ../include/s_bsd.h ../include/send.h m_connect.o: m_connect.c ../config.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/crule.h \ - ../include/hash.h ../include/ircd.h ../include/struct.h \ - ../include/ircd_features.h ../include/ircd_log.h \ - ../include/ircd_reply.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/jupe.h ../include/match.h \ - ../include/msg.h ../include/numeric.h ../include/numnicks.h \ - ../include/s_bsd.h ../include/s_conf.h ../include/s_user.h \ - ../include/send.h + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/crule.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_features.h ../include/ircd_log.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/jupe.h ../include/match.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/s_bsd.h ../include/s_conf.h ../include/s_user.h \ + ../include/send.h m_cprivmsg.o: m_cprivmsg.c ../config.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h \ - ../include/ircd_reply.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/s_user.h + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/s_user.h m_create.o: m_create.c ../config.h ../include/channel.h \ - ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ - ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ - ../include/hash.h ../include/ircd.h ../include/struct.h \ - ../include/ircd_reply.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ - ../include/numnicks.h ../include/s_debug.h ../include/s_misc.h \ - ../include/s_user.h ../include/send.h + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/s_debug.h ../include/s_misc.h \ + ../include/s_user.h ../include/send.h m_defaults.o: m_defaults.c ../config.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ - ../include/struct.h ../include/ircd_reply.h ../include/numeric.h \ - ../include/numnicks.h ../include/send.h ../include/supported.h \ - ../include/channel.h ../include/version.h + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_reply.h ../include/numeric.h \ + ../include/numnicks.h ../include/send.h ../include/supported.h \ + ../include/channel.h ../include/version.h m_destruct.o: m_destruct.c ../config.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ - ../include/ircd.h ../include/struct.h ../include/ircd_reply.h \ - ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ - ../include/numeric.h ../include/numnicks.h ../include/send.h + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/send.h m_desynch.o: m_desynch.c ../config.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ - ../include/ircd.h ../include/struct.h ../include/ircd_reply.h \ - ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ - ../include/numeric.h ../include/numnicks.h ../include/s_bsd.h \ - ../include/send.h -m_die.o: m_die.c ../config.h ../include/client.h ../include/ircd_defs.h \ - ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ - ../include/ircd_handler.h ../include/ircd.h ../include/struct.h \ - ../include/ircd_reply.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ - ../include/numnicks.h ../include/s_bsd.h ../include/send.h + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_bsd.h \ + ../include/send.h +m_die.o: m_die.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/s_bsd.h ../include/send.h m_endburst.o: m_endburst.c ../config.h ../include/channel.h \ - ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ - ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ - ../include/hash.h ../include/ircd.h ../include/struct.h \ - ../include/ircd_reply.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ - ../include/numnicks.h ../include/send.h + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/send.h m_error.o: m_error.c ../config.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ - ../include/ircd.h ../include/struct.h ../include/ircd_alloc.h \ - ../include/ircd_reply.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/numeric.h ../include/numnicks.h \ - ../include/s_debug.h ../include/s_misc.h ../include/send.h -m_get.o: m_get.c ../config.h ../include/client.h ../include/ircd_defs.h \ - ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ - ../include/ircd_handler.h ../include/hash.h ../include/ircd.h \ - ../include/struct.h ../include/ircd_features.h ../include/ircd_reply.h \ - ../include/ircd_string.h ../include/ircd_chattr.h ../include/numeric.h \ - ../include/numnicks.h ../include/send.h + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_alloc.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/numeric.h ../include/numnicks.h \ + ../include/s_debug.h ../include/s_misc.h ../include/send.h +m_get.o: m_get.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_features.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/numeric.h ../include/numnicks.h \ + ../include/send.h m_gline.o: m_gline.c ../config.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/gline.h \ - ../include/hash.h ../include/ircd.h ../include/struct.h \ - ../include/ircd_features.h ../include/ircd_reply.h \ - ../include/ircd_string.h ../include/ircd_chattr.h ../include/match.h \ - ../include/msg.h ../include/numeric.h ../include/numnicks.h \ - ../include/s_conf.h ../include/s_misc.h ../include/send.h \ - ../include/support.h -m_help.o: m_help.c ../config.h ../include/client.h ../include/ircd_defs.h \ - ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ - ../include/ircd_handler.h ../include/hash.h ../include/ircd.h \ - ../include/struct.h ../include/ircd_reply.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ - ../include/numnicks.h ../include/send.h -m_info.o: m_info.c ../config.h ../include/client.h ../include/ircd_defs.h \ - ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ - ../include/ircd_handler.h ../include/ircd.h ../include/struct.h \ - ../include/ircd_reply.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ - ../include/numnicks.h ../include/s_misc.h ../include/s_user.h \ - ../include/s_conf.h ../include/send.h ../include/version.h + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/gline.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/match.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/s_conf.h ../include/s_misc.h ../include/send.h \ + ../include/support.h +m_help.o: m_help.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/send.h +m_info.o: m_info.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/s_misc.h ../include/s_user.h \ + ../include/s_conf.h ../include/send.h ../include/version.h m_invite.o: m_invite.c ../config.h ../include/channel.h \ - ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ - ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ - ../include/hash.h ../include/ircd.h ../include/struct.h \ - ../include/ircd_reply.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/list.h ../include/msg.h \ - ../include/numeric.h ../include/numnicks.h ../include/s_user.h \ - ../include/send.h -m_ison.o: m_ison.c ../config.h ../include/client.h ../include/ircd_defs.h \ - ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ - ../include/ircd_handler.h ../include/hash.h ../include/ircd.h \ - ../include/struct.h ../include/ircd_reply.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/numeric.h ../include/send.h + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/list.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_user.h \ + ../include/send.h +m_ison.o: m_ison.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h \ + ../include/numeric.h ../include/send.h m_join.o: m_join.c ../config.h ../include/channel.h \ - ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ - ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ - ../include/gline.h ../include/hash.h ../include/ircd.h \ - ../include/struct.h ../include/ircd_chattr.h ../include/ircd_features.h \ - ../include/ircd_reply.h ../include/ircd_string.h ../include/msg.h \ - ../include/numeric.h ../include/numnicks.h ../include/s_debug.h \ - ../include/s_user.h ../include/send.h -m_jupe.o: m_jupe.c ../config.h ../include/client.h ../include/ircd_defs.h \ - ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ - ../include/ircd_handler.h ../include/jupe.h ../include/hash.h \ - ../include/ircd.h ../include/struct.h ../include/ircd_features.h \ - ../include/ircd_reply.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/match.h ../include/msg.h \ - ../include/numeric.h ../include/numnicks.h ../include/s_conf.h \ - ../include/s_misc.h ../include/send.h ../include/support.h + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/gline.h ../include/hash.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_chattr.h \ + ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/s_debug.h ../include/s_user.h \ + ../include/send.h +m_jupe.o: m_jupe.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/jupe.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/match.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/s_conf.h ../include/s_misc.h ../include/send.h \ + ../include/support.h m_kick.o: m_kick.c ../config.h ../include/channel.h \ - ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ - ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ - ../include/hash.h ../include/ircd.h ../include/struct.h \ - ../include/ircd_reply.h ../include/ircd_string.h \ - ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ - ../include/numnicks.h ../include/send.h -m_kill.o: m_kill.c ../config.h ../include/client.h ../include/ircd_defs.h \ - ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ - ../include/ircd_handler.h ../include/hash.h ../include/ircd.h \ - ../include/struct.h ../include/ircd_features.h ../include/ircd_log.h \ - ../include/ircd_reply.h ../include/ircd_snprintf.h \ - ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ - ../include/numeric.h ../include/numnicks.h ../include/s_misc.h \ - ../include/send.h ../include/whowas.h + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/send.h +m_kill.o: m_kill.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_features.h \ + ../include/ircd_log.h ../include/ircd_reply.h \ + ../include/ircd_snprintf.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/s_misc.h ../include/send.h \ + ../include/whowas.h m_links.o: m_links.c ../config.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ - ../include/struct.h ../include/ircd_features.h ../include/ircd_reply.h \ - ../include/ircd_string.h ../include/ircd_chattr.h ../include/match.h \ - ../include/msg.h ../include/numeric.h ../include/numnicks.h \ - ../include/s_user.h ../include/send.h + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_features.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/match.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_user.h \ + ../include/send.h m_list.o: m_list.c ../config.h ../include/channel.h \ - ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ - ../includ... [truncated message content] |
From: Toni G. <zo...@us...> - 2003-02-13 19:29:31
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-02-13 19:29:29 UTC Added files: doc/es/readme.www doc/es/rfc1459.orig doc/es/rfc1459.unet Log message: Documentacion: {en|es}/readme.www Documento con las direcciones. {en|es}/rfc1459.orig Documento del RFC original de IRC con su respectiva traduccion al castellano. es/rfc1459.unet Documento del RFC modificado traducido al castellano. ---------------------- diff included ---------------------- Index: ircdh/doc/es/readme.www diff -u /dev/null ircdh/doc/es/readme.www:1.1 --- /dev/null Thu Feb 13 11:29:29 2003 +++ ircdh/doc/es/readme.www Thu Feb 13 11:29:19 2003 @@ -0,0 +1,23 @@ +Además, y de forma actualizada, se puede encontrar información en las +siguientes páginas webs: + +* Web de IRC-Dev: + http://www.irc-dev.net + +* Documentos de IRC-Dev: + http://www.irc-dev.net/ircd/docs.php + +* Noticias de actualización y repositorio de parches: + http://www.irc-dev.net/ircd/ + +* Acceso al repositorio CVS: + http://cvs.irc-dev.net/cvs/ + +* Interfaz HTTP dek repositorio CVS: + http://cvs.irc-dev.net/cgi-bin/viewcvs.cgi/irc-dev/ircdh + +* Pagina del proyecto en Sourceforge: + http://sourceforge.net/projects/irc-dev + +* Información sobre aumentar los descriptores de fichero por proceso: + linux: http://www.linux.org.za/oskar/patches/kernel/filehandle/ Index: ircdh/doc/es/rfc1459.orig diff -u /dev/null ircdh/doc/es/rfc1459.orig:1.1 --- /dev/null Thu Feb 13 11:29:30 2003 +++ ircdh/doc/es/rfc1459.orig Thu Feb 13 11:29:19 2003 @@ -0,0 +1,3712 @@ + + + +Network Working Group J. Oikarinen +RFC: 1459 D. Reed + Mayo 1993 + Traducción al castellano: Octubre 1999 + Carlos García Argos (cg...@ya...) + + + + Protocolo de Charla Basado en Internet (Internet Relay Chat, IRC) + + +Prefacio + + Este documento especifica un protocolo experimental para la + comunidad de Internet. Se piden comentarios y sugerencias para + mejoras. Se ruega referirse a la edición actual de los "Estándares + de Protocolo Oficiales del IAB" para el estado actual de la + estandarización y el protocolo. La distribución de este documento + es ilimitada. + +Resumen + + El Protocolo IRC se desarrolló durante los 4 últimos años desde que + se implementó por primera vez como un medio de comunicación + instantánea entre usuarios de BBS. Actualmente soporta una red + global de servidores y clientes, y se está extendiendo para + contrarrestar el crecimiento. Durante los 2 últimos años, la media + de usuarios conectados a la red de IRC se ha multiplicado por 10. + + El protocolo IRC está basado en texto, siendo el cliente más simple + un programa capaz de conectarse a un servidor a través de un socket. + +Índice + + 1. INTRODUCCIÓN ............................................... 4 + 1.1 Servidores.............................................. 4 + 1.2 Clientes ............................................... 5 + 1.2.1 Operadores ......................................... 5 + 1.3 Canales ................................................. 5 + 1.3.1 Operadores de canal .................................. 6 + 2. LA ESPECIFICACIÓN DEL IRC ................................... 7 + 2.1 Discusión ............................................... 7 + 2.2 Códigos de caracteres ................................... 7 + 2.3 Mensajes ................................................ 7 + 2.3.1 Formato de mensajes en pseudo BNF ................. 8 + 2.4 Respuestas numéricas..................................... 10 + 3. Conceptos sobre IRC ......................................... 10 + 3.1 Comunicación uno-a-uno .................................. 10 + 3.2 Uno-a-muchos ............................................ 11 + 3.2.1 A una lista ........................................ 11 + 3.2.2 A un grupo (canal) ................................. 11 + 3.2.3 A una máscara de host o servidor ................... 12 + 3.3 Uno a todos ............................................. 12 + +Oikarinen & Reed [Pág. 1] + + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + + 3.3.1 Cliente a cliente .................................. 12 + 3.3.2 Clientes a servidor ................................ 12 + 3.3.3 Servidor a servidor ................................ 12 + 4. DETALLES DE MENSAJES......................................... 13 + 4.1 Registro de conexión .................................... 13 + 4.1.1 Mensaje de clave ................................... 14 + 4.1.2 Mensaje de nick .................................... 14 + 4.1.3 Mensaje de usuario ................................. 15 + 4.1.4 Mensaje de servidor ................................ 16 + 4.1.5 Mensaje de Operador ................................ 17 + 4.1.6 Mensaje de salida .................................. 17 + 4.1.7 Mensaje de salida del servidor ..................... 18 + 4.2 Operaciones en un canal ................................. 19 + 4.2.1 Mensaje de entrada al canal (JOIN) ................. 19 + 4.2.2 Mensaje de salida del canal (PART) ................. 20 + 4.2.3 Mensaje de modos ................................... 21 + 4.2.3.1 Modos de canal ................................ 21 + 4.2.3.2 Modos de usuario .............................. 22 + 4.2.4 Mensaje de tópico .................................. 23 + 4.2.5 Mensaje de nombres ................................. 24 + 4.2.6 Mensaje de lista de canales ........................ 24 + 4.2.7 Mensaje de invitación a un canal ................... 25 + 4.2.8 Mensaje de expulsión temporal ...................... 25 + 4.3 Peticiones y comandos del servidor ...................... 26 + 4.3.1 Mensaje de versión ................................. 26 + 4.3.2 Mensaje de estadísticas ............................ 27 + 4.3.3 Mensaje de enlaces de servidores ................... 28 + 4.3.4 Mensaje de hora local del servidor ................. 29 + 4.3.5 Mensaje de conexión servidor-servidor .............. 29 + 4.3.6 Mensaje de trazado de ruta ......................... 30 + 4.3.7 Mensaje de nombre del administrador del servidor ... 31 + 4.3.8 Mensaje de información sobre el servidor ........... 31 + 4.4 Enviando mensajes ....................................... 32 + 4.4.1 Mensajes privados .................................. 32 + 4.4.2 Mensajes de aviso .................................. 33 + 4.5 Peticiones de usuario ................................... 33 + 4.5.1 Petición de "WHO" .................................. 33 + 4.5.2 Petición de "WHOIS" ................................ 34 + 4.5.3 Petición de "WHOWAS" ............................... 35 + 4.6 Otros mensajes .......................................... 35 + 4.6.1 Mensaje de "KILL" .................................. 35 + 4.6.2 Mensaje de "PING" .................................. 36 + 4.6.3 Mensaje de "PONG" .................................. 37 + 4.6.4 Mensajes de error .................................. 38 + 5. MENSAJES OPCIONALES ......................................... 38 + 5.1 Mensaje de ausencia (AWAY) .............................. 38 + 5.2 Comando de reconfiguración del servidor ................. 39 + 5.3 Comando de reinicio del servidor ........................ 39 + + + + +Oikarinen & Reed [Pág. 2] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + + 5.4 Mensaje de invocación (SUMMON) .......................... 40 + 5.5 Mensaje de lista de usuarios ............................ 40 + 5.6 Comando de mensaje a los Operadores ..................... 41 + 5.7 Comando USERHOST ........................................ 41 + 5.8 Comando ISON ............................................ 41 + 6. RESPUESTAS .................................................. 42 + 6.1 Respuestas de error ..................................... 42 + 6.2 Respuestas a comandos ................................... 47 + 6.3 Respuestas reservadas ................................... 54 + 7. AUTENTICACIÓN DE CLIENTE Y SERVIDOR ......................... 54 + 8. DETALLES DE IMPLEMENTACIÓN .................................. 54 + 8.1 Protocolo de red: TCP ................................... 56 + 8.1.1 Soporte de sockets UNIX ............................ 56 + 8.2 Análisis de comandos .................................... 56 + 8.3 Envío de mensajes ....................................... 56 + 8.4 Vida de una conexión .................................... 57 + 8.5 Estableciendo una conexión cliente-servidor ............. 57 + 8.6 Estableciendo una conexión servidor-servidor ............ 57 + 8.6.1 Intercambio de información de estado al conectar ... 58 + 8.7 Finalización de conexiones cliente-servidor ............. 58 + 8.8 Finalización de conexiones servidor-servidor ............ 58 + 8.9 Seguimiento de cambios de nick .......................... 59 + 8.10 Control de flood de clientes ........................... 59 + 8.11 Búsquedas sin bloqueos ................................. 60 + 8.11.1 Resolución de nombre de host (DNS) ................ 60 + 8.11.2 Búsqueda de nombre de usuario (Ident) ............. 60 + 8.12 Archivo de configuración ............................... 60 + 8.12.1 Permitir la conexión de clientes .................. 61 + 8.12.2 Operadores ........................................ 61 + 8.12.3 Perimitir la conexión de servidores ............... 61 + 8.12.4 Administración .................................... 62 + 8.13 Miembros de canales .................................... 62 + 9. PROBLEMAS ACTUALES .......................................... 62 + 9.1 Escalabilidad ........................................... 62 + 9.2 Etiquetas ............................................... 62 + 9.2.1 Nicks .............................................. 62 + 9.2.2 Canales ............................................ 63 + 9.2.3 Servidores ......................................... 63 + 9.3 Algoritmos .............................................. 63 + 10. SOPORTE Y DISPONIBILIDAD ................................... 63 + 11. ASUNTOS DE SEGURIDAD ....................................... 63 + 12. DIRECCIONES DE LOS AUTORES ................................. 64 + + + + + + + + + + + +Oikarinen & Reed [Pág. 3] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + +1. INTRODUCCIÓN + + El protocolo IRC (Internet Relay Chat) se ha diseñado durante unos + años para usarse como conferencia basada en texto. Este documento + describe el protocolo IRC actual. + + El protocolo IRC se ha desarrollado en sistemas que usan el + protocolo de red TCP/IP, aunque no es imperativo que esta sea la + única forma en que funcione. + + El IRC es en sí mismo un sistema de teleconferencia que (a través + del modelo cliente-servidor) es adecuado para funcionar en muchas + máquinas en una forma distribuida. Una configuración típìca incluye + un único proceso (el servidor) que conforma un punto central para + que los clientes (u otros servidores) se conecten a él, realizando + los envíos y multiplexado de mensajes requeridos, así como otras + funciones. + +1.1 Servidores + + El servidor forma la espina dorsal del IRC, proporcionando un punto + al que los clientes pueden conectar para hablar unos con otros, y un + punto para que otros servidores se conecten a él, formando una red + IRC. La única configuración de red permitida para los servidores de + IRC es una con forma de árbol extendido [ver figura 1], donde cada + servidor hace de nodo central para el resto de la red que dicho + servidor "ve". + + + [ Servidor 15 ] [ Servidor 13 ] [ Servidor 14] + / \ / + / \ / + [ Servidor 11 ] ------ [ Servidor 1 ] [ Servidor 12] + / \ / + / \ / + [ Servidor 2 ] [ Servidor 3 ] + / \ \ + / \ \ + [ Servidor 4 ] [ Servidor 5 ] [ Servidor 6 ] + / | \ / + / | \ / + / | \________ / + / | \ / + [ Servidor 7 ] [ Servidor 8 ] [ Servidor 9 ] [ Servidor 10 ] + + : + [ etc. ] + : + + [ Figura. 1. Formato de una red de servidores de IRC ] + + + +Oikarinen & Reed [Pág. 4] + + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + +1.2 Clientes + + Un cliente es cualquier cosa que se conecta a un servidor que no sea + otro servidor. Cada cliente se distingue de otros clientes por un + único nick de 9 caracteres de longitud máxima. Ver las reglas de + gramática de protocolo para ver lo que se puede y lo que no se puede + usar en un nick. Además del nick, todos los servidores deben tener + la siguiente información sobre todos los clientes: nombre real del + host desde el que conecta el cliente, el nombre de usuario del + cliente en ese host, y el servidor al que está conectado el cliente. + +1.2.1 Operadores + + Para mantener un cierto orden en la red de IRC, existe una clase de + clientes especial (Operadores) que realizan funciones generales de + mantenimiento en la red. Aunque los "poderes" concedidos a un + un Operador pueden considerarse "peligrosos", son necesarios. Los + Operadores deben ser capaces de realizar tareas básicas de red como + desconectar y reconectar servidores para prevenir un uso prolongado + de mal rutado de red. Como reconocimiento de esta necesidad, el + protocolo explicado aquí sólo permite a los Operadores realizar + dichas funciones. Ver secciones 4.1.7 (SQUIT) y 4.3.5 (CONNECT). + + Un poder con mayor controversia es la posibilidad de que un Operador + elimine un usuario de la red por la "fuerza". Por ejemplo, los + Operadores son capaces de cerrar la conexión entre cualquier cliente + y servidor. La justificación de esto es delicada ya que su abuso es + a la vez destructivo y molesto. Para más detalles sobre esta acción + ver sección 4.6.1 (KILL). + +1.3 Canales + + Un canal es un grupo (con nombre) de uno o más clientes que reciben + mensajes dirigidos a ese canal. El canal se crea implícitamente al + unirse el primer cliente, y deja de existir cuando el último cliente + lo deja. Mientras el canal exista, cualquier cliente puede dirigirse + al canal usando el nombre de dicho canal. + + Los nombres de canales son cadenas (que empiezan con '&' o '#') de + hasta 200 caracteres. Aparte del requisito de que el primer carácter + sea un '&' o un '#', la única restricción es que no puede contener + espacios en blanco (' '), control G (^G o ASCII 7), o una coma (',', + que se usa como separador de listas de parámetros). + + Hay dos tipos de canales permitidos por el protocolo. Uno es un + canal distribuido que es conocido por todos los servidores de la + red. Estos canales se marcan con el primer carácter '#'. Otro tipo + de canales se caracteriza por ser sólo para clientes conectados al + + + + +Oikarinen & Reed [Pág. 5] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + + servidor en el que se encuentra el canal. Se distinguen porque su + primer carácter es '&'. Por encima de estos tipos, hay modos de + canal que varían las características de los canales. Para más + detalles, ver la sección 4.2.3 (comando MODE). + + Para crear un nuevo canal o formar parte de uno existente, un + usuario debe UNIRSE (JOIN) al canal. Si el canal no existe antes de + unirse, se crea y el creador del canal pasa a ser operador de canal. + Si el canal existe, la petición de unirse a él será aceptada o no en + función de los modos actuales del canal. Por ejemplo, si el canal es + sólo para invitados (+i), sólo podrá unirse si es invitado. Como + parte del protocolo, un usuario puede formar parte de varios canales + simultáneamente, pero se recomienda un límite de 10 canales como + suficiente para usuarios experimentados y novatos. Ver la sección + 8.13 para más información. + + Si la red de IRC se separa a causa de una ruptura de conexión entre + dos servidores, el canal en cada lado está compuesto por los + clientes que están conectados a los servidores a cada lado de la + ruptura. Cuando se rehace la conexión, los servidores que reconectan + anuncian al otro quién cree que está en cada canal y los modos de + dicho canal. Si el canal existe en ambas partes, las uniones (JOINs) + y modos (MODEs) se interpretan de forma inclusiva de forma que ambos + lados de la nueva conexión coincidan en los clientes que forman el + canal y los modos del mismo. + +1.3.1 Operadores de canal + + El operador de canal (también llamado "chop" o "chanop") se le + considera el "dueño" de dicho canal. Como reconocimiento a ese + estatus, los operadores de canal poseen ciertos "poderes" que les + permiten mantener el control y cierto orden en su canal. Como dueño + del canal, el operador de canal no tiene que dar justificaciones por + sus actos, aunque si sus acciones son antisociales o abusivas, puede + ser razonable pedirle a un Operador de IRC que intervenga, o por el + bien de los usuarios, irse y crear su propio canal. + + Los comandos que sólo pueden usar los operadores de canal son: + + KICK - Expulsar a un cliente del canal, de forma que puede + volver a entrar + MODE - Cambiar los modos del canal + INVITE - Invitar a un usuario a un canal + TOPIC - Cambiar el topic en un canal con modo +t + + Un operador de canal se identifica por el símbolo '@' (arroba) que + precede a su nick, cuando se le asocia con un canal (respuestas a + los comandos NAMES, WHO y WHOIS). + + + + + +Oikarinen & Reed [Pág. 6] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + + +2. LA ESPECIFICACIÓN DEL IRC + +2.1 Discusión + + El protocolo tal y como se describe aquí se usa tanto para + conexiones servidor-servidor como cliente-servidor. Hay, sin + embargo, más restricciones en las conexiones cliente (que se + consideran poco fiables) que en las conexiones de servidores. + +2.2 Códigos de caracteres + + No hay un conjunto de caracteres especificado. El protocolo está + basado en un conjunto de caracteres compuesto de 8 bits, formando un + octeto. Cada mensaje puede estar compuesto de cualquier número de + estos octetos; sin embargo, algunos valores de estos octetos se usan + para formar códigos de control que actúan como delimitadores de + mensajes. + + A pesar de ser un protocolo de 8 bits, los delimitadores y palabras + clave son tales que el protocolo se puede usar desde un terminal + USASCII y una conexión telnet. + + Debido al origen escandinavo del IRC, los caracteres {, } y | se + consideran las "minúsculas" de los caracteres [, ] y \, + respectivamente. Esto es crítico a la hora de determinar la + equivalencia de dos nicks. + +2.3 Mensajes + + Servidores y clientes se envían mensajes unos a otros que pueden + generar o no una respuesta. Si el mensaje contiene un comando válido + de una de las formas descritas en secciones posteriores, el cliente + debería esperar una respuesta como se especifica, pero no tiene + porqué esperar para siempre a esa respuesta; la comunicación + cliente-servidor y servidor-servidor es esencialmente asíncrona. + + Cada mensaje de IRC puede consistir en 3 partes principales: el + prefijo (opcional), el comando y los parámetros del comando (hasta + un total de 15). El prefijo, comando y parámetros deben estar + separados entre sí por uno (o más) caracteres ASCII espacio en + blanco (0x20). + + La presencia de un prefijo se indica con el carácter dos puntos + (':', 0x3b), que debe ser el primer carácter del propio mensaje. No + debe haber espacio en blanco entre los dos puntos y el mensaje. El + prefijo lo usan los servidores para indicar el verdadero origen del + mensaje. Si el prefijo no aparece en el mensaje, se supone que + + + + + +Oikarinen & Reed [Pág. 7] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + + proviene de la conexión desde la cual se recibió. Los clientes no + deberían usar prefijos al enviar mensajes; si usan un prefijo, el + único válido es el nick registrado asociado con el cliente. Si la + fuente identificada por el prefijo no se encuentra en la base de + datos interna del servidor o si la fuente está registrada desde un + enlace diferente a aquel desde el cual llegó el mensaje, el servidor + debe ignorar el mensaje de forma silenciosa. + + El comando debe ser bien un comando de IRC válido o un número de 3 + dígitos representado en texto ASCII. + + Los mensajes de IRC siempre son líneas de caracteres acabadas en un + par CR-LF (Carriage Return-Line Feed = Retorno de Carro-Salto de + Línea), y los mensajes no deben exceder los 512 caracteres de + longitud, incluido el par CR-LF. Por tanto, hay un máximo de 510 + caracteres permitidos para el comando y sus parámetros. No hay + provisiones para líneas de continuación de mensajes. Para más + detalles sobre la implementación ver la sección 7. + +2.3.1 Formato de mensajes en 'pseudo' BNF + + Los mensajes de protocolo deben extraerse de la cadena contigua de + octetos. La solución es asignar dos caracteres, CR y LF como + separadores de mensajes. Los mensajes vacíos se ignoran de forma + silenciosa, lo que permite el uso de la secuencia CR-LF entre + mensajes sin problemas. + + El mensaje extraído se divide en las componentes <prefijo>, + <comando> y lista de parámetros formada por componentes <parámetro + intermedio> o <parámetro final> + + La representación BNF para esto es: + + +<mensaje> ::= [':' <prefijo> <ESPACIO> ] <comando> <parámetro> <crlf> +<prefijo> ::= <nombre de servidor> | <nick> [ '!' <usuario> ] [ '@' <host> ] +<comando> ::= <letra> { <letra> } | <número> <número> <número> +<ESPACIO> ::= ' ' { ' ' } +<parámetro> ::= <ESPACIO> [ ':' <parámetro final> | + <parámetro intermedio> <parámetro> ] + +<parámetro intermedio> ::= <Cualquier secuencia de octetos *no vacía* + que no incluya ESPACIO, NUL, CR o LF, el + primero del cual no puede ser ':'> +<parámetro final> ::= <Cualquier secuencia, posiblemente *vacía* que no + incluya NUL, CR o LF> + +<crlf> ::= CR LF + + + + + +Oikarinen & Reed [Pág. 8] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + +NOTAS: + + 1) <ESPACIO> consiste únicamente de caracteres espacio (0x20). + Nótese especialmente que la TABULACIÓN y otros caracteres de + control no se consideran espacios en blanco. + + 2) Después de extraer la lista de parámetros, todos son iguales, + ya sean <parámetro intermedio> o <parámetro final>. Este último + es simplemente un truco sintáctico para permitir ESPACIO en un + parámetro. + + 3) La razón por la cual CR y LF no pueden aparecer en parámetros + es un artefacto de la estructura del mensaje. Esto podría + cambiar más adelante. + + 4) El carácter NUL no es especial en la estructuración del mensaje + y básicamente podría acabar en un parámetro, pero esto + causaría complejidades adicionales en el manejo normal de + cadenas de C. Por tanto, NUL no se permite en los mensajes. + + 5) El último parámetro debe ser una cadena vacía. + + 6) El uso del prefijo extendido (['!' <usuario> ] ['@' <host> ]) + no debe usarse en comunicaciones servidor-servidor y sólo está + orientado a mensajes servidor-cliente para proporcionar a los + clientes información más útil sobre de quién proviene un + mensaje sin realizar peticiones adicionales. + + La mayoría de los protocolos de mensajes especifican una semántica y + sintaxis adicionales para los parámetros, dictados por su posición + en la lista de parámetros. Por ejemplo, muchos comandos de + servidores supondrán que el primer parámetro después del comando es + la lista de objetivos, que puede describirse como: + + <objetivo> ::= <a> [ "," <objetivo> ] + <a> ::= <canal> | <usuario> '@' <nombre de servidor> | + <nick> | <máscara> + <canal> ::= ('#' | '&') <cadena de caracteres> + <nombre de servidor> ::= <host> + <host> ::= ver RFC 952 [DNS:4] para detalles sobre nombres de + host válidos + <nick> ::= <letra> { <letra> | <número> | <especial> } + <máscara> ::= ('#' | '$') <cadena de caracteres> + <cadena de caracteres> ::= <cualquier código de 8 bits excepto + ESPACIO, BELL, NUL, CR, LF y coma (',')> + + Otras sintaxis de parámetros son: + + <usuario> ::= <NO-ESPACIO> { <NO-ESPACIO> } + <letra> ::= 'a' ... 'z' | 'A' ... 'Z' + <número> ::= '0' ... '9' + <especial> ::= '-' | '[' | ']' | '\' | '`' | '^' | '{' | '}' + +Oikarinen & Reed [Pág. 9] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + + <NO-ESPACIO> ::= <cualquier código de 8 bits excepto ESPACIO + (0x20), NUL (0x00), CR (0x0d) o LF (0x0a)> + +2.4 Respuestas numéricas + + La mayoría de los mensajes enviados al servidor generan una + respuesta de alguna clase. La respuesta más común es la numérica, + empleada tanto para repuestas de error como para las normales. La + respuesta numérica debe enviarse como un mensaje compuesto por el + prefijo del que lo envía, el número de 3 dígitos, y el objetivo de + la respuesta. No se permiten respuestas numéricas provenientes de un + cliente; cualquier mensaje de ese tipo recibido por el servidor se + descartan de forma silenciosa. Una respuesta numérica es como un + mensaje normal, salvo que la palabra clave se crea a partir de 3 + dígitos numéricos en lugar de una cadena de letras. Hay una lista de + respuestas en la sección 6. + +3. Conceptos sobre IRC. + + Esta sección está dedicada a describir los conceptos actuales que + están tras la organización del protocolo IRC y cómo las actuales + implementaciones envían diferentes clases de mensajes. + + + + 1--\ + A D---4 + 2--/ \ / + B----C + / \ + 3 E + + Servidores: A, B, C, D, E Clientes: 1, 2, 3, 4 + + [ Figura 2. Pequeña red IRC de ejemplo ] + +3.1 Comunicación uno-a-uno + + La comunicación uno-a-uno normalmente sólo la realizan los clientes, + ya que la mayoría del tráfico servidor-servidor no es resultado de + los servidores comunicándose únicamente entre ellos. Para + proporcionar una forma segura de comunicación entre clientes, es + necesario que todos los servidores sean capaces de enviar un mensaje + exactamente en una dirección a través del árbol de expansión para + que llegue a cualquier cliente. El camino de un mensaje es el más + corto entre dos puntos cualesquiera del árbol. + + Los siguientes ejemplos se refieren todos a la Figura 2 de arriba. + + + + + +Oikarinen & Reed [Pág. 10] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + +Ejemplo 1: + Un mensaje entre los clientes 1 y 2 sólo lo ve el servidor A, que + lo envía directamente al cliente 2. + +Ejemplo 2: + Un mensaje entre los clientes 1 y 3 lo ven los servidores A y B. + Ningún otro servidor o cliente puede verlo. + +Ejemplo 3: + Un mensaje entre los clientes 2 y 4 lo ven los servidores A, B, C + y D y el cliente 4. + +3.2 Uno-a-muchos + + El propósito principal del IRC es proporcionar un forum que permita + realizar conferencias de forma sencilla y eficiente. El IRC ofrece + varias maneras de conseguir esto, cada una con su propósito. + +3.2.1 A una lista + + La forma menos eficiente de comunicación uno-a-muchos se realiza a + través de clientes que se comunican con una "lista" de usuarios. La + forma en que esto se realiza es casi autoexplicatoria: el cliente da + una lista de destinos para un mensaje y el servidor divide la lista + y distribuye una copia separada del mensaje a cada destino. No es + tan eficiente como emplear un grupo ya que la lista de destino es + separada y el mensaje se envía sin asegurarse de que no se mandan + duplicados cada vez. + +3.2.2 A un grupo (canal) + + En el IRC el canal tiene un papel equivalente al de un foro. Su + existencia es dinámica (llendo y viniendo igual que la gente + entrando y saliendo de los canales), y la conversación se envía + únicamente a los servidores que tienen usuarios en el canal. Si hay + múltiples usuarios en un servidor en el mismo canal, el mensaje sólo + se envía una vez a ese servidor y desde él a cada cliente del canal. + Esto se repite para cada combinación cliente-servidor hasta que el + mensaje original se ha enviado a cada miembro del canal. + + Los siguientes ejemplos se refieren a la Figura 2. + +Ejemplo 4: + Un canal con un cliente en él. Los mensajes al canal van al + servidor y a ninguna parte más. + +Ejemplo 5: + 2 clientes en un canal. Todos los mensajes atraviesan un camino + igual que si fuesen mensajes privados entre dos clientes fuera de + un canal. + + + +Oikarinen & Reed [Pág. 11] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + +Ejemplo 6: + Los clientes 1, 2 y 3 en un canal. Todos los mensajes se envían a + todos los clientes y sólo a los servidores que tienen que + recorrerse si fuese un mensaje privado a un único cliente. Si el + cliente 1 envía un mensaje, va al cliente 2 y, via el servidor B + al cliente 3. + +3.2.3 A una máscara de host o servidor + + Para proveer a los Operadores de IRC de mecanismos para enviar + mensajes a muchos usuarios relacionados, se proporcionan mensajes a + host y máscara de servidor. Estos mensajes se envían a usuarios cuya + información de host o servidor coincide con la de la máscara. Los + mensajes se envían únicamente a los sitios en los que están esos + usuarios, de forma similar a los canales. + +3.3 Uno-a-todos + + El tipo de mensaje uno-a-todos se describe como un mensaje de + emisión, enviado a todos los clientes, servidores o ambos. En una + red grande, un solo mensaje puede resultar en mucho tráfico a través + de la red en un intento de hacerlo llegar a todos los destinos. + + Para algunos mensajes no hay otra opción que enviarla a todos los + servidores para que la información manejada por cada servidor sea + razonablemente consistente entre servidores. + +3.3.1 Cliente-a-cliente + + No existe una clase de mensaje que, a partir de un mensaje único, + resulte en que el mensaje se envíe a todos los demás clientes. + +3.3.2 Cliente-a-servidor + + La mayoría de los comandos que resultan en un cambio en la + información sobre el estado (miembros de canal, modos de canal, + estado de usuario, etc) deben ser enviados a todos los servidores, y + esta distribución no puede ser cambiada por el cliente. + +3.3.3 Servidor-a-servidor. + + Mientras la mayoría de los mensajes entre servidores se distribuyen + a todos "los demás" servidores, esto sólo es necesario para un + mensaje que afecte bien a un usuario, un canal o un servidor. Dado + que estos son partes necesarias del IRC, casi todos los mensajes + originados de un servidor se envían a todos los demás servidores + conectados. + + + + + + +Oikarinen & Reed [Pág. 12] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + +4. DETALLES DE MENSAJES + + En las páginas siguientes hay descripciones sobre cada mensaje que + reconocen el servidor y el cliente IRC. Todos los comandos descritos + en esta sección deben implementarse en cualquier servidor que siga + el protocolo. + + Cuando se liste la respuesta ERR_NOSUCHSERVER (error, no existe el + servidor), significa que el parámetro <servidor> no se encontró. El + servidor no debe enviar ninguna otra respuesta para ese comando. + + El servidor al que se conecta el cliente debe analizar el mensaje + completo, devolviendo los errores oportunos. Si el servidor + encuentra algún error fatal en el análisis de un mensaje, debe + enviarse un mensaje de error y finalizar el análisis. Un error fatal + puede ser un comando incorrecto, un destino que sea desconocido para + el servidor (en esta categoría entran servidores, nicks o canales), + parámetros que falten o privilegios incorrectos. + + Si se presenta un conjunto completo de parámetros, cada uno debe + comprobarse que es válido y se enviarán las respuestas apropiadas al + cliente. En caso de mensajes que usan listas de parámetros separados + por comas tienen que enviarse respuestas para cada uno por separado. + + En los ejemplos de abajo, algunos mensajes aparecen en formato + completo: + + :Nombre COMANDO lista de parámetros + + Estos ejemplos representan un mensaje, proveniente de "Nombre", + entre servidores, donde es fundamental incluir el nombre del emisor + original del mensaje para que los servidores remotos puedan enviar + una respuesta a través del camino correcto. + +4.1 Registro de conexión + + Los comandos descritos aquí se usan para registrar una conexión con + un servidor de IRC tanto si se trata de un usuario como si es otro + servidor, además de las desconexiones. + + No se requiere un comando "PASS" (de password) para que se registre + cada conexión de un cliente o servidor, pero debe preceder el + mensaje del servidor o lo último de la combinación NICK/USUARIO. Se + recomienda encarecidamente que las conexiones de servidor tengan una + clave de acceso para dar un grado de seguridad a las conexiones. El + orden recomendado para el registro de un cliente es el siguiente: + + 1. Mensaje de Password + 2. Mensaje de Nick + 3. Mensaje de Usuario + + + +Oikarinen & Reed [Pág. 13] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + +4.1.1 Mensaje de Password + + + Comando: PASS + Parámetros: <password> + + El comando PASS se usa para establecer una "clave de conexión". La + clave puede y debe establecerse antes de cualquier intento de + realizar la conexión. Esto requiere que los clientes envíen el + comando PASS antes de la combinación NICK/USUARIO, y los servidores + *deben* enviar el comando PASS antes de cualquier comando SERVER. La + clave debe coincidir con una de las líneas C/N (para servidores) o + las I (para clientes). Es posible enviar múltiples comandos PASS + antes del registro pero sólo la última que se envía se verifica y no + puede cambiarse una vez hecho el registro. Respuestas numéricas: + + ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED + + Ejemplo: + + PASS clavesecretaaquí + +4.1.2 Mensaje de Nick + + Comando: NICK + Parámetros: <nick> [ <contadordesalto> ] + + El mensaje de NICK se usa para darle al usuario un nick o cambiar el + anterior. El parámetro <contadordesalto> se usa únicamente por los + servidores para indicar cómo de lejos está el nick del servidor. Una + conexión local tiene un contador de salto igual a 0. Si lo envía un + cliente, se ignora. + + Si llega un mensaje NICK a un servidor que ya tiene un nick idéntico + para otro cliente, ocurre una colisión de nick. Como resultado de + esto, se eliminan todas las referencias del nick de la base de datos + del servidor, y se ejecuta un comando KILL para eliminar el nick de + las bases de datos de los demás servidores. Si el mensaje NICK que + causó la colisión fue un cambio de nick, el nick original (antiguo) + también debe eliminarse. + + Si el servidor recibe un nick idéntifo de un cliente que está + conectado directamente, puede enviar un mensaje ERR_NICKCOLLISION al + cliente local, ignorar el comando NICK y no ejecutar ningún comando + KILL. + + Respuestas numéricas: + + ERR_NONICKNAMEGIVEN ERR_ERRONEUSNICKNAME + ERR_NICKNAMEINUSE ERR_NICKCOLLISION + + + +Oikarinen & Reed [Pág. 14] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + + Ejemplo: + + NICK Wiz ; Introduciendo nuevo nick "Wiz". + + :WiZ NICK Kilroy ; WiZ cambia su nick a Kilroy. + +4.1.3 Mensaje de Usuario + + Comando: USER + Parámetros: <nombre de usuario> <nombre de host> + <nombre de servidor> <nombre real> + + El mensaje USER se usa al principio de cada conexión para indicar + el nombre de usuario, de host y servidor y el nombre real del nuevo + usuario. Se usa también en la comunicación entre servidores para + indicar que un nuevo usuario llega a la red de IRC, ya que sólo + tras recibirse los mensajes USER y NICK del cliente queda registrado + el usuario. + + Entre servidores el nick del cliente debe preceder al mensaje de + USER. Nótese que el nombre de host y servidor normalmente se ignoran + por el servidor cuando el comando USER viene desde un cliente + conectado directamente (por razones de seguridad), pero se usan en + comunicaciones servidor a servidor. Esto quiere decir que un nick + debe enviarse siempre a un servidor remoto cuando entra un nuevo + usuario a la red antes de enviarse el mensaje USER. + + El parámetro <nombre real> debe ser el último, ya que puede contener + espacios en blanco y debe ir precedido por dos puntos (":") para + asegurarse de que se reconoce como tal. + + Dado que es fácil para un cliente mentir sobre el nombre de usuario + apoyado únicamente en el mensaje USER, se recomienda el empleo de un + "Servidor de Identidad". Si el host desde el que conecta un usuario + tiene ese servidor activado, el nombre de usuario es el que + proporciona dicho servidor. + + Respuestas numéricas: + + ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED + + Ejemplos: + + + USER guest tolmoon tolsun :Ronnie Reagan + ;El usuario se registra con nombre + de usuario "guest" y nombre real + "Ronnie Reagan". + + + + + +Oikarinen & Reed [Pág. 15] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + + + :testnick USER guest tolmoon tolsun :Ronnie Reagan + ;mensaje entre servidores con el + nick al que pertenece el comando + USER + +4.1.4 Mensaje de Servidor + + Comando: SERVER + Parámetros: <nombre de servidor> <contador de salto> <información> + + El mensaje de servidor se usa para indicar a un servidor que el otro + lado de la conexión es un servidor. También se emplea para enviar + datos sobre servidores a través de toda la red. Cuando se conecta un + nuevo servidor a la red, debe enviarse información sobre él al resto + de la red. El <contador de salto> se usa para dar a los servidores + información interna sobre cómo de lejos están todos los servidores. + Con una lista completa de los servidores, sería posible construir un + mapa completo del árbol de servidores, pero las máscaras de host lo + evitan. + + El mensaje SERVER sólo debe aceptarse desde (a) una conexión + pendiente de ser registrada y que se intenta registrar como servidor + o (b) una conexión existente a otro servidor, en cuyo caso el + mensaje SERVER introduce un nuevo servidor tras ese servidor. + + La mayoría de los errores que ocurren al recibirse el comando SERVER + acaban en una finalizacion de la conexión por parte del host de + destino (servidor objetivo). Las respuestas de error se envían + normalmente usando el comando "ERROR" en lugar de una respuesta + numérica ya que el comando ERROR tiene propiedades que le hacen + útil en este caso. + + Si un mensaje de SERVER se analiza e intenta introducir un servidor + que ya es conocido por el servidor destino, la conexión de la que + vino el mensaje debe cerrarse (siguiendo los procedimientos + adecuados), ya que se forma una ruta doble a un servidor y por tanto + la naturaleza acíclica del árbol de la red IRC. + + Respuestas numéricas: + + ERR_ALREADYREGISTRED + + Ejemplo: + +SERVER test.oulu.fi 1 :[tolsun.oulu.fi] Servidor experimental + ; El nuevo servidor test.oulu.fi se + presenta e intenta registrarse. El + nombre entre corchetes es el nombre de + host que lleva test.oulu.fi. + + + +Oikarinen & Reed [Pág. 16] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + + + +:tolsun.oulu.fi SERVER csd.bu.edu 5 :BU Servidor central + ; Servidor tolsun.oulu.fi es el enlace + superior de csd.bu.edu, que está a 5 + saltos. + +4.1.5 Oper + + Comando: OPER + Parámetros: <usuario> <password> + + El comando OPER se usa para que un usuario normal obtenga + privilegios de Operador. La combinación <usuario> y <password> es + necesaria para conseguir los privilegios de Operador. + + Si el cliente que envía el comando de OPER da un password correcto + para el usuario dado, el servidor informa al resto de la red del + nuevo Operador ejecutando un comando "MODE +O" para el nick del + cliente. + + El mensaje OPER es exclusivamente cliente-servidor. + + Respuestas numéricas: + + ERR_NEEDMOREPARAMS RPL_YOUREOPER + ERR_NOOPERHOST ERR_PASSWDMISMATCH + + Ejemplo: + + OPER foo bar ; Intenta registrarse como Operador + usando el nombre de usuario "foo" y + la clave "bar" + +4.1.6 Mensaje de salida + + Comando: QUIT + Parámetros: [<Mensaje de salida>] + + Una sesión de un cliente se finaliza con un mensaje de salida. El + servidor debe cerrar la conexión con un cliente que envía un mensaje + de salida. Si se da un <Mensaje de salida>, éste se enviará en lugar + del mensaje por defecto, el nick. + + Cuando hay netsplits (desconexión de dos servidores), el mensaje de + salida está formado por los nombres de los servidores involucrados, + separados por un espacio. El primer nombre es el servidor que aún + está conectado, el segundo el que ha desconectado. + + + + + +Oikarinen & Reed [Pág. 17] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + + Si, por cualquier otra razón, se cierra la conexión con un cliente + sin que el cliente envíe el comando QUIT (ej: el cliente muere y hay + un EOF - End Of File - en el socket), el servidor debe rellenar el + mensaje de salida con un mensaje que refleje la naturaleza de la + causa que ha hecho que ocurra. + + Respuestas numéricas: + + Ninguna. + + Ejemplos: + + QUIT :Me voy a comer ; Formato de mensaje + +4.1.7 Mensaje de salida del servidor + + Comando: SQUIT + Parámetros: <servidor> <comentario> + + + El mensaje SQUIT se necesita para tratar los servidores que + desconectan. Si un servidor quiere terminar la conexión con otro + servidor, debe enviar un mensaje SQUIT al otro servidor, con el + nombre del otro servidor como parámetro, lo que cierra su conexión + con el servidor que desconecta. + + Este comando está disponible a los Operadores para ayudar a mantener + una red de IRC conectada de forma ordenada. Los Operadores también + pueden ejecutar un comando SQUIT para una conexión remota entre + servidores. En este caso, el SQUIT debe analizarse por cada servidor + entre el Operador y el servidor remoto, actualizando el esquema de + la red mantenida por cada servidor de la forma que se explica más + abajo. + + El <comentario> debe ser indicado por los Operadores que ejecuten un + SQUIT para un servidor remoto (esto es, uno que no está conectado al + servidor en el que se encuentre el Operador), de forma que los demás + Operadores sepan la causa de la desconexión. El <comentario> también + lo rellenan los servidores, pudiendo incluir mensajes de error. + + Se requiere que los dos servidores a cada lado de la conexión que + finaliza envíen un mensaje SQUIT (a todas sus conexiones con otro + servidor), para que lo reciban todos los servidores detrás de ese + enlace. + + De la misma forma, un mensaje QUIT debe enviarse a los demás + servidores conectados a la red en representación de todos los + clientes tras ese enlace. Además, todos los miembros de un canal que + pierdan un miembro debido al split deben recibir un mensaje de + QUIT. + + + +Oikarinen & Reed [Pág. 18] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + + Si una conexión con un servidor finaliza prematuramente (ej: se cae + el servidor en el otro lado del enlace), el servidor que detecte la + desconexión debe informar al resto de la red que la conexión se ha + cerrado y rellenar el campo de comentario con algo apropiado. + + Respuestas numéricas: + + ERR_NOPRIVILEGES ERR_NOSUCHSERVER + + Ejemplo: + + SQUIT tolsun.oulu.fi :¿Enlace erróneo? ;El enlace del servidor + tolson.oulu.fi ha finalizado + por "Enlace erróneo" + + :Trillian SQUIT cm22.eng.umd.edu : Servidor fuera de control + ; Mensaje de servidor fuera de + control de Trillian para que + desconecte "cm22.eng.umd.edu" por + "Servidor fuera de control" + +4.2 Operaciones en un canal + + Este grupo de mensajes se refiere a la manipulación de canales, sus + propiedades (modos de canal) y sus contenidos (normalmente clientes). + Al implementarlos, son inevitables unas condiciones de "carrera", + cuando clientes en lados opuestos de una red envíen comandos que + acabarán colisionando. También se requiere que el servidor mantenga + un historial para verificar, cuando se de un parámetro <nick> si + éste ha cambiado. + +4.2.1 Mensaje de entrada al canal (JOIN) + + Comando: JOIN + Parámetros: <canal>{,<canal>} [<clave>{,<clave>}] + + El comando JOIN lo usa el cliente para empezar a escuchar un canal + específico. El que se permita a un cliente entrar al canal o no lo + verifica solamente el servidor al que está conectado el cliente; los + demás servidores automáticamente añaden el usuario al canal cuando + reciben el mensaje de otros servidores. Las condiciones que debe + cumplir el cliente son: + + 1. el usuario debe ser invitado si el canal está en modo + sólo invitados; + + 2. el <nick>/<nombre de usuario>/<nombre de host> del usuario + no debe cumplir ninguno de los bans activos; + + 3. debe pasarse la clave correcta si está activa en el canal. + + + +Oikarinen & Reed [Pág. 19] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + + Esto se discute con mayor detalle bajo el comando MODE (ver sevvión + 4.2.3 para más información). + + Una vez que el usuario ha entrado al canal, recibe anuncios sobre + todos los comandos que su servidor recibe que afecten al canal. Esto + incluye MODE, KICK, PART, QUIT y por supuesto PRIVMSG/NOTICE. El + comando JOIN debe enviarse a todos los servidores para que cada + servidor sepa dónde encontrar los usuarios de un canal. Esto permite + un envío óptimo de mensajes PRIVMSG/NOTICE al canal. + + Si se consigue entrar al canal, se envía al usuario el "topic" del + canal (usando RPL_TOPIC) y la lista de usuarios que están en el + canal (usando RPL_NAMREPLY), que debe incluir el usuario recién + entrado. + + Respuestas numéricas: + + ERR_NEEDMOREPARAMS ERR_BANNEDFROMCHAN + ERR_INVITEONLYCHAN ERR_BADCHANNELKEY + ERR_CHANNELISFULL ERR_BADCHANMASK + ERR_NOSUCHCHANNEL ERR_TOOMANYCHANNELS + RPL_TOPIC + + Ejemplos: + + JOIN #foobar ; unirse al canal #foobar. + + JOIN &foo fubar ; unirse al canal &foo usando como + clave "fubar". + + JOIN #foo,&bar fubar ; unirse al canal #foo usando la + clave "fubar" y &bar sin clave. + + JOIN #foo,#bar fubar,foobar ; unirse al canal #foo con la clave + "fubar" y el canal #bar clave + "foobar". + + JOIN #foo,#bar ; unirse a los canales #foo and #bar + + :WiZ JOIN #Twilight_zone ; mensaje JOIN de WiZ + +4.2.2 Mensaje de salida del canal (PART) + + Comando: PART + Parámetros: <canal>{,<canal>} + + El mensaje de salida provoca el borrado de la lista de usuarios + activos de todos los canales dados en la lista de parámetros. + + + + + +Oikarinen & Reed [Pág. 20] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + + Respuestas numéricas: + + ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL + ERR_NOTONCHANNEL + + Ejemplos: + + PART #twilight_zone ; abandonar el canal "#twilight_zone" + + PART #oz-ops,&group5 ; abandonar canales "&group5" y + "#oz-ops". + +4.2.3 Mensaje de modos + + Comando: MODE + + El comando MODE es un comando de doble propósito en el IRC. Permite + cambiar los modos tanto a los usuarios como a los canales. La razón + de ser de esta elección es que algún día los nicks serán obsoletos y + la propiedad equivalente será el canal.N. del T.:Realmente no sé qué + quieren decir aquí, ya que si uno no accede con un nick... ¿Cómo lo + hace? + + Al analizar mensajes MODE, se recomienda analizar primero el mensaje + completo y pasar los cambios después. + +4.2.3.1 Modos de canal + + Parámetros: <canal> {[+|-]|o|p|s|i|t|n|b|v} [<límite>] [<usuario>] + [<máscara de ban>] + + El comando MODE se proporciona para que los operadores de canal + puedan cambiar las características de su canal. Se necesita también + que los servidores puedan cambiar los modos de canal para poderse + crear operadores de canal. + + Los modos disponibles para canales son: + + o - dar/quitar privilegios de operador de canal + p - modo de canal privado + s - canal secreto + i - canal sólo invitados + t - sólo los operadores de canal pueden cambiar el topic + n - no se permiten mensajes al canal desde clientes de fuera + m - canal moderado + l - establecer un límite de usuarios en el canal + b - poner una máscara de ban para mantener usuarios fuera + v - dar/quitar voz en un canal moderado + k - poner clave al canal + + + + +Oikarinen & Reed [Pág. 21] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + + Al usar las opciones 'o' y 'b', hay una restricción de un total de 3 + por comando MODE. Esto quiere decir que cualquier combinación de 'o' + y 'b' no debe exceder de 3 en número de parámetros. + +4.2.3.2 Modos de usuario + + Parámetros: <nick> {[+|-]|i|w|s|o} + + Los modos de usuario son cambios que afectan a cómo ven los demás al + cliente o los mensajes "extra" que puede recibir. Un comando MODE + sólo se acepta si tanto el que lo envía como el nick dado como + parámetro coinciden. + + Los modos disponibles son: + + i - marca el usuario como invisible + s - marca al usuario para que reciba los mensajes del + servidor + w - el usuario recibe wallops (ver 5.6) + o - modo de Operador + + Puede haber modos adicionales disponibles más adelante. + + Si un usuario intenta hacerse operador usando la opción "+o", debe + ignorarse. En cambio, no hay restricción en que uno se "deopee" (con + "-o"). + + Respuestas numéricas: + + ERR_NEEDMOREPARAMS RPL_CHANNELMODEIS + ERR_CHANOPRIVSNEEDED ERR_NOSUCHNICK + ERR_NOTONCHANNEL ERR_KEYSET + RPL_BANLIST RPL_ENDOFBANLIST + ERR_UNKNOWNMODE ERR_NOSUCHCHANNEL + + ERR_USERSDONTMATCH RPL_UMODEIS + ERR_UMODEUNKNOWNFLAG + + Ejemplos: + + Uso de los modos de canal: + +MODE #Finnish +im ; El canal #Finnish es ahora moderado y + sólo para invitados + +MODE #Finnish +o Kilroy ; Da privilegios de "chanop" a Kilroy + en el canal #Finnish. + +MODE #Finnish +v Wiz ; Permite hablar a WiZ en #Finnish. + +MODE #Fins -s ; El canal #Fins deja de ser "secreto" + + +Oikarinen & Reed [Pág. 22] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + + +MODE #42 +k oulu ; Poner como clave del canal "oulu" + +MODE #eu-opers +l 10 ; Poner un límite de 10 usuarios en el + canal + +MODE &oulu +b ; Lista de máscaras de ban del canal + +MODE &oulu +b *!*@* ; Prohibe la entrada a todos los + usuarios + +MODE &oulu +b *!*@*.edu ; Prohíbe la entrada a cualquier + usuario con máscara de host *.edu + + Uso de los modos de usuario: + +:MODE WiZ -w ; Desactiva la recepción de mensajes + WALLOPS para WiZ + +:Angel MODE Angel +i ; Mensaje de Angel para hacerse + invisible + +MODE WiZ -o ; WiZ "deopeándose" (quitar estatus de + operador. El inverso no debe permitirse + a los usuarios ya que se saltaría el + comando OPER. + +4.2.4 Mensaje de tópico + + Comando: TOPIC + Parámetros: <canal> [<tópico>] + + El mensaje TOPIC se usa para cambiar o ver el tópico de un canal. El + tópico para el canal <canal> se devuelve si no se especifica. Si el + parámetro <tópico> está presente, se cambiará el tópico, si los + modos del canal lo permiten. + + Respuestas numéricas: + + ERR_NEEDMOREPARAMS ERR_NOTONCHANNEL + RPL_NOTOPIC RPL_TOPIC + ERR_CHANOPRIVSNEEDED + + Ejemplos: + + :Wiz TOPIC #test :Nuevo tópico ;El usuario WiZ pone un tópico + + TOPIC #test :otro tópico ;Pone el tópico "otro tópico" en + #test + + TOPIC #test ;Mirar el tópico de #test + + +Oikarinen & Reed [Pág. 23] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + +4.2.5 Mensaje de nombres + + Comando: NAMES + Parámetros: [<canal>{,<canal>}] + + Con el comando NAMES, un usuario puede listar todos los nicks que + sean visibles en cualquier canal que puedan ver. Los nombres de + canal que pueden ver son los que no son privados (+p) o secretos + (+s), o aquellos en los que se encuentran. El parámetro <canal> + especifica el (los) canal(es) de los cuales hay que devolver la + información si es posible. No hay mensaje de error si el nombre del + canal es incorrecto. + + Si no se especifica un parámetro <canal>, se da una lista de todos + los canales y sus ocupantes. Al final de la lista, aparecen los + usuarios que son visibles pero o bien no están en ningún canal o en + un canal visible, y se marcan como si estuviesen en el "canal" '*'. + + Respuestas numéricas: + + RPL_NAMREPLY RPL_ENDOFNAMES + + Ejemplos: + + NAMES #twilight_zone,#42 ;listar usuarios visibles en #42 y + #twilight_zone si puedes ver los + canales + + NAMES ;listar todos los canales y usuarios + visibles + +4.2.6 Mensaje de lista de canales + + Comando: LIST + Parámetros: [<canal>{,<canal>} [<servidor>]] + + El mensaje LIST se usa para listar los canales y sus tópicos. Si se + da el parámetro <canal>, solo se visualiza el estatus de ese canal. + Los canales privados se listan (sin el tópico) como canal "Prv" a no + ser que el cliente que genere la petición se encuentre en el canal. + De la misma forma, los canales secretos no se listan a menos que el + cliente sea miembro del canal en cuestión. + + Respuestas numéricas: + + ERR_NOSUCHSERVER RPL_LISTSTART + RPL_LIST RPL_LISTEND + + + + + + +Oikarinen & Reed [Pág. 24] + +RFC 1459 Protocolo de Charla Basada en Internet Mayo 1993 + + + Ejemplos: + + LIST ;Listar todos los canales + + LIST #twilight_zone,#42 ;Listar canales #twilight_zone y #42 + + +4.2.7 Mensaje de invitación a un canal + + Comando: INVITE + Parámetros: <nick> <canal> + + El mensaje INVITE se usa para invitar a otros usuarios a un canal. + El parámetro <nick> es el nick de la persona a invitar al canal + <canal>. No se requiere que el canal al que se invita al usuario + exista o sea un canal válido. Para invitar a alguien a un canal sólo + para invitados (+i), el cliente que envíe el mensaje INVITE debe ser + operador de canal en dicho canal. + + Respuest... [truncated message content] |
From: Toni G. <zo...@us...> - 2003-02-13 19:28:55
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-02-13 19:28:53 UTC Added files: doc/en/rfc1459.orig Log message: Documentacion: {en|es}/readme.www Documento con las direcciones. {en|es}/rfc1459.orig Documento del RFC original de IRC con su respectiva traduccion al castellano. es/rfc1459.unet Documento del RFC modificado traducido al castellano. ---------------------- diff included ---------------------- Index: ircdh/doc/en/rfc1459.orig diff -u /dev/null ircdh/doc/en/rfc1459.orig:1.1 --- /dev/null Thu Feb 13 11:28:53 2003 +++ ircdh/doc/en/rfc1459.orig Thu Feb 13 11:28:43 2003 @@ -0,0 +1,3643 @@ + + + + + + +Network Working Group J. Oikarinen +Request for Comments: 1459 D. Reed + May 1993 + + + Internet Relay Chat Protocol + +Status of This Memo + + This memo defines an Experimental Protocol for the Internet + community. Discussion and suggestions for improvement are requested. + Please refer to the current edition of the "IAB Official Protocol + Standards" for the standardization state and status of this protocol. + Distribution of this memo is unlimited. + +Abstract + + The IRC protocol was developed over the last 4 years since it was + first implemented as a means for users on a BBS to chat amongst + themselves. Now it supports a world-wide network of servers and + clients, and is stringing to cope with growth. Over the past 2 years, + the average number of users connected to the main IRC network has + grown by a factor of 10. + + The IRC protocol is a text-based protocol, with the simplest client + being any socket program capable of connecting to the server. + +Table of Contents + + 1. INTRODUCTION ............................................... 4 + 1.1 Servers ................................................ 4 + 1.2 Clients ................................................ 5 + 1.2.1 Operators .......................................... 5 + 1.3 Channels ................................................ 5 + 1.3.1 Channel Operators .................................... 6 + 2. THE IRC SPECIFICATION ....................................... 7 + 2.1 Overview ................................................ 7 + 2.2 Character codes ......................................... 7 + 2.3 Messages ................................................ 7 + 2.3.1 Message format in 'pseudo' BNF .................... 8 + 2.4 Numeric replies ......................................... 10 + 3. IRC Concepts ................................................ 10 + 3.1 One-to-one communication ................................ 10 + 3.2 One-to-many ............................................. 11 + 3.2.1 To a list .......................................... 11 + 3.2.2 To a group (channel) ............................... 11 + 3.2.3 To a host/server mask .............................. 12 + 3.3 One to all .............................................. 12 + + + +Oikarinen & Reed [Page 1] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + 3.3.1 Client to Client ................................... 12 + 3.3.2 Clients to Server .................................. 12 + 3.3.3 Server to Server ................................... 12 + 4. MESSAGE DETAILS ............................................. 13 + 4.1 Connection Registration ................................. 13 + 4.1.1 Password message ................................... 14 + 4.1.2 Nickname message ................................... 14 + 4.1.3 User message ....................................... 15 + 4.1.4 Server message ..................................... 16 + 4.1.5 Operator message ................................... 17 + 4.1.6 Quit message ....................................... 17 + 4.1.7 Server Quit message ................................ 18 + 4.2 Channel operations ...................................... 19 + 4.2.1 Join message ....................................... 19 + 4.2.2 Part message ....................................... 20 + 4.2.3 Mode message ....................................... 21 + 4.2.3.1 Channel modes ................................. 21 + 4.2.3.2 User modes .................................... 22 + 4.2.4 Topic message ...................................... 23 + 4.2.5 Names message ...................................... 24 + 4.2.6 List message ....................................... 24 + 4.2.7 Invite message ..................................... 25 + 4.2.8 Kick message ....................................... 25 + 4.3 Server queries and commands ............................. 26 + 4.3.1 Version message .................................... 26 + 4.3.2 Stats message ...................................... 27 + 4.3.3 Links message ...................................... 28 + 4.3.4 Time message ....................................... 29 + 4.3.5 Connect message .................................... 29 + 4.3.6 Trace message ...................................... 30 + 4.3.7 Admin message ...................................... 31 + 4.3.8 Info message ....................................... 31 + 4.4 Sending messages ........................................ 32 + 4.4.1 Private messages ................................... 32 + 4.4.2 Notice messages .................................... 33 + 4.5 User-based queries ...................................... 33 + 4.5.1 Who query .......................................... 33 + 4.5.2 Whois query ........................................ 34 + 4.5.3 Whowas message ..................................... 35 + 4.6 Miscellaneous messages .................................. 35 + 4.6.1 Kill message ....................................... 36 + 4.6.2 Ping message ....................................... 37 + 4.6.3 Pong message ....................................... 37 + 4.6.4 Error message ...................................... 38 + 5. OPTIONAL MESSAGES ........................................... 38 + 5.1 Away message ............................................ 38 + 5.2 Rehash command .......................................... 39 + 5.3 Restart command ......................................... 39 + + + +Oikarinen & Reed [Page 2] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + 5.4 Summon message .......................................... 40 + 5.5 Users message ........................................... 40 + 5.6 Operwall command ........................................ 41 + 5.7 Userhost message ........................................ 42 + 5.8 Ison message ............................................ 42 + 6. REPLIES ..................................................... 43 + 6.1 Error Replies ........................................... 43 + 6.2 Command responses ....................................... 48 + 6.3 Reserved numerics ....................................... 56 + 7. Client and server authentication ............................ 56 + 8. Current Implementations Details ............................. 56 + 8.1 Network protocol: TCP ................................... 57 + 8.1.1 Support of Unix sockets ............................ 57 + 8.2 Command Parsing ......................................... 57 + 8.3 Message delivery ........................................ 57 + 8.4 Connection 'Liveness' ................................... 58 + 8.5 Establishing a server-client connection ................. 58 + 8.6 Establishing a server-server connection ................. 58 + 8.6.1 State information exchange when connecting ......... 59 + 8.7 Terminating server-client connections ................... 59 + 8.8 Terminating server-server connections ................... 59 + 8.9 Tracking nickname changes ............................... 60 + 8.10 Flood control of clients ............................... 60 + 8.11 Non-blocking lookups ................................... 61 + 8.11.1 Hostname (DNS) lookups ............................ 61 + 8.11.2 Username (Ident) lookups .......................... 61 + 8.12 Configuration file ..................................... 61 + 8.12.1 Allowing clients to connect ....................... 62 + 8.12.2 Operators ......................................... 62 + 8.12.3 Allowing servers to connect ....................... 62 + 8.12.4 Administrivia ..................................... 63 + 8.13 Channel membership ..................................... 63 + 9. Current problems ............................................ 63 + 9.1 Scalability ............................................. 63 + 9.2 Labels .................................................. 63 + 9.2.1 Nicknames .......................................... 63 + 9.2.2 Channels ........................................... 64 + 9.2.3 Servers ............................................ 64 + 9.3 Algorithms .............................................. 64 + 10. Support and availability ................................... 64 + 11. Security Considerations .................................... 65 + 12. Authors' Addresses ......................................... 65 + + + + + + + + + +Oikarinen & Reed [Page 3] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + +1. INTRODUCTION + + The IRC (Internet Relay Chat) protocol has been designed over a + number of years for use with text based conferencing. This document + describes the current IRC protocol. + + The IRC protocol has been developed on systems using the TCP/IP + network protocol, although there is no requirement that this remain + the only sphere in which it operates. + + IRC itself is a teleconferencing system, which (through the use of + the client-server model) is well-suited to running on many machines + in a distributed fashion. A typical setup involves a single process + (the server) forming a central point for clients (or other servers) + to connect to, performing the required message delivery/multiplexing + and other functions. + +1.1 Servers + + The server forms the backbone of IRC, providing a point to which + clients may connect to to talk to each other, and a point for other + servers to connect to, forming an IRC network. The only network + configuration allowed for IRC servers is that of a spanning tree [see + Fig. 1] where each server acts as a central node for the rest of the + net it sees. + + + [ Server 15 ] [ Server 13 ] [ Server 14] + / \ / + / \ / + [ Server 11 ] ------ [ Server 1 ] [ Server 12] + / \ / + / \ / + [ Server 2 ] [ Server 3 ] + / \ \ + / \ \ + [ Server 4 ] [ Server 5 ] [ Server 6 ] + / | \ / + / | \ / + / | \____ / + / | \ / + [ Server 7 ] [ Server 8 ] [ Server 9 ] [ Server 10 ] + + : + [ etc. ] + : + + [ Fig. 1. Format of IRC server network ] + + + +Oikarinen & Reed [Page 4] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + +1.2 Clients + + A client is anything connecting to a server that is not another + server. Each client is distinguished from other clients by a unique + nickname having a maximum length of nine (9) characters. See the + protocol grammar rules for what may and may not be used in a + nickname. In addition to the nickname, all servers must have the + following information about all clients: the real name of the host + that the client is running on, the username of the client on that + host, and the server to which the client is connected. + +1.2.1 Operators + + To allow a reasonable amount of order to be kept within the IRC + network, a special class of clients (operators) is allowed to perform + general maintenance functions on the network. Although the powers + granted to an operator can be considered as 'dangerous', they are + nonetheless required. Operators should be able to perform basic + network tasks such as disconnecting and reconnecting servers as + needed to prevent long-term use of bad network routing. In + recognition of this need, the protocol discussed herein provides for + operators only to be able to perform such functions. See sections + 4.1.7 (SQUIT) and 4.3.5 (CONNECT). + + A more controversial power of operators is the ability to remove a + user from the connected network by 'force', i.e. operators are able + to close the connection between any client and server. The + justification for this is delicate since its abuse is both + destructive and annoying. For further details on this type of + action, see section 4.6.1 (KILL). + +1.3 Channels + + A channel is a named group of one or more clients which will all + receive messages addressed to that channel. The channel is created + implicitly when the first client joins it, and the channel ceases to + exist when the last client leaves it. While channel exists, any + client can reference the channel using the name of the channel. + + Channels names are strings (beginning with a '&' or '#' character) of + length up to 200 characters. Apart from the the requirement that the + first character being either '&' or '#'; the only restriction on a + channel name is that it may not contain any spaces (' '), a control G + (^G or ASCII 7), or a comma (',' which is used as a list item + separator by the protocol). + + There are two types of channels allowed by this protocol. One is a + distributed channel which is known to all the servers that are + + + +Oikarinen & Reed [Page 5] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + connected to the network. These channels are marked by the first + character being a only clients on the server where it exists may join + it. These are distinguished by a leading '&' character. On top of + these two types, there are the various channel modes available to + alter the characteristics of individual channels. See section 4.2.3 + (MODE command) for more details on this. + + To create a new channel or become part of an existing channel, a user + is required to JOIN the channel. If the channel doesn't exist prior + to joining, the channel is created and the creating user becomes a + channel operator. If the channel already exists, whether or not your + request to JOIN that channel is honoured depends on the current modes + of the channel. For example, if the channel is invite-only, (+i), + then you may only join if invited. As part of the protocol, a user + may be a part of several channels at once, but a limit of ten (10) + channels is recommended as being ample for both experienced and + novice users. See section 8.13 for more information on this. + + If the IRC network becomes disjoint because of a split between two + servers, the channel on each side is only composed of those clients + which are connected to servers on the respective sides of the split, + possibly ceasing to exist on one side of the split. When the split + is healed, the connecting servers announce to each other who they + think is in each channel and the mode of that channel. If the + channel exists on both sides, the JOINs and MODEs are interpreted in + an inclusive manner so that both sides of the new connection will + agree about which clients are in the channel and what modes the + channel has. + +1.3.1 Channel Operators + + The channel operator (also referred to as a "chop" or "chanop") on a + given channel is considered to 'own' that channel. In recognition of + this status, channel operators are endowed with certain powers which + enable them to keep control and some sort of sanity in their channel. + As an owner of a channel, a channel operator is not required to have + reasons for their actions, although if their actions are generally + antisocial or otherwise abusive, it might be reasonable to ask an IRC + operator to intervene, or for the usersjust leave and go elsewhere + and form their own channel. + + The commands which may only be used by channel operators are: + + KICK - Eject a client from the channel + MODE - Change the channel's mode + INVITE - Invite a client to an invite-only channel (mode +i) + TOPIC - Change the channel topic in a mode +t channel + + + + +Oikarinen & Reed [Page 6] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + A channel operator is identified by the '@' symbol next to their + nickname whenever it is associated with a channel (ie replies to the + NAMES, WHO and WHOIS commands). + +2. The IRC Specification + +2.1 Overview + + The protocol as described herein is for use both with server to + server and client to server connections. There are, however, more + restrictions on client connections (which are considered to be + untrustworthy) than on server connections. + +2.2 Character codes + + No specific character set is specified. The protocol is based on a a + set of codes which are composed of eight (8) bits, making up an + octet. Each message may be composed of any number of these octets; + however, some octet values are used for control codes which act as + message delimiters. + + Regardless of being an 8-bit protocol, the delimiters and keywords + are such that protocol is mostly usable from USASCII terminal and a + telnet connection. + + Because of IRC's scandanavian origin, the characters {}| are + considered to be the lower case equivalents of the characters []\, + respectively. This is a critical issue when determining the + equivalence of two nicknames. + +2.3 Messages + + Servers and clients send eachother messages which may or may not + generate a reply. If the message contains a valid command, as + described in later sections, the client should expect a reply as + specified but it is not advised to wait forever for the reply; client + to server and server to server communication is essentially + asynchronous in nature. + + Each IRC message may consist of up to three main parts: the prefix + (optional), the command, and the command parameters (of which there + may be up to 15). The prefix, command, and all parameters are + separated by one (or more) ASCII space character(s) (0x20). + + The presence of a prefix is indicated with a single leading ASCII + colon character (':', 0x3b), which must be the first character of the + message itself. There must be no gap (whitespace) between the colon + and the prefix. The prefix is used by servers to indicate the true + + + +Oikarinen & Reed [Page 7] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + origin of the message. If the prefix is missing from the message, it + is assumed to have originated from the connection from which it was + received. Clients should not use prefix when sending a message from + themselves; if they use a prefix, the only valid prefix is the + registered nickname associated with the client. If the source + identified by the prefix cannot be found from the server's internal + database, or if the source is registered from a different link than + from which the message arrived, the server must ignore the message + silently. + + The command must either be a valid IRC command or a three (3) digit + number represented in ASCII text. + + IRC messages are always lines of characters terminated with a CR-LF + (Carriage Return - Line Feed) pair, and these messages shall not + exceed 512 characters in length, counting all characters including + the trailing CR-LF. Thus, there are 510 characters maximum allowed + for the command and its parameters. There is no provision for + continuation message lines. See section 7 for more details about + current implementations. + +2.3.1 Message format in 'pseudo' BNF + + The protocol messages must be extracted from the contiguous stream of + octets. The current solution is to designate two characters, CR and + LF, as message separators. Empty messages are silently ignored, + which permits use of the sequence CR-LF between messages + without extra problems. + + The extracted message is parsed into the components <prefix>, + <command> and list of parameters matched either by <middle> or + <trailing> components. + + The BNF representation for this is: + + +<message> ::= [':' <prefix> <SPACE> ] <command> <params> <crlf> +<prefix> ::= <servername> | <nick> [ '!' <user> ] [ '@' <host> ] +<command> ::= <letter> { <letter> } | <number> <number> <number> +<SPACE> ::= ' ' { ' ' } +<params> ::= <SPACE> [ ':' <trailing> | <middle> <params> ] + +<middle> ::= <Any *non-empty* sequence of octets not including SPACE + or NUL or CR or LF, the first of which may not be ':'> +<trailing> ::= <Any, possibly *empty*, sequence of octets not including + NUL or CR or LF> + +<crlf> ::= CR LF + + + +Oikarinen & Reed [Page 8] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + +NOTES: + + 1) <SPACE> is consists only of SPACE character(s) (0x20). + Specially notice that TABULATION, and all other control + characters are considered NON-WHITE-SPACE. + + 2) After extracting the parameter list, all parameters are equal, + whether matched by <middle> or <trailing>. <Trailing> is just + a syntactic trick to allow SPACE within parameter. + + 3) The fact that CR and LF cannot appear in parameter strings is + just artifact of the message framing. This might change later. + + 4) The NUL character is not special in message framing, and + basically could end up inside a parameter, but as it would + cause extra complexities in normal C string handling. Therefore + NUL is not allowed within messages. + + 5) The last parameter may be an empty string. + + 6) Use of the extended prefix (['!' <user> ] ['@' <host> ]) must + not be used in server to server communications and is only + intended for server to client messages in order to provide + clients with more useful information about who a message is + from without the need for additional queries. + + Most protocol messages specify additional semantics and syntax for + the extracted parameter strings dictated by their position in the + list. For example, many server commands will assume that the first + parameter after the command is the list of targets, which can be + described with: + + <target> ::= <to> [ "," <target> ] + <to> ::= <channel> | <user> '@' <servername> | <nick> | <mask> + <channel> ::= ('#' | '&') <chstring> + <servername> ::= <host> + <host> ::= see RFC 952 [DNS:4] for details on allowed hostnames + <nick> ::= <letter> { <letter> | <number> | <special> } + <mask> ::= ('#' | '$') <chstring> + <chstring> ::= <any 8bit code except SPACE, BELL, NUL, CR, LF and + comma (',')> + + Other parameter syntaxes are: + + <user> ::= <nonwhite> { <nonwhite> } + <letter> ::= 'a' ... 'z' | 'A' ... 'Z' + <number> ::= '0' ... '9' + <special> ::= '-' | '[' | ']' | '\' | '`' | '^' | '{' | '}' + + + +Oikarinen & Reed [Page 9] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + <nonwhite> ::= <any 8bit code except SPACE (0x20), NUL (0x0), CR + (0xd), and LF (0xa)> + +2.4 Numeric replies + + Most of the messages sent to the server generate a reply of some + sort. The most common reply is the numeric reply, used for both + errors and normal replies. The numeric reply must be sent as one + message consisting of the sender prefix, the three digit numeric, and + the target of the reply. A numeric reply is not allowed to originate + from a client; any such messages received by a server are silently + dropped. In all other respects, a numeric reply is just like a normal + message, except that the keyword is made up of 3 numeric digits + rather than a string of letters. A list of different replies is + supplied in section 6. + +3. IRC Concepts. + + This section is devoted to describing the actual concepts behind the + organization of the IRC protocol and how the current + implementations deliver different classes of messages. + + + + 1--\ + A D---4 + 2--/ \ / + B----C + / \ + 3 E + + Servers: A, B, C, D, E Clients: 1, 2, 3, 4 + + [ Fig. 2. Sample small IRC network ] + +3.1 One-to-one communication + + Communication on a one-to-one basis is usually only performed by + clients, since most server-server traffic is not a result of servers + talking only to each other. To provide a secure means for clients to + talk to each other, it is required that all servers be able to send a + message in exactly one direction along the spanning tree in order to + reach any client. The path of a message being delivered is the + shortest path between any two points on the spanning tree. + + The following examples all refer to Figure 2 above. + + + + + +Oikarinen & Reed [Page 10] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + +Example 1: + A message between clients 1 and 2 is only seen by server A, which + sends it straight to client 2. + +Example 2: + A message between clients 1 and 3 is seen by servers A & B, and + client 3. No other clients or servers are allowed see the message. + +Example 3: + A message between clients 2 and 4 is seen by servers A, B, C & D + and client 4 only. + +3.2 One-to-many + + The main goal of IRC is to provide a forum which allows easy and + efficient conferencing (one to many conversations). IRC offers + several means to achieve this, each serving its own purpose. + +3.2.1 To a list + + The least efficient style of one-to-many conversation is through + clients talking to a 'list' of users. How this is done is almost + self explanatory: the client gives a list of destinations to which + the message is to be delivered and the server breaks it up and + dispatches a separate copy of the message to each given destination. + This isn't as efficient as using a group since the destination list + is broken up and the dispatch sent without checking to make sure + duplicates aren't sent down each path. + +3.2.2 To a group (channel) + + In IRC the channel has a role equivalent to that of the multicast + group; their existence is dynamic (coming and going as people join + and leave channels) and the actual conversation carried out on a + channel is only sent to servers which are supporting users on a given + channel. If there are multiple users on a server in the same + channel, the message text is sent only once to that server and then + sent to each client on the channel. This action is then repeated for + each client-server combination until the original message has fanned + out and reached each member of the channel. + + The following examples all refer to Figure 2. + +Example 4: + Any channel with 1 client in it. Messages to the channel go to the + server and then nowhere else. + + + + + +Oikarinen & Reed [Page 11] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + +Example 5: + 2 clients in a channel. All messages traverse a path as if they + were private messages between the two clients outside a channel. + +Example 6: + Clients 1, 2 and 3 in a channel. All messages to the channel are + sent to all clients and only those servers which must be traversed + by the message if it were a private message to a single client. If + client 1 sends a message, it goes back to client 2 and then via + server B to client 3. + +3.2.3 To a host/server mask + + To provide IRC operators with some mechanism to send messages to a + large body of related users, host and server mask messages are + provided. These messages are sent to users whose host or server + information match that of the mask. The messages are only sent to + locations where users are, in a fashion similar to that of channels. + +3.3 One-to-all + + The one-to-all type of message is better described as a broadcast + message, sent to all clients or servers or both. On a large network + of users and servers, a single message can result in a lot of traffic + being sent over the network in an effort to reach all of the desired + destinations. + + For some messages, there is no option but to broadcast it to all + servers so that the state information held by each server is + reasonably consistent between servers. + +3.3.1 Client-to-Client + + There is no class of message which, from a single message, results in + a message being sent to every other client. + +3.3.2 Client-to-Server + + Most of the commands which result in a change of state information + (such as channel membership, channel mode, user status, etc) must be + sent to all servers by default, and this distribution may not be + changed by the client. + +3.3.3 Server-to-Server. + + While most messages between servers are distributed to all 'other' + servers, this is only required for any message that affects either a + user, channel or server. Since these are the basic items found in + + + +Oikarinen & Reed [Page 12] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + IRC, nearly all messages originating from a server are broadcast to + all other connected servers. + +4. Message details + + On the following pages are descriptions of each message recognized by + the IRC server and client. All commands described in this section + must be implemented by any server for this protocol. + + Where the reply ERR_NOSUCHSERVER is listed, it means that the + <server> parameter could not be found. The server must not send any + other replies after this for that command. + + The server to which a client is connected is required to parse the + complete message, returning any appropriate errors. If the server + encounters a fatal error while parsing a message, an error must be + sent back to the client and the parsing terminated. A fatal error + may be considered to be incorrect command, a destination which is + otherwise unknown to the server (server, nick or channel names fit + this category), not enough parameters or incorrect privileges. + + If a full set of parameters is presented, then each must be checked + for validity and appropriate responses sent back to the client. In + the case of messages which use parameter lists using the comma as an + item separator, a reply must be sent for each item. + + In the examples below, some messages appear using the full format: + + :Name COMMAND parameter list + + Such examples represent a message from "Name" in transit between + servers, where it is essential to include the name of the original + sender of the message so remote servers may send back a reply along + the correct path. + +4.1 Connection Registration + + The commands described here are used to register a connection with an + IRC server as either a user or a server as well as correctly + disconnect. + + A "PASS" command is not required for either client or server + connection to be registered, but it must precede the server message + or the latter of the NICK/USER combination. It is strongly + recommended that all server connections have a password in order to + give some level of security to the actual connections. The + recommended order for a client to register is as follows: + + + + +Oikarinen & Reed [Page 13] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + 1. Pass message + 2. Nick message + 3. User message + +4.1.1 Password message + + + Command: PASS + Parameters: <password> + + The PASS command is used to set a 'connection password'. The + password can and must be set before any attempt to register the + connection is made. Currently this requires that clients send a PASS + command before sending the NICK/USER combination and servers *must* + send a PASS command before any SERVER command. The password supplied + must match the one contained in the C/N lines (for servers) or I + lines (for clients). It is possible to send multiple PASS commands + before registering but only the last one sent is used for + verification and it may not be changed once registered. Numeric + Replies: + + ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED + + Example: + + PASS secretpasswordhere + +4.1.2 Nick message + + Command: NICK + Parameters: <nickname> [ <hopcount> ] + + NICK message is used to give user a nickname or change the previous + one. The <hopcount> parameter is only used by servers to indicate + how far away a nick is from its home server. A local connection has + a hopcount of 0. If supplied by a client, it must be ignored. + + If a NICK message arrives at a server which already knows about an + identical nickname for another client, a nickname collision occurs. + As a result of a nickname collision, all instances of the nickname + are removed from the server's database, and a KILL command is issued + to remove the nickname from all other server's database. If the NICK + message causing the collision was a nickname change, then the + original (old) nick must be removed as well. + + If the server recieves an identical NICK from a client which is + directly connected, it may issue an ERR_NICKCOLLISION to the local + client, drop the NICK command, and not generate any kills. + + + +Oikarinen & Reed [Page 14] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + Numeric Replies: + + ERR_NONICKNAMEGIVEN ERR_ERRONEUSNICKNAME + ERR_NICKNAMEINUSE ERR_NICKCOLLISION + + Example: + + NICK Wiz ; Introducing new nick "Wiz". + + :WiZ NICK Kilroy ; WiZ changed his nickname to Kilroy. + +4.1.3 User message + + Command: USER + Parameters: <username> <hostname> <servername> <realname> + + The USER message is used at the beginning of connection to specify + the username, hostname, servername and realname of s new user. It is + also used in communication between servers to indicate new user + arriving on IRC, since only after both USER and NICK have been + received from a client does a user become registered. + + Between servers USER must to be prefixed with client's NICKname. + Note that hostname and servername are normally ignored by the IRC + server when the USER command comes from a directly connected client + (for security reasons), but they are used in server to server + communication. This means that a NICK must always be sent to a + remote server when a new user is being introduced to the rest of the + network before the accompanying USER is sent. + + It must be noted that realname parameter must be the last parameter, + because it may contain space characters and must be prefixed with a + colon (':') to make sure this is recognised as such. + + Since it is easy for a client to lie about its username by relying + solely on the USER message, the use of an "Identity Server" is + recommended. If the host which a user connects from has such a + server enabled the username is set to that as in the reply from the + "Identity Server". + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED + + Examples: + + + USER guest tolmoon tolsun :Ronnie Reagan + + + +Oikarinen & Reed [Page 15] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + ; User registering themselves with a + username of "guest" and real name + "Ronnie Reagan". + + + :testnick USER guest tolmoon tolsun :Ronnie Reagan + ; message between servers with the + nickname for which the USER command + belongs to + +4.1.4 Server message + + Command: SERVER + Parameters: <servername> <hopcount> <info> + + The server message is used to tell a server that the other end of a + new connection is a server. This message is also used to pass server + data over whole net. When a new server is connected to net, + information about it be broadcast to the whole network. <hopcount> + is used to give all servers some internal information on how far away + all servers are. With a full server list, it would be possible to + construct a map of the entire server tree, but hostmasks prevent this + from being done. + + The SERVER message must only be accepted from either (a) a connection + which is yet to be registered and is attempting to register as a + server, or (b) an existing connection to another server, in which + case the SERVER message is introducing a new server behind that + server. + + Most errors that occur with the receipt of a SERVER command result in + the connection being terminated by the destination host (target + SERVER). Error replies are usually sent using the "ERROR" command + rather than the numeric since the ERROR command has several useful + properties which make it useful here. + + If a SERVER message is parsed and attempts to introduce a server + which is already known to the receiving server, the connection from + which that message must be closed (following the correct procedures), + since a duplicate route to a server has formed and the acyclic nature + of the IRC tree broken. + + Numeric Replies: + + ERR_ALREADYREGISTRED + + Example: + + + + +Oikarinen & Reed [Page 16] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + +SERVER test.oulu.fi 1 :[tolsun.oulu.fi] Experimental server + ; New server test.oulu.fi introducing + itself and attempting to register. The + name in []'s is the hostname for the + host running test.oulu.fi. + + +:tolsun.oulu.fi SERVER csd.bu.edu 5 :BU Central Server + ; Server tolsun.oulu.fi is our uplink + for csd.bu.edu which is 5 hops away. + +4.1.5 Oper + + Command: OPER + Parameters: <user> <password> + + OPER message is used by a normal user to obtain operator privileges. + The combination of <user> and <password> are required to gain + Operator privileges. + + If the client sending the OPER command supplies the correct password + for the given user, the server then informs the rest of the network + of the new operator by issuing a "MODE +o" for the clients nickname. + + The OPER message is client-server only. + + Numeric Replies: + + ERR_NEEDMOREPARAMS RPL_YOUREOPER + ERR_NOOPERHOST ERR_PASSWDMISMATCH + + Example: + + OPER foo bar ; Attempt to register as an operator + using a username of "foo" and "bar" as + the password. + +4.1.6 Quit + + Command: QUIT + Parameters: [<Quit message>] + + A client session is ended with a quit message. The server must close + the connection to a client which sends a QUIT message. If a "Quit + Message" is given, this will be sent instead of the default message, + the nickname. + + When netsplits (disconnecting of two servers) occur, the quit message + + + +Oikarinen & Reed [Page 17] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + is composed of the names of two servers involved, separated by a + space. The first name is that of the server which is still connected + and the second name is that of the server that has become + disconnected. + + If, for some other reason, a client connection is closed without the + client issuing a QUIT command (e.g. client dies and EOF occurs + on socket), the server is required to fill in the quit message with + some sort of message reflecting the nature of the event which + caused it to happen. + + Numeric Replies: + + None. + + Examples: + + QUIT :Gone to have lunch ; Preferred message format. + +4.1.7 Server quit message + + Command: SQUIT + Parameters: <server> <comment> + + The SQUIT message is needed to tell about quitting or dead servers. + If a server wishes to break the connection to another server it must + send a SQUIT message to the other server, using the the name of the + other server as the server parameter, which then closes its + connection to the quitting server. + + This command is also available operators to help keep a network of + IRC servers connected in an orderly fashion. Operators may also + issue an SQUIT message for a remote server connection. In this case, + the SQUIT must be parsed by each server inbetween the operator and + the remote server, updating the view of the network held by each + server as explained below. + + The <comment> should be supplied by all operators who execute a SQUIT + for a remote server (that is not connected to the server they are + currently on) so that other operators are aware for the reason of + this action. The <comment> is also filled in by servers which may + place an error or similar message here. + + Both of the servers which are on either side of the connection being + closed are required to to send out a SQUIT message (to all its other + server connections) for all other servers which are considered to be + behind that link. + + + + +Oikarinen & Reed [Page 18] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + Similarly, a QUIT message must be sent to the other connected servers + rest of the network on behalf of all clients behind that link. In + addition to this, all channel members of a channel which lost a + member due to the split must be sent a QUIT message. + + If a server connection is terminated prematurely (e.g. the server on + the other end of the link died), the server which detects + this disconnection is required to inform the rest of the network + that the connection has closed and fill in the comment field + with something appropriate. + + Numeric replies: + + ERR_NOPRIVILEGES ERR_NOSUCHSERVER + + Example: + + SQUIT tolsun.oulu.fi :Bad Link ? ; the server link tolson.oulu.fi has + been terminated because of "Bad Link". + + :Trillian SQUIT cm22.eng.umd.edu :Server out of control + ; message from Trillian to disconnect + "cm22.eng.umd.edu" from the net + because "Server out of control". + +4.2 Channel operations + + This group of messages is concerned with manipulating channels, their + properties (channel modes), and their contents (typically clients). + In implementing these, a number of race conditions are inevitable + when clients at opposing ends of a network send commands which will + ultimately clash. It is also required that servers keep a nickname + history to ensure that wherever a <nick> parameter is given, the + server check its history in case it has recently been changed. + +4.2.1 Join message + + Command: JOIN + Parameters: <channel>{,<channel>} [<key>{,<key>}] + + The JOIN command is used by client to start listening a specific + channel. Whether or not a client is allowed to join a channel is + checked only by the server the client is connected to; all other + servers automatically add the user to the channel when it is received + from other servers. The conditions which affect this are as follows: + + 1. the user must be invited if the channel is invite-only; + + + + +Oikarinen & Reed [Page 19] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + 2. the user's nick/username/hostname must not match any + active bans; + + 3. the correct key (password) must be given if it is set. + + These are discussed in more detail under the MODE command (see + section 4.2.3 for more details). + + Once a user has joined a channel, they receive notice about all + commands their server receives which affect the channel. This + includes MODE, KICK, PART, QUIT and of course PRIVMSG/NOTICE. The + JOIN command needs to be broadcast to all servers so that each server + knows where to find the users who are on the channel. This allows + optimal delivery of PRIVMSG/NOTICE messages to the channel. + + If a JOIN is successful, the user is then sent the channel's topic + (using RPL_TOPIC) and the list of users who are on the channel (using + RPL_NAMREPLY), which must include the user joining. + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_BANNEDFROMCHAN + ERR_INVITEONLYCHAN ERR_BADCHANNELKEY + ERR_CHANNELISFULL ERR_BADCHANMASK + ERR_NOSUCHCHANNEL ERR_TOOMANYCHANNELS + RPL_TOPIC + + Examples: + + JOIN #foobar ; join channel #foobar. + + JOIN &foo fubar ; join channel &foo using key "fubar". + + JOIN #foo,&bar fubar ; join channel #foo using key "fubar" + and &bar using no key. + + JOIN #foo,#bar fubar,foobar ; join channel #foo using key "fubar". + and channel #bar using key "foobar". + + JOIN #foo,#bar ; join channels #foo and #bar. + + :WiZ JOIN #Twilight_zone ; JOIN message from WiZ + +4.2.2 Part message + + Command: PART + Parameters: <channel>{,<channel>} + + + + +Oikarinen & Reed [Page 20] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + The PART message causes the client sending the message to be removed + from the list of active users for all given channels listed in the + parameter string. + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL + ERR_NOTONCHANNEL + + Examples: + + PART #twilight_zone ; leave channel "#twilight_zone" + + PART #oz-ops,&group5 ; leave both channels "&group5" and + "#oz-ops". + +4.2.3 Mode message + + Command: MODE + + The MODE command is a dual-purpose command in IRC. It allows both + usernames and channels to have their mode changed. The rationale for + this choice is that one day nicknames will be obsolete and the + equivalent property will be the channel. + + When parsing MODE messages, it is recommended that the entire message + be parsed first and then the changes which resulted then passed on. + +4.2.3.1 Channel modes + + Parameters: <channel> {[+|-]|o|p|s|i|t|n|b|v} [<limit>] [<user>] + [<ban mask>] + + The MODE command is provided so that channel operators may change the + characteristics of `their' channel. It is also required that servers + be able to change channel modes so that channel operators may be + created. + + The various modes available for channels are as follows: + + o - give/take channel operator privileges; + p - private channel flag; + s - secret channel flag; + i - invite-only channel flag; + t - topic settable by channel operator only flag; + n - no messages to channel from clients on the outside; + m - moderated channel; + l - set the user limit to channel; + + + +Oikarinen & Reed [Page 21] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + b - set a ban mask to keep users out; + v - give/take the ability to speak on a moderated channel; + k - set a channel key (password). + + When using the 'o' and 'b' options, a restriction on a total of three + per mode command has been imposed. That is, any combination of 'o' + and + +4.2.3.2 User modes + + Parameters: <nickname> {[+|-]|i|w|s|o} + + The user MODEs are typically changes which affect either how the + client is seen by others or what 'extra' messages the client is sent. + A user MODE command may only be accepted if both the sender of the + message and the nickname given as a parameter are both the same. + + The available modes are as follows: + + i - marks a users as invisible; + s - marks a user for receipt of server notices; + w - user receives wallops; + o - operator flag. + + Additional modes may be available later on. + + If a user attempts to make themselves an operator using the "+o" + flag, the attempt should be ignored. There is no restriction, + however, on anyone `deopping' themselves (using "-o"). Numeric + Replies: + + ERR_NEEDMOREPARAMS RPL_CHANNELMODEIS + ERR_CHANOPRIVSNEEDED ERR_NOSUCHNICK + ERR_NOTONCHANNEL ERR_KEYSET + RPL_BANLIST RPL_ENDOFBANLIST + ERR_UNKNOWNMODE ERR_NOSUCHCHANNEL + + ERR_USERSDONTMATCH RPL_UMODEIS + ERR_UMODEUNKNOWNFLAG + + Examples: + + Use of Channel Modes: + +MODE #Finnish +im ; Makes #Finnish channel moderated and + 'invite-only'. + +MODE #Finnish +o Kilroy ; Gives 'chanop' privileges to Kilroy on + + + +Oikarinen & Reed [Page 22] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + channel #Finnish. + +MODE #Finnish +v Wiz ; Allow WiZ to speak on #Finnish. + +MODE #Fins -s ; Removes 'secret' flag from channel + #Fins. + +MODE #42 +k oulu ; Set the channel key to "oulu". + +MODE #eu-opers +l 10 ; Set the limit for the number of users + on channel to 10. + +MODE &oulu +b ; list ban masks set for channel. + +MODE &oulu +b *!*@* ; prevent all users from joining. + +MODE &oulu +b *!*@*.edu ; prevent any user from a hostname + matching *.edu from joining. + + Use of user Modes: + +:MODE WiZ -w ; turns reception of WALLOPS messages + off for WiZ. + +:Angel MODE Angel +i ; Message from Angel to make themselves + invisible. + +MODE WiZ -o ; WiZ 'deopping' (removing operator + status). The plain reverse of this + command ("MODE WiZ +o") must not be + allowed from users since would bypass + the OPER command. + +4.2.4 Topic message + + Command: TOPIC + Parameters: <channel> [<topic>] + + The TOPIC message is used to change or view the topic of a channel. + The topic for channel <channel> is returned if there is no <topic> + given. If the <topic> parameter is present, the topic for that + channel will be changed, if the channel modes permit this action. + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_NOTONCHANNEL + RPL_NOTOPIC RPL_TOPIC + ERR_CHANOPRIVSNEEDED + + + +Oikarinen & Reed [Page 23] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + Examples: + + :Wiz TOPIC #test :New topic ;User Wiz setting the topic. + + TOPIC #test :another topic ;set the topic on #test to "another + topic". + + TOPIC #test ; check the topic for #test. + +4.2.5 Names message + + Command: NAMES + Parameters: [<channel>{,<channel>}] + + By using the NAMES command, a user can list all nicknames that are + visible to them on any channel that they can see. Channel names + which they can see are those which aren't private (+p) or secret (+s) + or those which they are actually on. The <channel> parameter + specifies which channel(s) to return information about if valid. + There is no error reply for bad channel names. + + If no <channel> parameter is given, a list of all channels and their + occupants is returned. At the end of this list, a list of users who + are visible but either not on any channel or not on a visible channel + are listed as being on `channel' "*". + + Numerics: + + RPL_NAMREPLY RPL_ENDOFNAMES + + Examples: + + NAMES #twilight_zone,#42 ; list visible users on #twilight_zone + and #42 if the channels are visible to + you. + + NAMES ; list all visible channels and users + +4.2.6 List message + + Command: LIST + Parameters: [<channel>{,<channel>} [<server>]] + + The list message is used to list channels and their topics. If the + <channel> parameter is used, only the status of that channel + is displayed. Private channels are listed (without their + topics) as channel "Prv" unless the client generating the query is + actually on that channel. Likewise, secret channels are not listed + + + +Oikarinen & Reed [Page 24] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + at all unless the client is a member of the channel in question. + + Numeric Replies: + + ERR_NOSUCHSERVER RPL_LISTSTART + RPL_LIST RPL_LISTEND + + Examples: + + LIST ; List all channels. + + LIST #twilight_zone,#42 ; List channels #twilight_zone and #42 + +4.2.7 Invite message + + Command: INVITE + Parameters: <nickname> <channel> + + The INVITE message is used to invite users to a channel. The + parameter <nickname> is the nickname of the person to be invited to + the target channel <channel>. There is no requirement that the + channel the target user is being invited to must exist or be a valid + channel. To invite a user to a channel which is invite only (MODE + +i), the client sending the invite must be recognised as being a + channel operator on the given channel. + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_NOSUCHNICK + ERR_NOTONCHANNEL ERR_USERONCHANNEL + ERR_CHANOPRIVSNEEDED + RPL_INVITING RPL_AWAY + + Examples: + + :Angel INVITE Wiz #Dust ; User Angel inviting WiZ to channel + #Dust + + INVITE Wiz #Twilight_Zone ; Command to invite WiZ to + #Twilight_zone + +4.2.8 Kick command + + Command: KICK + Parameters: <channel> <user> [<comment>] + + The KICK command can be used to forcibly remove a user from a + channel. It 'kicks them out' of the channel (forced PART). + + + +Oikarinen & Reed [Page 25] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + Only a channel operator may kick another user out of a channel. + Each server that receives a KICK message checks that it is valid + (ie the sender is actually a channel operator) before removing + the victim from the channel. + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL + ERR_BADCHANMASK ERR_CHANOPRIVSNEEDED + ERR_NOTONCHANNEL + + Examples: + +KICK &Melbourne Matthew ; Kick Matthew from &Melbourne + +KICK #Finnish John :Speaking English + ; Kick John from #Finnish using + "Speaking English" as the reason + (comment). + +:WiZ KICK #Finnish John ; KICK message from WiZ to remove John + from channel #Finnish + +NOTE: + It is possible to extend the KICK command parameters to the +following: + +<channel>{,<channel>} <user>{,<user>} [<comment>] + +4.3 Server queries and commands + + The server query group of commands has been designed to return + information about any server which is connected to the network. All + servers connected must respond to these queries and respond + correctly. Any invalid response (or lack thereof) must be considered + a sign of a broken server and it must be disconnected/disabled as + soon as possible until the situation is remedied. + + In these queries, where a parameter appears as "<server>", it will + usually mean it can be a nickname or a server or a wildcard name of + some sort. For each parameter, however, only one query and set of + replies is to be generated. + +4.3.1 Version message + + Command: VERSION + Parameters: [<server>] + + + + +Oikarinen & Reed ... [truncated message content] |
From: Toni G. <zo...@us...> - 2003-02-13 19:27:30
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-02-13 19:27:29 UTC Modified files: doc/en/readme.www Log message: Documentacion: {en|es}/readme.www Documento con las direcciones. {en|es}/rfc1459.orig Documento del RFC original de IRC con su respectiva traduccion al castellano. es/rfc1459.unet Documento del RFC modificado traducido al castellano. ---------------------- diff included ---------------------- Index: ircdh/doc/en/readme.www diff -u ircdh/doc/en/readme.www:1.1 ircdh/doc/en/readme.www:1.2 --- ircdh/doc/en/readme.www:1.1 Sat Jan 18 15:45:13 2003 +++ ircdh/doc/en/readme.www Thu Feb 13 11:27:19 2003 @@ -1,23 +1,23 @@ More, and up to date, information can be retrieved from the following world wide web pages: -* Undernet Documents Project: - http://www.user-com.undernet.org/documents/ +* IRC-Dev Website: + http://www.irc-dev.net -* Release Notes & Patch Repository: - http://coder-com.undernet.org/ +* IRC-Dev Documents Project: + http://www.irc-dev.net/ircd/docs.php -* ircII scripts to support the undernet extentions: - http://coder-com.undernet.org/ircii/ +* Release Notes & Patch Repository: + http://www.irc-dev.net/ircd/ -* Undernet Use Policy: - http://www.user-com.undernet.org/documents/aup.html +* Access to the CVS repository: + http://cvs.irc-dev.net/cvs/ -* Operator Etiquette: - http://www.user-com.undernet.org/documents/operman.html +* HTTP interface to the CVS repository: + http://cvs.irc-dev.net/cgi-bin/viewcvs.cgi/irc-dev/ircdh -* New server links & Routing info: - http://routing-com.undernet.org/ +* Sourceforge Project page: + http://sourceforge.net/projects/irc-dev * Information about large number of file descriptors per process: linux: http://www.linux.org.za/oskar/patches/kernel/filehandle/ ----------------------- End of diff ----------------------- |
From: Toni G. <zo...@us...> - 2003-02-01 17:57:24
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-02-01 17:57:21 UTC Modified files: ChangeLog Makefile.in configure configure.in doc/ejemplo.conf doc/example.conf include/ircd_features.h include/patchlevel.h include/s_conf.h include/supported.h ircd/Makefile.in ircd/ircd_features.c ircd/ircd_lexer.l ircd/ircd_parser.y ircd/m_links.c ircd/m_map.c ircd/m_watch.c ircd/s_conf.c ircd/s_err.c ircd/s_stats.c Log message: 2003-02-01 Toni Garcia <zo...@ir...> 1.0.alpha17 * ircd/ircd_parser.y: Soporte de Elines. * ircd/ircd_lexer.l: Soporte de E-lines. * ircd/stats.c: Soporte de E-lines. * {include|ircd}/s_conf{h.c}: Soporte de E-lines. * ircd/m_map.c: Fix, hacia crash al hacer el map. * ircd/s_conf.c: Limpieza de funciones antiguas. * ircd/m_watch.c: feature_int() para el limite de watchs. * {include|ircd}/ircd_features.{h|c}: Actualizacion valores por defecto y agrego el valor de MAXWATCHS. ---------------------- diff included ---------------------- Index: ircdh/ChangeLog diff -u ircdh/ChangeLog:1.11 ircdh/ChangeLog:1.12 --- ircdh/ChangeLog:1.11 Sun Jan 19 13:20:25 2003 +++ ircdh/ChangeLog Sat Feb 1 09:57:10 2003 @@ -1,3 +1,22 @@ +2003-02-01 Toni Garcia <zo...@ir...> 1.0.alpha17 + * ircd/ircd_parser.y: Soporte de Elines. + + * ircd/ircd_lexer.l: Soporte de E-lines. + + * ircd/stats.c: Soporte de E-lines. + + * {include|ircd}/s_conf{h.c}: Soporte de E-lines. + + * ircd/m_map.c: Fix, hacia crash al hacer el map. + + * ircd/s_conf.c: Limpieza de funciones antiguas. + + * ircd/m_watch.c: feature_int() para el limite de watchs. + + * {include|ircd}/ircd_features.{h|c}: Actualizacion valores por defecto y + agrego el valor de MAXWATCHS. + + 2003-01-19 Toni Garcia <zo...@ir...> 1.0.alpha16 * ircd/s_conf.c: Clase Alfanumerica y nuevo ircd.conf. Index: ircdh/Makefile.in diff -u ircdh/Makefile.in:1.3 ircdh/Makefile.in:1.4 --- ircdh/Makefile.in:1.3 Sat Jan 18 11:09:00 2003 +++ ircdh/Makefile.in Sat Feb 1 09:57:10 2003 @@ -146,8 +146,8 @@ # Indent all headers and source files: indent: - @test "`indent --version`" = "GNU indent 2.2.6" || \ - (echo "You need GNU indent 2.2.8a; See doc/readme.indent" && exit -1); + @test "`indent --version`" = "GNU indent 2.2.7" || \ + (echo "You need GNU indent 2.2.7; See doc/readme.indent" && exit -1); VERSION_CONTROL=none indent include/*.h ircd/*.c # do a cvs update Index: ircdh/configure diff -u ircdh/configure:1.5 ircdh/configure:1.6 --- ircdh/configure:1.5 Sat Jan 18 14:54:26 2003 +++ ircdh/configure Sat Feb 1 09:57:10 2003 @@ -1,71 +1,325 @@ #! /bin/sh - # Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version 2.13 -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. +# Generated by GNU Autoconf 2.57. # +# Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 +# Free Software Foundation, Inc. # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. +## --------------------- ## +## M4sh Initialization. ## +## --------------------- ## + +# Be Bourne compatible +if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then + emulate sh + NULLCMD=: + # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which + # is contrary to our usage. Disable this feature. + alias -g '${1+"$@"}'='"$@"' +elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then + set -o posix +fi + +# Support unset when possible. +if (FOO=FOO; unset FOO) >/dev/null 2>&1; then + as_unset=unset +else + as_unset=false +fi + + +# Work around bugs in pre-3.0 UWIN ksh. +$as_unset ENV MAIL MAILPATH +PS1='$ ' +PS2='> ' +PS4='+ ' + +# NLS nuisances. +for as_var in \ + LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ + LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ + LC_TELEPHONE LC_TIME +do + if (set +x; test -n "`(eval $as_var=C; export $as_var) 2>&1`"); then + eval $as_var=C; export $as_var + else + $as_unset $as_var + fi +done + +# Required to use basename. +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then + as_basename=basename +else + as_basename=false +fi + + +# Name of the executable. +as_me=`$as_basename "$0" || +$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)$' \| \ + . : '\(.\)' 2>/dev/null || +echo X/"$0" | + sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; } + /^X\/\(\/\/\)$/{ s//\1/; q; } + /^X\/\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` + + +# PATH needs CR, and LINENO needs CR and PATH. +# Avoid depending upon Character Ranges. +as_cr_letters='abcdefghijklmnopqrstuvwxyz' +as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' +as_cr_Letters=$as_cr_letters$as_cr_LETTERS +as_cr_digits='0123456789' +as_cr_alnum=$as_cr_Letters$as_cr_digits + +# The user is always right. +if test "${PATH_SEPARATOR+set}" != set; then + echo "#! /bin/sh" >conf$$.sh + echo "exit 0" >>conf$$.sh + chmod +x conf$$.sh + if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then + PATH_SEPARATOR=';' + else + PATH_SEPARATOR=: + fi + rm -f conf$$.sh +fi + + + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" || { + # Find who we are. Look in the path if we contain no path at all + # relative or not. + case $0 in + *[\\/]* ) as_myself=$0 ;; + *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break +done + + ;; + esac + # We did not find ourselves, most probably we were run as `sh COMMAND' + # in which case we are not to be found in the path. + if test "x$as_myself" = x; then + as_myself=$0 + fi + if test ! -f "$as_myself"; then + { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 + { (exit 1); exit 1; }; } + fi + case $CONFIG_SHELL in + '') + as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for as_base in sh bash ksh sh5; do + case $as_dir in + /*) + if ("$as_dir/$as_base" -c ' + as_lineno_1=$LINENO + as_lineno_2=$LINENO + as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` + test "x$as_lineno_1" != "x$as_lineno_2" && + test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then + $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } + $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } + CONFIG_SHELL=$as_dir/$as_base + export CONFIG_SHELL + exec "$CONFIG_SHELL" "$0" ${1+"$@"} + fi;; + esac + done +done +;; + esac + + # Create $as_me.lineno as a copy of $as_myself, but with $LINENO + # uniformly replaced by the line number. The first 'sed' inserts a + # line-number line before each line; the second 'sed' does the real + # work. The second script uses 'N' to pair each line-number line + # with the numbered line, and appends trailing '-' during + # substitution so that $LINENO is not a special case at line end. + # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the + # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) + sed '=' <$as_myself | + sed ' + N + s,$,-, + : loop + s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3, + t loop + s,-$,, + s,^['$as_cr_digits']*\n,, + ' >$as_me.lineno && + chmod +x $as_me.lineno || + { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 + { (exit 1); exit 1; }; } + + # Don't try to exec as it changes $[0], causing all sort of problems + # (the dirname of $[0] is not the place where we might find the + # original and so on. Autoconf is especially sensible to this). + . ./$as_me.lineno + # Exit status is that of the last command. + exit +} + + +case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in + *c*,-n*) ECHO_N= ECHO_C=' +' ECHO_T=' ' ;; + *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; + *) ECHO_N= ECHO_C='\c' ECHO_T= ;; +esac + +if expr a : '\(a\)' >/dev/null 2>&1; then + as_expr=expr +else + as_expr=false +fi + +rm -f conf$$ conf$$.exe conf$$.file +echo >conf$$.file +if ln -s conf$$.file conf$$ 2>/dev/null; then + # We could just check for DJGPP; but this test a) works b) is more generic + # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). + if test -f conf$$.exe; then + # Don't use ln at all; we don't have any links + as_ln_s='cp -p' + else + as_ln_s='ln -s' + fi +elif ln conf$$.file conf$$ 2>/dev/null; then + as_ln_s=ln +else + as_ln_s='cp -p' +fi +rm -f conf$$ conf$$.exe conf$$.file + +if mkdir -p . 2>/dev/null; then + as_mkdir_p=: +else + as_mkdir_p=false +fi + +as_executable_p="test -f" + +# Sed expression to map a string onto a valid CPP name. +as_tr_cpp="sed y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g" + +# Sed expression to map a string onto a valid variable name. +as_tr_sh="sed y%*+%pp%;s%[^_$as_cr_alnum]%_%g" + -# Defaults: -ac_help= +# IFS +# We need space, tab and new line, in precisely that order. +as_nl=' +' +IFS=" $as_nl" + +# CDPATH. +$as_unset CDPATH + + +# Name of the host. +# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, +# so uname gets run too. +ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` + +exec 6>&1 + +# +# Initializations. +# ac_default_prefix=/usr/local -# Any additions from configure.in: +ac_config_libobj_dir=. +cross_compiling=no +subdirs= +MFLAGS= +MAKEFLAGS= +SHELL=${CONFIG_SHELL-/bin/sh} + +# Maximum number of lines to put in a shell here document. +# This variable seems obsolete. It should probably be removed, and +# only ac_max_sed_lines should be used. +: ${ac_max_here_lines=38} + +# Identity of this package. +PACKAGE_NAME= +PACKAGE_TARNAME= +PACKAGE_VERSION= +PACKAGE_STRING= +PACKAGE_BUGREPORT= + +ac_unique_file="ircd/ircd.c" ac_default_prefix=$HOME -ac_help="$ac_help - --enable-poll Force poll to be used regardless of whether or not - it is a system call" -ac_help="$ac_help - --enable-debug Turn on debugging mode" -ac_help="$ac_help - --disable-asserts Disable assertion checking" -ac_help="$ac_help - --disable-symbols Disable debugging symbols (remove -g from CFLAGS)" -ac_help="$ac_help - --enable-profile Enable profiling support (add -pg to CFLAGS)" -ac_help="$ac_help - --enable-pedantic Enable pedantic warnings (add -pedantic to CFLAGS)" -ac_help="$ac_help - --enable-warnings Enable warnings (add -Wall to CFLAGS)" -ac_help="$ac_help - --disable-inlines Disable inlining for a few critical functions" -ac_help="$ac_help - --disable-devpoll Disable the /dev/poll-based engine" -ac_help="$ac_help - --disable-kqueue Disable the kqueue-based engine" -ac_help="$ac_help - --with-symlink=name Name to give the symlink; if name is "no," no - symlink will be created." -ac_help="$ac_help - --with-mode=mode Permissions (in octal) to give the binary" -ac_help="$ac_help - --with-owner=owner Specify owner of the installed binary" -ac_help="$ac_help - --with-group=group Specify group owner of the installed binary" -ac_help="$ac_help - --with-domain=domain Domain name to use in local statistics gathering" -ac_help="$ac_help - --with-chroot=dir Specify that the server will be operated under - a different root directory given by dir. See - doc/readme.chroot for more information." -ac_help="$ac_help - --with-dpath=dir Directory for all server data files" -ac_help="$ac_help - --with-cpath=file Set server configuration file" -ac_help="$ac_help - --with-lpath=file Set the debugging log file" -ac_help="$ac_help - --with-maxcon=maxcon Maximum number of connections server will accept" +# Factoring default headers for most tests. +ac_includes_default="\ +#include <stdio.h> +#if HAVE_SYS_TYPES_H +# include <sys/types.h> +#endif +#if HAVE_SYS_STAT_H +# include <sys/stat.h> +#endif +#if STDC_HEADERS +# include <stdlib.h> +# include <stddef.h> +#else +# if HAVE_STDLIB_H +# include <stdlib.h> +# endif +#endif +#if HAVE_STRING_H +# if !STDC_HEADERS && HAVE_MEMORY_H +# include <memory.h> +# endif +# include <string.h> +#endif +#if HAVE_STRINGS_H +# include <strings.h> +#endif +#if HAVE_INTTYPES_H +# include <inttypes.h> +#else +# if HAVE_STDINT_H +# include <stdint.h> +# endif +#endif +#if HAVE_UNISTD_H +# include <unistd.h> +#endif" + +ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS build build_cpu build_vendor build_os host host_cpu host_vendor host_os CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT CPP EGREP AWK SET_MAKE INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA LN_S RMPROG SHPROG OSDEP_C ENGINE_C INSTALL_RULE SYMLINK IRCDMODE IRCDOWN IRCDGRP DPATH LIBOBJS LTLIBOBJS' +ac_subst_files='' # Initialize some variables set by options. +ac_init_help= +ac_init_version=false # The variables have the same names as the options, with # dashes changed to underlines. -build=NONE -cache_file=./config.cache +cache_file=/dev/null exec_prefix=NONE -host=NONE no_create= -nonopt=NONE no_recursion= prefix=NONE program_prefix=NONE @@ -74,10 +328,15 @@ silent= site= srcdir= -target=NONE verbose= x_includes=NONE x_libraries=NONE + +# Installation directory options. +# These are left unexpanded so users can "make install exec_prefix=/foo" +# and all the variables that are supposed to be based on exec_prefix +# by default will actually change. +# Use braces instead of parens because sh, perl, etc. also accept them. bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' @@ -91,17 +350,9 @@ infodir='${prefix}/info' mandir='${prefix}/man' -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} -# Maximum number of lines to put in a shell here document. -ac_max_here_lines=12 - ac_prev= for ac_option do - # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval "$ac_prev=\$ac_option" @@ -109,59 +360,59 @@ continue fi - case "$ac_option" in - -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; - *) ac_optarg= ;; - esac + ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'` # Accept the important Cygnus configure options, so we can diagnose typos. - case "$ac_option" in + case $ac_option in -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir="$ac_optarg" ;; + bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) - ac_prev=build ;; + ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$ac_optarg" ;; + build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file="$ac_optarg" ;; + cache_file=$ac_optarg ;; + + --config-cache | -C) + cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad | --data | --dat | --da) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ | --da=*) - datadir="$ac_optarg" ;; + datadir=$ac_optarg ;; -disable-* | --disable-*) - ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` + ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + eval "enable_$ac_feature=no" ;; -enable-* | --enable-*) - ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` + ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. - if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; } - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; + expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid feature name: $ac_feature" >&2 + { (exit 1); exit 1; }; } + ac_feature=`echo $ac_feature | sed 's/-/_/g'` + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac - eval "enable_${ac_feature}='$ac_optarg'" ;; + eval "enable_$ac_feature='$ac_optarg'" ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ @@ -170,95 +421,47 @@ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) - exec_prefix="$ac_optarg" ;; + exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; - -help | --help | --hel | --he) - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat << EOF -Usage: configure [options] [host] -Options: [defaults in brackets after descriptions] -Configuration: - --cache-file=FILE cache test results in FILE - --help print this message - --no-create do not create output files - --quiet, --silent do not print \`checking...' messages - --version print the version of autoconf that created configure -Directory and file names: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [same as prefix] - --bindir=DIR user executables in DIR [EPREFIX/bin] - --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] - --libexecdir=DIR program executables in DIR [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data in DIR - [PREFIX/share] - --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data in DIR - [PREFIX/com] - --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] - --libdir=DIR object code libraries in DIR [EPREFIX/lib] - --includedir=DIR C header files in DIR [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] - --infodir=DIR info documentation in DIR [PREFIX/info] - --mandir=DIR man documentation in DIR [PREFIX/man] - --srcdir=DIR find the sources in DIR [configure dir or ..] - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM - run sed PROGRAM on installed program names -EOF - cat << EOF -Host type: - --build=BUILD configure for building on BUILD [BUILD=HOST] - --host=HOST configure for HOST [guessed] - --target=TARGET configure for TARGET [TARGET=HOST] -Features and packages: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -EOF - if test -n "$ac_help"; then - echo "--enable and --with options recognized:$ac_help" - fi - exit 0 ;; + -help | --help | --hel | --he | -h) + ac_init_help=long ;; + -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) + ac_init_help=recursive ;; + -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) + ac_init_help=short ;; -host | --host | --hos | --ho) - ac_prev=host ;; + ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) - host="$ac_optarg" ;; + host_alias=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir="$ac_optarg" ;; + includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir="$ac_optarg" ;; + infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir="$ac_optarg" ;; + libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) - libexecdir="$ac_optarg" ;; + libexecdir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst \ @@ -267,19 +470,19 @@ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* \ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - localstatedir="$ac_optarg" ;; + localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir="$ac_optarg" ;; + mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) + | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ @@ -293,26 +496,26 @@ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir="$ac_optarg" ;; + oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix="$ac_optarg" ;; + prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix="$ac_optarg" ;; + program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix="$ac_optarg" ;; + program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ @@ -329,7 +532,7 @@ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name="$ac_optarg" ;; + program_transform_name=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) @@ -339,7 +542,7 @@ ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) - sbindir="$ac_optarg" ;; + sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ @@ -350,58 +553,57 @@ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) - sharedstatedir="$ac_optarg" ;; + sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) - site="$ac_optarg" ;; + site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir="$ac_optarg" ;; + srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir="$ac_optarg" ;; + sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target ;; + ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target="$ac_optarg" ;; + target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; - -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version 2.13" - exit 0 ;; + -version | --version | --versio | --versi | --vers | -V) + ac_init_version=: ;; -with-* | --with-*) - ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` + ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } ac_package=`echo $ac_package| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; + case $ac_option in + *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;; *) ac_optarg=yes ;; esac - eval "with_${ac_package}='$ac_optarg'" ;; + eval "with_$ac_package='$ac_optarg'" ;; -without-* | --without-*) - ac_package=`echo $ac_option|sed -e 's/-*without-//'` + ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. - if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then - { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; } - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=no" ;; + expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid package name: $ac_package" >&2 + { (exit 1); exit 1; }; } + ac_package=`echo $ac_package | sed 's/-/_/g'` + eval "with_$ac_package=no" ;; --x) # Obsolete; use --with-x. @@ -412,99 +614,110 @@ ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes="$ac_optarg" ;; + x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries="$ac_optarg" ;; + x_libraries=$ac_optarg ;; - -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; } + -*) { echo "$as_me: error: unrecognized option: $ac_option +Try \`$0 --help' for more information." >&2 + { (exit 1); exit 1; }; } ;; + *=*) + ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` + # Reject names that are not valid shell variable names. + expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && + { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 + { (exit 1); exit 1; }; } + ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` + eval "$ac_envvar='$ac_optarg'" + export $ac_envvar ;; + *) - if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then - echo "configure: warning: $ac_option: invalid host type" 1>&2 - fi - if test "x$nonopt" != xNONE; then - { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } - fi - nonopt="$ac_option" + # FIXME: should be removed in autoconf 3.0. + echo "$as_me: WARNING: you should use --build, --host, --target" >&2 + expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && + echo "$as_me: WARNING: invalid host type: $ac_option" >&2 + : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then - { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; } -fi - -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -# 6 checking for... messages and results -# 5 compiler messages saved in config.log -if test "$silent" = yes; then - exec 6>/dev/null -else - exec 6>&1 + ac_option=--`echo $ac_prev | sed 's/_/-/g'` + { echo "$as_me: error: missing argument to $ac_option" >&2 + { (exit 1); exit 1; }; } fi -exec 5>./config.log -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -" 1>&5 +# Be sure to have absolute paths. +for ac_var in exec_prefix prefix +do + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* | NONE | '' ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; + esac +done -# Strip out --no-create and --no-recursion so they do not pile up. -# Also quote any args containing shell metacharacters. -ac_configure_args= -for ac_arg +# Be sure to have absolute paths. +for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ + localstatedir libdir includedir oldincludedir infodir mandir do - case "$ac_arg" in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; - *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ac_configure_args="$ac_configure_args '$ac_arg'" ;; - *) ac_configure_args="$ac_configure_args $ac_arg" ;; + eval ac_val=$`echo $ac_var` + case $ac_val in + [\\/$]* | ?:[\\/]* ) ;; + *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 + { (exit 1); exit 1; }; };; esac done -# NLS nuisances. -# Only set these to C if already set. These must not be set unconditionally -# because not all systems understand e.g. LANG=C (notably SCO). -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! -# Non-C LC_CTYPE values break the ctype check. -if test "${LANG+set}" = set; then LANG=C; export LANG; fi -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi -if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi +# There might be people who depend on the old broken behavior: `$host' +# used to hold the argument of --host etc. +# FIXME: To remove some day. +build=$build_alias +host=$host_alias +target=$target_alias + +# FIXME: To remove some day. +if test "x$host_alias" != x; then + if test "x$build_alias" = x; then + cross_compiling=maybe + echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. + If a cross compiler is detected then cross compile mode will be used." >&2 + elif test "x$build_alias" != "x$host_alias"; then + cross_compiling=yes + fi +fi -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo > confdefs.h +ac_tool_prefix= +test -n "$host_alias" && ac_tool_prefix=$host_alias- + +test "$silent" = yes && exec 6>/dev/null -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file=ircd/ircd.c # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then its parent. - ac_prog=$0 - ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. + ac_confdir=`(dirname "$0") 2>/dev/null || +$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ + X"$0" : 'X\(//\)[^/]' \| \ + X"$0" : 'X\(//\)$' \| \ + X"$0" : 'X\(/\)' \| \ + . : '\(.\)' 2>/dev/null || +echo X"$0" | + sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; } + /^X\(\/\/\)[^/].*/{ s//\1/; q; } + /^X\(\/\/\)$/{ s//\1/; q; } + /^X\(\/\).*/{ s//\1/; q; } + s/.*/./; q'` srcdir=$ac_confdir if test ! -r $srcdir/$ac_unique_file; then srcdir=.. @@ -514,13 +727,458 @@ fi if test ! -r $srcdir/$ac_unique_file; then if test "$ac_srcdir_defaulted" = yes; then - { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; } + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 + { (exit 1); exit 1; }; } else - { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; } + { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 + { (exit 1); exit 1; }; } fi fi -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` +(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || + { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2 + { (exit 1); exit 1; }; } +srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'` +ac_env_build_alias_set=${build_alias+set} +ac_env_build_alias_value=$build_alias +ac_cv_env_build_alias_set=${build_alias+set} +ac_cv_env_build_alias_value=$build_alias +ac_env_host_alias_set=${host_alias+set} +ac_env_host_alias_value=$host_alias +ac_cv_env_host_alias_set=${host_alias+set} +ac_cv_env_host_alias_value=$host_alias +ac_env_target_alias_set=${target_alias+set} +ac_env_target_alias_value=$target_alias +ac_cv_env_target_alias_set=${target_alias+set} +ac_cv_env_target_alias_value=$target_alias +ac_env_CC_set=${CC+set} +ac_env_CC_value=$CC +ac_cv_env_CC_set=${CC+set} +ac_cv_env_CC_value=$CC +ac_env_CFLAGS_set=${CFLAGS+set} +ac_env_CFLAGS_value=$CFLAGS +ac_cv_env_CFLAGS_set=${CFLAGS+set} +ac_cv_env_CFLAGS_value=$CFLAGS +ac_env_LDFLAGS_set=${LDFLAGS+set} +ac_env_LDFLAGS_value=$LDFLAGS +ac_cv_env_LDFLAGS_set=${LDFLAGS+set} +ac_cv_env_LDFLAGS_value=$LDFLAGS +ac_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_env_CPPFLAGS_value=$CPPFLAGS +ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} +ac_cv_env_CPPFLAGS_value=$CPPFLAGS +ac_env_CPP_set=${CPP+set} +ac_env_CPP_value=$CPP +ac_cv_env_CPP_set=${CPP+set} +ac_cv_env_CPP_value=$CPP + +# +# Report the --help message. +# +if test "$ac_init_help" = "long"; then + # Omit some internal or obsolete options to make the list less imposing. + # This message is too long to be a string in the A/UX 3.1 sh. + cat <<_ACEOF +\`configure' configures this package to adapt to many kinds of systems. + +Usage: $0 [OPTION]... [VAR=VALUE]... + +To assign environment variables (e.g., CC, CFLAGS...), specify them as +VAR=VALUE. See below for descriptions of some of the useful variables. + +Defaults for the options are specified in brackets. + +Configuration: + -h, --help display this help and exit + --help=short display options specific to this package + --help=recursive display the short help of all the included packages + -V, --version display version information and exit + -q, --quiet, --silent do not print \`checking...' messages + --cache-file=FILE cache test results in FILE [disabled] + -C, --config-cache alias for \`--cache-file=config.cache' + -n, --no-create do not create output files + --srcdir=DIR find the sources in DIR [configure dir or \`..'] + +_ACEOF + + cat <<_ACEOF +Installation directories: + --prefix=PREFIX install architecture-independent files in PREFIX + [$ac_default_prefix] + --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX + [PREFIX] + +By default, \`make install' will install all the files in +\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify +an installation prefix other than \`$ac_default_prefix' using \`--prefix', +for instance \`--prefix=\$HOME'. + +For better control, use the options below. + +Fine tuning of the installation directories: + --bindir=DIR user executables [EPREFIX/bin] + --sbindir=DIR system admin executables [EPREFIX/sbin] + --libexecdir=DIR program executables [EPREFIX/libexec] + --datadir=DIR read-only architecture-independent data [PREFIX/share] + --sysconfdir=DIR read-only single-machine data [PREFIX/etc] + --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] + --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --libdir=DIR object code libraries [EPREFIX/lib] + --includedir=DIR C header files [PREFIX/include] + --oldincludedir=DIR C header files for non-gcc [/usr/include] + --infodir=DIR info documentation [PREFIX/info] + --mandir=DIR man documentation [PREFIX/man] +_ACEOF + + cat <<\_ACEOF + +System types: + --build=BUILD configure for building on BUILD [guessed] + --host=HOST cross-compile to build programs to run on HOST [BUILD] +_ACEOF +fi + +if test -n "$ac_init_help"; then + + cat <<\_ACEOF + +Optional Features: + --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) + --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --enable-poll Force poll to be used regardless of whether or not + it is a system call + --enable-debug Turn on debugging mode + --disable-asserts Disable assertion checking + --disable-symbols Disable debugging symbols (remove -g from CFLAGS) + --enable-profile Enable profiling support (add -pg to CFLAGS) + --enable-pedantic Enable pedantic warnings (add -pedantic to CFLAGS) + --enable-warnings Enable warnings (add -Wall to CFLAGS) + --disable-inlines Disable inlining for a few critical functions + --disable-devpoll Disable the /dev/poll-based engine + --disable-kqueue Disable the kqueue-based engine + +Optional Packages: + --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] + --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) + --with-symlink=name Name to give the symlink; if name is "no," no + symlink will be created. + --with-mode=mode Permissions (in octal) to give the binary + --with-owner=owner Specify owner of the installed binary + --with-group=group Specify group owner of the installed binary + --with-domain=domain Domain name to use in local statistics gathering + --with-chroot=dir Specify that the server will be operated under + a different root directory given by dir. See + doc/readme.chroot for more information. + --with-dpath=dir Directory for all server data files + --with-cpath=file Set server configuration file + --with-lpath=file Set the debugging log file + --with-maxcon=maxcon Maximum number of connections server will accept + +Some influential environment variables: + CC C compiler command + CFLAGS C compiler flags + LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a + nonstandard directory <lib dir> + CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have + headers in a nonstandard directory <include dir> + CPP C preprocessor + +Use these variables to override the choices made by `configure' or to help +it to find libraries and programs with nonstandard names/locations. + +_ACEOF +fi + +if test "$ac_init_help" = "recursive"; then + # If there are subdirs, report their specific --help. + ac_popdir=`pwd` + for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue + test -d $ac_dir || continue + ac_builddir=. + +if test "$ac_dir" != .; then + ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'` + # A "../" for each directory in $ac_dir_suffix. + ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'` +else + ac_dir_suffix= ac_top_builddir= +fi + +case $srcdir in + .) # No --srcdir option. We are building in place. + ac_srcdir=. + if test -z "$ac_top_builddir"; then + ac_top_srcdir=. + else + ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` + fi ;; + [\\/]* | ?:[\\/]* ) # Absolute path. + ac_srcdir=$srcdir$ac_dir_suffix; + ac_top_srcdir=$srcdir ;; + *) # Relative path. + ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix + ac_top_srcdir=$ac_top_builddir$srcdir ;; +esac +# Don't blindly perform a `cd "$ac_dir"/$ac_foo && pwd` since $ac_foo can be +# absolute. +ac_abs_builddir=`cd "$ac_dir" && cd $ac_builddir && pwd` +ac_abs_top_builddir=`cd "$ac_dir" && cd ${ac_top_builddir}. && pwd` +ac_abs_srcdir=`cd "$ac_dir" && cd $ac_srcdir && pwd` +ac_abs_top_srcdir=`cd "$ac_dir" && cd $ac_top_srcdir && pwd` + + cd $ac_dir + # Check for guested configure; otherwise get Cygnus style configure. + if test -f $ac_srcdir/configure.gnu; then + echo + $SHELL $ac_srcdir/configure.gnu --help=recursive + elif test -f $ac_srcdir/configure; then + echo + $SHELL $ac_srcdir/configure --help=recursive + elif test -f $ac_srcdir/configure.ac || + test -f $ac_srcdir/configure.in; then + echo + $ac_configure --help + else + echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 + fi + cd $ac_popdir + done +fi + +test -n "$ac_init_help" && exit 0 +if $ac_init_version; then + cat <<\_ACEOF + +Copyright 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, 2002 +Free Software Foundation, Inc. +This configure script is free software; the Free Software Foundation +gives unlimited permission to copy, distribute and modify it. +_ACEOF + exit 0 +fi +exec 5>config.log +cat >&5 <<_ACEOF +This file contains any messages produced by compilers while +running configure, to aid debugging if configure makes a mistake. + +It was created by $as_me, which was +generated by GNU Autoconf 2.57. Invocation command line was + + $ $0 $@ + +_ACEOF +{ +cat <<_ASUNAME +## --------- ## +## Platform. ## +## --------- ## + +hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` +uname -m = `(uname -m) 2>/dev/null || echo unknown` +uname -r = `(uname -r) 2>/dev/null || echo unknown` +uname -s = `(uname -s) 2>/dev/null || echo unknown` +uname -v = `(uname -v) 2>/dev/null || echo unknown` + +/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` +/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` + +/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` +/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` +/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` +hostinfo = `(hostinfo) 2>/dev/null || echo unknown` +/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` +/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` +/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` + +_ASUNAME + +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + echo "PATH: $as_dir" +done + +} >&5 + +cat >&5 <<_ACEOF + + +## ----------- ## +## Core tests. ## +## ----------- ## + +_ACEOF + + +# Keep a trace of the command line. +# Strip out --no-create and --no-recursion so they do not pile up. +# Strip out --silent because we don't want to record it for future runs. +# Also quote any args containing shell meta-characters. +# Make two passes to allow for proper duplicate-argument suppression. +ac_configure_args= +ac_configure_args0= +ac_configure_args1= +ac_sep= +ac_must_keep_next=false +for ac_pass in 1 2 +do + for ac_arg + do + case $ac_arg in + -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; + -q | -quiet | --quiet | --quie | --qui | --qu | --q \ + | -silent | --silent | --silen | --sile | --sil) + continue ;; + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; + esac + case $ac_pass in + 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; + 2) + ac_configure_args1="$ac_configure_args1 '$ac_arg'" + if test $ac_must_keep_next = true; then + ac_must_keep_next=false # Got value, back to normal. + else + case $ac_arg in + *=* | --config-cache | -C | -disable-* | --disable-* \ + | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ + | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ + | -with-* | --with-* | -without-* | --without-* | --x) + case "$ac_configure_args0 " in + "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; + esac + ;; + -* ) ac_must_keep_next=true ;; + esac + fi + ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" + # Get rid of the leading space. + ac_sep=" " + ;; + esac + done +done +$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } +$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } + +# When interrupted or exit'd, cleanup temporary files, and complete +# config.log. We remove comments because anyway the quotes in there +# would cause problems or look ugly. +# WARNING: Be sure not to use single quotes in there, as some shells, +# such as our DU 5.0 friend, will then `close' the trap. +trap 'exit_status=$? + # Save into config.log some information that might help in debugging. + { + echo + + cat <<\_ASBOX +## ---------------- ## +## Cache variables. ## +## ---------------- ## +_ASBOX + echo + # The following way of writing the cache mishandles newlines in values, +{ + (set) 2>&1 | + case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in + *ac_space=\ *) + sed -n \ + "s/'"'"'/'"'"'\\\\'"'"''"'"'/g; + s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p" + ;; + *) + sed -n \ + "s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p" + ;; + esac; +} + echo + + cat <<\_ASBOX +## ----------------- ## +## Output variables. ## +## ----------------- ## +_ASBOX + echo + for ac_var in $ac_subst_vars + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + + if test -n "$ac_subst_files"; then + cat <<\_ASBOX +## ------------- ## +## Output files. ## +## ------------- ## +_ASBOX + echo + for ac_var in $ac_subst_files + do + eval ac_val=$`echo $ac_var` + echo "$ac_var='"'"'$ac_val'"'"'" + done | sort + echo + fi + + if test -s confdefs.h; then + cat <<\_ASBOX +## ----------- ## +## confdefs.h. ## +## ----------- ## +_ASBOX + echo + sed "/^$/d" confdefs.h | sort + echo + fi + test "$ac_signal" != 0 && + echo "$as_me: caught signal $ac_signal" + echo "$as_me: exit $exit_status" + } >&5 + rm -f core core.* *.core && + rm -rf conftest* confdefs* conf$$* $ac_clean_files && + exit $exit_status + ' 0 +for ac_signal in 1 2 13 15; do + trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal +done +ac_signal=0 + +# confdefs.h avoids OS command line length limits that DEFS can exceed. +rm -rf conftest* confdefs.h +# AIX cpp loses on an empty file, so make sure it contains at least a newline. +echo >confdefs.h + +# Predefined preprocessor variables. + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_NAME "$PACKAGE_NAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_TARNAME "$PACKAGE_TARNAME" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_VERSION "$PACKAGE_VERSION" +_ACEOF + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_STRING "$PACKAGE_STRING" +_ACEOF + + +cat >>confdefs.h <<_ACEOF +#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" +_ACEOF + + +# Let the site file select an alternate cache file if it wants to. # Prefer explicitly selected file to automatically selected ones. if test -z "$CONFIG_SITE"; then if test "x$prefix" != xNONE; then @@ -531,47 +1189,111 @@ fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" + { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 +echo "$as_me: loading site script $ac_site_file" >&6;} + sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then - echo "loading cache $cache_file" - . $cache_file + # Some versions of bash will fail to source /dev/null (special + # files actually), so we avoid doing that. + if test -f "$cache_file"; then + { echo "$as_me:$LINENO: loading cache $cache_file" >&5 +echo "$as_me: loading cache $cache_file" >&6;} + case $cache_file in + [\\/]* | ?:[\\/]* ) . $cache_file;; + *) . ./$cache_file;; + esac + fi else - echo "creating cache $cache_file" - > $cache_file + { echo "$as_me:$LINENO: creating cache $cache_file" >&5 +echo "$as_me: creating cache $cache_file" >&6;} + >$cache_file +fi + +# Check that the precious variables saved in the cache have kept the same +# value. +ac_cache_corrupted=false +for ac_var in `(set) 2>&1 | + sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; do + eval ac_old_set=\$ac_cv_env_${ac_var}_set + eval ac_new_set=\$ac_env_${ac_var}_set + eval ac_old_val="\$ac_cv_env_${ac_var}_value" + eval ac_new_val="\$ac_env_${ac_var}_value" + case $ac_old_set,$ac_new_set in + set,) + { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,set) + { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5 +echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} + ac_cache_corrupted=: ;; + ,);; + *) + if test "x$ac_old_val" != "x$ac_new_val"; then + { echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5 +echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} + { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 +echo "$as_me: former value: $ac_old_val" >&2;} + { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 +echo "$as_me: current value: $ac_new_val" >&2;} + ac_cache_corrupted=: + fi;; + esac + # Pass precious variables to config.status. + if test "$ac_new_set" = set; then + case $ac_new_val in + *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?\"\']*) + ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; + *) ac_arg=$ac_var=$ac_new_val ;; + esac + case " $ac_configure_args " in + *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. + *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; + esac + fi +done +if $ac_cache_corrupted; then + { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 +echo "$as_me: error: changes in the environment can compromise the build" >&2;} + { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5 +echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;} + { (exit 1); exit 1; }; } fi ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' -cross_compiling=$ac_cv_prog_cc_cross +ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' +ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' +ac_compiler_gnu=$ac_cv_c_compiler_gnu + + + + + + + + + + + + + + + -ac_exeext= -ac_objext=o -if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says gh...@ca.... - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ac_n= ac_c=' -' ac_t=' ' - else - ac_n=-n ac_c= ac_t= - fi -else - ac_n= ac_c='\c' ac_t= -fi -echo $ac_n "checking for installation prefix""... $ac_c" 1>&6 -echo "configure:573: checking for installation prefix" >&5 -if eval "test \"`echo '$''{'unet_cv_prefix'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 + +echo "$as_me:$LINENO: checking for installation prefix" >&5 +echo $ECHO_N "checking for installation prefix... $ECHO_C" >&6 +if test "${unet_cv_prefix+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 else unet_cv_prefix=$HOME fi @@ -579,9 +1301,11 @@ if test x"$prefix" != xNONE; then unet_cv_prefix=$prefix fi -echo "$ac_t""$unet_cv_prefix" 1>&6 +echo "$as_me:$LINENO: result: $unet_cv_prefix" >&5 +echo "${ECHO_T}$unet_cv_prefix" >&6 ac_default_prefix=$unet_cv_prefix + ac_config_headers="$ac_config_headers config.h" @@ -596,251 +1320,713 @@ ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break + elif test -f $ac_dir/shtool; then + ac_aux_dir=$ac_dir + ac_install_sh="$ac_aux_dir/shtool install -c" + break fi done if test -z "$ac_aux_dir"; then - { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } -fi -ac_config_guess=$ac_aux_dir/config.guess -ac_config_sub=$ac_aux_dir/config.sub -ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. - + { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 +echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} + { (exit 1); exit 1; }; } +fi +ac_config_guess="$SHELL $ac_aux_dir/config.guess" +ac_config_sub="$SHELL $ac_aux_dir/config.sub" +ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. # Make sure we can run config.sub. -if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : -else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } -fi - -echo $ac_n "checking host system type""... $ac_c" 1>&6 -echo "configure:616: checking host system type" >&5 - -host_alias=$host -case "$host_alias" in -NONE) - case $nonopt in - NONE) - if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : - else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } - fi ;; - *) host_alias=$nonopt ;; - esac ;; -esac +$ac_config_sub sun4 >/dev/null 2>&1 || + { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 +echo "$as_me: error: cannot run $ac_config_sub" >&2;} + { (exit 1); exit 1; }; } + +echo "$as_me:$LINENO: checking build system type" >&5 +echo $ECHO_N "checking build system type... $ECHO_C" >&6 +if test "${ac_cv_build+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_build_alias=$build_alias +test -z "$ac_cv_build_alias" && + ac_cv_build_alias=`$ac_config_guess` +test -z "$ac_cv_build_alias" && + { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 +echo "$as_me: error: cannot guess build type; you must specify one" >&2;} + { (exit 1); exit 1; }; } +ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_build" >&5 +echo "${ECHO_T}$ac_cv_build" >&6 +build=$ac_cv_build +build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` + + +echo "$as_me:$LINENO: checking host system type" >&5 +echo $ECHO_N "checking host system type... $ECHO_C" >&6 +if test "${ac_cv_host+set}" = set; then + echo $ECHO_N "(cached) $ECHO_C" >&6 +else + ac_cv_host_alias=$host_alias +test -z "$ac_cv_host_alias" && + ac_cv_host_alias=$ac_cv_build_alias +ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || + { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 +echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} + { (exit 1); exit 1; }; } + +fi +echo "$as_me:$LINENO: result: $ac_cv_host" >&5 +echo "${ECHO_T}$ac_cv_host" >&6 +host=$ac_cv_host +host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` +host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` +host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` -host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -echo "$ac_t""$host" 1>&6 -# Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 -echo "configure:640: che... [truncated message content] |
From: Toni G. <zo...@us...> - 2003-01-23 11:08:13
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-01-23 11:08:11 UTC Added files: doc/history/lazyserver.jcea doc/history/tener_en_cuenta.jcea doc/history/todo.jcea Removed files: lazyserver.jcea tener_en_cuenta.jcea todo.jcea Log message: Muevo los *.jcea al history ---------------------- diff included ---------------------- Index: ircdh/doc/history/lazyserver.jcea diff -u /dev/null ircdh/doc/history/lazyserver.jcea:1.1 --- /dev/null Thu Jan 23 03:08:12 2003 +++ ircdh/doc/history/lazyserver.jcea Thu Jan 23 03:08:01 2003 @@ -0,0 +1,72 @@ +$Id: lazyserver.jcea,v 1.1 2003/01/23 11:08:01 zolty Exp $ + +14/Jun/00 +Con la tecnologia de IRC sobre tuneles IP que he +desarrollado (http://www.argo.es/clones/clones2.html), el +interes por los "Lazy server" se diluye un poco, salvo +por el hecho de que ello ahorraria CPU y ancho de banda. + +Se necesitaria un comando "setip" para fijar la IP y HOST. +Este comando deberia estar permitido SOLO desde ciertas +IPs (en particular 127.0.0.1). + +22/Dic/99 + +Cuando en un sitio hay varios clientes, no tiene sentido que +todos ellos se conecten al servidor, sino que lo mas rentable +es que hubiese un servidor local. La ventaja es mayor, incluso, +cuando los usuarios tienen canales comunes, etc. + +Pero un servidor local no siempre es factible ya que, por un +lado requiere un esfuerzo de administracion y, por otro, +los lugares donde resulta rentable no son CONFIABLES. + +Este proyecto pretende desarrollar un "lazy server". Es decir +un servidor que actue de proxy entre varios usuarios y un servidor +normal de la red. La red solo debe enviar una copia al proxy +de todas aquellos paquetes que deban ser recibido por uno o +mas usuarios del mismo. + +No basta con hacer proxy de "join", "privmsg", "notice", +"part", "quit", "squit", "mode" y alguno mas, ya que todos +los demas comandos del IRC deben poder ser enviados sin +problemas. Ello complica la parte del servidor de IRC en si, que +debe parchearse para poder soportar "lazyservers". Si un usuario +del proxy hace un "/version gaia.*", ese comando debe rutarse +por la red, y la respuesta debe llegar al usuario que hizo la +peticion, no a todo el mundo. + +De todas formas ese problema se soluciona -aparentemente- de forma +bastante sencilla. Practicamente los unicos cambios que serian +necesarios en el servidor serian: + +a) Fiarse del "from" que envia un "lazy server", si se corresponde + a nicks asignados. + +b) Permitir la entrada de un nuevo nick solo si su IP se corresponde + con una IP local. + +c) La mayoria de los comandos del proxy no tienen efecto hasta que + el servidor del que cuelga responde (por ejemplo, entradas + y salidas en canales). + +d) En aquellos comandos que un servidor debe enviar (respuesta) a + varios usuarios, el servidor debe ser parcheado para que + solamente envie una copia para todos los usuarios que + cuelgan del proxy. + +En una primera fase, el cambio mas sencillo en el servidor de IRC +seria: + +a) Anadir un nuevo comando para la entrada de "lazy servers". + +b) Cambiar las rutinas de "parsing" para que tengan en cuenta + el punto A anterior. + +c) cptr de estos clientes deberia ser el mismo. tal vez sea + necesaria una especie de "contador de referencias", asi como + una lista de nicks asociados. + +Una de las ventajas que abre este sistema, ademas de reducir +trafico, es la posibilidad de meter "clones" sin necesitar una IP +fija, a pesar del sistema de control de clones distribuido. Index: ircdh/doc/history/tener_en_cuenta.jcea diff -u /dev/null ircdh/doc/history/tener_en_cuenta.jcea:1.1 --- /dev/null Thu Jan 23 03:08:12 2003 +++ ircdh/doc/history/tener_en_cuenta.jcea Thu Jan 23 03:08:01 2003 @@ -0,0 +1,45 @@ +$Id: tener_en_cuenta.jcea,v 1.1 2003/01/23 11:08:01 zolty Exp $ + +14/Ene/00 +Un proxy abierto puede pasar el chequeo si, por ejemplo, +la conexion del usuario completa la capacidad del +proxy, ya que este no tendra recursos para atender +la verificacion de la red. + +El problema se agrava por el hecho de que si eso +ocurre, la IP sera mantenida en cache y no pasara +mas comprobaciones de proxy durante 30 minutos. + +10/Ene/00 +Los modos +A y +S de canales, no son +representados por muchos clientes de IRC, +entre ellos el popular mIRC, a menos que se +este utilizando la version 5.61 o superior. + +10/Ene/00 +Las bases de datos de disco se pueden truncar a 0, +pero no borrar. + +22/Dic/99 +He hecho algunas pruebas para ver hasta que punto puede +resultar rentable en terminos de ancho de banda el +que la comunicacion entre servidores se realice usando +compresion GZIP. Para ello he generado un BURST y lo he +grabado en disco. Comprimido con GZIP, su tamano se +reduce a la mitad. + +La ganancia no es demasiado importante, por tanto. + +27/Oct/99 +Las BDD no residentes no se compactan, aunque +se marca la orden en disco. + +27/Oct/99 +Solo se conservan en memoria los registros +que afectan al servidor en concreto. + +27/Oct/99 +"make install" elimina las BDD que no se +estan empleando. Por tanto hay que modificar +el "Makefile" si se an~aden BDD nuevas. + Index: ircdh/doc/history/todo.jcea diff -u /dev/null ircdh/doc/history/todo.jcea:1.1 --- /dev/null Thu Jan 23 03:08:12 2003 +++ ircdh/doc/history/todo.jcea Thu Jan 23 03:08:01 2003 @@ -0,0 +1,753 @@ +$Id: todo.jcea,v 1.1 2003/01/23 11:08:01 zolty Exp $ + +13/Ago/02 +La variable que contiene losmodos de usuario esta superpoblada y +apenas le queda ya algun bit libre. Habia que mover lo que son +flags internos del usuario (si se le ha hecho PING o no, si es TS8, etc) +a una variable separada, preferiblemente que exista SOLO cuando el +usuario/conexion es local. + +13/Ago/02 +Cuando un usuario esta silenciado, recibe un "notice" del servidor, +informandole de este hecho. Eso deberia cambiarse por un NUMERIC. + +06/Ago/02 +Poder poner, al conectar, una clave de servidor y otra de nick, al mismo tiempo. + +06/Ago/02 +Documentar en el registro (irc.org) correspondiente el uso +de QUITLEN y AWAYLEN. + +05/Ago/02 +Estudiar la conveniencia de que el taman~o del comentario de los +QUIT y de las GLINES no este vinculado a TOPICLEN. El problema se +nota cuando un usuario tiene una IP Virtual larga, que se puede +cortar cuando le cae una GLINE. + +29/Jul/02: +Canal con +n, status del usuario sin +o ni +v, ban al nick unicamente, +cuando se cambia de nick y se pone otra vez el baneado, puede escribir en el +canal :) + +25/Jul/02 +Cuando alguien se pone +x, deberia salirle publicidad +de la personalizacion de IPs Virtuales, tomando el +mensaje directamente de la BDD. + +09/Jul/02 +Si se configura el server con "BDD_VIP3", el usuario +solo deberia poder ponerse el "+x" si el nick +aparece en la tabla "v" o "w". + +Estudiar implicaciones en cosas como cambios de nick. + +24/Jun/02 +[13:16] <zolty> Cuando el servidor tiene activado el WATCH y un usuario +[13:16] <zolty> que monitorizamos y que no esta en nuestro servidor, +[13:16] <zolty> entra/sale de la red o cambia de nick, y el nick +[13:16] <zolty> esta en la tabla "v" o "w", la IP que aparece en el +[13:16] <zolty> WATCH que nos manda el servidor, es la ip virtual +[13:16] <zolty> normal, no la ip virtual personalizada que le +[13:16] <zolty> corresponde. +[13:16] <zolty> Cuando uno sale, se avisa el watch, antes de hacer +[13:16] <zolty> un "mode -r" y es muy raro, porque a la hora de enviar +[13:16] <zolty> el notify, AUN tiene el +r. +[13:16] <zolty> Cuando uno entra, se avisa el watch antes de recibir +[13:16] <zolty> un +r que vendra del nodo donde esta el usuario +[13:16] <zolty> monitorizado. + +21/Jun/02 +Comprobar que KICK, JOIN, PART efectivamente son ya +100% puros. + +12/Jun/02 +/server servidor puerto clave_server:clave_nick +/server servidor puerto clave_server!clave_nick + +12/Jun/02 +> /watch L +> 1 no esta en irc, ultimo paso el Tue May 21 17:30:18 2002 +> +> Sin embargo el usuario 1 jamas conecto al irc... propongo que se mande +> un tiempo 0 tal y como se hace al borrar al usuario de la lista, pero +> no el momento en que se añadio ese nick al watch. + +17/Abr/02 +En varios sitios aparecen numeros como 512, 510, etc., que +se utilizan como limitadores de la longitud de la linea +enviada o recibida, etc. Habria que transformar esos numeros +en un macro usado en todas partes. + +Eso incluye el nuevo macro MAXLEN introducido en 2.10.H.04.14. + +28/Dic/01 +En los casos en los que no suponga una perdida de rendimiento +o memoria apreciable, no deberiamos permitir que comandos +ilegales enviados por otros nodos maten nuestro servidor. Lo mas +inteligente seria detectar el problema, hacer log y cortar el enlace +de forma permanente hasta que venga un IRCop y haga un "rehash" manual, +por ejemplo. + +Por ejemplo, el comando ":nombre_del_Servidor join #canal" mata un server. + +15/Nov/01 +Comentado por "SHauN": + +Porqué los servidores puestamente no admiten mayusculas en nombre o +identidades? Será depende del dia... porque hay dias que no hay dios que +entre con una identidad Mayus/Minus Porque el servidor te denega el accesso +con un mensaje: Bad Name/Ident i sin embargo otros dias por el mismo +servidor no hay ningun problema? + +Comprobarlo y solucionarlo. + +12/Nov/01 +"/trace pepe pepe.*" muestra dos veces un mensaje de "no such server". + +12/Nov/01 +Zoltan: +Para acabar, hay un bug, para meter en el todo.jcea... Ocurre que si un usuario con modos +r o +rh, recibe un rename, +no se manda al usuario los modos que se pierden. +Sé que hoy por hoy, un usuario con +r no recibe renames, pero según tu Web, hay la intención de hacer renames a los +usuarios tras un cambio de contraseña..... y ha se solucionar esto para que el usuario pueda ver los modos que se +pierden + +Es más grave si haces un "ghost" por "nick", ya que te hace un +"rename" del nick, pero no libera modos. + +30/Oct/01 + Ahora mismo, el raw 319, cuando nos devuelve, al hacer un whois, la lista +de canales, lo hace mostrando el orden en que hemos entrado a los canales, +ordenados del mas reciente al primero. Pienso que sería de más utilidad +tener dicha lista ordenada alfabeticamente, pues a nadie le interesa el +orden en que uno entra a los canales, pero si puede ser útil tener esa lista +ordenada alfabeticamente para cuando queremos ver si fulanito está en tal o +cual canal, y máxime desde que carme y retevision admiten 15 canales a la +vez para users. Por lo tanto, devolver la lista ordenada sería lo más +práctico. Para ello, o bien se va reordenando la lista que guarda en memoria +los canales de cada usuario, cada vez que un usuario entra en un canal, (lo +que pienso que es gastar cpu y tiempo de ejecución a lo tonto) o, +simplemente, cuando se va a mostrar esa información, procesarla y devolverla +ordenada alfabeticamente. + + Saludos, + +NiKoLaS + +19/Sep/01 +Para facilitar la tarea de bots de control de proxies abiertos, +la verificacion de GLINES debe hacerse *ANTES* de expulsar +a un usuario por socks abierto. + +El problema es que las GLINES no se pueden cambiar de posicion +ya que dependen del DNS inverso y en IDENT. + +Una posibilidad es que cuando hay un socks abierto, se ponga una +marca al usuario, y se le deje continuar. Una vez validadas las +GLINES, comprobamos dicha marca y nos lo cargamos si es menester. + +18/Sep/01 +Cambios de nick y de ciertos modos (en especial +h y +x) deben +borrar la caché de IP virtual de ese nick. + +07/Sep/01 +Entrando a traves de un nodo que no tolera el +x, si hago un +whois a un usuario con IP virtual en la tabla "v", aparece su +IP virtual "real", no la de la tabla. + +Eso pasa para gente que cuando entra lo hace con /nick nick:clave, +no con /server server puerto clave + +Se puede comprobar haciendo un "/who 0 o", habiendo entrado +por un tunel de Argo. + +EXPLICACION ADICIONAL: + +Si compilamos un IRCD con "BDD_VIP2 : HISPANO/ESNET: Ocultación de IP de TODOS los usuarios [N/y/?]" +y "NO", entonces el servidor no permitirá que los usuarios locales se pongan +x, pero si que +aceptara +x de usuarios de otros nodos de la red. + +El problema es que si un usuario conecta y activa su +x una vez +que ya esta conectado (por ejemplo, porque entro con un nick que no era +r) +entonces se calculara su IP virtual de forma estandar, y no se mostrara la +IP virtual que corresponde a ese nick segun la tabla "v", de existir. + +Este bug solo es visible cuando el nick al que hacemos "whois" +tiene una entrada personalizada en la tabla "v". + +31/Ago/01 +Si un usuario con IP virtual en tabla "v" entra por un servidor +que no tolera +x, evidentemente no se vera su IP virtual por BDD. + +17/Ago/01 +Dado que la gente es incapaz de trabajar (no digo recordar :-) +las claves seguras de 12 caracteres del "+r", ademas del problema +de solo poder usar 64 caracteres y, pero, solo 4 caracteres al +principio de cada grupo, seria mas interesante que en vez de que +los usuarios metan la clave directamente, meter un texto largo +y calcular su HASH. De esa forma es más fácil aprovechar los +64 bits de verdad, aun con claves relativamente "recordables". + +16/Ago/01 +Persiste el problema de que algunos usuarios ven IPs virtuales +incorrectas si un usuario cambia de nick, y ambos nicks tienen +IPs virtuales diferentes (solo posible si al menos uno de ellos +tiene entrada en la tabla "v", o hay un cambio de clave +de proteccion de IP por medio). + +27/Jul/01 +En el MOTD deberia salir una frase al azar, en plan "fortune". + +25/Jul/01 +Pensar sobre la conveniencia de ampliar el limite de +30 "bans" que tienen ahora los canales. + +22/Jun/01 +Cuando se compacta la base de datos, debe realizarse en un "thread" o +proceso aparte, para no dejar de gestionar las conexiones durante +periodos prolongados. Dicha tarea aparte debe avisar al servidor +principal de su finalizacion, para que haga un "rehash" y recargue +la base de datos, incluyendo la validacion de su "hash". + +14/Jun/01 +> >Se supone que si pongo un ban a alguien solo por su nick (nick!*@*), el +> >tipo no puede hablar si esta en el canal, y no puede entrar si sale e +> >intenta volver a entrar, no ? Bueno, esto funciona. +> > +> >Pero y si el tipo se cambia el nick? Puede volver a entrar en el canal y +> >hablar, pero si luego se vuelve a poner el otro nick (el que estaba +> >baneado) ... puede seguir hablando ? Es lo que me ha pasado a mi. Esto es +> >correcto? Si hay un ban para un nick, por que si se lo cambia y despues +> >vuelve al nick baneado, ese ban no le afecta ya ? + +06/Jun/01 +Pensar sobre la conveniencia de que los usuarios +normales no puedan ver el nodo por el que se +conecta otro usuario. + +Cambiar el "wallops" para que en vez de mandar solo a +Opers e IRCops, mande a todos los que tienen +w, y restringir +dicho modo a Opers e IRCops. Esto es mas claro y logico. + +17/May/01 +Con u2.10.H.02.44, el modo "+w" es ignorado a menos +que seamos tambien "+o" o "+h". Lo logico seria que +el modo "+w" solo se pueda poner si somos "+h" o "+o", +o que su funcionalidad se pase a una máscara "+s". + +26/Abr/01 +El notice que informa del "silence" deberia +enviarse en la misma rutina que envia el "silence" en +si, para evitar duplicar codigo. + +Ojo cuando se manda un mensaje a varios destinos. + +25/Abr/01 +Meter RC4 en el servidor, tanto para los enlaces +server<->server como server<->cliente. + +16/Abr/01 +* 2001/04/16 jc...@ar... (Z11 - u2.10.H.02.27) FIX + ----------------------------------------------------------------------- + Bug comunicado por {^DaNi^}. + + Los contadores de la zlib hace "wrap". Entre otros efectos, el nivel + de compresion informado es incorrecto. + + Soluciono el problema manteniendo un contador separado, que se actualiza + sumandole el valor de los contadores zlib antes y despues de la llamada, + considerando tambien el caso especial del wrapping. + + Observo que la rutina original del IRCD tambien hace wrapping. + + Ello es visible, por ejemplo, cada 2000 gigas o 2000 millones de + mensajes transferidos sin split. + + En IRC-Hispano, a fecha de hoy, supondría tener enlaces sin caidas + durante unos ocho meses. Por lo tanto, no me preocupo de este tema + de momento... + +11/Abr/01 +Por defecto, solo se deberia mostrar canales +con mas de X usuarios. + +22/Mar/01 +Tener un sistema para poder hacer seguimientos +de cambios de un nick determinado, aunque no +estemos en un canal comun. + +11/Ene/01 +[21:21] <DjAcE> creo que tengo un pequeqo bug +[21:22] <jcea> :) +[21:22] <DjAcE> /who #hacking x% no devuelve nada +[21:22] <DjAcE> pero si le metes el formato del who +[21:22] <DjAcE> p.e. /who #hackers x%cn +[21:22] <DjAcE> entonces si + +13/Dic/00 +El servidor deberia reconocer un "nick *" +como una orden para ponerse un nick +de la forma "invnnnnnn". Esto es util +para temas como el IRCQ, y demas +servicios automaticos. + +07/Dic/00 +Cuando un usuario cambia de nick, su IP virtual no +se recalcula. + +24/Nov/00 +Con las nuevas reglas de acceso a la BDD, si se an~aden +nuevas tablas o registros confidenciales, los viejos +nodos los seguiran mostrando mientras no se actualicen. + +16/Nov/00 +Cada vez que cambias de nick, el server te informa de +tu nueva IP virtual... que es la misma. Al menos es la +misma si solo tienes el flag "+x". + +16/Nov/00 +Si tenemos los flags "ohX", y nos quitamos el +"oh", el "X" permanece. + +14/Nov/00 +El lag calculado para "/map" debe actualizarse +en mas ocasiones que "CREATE". Por ejemplo, cuando +entra un nick nuevo, o cuando un usuario cambia de nick. + +En general, cuando se mande un "timestamp". + +14/Nov/00 +En los nodos sin usuarios no es facil calcular +el lag. En esos casos es mejor imprimir un "?" +a imprimir 0 segundos. + +19/Oct/00 +El "make config" debe obligar a que el usuario introduzca +un usuario/grupo correcto, que sino luego falla el +"make install". + +La gente es boba... + +17/Oct/00 +En canales con muchos usuarios tenemos dos problemas: + +a) La gente se cae por flood cuando el servidor le manda + la lista de usuarios del canal. + +b) Mucho trafico "espureo" en el canal, con todas + las entradas y salidas del mismo. + +17/Oct/00 +Un "/list" no deberia sacar un listado extenso de canales. +De hecho, deberia limitarse el numero de canales mostrados +por cualquier "list", indicando, en caso preciso, que hay +mas canales pero se requiere una consulta mas especifica. + +El problema es que cuando se busca por "topic" o por +nombre de canal, por ejemplo, el filtrado en si lo hace +el cliente, no el servidor!. O eso es lo que pasa en +el mIRC. + +16/Oct/00 +El mensaje de "Too many connections from same IP for *.*.*.*" +no deberia ser visible para usuarios normales. + +15/Oct/00 +Cuando usamos el modo +x en un canal, deberia aparecer ++x-x, para que no quede como "modo" del canal. + +Claro que esto tiene la ventaja de que se sabe que +se ha usado un modo "x" en un canal determinado, porque +queda constancia. Pero esto solo lo ve la gente que +estaba en el canal en el momento de usarlo. + +05/Oct/00 +Cuando entra en un canal alguien con IP virtual, +los que no tienen +X reciben la virtual, y los que +tienen +X DEBERIAN recibir la real. + +Ahora mismo todo el mundo recibe la virtual, incluyendo +la gente con +X. Ello obliga a hacer un WHOIS aparte, +y puede crear conflictos con los sistemas de cache +de muchos clientes IRC. + +Lo mismo se aplica para privsmg, part, quit, etc. + +28/Jun/00 +Eliminar la cache interna del IRCD para DNS. + +23/Jun/00 +?Que informacion se guarda en el WHOWAS si un usuario sale +y nadie en el nodo local le ha hecho un who/whois? + +22/Jun/00 +Cuando sabemos que es un usuario, deberia completarse la +posible negociacion con "REJ". + +22/Jun/00 +Si ACK sin REQ previo, cortar enlace. + +14/Jun/00 +Si un leaf tiene un numero de serie mayor que su HUB, +le intenta introducir registros que este ignora. Esto +supone trafico extra innecesario, y si el leaf tenia +el grifo abierto -> split. + +a) El HUB no debe responder a "B". +b) En el join, el HUB debe indicar al otro extremo + que no va a aceptar registros provenientes de el. + +12/Jun/00 +Estudiar la interaccion entre las microrafagas +y que algunas de las conexiones en modo "microrafaga" +se corte de forma abrupta antes de cerrar +la "microrafaga". + +04/May/00 +A veces "stats l" filtra informacion sobre +conexiones de usuarios. + +19/Abr/00 +Las GLINEs deberian validarse tambien contra las +IPs virtuales. + +18/Abr/00 +Si se hace un /whois IPvirtual, no dice que este +conectado, aunque asi sea. + +28/Mar/00 +Probando "/who" no deberia ser posible sacar la +IP de un usuario con IP virtual. + +Tampoco deberia ser posible localizar clones cuando +algunos de los usuarios tienen IP virtual y otros no. + +23/Mar/00 + An~adir una base de datos con clave + el nombre de un nodo y valor un mensaje + que se muestra a todos los usuarios que se + conectan por dicho nodo. + +22/Mar/00 + Se veian las IPs reales en los "notice" que envia el servidor cuando + un usuario entra o sale, si se tiene la mascara "+s" apropiada activada. + + La solucion es que ese flag solo este disponible para Helpers e IRCops. + + Se visualiza la IP real cuando un usuario intenta + conectar y: + + - La conexion esta prohibida + - Demasiadas conexiones para la clase + - Demasiadas conexiones para la IP + + Esto se soluciona sin mas que definir esos mensajes + como aptos de ser recibidos exclusivamente por IRCops + y Helpers + +09/Mar/00 +Posibilidad de corromper una base de datos: + +Si durante la transferencia de una base de datos se +detecta que esta corrupta (por ejemplo, porque se +hace un "rehash" mientras tanto), el nodo borra su BDD +local, pero le estan llegando registros nuevos, asi que +perdera los primeros. + +El otro extremo no se entera porque no detecta que se le +ha indicado base de datos corrupta, porque en ese +momento tiene el grifo cerrado. + +Una posibilidad es que cuando se envie el fin de una BDD +se envie su HASH. Si en el receptor no coinciden, borra +la BDD y la pide otra vez. + +09/Mar/00 +En algunos servidores aparecen algunas lineas en blanco +en las bases de datos en disco. Creo que mete las lineas +en blanco al final del fichero, cuando ocurre algo +"especial", y a medida que se van an~adiendo registros, +esas lineas acaban por aparecer por medio. + +Estudiando el codigo no hay muchas posibilidades. Como +no sea al compactar... + +29/Feb/00 +Peticion de Trebolin. +Los usuarios con clones deberian poder consultar el numero +de clones que tienen disponibles, asi como su fecha de +alta y de expiracion. + +21/Feb/00 +Las ILINES deben ser "case insensible", y lo que +se propaga por base de datos debe ser minusculas. +Corregir las que ya estan metidas. + +18/Feb/00 +Cuando un cliente sale del IRC, se almacena en el WHOWAS +su IP cifrada si estaba protegido. Los Operadores de la +red deberian tener acceso tambien a la IP real. + +08/Feb/00 +Aunque un Channel Service puede enviar mensajes a todos +los miembros de un canal, dichos mensajes aparecen +dentro del canal, como si el CS estuviese dentro, +no como un mensaje Global. + +24/Ene/00 +Cuando no se puede completar una verificacion SOCKS, +el cliente entra, y deberia salirle algun mensaje +en pantalla. + +20/Ene/00 +Cuando un usuario con nick registrado se pone un nick +sin registrar, aparece su IP real. Perfecto. Lo malo +es que si luego recupera su nick registrado, +su nick antiguo y su IP real aparecen en un "/whowas". + +19/Ene/00 +Verificar que cuando un servidor no inicia una conexion, +no envia la negociacion de BDD *ANTES* de haber +recibido la identificacion PASS/SERVER del otro +extremo. + +Ello puede provocar el envio de varios segmentos +de claves repetidos. El sistema lo descarta +automaticamente, pero supone un consumo de CPU +y ancho de banda. + +18/Ene/00 +Cuando se envia el informe de SOCKS abierto, deberia +esperarse a tener la resolucion inversa. + +18/Ene/00 +Cuando un proxy es inseguro, deberia enviarse +al usuario a alguna pagina con informacion +sobre el tema. + +17/Ene/00 +?Cuanto dura una entrada en IPcheck, si el usuario +no esta conectado?. + +10/Ene/00 +No todas las BDD deben normalizarse a minusculas. + +10/Ene/00 +Alguna forma para borrar TODAS las bases de datos +de un nodo determinado. + +07/Ene/00 +Cuando se realiza una compactacion de una base de datos, +debe propagarse tambien su HASH. Si tras compactar la +base de datos, el HASH no coincide, deberia borrarse +y solicitar una nueva copia a la red. + +04/Ene/00 +Los registros BDD que llegan a ver visibles FUERA del +modulo s_bdd.c no deberian contener informacion +no necesaria para las rutinas externas, como +el formato interno, el destino, etc. + +Ademas, el destino es accesible para el comando "dbq". + +04/Ene/00 +Deberian poder enviarse globales a canales, aunque +estos tengan modo "+n". + +03/Ene/00 +A la hora de contar los clones, tambien se cuentan las +conexiones de los propios servidores. + +Curiosamente solo se tiene en cuenta cuando somos nosotros +quienes recibimos la conexion, no quien la inicia. Ello hace +que los contadores sean diferentes en cada nodo de la red. + +16/Dic/99 +Posibilidad de que un usuario pueda ponerse la +etiqueta de "no publicidad". + +16/Dic/99 +Los mensajes globales que provengan de determinados +nicks deben consultar una base de datos para cambiar +su procedencia (por ejemplo, todo lo que venga de +"global" que aparezca desde el bot "publicidad", que +realmente no existe). De esta forma se puede cambiar +facilmente la apariencia de los mensajes, sin hacer +nada especial, y permite que los usuarios bloqueen +los mensajes de forma selectiva. + +13/Dic/99 +Reaparecen viejos fantasmas. Algunas veces un servidor +no permite la conexion del numero de usuario que tiene +permitidos por clones. No parece haber ninguna razon +para ello, ninguna regla. + +Por ejemplo, entro dos clones desde +"castor.argo.es", pero al intentar hacer lo mismo desde +"corinto.argo.es", me dice que ya tengo dos clones +(al intentar meter el segundo), y solo me admite +una conexion. + +05/Nov/99 +A medida que la red crezca, sera mas necesario el +adoptar ciertas protecciones ante nodos maliciosos, +ya que al delegar multitud de actividades de gestion +en los nodos, estos deben ser relativamente confiables. + +Es posible, por ejemplo, ampliar el comando "nick" +para que envie una prueba de que el nodo conoce +la clave del usuario; esa prueba puede ser +verificada por cualquier nodo que SI la conozca, +especialmente los nodos de control. + +05/Nov/99 +Los comandos NICK+MODE suelen ir juntos, especialmente +cuando estamos hablando de nicks registrados. Deberiamos +pensar en un comando nuevo que unificase ambos. + +03/Nov/99 +Las estructuras HASH deberian ocupar una o mas +"cache lines" (32bytes en Intel, 64bytes Athlon). + +03/Nov/99 +El taman~o de las estructuras HASH para cada +BDD deberia depender de: + +a) El numero de registros +b) El numero de accesos por segundo + +De esa forma no se desperdicia tanta +memoria como ahora, ni se penaliza la +velocidad de acceso de las tablas realmente +criticas. + +02/Nov/99 +Cuando se ordena el borrado de una BDD, no podemos +estar seguros de que el HUB haya propagado la orden +a traves de la red ANTES de cortar sus enlaces +con el resto de nodos. + +Por ello a veces es preciso borrar una base de datos +varias veces, para que se entere toda la red. + +02/Nov/99 +Deberia definirse un "pool" de structuras hash +para no tener que hacer un malloc para cada una +de ellas. Es decir, algo como hacer malloc de +grupos de 100 estructuras, por ejemplo. De esta +forma la peticiones de memoria son mas rapidas, +y la carga en memoria del malloc es menor +(porque se pide un objeto grande en vez de muchos +pequen~os). + +27/Oct/99 +Cuando un mismo registro tiene varios destinatarios, +en cada servidor se almacena en memoria solo el mas +reciente cuya mascara sea valida para ese servidor. + +Deberia almacenarse el que tenga la mascara +mas especifica. El problema es programar esto. + +Lo sencillo seria que mascaras mas especificas +sencillamente son mas largas, pero eso no vale +para "*.irc-hispano.org". + +Otra posibilidad es simplemente contar el numero +de caracteres que "absorbe" cada comodin. A mas +absorcion, menos especifico. Pero esto es equivalente +a lo anterior. + +Si forzamos a que la parte "irc-hispano.org" sea siempre +sustituida por un "*", se puede usar una metrica de +este tipo. + +De todas formas, es cierto que "*.org" es mas especifico +que "*". + +27/Oct/99 +Conservar en memoria exclusivamente un indice +a la posicion en la BDD en disco. La BDD se +mapea en memoria con un mmap. + +Ojo con la entrada de nuevos registros (hay +que ampliar el mmap), con su borrado y, +sobre todo, con la compactacion de la BDD. + +Aunque este sistema es rapido y ocupa muy poca +memoria, tiene el problema del arranque, cuando +hay que leer la BDD a memoria. Tal vez sea +conveniente adoptar alguna herramienta tipo GDBM. +El problema de ese enfoque es comprobar la +integridad de la BDD, ademas de que las +compactaciones seguirian siendo lentas. + +21/Oct/99 +La compactacion destruye registros cuando +estos no son para "*". Eso es asi porque +cuando se van a buscar, no existen en +el server local a menos que la mascara +de destinatario haga match con el server. + +21/Oct/99 +Soporte para IPs privadas en la red, a traves +de una BDD, con registros especificos para +cada nodo de la misma. + +Esto es especialmente importante en los +nuevos nodos que entren, pertenecientes +a redes de cable. + +Las direcciones propagadas deberian ser +de la forma "17.1.168.192.gaia.irc-hispano.org", +para permitir una delegacion DNS simple. + +Los nodos no deben propagar la posible +resolucion interna, porque solo es valida +de forma local, y puede propagar +informacion confidencial. + +15/Oct/99 +Poner los HASHES con mmap(), para no tener +que hacer tantas operaciones cuando se reciben +registros nuevos. + +?Que ocurre si alguien borra el fichero o reduce +su taman~o mientras tenemos el mmap? + +13/Oct/99 +La compactacion no elimina registros duplicados. +Ese es un problema cuando, por ejemplo, un usuario +cambia muchas veces la clave de nick entre dos +claves distintas. Los registros con la clave +actual seran mantenidos siempre. + +11/Oct/99 +Tenemos problemas si una BDD se borra si ese nodo +tiene varias vias de actualizacion (HUB). Ver documentacion +online. + +El parche DB25 soluciona el problema, pero es bastante +chapucero. Hay que pensar algo mejor. + +08/Oct/99 +Imprimir NOTICES a los ircops en puntos estrategicos: + Borrado de la base de datos + Compactacion + Preguntas remotas + +08/Oct/99 +Cuando un servidor detecta que una de sus BDD +esta corrupta, solicita una copia nueva a TODOS +sus enlaces. Si es un HUB, ello supone: + + * Que recibira actualizaciones por todos sus enlaces + * Que enviara dichas actualizaciones por todos los enlaces + +Esto es un consumo de ancho de banda y CPU importante, +aunque solo se produce en los HUBs con BDD corrupta. + +Esto es aplicable tambien cuando un HUB con varios HUBS +se conecta a ellos y tiene una version inferior a la suya. + + + Index: ircdh/lazyserver.jcea diff -u ircdh/lazyserver.jcea:1.1.1.1 ircdh/lazyserver.jcea:removed --- ircdh/lazyserver.jcea:1.1.1.1 Fri Jul 26 14:58:22 2002 +++ ircdh/lazyserver.jcea Thu Jan 23 03:08:12 2003 @@ -1,72 +0,0 @@ -$Id: lazyserver.jcea,v 1.1.1.1 2002/07/26 21:58:22 zolty Exp $ - -14/Jun/00 -Con la tecnologia de IRC sobre tuneles IP que he -desarrollado (http://www.argo.es/clones/clones2.html), el -interes por los "Lazy server" se diluye un poco, salvo -por el hecho de que ello ahorraria CPU y ancho de banda. - -Se necesitaria un comando "setip" para fijar la IP y HOST. -Este comando deberia estar permitido SOLO desde ciertas -IPs (en particular 127.0.0.1). - -22/Dic/99 - -Cuando en un sitio hay varios clientes, no tiene sentido que -todos ellos se conecten al servidor, sino que lo mas rentable -es que hubiese un servidor local. La ventaja es mayor, incluso, -cuando los usuarios tienen canales comunes, etc. - -Pero un servidor local no siempre es factible ya que, por un -lado requiere un esfuerzo de administracion y, por otro, -los lugares donde resulta rentable no son CONFIABLES. - -Este proyecto pretende desarrollar un "lazy server". Es decir -un servidor que actue de proxy entre varios usuarios y un servidor -normal de la red. La red solo debe enviar una copia al proxy -de todas aquellos paquetes que deban ser recibido por uno o -mas usuarios del mismo. - -No basta con hacer proxy de "join", "privmsg", "notice", -"part", "quit", "squit", "mode" y alguno mas, ya que todos -los demas comandos del IRC deben poder ser enviados sin -problemas. Ello complica la parte del servidor de IRC en si, que -debe parchearse para poder soportar "lazyservers". Si un usuario -del proxy hace un "/version gaia.*", ese comando debe rutarse -por la red, y la respuesta debe llegar al usuario que hizo la -peticion, no a todo el mundo. - -De todas formas ese problema se soluciona -aparentemente- de forma -bastante sencilla. Practicamente los unicos cambios que serian -necesarios en el servidor serian: - -a) Fiarse del "from" que envia un "lazy server", si se corresponde - a nicks asignados. - -b) Permitir la entrada de un nuevo nick solo si su IP se corresponde - con una IP local. - -c) La mayoria de los comandos del proxy no tienen efecto hasta que - el servidor del que cuelga responde (por ejemplo, entradas - y salidas en canales). - -d) En aquellos comandos que un servidor debe enviar (respuesta) a - varios usuarios, el servidor debe ser parcheado para que - solamente envie una copia para todos los usuarios que - cuelgan del proxy. - -En una primera fase, el cambio mas sencillo en el servidor de IRC -seria: - -a) Anadir un nuevo comando para la entrada de "lazy servers". - -b) Cambiar las rutinas de "parsing" para que tengan en cuenta - el punto A anterior. - -c) cptr de estos clientes deberia ser el mismo. tal vez sea - necesaria una especie de "contador de referencias", asi como - una lista de nicks asociados. - -Una de las ventajas que abre este sistema, ademas de reducir -trafico, es la posibilidad de meter "clones" sin necesitar una IP -fija, a pesar del sistema de control de clones distribuido. Index: ircdh/tener_en_cuenta.jcea diff -u ircdh/tener_en_cuenta.jcea:1.1.1.1 ircdh/tener_en_cuenta.jcea:removed --- ircdh/tener_en_cuenta.jcea:1.1.1.1 Fri Jul 26 14:58:22 2002 +++ ircdh/tener_en_cuenta.jcea Thu Jan 23 03:08:12 2003 @@ -1,45 +0,0 @@ -$Id: tener_en_cuenta.jcea,v 1.1.1.1 2002/07/26 21:58:22 zolty Exp $ - -14/Ene/00 -Un proxy abierto puede pasar el chequeo si, por ejemplo, -la conexion del usuario completa la capacidad del -proxy, ya que este no tendra recursos para atender -la verificacion de la red. - -El problema se agrava por el hecho de que si eso -ocurre, la IP sera mantenida en cache y no pasara -mas comprobaciones de proxy durante 30 minutos. - -10/Ene/00 -Los modos +A y +S de canales, no son -representados por muchos clientes de IRC, -entre ellos el popular mIRC, a menos que se -este utilizando la version 5.61 o superior. - -10/Ene/00 -Las bases de datos de disco se pueden truncar a 0, -pero no borrar. - -22/Dic/99 -He hecho algunas pruebas para ver hasta que punto puede -resultar rentable en terminos de ancho de banda el -que la comunicacion entre servidores se realice usando -compresion GZIP. Para ello he generado un BURST y lo he -grabado en disco. Comprimido con GZIP, su tamano se -reduce a la mitad. - -La ganancia no es demasiado importante, por tanto. - -27/Oct/99 -Las BDD no residentes no se compactan, aunque -se marca la orden en disco. - -27/Oct/99 -Solo se conservan en memoria los registros -que afectan al servidor en concreto. - -27/Oct/99 -"make install" elimina las BDD que no se -estan empleando. Por tanto hay que modificar -el "Makefile" si se an~aden BDD nuevas. - Index: ircdh/todo.jcea diff -u ircdh/todo.jcea:1.5 ircdh/todo.jcea:removed --- ircdh/todo.jcea:1.5 Thu Aug 22 13:27:13 2002 +++ ircdh/todo.jcea Thu Jan 23 03:08:12 2003 @@ -1,753 +0,0 @@ -$Id: todo.jcea,v 1.5 2002/08/22 20:27:13 zolty Exp $ - -13/Ago/02 -La variable que contiene losmodos de usuario esta superpoblada y -apenas le queda ya algun bit libre. Habia que mover lo que son -flags internos del usuario (si se le ha hecho PING o no, si es TS8, etc) -a una variable separada, preferiblemente que exista SOLO cuando el -usuario/conexion es local. - -13/Ago/02 -Cuando un usuario esta silenciado, recibe un "notice" del servidor, -informandole de este hecho. Eso deberia cambiarse por un NUMERIC. - -06/Ago/02 -Poder poner, al conectar, una clave de servidor y otra de nick, al mismo tiempo. - -06/Ago/02 -Documentar en el registro (irc.org) correspondiente el uso -de QUITLEN y AWAYLEN. - -05/Ago/02 -Estudiar la conveniencia de que el taman~o del comentario de los -QUIT y de las GLINES no este vinculado a TOPICLEN. El problema se -nota cuando un usuario tiene una IP Virtual larga, que se puede -cortar cuando le cae una GLINE. - -29/Jul/02: -Canal con +n, status del usuario sin +o ni +v, ban al nick unicamente, -cuando se cambia de nick y se pone otra vez el baneado, puede escribir en el -canal :) - -25/Jul/02 -Cuando alguien se pone +x, deberia salirle publicidad -de la personalizacion de IPs Virtuales, tomando el -mensaje directamente de la BDD. - -09/Jul/02 -Si se configura el server con "BDD_VIP3", el usuario -solo deberia poder ponerse el "+x" si el nick -aparece en la tabla "v" o "w". - -Estudiar implicaciones en cosas como cambios de nick. - -24/Jun/02 -[13:16] <zolty> Cuando el servidor tiene activado el WATCH y un usuario -[13:16] <zolty> que monitorizamos y que no esta en nuestro servidor, -[13:16] <zolty> entra/sale de la red o cambia de nick, y el nick -[13:16] <zolty> esta en la tabla "v" o "w", la IP que aparece en el -[13:16] <zolty> WATCH que nos manda el servidor, es la ip virtual -[13:16] <zolty> normal, no la ip virtual personalizada que le -[13:16] <zolty> corresponde. -[13:16] <zolty> Cuando uno sale, se avisa el watch, antes de hacer -[13:16] <zolty> un "mode -r" y es muy raro, porque a la hora de enviar -[13:16] <zolty> el notify, AUN tiene el +r. -[13:16] <zolty> Cuando uno entra, se avisa el watch antes de recibir -[13:16] <zolty> un +r que vendra del nodo donde esta el usuario -[13:16] <zolty> monitorizado. - -21/Jun/02 -Comprobar que KICK, JOIN, PART efectivamente son ya -100% puros. - -12/Jun/02 -/server servidor puerto clave_server:clave_nick -/server servidor puerto clave_server!clave_nick - -12/Jun/02 -> /watch L -> 1 no esta en irc, ultimo paso el Tue May 21 17:30:18 2002 -> -> Sin embargo el usuario 1 jamas conecto al irc... propongo que se mande -> un tiempo 0 tal y como se hace al borrar al usuario de la lista, pero -> no el momento en que se añadio ese nick al watch. - -17/Abr/02 -En varios sitios aparecen numeros como 512, 510, etc., que -se utilizan como limitadores de la longitud de la linea -enviada o recibida, etc. Habria que transformar esos numeros -en un macro usado en todas partes. - -Eso incluye el nuevo macro MAXLEN introducido en 2.10.H.04.14. - -28/Dic/01 -En los casos en los que no suponga una perdida de rendimiento -o memoria apreciable, no deberiamos permitir que comandos -ilegales enviados por otros nodos maten nuestro servidor. Lo mas -inteligente seria detectar el problema, hacer log y cortar el enlace -de forma permanente hasta que venga un IRCop y haga un "rehash" manual, -por ejemplo. - -Por ejemplo, el comando ":nombre_del_Servidor join #canal" mata un server. - -15/Nov/01 -Comentado por "SHauN": - -Porqué los servidores puestamente no admiten mayusculas en nombre o -identidades? Será depende del dia... porque hay dias que no hay dios que -entre con una identidad Mayus/Minus Porque el servidor te denega el accesso -con un mensaje: Bad Name/Ident i sin embargo otros dias por el mismo -servidor no hay ningun problema? - -Comprobarlo y solucionarlo. - -12/Nov/01 -"/trace pepe pepe.*" muestra dos veces un mensaje de "no such server". - -12/Nov/01 -Zoltan: -Para acabar, hay un bug, para meter en el todo.jcea... Ocurre que si un usuario con modos +r o +rh, recibe un rename, -no se manda al usuario los modos que se pierden. -Sé que hoy por hoy, un usuario con +r no recibe renames, pero según tu Web, hay la intención de hacer renames a los -usuarios tras un cambio de contraseña..... y ha se solucionar esto para que el usuario pueda ver los modos que se -pierden - -Es más grave si haces un "ghost" por "nick", ya que te hace un -"rename" del nick, pero no libera modos. - -30/Oct/01 - Ahora mismo, el raw 319, cuando nos devuelve, al hacer un whois, la lista -de canales, lo hace mostrando el orden en que hemos entrado a los canales, -ordenados del mas reciente al primero. Pienso que sería de más utilidad -tener dicha lista ordenada alfabeticamente, pues a nadie le interesa el -orden en que uno entra a los canales, pero si puede ser útil tener esa lista -ordenada alfabeticamente para cuando queremos ver si fulanito está en tal o -cual canal, y máxime desde que carme y retevision admiten 15 canales a la -vez para users. Por lo tanto, devolver la lista ordenada sería lo más -práctico. Para ello, o bien se va reordenando la lista que guarda en memoria -los canales de cada usuario, cada vez que un usuario entra en un canal, (lo -que pienso que es gastar cpu y tiempo de ejecución a lo tonto) o, -simplemente, cuando se va a mostrar esa información, procesarla y devolverla -ordenada alfabeticamente. - - Saludos, - -NiKoLaS - -19/Sep/01 -Para facilitar la tarea de bots de control de proxies abiertos, -la verificacion de GLINES debe hacerse *ANTES* de expulsar -a un usuario por socks abierto. - -El problema es que las GLINES no se pueden cambiar de posicion -ya que dependen del DNS inverso y en IDENT. - -Una posibilidad es que cuando hay un socks abierto, se ponga una -marca al usuario, y se le deje continuar. Una vez validadas las -GLINES, comprobamos dicha marca y nos lo cargamos si es menester. - -18/Sep/01 -Cambios de nick y de ciertos modos (en especial +h y +x) deben -borrar la caché de IP virtual de ese nick. - -07/Sep/01 -Entrando a traves de un nodo que no tolera el +x, si hago un -whois a un usuario con IP virtual en la tabla "v", aparece su -IP virtual "real", no la de la tabla. - -Eso pasa para gente que cuando entra lo hace con /nick nick:clave, -no con /server server puerto clave - -Se puede comprobar haciendo un "/who 0 o", habiendo entrado -por un tunel de Argo. - -EXPLICACION ADICIONAL: - -Si compilamos un IRCD con "BDD_VIP2 : HISPANO/ESNET: Ocultación de IP de TODOS los usuarios [N/y/?]" -y "NO", entonces el servidor no permitirá que los usuarios locales se pongan +x, pero si que -aceptara +x de usuarios de otros nodos de la red. - -El problema es que si un usuario conecta y activa su +x una vez -que ya esta conectado (por ejemplo, porque entro con un nick que no era +r) -entonces se calculara su IP virtual de forma estandar, y no se mostrara la -IP virtual que corresponde a ese nick segun la tabla "v", de existir. - -Este bug solo es visible cuando el nick al que hacemos "whois" -tiene una entrada personalizada en la tabla "v". - -31/Ago/01 -Si un usuario con IP virtual en tabla "v" entra por un servidor -que no tolera +x, evidentemente no se vera su IP virtual por BDD. - -17/Ago/01 -Dado que la gente es incapaz de trabajar (no digo recordar :-) -las claves seguras de 12 caracteres del "+r", ademas del problema -de solo poder usar 64 caracteres y, pero, solo 4 caracteres al -principio de cada grupo, seria mas interesante que en vez de que -los usuarios metan la clave directamente, meter un texto largo -y calcular su HASH. De esa forma es más fácil aprovechar los -64 bits de verdad, aun con claves relativamente "recordables". - -16/Ago/01 -Persiste el problema de que algunos usuarios ven IPs virtuales -incorrectas si un usuario cambia de nick, y ambos nicks tienen -IPs virtuales diferentes (solo posible si al menos uno de ellos -tiene entrada en la tabla "v", o hay un cambio de clave -de proteccion de IP por medio). - -27/Jul/01 -En el MOTD deberia salir una frase al azar, en plan "fortune". - -25/Jul/01 -Pensar sobre la conveniencia de ampliar el limite de -30 "bans" que tienen ahora los canales. - -22/Jun/01 -Cuando se compacta la base de datos, debe realizarse en un "thread" o -proceso aparte, para no dejar de gestionar las conexiones durante -periodos prolongados. Dicha tarea aparte debe avisar al servidor -principal de su finalizacion, para que haga un "rehash" y recargue -la base de datos, incluyendo la validacion de su "hash". - -14/Jun/01 -> >Se supone que si pongo un ban a alguien solo por su nick (nick!*@*), el -> >tipo no puede hablar si esta en el canal, y no puede entrar si sale e -> >intenta volver a entrar, no ? Bueno, esto funciona. -> > -> >Pero y si el tipo se cambia el nick? Puede volver a entrar en el canal y -> >hablar, pero si luego se vuelve a poner el otro nick (el que estaba -> >baneado) ... puede seguir hablando ? Es lo que me ha pasado a mi. Esto es -> >correcto? Si hay un ban para un nick, por que si se lo cambia y despues -> >vuelve al nick baneado, ese ban no le afecta ya ? - -06/Jun/01 -Pensar sobre la conveniencia de que los usuarios -normales no puedan ver el nodo por el que se -conecta otro usuario. - -Cambiar el "wallops" para que en vez de mandar solo a -Opers e IRCops, mande a todos los que tienen +w, y restringir -dicho modo a Opers e IRCops. Esto es mas claro y logico. - -17/May/01 -Con u2.10.H.02.44, el modo "+w" es ignorado a menos -que seamos tambien "+o" o "+h". Lo logico seria que -el modo "+w" solo se pueda poner si somos "+h" o "+o", -o que su funcionalidad se pase a una máscara "+s". - -26/Abr/01 -El notice que informa del "silence" deberia -enviarse en la misma rutina que envia el "silence" en -si, para evitar duplicar codigo. - -Ojo cuando se manda un mensaje a varios destinos. - -25/Abr/01 -Meter RC4 en el servidor, tanto para los enlaces -server<->server como server<->cliente. - -16/Abr/01 -* 2001/04/16 jc...@ar... (Z11 - u2.10.H.02.27) FIX - ----------------------------------------------------------------------- - Bug comunicado por {^DaNi^}. - - Los contadores de la zlib hace "wrap". Entre otros efectos, el nivel - de compresion informado es incorrecto. - - Soluciono el problema manteniendo un contador separado, que se actualiza - sumandole el valor de los contadores zlib antes y despues de la llamada, - considerando tambien el caso especial del wrapping. - - Observo que la rutina original del IRCD tambien hace wrapping. - - Ello es visible, por ejemplo, cada 2000 gigas o 2000 millones de - mensajes transferidos sin split. - - En IRC-Hispano, a fecha de hoy, supondría tener enlaces sin caidas - durante unos ocho meses. Por lo tanto, no me preocupo de este tema - de momento... - -11/Abr/01 -Por defecto, solo se deberia mostrar canales -con mas de X usuarios. - -22/Mar/01 -Tener un sistema para poder hacer seguimientos -de cambios de un nick determinado, aunque no -estemos en un canal comun. - -11/Ene/01 -[21:21] <DjAcE> creo que tengo un pequeqo bug -[21:22] <jcea> :) -[21:22] <DjAcE> /who #hacking x% no devuelve nada -[21:22] <DjAcE> pero si le metes el formato del who -[21:22] <DjAcE> p.e. /who #hackers x%cn -[21:22] <DjAcE> entonces si - -13/Dic/00 -El servidor deberia reconocer un "nick *" -como una orden para ponerse un nick -de la forma "invnnnnnn". Esto es util -para temas como el IRCQ, y demas -servicios automaticos. - -07/Dic/00 -Cuando un usuario cambia de nick, su IP virtual no -se recalcula. - -24/Nov/00 -Con las nuevas reglas de acceso a la BDD, si se an~aden -nuevas tablas o registros confidenciales, los viejos -nodos los seguiran mostrando mientras no se actualicen. - -16/Nov/00 -Cada vez que cambias de nick, el server te informa de -tu nueva IP virtual... que es la misma. Al menos es la -misma si solo tienes el flag "+x". - -16/Nov/00 -Si tenemos los flags "ohX", y nos quitamos el -"oh", el "X" permanece. - -14/Nov/00 -El lag calculado para "/map" debe actualizarse -en mas ocasiones que "CREATE". Por ejemplo, cuando -entra un nick nuevo, o cuando un usuario cambia de nick. - -En general, cuando se mande un "timestamp". - -14/Nov/00 -En los nodos sin usuarios no es facil calcular -el lag. En esos casos es mejor imprimir un "?" -a imprimir 0 segundos. - -19/Oct/00 -El "make config" debe obligar a que el usuario introduzca -un usuario/grupo correcto, que sino luego falla el -"make install". - -La gente es boba... - -17/Oct/00 -En canales con muchos usuarios tenemos dos problemas: - -a) La gente se cae por flood cuando el servidor le manda - la lista de usuarios del canal. - -b) Mucho trafico "espureo" en el canal, con todas - las entradas y salidas del mismo. - -17/Oct/00 -Un "/list" no deberia sacar un listado extenso de canales. -De hecho, deberia limitarse el numero de canales mostrados -por cualquier "list", indicando, en caso preciso, que hay -mas canales pero se requiere una consulta mas especifica. - -El problema es que cuando se busca por "topic" o por -nombre de canal, por ejemplo, el filtrado en si lo hace -el cliente, no el servidor!. O eso es lo que pasa en -el mIRC. - -16/Oct/00 -El mensaje de "Too many connections from same IP for *.*.*.*" -no deberia ser visible para usuarios normales. - -15/Oct/00 -Cuando usamos el modo +x en un canal, deberia aparecer -+x-x, para que no quede como "modo" del canal. - -Claro que esto tiene la ventaja de que se sabe que -se ha usado un modo "x" en un canal determinado, porque -queda constancia. Pero esto solo lo ve la gente que -estaba en el canal en el momento de usarlo. - -05/Oct/00 -Cuando entra en un canal alguien con IP virtual, -los que no tienen +X reciben la virtual, y los que -tienen +X DEBERIAN recibir la real. - -Ahora mismo todo el mundo recibe la virtual, incluyendo -la gente con +X. Ello obliga a hacer un WHOIS aparte, -y puede crear conflictos con los sistemas de cache -de muchos clientes IRC. - -Lo mismo se aplica para privsmg, part, quit, etc. - -28/Jun/00 -Eliminar la cache interna del IRCD para DNS. - -23/Jun/00 -?Que informacion se guarda en el WHOWAS si un usuario sale -y nadie en el nodo local le ha hecho un who/whois? - -22/Jun/00 -Cuando sabemos que es un usuario, deberia completarse la -posible negociacion con "REJ". - -22/Jun/00 -Si ACK sin REQ previo, cortar enlace. - -14/Jun/00 -Si un leaf tiene un numero de serie mayor que su HUB, -le intenta introducir registros que este ignora. Esto -supone trafico extra innecesario, y si el leaf tenia -el grifo abierto -> split. - -a) El HUB no debe responder a "B". -b) En el join, el HUB debe indicar al otro extremo - que no va a aceptar registros provenientes de el. - -12/Jun/00 -Estudiar la interaccion entre las microrafagas -y que algunas de las conexiones en modo "microrafaga" -se corte de forma abrupta antes de cerrar -la "microrafaga". - -04/May/00 -A veces "stats l" filtra informacion sobre -conexiones de usuarios. - -19/Abr/00 -Las GLINEs deberian validarse tambien contra las -IPs virtuales. - -18/Abr/00 -Si se hace un /whois IPvirtual, no dice que este -conectado, aunque asi sea. - -28/Mar/00 -Probando "/who" no deberia ser posible sacar la -IP de un usuario con IP virtual. - -Tampoco deberia ser posible localizar clones cuando -algunos de los usuarios tienen IP virtual y otros no. - -23/Mar/00 - An~adir una base de datos con clave - el nombre de un nodo y valor un mensaje - que se muestra a todos los usuarios que se - conectan por dicho nodo. - -22/Mar/00 - Se veian las IPs reales en los "notice" que envia el servidor cuando - un usuario entra o sale, si se tiene la mascara "+s" apropiada activada. - - La solucion es que ese flag solo este disponible para Helpers e IRCops. - - Se visualiza la IP real cuando un usuario intenta - conectar y: - - - La conexion esta prohibida - - Demasiadas conexiones para la clase - - Demasiadas conexiones para la IP - - Esto se soluciona sin mas que definir esos mensajes - como aptos de ser recibidos exclusivamente por IRCops - y Helpers - -09/Mar/00 -Posibilidad de corromper una base de datos: - -Si durante la transferencia de una base de datos se -detecta que esta corrupta (por ejemplo, porque se -hace un "rehash" mientras tanto), el nodo borra su BDD -local, pero le estan llegando registros nuevos, asi que -perdera los primeros. - -El otro extremo no se entera porque no detecta que se le -ha indicado base de datos corrupta, porque en ese -momento tiene el grifo cerrado. - -Una posibilidad es que cuando se envie el fin de una BDD -se envie su HASH. Si en el receptor no coinciden, borra -la BDD y la pide otra vez. - -09/Mar/00 -En algunos servidores aparecen algunas lineas en blanco -en las bases de datos en disco. Creo que mete las lineas -en blanco al final del fichero, cuando ocurre algo -"especial", y a medida que se van an~adiendo registros, -esas lineas acaban por aparecer por medio. - -Estudiando el codigo no hay muchas posibilidades. Como -no sea al compactar... - -29/Feb/00 -Peticion de Trebolin. -Los usuarios con clones deberian poder consultar el numero -de clones que tienen disponibles, asi como su fecha de -alta y de expiracion. - -21/Feb/00 -Las ILINES deben ser "case insensible", y lo que -se propaga por base de datos debe ser minusculas. -Corregir las que ya estan metidas. - -18/Feb/00 -Cuando un cliente sale del IRC, se almacena en el WHOWAS -su IP cifrada si estaba protegido. Los Operadores de la -red deberian tener acceso tambien a la IP real. - -08/Feb/00 -Aunque un Channel Service puede enviar mensajes a todos -los miembros de un canal, dichos mensajes aparecen -dentro del canal, como si el CS estuviese dentro, -no como un mensaje Global. - -24/Ene/00 -Cuando no se puede completar una verificacion SOCKS, -el cliente entra, y deberia salirle algun mensaje -en pantalla. - -20/Ene/00 -Cuando un usuario con nick registrado se pone un nick -sin registrar, aparece su IP real. Perfecto. Lo malo -es que si luego recupera su nick registrado, -su nick antiguo y su IP real aparecen en un "/whowas". - -19/Ene/00 -Verificar que cuando un servidor no inicia una conexion, -no envia la negociacion de BDD *ANTES* de haber -recibido la identificacion PASS/SERVER del otro -extremo. - -Ello puede provocar el envio de varios segmentos -de claves repetidos. El sistema lo descarta -automaticamente, pero supone un consumo de CPU -y ancho de banda. - -18/Ene/00 -Cuando se envia el informe de SOCKS abierto, deberia -esperarse a tener la resolucion inversa. - -18/Ene/00 -Cuando un proxy es inseguro, deberia enviarse -al usuario a alguna pagina con informacion -sobre el tema. - -17/Ene/00 -?Cuanto dura una entrada en IPcheck, si el usuario -no esta conectado?. - -10/Ene/00 -No todas las BDD deben normalizarse a minusculas. - -10/Ene/00 -Alguna forma para borrar TODAS las bases de datos -de un nodo determinado. - -07/Ene/00 -Cuando se realiza una compactacion de una base de datos, -debe propagarse tambien su HASH. Si tras compactar la -base de datos, el HASH no coincide, deberia borrarse -y solicitar una nueva copia a la red. - -04/Ene/00 -Los registros BDD que llegan a ver visibles FUERA del -modulo s_bdd.c no deberian contener informacion -no necesaria para las rutinas externas, como -el formato interno, el destino, etc. - -Ademas, el destino es accesible para el comando "dbq". - -04/Ene/00 -Deberian poder enviarse globales a canales, aunque -estos tengan modo "+n". - -03/Ene/00 -A la hora de contar los clones, tambien se cuentan las -conexiones de los propios servidores. - -Curiosamente solo se tiene en cuenta cuando somos nosotros -quienes recibimos la conexion, no quien la inicia. Ello hace -que los contadores sean diferentes en cada nodo de la red. - -16/Dic/99 -Posibilidad de que un usuario pueda ponerse la -etiqueta de "no publicidad". - -16/Dic/99 -Los mensajes globales que provengan de determinados -nicks deben consultar una base de datos para cambiar -su procedencia (por ejemplo, todo lo que venga de -"global" que aparezca desde el bot "publicidad", que -realmente no existe). De esta forma se puede cambiar -facilmente la apariencia de los mensajes, sin hacer -nada especial, y permite que los usuarios bloqueen -los mensajes de forma selectiva. - -13/Dic/99 -Reaparecen viejos fantasmas. Algunas veces un servidor -no permite la conexion del numero de usuario que tiene -permitidos por clones. No parece haber ninguna razon -para ello, ninguna regla. - -Por ejemplo, entro dos clones desde -"castor.argo.es", pero al intentar hacer lo mismo desde -"corinto.argo.es", me dice que ya tengo dos clones -(al intentar meter el segundo), y solo me admite -una conexion. - -05/Nov/99 -A medida que la red crezca, sera mas necesario el -adoptar ciertas protecciones ante nodos maliciosos, -ya que al delegar multitud de actividades de gestion -en los nodos, estos deben ser relativamente confiables. - -Es posible, por ejemplo, ampliar el comando "nick" -para que envie una prueba de que el nodo conoce -la clave del usuario; esa prueba puede ser -verificada por cualquier nodo que SI la conozca, -especialmente los nodos de control. - -05/Nov/99 -Los comandos NICK+MODE suelen ir juntos, especialmente -cuando estamos hablando de nicks registrados. Deberiamos -pensar en un comando nuevo que unificase ambos. - -03/Nov/99 -Las estructuras HASH deberian ocupar una o mas -"cache lines" (32bytes en Intel, 64bytes Athlon). - -03/Nov/99 -El taman~o de las estructuras HASH para cada -BDD deberia depender de: - -a) El numero de registros -b) El numero de accesos por segundo - -De esa forma no se desperdicia tanta -memoria como ahora, ni se penaliza la -velocidad de acceso de las tablas realmente -criticas. - -02/Nov/99 -Cuando se ordena el borrado de una BDD, no podemos -estar seguros de que el HUB haya propagado la orden -a traves de la red ANTES de cortar sus enlaces -con el resto de nodos. - -Por ello a veces es preciso borrar una base de datos -varias veces, para que se entere toda la red. - -02/Nov/99 -Deberia definirse un "pool" de structuras hash -para no tener que hacer un malloc para cada una -de ellas. Es decir, algo como hacer malloc de -grupos de 100 estructuras, por ejemplo. De esta -forma la peticiones de memoria son mas rapidas, -y la carga en memoria del malloc es menor -(porque se pide un objeto grande en vez de muchos -pequen~os). - -27/Oct/99 -Cuando un mismo registro tiene varios destinatarios, -en cada servidor se almacena en memoria solo el mas -reciente cuya mascara sea valida para ese servidor. - -Deberia almacenarse el que tenga la mascara -mas especifica. El problema es programar esto. - -Lo sencillo seria que mascaras mas especificas -sencillamente son mas largas, pero eso no vale -para "*.irc-hispano.org". - -Otra posibilidad es simplemente contar el numero -de caracteres que "absorbe" cada comodin. A mas -absorcion, menos especifico. Pero esto es equivalente -a lo anterior. - -Si forzamos a que la parte "irc-hispano.org" sea siempre -sustituida por un "*", se puede usar una metrica de -este tipo. - -De todas formas, es cierto que "*.org" es mas especifico -que "*". - -27/Oct/99 -Conservar en memoria exclusivamente un indice -a la posicion en la BDD en disco. La BDD se -mapea en memoria con un mmap. - -Ojo con la entrada de nuevos registros (hay -que ampliar el mmap), con su borrado y, -sobre todo, con la compactacion de la BDD. - -Aunque este sistema es rapido y ocupa muy poca -memoria, tiene el problema del arranque, cuando -hay que leer la BDD a memoria. Tal vez sea -conveniente adoptar alguna herramienta tipo GDBM. -El problema de ese enfoque es comprobar la -integridad de la BDD, ademas de que las -compactaciones seguirian siendo lentas. - -21/Oct/99 -La compactacion destruye registros cuando -estos no son para "*". Eso es asi porque -cuando se van a buscar, no existen en -el server local a menos que la mascara -de destinatario haga match con el server. - -21/Oct/99 -Soporte para IPs privadas en la red, a traves -de una BDD, con registros especificos para -cada nodo de la misma. - -Esto es especialmente importante en los -nuevos nodos que entren, pertenecientes -a redes de cable. - -Las direcciones propagadas deberian ser -de la forma "17.1.168.192.gaia.irc-hispano.org", -para permitir una delegacion DNS simple. - -Los nodos no deben propagar la posible -resolucion interna, porque solo es valida -de forma local, y puede propagar -informacion confidencial. - -15/Oct/99 -Poner los HASHES con mmap(), para no tener -que hacer tantas operaciones cuando s... [truncated message content] |
From: Toni G. <zo...@us...> - 2003-01-23 11:04:08
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-01-23 11:04:07 UTC Modified files: COPYING Log message: Licencia GNU/GPL 2 ---------------------- diff included ---------------------- Index: ircdh/COPYING diff -u ircdh/COPYING:1.1 ircdh/COPYING:1.2 --- ircdh/COPYING:1.1 Thu Jan 23 03:01:00 2003 +++ ircdh/COPYING Thu Jan 23 03:03:56 2003 @@ -1,38 +1,40 @@ - GNU GENERAL PUBLIC LICENSE - Version 1, February 1989 + Version 2, June 1991 - Copyright (C) 1989 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble - The license agreements of most software companies try to keep users -at the mercy of those companies. By contrast, our General Public + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. The -General Public License applies to the Free Software Foundation's -software and to any other program whose authors commit to using it. -You can use it for your programs, too. +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. When we speak of free software, we are referring to freedom, not -price. Specifically, the General Public License is designed to make -sure that you have the freedom to give away or sell copies of free -software, that you receive source code or can get it if you want it, -that you can change the software or use pieces of it in new free -programs; and that you know you can do these things. +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. - For example, if you distribute copies of a such a program, whether + For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the -source code. And you must tell them their rights. +source code. And you must show them these terms so they know their +rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, @@ -45,120 +47,207 @@ that any problems introduced by others will not reflect on the original authors' reputations. + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - 0. This License Agreement applies to any program or other work which -contains a notice placed by the copyright holder saying it may be -distributed under the terms of this General Public License. The -"Program", below, refers to any such program or work, and a "work based -on the Program" means either the Program or any work containing the -Program or a portion of it, either verbatim or with modifications. Each -licensee is addressed as "you". - - 1. You may copy and distribute verbatim copies of the Program's source -code as you receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this -General Public License and to the absence of any warranty; and give any -other recipients of the Program a copy of this General Public License -along with the Program. You may charge a fee for the physical act of -transferring a copy. - - 2. You may modify your copy or copies of the Program or any portion of -it, and copy and distribute such modifications under the terms of Paragraph -1 above, provided that you also do the following: - - a) cause the modified files to carry prominent notices stating that - you changed the files and the date of any change; and - - b) cause the whole of any work that you distribute or publish, that - in whole or in part contains the Program or any part thereof, either - with or without modifications, to be licensed at no charge to all - third parties under the terms of this General Public License (except - that you may choose to grant warranty protection to some or all - third parties, at your option). - - c) If the modified program normally reads commands interactively when - run, you must cause it, when started running for such interactive use - in the simplest and most usual way, to print or display an - announcement including an appropriate copyright notice and a notice - that there is no warranty (or else, saying that you provide a - warranty) and that users may redistribute the program under these - conditions, and telling the user how to view a copy of this General - Public License. - - d) You may charge a fee for the physical act of transferring a - copy, and you may at your option offer warranty protection in - exchange for a fee. - -Mere aggregation of another independent work with the Program (or its -derivative) on a volume of a storage or distribution medium does not bring -the other work under the scope of these terms. + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) - 3. You may copy and distribute the Program (or a portion or derivative of -it, under Paragraph 2) in object code or executable form under the terms of -Paragraphs 1 and 2 above provided that you also do one of the following: - - a) accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of - Paragraphs 1 and 2 above; or, - - b) accompany it with a written offer, valid for at least three - years, to give any third party free (except for a nominal charge - for the cost of distribution) a complete machine-readable copy of the - corresponding source code, to be distributed under the terms of - Paragraphs 1 and 2 above; or, +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, - c) accompany it with the information you received as to where the - corresponding source code may be obtained. (This alternative is + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you - received the program in object code or executable form alone.) + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) -Source code for a work means the preferred form of the work for making -modifications to it. For an executable file, complete source code means -all the source code for all modules it contains; but, as a special -exception, it need not include source code for modules which are standard -libraries that accompany the operating system on which the executable -file runs, or for standard header files or definitions files that -accompany that operating system. - - 4. You may not copy, modify, sublicense, distribute or transfer the -Program except as expressly provided under this General Public License. -Any attempt otherwise to copy, modify, sublicense, distribute or transfer -the Program is void, and will automatically terminate your rights to use -the Program under this License. However, parties who have received -copies, or rights to use copies, from you under this General Public -License will not have their licenses terminated so long as such parties -remain in full compliance. - - 5. By copying, distributing or modifying the Program (or any work based -on the Program) you indicate your acceptance of this license to do so, -and all its terms and conditions. +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the original -licensor to copy, distribute or modify the Program subject to these -terms and conditions. You may not impose any further restrictions on the -recipients' exercise of the rights granted herein. +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. - 7. The Free Software Foundation may publish revised and/or new versions + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program -specifies a version number of the license which applies to it and "any +specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of -the license, you may choose any version ever published by the Free Software +this License, you may choose any version ever published by the Free Software Foundation. - 8. If you wish to incorporate parts of the Program into other free + 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes @@ -168,7 +257,7 @@ NO WARRANTY - 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED @@ -178,7 +267,7 @@ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING @@ -190,25 +279,24 @@ END OF TERMS AND CONDITIONS - Appendix: How to Apply These Terms to Your New Programs + How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest -possible use to humanity, the best way to achieve this is to make it -free software which everyone can redistribute and change under these -terms. - - To do so, attach the following notices to the program. It is safest to -attach them to the start of each source file to most effectively convey -the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> - Copyright (C) 19yy <name of author> + Copyright (C) <year> <name of author> 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 1, or (at your option) - any later version. + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -217,33 +305,36 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: - Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. -The hypothetical commands `show w' and `show c' should show the -appropriate parts of the General Public License. Of course, the -commands you use may be called something other than `show w' and `show -c'; they could even be mouse-clicks or menu items--whatever suits your -program. +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here a sample; alter the names: +necessary. Here is a sample; alter the names: - Yoyodyne, Inc., hereby disclaims all copyright interest in the - program `Gnomovision' (a program to direct compilers to make passes - at assemblers) written by James Hacker. + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. <signature of Ty Coon>, 1 April 1989 Ty Coon, President of Vice -That's all there is to it! +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. ----------------------- End of diff ----------------------- |
From: Toni G. <zo...@us...> - 2003-01-23 11:01:13
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-01-23 11:01:11 UTC Added files: COPYING COPYING.es Removed files: LICENCE Log message: Licencia GPL en español y cambio de nombre en el original LICENCE => COPYING ---------------------- diff included ---------------------- Index: ircdh/COPYING diff -u /dev/null ircdh/COPYING:1.1 --- /dev/null Thu Jan 23 03:01:11 2003 +++ ircdh/COPYING Thu Jan 23 03:01:00 2003 @@ -0,0 +1,249 @@ + + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) 19yy <name of author> + + 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 1, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! Index: ircdh/COPYING.es diff -u /dev/null ircdh/COPYING.es:1.1 --- /dev/null Thu Jan 23 03:01:11 2003 +++ ircdh/COPYING.es Thu Jan 23 03:01:00 2003 @@ -0,0 +1,360 @@ +Licencia Pública General GNU +Traducida por Antonio Luque Estepa <al...@ba...> en mayo de 1998. +Web: http://gugs.sindominio.net/licencias/gpl-es.html + +Esta es una traducción de la Licencia General Pública GNU al español. Esta traducción se +distribuye con la intención de facilitar su entendimiento, pero no es oficial ni está +legalmente aprobada. + +La Free Software Foundation [Fundación para el Software Libre] no es la editora de esta +traducción y no la ha aprobado como un sustituto legal para la auténtica Licencia Pública +General GNU. La traducción NO ha sido revisada atentamente por abogados, y por tanto el +traductor no puede estar seguro de que represente exactamente el sentido legal de la Licencia +Pública General GNU. Si usted quiere estar seguro de si sus actuaciones previstas están +permitidas por la Licencia Pública General GNU, por favor acuda a la versión original inglesa. + +La Free Software Foundation recomienda fervientemente no usar esta traducción como los +términos oficiales de distribución para sus programas; en su lugar, por favor use la versión +inglesa original, tal y como está publicada por la Free Software Foundation. + + +This is a translation of the GNU General Public License into Spanish. This translation is +distributed in the hope that it will facilitate understanding, but it is not an official or +legally approved translation. + +The Free Software Foundation is not the publisher of this translation and has not approved it as +a legal substitute for the authentic GNU General Public License. The translation has not been +reviewed carefully by lawyers, and therefore the translator cannot be sure that it exactly +represents the legal meaning of the GNU General Public License. If you wish to be sure whether +your planned activities are permitted by the GNU General Public License, please refer to the +authentic English version. + +The Free Software Foundation strongly urges you not to use this translation as the official +distribution terms for your programs; instead, please use the authentic English version +published by the Free Software Foundation. + +########################################################################################### + + + LICENCIA PÚBLICA GENERAL GNU + Versión 2. Junio 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + Se permite a todo el mundo copiar y distribuir copias literales de este + documento de licencia, pero no está permitido modificarlo. + + Preámbulo + + Las licencias para la mayoría del software está diseñadas para retirarle su libertad de +compartirlo e intercambiarlo. En cambio, la Licencia Pública General GNU está pensada para +garantizar su libertad de compartir e intercambiar el software libre--para asegurar que el +software es libre para todos los usuarios. Esta Licencia Pública General se aplica a la +mayoría del software de la Free Software Foundation, así como a cualquier otro programa cuyos +autores accedan a usarla. (Alguna parte del software de la Free Software Foundation se ve +cubierto en su lugar por la Licencia Pública General para Librerías GNU). Usted también la +puede aplicar a sus programas. + + Cuando hablamos de software libre, nos estamos refiriendo a la libertad, no al precio. +Nuestras Licencias Públicas Generales están diseñadas para asegurar que usted tiene la +libertad de distribuir copias de software libre (y cobrar por ello si lo desea), que usted +recibe el código fuente o puede obtenerlo si lo desea, que usted puede alterar el software o +usar porciones de él en nuevos programas libres; y que usted sabe que puede hacer estas cosas. + + Para proteger sus derechos, necesitamos plantear restricciones que impidan a cualquiera +negarle esos derechos o pedirle que renuncie a ellos. Estas restricciones se traducen a ciertas +responsabilidades para usted, si usted distribuye copias del software, o si lo modifica. + + Por ejemplo, si usted distribuye copias de un programa determinado, ya sea gratis o a cambio +de un precio, debe dar a los receptores todos los derechos que usted tiene. Debe asegurarse de +que ellos también reciben o pueden obtener el código fuente. Y usted debe mostrar esos términos, +de forma que ellos sepan cuáles son sus derechos. + + Nosotros protegemos sus derechos mediante dos actos: (1) tener copyright sobre el software, y +(2) ofrecerle a usted esta licencia, que le da permiso legal para copiar, distribuir y/o +modificar el software. + + Asímismo, para la protección de cada autor y la nuestra propia, queremos asegurarnos que cada +persona comprende que no existe garantía para este software libre. Si el software es modificado +por alguien y distribuido, queremos que los receptores sepan que lo que tienen no es el +original, de forma que cualquier problema introducido por un tercero no afecte a la reputación +del autor original. + + Finalmente, cualquier programa libre está constantemente amenazado por las patentes de +software. Deseamos evitar el riesgo de que un distribuidor de un programa libre pueda obtener +patentes de software, haciendo el programa propietario a todos los efectos. Para prevenir esto, +hemos establecido claramente que cualquier patente debe ser concedida para el libre uso de todo +el mundo, o no ser concedida en absoluto. + + Los términos precisos para la copia, distribución y modificación se exponen a continuación. + + + + LICENCIA PÚBLICA GENERAL GNU + TÉRMINOS Y CONDICIONES PARA LA COPIA, DISTRIBUCIÓN Y MODIFICACIÓN + + 0. Esta Licencia se aplica a cualquier programa u otra obra que contenga un aviso colocado por +el propietario del copyright diciendo que puede ser distribuido bajo los términos de esta +Licencia Pública General. En adelante, el "Programa" se refiere a cualquier programa u obra de +esta clase, y "una obra basada en el Programa" significa bien el Programa o bien cualquier obra +derivada bajo las leyes del copyright: es decir, una obra que contenga el Programa o una +porción del mismo, ya sea literalmente o con modificaciones y/o traducido a otro idioma. (De +aquí en adelante, la traducción se incluye sin límites en el término "modificación".) Cada +propietario de una licencia es tratado como "usted". + +Otras actividades aparte de la copia, distribución o modificación no son cubiertas por esta +Licencia; quedan fuera de su alcance. El acto de ejecutar el programa no se encuentra +restringido, y la salida del programa queda cubierta sólo si sus contenidos constituyen una +obra basada en el Programa (independiente de haber sido producidos por la ejecución del +Programa). La exactitud de lo anterior depende del modo de actuar del programa. + + 1. Usted puede copiar y distribuir copias literales del código fuente del Programa tal y como +lo recibió, por cualquier medio, supuesto que usted publica apropiada y visiblemente en cada +copia un aviso de copyright y una renuncia de garantía; mantiene intactos los avisos que se +refieren a esta Licencia y a la ausencia de cualquier garantía; y da a cualquier otro receptor +del Programa una copia de esta Licencia junto con el Programa. + +Usted puede cobrar por el acto físico de la trasferencia de una copia, y puede a su elección +ofrecer protección mediante garantía a cambio de un precio. + + 2. Usted puede modificar su copia o copias del Programa o cualquier porción de él, +constituyendo así una obra basada en el Programa, y copiar y distribuir tales modificaciones u +obra bajo los términos de la sección 1 precedente, siempre que usted cumpla todas las +condiciones siguientes: + + a) Debe procurar que los ficheros modificados incluyan notificaciones destacadas + manifestando que usted cambió los ficheros y la fecha de cualquier cambio. + + b) Debe procurar que cualquier obra que distribuya o publique, que en todo o en parte + contenga a o sea derivada del programa, sea licenciada como un todo sin coste alguno para + terceras partes bajo los términos de esta licencia. + + c) Si el programa modificado normalmente lee comandos interactivamente al ejecutarse, usted + debe procurar que cuando empiece a ejecutarse en este modo interactivo de la forma más + común en su uso muestre un anuncio que incluya un aviso de copyright apropiado y un aviso + de que no existe garantía (o bien diciendo que usted proporciona garantía) y que los + usuarios pueden redistribuir el programa bajo estas condiciones, y que diga al usuario como + ver una copia de esta Licencia. (Excepción: si el Programa es en sí mismo interactivo pero + no muestra normalmente un aviso tal como el descrito, su obra basada en el programa no está + obligada a mostrar ningún aviso). + + +Estos requisitos se aplican a la obra modificada como un todo. Si algunas secciones claramente +identificables de esa obra no están derivadas del Programa, y pueden ser razonablemente +consideradas como independientes y trabajos separados por sí mismas, entonces esta Licencia y +sus términos no se aplican a esas secciones cuando usted las distribuya como obras separadas. +Pero cuando usted distribuya las mismas secciones como parte de un todo que es una obra basada +en el programa, la distribución de ese todo debe cumplir los términos de esta Licencia, cuyos +permisos para otros licenciados se extienden para el todo completo, y por tanto a todas y cada +una de las partes independientemente de quien las haya escrito. + +Por tanto, no es la intención de esta sección reclamar derechos u oponerse a sus derechos +sobre una obra escrita enteramente por usted; sino que la intención es ejercer el derecho de +controlar la distribución de trabajos derivados o colectivos basados en el Programa. + +Además, la mera agregación de otras obras no basadas en el programa al Programa (o a una obra +basada en el Programa) en un medio de almacenaje o distribución no incluye a la otra obra bajo +el alcance de esta Licencia. + + 3. Usted puede copiar y distribuir el Programa (o una obra basada en él , bajo la Sección 2) +en forma de código objeto o ejecutable bajo los términos de las Secciones 1 y 2 precedentes +mientras cumpla una de las siguientes condiciones: + + + a) Acompañarlo con el código completo correspondiente en formato legible para un ordenador. + Este código debe ser distribuido bajo los términos de las secciones 1 y 2 en un medio + apropiado para el intercambio de software; o bien + + b) Acompañarlo con un ofrecimiento escrito, válido durante al menos tres años, de dar a + cualquier tercera parte, por un precio no mayor que su coste de físicamente realizar la + distribución de código, una copia completa, legible por ordenador del código fuente + correspondiente, que será distribuido bajo los términos de las Secciones 1 y 2 en un medio + apropiado para el intercambio de software; o bien + + c) Acompañarlo con la información que usted recibió referida al ofrecimiento de + distribuir el correspondiente código fuente. (Esta alternativa se permite sólo para una + distribución no comercial y sólo si usted recibió el Programa en código objeto o formato + ejecutable con un ofrecimiento de este tipo, de acuerdo con la Subsección b precedente.) + +El código fuente de una obra significa la forma de esta obra preferida para hacerle +modificaciones. Para una obra ejecutable, el código fuente completo significa todo el código +fuente para todos los módulos que contiene, además de cualquier fichero de definición de +interfaz asociado, además de los guiones usados para controlar la compilación e instalación +del ejecutable. Sin embargo, como excepción especial, el código fuente distribuido no tiene +que incluir necesariamente cualquier cosa que es normalmente distribuida (ya sea en formato +fuente o binario) con los componentes fundamentales (compilador, núcleo, y similares) del +sistema operativo en el que se ejecuta el Programa, a no ser que ese componente acompañe al +ejecutable. + +Si la distribución del ejecutable o código objeto es realizada ofreciendo acceso a una copia +desde un lugar designado, entonces el ofrecimiento de un acceso equivalente al código fuente +desde el mismo lugar, se considera como distribución del código fuente, incluso aunque +terceras partes no sean obligadas a copiar el código fuente junto al código objeto, + + 4. Usted no puede copiar, modificar, sublicenciar o distribuir el Programa excepto tal y como +está expresamente permitido en esta Licencia. Cualquier intento diferente de copiar, modificar, +sublicenciar o distribuir el Programa es nulo, y cancelará automáticamente sus derechos bajo +esta Licencia. Sin embargo, las partes que hayan recibido de usted copias o derechos bajo esta +Licencia no verán sus Licencias canceladas, mientras esas partes sigan cumpliendo totalmente la +Licencia. + + 5. Usted no está obligado a aceptar esta Licencia, puesto que no la ha firmado. Sin embargo, +ninguna otra cosa le garantiza permiso para modificar o distribuir este Programa o sus +derivados. Estas acciones están prohibidas por la ley si usted no acepta esta Licencia. Por lo +tanto, al modificar o distribuir el Programa (o cualquier obra basada en el Programa), usted +indica su acuerdo con esta Licencia para hacerlo, y con todos sus términos y condiciones para +copiar, modificar, o distribuir el programas u obras basadas en él. + + 6. Cada vez que usted redistribuya el Programa (o cualquier obra basada en él), el receptor +automáticamente recibe una licencia del licenciante original para copiar, distribuir o +modificar el Programa, sujeta a estos términos y condiciones. Usted no puede imponer ninguna +restricción más sobre los derechos del receptor que aquí quedan garantizados. Usted no es +responsable de hacer cumplir esta Licencia a terceras partes. + + 7. Si, como consecuencia de una resolución judicial o alegato de infracción de patente, o por +cualquier otra razón (no limitada a hechos relacionados con las patentes), se le imponen a +usted condiciones (ya sea por imposición judicial, acuerdo, u otra circunstancia) que +contradigan las condiciones de esta Licencia, estas condiciones no le excusan del cumplimiento +de los términos de esta Licencia. Si usted no puede distribuir el Programa de manera tal que +satisfaga simultáneamente sus obligaciones con esta Licencia y otras obligaciones pertinentes, +entonces la consecuencia es que usted no podrá distribuir el Programa en absoluto. Por ejemplo, +si una licencia de patente no permite la redistribución libre de cobros del Programa por parte +de todos aquellos que recibieron copias directa o indirectamente de usted, entonces la única +manera en que usted puede satisfacer a la vez esa licencia y esta Licencia sería abstenerse +enteramente de la distribución del Programa + +Si cualquier parte de esta sección se muestra como inválida o inobligable bajo cualesquiera +circunstancias particulares, el resto de la sección se aplicará, y la sección al completo se +aplicará en otras circunstancias. + +No es el propósito de esta sección inducirle a violar ninguna patente, ni otras reclamaciones +de derechos de propiedad, ni negar la validez de tales reclamaciones: esta sección tiene el +único objetivo de proteger la integridad del sistema de distribución del software libre, el +cual está implementado mediante las licencias públicas. Muchas personas han hecho generosas +contribuciones al amplio rango de software distribuido por ese sistema como consecuencia de la +aplicación coherente de ese sistema; es cuestión del autor/donador el decidir si él o ella +quiere distribuir el software a través de cualquier otro sistema, y un licenciado no puede +imponer esa decisión. + +Esta sección está designada para clarificar lo que se piensa es una consecuencia del resto de +esta Licencia. + + 8. Si la distribución y/o uso de software está restringido en ciertos países por patentes o +por copyrights sobre interfaces, el poseedor del copyright original que sitúa el Programa bajo +esta Licencia, puede añadir una limitación de distribución geográfica excluyendo estos +países, de forma que la distribución esté permitida sólo dentro o entre los países no +excluidos. En este caso, esta Licencia incorpora esta limitación, como si estuviese escrita en +el cuerpo de esta Licencia. + + 9. La Free Software Foundation puede publicar versiones revisadas y/o nuevas de la Licencia +Pública General en algún momento. Tales nuevas versiones serán similares en espíritu a la +versión presente, pero pueden diferir en detalles para solucionar nuevos problemas o +conflictos. Cada versión se distingue por un número de versión. Si el programa especifica un +número de versión de esta Licencia, que se aplica a ella y "a cualquier versión posterior", +usted tiene la opción de seguir los términos y condiciones de esa versión o de cualquier +versión posterior publicada por la Free Software Foundation. Si el Programa no especifica un +número de versión de esta Licencia, usted puede escoger cualquier versión publicada en +cualquier momento por la Free Software Foundation. + + 10. Si usted desea incorporar partes del Programa en otros programas libres cuyas condiciones +de distribución son diferentes, escriba al autor para pedir permiso. Para software cuyo +copyright posee la Free Software Foundation, escriba a la Free Software Foundation; algunas +veces hacemos excepciones para esto. Nuestra decisión estará guiada por los dos objetivos de +preservar el carácter libre de todos los derivados de nuestro software libre y de promocionar el +compartimiento y reutilización del software en general. + + SIN GARANTÍA + + 11. DEBIDO A QUE EL PROGRAMA SE LICENCIA SIN COSTE, NO EXISTE GARANTÍA PARA EL PROGRAMA, HASTA +LO PERMITIDO POR LAS LEYES APLICABLES. EXCEPTO CUANDO SE ESTABLEZCA DE OTRA FORMA POR ESCRITO +LOS POSEEDORES DEL COPYRIGHT Y/O OTRAS PARTES PROVEEN EL PROGRAMA "COMO ESTÁ" SIN GARANTÍA DE +NINGUNA CLASES, YA SEA EXPRESA O IMPLÍCITA, INCLUYENDO, PERO NO LIMITÁNDOSE A, LA GARANTÍA +IMPLÍCITA DE USABILIDAD Y UTILIDAD PARA UN PROPÓSITO PARTICULAR. EL RIESGO COMPLETO ACERCA DE +LA CALIDAD Y EFICIENCIA DEL PROGRAMA ES SUYO. SI EL PROGRAMA SE MOSTRARA DEFECTUOSO, USTED +ASUMIRÁ TODO EL COSTE DEL SERVICIO NECESARIO Y DE LA REPARACIÓN O CORRECCIÓN. + + 12. EN NINGÚN CASO, A NO SER QUE SE REQUIERA POR LAS LEYES APLICABLES O SE ACUERDE POR +ESCRITO, PODRÁ NINGÚN POSEEDOR DE COPYRIGHT O CUALQUIER OTRA PARTE QUE HAYA MODIFICADO Y/O +REDISTRIBUIDO EL PROGRAMA SER RESPONSABLE ANTE USTED POR DAÑOS O PERJUICIOS, INCLUYENDO +CUALQUIER DAÑO GENERAL, ESPECIAL, INCIDENTAL, O CONSECUENTE QUE SE DERIVE DEL USO O INCAPACIDAD +DE USO DE ESTE PROGRAMA (INCLUYENDO, PERO NO LIMITÁNDOSE A LA PÉRDIDA DE DATOS O PRODUCCIÓN +DE DATOS INCORRECTOS O PÉRDIDAS SUFRIDAS POR USTED O UNA TERCERA PARTE, O UNA INCAPACIDAD DEL +PROGRAMA PARA OPERAR JUNTO A OTROS PROGRAMAS), INCLUSO SI EL POSEEDOR DEL COPYRIGHT U OTRA PARTE +HABÍA SIDO AVISADO DE LA POSIBILIDAD DE TALES DAÑOS. + + FIN DE LOS TÉRMINOS Y CONDICIONES + +-------------------------------------------------------------------------------- + + Cómo aplicar estos términos a sus nuevos programas + + Si usted desarrolla un nuevo programa, y quiere que sea de la máxima utilidad posible para el +público, la mejor manera de conseguir esto es hacerlo software libre que cualquiera pueda +redistribuir y cambiar bajo estos términos. + + Para hacerlo, incluya los siguientes avisos en el programa. Es más seguro incluirlos al +comienzo de cada fichero fuente para destacar claramente la exclusión de garantía; y cada +fichero debe tener al menos la línea de copyright y una indicación de dónde se puede +encontrar el aviso completo. + + + [una línea para dar el nombre del programa y una breve descripción] + Copyright (C)[año] [nombre del autor] + This program is free software; you can redistribute it and/or modify it under the terms of + theGNU General Public License as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with this program; + if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + +En español: + + Este programa es software libre; usted puede redistruirlo y/o modificarlo bajo los términos + de la Licencia Pública General GNU, tal y como está publicada por la Free Software + Foundation; ya sea la versión 2 de la Licencia, o (a su elección) cualquier versión + posterior. + + Este programa se distribuye con la intención de ser útil, pero SIN NINGUNA GARANTÍA; incluso + sin la garantía implícita de USABILIDAD O UTILIDAD PARA UN FIN PARTICULAR. Vea la Licencia + Pública General GNU para más detalles. + + Usted debería haber recibido una copia de la Licencia Pública General GNU junto a este + programa; si no es así, escriba a la Free Software Foundation, Inc. 675 Mass Ave, Cambridge, + MA 02139, EEUU. + + +Añada también información sobre cómo contactar con usted por correo electrónico y ordinario. + +Si el programa es interactivo, haga que muestre un pequeño aviso como este, cuando empiece el +modo interactivo: + + Gnomovision versión 69, Copyright (C) año nombre del autor + Gnomovision viene sin NINGUNA GARANTÍA EN ABSOLUTO; para más detalles, escriba `ver g'. Este + es software libre, y su distribución es adecuada bajo ciertas condiciones; escriba `ver c' + para más detalles. + +Los comandos hipotéticos `show g' y `show c' deben mostrar las partes apropiadas de la Licencia +Pública General GNU. Por supuesto, los comandos reales que usted use podrían ser otros que +`show g' y `show c'; incluso podrían ser clics de ratón o elementos de menú--lo que se ajuste +mejor a su programa. + +También debería hacer que su superior laboral (si usted trabaja como programador), o su centro +académico, si los tiene, firmen una "renuncia al copyright" para el programa, si esto es +necesario. Aquí hay un ejemplo; cambie los nombres: + + Yoyodine, SA, renuncia a todo su derecho de copia sobre el programa `Gnomovision' (que hace + tal cosa), escrito por Juan Programador. + + [firma de Jefe Máximo], 1 de Mayo de 1998 + Jefe Máximo, Presidente + +Esta Licencia Pública General no permite incorporar su programa a programas propietarios. Si su +programa es una librería de subrutinas, puede considerar más útil el permitir enlazar +programas propietarios con la librería. Si esto es lo que quiere, use la Licencia Pública +General GNU para Librerías en lugar de esta Licencia. + Index: ircdh/LICENCE diff -u ircdh/LICENCE:1.1.1.1 ircdh/LICENCE:removed --- ircdh/LICENCE:1.1.1.1 Fri Jul 26 14:58:22 2002 +++ ircdh/LICENCE Thu Jan 23 03:01:12 2003 @@ -1,249 +0,0 @@ - - GNU GENERAL PUBLIC LICENSE - Version 1, February 1989 - - Copyright (C) 1989 Free Software Foundation, Inc. - 675 Mass Ave, Cambridge, MA 02139, USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The license agreements of most software companies try to keep users -at the mercy of those companies. By contrast, our General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. The -General Public License applies to the Free Software Foundation's -software and to any other program whose authors commit to using it. -You can use it for your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Specifically, the General Public License is designed to make -sure that you have the freedom to give away or sell copies of free -software, that you receive source code or can get it if you want it, -that you can change the software or use pieces of it in new free -programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of a such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must tell them their rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License Agreement applies to any program or other work which -contains a notice placed by the copyright holder saying it may be -distributed under the terms of this General Public License. The -"Program", below, refers to any such program or work, and a "work based -on the Program" means either the Program or any work containing the -Program or a portion of it, either verbatim or with modifications. Each -licensee is addressed as "you". - - 1. You may copy and distribute verbatim copies of the Program's source -code as you receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice and -disclaimer of warranty; keep intact all the notices that refer to this -General Public License and to the absence of any warranty; and give any -other recipients of the Program a copy of this General Public License -along with the Program. You may charge a fee for the physical act of -transferring a copy. - - 2. You may modify your copy or copies of the Program or any portion of -it, and copy and distribute such modifications under the terms of Paragraph -1 above, provided that you also do the following: - - a) cause the modified files to carry prominent notices stating that - you changed the files and the date of any change; and - - b) cause the whole of any work that you distribute or publish, that - in whole or in part contains the Program or any part thereof, either - with or without modifications, to be licensed at no charge to all - third parties under the terms of this General Public License (except - that you may choose to grant warranty protection to some or all - third parties, at your option). - - c) If the modified program normally reads commands interactively when - run, you must cause it, when started running for such interactive use - in the simplest and most usual way, to print or display an - announcement including an appropriate copyright notice and a notice - that there is no warranty (or else, saying that you provide a - warranty) and that users may redistribute the program under these - conditions, and telling the user how to view a copy of this General - Public License. - - d) You may charge a fee for the physical act of transferring a - copy, and you may at your option offer warranty protection in - exchange for a fee. - -Mere aggregation of another independent work with the Program (or its -derivative) on a volume of a storage or distribution medium does not bring -the other work under the scope of these terms. - - 3. You may copy and distribute the Program (or a portion or derivative of -it, under Paragraph 2) in object code or executable form under the terms of -Paragraphs 1 and 2 above provided that you also do one of the following: - - a) accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of - Paragraphs 1 and 2 above; or, - - b) accompany it with a written offer, valid for at least three - years, to give any third party free (except for a nominal charge - for the cost of distribution) a complete machine-readable copy of the - corresponding source code, to be distributed under the terms of - Paragraphs 1 and 2 above; or, - - c) accompany it with the information you received as to where the - corresponding source code may be obtained. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form alone.) - -Source code for a work means the preferred form of the work for making -modifications to it. For an executable file, complete source code means -all the source code for all modules it contains; but, as a special -exception, it need not include source code for modules which are standard -libraries that accompany the operating system on which the executable -file runs, or for standard header files or definitions files that -accompany that operating system. - - 4. You may not copy, modify, sublicense, distribute or transfer the -Program except as expressly provided under this General Public License. -Any attempt otherwise to copy, modify, sublicense, distribute or transfer -the Program is void, and will automatically terminate your rights to use -the Program under this License. However, parties who have received -copies, or rights to use copies, from you under this General Public -License will not have their licenses terminated so long as such parties -remain in full compliance. - - 5. By copying, distributing or modifying the Program (or any work based -on the Program) you indicate your acceptance of this license to do so, -and all its terms and conditions. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the original -licensor to copy, distribute or modify the Program subject to these -terms and conditions. You may not impose any further restrictions on the -recipients' exercise of the rights granted herein. - - 7. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of the license which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -the license, you may choose any version ever published by the Free Software -Foundation. - - 8. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - Appendix: How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to humanity, the best way to achieve this is to make it -free software which everyone can redistribute and change under these -terms. - - To do so, attach the following notices to the program. It is safest to -attach them to the start of each source file to most effectively convey -the exclusion of warranty; and each file should have at least the -"copyright" line and a pointer to where the full notice is found. - - <one line to give the program's name and a brief idea of what it does.> - Copyright (C) 19yy <name of author> - - 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 1, or (at your option) - any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) 19xx name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the -appropriate parts of the General Public License. Of course, the -commands you use may be called something other than `show w' and `show -c'; they could even be mouse-clicks or menu items--whatever suits your -program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the - program `Gnomovision' (a program to direct compilers to make passes - at assemblers) written by James Hacker. - - <signature of Ty Coon>, 1 April 1989 - Ty Coon, President of Vice - -That's all there is to it! ----------------------- End of diff ----------------------- |
From: Toni G. <zo...@us...> - 2003-01-23 10:46:44
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-01-23 10:46:43 UTC Removed files: config/.cvsignore Log message: Mas archivos borrados ---------------------- diff included ---------------------- Index: ircdh/config/.cvsignore diff -u ircdh/config/.cvsignore:1.1.1.1 ircdh/config/.cvsignore:removed --- ircdh/config/.cvsignore:1.1.1.1 Fri Jul 26 14:58:22 2002 +++ ircdh/config/.cvsignore Thu Jan 23 02:46:43 2003 @@ -1,11 +0,0 @@ -Makefile -config.cache -config.log -config.status -setup.h -stamp-h -config-sh -Configure -config.h -.config -.tmpconfig.h ----------------------- End of diff ----------------------- |
From: Toni G. <zo...@us...> - 2003-01-23 10:42:46
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-01-23 10:42:44 UTC Removed files: config/Configure.in config/Makefile.in config/README config/acconfig.h config/acinclude.m4 config/aclocal.m4 config/config-sh.in config/configure config/configure.in config/gen.doc.Makefile config/gen.ircd.Makefile config/install-sh config/parse.none config/setup.h.in config/setup.h.top config/stamp-h.in Log message: Eliminacion directorio config/ ---------------------- diff included ---------------------- Index: ircdh/config/Configure.in diff -u ircdh/config/Configure.in:1.2 ircdh/config/Configure.in:removed --- ircdh/config/Configure.in:1.2 Sun Aug 18 15:49:41 2002 +++ ircdh/config/Configure.in Thu Jan 23 02:42:44 2003 @@ -1,556 +0,0 @@ -# @configure_input@ -# -# This script is used to configure the IRC-Hispano IRC Daemon. -# It was copied from the linux kernel distribution and only slightly -# changed. -# -# 170897 (ca...@ru...) - -# Changed the default configuration file to be defconfig. -# Changed the location of autoconf.h to be 'include/'. -# Changed the final text printed at the end. -# Changed replacement to only match 'is not set' (and not 'is not'). -# Added function string() and define_string(). -# Added function define_macro() -# -# 180897 (ca...@ru...) - -# Changed bool() so it can take a default argument. -# Introduced hard link ../.config, to inherit config files over new -# distributions. -# Got rid of 'is not set' and using '=n' instead. -# Changed configuration help file to be doc/Configure.help. -# Changed DEFAULT into USE_DEFAULT, which is asked for in config.in. -# -# 210897 (ca...@ru...) - -# Changed the location of autoconf.h and .config to be 'configure/'. -# Fixed the script to work with a general 'sh' and not only with bash. -# (removing 'function', using `` instead of $(), using \\$ inside -# that instead of \$, using 'eval set -- $choices' rather then -# 'set -- $choices', introduction of function 'expr' instead of -# using external executable 'expr', using set -fh rather then -# set -f -h, using "" around reg.exp rather then '' and removing -# unnecessary backslashes from it). -# Removed tristate and hex functions. -# Making the hardlink to ../.config only when configure/.config doesn't exist. -# -# 280897 (ca...@ru...) - -# Added CONFIG_NEW: Ask if one wants to use this configuration as main -# configuration. -# Changed /bin/rm into $RM, so now this environment variable must be set! -# -# 290897 (ca...@ru...) - -# Added support for the solaris Born shell. -# Changed the directory configure/ to config/ in order not to collide with -# GNU autoconf in the future. -# -# 020997 (ca...@ru...) - -# The future is here... renamed 'config.in' to 'config-sh', reserving -# 'file.in' for input files of autoconfs' 'configure' script. -# 'autoconf.h' has been renamed to 'config.h', because it would be confusing -# otherwise with autoconf. -# Changed Configure to be run from within config/. -# -# 050997 (ca...@ru...) - -# Don't use 'def={$old:-$3}' but instead the equivalent ': ${def=$3}' because -# some sh don't understand the first expression. -# Pressing a 'c' at any question continues in 'batch' mode. -# -# 220199 (ca...@ru...) - -# Put MACRO name at front, making it easier to find it when scanning -# through the defaults to change just one. -# Make pressing 'c' stop at every paragraph, and pressing 'C' finish the -# whole script. -# -# ----------------------------------------------------------------------------- -# -# This script is used to configure the linux kernel. -# -# It was inspired by the challenge in the original Configure script -# to ``do something better'', combined with the actual need to ``do -# something better'' because the old configure script wasn't flexible -# enough. -# -# Please send comments / questions / bug fixes to ray...@mi.... -# -# ***** IMPORTANT COMPATIBILITY NOTE **** -# If configuration changes are made which might adversely effect -# Menuconfig or xconfig, please notify the respective authors so that -# those utilities can be updated in parallel. -# -# Menuconfig: <roa...@cf...> -# xconfig: <ape...@fo...> <er...@ai...> -# **************************************** -# -# Each line in the config file is a command. -# -# 050793 - use IFS='@' to get around a bug in a pre-version of bash-1.13 -# with an empty IFS. -# -# 030995 (st...@os...) - added support for tri-state answers, -# for selecting modules to compile. -# -# 180995 Bernhard Kaindl (bk...@pi...) - added dummy functions for -# use with a config.in modified for make menuconfig. -# -# 301195 (bo...@ma...) - added help text support -# -# 281295 Paul Gortmaker - make tri_state functions collapse to boolean -# if module support is not enabled. -# -# 010296 Aaron Ucko (uc...@va...) - fix int and hex to accept -# arbitrary ranges -# -# 150296 Dick Streefland (di...@ta...) - report new configuration -# items and ask for a value even when doing a "make oldconfig" -# -# 200396 Tom Dyas (td...@ed...) - when the module option is -# chosen for an item, define the macro <option_name>_MODULE -# -# 090397 Axel Boldt (bo...@ma...) - avoid ? and + in regular -# expressions for GNU expr since version 1.15 and up use \? and \+. - -#### Start of system configuration section. #### - -SHELL=@SHPROG@ -RM=@RMPROG@ -LN_S="@LN_S@" -unet_cv_sys_set_h=@unet_cv_sys_set_h@ - -#### End of system configuration section. #### - -# Disable filename globbing -set -f - -if test $unet_cv_sys_set_h = yes; then - set -h -fi - -# Figure out how to do 'echo' without newline: -c='' -n='' -if [ "`eval echo -n 'a'`" = "-n a" ] ; then - c='\c' -else - n='-n' -fi - -# Check if ${VAR:-def} works -DUMMY_VAR="" -DUMMY_VAR2="some value" -DUMMY_VAR=${DUMMY_VAR:-test} -DUMMY_VAR2=${DUMMY_VAR2:-test} -if [ "$DUMMY_VAR" != "test" -o "$DUMMY_VAR2" != "some value" ]; then - echo "You /bin/sh doesn't understand '\${VAR:-default}'" - exit 1 -fi - -# -# Dummy functions for use with a config.in modified for menuconf -# -mainmenu_option () { - : -} -mainmenu_name () { - : -} -endmenu () { - : -} - -# -# help prints the corresponding help text from Configure.help to stdout -# -# help variable -# -help () { - if [ -f ../doc/Configure.help ] - then - #first escape regexp special characters in the argument: - var=`echo "$1"|sed 's/[][\/.^$*]/\\&/g'` - #now pick out the right help text: - text=`sed -n "/^$var[ ]*\\$/,\\${ - /^$var[ ]*\\$/b - /^#.*/b - /^[ ]*\\$/q - p - }" ../doc/Configure.help` - if [ -z "$text" ] - then - echo; echo " Sorry, no help available for this option yet.";echo - else - (echo; echo "$text"; echo) | ${PAGER:-more} - fi - else - echo; - echo " Can't access the file doc/Configure.help which" - echo " should contain the help texts." - echo - fi -} - - -# -# readln reads a line into $ans. -# -# readln macro prompt default oldval -# -readln () { - echo $1 | awk '{ printf("%-20.20s: ", $1); }' - if [ "$USE_DEFAULT" != "n" -a -n "$4" ]; then - echo $2 - ans=$3 - else - echo $n "$2$c" - [ -z "$4" ] && echo $n "(NEW) $c" - IFS='@' read ans </dev/tty || exit 1 - [ -z "$ans" ] && ans=$3 - if [ "$ans" = "c" -o "$ans" = "C" ]; then - USE_DEFAULT=$ans - ans=$3 - fi - fi -} - -# -# comment does some pretty-printing -# -# comment 'xxx' -# -comment () { - echo "" - echo "*-----------------------------------------------------------------------------"; - echo "* $1" ; - echo "*" - (echo "" ; echo "#"; echo "# $1" ; echo "#") >>$CONFIG - (echo "" ; echo "/*"; echo " * $1" ; echo " */") >>$CONFIG_H - if [ "$USE_DEFAULT" = "c" ]; then - USE_DEFAULT=n - fi -} - -# -# define_bool sets the value of a boolean argument -# -# define_bool define value -# -define_bool () { - case "$2" in - "y") - echo "$1=y" >>$CONFIG - echo "#define $1" >>$CONFIG_H - ;; - - "n") - echo "$1=n" >>$CONFIG - echo "#undef $1" >>$CONFIG_H - ;; - esac - eval "$1=$2" -} - -# -# expr determines if string matches a regular expression -# -# expr string reg_exp -# -expr () { - MATCH=`echo $1 | egrep -e $2` - if [ -z "$MATCH" ]; then - return 1 - else - return 0 - fi -} - -# -# bool processes a boolean argument -# -# bool question define -# -bool () { - old=`eval echo "\\${$2}"` - if [ -z "$old" -a -n "$3" ]; then - def=$3 - else - def=${old:-n} - fi - case "$def" in - "y") - defprompt="Y/n/?" - def="y" - ;; - - "n") - defprompt="N/y/?" - ;; - esac - while :; do - readln $2 "$1 [$defprompt] " "$def" "$old" - case "$ans" in - [yY] | [yY]es ) - define_bool "$2" "y" - break - ;; - - [nN] | [nN]o ) - define_bool "$2" "n" - break - ;; - - * ) - help "$2" - ;; - esac - done -} - -# -# define_int sets the value of a integer argument -# -# define_int define value -# -define_int () { - echo "$1=$2" >>$CONFIG - echo "#define $1 ($2)" >>$CONFIG_H - eval "$1=$2" -} - -# -# int processes an integer argument -# -# int question define default -# -int () { - old=`eval echo "\\${$2}"` - def=${old:-$3} - while :; do - readln $2 "$1 [$def] " "$def" "$old" - if expr "$ans" "^0$|^(-[1-9]|[1-9])[0-9]*$"; then - define_int "$2" "$ans" - break - else - help "$2" - fi - done -} - -# -# choice processes a choice list (1-out-of-n) -# -# choice question choice-list default -# -# The choice list has a syntax of: -# NAME WHITESPACE VALUE { WHITESPACE NAME WHITESPACE VALUE } -# The user may enter any unique prefix of one of the NAMEs and -# choice will define VALUE as if it were a boolean option. -# VALUE must be in all uppercase. Normally, VALUE is of the -# form CONFIG_<something>. Thus, if the user selects <something>, -# the CPP symbol CONFIG_<something> will be defined and the -# shell variable CONFIG_<something> will be set to "y". -# -choice () { - question="$1" - choices="$2" - old= - def=$3 - - # determine default answer: - names="" - eval set -- $choices - firstvar=$2 - while [ -n "$2" ]; do - if [ -n "$names" ]; then - names="$names, $1" - else - names="$1" - fi - if [ "`eval echo "\\${$2}"`" = "y" ]; then - old=$1 - def=$1 - fi - shift; shift - done - - val="" - while [ -z "$val" ]; do - ambg=n - readln $names "$question [$def] " "$def" "$old" - ans=`echo $ans | tr a-z A-Z` - eval set -- $choices - while [ -n "$1" ]; do - name=`echo $1 | tr a-z A-Z` - case "$name" in - "$ans"* ) - if [ "$name" = "$ans" ]; then - val="$2" - break # stop on exact match - fi - if [ -n "$val" ]; then - echo; - echo \ - " Sorry, \"$ans\" is ambiguous; please enter a longer string." - echo - val="" - ambg=y - break - else - val="$2" - fi - ;; - esac - shift; shift - done - if [ "$val" = "" -a "$ambg" = "n" ]; then - help "$firstvar" - fi - done - eval set -- $choices - while [ -n "$2" ]; do - if [ "$2" = "$val" ]; then - echo " defined $val" - define_bool "$2" "y" - else - define_bool "$2" "n" - fi - shift; shift - done -} - -# -# define_macro sets the value of a macro argument -# -# define_macro define value -# -define_macro () { - if [ -n "$2" ]; then - echo "$1=\"$2\"" >>$CONFIG - echo "#define $1 $2" >>$CONFIG_H - fi - eval "$1=\"$2\"" -} - -# -# define_string sets the value of a string argument -# -# define_string define value -# -define_string () { - if [ -n "$2" ]; then - echo "$1=\"$2\"" >>$CONFIG - echo "#define $1 \"$2\"" >>$CONFIG_H - fi - eval "$1=\"$2\"" -} - -# -# string processes a string argument -# -# string question define default -# -string () { - old=`eval echo "\\${$2}"` - def=${old:-$3} - while :; do - readln $2 "$1 [$def] " "$def" "$old" - if expr "$ans" "^[^\"].*[^\"]$"; then - define_string "$2" "$ans" - break - else - help "$2" - fi - done -} - -CONFIG=.tmpconfig -CONFIG_H=.tmpconfig.h -trap "$RM -f $CONFIG $CONFIG_H ; exit 1" 1 2 15 - -# -# Make sure we start out with a clean slate. -# -echo "#" > $CONFIG -echo "# Configuration default generated for:" > $CONFIG -echo '# `pwd`' > $CONFIG -echo "#" > $CONFIG -echo "# Automatically generated by 'make config': don't edit" >> $CONFIG -echo "#" >> $CONFIG - -echo "/*" > $CONFIG_H -echo " * Automatically generated C config: don't edit" >> $CONFIG_H -echo " */" >> $CONFIG_H -echo "#ifndef INCLUDED_config_h" >> $CONFIG_H -echo "#define INCLUDED_config_h" >> $CONFIG_H -echo "#ifndef INCLUDED_setup_h" >> $CONFIG_H -echo "#include \"setup.h\"">> $CONFIG_H -echo "#endif" >> $CONFIG_H -echo "#define AUTOCONF_INCLUDED" >> $CONFIG_H - -CONFIG_IN=./config-sh -if [ "$1" != "" ] ; then - CONFIG_IN=$1 -fi - -DEFAULTS=none -if [ -r .config ]; then - DEFAULTS=./.config -else - if [ -r ../../.config ]; then - echo "*" - echo "* WARNING: Inheriting .config from previous version!" - DEFAULTS=../../.config - fi -fi - -if [ -r $DEFAULTS ]; then - echo "*" - echo "* Using defaults found in" $DEFAULTS - echo "* If you type a 'C' the script will finish using all defaults." - echo "* If you type a 'c' the script will skip to the next paragraph." - echo "*" - . $DEFAULTS -else - echo "*" - echo "* No defaults found" - echo "*" -fi - -. $CONFIG_IN - -echo "#endif /* INCLUDED_config_h */" >> $CONFIG_H - -mv $CONFIG_H config.h -$RM -f .config.old -if [ -f .config ]; then - # Keep the inode of .config (hardlink to ../../.config) intact: - cp .config .config.old - cat $CONFIG > .config - $RM -f $CONFIG -fi -if test ! -f .config -o ! -r ../../.config; then - if [ "$CONFIG_BATCH" = "y" ]; then - CONFIG_NEW=n - else - CONFIG_NEW=y - USE_DEFAULT=n - echo "*" - echo "*" - echo "*" - bool 'Use .config of THIS source tree as your upgrade default' CONFIG_NEW - fi - if [ ! -f .config ]; then - mv $CONFIG .config - fi - if [ "$CONFIG_NEW" = "y" ]; then - CONFIG_CURDIR=`pwd` - cd ../.. - $RM -f .config .config.cache - ln $CONFIG_CURDIR/.config .config - ln $CONFIG_CURDIR/config.cache .config.cache - echo - echo "NOTE: Linking ../.config to THIS source tree's configuration !" - echo "(The configuration of this source tree will be used as default when you upgrade)" - fi -fi - -echo - -exit 0 Index: ircdh/config/Makefile.in diff -u ircdh/config/Makefile.in:1.1.1.1 ircdh/config/Makefile.in:removed --- ircdh/config/Makefile.in:1.1.1.1 Fri Jul 26 14:58:22 2002 +++ ircdh/config/Makefile.in Thu Jan 23 02:42:44 2003 @@ -1,104 +0,0 @@ -# config/Makefile for the IRC-Hispano IRC Daemon. -# Copyright (C) 1997, Carlo Wood <ca...@ru...> - -# 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, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -#### Start of system configuration section. #### - -SHELL=@SHPROG@ -RM=@RMPROG@ -TOUCH=touch -@SET_MAKE@ -#### End of system configuration section. #### - -# Some versions of make give a warning when this is empty: -.SUFFIXES: .dummy - -# These files need to be up to date when we are building the ircd -build: config.h setup.h - -clean: - ${RM} -f .tmpconfig.h .tmpconfig - -distclean: clean - ${RM} -f .config setup.h stamp-h config.h .config.old \ - config.cache config.log config.status Makefile config-sh \ - Configure - -maintainer-clean: distclean - ${RM} -f aclocal.m4 setup.h.in stamp-h.in configure - @echo Generating aclocal.m4... - aclocal - @echo Generating setup.h.in... - autoheader - @echo timestamp > stamp-h.in - @echo Generating configure... - autoconf - -config: configure setup.h.in config.status Configure FORCE - @CONFIG_BATCH=n ${SHELL} ./Configure || exit 1 - @# Allow the use of non-GNU make with 'make config': - @cd ../ircd; ${MAKE} Makefile - @cd ../doc; ${MAKE} Makefile - -config.h: Configure config-sh - @echo Generating config.h... - @CONFIG_BATCH=y ${SHELL} ./Configure || exit 1 - @cd ../ircd; ${MAKE} Makefile - -FORCE: - -#============================================================================== -# Rules to automatically remake Configuration : - -Makefile: config.status Makefile.in - @echo "recreating config/Makefile" - @CONFIG_FILES=Makefile CONFIG_HEADERS= ./config.status > /dev/null - -aclocal.m4: acinclude.m4 - @echo Generating aclocal.m4... - @echo aclocal - @aclocal || ( echo "NOT recreating 'aclocal.m4', you don't have 'aclocal'"; touch aclocal.m4 ) - -configure: configure.in aclocal.m4 - @echo Generating configure... - @echo autoconf - @autoconf || ( echo "NOT recreating 'configure', you don't have 'autoconf'"; touch configure ) - -setup.h.in: stamp-h.in -stamp-h.in: configure.in acconfig.h setup.h.top aclocal.m4 #setup.h.bot - @echo Generating setup.h.in... - @echo autoheader - @autoheader || ( echo "NOT recreating 'setup.h.in', you don't have 'autoheader'"; touch setup.h.in ) - @echo timestamp > stamp-h.in - -setup.h: stamp-h -stamp-h: stamp-h.in config.status - @echo Generating setup.h... - @CONFIG_FILES= CONFIG_HEADERS=setup.h ./config.status - -config.status: configure - @echo Generating config.status... - @CONFIG_FILES= CONFIG_HEADERS= ./config.status --recheck || \ - (./configure && ${TOUCH} ../doc/stamp-m ../ircd/stamp-m) - -config-sh: config-sh.in config.status - @echo Generating config-sh... - @CONFIG_FILES=config-sh CONFIG_HEADERS= ./config.status - -Configure: Configure.in config.status - @echo Generating Configure... - @CONFIG_FILES=Configure CONFIG_HEADERS= ./config.status Index: ircdh/config/README diff -u ircdh/config/README:1.1.1.1 ircdh/config/README:removed --- ircdh/config/README:1.1.1.1 Fri Jul 26 14:58:22 2002 +++ ircdh/config/README Thu Jan 23 02:42:44 2003 @@ -1,94 +0,0 @@ -This directory contains NOTHING for the admin to configure. - -If you want to configure the IRC server, go to the top level directory and -type: 'make config'. - -------------------------------------------------------------------------------- - -If you are a coder and are adding a feature to the server that you need -automatic or manual configuration for, then this is where you need to -change things. - -If you touch any of the following files, then you need to have 'autoconf' -(and 'autoheader') installed - you might also need GNU m4 and perl then: - -configure.in -acconfig.h -setup.h.top - -Never touch setup.h.in and stamp-h.in. -Don't run 'make maintainer-clean' when you don't have autoconf etc. installed. - -If you touch any of the following files, then you need to have GNU make -in order to have the Makefiles correctly rebuild automatically: - -parse.none -gen.ircd.Makefile -../ircd/Makefile.in -../doc/Makefile.in -../Makefile.in - -Note that after running 'make config' special added code in config/Makefile -will remake the Makefiles as needed to allow the admins to use a non-GNU make. -But coders should use GNU make. - -Here is a sheme of which files are needed to generate which files: - - /> (config.log) - /-> (config.cache) -configure.in --(autoconf)--> configure --> config.status - \ -acconfig.h --(autoheader)--> setup.h.in --(config.status)--> setup.h -setup.h.top / (stamp-h.in) (stamp-h) - -config-sh.in --(config.status)--> config-sh --(Configure)--> config.h - (.config) -/ \-> (.config) - \> (.config.old) -Makefile.in --(config.status)--> Makefile - -The exectuable scripts (configure, config.status and Configure) should only be -called from Makefile (automatically, when needed, by means of makefile rules). - -Further more, config.status is also used to (re)generate doc/Makefile and -ircd/Makefile (from respectively doc/Makefile.in and ircd/Makefile.in). -However, ircd/Makefile is not functional then, first also gen.ircd.Makefile -must be called. All of this is done automatically by the Makefile rules -inside doc/Makefile and ircd/Makefile respectively. Finally, gen.ircd.Makefile -also calls parse.none. So: - -../ircd/Makefile.in --\ -gen.ircd.Makefile ----(config.status)--> ../ircd/Makefile -.config --/ -parse.none -/ - -../doc/Makefile.in --\ -gen.doc.Makefile ----(config.status)--> ../doc/Makefile -.config --/ -parse.none -/ - -../Makefile.in ----(config.status)--> ../Makefile - -'Configure' uses the file ../doc/Configure.help for the help texts. - -------------------------------------------------------------------------------- - -Adding an 'autoconf' check. - -1) Install GNU m4, autoconf & autoheader. -2) Add your check to configure.in, if needed also add an entry to acconfig.h -3) Add the #ifdefs to the source code. - -Adding a manual configuration. - -1) Edit config-sh.in and add the question. -2) Edit ../doc/Configure.help and add the help text ! -3) If necessary, add something to parse.none to allow the use of the - value 'none'. -4) If necessary edit gen.ircd.Makefile and ../ircd/Makefile to get your - variable in ../ircd/Makefile. (It will already be in config.h). -5) Add the #ifdefs to the source code. - -In both cases, all needed files will be automatically (re) generated when -you run 'make' from the top level directory (you need GNU make though). - -Carlo Wood Index: ircdh/config/acconfig.h diff -u ircdh/config/acconfig.h:1.1.1.1 ircdh/config/acconfig.h:removed --- ircdh/config/acconfig.h:1.1.1.1 Fri Jul 26 14:58:22 2002 +++ ircdh/config/acconfig.h Thu Jan 23 02:42:44 2003 @@ -1,32 +0,0 @@ -/* Define if you have the resolv library (-lresolv) */ -#undef HAVE_LIB_RESOLV - -/* Define if you have the setrlimit function */ -#undef HAVE_SETRLIMIT - -/* Define one of these, depending on wether you have - POSIX, BSD or SYSV non-blocking stuff */ -#undef NBLOCK_POSIX -#undef NBLOCK_BSD -#undef NBLOCK_SYSV - -/* Define on of these, depending on wether you have - POSIX, BSD or SYSV signal handling */ -#undef POSIX_SIGNALS -#undef BSD_RELIABLE_SIGNALS -#undef SYSV_UNRELIABLE_SIGNALS - -/* Define these to be unsigned integral internal types, - * of respecitvely 2 and 4 bytes in size, when not already - * defined in <sys/types.h>, <stdlib.h> or <stddef.h> */ -#undef u_int16_t -#undef u_int32_t - -/* Define this to the printf format for size_t */ -#undef SIZE_T_FMT - -/* Define this to the printf format for time_t */ -#undef TIME_T_FMT - -/* Define this to the printf signed format for time_t */ -#undef STIME_T_FMT Index: ircdh/config/acinclude.m4 diff -u ircdh/config/acinclude.m4:1.1.1.1 ircdh/config/acinclude.m4:removed --- ircdh/config/acinclude.m4:1.1.1.1 Fri Jul 26 14:58:22 2002 +++ ircdh/config/acinclude.m4 Thu Jan 23 02:42:44 2003 @@ -1,290 +0,0 @@ -dnl -dnl Macro: unet_PIPE_CFLAGS -dnl -dnl If the compiler understands -pipe, add it to CFLAGS if not already -dnl there. -dnl -AC_DEFUN(unet_PIPE_CFLAGS, -[AC_MSG_CHECKING([if the compiler understands -pipe]) -unet_cv_pipe_flags="$ac_cv_prog_gcc" -if test "$ac_cv_prog_gcc" = no; then - OLDCFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -pipe" - AC_TRY_COMPILE(,,unet_cv_pipe_flags=yes,) - CFLAGS="$OLDCFLAGS" -fi -AC_MSG_RESULT($unet_cv_pipe_flags) -if test "$unet_cv_pipe_flags" = yes ; then - x=`echo $CFLAGS | grep 'pipe' 2>/dev/null` - if test "$x" = "" ; then - CFLAGS="$CFLAGS -pipe" - fi -fi -]) - -dnl -dnl Macro: unet_CHECK_LIB_RESOLV -dnl -dnl Check for res_mkquery in -lresolv and add that to LIBS when needed. -dnl -AC_DEFUN(unet_CHECK_LIB_RESOLV, -[AC_CACHE_CHECK([for res_mkquery in -lresolv], unet_cv_lib_resolv, -[AC_TRY_LINK([struct rrec; -extern int res_mkquery(int, const char *, int, int, const char *, - int, struct rrec *, unsigned char *, int);], -[int op; -const char *dname; -int class, type; -const char *data; -int datalen; -struct rrec *newrr; -unsigned char *buf; -int buflen; -res_mkquery(op,dname,class,type,data,datalen,newrr,buf,buflen)], -unet_cv_lib_resolv=no, [OLD_LIBS="$LIBS" -LIBS="$LIBS -lresolv" -AC_TRY_LINK([extern char *_res;], [*_res=0], -unet_cv_lib_resolv=yes, unet_cv_lib_resolv=no) -LIBS="$OLD_LIBS"])]) -if test $unet_cv_lib_resolv = yes; then - AC_DEFINE(HAVE_LIB_RESOLV) - LIBS="$LIBS -lresolv" -fi]) - -dnl -dnl Macro: unet_NONBLOCKING -dnl -dnl Check whether we have posix, bsd or sysv non-blocking sockets and -dnl define respectively NBLOCK_POSIX, NBLOCK_BSD or NBLOCK_SYSV. -dnl -AC_DEFUN(unet_NONBLOCKING, -[dnl Do we have posix, bsd or sysv non-blocking stuff ? -AC_CACHE_CHECK([for posix non-blocking], unet_cv_sys_nonblocking_posix, -[AC_TRY_RUN([#include <sys/types.h> -#include <sys/socket.h> -#include <fcntl.h> -#include <sys/ioctl.h> -#include <sys/file.h> -#include <signal.h> -$ac_cv_type_signal alarmed() { exit(1); } -int main(void) -{ - char b[12]; - struct sockaddr x; - size_t l = sizeof(x); - int f = socket(AF_INET, SOCK_DGRAM, 0); - if (f >= 0 && !(fcntl(f, F_SETFL, O_NONBLOCK))) - { - signal(SIGALRM, alarmed); - alarm(2); - recvfrom(f, b, 12, 0, &x, &l); - alarm(0); - exit(0); - } - exit(1); -}], unet_cv_sys_nonblocking_posix=yes, unet_cv_sys_nonblocking_posix=no)]) -if test $unet_cv_sys_nonblocking_posix = yes; then - AC_DEFINE(NBLOCK_POSIX) -else -AC_CACHE_CHECK([for bsd non-blocking], unet_cv_sys_nonblocking_bsd, -[AC_TRY_RUN([#include <sys/types.h> -#include <sys/socket.h> -#include <fcntl.h> -#include <sys/ioctl.h> -#include <sys/file.h> -#include <signal.h> -$ac_cv_type_signal alarmed() { exit(1); } -int main(void) -{ - char b[12]; - struct sockaddr x; - size_t l = sizeof(x); - int f = socket(AF_INET, SOCK_DGRAM, 0); - if (f >= 0 && !(fcntl(f, F_SETFL, O_NDELAY))) - { - signal(SIGALRM, alarmed); - alarm(2); - recvfrom(f, b, 12, 0, &x, &l); - alarm(0); - exit(0); - } - exit(1); -}], unet_cv_sys_nonblocking_bsd=yes, unet_cv_sys_nonblocking_bsd=no)]) -if test $unet_cv_sys_nonblocking_bsd = yes; then - AC_DEFINE(NBLOCK_BSD) -else - AC_DEFINE(NBLOCK_SYSV) -fi -fi]) - -dnl -dnl Macro: unet_SIGNALS -dnl -dnl Check if we have posix signals, reliable bsd signals or -dnl unreliable sysv signals and define respectively POSIX_SIGNALS, -dnl BSD_RELIABLE_SIGNALS or SYSV_UNRELIABLE_SIGNALS. -dnl -AC_DEFUN(unet_SIGNALS, -[dnl Do we have posix signals, reliable bsd signals or unreliable sysv signals ? -AC_CACHE_CHECK([for posix signals], unet_cv_sys_signal_posix, -[AC_TRY_COMPILE([#include <signal.h>], -[sigaction(SIGTERM, (struct sigaction *)0L, (struct sigaction *)0L)], -unet_cv_sys_signal_posix=yes, unet_cv_sys_signal_posix=no)]) -if test $unet_cv_sys_signal_posix = yes; then - AC_DEFINE(POSIX_SIGNALS) -else -AC_CACHE_CHECK([for bsd reliable signals], unet_cv_sys_signal_bsd, -[AC_TRY_RUN([#include <signal.h> -int calls = 0; -$ac_cv_type_signal handler() -{ - if (calls) return; - calls++; - kill(getpid(), SIGTERM); - sleep(1); -} -int main(void) -{ - signal(SIGTERM, handler); - kill(getpid(), SIGTERM); - exit (0); -}], unet_cv_sys_signal_bsd=yes, unet_cv_sys_signal_bsd=no)]) -if test $unet_cv_sys_signal_bsd = yes; then - AC_DEFINE(BSD_RELIABLE_SIGNALS) -else - AC_DEFINE(SYSV_UNRELIABLE_SIGNALS) -fi -fi]) - -dnl -dnl Macro: unet_DEFINE_SIZE_T_FMT -dnl -dnl Define SIZE_T_FMT to be "%u" or "%lu", whichever seems more appropriate. -dnl -AC_DEFUN(unet_DEFINE_SIZE_T_FMT, -[dnl Make educated guess :/, if size_t is a long or not -AC_CHECK_SIZEOF(size_t)dnl -AC_MSG_CHECKING(printf format of size_t) -if test "$ac_cv_sizeof_size_t" = 4 ; then - AC_MSG_RESULT("%u") - AC_DEFINE(SIZE_T_FMT, "%u") -else - AC_MSG_RESULT("%lu") - AC_DEFINE(SIZE_T_FMT, "%lu") -fi]) - -dnl -dnl Macro: unet_DEFINE_TIME_T_FMT -dnl -dnl Try to figure out if time_t is an int or not, and if so define -dnl TIME_T_FMT to be "%u", otherwise define it to be "%lu". -dnl Likewise define STIME_T_FMT for the signed format. -dnl -AC_DEFUN(unet_DEFINE_TIME_T_FMT, -[dnl Make educated guess :/, if time_t is a long or not -AC_MSG_CHECKING(size of time_t) -AC_CACHE_VAL(unet_cv_sizeof_time_t, -[AC_TRY_RUN([#include <stdio.h> -#include <sys/types.h> -main() -{ - FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); - fprintf(f, "%d\n", sizeof(time_t)); - exit(0); -}], unet_cv_sizeof_time_t=`cat conftestval`, -unet_cv_sizeof_time_t=0, unet_cv_sizeof_time_t=0)]) -if test "$unet_cv_sizeof_time_t" = 0 ; then - AC_MSG_RESULT(unknown) - AC_DEFINE(TIME_T_FMT, "%lu") - AC_DEFINE(STIME_T_FMT, "%ld") -else - AC_MSG_RESULT([$unet_cv_sizeof_time_t]) - AC_MSG_CHECKING(printf format of time_t) - if test "$unet_cv_sizeof_time_t" = "$ac_cv_sizeof_long" ; then - AC_MSG_RESULT("%lu") - AC_DEFINE(TIME_T_FMT, "%lu") - AC_DEFINE(STIME_T_FMT, "%ld") - else - AC_MSG_RESULT("%u") - AC_DEFINE(TIME_T_FMT, "%u") - AC_DEFINE(STIME_T_FMT, "%d") - fi -fi]) - -dnl -dnl Macro: unet_CHECK_TYPE_SIZES -dnl -dnl Check the size of several types and define a valid int16_t and int32_t. -dnl -AC_DEFUN(unet_CHECK_TYPE_SIZES, -[dnl Check type sizes -AC_CHECK_SIZEOF(short) -AC_CHECK_SIZEOF(int) -AC_CHECK_SIZEOF(long) -if test "$ac_cv_sizeof_int" = 2 ; then - AC_CHECK_TYPE(int16_t, int) - AC_CHECK_TYPE(u_int16_t, unsigned int) -elif test "$ac_cv_sizeof_short" = 2 ; then - AC_CHECK_TYPE(int16_t, short) - AC_CHECK_TYPE(u_int16_t, unsigned short) -else - AC_MSG_ERROR([Cannot find a type with size of 16 bits]) -fi -if test "$ac_cv_sizeof_int" = 4 ; then - AC_CHECK_TYPE(int32_t, int) - AC_CHECK_TYPE(u_int32_t, unsigned int) -elif test "$ac_cv_sizeof_short" = 4 ; then - AC_CHECK_TYPE(int32_t, short) - AC_CHECK_TYPE(u_int32_t, unsigned short) -elif test "$ac_cv_sizeof_long" = 4 ; then - AC_CHECK_TYPE(int32_t, long) - AC_CHECK_TYPE(u_int32_t, unsigned long) -else - AC_MSG_ERROR([Cannot find a type with size of 32 bits]) -fi]) - -dnl -dnl Macro: unet_FUNC_POLL_SYSCALL -dnl -dnl Try to figure out if we have a system call poll (not if it is emulated). -dnl Manical laughter... -dnl -AC_DEFUN(unet_FUNC_POLL_SYSCALL, -[AC_CHECK_HEADERS(poll.h)dnl -if test -z "$unet_cv_func_poll_syscall" ; then - AC_MSG_CHECKING([if poll is a system call (please wait)]) -else - AC_MSG_CHECKING([if poll is a system call]) -fi -AC_CACHE_VAL(unet_cv_func_poll_syscall, -[unet_cv_func_poll_syscall=no -dnl No need to go through the trouble when we don't have poll.h: -changequote(, )dnl -if test "$ac_cv_header_poll_h" = yes; then - unet_dirs=`find /usr/include/sys -type f -name '*.h' -exec egrep '^#include <[^/]*/.*>' {} \; | sed -e 's/^.*<//' -e 's%/.*$%%' | sort | uniq` - for i in $unet_dirs ; do - if test "$unet_cv_func_poll_syscall" = no ; then - unet_files=`ls /usr/include/$i/*.h 2> /dev/null` - if test -n "$unet_files" ; then - for j in $unet_files ; do - if test "$unet_cv_func_poll_syscall" = no ; then - unet_line=`egrep '^#define[[:space:]]+[[:alnum:]_]*[Pp][Oo][Ll][Ll]' $j` - if test -n "$unet_line" ; then - unet_sig=`echo "$unet_line" | sed -e 's/poll/fork/g' -e 's/POLL/FORK/g' -e 's/[[:space:]]//g' -e 's%/\*.*\*/%%g' -e 's/[0-9]//g'` - unet_set=`for k in "$unet_sig" ; do echo $k; done | sed -e 's% %|%g'` - unet_match=`sed -e 's/[[:space:]]//g' -e 's%/\*.*\*/%%g' -e 's/[0-9]//g' $j | egrep "$unet_set"` - if test -n "$unet_match" ; then - unet_cv_func_poll_syscall=yes - fi - fi - fi - done - fi - fi - done -fi -changequote([, ])dnl -]) -AC_MSG_RESULT([$unet_cv_func_poll_syscall]) -]) Index: ircdh/config/aclocal.m4 diff -u ircdh/config/aclocal.m4:1.1.1.1 ircdh/config/aclocal.m4:removed --- ircdh/config/aclocal.m4:1.1.1.1 Fri Jul 26 14:58:22 2002 +++ ircdh/config/aclocal.m4 Thu Jan 23 02:42:44 2003 @@ -1,391 +0,0 @@ -dnl aclocal.m4 generated automatically by aclocal 1.4a - -dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc. -dnl This file is free software; the Free Software Foundation -dnl gives unlimited permission to copy and/or distribute it, -dnl with or without modifications, as long as this notice is preserved. - -dnl This program is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without -dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A -dnl PARTICULAR PURPOSE. - -dnl -dnl Macro: unet_PIPE_CFLAGS -dnl -dnl If the compiler understands -pipe, add it to CFLAGS if not already -dnl there. -dnl -AC_DEFUN(unet_PIPE_CFLAGS, -[AC_MSG_CHECKING([if the compiler understands -pipe]) -unet_cv_pipe_flags="$ac_cv_prog_gcc" -if test "$ac_cv_prog_gcc" = no; then - OLDCFLAGS="$CFLAGS" - CFLAGS="$CFLAGS -pipe" - AC_TRY_COMPILE(,,unet_cv_pipe_flags=yes,) - CFLAGS="$OLDCFLAGS" -fi -AC_MSG_RESULT($unet_cv_pipe_flags) -if test "$unet_cv_pipe_flags" = yes ; then - x=`echo $CFLAGS | grep 'pipe' 2>/dev/null` - if test "$x" = "" ; then - CFLAGS="$CFLAGS -pipe" - fi -fi -]) - -dnl -dnl Macro: unet_CHECK_LIB_RESOLV -dnl -dnl Check for res_mkquery in -lresolv and add that to LIBS when needed. -dnl -AC_DEFUN(unet_CHECK_LIB_RESOLV, -[AC_CACHE_CHECK([for res_mkquery in -lresolv], unet_cv_lib_resolv, -[AC_TRY_LINK([struct rrec; -extern int res_mkquery(int, const char *, int, int, const char *, - int, struct rrec *, unsigned char *, int);], -[int op; -const char *dname; -int class, type; -const char *data; -int datalen; -struct rrec *newrr; -unsigned char *buf; -int buflen; -res_mkquery(op,dname,class,type,data,datalen,newrr,buf,buflen)], -unet_cv_lib_resolv=no, [OLD_LIBS="$LIBS" -LIBS="$LIBS -lresolv" -AC_TRY_LINK([extern char *_res;], [*_res=0], -unet_cv_lib_resolv=yes, unet_cv_lib_resolv=no) -LIBS="$OLD_LIBS"])]) -if test $unet_cv_lib_resolv = yes; then - AC_DEFINE(HAVE_LIB_RESOLV) - LIBS="$LIBS -lresolv" -fi]) - -dnl -dnl Macro: unet_NONBLOCKING -dnl -dnl Check whether we have posix, bsd or sysv non-blocking sockets and -dnl define respectively NBLOCK_POSIX, NBLOCK_BSD or NBLOCK_SYSV. -dnl -AC_DEFUN(unet_NONBLOCKING, -[dnl Do we have posix, bsd or sysv non-blocking stuff ? -AC_CACHE_CHECK([for posix non-blocking], unet_cv_sys_nonblocking_posix, -[AC_TRY_RUN([#include <sys/types.h> -#include <sys/socket.h> -#include <fcntl.h> -#include <sys/ioctl.h> -#include <sys/file.h> -#include <signal.h> -$ac_cv_type_signal alarmed() { exit(1); } -int main(void) -{ - char b[12]; - struct sockaddr x; - size_t l = sizeof(x); - int f = socket(AF_INET, SOCK_DGRAM, 0); - if (f >= 0 && !(fcntl(f, F_SETFL, O_NONBLOCK))) - { - signal(SIGALRM, alarmed); - alarm(2); - recvfrom(f, b, 12, 0, &x, &l); - alarm(0); - exit(0); - } - exit(1); -}], unet_cv_sys_nonblocking_posix=yes, unet_cv_sys_nonblocking_posix=no)]) -if test $unet_cv_sys_nonblocking_posix = yes; then - AC_DEFINE(NBLOCK_POSIX) -else -AC_CACHE_CHECK([for bsd non-blocking], unet_cv_sys_nonblocking_bsd, -[AC_TRY_RUN([#include <sys/types.h> -#include <sys/socket.h> -#include <fcntl.h> -#include <sys/ioctl.h> -#include <sys/file.h> -#include <signal.h> -$ac_cv_type_signal alarmed() { exit(1); } -int main(void) -{ - char b[12]; - struct sockaddr x; - size_t l = sizeof(x); - int f = socket(AF_INET, SOCK_DGRAM, 0); - if (f >= 0 && !(fcntl(f, F_SETFL, O_NDELAY))) - { - signal(SIGALRM, alarmed); - alarm(2); - recvfrom(f, b, 12, 0, &x, &l); - alarm(0); - exit(0); - } - exit(1); -}], unet_cv_sys_nonblocking_bsd=yes, unet_cv_sys_nonblocking_bsd=no)]) -if test $unet_cv_sys_nonblocking_bsd = yes; then - AC_DEFINE(NBLOCK_BSD) -else - AC_DEFINE(NBLOCK_SYSV) -fi -fi]) - -dnl -dnl Macro: unet_SIGNALS -dnl -dnl Check if we have posix signals, reliable bsd signals or -dnl unreliable sysv signals and define respectively POSIX_SIGNALS, -dnl BSD_RELIABLE_SIGNALS or SYSV_UNRELIABLE_SIGNALS. -dnl -AC_DEFUN(unet_SIGNALS, -[dnl Do we have posix signals, reliable bsd signals or unreliable sysv signals ? -AC_CACHE_CHECK([for posix signals], unet_cv_sys_signal_posix, -[AC_TRY_COMPILE([#include <signal.h>], -[sigaction(SIGTERM, (struct sigaction *)0L, (struct sigaction *)0L)], -unet_cv_sys_signal_posix=yes, unet_cv_sys_signal_posix=no)]) -if test $unet_cv_sys_signal_posix = yes; then - AC_DEFINE(POSIX_SIGNALS) -else -AC_CACHE_CHECK([for bsd reliable signals], unet_cv_sys_signal_bsd, -[AC_TRY_RUN([#include <signal.h> -int calls = 0; -$ac_cv_type_signal handler() -{ - if (calls) return; - calls++; - kill(getpid(), SIGTERM); - sleep(1); -} -int main(void) -{ - signal(SIGTERM, handler); - kill(getpid(), SIGTERM); - exit (0); -}], unet_cv_sys_signal_bsd=yes, unet_cv_sys_signal_bsd=no)]) -if test $unet_cv_sys_signal_bsd = yes; then - AC_DEFINE(BSD_RELIABLE_SIGNALS) -else - AC_DEFINE(SYSV_UNRELIABLE_SIGNALS) -fi -fi]) - -dnl -dnl Macro: unet_DEFINE_SIZE_T_FMT -dnl -dnl Define SIZE_T_FMT to be "%u" or "%lu", whichever seems more appropriate. -dnl -AC_DEFUN(unet_DEFINE_SIZE_T_FMT, -[dnl Make educated guess :/, if size_t is a long or not -AC_CHECK_SIZEOF(size_t)dnl -AC_MSG_CHECKING(printf format of size_t) -if test "$ac_cv_sizeof_size_t" = 4 ; then - AC_MSG_RESULT("%u") - AC_DEFINE(SIZE_T_FMT, "%u") -else - AC_MSG_RESULT("%lu") - AC_DEFINE(SIZE_T_FMT, "%lu") -fi]) - -dnl -dnl Macro: unet_DEFINE_TIME_T_FMT -dnl -dnl Try to figure out if time_t is an int or not, and if so define -dnl TIME_T_FMT to be "%u", otherwise define it to be "%lu". -dnl Likewise define STIME_T_FMT for the signed format. -dnl -AC_DEFUN(unet_DEFINE_TIME_T_FMT, -[dnl Make educated guess :/, if time_t is a long or not -AC_MSG_CHECKING(size of time_t) -AC_CACHE_VAL(unet_cv_sizeof_time_t, -[AC_TRY_RUN([#include <stdio.h> -#include <sys/types.h> -main() -{ - FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); - fprintf(f, "%d\n", sizeof(time_t)); - exit(0); -}], unet_cv_sizeof_time_t=`cat conftestval`, -unet_cv_sizeof_time_t=0, unet_cv_sizeof_time_t=0)]) -if test "$unet_cv_sizeof_time_t" = 0 ; then - AC_MSG_RESULT(unknown) - AC_DEFINE(TIME_T_FMT, "%lu") - AC_DEFINE(STIME_T_FMT, "%ld") -else - AC_MSG_RESULT([$unet_cv_sizeof_time_t]) - AC_MSG_CHECKING(printf format of time_t) - if test "$unet_cv_sizeof_time_t" = "$ac_cv_sizeof_long" ; then - AC_MSG_RESULT("%lu") - AC_DEFINE(TIME_T_FMT, "%lu") - AC_DEFINE(STIME_T_FMT, "%ld") - else - AC_MSG_RESULT("%u") - AC_DEFINE(TIME_T_FMT, "%u") - AC_DEFINE(STIME_T_FMT, "%d") - fi -fi]) - -dnl -dnl Macro: unet_CHECK_TYPE_SIZES -dnl -dnl Check the size of several types and define a valid int16_t and int32_t. -dnl -AC_DEFUN(unet_CHECK_TYPE_SIZES, -[dnl Check type sizes -AC_CHECK_SIZEOF(short) -AC_CHECK_SIZEOF(int) -AC_CHECK_SIZEOF(long) -if test "$ac_cv_sizeof_int" = 2 ; then - AC_CHECK_TYPE(int16_t, int) - AC_CHECK_TYPE(u_int16_t, unsigned int) -elif test "$ac_cv_sizeof_short" = 2 ; then - AC_CHECK_TYPE(int16_t, short) - AC_CHECK_TYPE(u_int16_t, unsigned short) -else - AC_MSG_ERROR([Cannot find a type with size of 16 bits]) -fi -if test "$ac_cv_sizeof_int" = 4 ; then - AC_CHECK_TYPE(int32_t, int) - AC_CHECK_TYPE(u_int32_t, unsigned int) -elif test "$ac_cv_sizeof_short" = 4 ; then - AC_CHECK_TYPE(int32_t, short) - AC_CHECK_TYPE(u_int32_t, unsigned short) -elif test "$ac_cv_sizeof_long" = 4 ; then - AC_CHECK_TYPE(int32_t, long) - AC_CHECK_TYPE(u_int32_t, unsigned long) -else - AC_MSG_ERROR([Cannot find a type with size of 32 bits]) -fi]) - -dnl -dnl Macro: unet_FUNC_POLL_SYSCALL -dnl -dnl Try to figure out if we have a system call poll (not if it is emulated). -dnl Manical laughter... -dnl -AC_DEFUN(unet_FUNC_POLL_SYSCALL, -[AC_CHECK_HEADERS(poll.h)dnl -if test -z "$unet_cv_func_poll_syscall" ; then - AC_MSG_CHECKING([if poll is a system call (please wait)]) -else - AC_MSG_CHECKING([if poll is a system call]) -fi -AC_CACHE_VAL(unet_cv_func_poll_syscall, -[unet_cv_func_poll_syscall=no -dnl No need to go through the trouble when we don't have poll.h: -changequote(, )dnl -if test "$ac_cv_header_poll_h" = yes; then - unet_dirs=`find /usr/include/sys -type f -name '*.h' -exec egrep '^#include <[^/]*/.*>' {} \; | sed -e 's/^.*<//' -e 's%/.*$%%' | sort | uniq` - for i in $unet_dirs ; do - if test "$unet_cv_func_poll_syscall" = no ; then - unet_files=`ls /usr/include/$i/*.h 2> /dev/null` - if test -n "$unet_files" ; then - for j in $unet_files ; do - if test "$unet_cv_func_poll_syscall" = no ; then - unet_line=`egrep '^#define[[:space:]]+[[:alnum:]_]*[Pp][Oo][Ll][Ll]' $j` - if test -n "$unet_line" ; then - unet_sig=`echo "$unet_line" | sed -e 's/poll/fork/g' -e 's/POLL/FORK/g' -e 's/[[:space:]]//g' -e 's%/\*.*\*/%%g' -e 's/[0-9]//g'` - unet_set=`for k in "$unet_sig" ; do echo $k; done | sed -e 's% %|%g'` - unet_match=`sed -e 's/[[:space:]]//g' -e 's%/\*.*\*/%%g' -e 's/[0-9]//g' $j | egrep "$unet_set"` - if test -n "$unet_match" ; then - unet_cv_func_poll_syscall=yes - fi - fi - fi - done - fi - fi - done -fi -changequote([, ])dnl -]) -AC_MSG_RESULT([$unet_cv_func_poll_syscall]) -]) - - -# serial 1 - -# @defmac AC_PROG_CC_STDC -# @maindex PROG_CC_STDC -# @ovindex CC -# If the C compiler in not in ANSI C mode by default, try to add an option -# to output variable @code{CC} to make it so. This macro tries various -# options that select ANSI C on some system or another. It considers the -# compiler to be in ANSI C mode if it handles function prototypes correctly. -# -# If you use this macro, you should check after calling it whether the C -# compiler has been set to accept ANSI C; if not, the shell variable -# @code{am_cv_prog_cc_stdc} is set to @samp{no}. If you wrote your source -# code in ANSI C, you can make an un-ANSIfied copy of it by using the -# program @code{ansi2knr}, which comes with Ghostscript. -# @end defmac - -AC_DEFUN(AM_PROG_CC_STDC, -[AC_REQUIRE([AC_PROG_CC]) -AC_BEFORE([$0], [AC_C_INLINE]) -AC_BEFORE([$0], [AC_C_CONST]) -dnl Force this before AC_PROG_CPP. Some cpp's, eg on HPUX, require -dnl a magic option to avoid problems with ANSI preprocessor commands -dnl like #elif. -dnl FIXME: can't do this because then AC_AIX won't work due to a -dnl circular dependency. -dnl AC_BEFORE([$0], [AC_PROG_CPP]) -AC_MSG_CHECKING(for ${CC-cc} option to accept ANSI C) -AC_CACHE_VAL(am_cv_prog_cc_stdc, -[am_cv_prog_cc_stdc=no -ac_save_CC="$CC" -# Don't try gcc -ansi; that turns off useful extensions and -# breaks some systems' header files. -# AIX -qlanglvl=ansi -# Ultrix and OSF/1 -std1 -# HP-UX -Aa -D_HPUX_SOURCE -# SVR4 -Xc -D__EXTENSIONS__ -for ac_arg in "" -qlanglvl=ansi -std1 "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - AC_TRY_COMPILE( -[#include <stdarg.h> -#include <stdio.h> -#include <sys/types.h> -#include <sys/stat.h> -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -], [ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; -], -[am_cv_prog_cc_stdc="$ac_arg"; break]) -done -CC="$ac_save_CC" -]) -if test -z "$am_cv_prog_cc_stdc"; then - AC_MSG_RESULT([none needed]) -else - AC_MSG_RESULT($am_cv_prog_cc_stdc) -fi -case "x$am_cv_prog_cc_stdc" in - x|xno) ;; - *) CC="$CC $am_cv_prog_cc_stdc" ;; -esac -]) - Index: ircdh/config/config-sh.in diff -u ircdh/config/config-sh.in:1.7 ircdh/config/config-sh.in:removed --- ircdh/config/config-sh.in:1.7 Sat Nov 30 16:34:06 2002 +++ ircdh/config/config-sh.in Thu Jan 23 02:42:44 2003 @@ -1,416 +0,0 @@ -# @configure_input@ -# -# By Carlo Wood (ca...@ru...) -# -# For a description of the syntax of this configuration file, -# see the config/Configure script. -# -# TO CONFIGURE THE SERVER, TYPE: 'make config' in the top level directory ! -# - -#### Start of system configuration section. #### - -prefix=@prefix@ -exec_prefix=@exec_prefix@ -bindir=@bindir@ -mandir=@mandir@ -CC_DEFAULT="@CC@" -CFLAGS_DEFAULT="@CFLAGS@" -CPPFLAGS_DEFAULT="@CPPFLAGS@" -LDFLAGS_DEFAULT="@LDFLAGS@" -LIBS="@LIBS@" -ac_cv_header_poll_h=@ac_cv_header_poll_h@ -unet_cv_func_poll_syscall=@unet_cv_func_poll_syscall@ -ac_cv_header_syslog_h=@ac_cv_header_syslog_h@ - -#### End of system configuration section. #### - -if [ -z "$CONFIG_BATCH" ]; then - echo "**************************************************************************" - echo "Error: Please run 'make config' that resides in the top level directory!" - echo "**************************************************************************" - exit -1 -fi - -mainmenu_name "IRC-Dev IRC Daemon Configuration" -mainmenu_option next_comment - if [ "$CONFIG_BATCH" = "n" ]; then - echo "* Welcome to the IRC-Dev IRC Daemon Configuration script." - echo "* You can restart this configuration at any time by typing 'make config'." - echo "* If you need help with your decision on any question, type a '?'" - echo "*" - USE_DEFAULT=n - else - USE_DEFAULT=C - fi - CHANGE_CONFIG=n - if [ "$DEFAULTS" != "none" ]; then - bool 'Do you want to change your previous configuration' CHANGE_CONFIG - if [ "$CHANGE_CONFIG" = "n" ]; then - echo "Ok, I will only prompt you for NEW parameters." - USE_DEFAULT=C - else - USE_DEFAULT=n - fi - else - USE_DEFAULT=n - fi -endmenu - -mainmenu_option next_comment -comment 'Debugging (do not define this on production servers)' - bool 'Do you want to enable debugging output' DEBUGMODE - bool 'Do you want to enable asserts and memory allocation checking' CONFIG_NDEBUG - EXTRA_CPPFLAGS="" - if [ "$CONFIG_NDEBUG" = "n" ]; then - if [ -z "$EXTRA_CPPFLAGS" ]; then - EXTRA_CPPFLAGS="-DNDEBUG" - else - EXTRA_CPPFLAGS="-DNDEBUG $EXTRA_CPPFLAGS" - fi - fi - bool 'Are you testing on a host without DNS' NODNS -endmenu - -mainmenu_option next_comment -comment 'Compile stuff' - if [ "$prefix" = "NONE" ]; then - prefix=/usr/local - fi - if [ "$exec_prefix" = "NONE" ]; then - eval exec_prefix="$prefix" - fi - string 'Which compiler do you want to use' CC "$CC_DEFAULT" - echo "* For the following four questions, specify 'none' when you want it to be empty." - if [ -z "$cflags_O3_remark" -a -n "$CFLAGS" ]; then - CFLAGS_DEFAULT=`echo "$CFLAGS" | sed -e 's%-O2%-O3%'` - if [ "$CFLAGS_DEFAULT" != "$CFLAGS" ]; then - echo "You are highly advised to use -O3 instead of -O2 if you're short in cpu cycles!" - echo "Please read documentation (press '?'):" - CFLAGS= - fi - fi - eval string "'What flags should I pass to $CC [none]'" CFLAGS "'$CFLAGS_DEFAULT'" - define_macro cflags_O3_remark done - string 'Do you need extra include directories [none]' EXTRA_INCLUDEDIRS none - if [ -z "$LDFLAGS_DEFAULT" ]; then - LDFLAGS_DEFAULT=none - else - eval LDFLAGS_DEFAULT="$LDFLAGS_DEFAULT" - fi - string 'Which linker flags do you need [none]' LDFLAGS "$LDFLAGS_DEFAULT" - if [ -z "$LIBS" ]; then - LIBS=none - fi - string 'Which extra libraries do you need [none]' IRCDLIBS "$LIBS" - eval bindir="$bindir" - string 'In which directory should I install the ircd binary' BINDIR $bindir - if [ ! -d "$BINDIR" ]; then - echo "$BINDIR : No such directory" - fi - string 'What should the name of the installed symbolic link to the exectuable be' SYMLINK ircd - string 'Which permissions do you want the binary to have' IRCDMODE 711 - string 'Which owner do you want the binary to have' IRCDOWN "`id | sed -e 's/.*uid=[0-9]*(//' -e 's/).*//' 2> /dev/null`" - string 'Which group do you want the binary to have' IRCDGRP "`id | sed -e 's/.*gid=[0-9]*(//' -e 's/).*//' 2> /dev/null`" - eval mandir=$mandir - string 'Where should I install the man page' MANDIR $mandir - if [ "$CFLAGS" = "none" ]; then - CFLAGS="" - fi - if [ "$EXTRA_INCLUDEDIRS" = "none" ]; then - EXTRA_INCLUDEDIRS="" - fi - if [ "$LDFLAGS" = "none" ]; then - LDFLAGS="" - fi - if [ "$IRCDLIBS" = "none" ]; then - IRCDLIBS="" - fi - if [ -n "$EXTRA_INCLUDEDIRS" ]; then - for i in $EXTRA_INCLUDEDIRS; do - if [ -z "$EXTRA_CPPFLAGS" ]; then - EXTRA_CPPFLAGS=-I$i - else - EXTRA_CPPFLAGS="$EXTRA_CPPFLAGS -I$i" - fi - done - fi - if [ -z "$EXTRA_CPPFLAGS" ]; then - CPPFLAGS="-I../include -I../config" - else - CPPFLAGS="-I../include -I../config $EXTRA_CPPFLAGS" - fi - echo "EXTRA_CPPFLAGS=\"$EXTRA_CPPFLAGS\"" >>$CONFIG - echo "CPPFLAGS=\"$CPPFLAGS\"" >>$CONFIG - bool 'Use inlining for a few crucial functions' FORCEINLINE y -endmenu - -if [ "$ac_cv_header_poll_h" = "yes" ]; then - if [ "$unet_cv_func_poll_syscall" = "yes" ]; then - define_bool USE_POLL y - else - mainmenu_option next_comment - comment 'Operating System specific defines.' - bool 'You have poll(), but do you want to use it' USE_POLL - endmenu - fi -fi - -mainmenu_option next_comment -comment 'Host specific defines' - if [ -f /etc/resolv.conf ]; then - DOMAINNAME_DEFAULT="`awk '/^domain/ { print $2; exit }' /etc/resolv.conf`" - fi - string 'What is the domain name of your network' DOMAINNAME $DOMAINNAME_DEFAULT - if [ -z "$DOMAINNAME" ]; then - DOMAINNAME=none - fi - string 'What is the network name of your network' NETWORK IRC-Dev - string 'Please give a random seed of eight characters' RANDOM_SEED 12345678 - bool 'Does your host have a reliable clock' RELIABLE_CLOCK -endmenu - -mainmenu_option next_comment -comment 'General defines' - bool 'Change root ('/') after start of daemon' CHROOTDIR - bool 'Do you want the daemon set its own uid/gid' CONFIG_SETUGID y - if [ "$CONFIG_SETUGID" = "y" ]; then - int ' UID of irc daemon' IRC_UID - int ' GID of irc daemon' IRC_GID - else - define_int IRC_UID $IRC_UID - define_int IRC_GID $IRC_GID - bool 'Allow to specify configuration file on command line' CMDLINE_CONFIG - if [ "$CMDLINE_CONFIG" = "y" ]; then - echo " SECURITY: Then don't install the daemon SUID or SGID !" - fi - fi - bool 'Do you need virtual hosting' VIRTUAL_HOST - PREV_HUB=$HUB - bool 'Will you connect to more then one server at a time' HUB - if [ "$PREV_HUB" != "$HUB" ]; then - BUFFERPOOL= - fi -endmenu - - -mainmenu_option next_comment -comment 'Paths and files' - eval DPATH_DEFAULT="${prefix}/lib/ircd" - string 'Directory where all ircd stuff resides' DPATH $DPATH_DEFAULT - define_string SPATH "$BINDIR/$SYMLINK" - echo "The following filenames are either full paths or files within DPATH" - string 'Server configuration file' CPATH 'ircd.conf' - string 'Server MOTD file' MPATH 'ircd.motd' - string 'Server remote MOTD file (3 lines max)' RPATH 'remote.motd' - if [ "$DEBUGMODE" = "y" ]; then - string 'Debug file if DEBUGMODE' LPATH '/tmp/ircd.log' - else - define_string LPATH "$LPATH" - fi - string 'File for server pid' PPATH 'ircd.pid' -endmenu - -mainmenu_option next_comment -comment 'Logging (filenames are either full paths or files within DPATH)' - bool 'Do you want to log the use of /WHO x% (recommended)' CONFIG_LOG_WHOX y - if [ "$CONFIG_LOG_WHOX" = "y" ]; then - string ' Give the path and(or) filename of this log file' WPATH 'whox.log' - fi - -comment 'Bad Channel G-Lines allow operators to add channel masks to a list which prohibits local clients from being able joining channels which match the mask. Remote BadChan Glines allow Uworld to add or remove channels from the servers internal list of badchans' - bool 'Do you want to enable Bad Channel G-lines' BADCHAN y - if [ "$BADCHAN" = "y" ]; then - echo " " - echo " WARNING DO _NOT_ USE LOCAL BADCHANNEL GLINES ON UNDERNET" - echo " Use of LOCAL BAD Channel G-Lines can be cause for REMOVAL" - bool 'Allow LOCAL BAD Channel G-lines' LOCAL_BADCHAN - fi - - bool 'Do you want to log G-lines to a separate file' CONFIG_LOG_GLINES - if [ "$CONFIG_LOG_GLINES" = "y" ]; then - string ' Give the path and(or) filename of this log file' GPATH 'gline.log' - fi - bool 'Do you want to log connecting users to a separate file' CONFIG_LOG_USERS - if [ "$CONFIG_LOG_USERS" = "y" ]; then - string ' Give the path and(or) filename of this log file' FNAME_USERLOG $DPATH/users - fi - bool 'Do you want to log Opers to a separate file' CONFIG_LOG_OPERS - if [ "$CONFIG_LOG_OPERS" = "y" ]; then - string ' Give the path and(or) filename of this log file' FNAME_OPERLOG $DPATH/opers - fi - if [ "$ac_cv_header_syslog_h" = "yes" ]; then - bool 'Do you want to use syslog' USE_SYSLOG - else - USE_SYSLOG=n - fi - if [ "$USE_SYSLOG" = "y" ]; then - bool ' Log all operator kills to syslog' SYSLOG_KILL - bool ' Log all remote squits for all servers to syslog' SYSLOG_SQUIT - bool ' Log remote connect messages for other all servs' SYSLOG_CONNECT - bool ' Log all users who successfully become an Oper' SYSLOG_OPER - bool ' Send userlog stuff to syslog' SYSLOG_USERS - if [ "$SYSLOG_KILL" = "n" -a "$SYSLOG_SQUIT" = "n" -a \ - "$SYSLOG_CONNECT" = "n" -a "$SYSLOG_OPER" = "n" -a \ - "$SYSLOG_USERS" = "n" ]; then - define_macro LOG_FACILITY $LOG_FACILITY - define_bool USE_SYSLOG n - else - choice ' Log facility' \ - "daemon CONFIG_DAEMON \ - user CONFIG_USER \ - local0-7 CONFIG_LOCAL" daemon - if [ "$CONFIG_DAEMON" = "y" ]; then - define_macro LOG_FACILITY LOG_DAEMON - else - if [ "$CONFIG_USER" = "y" ]; then - define_macro LOG_FACILITY LOG_USER - else - int ' Which local facility (0-7)' INT_LOCAL - define_macro LOG_FACILITY LOG_LOCAL$INT_LOCAL - fi - fi - echo " Using log facility $LOG_FACILITY" - fi - else - define_bool SYSLOG_KILL $SYSLOG_KILL - define_bool SYSLOG_SQUIT $SYSLOG_SQUIT - define_bool SYSLOG_CONNECT $SYSLOG_CONNECT - define_bool SYSLOG_OPER $SYSLOG_OPER - define_bool SYSLOG_USERS $SYSLOG_USERS - define_macro LOG_FACILITY $LOG_FACILITY - fi -endmenu - -mainmenu_option next_comment -comment 'Configuration' -# echo 'ATENCION: Si tienes en la red unos services P09, es obligatorio responder Y a la siguiente pregunta' -# bool 'Activar el soporte del protocolo P09' P09_SUPPORT - bool 'Use crypted passwords for operators' CRYPT_OPER_PASSWORD y - DUMMY=`echo "$BUFFERPOOL" | sed -e 's/[0-9]//g'` - if [ "$DUMMY" != "" ]; then - BUFFERPOOL= - fi - if [ "$HUB" = "y" ]; then - int 'Max size of the total of of all sendqs (bytes)' BUFFERPOOL 27000000 - else - int 'Max size of the total of of all sendqs (bytes)' BUFFERPOOL 9000000 - fi - int 'Max receive queue for clients (bytes)' CLIENT_FLOOD 2048 - int 'Maximum number of network connections (23 - (FD_SETSIZE-4))' MAXCONNECTIONS 252 - int 'Default port for connections to other servers' SERVER_PORT 4400 - int 'Nickname history length' NICKNAMEHISTORYLENGTH 800 - bool 'Allow Opers to see (dis)connects of local clients' ALLOW_SNO_CONNEXIT - if [ "$ALLOW_SNO_CONNEXIT" = "y" ]; then - bool 'Show IP address in client connection notices' SNO_CONNEXIT_IP - fi - bool 'Do you want to use R: lines in your configuration file' R_LINES - if [ "$R_LINES" = "y" ]; then - bool 'Process R: lines every rehash' R_LINES_REHASH y - bool 'Process R: lines always' R_LINES_OFTEN - else - define_bool R_LINES_REHASH $R_LINES_REHASH - define_bool R_LINES_OFTEN $R_LINES_OFTEN - fi - bool 'Do you want support for the old I:*:ONE:*:: construct (read help text!)' USEONE n - bool 'Send a short message instead of the MOTD to connecting clients' NODEFAULTMOTD y - bool 'Kill connecting clients when forward and reverse DNS mismatch' KILL_IPMISMATCH n -endmenu - -mainmenu_option next_comment -comment 'Oper commands' - bool 'Allow opers to wallop' OPER_WALLOPS y - bool 'Allow (local) Opers to see all local invisible users' SHOW_INVISIBLE_USERS y - if [ "$SHOW_INVISIBLE_USERS" = "y" ]; then - bool 'Allow Opers to see all invisible users' SHOW_ALL_INVISIBLE_USERS y - bool 'Allow HELPERS to see all invisible users' WHOX_HELPERS y - fi - bool 'Allow global Opers (O:) to see inside secret channels' OPERS_SEE_IN_SECRET_CHANNELS y - if [ "$OPERS_SEE_IN_SECRET_CHANNELS" = "y" ]; then - bool 'Allow local Opers (o:) to see inside secret channels' LOCOP_SEE_IN_SECRET_CHANNELS - fi - bool 'Do not truncate obnoxiously long /who output for opers' UNLIMIT_OPER_QUERY - bool 'Allow Opers to use the KILL command' OPER_KILL y - bool 'Allow Opers to use the REHASH command' OPER_REHASH y - bool 'Allow Opers to use the RESTART command' OPER_RESTART y - bool 'Allow Opers to use the DIE command' OPER_DIE y - bool 'Allow Opers to add local G-lines' OPER_LGLINE y - bool 'Allow Opers to connect from a remote site' OPER_REMOTE y - bool 'Allow Opers to join channels using a master key - ESNET' OPER_JOIN_GOD_ESNET y - bool 'Allow Opers to became channel service - ESNET' OPER_CHANNEL_SERVICE_ESNET y - bool 'Local Channel Services has no Flood Control - ESNET' CS_NO_FLOOD_ESNET y - bool 'Allow Opers to bypass UWorld mode changes - ESNET' OPER_XMODE_ESNET y - bool 'Allow local opers to use the REHASH command' LOCOP_REHASH y - bool 'Allow local opers to use the RESTART command' LOCOP_RESTART - bool 'Allow local opers to use the DIE command' LOCOP_DIE - bool 'Allow local opers to add local G-lines' LOCOP_LGLINE y - bool 'Allow local/global opers to be on any number of channels' OPER_NO_CHAN_LIMIT y - bool 'Allow local/global opers to set modes on local channels' OPER_MODE_LCHAN y - bool 'Allow local/global opers to walk through local channels modes' OPER_WALK_THROUGH_LMODES - bool 'Prevent local/global opers from being kicked or deoped on local channels' NO_OPER_DEOP_LCHAN - -endmenu - -mainmenu_option next_comment -comment 'Server characteristics' - bool 'Do you want to have a default LIST parameter' CONFIG_LIST y - if [ "$CONFIG_LIST" = "y" ]; then - string 'Give default LIST parameter' DEFAULT_LIST 'T<10' - define_string DEFAULT_LIST_PARAM "$DEFAULT_LIST" - else - define_string DEFAULT_LIST "$DEFAULT_LIST" - define_bool DEFAULT_LIST_PARAM - fi - bool 'K: line comments treated as a file by default' COMMENT_IS_FILE y - bool 'Only nullify idle-time on PRIVMSG' IDLE_FROM_MSG y - bool 'Enable excessive TS differences check before servers links' CHECK_TS_LINKS y -endmenu - -mainmenu_option next_comment -comment 'Mandatory defines (you should leave these untouched)' - bool 'HISPANO/ESNET: Distributed DataBase Support' BDD y - if [ "$BDD" = "y" ]; then - eval DBPATH_DEFAULT="database" - string 'HISPANO/ESNET: Directory where distributed database resides' DBPATH $DBPATH_DEFAULT - # bool 'HISPANO/ESNET: Distributed Clone Control support' BDD_CLONES y - bool 'HISPANO/ESNET: CHAN_DB features (join # FUNDADOR, modeX)' BDD_CHAN_HACK y - bool 'HISPANO/ESNET: OPER_DB features (join # OPER, modeX)' BDD_OPER_HACK y - if [ "$BDD_OPER_HACK" = "y" ]; then - # bool 'HISPANO/ESNET: OPER_DB features only on registered (CHAN_DB) channels' BDD_OPER_HACK_ONLYREG n - bool 'HISPANO/ESNET: OPER_DB members can be Chanserv (+k)' BDD_OPER_HACK_KMODE y - fi - bool 'HISPANO/ESNET: Soporte para la ocultacion de IPs' BDD_VIP y - if [ "$BDD_VIP" = "y" ]; then - bool 'HISPANO/ESNET: Ignorar el flag "+x" a menos que el usuario este en la tabla "v" o "w"' BDD_VIP3 n - if [ "$BDD_VIP3" = "n" ]; then - bool 'HISPANO/ESNET: Ocultación de IP de TODOS los usuarios' BDD_VIP2 y - fi - fi - fi - bool 'HISPANO/ESNET: XMODE Networking' XMODE_ESNET y -# bool 'HISPANO/ESNET: Dinamic Negotiation link-by-link' ESNET_NEG y -# if [ "$ESNET_NEG" = "y" ]; then -# bool 'HISPANO/ESNET: ZLIB compression between servers - ESN... [truncated message content] |
From: Toni G. <zo...@us...> - 2003-01-19 21:22:44
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-01-19 21:22:43 UTC Modified files: doc/example.conf Log message: Nuevo ircd.conf ---------------------- diff included ---------------------- Index: ircdh/doc/example.conf diff -u ircdh/doc/example.conf:1.2 ircdh/doc/example.conf:1.3 --- ircdh/doc/example.conf:1.2 Sat Jan 18 15:16:08 2003 +++ ircdh/doc/example.conf Sun Jan 19 13:22:33 2003 @@ -1,12 +1,15 @@ -# ircd.conf configuration file for ircd version ircu2.9.mu and ircu2.10 +# ircd.conf - configuration file for ircd version ircu2.10 # -# Last Updated: 26, June 2001. +# Last Updated: 20, March 2002. # # Written by Niels <ni...@un...>, based on the original example.conf, # server code and some real-life (ahem) experience. # # Updated and heavily modified by Braden <db...@ya...>. # +# Rewritten by A1kmm(Andrew Miller)<a1...@mw...> to support +# the new flex/bison configuration parser. +# # Thanks and credits to: Run, Trillian, Cym, Morrissey, Chaos, Flynn, # Xorath, WildThang, Mmmm, SeKs, Ghostwolf and # all other Undernet IRC Admins and Operators, @@ -19,16 +22,18 @@ # but if all the other hubs in Europe aren't in service, it can connect # to one in the US by itself. # -# All configuration options start with a letter identifying the option, -# and a colon separated list of options. Unused fields should be left -# blank. +# The configuration format consists of a number of blocks in the format +# BlockName { setting = number; setting2 = "string"; setting3 = yes; }; +# Note that comments start from a #(hash) and go to the end of the line. +# Whitespace(space, tab, or carriage return/linefeed) are ignored and may +# be used to make the configuration file more readable. # # Please note that when ircd puts the configuration lines into practice, # it parses them exactly the other way round than they are listed here. -# It reads the lines in reverse order. +# It uses the blocks in reverse order. # -# This means that you should start your I: lines with the "fall through", -# most vanilla one and end with the most detailed. +# This means that you should start your Client blocks with the +# "fall through", most vanilla one, and end with the most detailed. # # There is a difference between the "hostname" and the "server name" # of the machine that the server is run on. For example, the host can @@ -42,78 +47,142 @@ # it to work. -# [M:line] +# [General] # # First some information about the server. -# M:<server name>:<virtual host>:<description>:<not used>:<server numeric> +# General { +# name = "servername"; +# vhost = "virtualhost"; +# description = "description"; +# numeric = numericnumber; +# }; # # <virtual host> must contain either a * or a valid IPv4 address in # dotted quad notation. (127.0.0.1) The address MUST be the address # of a physical interface on the host. This address is used for outgoing -# connections only, see P:lines for listener virtual hosting. +# connections only, see Port{} for listener virtual hosting. # If in doubt put a * or the IP of your primary interface here. # The server must be compiled with virtual hosting turned on to get this # to work correctly. # # Note that <server numeric> has to be unique on the network your server # is running on, must be between 0 and 4095, and is not updated on a rehash. -M:London.UK.Eu.UnderNet.org::University of London, England::1 - +General { + name = "London.UK.Eu.UnderNet.org"; + description = "University of London, England"; + numeric = 1; +}; -# [A:line] +# [Admin] # # This sets information that can be retrieved with the /ADMIN command. # It should contain at least an admin Email contact address. -# A:<line 1>:<line 2>:<line 3> -A:The University of London:Undernet IRC server:IRC Admins <ir...@lo...> - +Admin { + Location = "The University of London"; + # At most two contact lines are allowed... + Contact = "Undernet IRC server"; + Contact = "IRC Admins <ir...@lo...>"; +}; -# [Y:lines] +# [Classes] # # All connections to the server are associated with a certain "connection # class", be they incoming or outgoing (initiated by the server), be they # clients, servers or Martians. (Note that ircd doesn't have direct support +# Recommended client classes: # for Martians (yet?); they will have to register as normal users. ;-) -# Take the following Y: lines only as a guide. -# Y:<class>:<ping freq>:<connect freq>:<maximum links>:<sendq size> +# Take the following class blocks only as a guide. +# Class { +# name = "<class>"; +# pingfreq = time; +# connectfreq = time; +# maxlinks = number; +# sendq = size; +# }; # # <connect freq> applies only to servers, and specifies the frequency # that the server tries to autoconnect. setting this to 0 will cause # the server to attempt to connect repeatedly with no delay until the # <maximum links> condition is satisfied. This is a Bad Thing(tm). +# Note that times can be specified as a number, or by giving something +# like: 1 minutes 20 seconds, or 1*60+20. +# Client { +# host = "user@host"; +# ip = "ip@host"; +# password = "password"; +# class = "classname"; +# }; # # <maximum links> should be set at either 0 or 1. # -# Server classes: 90 = all your uplinks for who you do not wish to hub; -# 80 = leaf servers (only used if your server is a hub) -Y:90:90:300:1:9000000 -Y:80:90:300:0:9000000 +# Recommended server classes: +# All your server uplinks you are not a hub for. +Class { + name = "Server"; + pingfreq = 1 minutes 30 seconds; + connectfreq = 5 minutes; + maxlinks = 1; + sendq = 9000000; +}; +# All the leaf servers you hub for. +Class { + name = "LeafServer"; + pingfreq = 1 minutes 30 seconds; + connectfreq = 5 minutes; + maxlinks = 0; + sendq = 9000000; +}; +# Recommended client classes: # Client classes. 10 = locals; 2 = for all .net and .com that are not # in Europe; 1 = for everybody. -Y:10:90:0:100:160000 -Y:2:90:0:5:80000 -Y:1:90:0:400:160000 +Class { + name = "Local"; + pingfreq = 1 minutes 30 seconds; + sendq = 160000; + maxlinks = 100; +}; +Client +{ + class = "Other"; + host = "*@*"; +}; +Class { + name = "America"; + pingfreq = 1 minutes 30 seconds; + sendq = 80000; + maxlinks = 5; +}; +Class { + name = "Other"; + pingfreq = 1 minutes 30 seconds; + sendq = 160000; + maxlinks = 400; +}; - -# [I:lines] +# [Client] # # To allow clients to connect, they need authorization. This can be # done based on hostmask, address mask, and/or with a password. # With intelligent use of classes and the maxconnections field in the -# Y: lines, you can let in a specific domain, but get rid of all other +# Client blocks, you can let in a specific domain, but get rid of all other # domains in the same toplevel, thus setting up some sort of "reverse -# K: line". -# I:<IP mask or crap to force resolving>:<opt passwd>:<hostmask>::<class> +# Kill block". +# Client { +# host = "user@host"; +# ip = "ip@host"; +# password = "password"; +# class = "classname"; +# }; # # Technical description (for examples, see below): # For every connecting client, the IP address is known. A reverse lookup # on this IP-number is done to get the (/all) hostname(s). # Each hostname that belongs to this IP-number is matched to <hostmask>, -# and the I: line is used when any matches; the client will then show +# and the Client {} is used when any matches; the client will then show # with this particular hostname. If none of the hostnames match, then # the IP-number is matched against the <IP mask ...> field, if this matches -# then the I: line is used nevertheless and the client will show with the +# then the Client{} is used nevertheless and the client will show with the # first (main) hostname if any; if the IP-number did not resolve then the # client will show with the dot notation of the IP-number. # There is a special case for the UNIX domain sockets and localhost connections @@ -123,82 +192,127 @@ # 002 Your host is 2.undernet.org[jolan.ppro], running version ... # Then the "jolan.ppro" is the name used for matching. # Therefore, unix domain sockets, and connections to localhost would -# match this I: line: -# I:jolan.ppro::foobar::1 -# Finally, I: lines with empty <IP mask ..> or <hostmask> fields are skipped. +# match this block: +# host = "*@jolan.ppro"; # # This is the "fallback" entry. All .uk, .nl, and all unresolved are # in these two lines. # By using two different lines, multiple connections from a single IP # are only allowed from hostnames which have both valid forward and # reverse DNS mappings. -I:*@*:1:Unresolved::1 -I:Resolved::*@*::1 +Client +{ + class = "Other"; + ip = "*@*"; +}; + +Client +{ + class = "Other"; + host = "*@*"; +}; # If you don't want unresolved dudes to be able to connect to your -# server, use just: -# I:NotMatchingCrap::*@*::1 +# server, do not specify any "ip = " settings. # # Here, take care of all American ISPs. -I:Resolved::*@*.com::2 -I:Resolved::*@*.net::2 - +Client +{ + host = "*@*.com"; + class = "America"; +}; + +Client +{ + host = "*@*.net"; + class = "America"; +}; # Now list all the .com / .net domains that you wish to have access... # actually it's less work to do it this way than to do it the other -# way around - K: lining every single ISP in the US. +# way around - K-lining every single ISP in the US. # I wish people in Holland just got a .nl domain, and not try to be # cool and use .com... -I:Resolved::*@*.wirehub.net::1 -I:Resolved::*@*.planete.net::1 -I:Resolved::*@*.ivg.com::1 -I:Resolved::*@*.ib.com::1 -I:Resolved::*@*.ibm.net::1 -I:Resolved::*@*.hydro.com::1 -I:Resolved::*@*.NL.net::1 +Client { host = "*@*.wirehub.net"; class = "Other";}; +Client { host = "*@*.planete.net"; class = "Other";}; +Client { host = "*@*.ivg.com"; class = "Other";}; +Client { host = "*@*.ib.com"; class = "Other";}; +Client { host = "*@*.ibm.net"; class = "Other";}; +Client { host = "*@*.hydro.com"; class = "Other";}; +Client { host = "*@*.nl.net"; class = "Local";}; # You can request a more complete listing, including the "list of standard -# K-lines" from the Routing Committee; it will also be sent to you if +# Kill blocks" from the Routing Committee; it will also be sent to you if # you apply for a server and get accepted. # # Ourselves - this makes sure that we can get in, no matter how full # the server is (hopefully). -I:*@193.37.*::*@*.london.ac.uk::10 +Client +{ + host = "*@*.london.ac.uk"; + ip = "*@193.37.*"; + class = "Local"; +}; -# You can put a digit (0..9) in the password field, which will make ircd +# You can put a digit (0..9) in the password value, which will make ircd # only accept a client when the total number of connections to the network # from the same IP number doesn't exceed this number. # The following example would accept at most one connection per IP number # from "*.swipnet.se" and at most two connections from dial up accounts # that have "dial??.*" as host mask: -# I:Resolved:1:*@*.swipnet.se::1 -# I:Resolved:2:*@dial??.*::1 +# Client { +# host = "*@*.swipnet.se"; +# password = "1"; +# class = "Other"; +# }; +# Client { +# host = "*@dial??.*"; +# password = "2"; +# class = "Other"; +# }; # # If you are not worried about who connects, this line will allow everyone # to connect. -I:*::*::1 +Client { + host = "*@*"; + ip = "*@*"; + class = "Other"; +}; -# [T:lines] +# [motd] # # It is possible to show a different Message of the Day to a connecting # client depending on its origin. -# T:<hostmask>:<path to motd file> -# or: -# T:<classnumber>:<path to motd file> +# motd { +# # Note: host can also be a classname. +# host = "Other"; +# file = "path/to/motd/file"; +# }; # # DPATH/net_com.motd contains a special MOTD where users are encouraged -# to register their domains and get their own I: lines if they're in +# to register their domains and get their own client{} lines if they're in # Europe, or move to US.UnderNet.org if they're in the USA. -T:*.net:net_com.motd -T:*.com:net_com.motd -T:2:net_com.motd +motd { + host = "*.net"; + file = "net_com.motd"; +}; +motd { + host = "*.com"; + file = "net_com.motd"; +}; +motd { + host = "America"; + file = "net_com.motd"; +}; # A different MOTD for ourselves, where we point out that the helpdesk # better not be bothered with questions regarding irc... -T:*.london.ac.uk:london.motd - +motd { + host = "*.london.ac.uk"; + file = "london.motd"; +}; -# [U:lines] +# [Server] # # One of the many nice features of Undernet is "Uworld", a program # connected to the net as a server. This allows it to broadcast any mode @@ -207,7 +321,17 @@ # There is only one slight problem: the TimeStamp protocol prevents this. # So there is a configuration option to allow them anyway from a certain # server. -# U:<Server Name>:<Juped Nicks>:* +# Server { +# # The servername or wildcard mask for it that this applies to. +# name = "relservername"; +# # The mask of servers they are allowed to introduce(for hub=yes;) or +# # not allowed to introduce(for leaf=yes). +# mask = "servermask"; +# # No is assumed for these unless you set it to yes. +# uworld = no; +# leaf = no; +# hub = yes; +# }; # # Note: (1) These lines are agreed on by every server admin on Undernet; # (2) These lines must be the same on every single server, or results @@ -218,58 +342,145 @@ # servers will try to undo the mode hacks that Uworld does. Make SURE that # all of the servers have the EXACT same Ulines. # -# As of ircu2.10.05 is it possible to Jupe nicks. Juped nicks need to be -# added to U: lines. As per CFV-0095, the following nicks must be juped, -# it is not allowed to jupe others as well. -U:Uworld.EU.undernet.org:EuWorld,E,StatServ,NoteServ:* -U:Uworld2.undernet.org:UWorld2,ChanSvr,ChanSaver,ChanServ:* -U:Uworld.undernet.org:Uworld,NickSvr,NickSaver,NickServ:* -U:channels.undernet.org:LPT1,X,login:* -U:channels2.undernet.org:LPT2,W,Undernet:* -U:channels3.undernet.org:COM1,V,protocol:* -U:channels4.undernet.org:COM2,U,pass:* -U:channels5.undernet.org:COM3,Y,AUX:* -U:channels6.undernet.org:COM4,Z,newpass:* - +# If your server starts on a bit larger network, you'll probably get +# assigned one or two uplinks to which your server can connect. +# If your uplink(s) also connect to other servers than yours (which is +# probable), you need to define your uplink as being allowed to "hub". +# To do this, set "hub = yes;" +# You can also force a server(even one that doesn't connect to you) +# to be a leaf with "leaf = yes;" + +Server { + name = "uworld.eu.undernet.org"; + mask = "*"; + uworld = yes; + hub = yes; +}; +Server { + name = "uworld2.undernet.org"; + mask = "*"; + uworld = yes; + hub = yes; +}; +Server { + name = "uworld.undernet.org"; + mask = "*"; + uworld = yes; + hub = yes; +}; +Server { + name = "channels.undernet.org"; + mask = "*"; + uworld = yes; + hub = yes; +}; +Server { + name = "channels2.undernet.org"; + mask = "*"; + uworld = yes; + hub = yes; +}; +Server { + name = "channels3.undernet.org"; + mask = "*"; + uworld = yes; + hub = yes; +}; +Server { + name = "channels4.undernet.org"; + mask = "*"; + uworld = yes; + hub = yes; +}; +Server { + name = "channels5.undernet.org"; + mask = "*"; + uworld = yes; + hub = yes; +}; +Server { + name = "channels6.undernet.org"; + mask = "*"; + uworld = yes; + hub = yes; +}; +Server { + name = "Amsterdam.NL.Eu.UnderNet.org"; + mask = "*"; + hub = yes; +}; +# An example just to make sure IRCnet doesn't get on undernet... +Server { + name = "*"; + mask = "eris.berkeley.edu"; + hub = yes; +}; + +# As of ircu2.10.05 is it possible to Jupe nicks. As per CFV-0095, the +# following nicks must be juped, it is not allowed to jupe others as well. +Jupe { + nick = "EuWorld,E,StatServ,NoteServ"; + nick = "UWorld2,ChanSvr,ChanSaver,ChanServ"; + nick = "Uworld,NickSvr,NickSaver,NickServ"; + nick = "LPT1,X,login,LPT2,W,Undernet,COM1,V,protocol,COM2"; + nick = "U,pass,COM3,Y,AUX,COM4,Z,newpass"; +}; -# [K:lines] +# [Kill] # # While running your server, you will most probably encounter individuals # or groups of persons that you do not wish to have access to your server. # -# For this purpose, the ircd understands "kill lines". -# K:<host/IP mask>:"<opt reason>":<username mask> +# For this purpose, the ircd understands "kill blocks". These are also +# known as K-lines, by virtue of the former config file format. +# Kill +# { +# host = "user@host"; +# reason = "The reason the user will see"; +# }; +# It is possible to ban on the basis of the real name. +# It is also possible to use a file as comment for the ban, using +# file = "file": +# Kill +# { +# realname = "realnametoban"; +# file = "path/to/file/with/reason/to/show"; +# }; # -# It is possible to use a file as comment for the ban. -# K:<host/IP mask>:!<path to file>:<usermask> # # The default reason is: "You are banned from this server" -# Note that K: lines are local to the server; if you ban a person or a +# Note that K-lines are local to the server; if you ban a person or a # whole domain from your server, they can get on IRC via any other server -# that doesn't have them K: lined (yet). +# that doesn't have them K-lined (yet). # # With a simple comment, using quotes: -K:*.au:"Please use a nearer server":* -K:*.edu:"Please use a nearer server":* +Kill { host = "*.au"; reason = "Please use a nearer server"; }; +Kill { host = "*.edu"; reason = "Please use a nearer server"; }; -# With a file, prepending a '!' before the filename. # The file can contain for example, a reason, a link to the # server rules and a contact address. -K:unixbox.flooder.co.uk:!kline/youflooded.txt:*luser - -# -# IP-based kill lines are designated with a lowercase 'k'. These lines -# use the same format as normal K: lines, except they apply to all hosts, -# even if an IP address has a properly resolving host name. -k:192.168.*:!klines/martians:* - -# Additionally, you may specify a hostmask prefixed with $R to indicate -# a match should be performed against the "real-name" / "info" field -# instead of the host/IP. -K:$R*sub7*:"You are infected with a Trojan":* +Kill +{ + host = "*lu...@un..."; + file = "kline/youflooded.txt"; +}; + +# IP-based kill lines apply to all hosts, even if an IP address has a +# properly resolving host name. +Kill +{ + host = "192.168.*"; + file = "klines/martians"; +}; + +# The realname field lets you ban by realname... +Kill +{ + host = "*sub7*"; + reason = "You are infected with a Trojan"; +}; - -# [C:lines] +# [Connect] # # You probably want your server connected to other servers, so your users # have other users to chat with. @@ -282,52 +493,62 @@ # server links is provided for ircd to decide what links to allow, what # to let humans do themselves, and what links to (forcefully) disallow. # -# The Connection lines (also known as C lines) +# The Connect blocks # define what servers the server connect to, and which servers are # allowed to connect. -# C:<remote hostname or IP>:<password>:<remote server name>:<port>:<class> +# Connect { +# name = "servername"; +# host = "hostnameORip"; +# password = "passwd"; +# port = portno; +# class = "classname"; +# }; # # The "port" field defines the default port the server tries to connect # to if an operator uses /connect without specifying a port. This is also # the port used when the server attempts to auto-connect to the remote -# server. (See Y:lines for more informationa about auto-connects). +# server. (See Class blocks for more informationa about auto-connects). # # Our primary uplink. -C:1.2.3.4:passwd:Amsterdam.NL.Eu.UnderNet.org:4400:90 - +Connect { + name = "Amsterdam.NL.Eu.UnderNet.org"; + host = "1.2.3.4"; + password = "passwd"; + port = 4400; + class = "Servers"; +}; -# [H:lines] -# -# If your server starts on a bit larger network, you'll probably get -# assigned one or two uplinks to which your server can connect. -# If your uplink(s) also connect to other servers than yours (which is -# probable), you need to define your uplink as being allowed to "hub". -# H:<allowed hostmask>::<server name>:<maximum hops that can be introduced> -H:*.*::Amsterdam.NL.Eu.UnderNet.org - - -# [L:lines] -# -# Of course, the opposite is also possible: forcing a server to be -# a leaf. L: lines follow Murphy's Law: if you use them, there's a big -# chance that routing will be screwed up afterwards. -# L:<opt disallowed hostmask>::<server mask>:<opt max depth> - - -# [D:lines] +# [crule] # # For an advanced, real-time rule-based routing decision making system -# you can use Disallow lines. For more information, see doc/readme.crules. -# D:<server mask that ircd will refuse to connect to>::<rule> -# d:<server mask that ircd will not autoconnect to>::<rule> -# D:*.US.UnderNet.org::connected(*.US.UnderNet.org) -# d:*.EU.UnderNet.org::connected(Amsterdam.NL.EU.*) -# -# The following line is recommended for leaf servers: -# d:*::directcon(*) +# you can use crule blocks. For more information, see doc/readme.crules. +# CRULE +# { +# server = "servermask"; +# rule = "connectrule"; +# # Setting all to yes makes the rule always apply. Otherwise it only +# # applies to autoconnects. +# all = yes; +# }; +CRULE +{ + server = "*.US.UnderNet.org"; + rule = "connected(*.US.UnderNet.org)"; +}; +CRULE +{ + server = "*.EU.UnderNet.org"; + rule = "connected(Amsterdam.NL.EU.*)"; +}; + +# The following block is recommended for leaf servers: +CRULE +{ + server = "*"; + rule = "directcon(*)"; +}; - -# [O:lines] +# [Operator] # # Inevitably, you have reached the part about "IRC Operators". Oper status # grants some special privileges to a user, like the power to make the @@ -344,28 +565,42 @@ # them from using Uworld as well. # Depending on some defines in include/config.h, local operators are also # not allowed to /DIE and /RESTART the server. -# Local operators are designated with a lowercase 'o' -# O:<host/IP mask>:<encrypted password>:<Nick>::<connection class> -# o:<host/IP mask>:<encrypted password>:<Nick>::<connection class> +# Operator { +# local = no; +# host = "host/IP mask"; +# name = "opername"; +# password = "encryptedpass"; +# class = "classname"; +# }; # # The encrypted password is optional. If you wish to encrypt your password, # there is a utility in the ircd. Please read the file tools/README. -O:*@*.cs.vu.nl:VRKLKuGKn0jLs:Niels::10 -o:*@*.uu.net:noncryptedpass:Braden::10 +Operator { + local = no; + host = "*@*.cs.vu.nl"; + password = "VRKLKuGKn0jLt"; + name = "Niels"; + class = "Local"; +}; +Operator { + local = yes; + host = "*@*.uu.net"; + password = "notencryptedpass"; + name = "Niels"; + class = "Local"; +}; # Note that the <connection class> is optional, but leaving it away -# puts the O: lines in class 0, which usually only accepts one connection -# at a time. If you want users to Oper up more then once per O: line, -# then use a connection class that allows more then one connection, -# for example (using class 10 as in the example above): +# puts the opers in class "default", which usually only accepts one +# connection at a time. If you want users to Oper up more then once per +# block, then use a connection class that allows more then one connection, +# for example (using class Local as in the example above): # # Once you OPER your connection class changes no matter where you are or -# your previous connection classes. If the defined connection class is 10 -# for the O:line, then your new connection class is 10. -# Y:10:90:0:100:160000 - +# your previous connection classes. If the defined connection class is +# Local for the operator block, then your new connection class is Local. -# [P:lines] +# [Port] # When your server gets more full, you will notice delays when trying to # connect to your server's primary listening port. It is possible via the # Port lines to specify additional ports for the ircd to listen to. @@ -373,12 +608,21 @@ # ports; # Undernet uses 4400 for server listener ports. # These are just hints, they are in no way official IANA or IETF policies. -# IANA says we should use port 194, but that requires us to run as root, so -# we don't do that. +# IANA says we should use port 194, but that requires us to run as root, +# so we don't do that. # -# P:<hostmask>:<interface>:<[CS][H]>:<port number> +# Port { +# port = number; +# mask = "ipmask"; +# # Use this to control the interface you bind to. +# vhost = "virtualhostip"; +# # Setting to yes makes this server only. +# server = yes; +# # Setting to yes makes the port "hidden" from stats. +# hidden = yes; +# }; # -# The hostmask setting allows you to specify a range of IP addresses that +# The mask setting allows you to specify a range of IP addresses that # you will allow connections from. This should only contain IP addresses # and '*' if used. This field only uses IP addresses. This does not use # DNS in any way so you can't use it to allow *.nl or *.uk. Attempting @@ -392,59 +636,41 @@ # If you want to use virtual hosting *YOU* *MUST* *USE* *THIS* otherwise it # WILL bind to all interfaces - not what most people seem to expect. # -# The [CS][H] field is an optional field to specify that a port is a -# server port or a client port and whether it's hidden or not. -# If used the first character MUST be either a C or S. -# If you want to hide a port from /stats p from non-opers follow the C -# or S with an H -# -# C = Client (Ports 6660-6669) -# S = Server (Port 4400) -# -# P:<hostmask>:<interface>:<[CS][H]>:<port number> -# -# This is a normal server port, you need to have at least one server -# port defined if you want to connect your server to other servers. -P:::S:4400 +Port { + server = yes; + port = 4400; +}; # This is a Server port that is Hidden -#P:::SH:4401 +Port { + server = yes; + hidden = yes; + port = 4401; +}; # The following are normal client ports -P:::C:6667 -P::::6668 -P:192.168.*:::6666 +Port { port = 6667; }; +Port { port = 6668; }; +Port { + mask = "192.168.*"; + port = 6666; +}; # This is a hidden client port, listening on the interface associated # with the IP address 168.8.21.107 -#P:*:168.8.21.107:CH:7000 +Port { + mask = "168.8.21.107"; + hidden = yes; + port = 7000; +}; - -# [Q:lines] -# -# This allows you (the admin) to disallow the usage of /OPMODE and -# /CLEARMODE on certain sensitive channels. Opers trying to do that -# will receive a short notice. Depending on the setting of -# OPER_FORCE_OPMODE, OPER_FORCE_LOPMODE and LOCOP_FORCE_LOPMODE, -# global/local opers may override these lines by prefixing the -# channel name with an exclamation mark ('!') -# -# Q:<channel>:<reason> -# -# Note that since the hash mark ('#') is used to start a comment, -# you will have to escape it in the channel name (see below). - -# Q:\#shells:"Thou shalt not support the h4><0rz" -# Q:&kiddies:"They can take care of themselves" - - -# [F:lines] -# +# [features] # IRC servers have a large number of options and features. Most of these # are set at compile time through the use of #define's--see "make config" # for more details--but we are working to move many of these into the -# configuration file. Feature lines are the hook we're using for this. -# F:<Option>:<Value> +# configuration file. Features let you configure these at runtime. +# You only need one feature block in which you use +# "featurename" = "value1" , "value2", ..., "valuen-1", "valuen"; # # The entire purpose of F:lines are so that you do not have to recompile # the IRCD everytime you want to change a feature. All of the features @@ -455,134 +681,87 @@ # found at doc/readme.log. The defaults used by the Undernet network are # below. # -# F:DOMAINNAME:<obtained from /etc/resolv.conf by ./configure> -# F:RELIABLE_CLOCK:FALSE -# F:BUFFERPOOL:27000000 -# F:HAS_FERGUSON_FLUSHER:FALSE -# F:CLIENT_FLOOD:1024 -# F:SERVER_PORT:4400 -# F:NODEFAULTMOTD:TRUE -# F:MOTD_BANNER -# F:KILL_IPMISMATCH:FALSE -# F:IDLE_FROM_MSG:TRUE -# F:HUB:FALSE -# F:WALLOPS_OPER_ONLY:FALSE -# F:NODNS:FALSE -# F:RANDOM_SEED:<you should set one explicitly> -# F:DEFAULT_LIST_PARAM -# F:NICKNAMEHISTORYLENGTH:800 -# F:HOST_HIDING:TRUE -# F:HIDDEN_HOST:users.undernet.org -# F:HIDDEN_IP:127.0.0.1 -# F:CONNEXIT_NOTICES:FALSE -# F:KILLCHASETIMELIMIT:30 -# F:MAXCHANNELSPERUSER:10 -# F:AVBANLEN:40 -# F:MAXBANS:45 -# F:MAXSILES:15 -# F:HANGONGOODLINK:300 -# F:HANGONRETRYDELAY:10 -# F:CONNECTTIMEOUT:90 -# F:TIMESEC:60 -# F:MAXIMUM_LINKS:1 -# F:PINGFREQUENCY:120 -# F:CONNECTFREQUENCY:600 -# F:DEFAULTMAXSENDQLENGTH:40000 -# F:GLINEMAXUSERCOUNT:20 -# F:MPATH:ircd.motd -# F:RPATH:remote.motd -# F:PPATH:ircd.pid -# F:VIRTUAL_HOST:FALSE -# F:TOS_SERVER:0x08 -# F:TOS_CLIENT:0x08 -# F:POLLS_PER_LOOP:200 -# F:CRYPT_OPER_PASSWORD:TRUE -# F:OPER_NO_CHAN_LIMIT:TRUE -# F:OPER_MODE_LCHAN:TRUE -# F:OPER_WALK_THROUGH_LMODES:FALSE -# F:NO_OPER_DEOP_LCHAN:FALSE -# F:SHOW_INVISIBLE_USERS:TRUE -# F:SHOW_ALL_INVISIBLE_USERS:TRUE -# F:UNLIMIT_OPER_QUERY:FALSE -# F:LOCAL_KILL_ONLY:FALSE -# F:CONFIG_OPERCMDS:FALSE -# F:OPER_KILL:TRUE -# F:OPER_REHASH:TRUE -# F:OPER_RESTART:TRUE -# F:OPER_DIE:TRUE -# F:OPER_GLINE:TRUE -# F:OPER_LGLINE:TRUE -# F:OPER_JUPE:TRUE -# F:OPER_LJUPE:TRUE -# F:OPER_OPMODE:TRUE -# F:OPER_LOPMODE:TRUE -# F:OPER_FORCE_OPMODE:TRUE -# F:OPER_FORCE_LOPMODE:TRUE -# F:OPER_BADCHAN:FALSE -# F:OPER_LBADCHAN:FALSE -# F:OPER_SET:FALSE -# F:OPERS_SEE_IN_SECRET_CHANNELS:TRUE -# F:OPER_WIDE_GLINE:TRUE -# F:LOCOP_KILL:TRUE -# F:LOCOP_REHASH:TRUE -# F:LOCOP_RESTART:FALSE -# F:LOCOP_DIE:FALSE -# F:LOCOP_LGLINE:TRUE -# F:LOCOP_LJUPE:TRUE -# F:LOCOP_LOPMODE:TRUE -# F:LOCOP_FORCE_LOPMODE:TRUE -# F:LOCOP_LBADCHAN:FALSE -# F:LOCOP_SET:FALSE -# F:LOCOP_SEE_IN_SECRET_CHANNELS:FALSE -# F:LOCOP_WIDE_GLINE:FALSE -# F:HIS_MAP:TRUE -# F:HIS_SNOTICES:TRUE -# F:HIS_SNOTICES_OPER_ONLY:TRUE -# F:HIS_DESYNCS:TRUE -# F:HIS_DEBUG_OPER_ONLY:TRUE -# F:HIS_WALLOPS:TRUE -# F:HIS_LINKS:TRUE -# F:HIS_TRACE:TRUE -# F:HIS_STATS_l:TRUE -# F:HIS_STATS_c:TRUE -# F:HIS_STATS_g:TRUE -# F:HIS_STATS_h:TRUE -# F:HIS_STATS_k:TRUE -# F:HIS_STATS_f:TRUE -# F:HIS_STATS_i:TRUE -# F:HIS_STATS_j:TRUE -# F:HIS_STATS_M:TRUE -# F:HIS_STATS_m:TRUE -# F:HIS_STATS_o:TRUE -# F:HIS_STATS_p:TRUE -# F:HIS_STATS_q:TRUE -# F:HIS_STATS_r:TRUE -# F:HIS_STATS_d:TRUE -# F:HIS_STATS_e:TRUE -# F:HIS_STATS_t:TRUE -# F:HIS_STATS_T:TRUE -# F:HIS_STATS_u:FALSE -# F:HIS_STATS_U:TRUE -# F:HIS_STATS_v:TRUE -# F:HIS_STATS_w:FALSE -# F:HIS_STATS_x:TRUE -# F:HIS_STATS_y:TRUE -# F:HIS_STATS_z:TRUE -# F:HIS_WHOIS_SERVERNAME:TRUE -# F:HIS_WHOIS_IDLETIME:TRUE -# F:HIS_WHO_SERVERNAME:TRUE -# F:HIS_WHO_HOPCOUNT:TRUE -# F:HIS_BANWHO:TRUE -# F:HIS_KILLWHO:TRUE -# F:HIS_REWRITE:TRUE -# F:HIS_REMOTE:1 -# F:HIS_NETSPLIT:TRUE -# F:HIS_SERVERNAME:"*.undernet.org" -# F:HIS_SERVERINFO:"The Undernet Underworld" -# F:HIS_URLSERVERS:"http://www.undernet.org/servers.php" -# F:NETWORK:"UnderNet" -# F:URL_CLIENTS:"ftp://ftp.undernet.org/pub/irc/clients" - +features +{ +# "DOMAINNAME"="<obtained from /etc/resolv.conf by ./configure>"; +# "RELIABLE_CLOCK"="FALSE"; +# "BUFFERPOOL"="27000000"; +# "HAS_FERGUSON_FLUSHER"="FALSE"; +# "CLIENT_FLOOD"="1024"; +# "SERVER_PORT"="4400"; +# "NODEFAULTMOTD"="TRUE"; +# "MOTD_BANNER"="TRUE"; +# "KILL_IPMISMATCH"="FALSE"; +# "IDLE_FROM_MSG"="TRUE"; +# "HUB"="FALSE"; +# "WALLOPS_OPER_ONLY"="FALSE"; +# "NODNS"="FALSE"; +# "RANDOM_SEED"="<you should set one explicitly>"; +# "DEFAULT_LIST_PARAM"="TRUE"; +# "NICKNAMEHISTORYLENGTH"="800"; +# "HOST_HIDING"="FALSE"; +# "HIDDEN_HOST"="users.undernet.org"; +# "HIDDEN_IP"="127.0.0.1"; +# "KILLCHASETIMELIMIT"="30"; +# "MAXCHANNELSPERUSER"="10"; +# "AVBANLEN"="40"; +# "MAXBANS"="30"; +# "MAXSILES"="15"; +# "HANGONGOODLINK="300"; +# "HANGONRETRYDELAY" = "10"; +# "CONNECTTIMEOUT" = "90"; +# "TIMESEC" = "60"; +# "MAXIMUM_LINKS" = "1"; +# "PINGFREQUENCY" = "120"; +# "CONNECTFREQUENCY" = "600"; +# "DEFAULTMAXSENDQLENGTH" = "40000"; +# "GLINEMAXUSERCOUNT" = "20"; +# "MPATH" = "ircd.motd"; +# "RPATH" = "remote.motd"; +# "PPATH" = "ircd.pid"; +# "VIRTUAL_HOST" = "FALSE"; +# "TOS_SERVER" = "0x08"; +# "TOS_CLIENT" = "0x08"; +# "POLLS_PER_LOOP" = "200"; +# "CRYPT_OPER_PASSWORD" = "TRUE"; +# "OPER_NO_CHAN_LIMIT" = "TRUE"; +# "OPER_MODE_LCHAN" = "TRUE"; +# "OPER_WALK_THROUGH_LMODES" = "FALSE"; +# "NO_OPER_DEOP_LCHAN" = "FALSE"; +# "SHOW_INVISIBLE_USERS" = "TRUE"; +# "SHOW_ALL_INVISIBLE_USERS" = "TRUE"; +# "UNLIMIT_OPER_QUERY" = "FALSE"; +# "LOCAL_KILL_ONLY" = "FALSE"; +# "CONFIG_OPERCMDS" = "FALSE"; +# "OPER_KILL" = "TRUE"; +# "OPER_REHASH" = "TRUE"; +# "OPER_RESTART" = "TRUE"; +# "OPER_DIE" = "TRUE"; +# "OPER_GLINE" = "TRUE"; +# "OPER_LGLINE" = "TRUE"; +# "OPER_JUPE" = "TRUE"; +# "OPER_LJUPE" = "TRUE"; +# "OPER_OPMODE" = "TRUE"; +# "OPER_LOPMODE" = "TRUE"; +# "OPER_BADCHAN" = "FALSE"; +# "OPER_LBADCHAN" = "FALSE"; +# "OPER_SET" = "FALSE"; +# "OPERS_SEE_IN_SECRET_CHANNELS" = "TRUE"; +# "OPER_WIDE_GLINE" = "TRUE"; +# "OPER_LIST_CHAN" = "TRUE"; +# "LOCOP_KILL" = "TRUE"; +# "LOCOP_REHASH" = "TRUE"; +# "LOCOP_RESTART" = "FALSE"; +# "LOCOP_DIE" = "FALSE"; +# "LOCOP_LGLINE" = "TRUE"; +# "LOCOP_LJUPE" = "TRUE"; +# "LOCOP_LOPMODE" = "TRUE"; +# "LOCOP_LBADCHAN" = "FALSE"; +# "LOCOP_SET" = "FALSE"; +# "LOCOP_SEE_IN_SECRET_CHANNELS" = "FALSE"; +# "LOCOP_WIDE_GLINE" = "FALSE"; +# "LOCOP_LIST_CHAN" = "FALSE"; +}; # Well, you have now reached the end of this sample configuration # file. If you have any questions, feel free to mail ----------------------- End of diff ----------------------- |
From: Toni G. <zo...@us...> - 2003-01-19 21:20:47
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-01-19 21:20:42 UTC Modified files: ChangeLog acconfig.h config.h.in include/class.h include/patchlevel.h include/s_conf.h ircd/.cvsignore ircd/Makefile.in ircd/class.c ircd/ircd.c ircd/m_trace.c ircd/motd.c ircd/s_conf.c ircd/s_err.c ircd/s_stats.c Added files: ircd/ircd_lexer.l ircd/ircd_parser.y Log message: 2003-01-19 Toni Garcia <zo...@ir...> 1.0.alpha16 * ircd/s_conf.c: Clase Alfanumerica y nuevo ircd.conf. * ircd/m_trace.c: Clase Alfanumerica. * ircd/ircd_lexer.l: Parseador lexico para el ircd.conf mediante LEX. * ircd/ircd_parser.y: Parseador del nuevo ircd.conf mediante YACC. * include/s_conf.h: Clase Alfanumerica. * {include|ircd}/class.h: La clase pasa de numerica a alfanumerica, o sea puedo poner Clase "Oper" por ejemplo. ---------------------- diff included ---------------------- Index: ircdh/ChangeLog diff -u ircdh/ChangeLog:1.10 ircdh/ChangeLog:1.11 --- ircdh/ChangeLog:1.10 Sun Jan 19 11:37:57 2003 +++ ircdh/ChangeLog Sun Jan 19 13:20:25 2003 @@ -1,3 +1,18 @@ +2003-01-19 Toni Garcia <zo...@ir...> 1.0.alpha16 + * ircd/s_conf.c: Clase Alfanumerica y nuevo ircd.conf. + + * ircd/m_trace.c: Clase Alfanumerica. + + * ircd/ircd_lexer.l: Parseador lexico para el ircd.conf mediante LEX. + + * ircd/ircd_parser.y: Parseador del nuevo ircd.conf mediante YACC. + + * include/s_conf.h: Clase Alfanumerica. + + * {include|ircd}/class.h: La clase pasa de numerica a alfanumerica, o sea + puedo poner Clase "Oper" por ejemplo. + + 2003-01-19 Toni Garcia <zo...@ir...> 1.0.alpha15 * Make Depend. Index: ircdh/acconfig.h diff -u ircdh/acconfig.h:1.1 ircdh/acconfig.h:1.2 --- ircdh/acconfig.h:1.1 Sat Jan 18 11:09:00 2003 +++ ircdh/acconfig.h Sun Jan 19 13:20:25 2003 @@ -1,7 +1,7 @@ #ifndef INCLUDED_config_h #define INCLUDED_config_h /* - * IRC - Internet Relay Chat, include/config.h + * IRC - Internet Relay Chat, acconfig.h * Copyright (C) 2000 Kevin L. Mitchell <kl...@mi...> * * This program is free software; you can redistribute it and/or modify @@ -18,7 +18,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: acconfig.h,v 1.1 2003/01/18 19:09:00 zolty Exp $ + * $Id: acconfig.h,v 1.2 2003/01/19 21:20:25 zolty Exp $ */ @TOP@ Index: ircdh/config.h.in diff -u ircdh/config.h.in:1.1 ircdh/config.h.in:1.2 --- ircdh/config.h.in:1.1 Sat Jan 18 11:09:00 2003 +++ ircdh/config.h.in Sun Jan 19 13:20:25 2003 @@ -2,7 +2,7 @@ #ifndef INCLUDED_config_h #define INCLUDED_config_h /* - * IRC - Internet Relay Chat, include/config.h + * IRC - Internet Relay Chat, acconfig.h * Copyright (C) 2000 Kevin L. Mitchell <kl...@mi...> * * This program is free software; you can redistribute it and/or modify @@ -19,7 +19,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: config.h.in,v 1.1 2003/01/18 19:09:00 zolty Exp $ + * $Id: config.h.in,v 1.2 2003/01/19 21:20:25 zolty Exp $ */ /* Define to `int' if <sys/types.h> doesn't define. */ Index: ircdh/include/class.h diff -u ircdh/include/class.h:1.4 ircdh/include/class.h:1.5 --- ircdh/include/class.h:1.4 Sat Jan 18 11:09:02 2003 +++ ircdh/include/class.h Sun Jan 19 13:20:26 2003 @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: class.h,v 1.4 2003/01/18 19:09:02 zolty Exp $ + * $Id: class.h,v 1.5 2003/01/19 21:20:26 zolty Exp $ */ #ifndef INCLUDED_class_h #define INCLUDED_class_h @@ -35,7 +35,7 @@ */ struct ConnectionClass { struct ConnectionClass *next; - int cc_class; + char *cc_name; unsigned int max_sendq; short ping_freq; short conn_freq; @@ -48,14 +48,14 @@ * Macro's */ -#define ConClass(x) ((x)->cc_class) +#define ConClass(x) ((x)->cc_name) #define PingFreq(x) ((x)->ping_freq) #define ConFreq(x) ((x)->conn_freq) #define MaxLinks(x) ((x)->max_links) #define MaxSendq(x) ((x)->max_sendq) #define Links(x) ((x)->ref_count) -#define ConfClass(x) ((x)->conn_class->cc_class) +#define ConfClass(x) ((x)->conn_class->cc_name) #define ConfPingFreq(x) ((x)->conn_class->ping_freq) #define ConfConFreq(x) ((x)->conn_class->conn_freq) #define ConfMaxLinks(x) ((x)->conn_class->max_links) @@ -72,14 +72,14 @@ extern void class_mark_delete(void); extern void class_delete_marked(void); -extern struct ConnectionClass *find_class(unsigned int cclass); +extern struct ConnectionClass *find_class(const char *name); extern struct ConnectionClass *make_class(void); extern void free_class(struct ConnectionClass *tmp); extern unsigned int get_con_freq(struct ConnectionClass *clptr); -extern unsigned int get_conf_class(const struct ConfItem *aconf); +extern char *get_conf_class(const struct ConfItem *aconf); extern int get_conf_ping(const struct ConfItem *aconf); -extern unsigned int get_client_class(struct Client *acptr); -extern void add_class(unsigned int conclass, unsigned int ping, +extern char *get_client_class(struct Client *acptr); +extern void add_class(char *name, unsigned int ping, unsigned int confreq, unsigned int maxli, unsigned int sendq); extern void check_class(void); extern void report_classes(struct Client *sptr, struct StatDesc *sd, int stat, Index: ircdh/include/patchlevel.h diff -u ircdh/include/patchlevel.h:1.10 ircdh/include/patchlevel.h:1.11 --- ircdh/include/patchlevel.h:1.10 Sun Jan 19 11:37:57 2003 +++ ircdh/include/patchlevel.h Sun Jan 19 13:20:26 2003 @@ -15,10 +15,10 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: patchlevel.h,v 1.10 2003/01/19 19:37:57 zolty Exp $ + * $Id: patchlevel.h,v 1.11 2003/01/19 21:20:26 zolty Exp $ * */ -#define PATCHLEVEL ".alpha15" +#define PATCHLEVEL ".alpha16" #define RELEASE "1.0" Index: ircdh/include/s_conf.h diff -u ircdh/include/s_conf.h:1.7 ircdh/include/s_conf.h:1.8 --- ircdh/include/s_conf.h:1.7 Sun Jan 19 11:37:58 2003 +++ ircdh/include/s_conf.h Sun Jan 19 13:20:26 2003 @@ -1,7 +1,7 @@ /* * s_conf.h * - * $Id: s_conf.h,v 1.7 2003/01/19 19:37:58 zolty Exp $ + * $Id: s_conf.h,v 1.8 2003/01/19 21:20:26 zolty Exp $ */ #ifndef INCLUDED_s_conf_h #define INCLUDED_s_conf_h @@ -17,6 +17,7 @@ #include <netinet/in.h> /* struct in_addr */ #define INCLUDED_netinet_in_h #endif +#include "client.h" struct Client; struct SLink; @@ -67,6 +68,9 @@ int dns_pending; /* a dns request is pending */ unsigned short port; char bits; /* Number of bits for ipkills */ + struct Privs privs; /* Priviledges for opers. */ + /* Used to detect if a privilege has been touched. */ + struct Privs privs_dirty; }; struct ServerConf { @@ -204,6 +208,9 @@ extern int find_restrict(struct Client *cptr); extern struct MotdItem *read_motd(const char *motdfile); extern char *find_quarantine(const char *chname); +extern void lookup_confhost(struct ConfItem *aconf); + +extern void yyerror(const char *msg); /* MIRAR */ #ifdef ESNET_NEG Index: ircdh/ircd/.cvsignore diff -u ircdh/ircd/.cvsignore:1.2 ircdh/ircd/.cvsignore:1.3 --- ircdh/ircd/.cvsignore:1.2 Thu Oct 24 02:57:52 2002 +++ ircdh/ircd/.cvsignore Sun Jan 19 13:20:28 2003 @@ -5,3 +5,7 @@ chkconf table_gen chattr.tab.c +lex.yy.c +y.tab.c +y.tab.h + Index: ircdh/ircd/Makefile.in diff -u ircdh/ircd/Makefile.in:1.12 ircdh/ircd/Makefile.in:1.13 --- ircdh/ircd/Makefile.in:1.12 Sun Jan 19 11:37:58 2003 +++ ircdh/ircd/Makefile.in Sun Jan 19 13:20:28 2003 @@ -38,6 +38,8 @@ CHGRP = chgrp MKDIR = mkdir TOUCH = touch +LEX = flex +YACC = bison -y GREP = grep OSDEP_C = @OSDEP_C@ ENGINE_C = @ENGINE_C@ @@ -100,6 +102,7 @@ ircd_tea.c \ ircd_xopen.c \ jupe.c \ + lex.yy.c \ list.c \ listener.c \ m_account.c \ @@ -210,15 +213,15 @@ userload.c \ watch.c \ whocmds.c \ - whowas.c + whowas.c \ + y.tab.c -CHKCONF_SRC = chkconf.c SRC = ${IRCD_SRC} ${OSDEP_C} ${ENGINE_C} OBJS = ${SRC:%.c=%.o} -DEP_SRC = ${IRCD_SRC} ${OSDEP_SRC} ${ENGINE_SRC} ${CHKCONF_SRC} +DEP_SRC = ${IRCD_SRC} ${OSDEP_SRC} ${ENGINE_SRC} all: ( cd ..; make -f Makefile ) @@ -228,7 +231,7 @@ .c.o: ${CC} ${CFLAGS} ${CPPFLAGS} -c $< -o $@ -build: ircd chkconf +build: ircd ircd: ${OBJS} ../include/patchlevel.h version.o ${PURIFY} ${CC} ${LDFLAGS} ${OBJS} version.o ${RINGLOG_O} ${LDFLAGS} ${LIBS} \ @@ -257,6 +260,12 @@ chattr.tab.c: table_gen ./table_gen > chattr.tab.c +lex.yy.c: ircd_lexer.l y.tab.h + ${LEX} ${srcdir}/ircd_lexer.l + +y.tab.c y.tab.h: ircd_parser.y + ${YACC} -d ${srcdir}/ircd_parser.y + chkcrule.o: crule.c ${CC} ${CFLAGS} ${CPPFLAGS} -DCR_CHKCONF -o chkcrule.o -c \ ${srcdir}/crule.c @@ -361,7 +370,7 @@ @echo "Please remove the contents of ${DPATH} manually" clean: - ${RM} -f *.o *.bak ircd version.c chkconf ircd_osdep.c chattr.tab.c table_gen + ${RM} -f *.o *.bak ircd version.c chkconf ircd_osdep.c chattr.tab.c table_gen y.tab.* lex.yy.* distclean: clean ${RM} -f Makefile stamp-m @@ -423,7 +432,8 @@ ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ ../include/struct.h ../include/ircd_alloc.h ../include/ircd_features.h \ - ../include/ircd_reply.h ../include/list.h ../include/numeric.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/list.h ../include/numeric.h \ ../include/s_conf.h ../include/s_debug.h ../include/send.h client.o: client.c ../config.h ../include/client.h ../include/ircd_defs.h \ ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ @@ -517,7 +527,8 @@ ../include/s_debug.h ../include/send.h ircd_signal.o: ircd_signal.c ../config.h ../include/ircd.h \ ../include/struct.h ../include/ircd_defs.h ../include/ircd_events.h \ - ../include/ircd_signal.h ../include/s_conf.h + ../include/ircd_signal.h ../include/s_conf.h ../include/client.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_handler.h ircd_snprintf.o: ircd_snprintf.c ../config.h ../include/client.h \ ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ ../include/ircd_events.h ../include/ircd_handler.h ../include/channel.h \ @@ -537,6 +548,8 @@ ../include/numeric.h ../include/numnicks.h ../include/s_bsd.h \ ../include/s_misc.h ../include/send.h ../include/support.h \ ../include/sys.h +lex.yy.o: lex.yy.c ../include/ircd.h ../include/struct.h \ + ../include/ircd_defs.h y.tab.h list.o: list.c ../config.h ../include/class.h ../include/client.h \ ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ ../include/ircd_events.h ../include/ircd_handler.h \ @@ -1226,10 +1239,10 @@ ../include/s_debug.h ../include/s_misc.h ../include/s_user.h \ ../include/send.h ../include/support.h ../include/sys.h \ ../include/uping.h ../include/version.h -s_conf.o: s_conf.c ../config.h ../include/s_conf.h ../include/IPcheck.h \ - ../include/class.h ../include/client.h ../include/ircd_defs.h \ - ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ - ../include/ircd_handler.h ../include/crule.h ../include/ircd_features.h \ +s_conf.o: s_conf.c ../config.h ../include/s_conf.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/IPcheck.h \ + ../include/class.h ../include/crule.h ../include/ircd_features.h \ ../include/fileio.h ../include/gline.h ../include/hash.h \ ../include/ircd.h ../include/struct.h ../include/ircd_alloc.h \ ../include/ircd_chattr.h ../include/ircd_log.h ../include/ircd_reply.h \ @@ -1367,6 +1380,19 @@ ../include/numeric.h ../include/s_debug.h ../include/s_misc.h \ ../include/s_user.h ../include/send.h ../include/support.h \ ../include/sys.h ../include/msg.h +y.tab.o: y.tab.c ../config.h ../include/s_conf.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/class.h \ + ../include/crule.h ../include/ircd_features.h ../include/fileio.h \ + ../include/gline.h ../include/hash.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_alloc.h ../include/ircd_chattr.h \ + ../include/ircd_log.h ../include/ircd_reply.h \ + ../include/ircd_snprintf.h ../include/ircd_string.h ../include/list.h \ + ../include/listener.h ../include/match.h ../include/motd.h \ + ../include/numeric.h ../include/numnicks.h ../include/opercmds.h \ + ../include/parse.h ../include/res.h ../include/s_bsd.h \ + ../include/s_debug.h ../include/s_misc.h ../include/send.h \ + ../include/support.h ../include/sys.h os_bsd.o: os_bsd.c ../config.h ../include/ircd_osdep.h ../include/msgq.h \ ../include/ircd_defs.h os_linux.o: os_linux.c ../config.h ../include/ircd_osdep.h \ @@ -1391,9 +1417,3 @@ engine_select.o: engine_select.c ../config.h ../include/ircd_events.h \ ../include/ircd.h ../include/struct.h ../include/ircd_defs.h \ ../include/ircd_log.h ../include/s_debug.h -chkconf.o: chkconf.c ../config.h ../include/s_conf.h ../include/client.h \ - ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ - ../include/ircd_events.h ../include/ircd_handler.h ../include/class.h \ - ../include/fileio.h ../include/ircd.h ../include/struct.h \ - ../include/ircd_alloc.h ../include/ircd_chattr.h \ - ../include/ircd_string.h ../include/sys.h Index: ircdh/ircd/class.c diff -u ircdh/ircd/class.c:1.4 ircdh/ircd/class.c:1.5 --- ircdh/ircd/class.c:1.4 Sun Jan 19 11:37:58 2003 +++ ircdh/ircd/class.c Sun Jan 19 13:20:29 2003 @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: class.c,v 1.4 2003/01/19 19:37:58 zolty Exp $ + * $Id: class.c,v 1.5 2003/01/19 21:20:29 zolty Exp $ */ #include "config.h" @@ -26,6 +26,7 @@ #include "ircd_alloc.h" #include "ircd_features.h" #include "ircd_reply.h" +#include "ircd_string.h" #include "list.h" #include "numeric.h" #include "s_conf.h" @@ -52,8 +53,8 @@ struct ConnectionClass *tmp; tmp = (struct ConnectionClass *)MyMalloc(sizeof(struct ConnectionClass)); + tmp->ref_count = 1; assert(0 != tmp); - tmp->ref_count = 0; ++connClassAllocCount; return tmp; } @@ -63,6 +64,8 @@ if (p) { assert(0 == p->valid); + if (p->cc_name) + MyFree(p->cc_name); MyFree(p); --connClassAllocCount; } @@ -76,7 +79,8 @@ if (!connClassList) connClassList = (struct ConnectionClass *)make_class(); - ConClass(connClassList) = 0; + /* We had better not try and free this... */ + ConClass(connClassList) = "default"; PingFreq(connClassList) = feature_int(FEAT_PINGFREQUENCY); ConFreq(connClassList) = feature_int(FEAT_CONNECTFREQUENCY); MaxLinks(connClassList) = feature_int(FEAT_MAXIMUM_LINKS); @@ -116,7 +120,7 @@ for (prev = cl = connClassList; cl; cl = prev->next) { - Debug((DEBUG_DEBUG, "Class %d : CF: %d PF: %d ML: %d LI: %d SQ: %d", + Debug((DEBUG_DEBUG, "Class %s : CF: %d PF: %d ML: %d LI: %d SQ: %d", ConClass(cl), ConFreq(cl), PingFreq(cl), MaxLinks(cl), Links(cl), MaxSendq(cl))); /* @@ -127,20 +131,20 @@ else { prev->next = cl->next; - if (0 == cl->ref_count) + if (0 == --cl->ref_count) free_class(cl); } } } -unsigned int get_conf_class(const struct ConfItem *aconf) +char *get_conf_class(const struct ConfItem *aconf) { if ((aconf) && (aconf->conn_class)) return (ConfClass(aconf)); Debug((DEBUG_DEBUG, "No Class For %s", (aconf) ? aconf->name : "*No Conf*")); - return (BAD_CONF_CLASS); + return NULL; } int get_conf_ping(const struct ConfItem *aconf) @@ -154,29 +158,25 @@ return -1; } -unsigned int get_client_class(struct Client *acptr) +char *get_client_class(struct Client *acptr) { struct SLink *tmp; struct ConnectionClass *cl; - unsigned int retc = BAD_CLIENT_CLASS; + /* Return the most recent(first on LL) client class... */ if (acptr && !IsMe(acptr) && (cli_confs(acptr))) for (tmp = cli_confs(acptr); tmp; tmp = tmp->next) { #if 1 - if (!tmp->value.aconf || !(cl = tmp->value.aconf->conn_class)) + if (tmp->value.aconf && (cl = tmp->value.aconf->conn_class)) #else /* PArche /OPER */ if (!tmp->value.aconf || !(cl = tmp->value.aconf->conn_class) || !(tmp->value.aconf->status & (CONF_CLIENT | CONF_SERVER))) #endif - continue; - if (ConClass(cl) > retc || retc == BAD_CLIENT_CLASS) - retc = ConClass(cl); + return ConClass(cl); } - Debug((DEBUG_DEBUG, "Returning Class %d For %s", retc, cli_name(acptr))); - - return (retc); + return "(null->class)"; } unsigned int get_con_freq(struct ConnectionClass *clptr) @@ -194,24 +194,28 @@ * if no present entry is found, then create a new one and add it in * immeadiately after the first one (class 0). */ -void add_class(unsigned int conClass, unsigned int ping, unsigned int confreq, +void add_class(char *name, unsigned int ping, unsigned int confreq, unsigned int maxli, unsigned int sendq) { struct ConnectionClass *t; struct ConnectionClass *p; - t = find_class(conClass); - if ((t == connClassList) && (conClass != 0)) + t = find_class(name); + if ((t == connClassList) && (name != NULL)) { p = (struct ConnectionClass *)make_class(); p->next = t->next; t->next = p; } else + { + if (ConClass(t) != NULL) + MyFree(ConClass(t)); p = t; - Debug((DEBUG_DEBUG, "Add Class %u: cf: %u pf: %u ml: %u sq: %d", - conClass, confreq, ping, maxli, sendq)); - ConClass(p) = conClass; + } + Debug((DEBUG_DEBUG, "Add Class %s: cf: %u pf: %u ml: %u sq: %d", + name, confreq, ping, maxli, sendq)); + ConClass(p) = name; ConFreq(p) = confreq; PingFreq(p) = ping; MaxLinks(p) = maxli; @@ -221,13 +225,13 @@ Links(p) = 0; } -struct ConnectionClass *find_class(unsigned int cclass) +struct ConnectionClass *find_class(const char *name) { struct ConnectionClass *cltmp; for (cltmp = connClassList; cltmp; cltmp = cltmp->next) { - if (ConClass(cltmp) == cclass) + if (!ircd_strcmp(ConClass(cltmp), name)) return cltmp; } return connClassList; @@ -265,7 +269,7 @@ !(tmp->value.aconf->status & (CONF_CLIENT | CONF_SERVER))) #endif continue; - if (ConClass(cl) != BAD_CLIENT_CLASS) + if (ConClass(cl) != NULL) { cli_max_sendq(cptr) = MaxSendq(cl); return cli_max_sendq(cptr); Index: ircdh/ircd/ircd.c diff -u ircdh/ircd/ircd.c:1.9 ircdh/ircd/ircd.c:1.10 --- ircdh/ircd/ircd.c:1.9 Sat Jan 18 14:54:31 2003 +++ ircdh/ircd/ircd.c Sun Jan 19 13:20:29 2003 @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: ircd.c,v 1.9 2003/01/18 22:54:31 zolty Exp $ + * $Id: ircd.c,v 1.10 2003/01/19 21:20:29 zolty Exp $ */ #include "config.h" @@ -248,7 +248,7 @@ struct ConnectionClass *cltmp; struct ConfItem *con_conf = 0; struct Jupe *ajupe; - unsigned int con_class = 0; + char *con_class = NULL; assert(ET_EXPIRE == ev_type(ev)); assert(0 != ev_timer(ev)); Index: ircdh/ircd/ircd_lexer.l diff -u /dev/null ircdh/ircd/ircd_lexer.l:1.1 --- /dev/null Sun Jan 19 13:20:46 2003 +++ ircdh/ircd/ircd_lexer.l Sun Jan 19 13:20:30 2003 @@ -0,0 +1,153 @@ +/* + * ircd_parser.y: A yacc/bison parser for ircd config files. + * This is part of ircu, an Internet Relay Chat server. + * The contents of this file are Copyright(C) 2001 by Andrew Miller, the + * ircd-hybrid team and the ircu team. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + * $Id: ircd_lexer.l,v 1.1 2003/01/19 21:20:30 zolty Exp $ + */ + +%{ +#include <unistd.h> +#include <stdio.h> +#include "ircd.h" +#include "y.tab.h" + +extern int lineno; + +void +init_lexer(void) +{ + yyin = fopen(configfile, "r"); + if (yyin == NULL) + yy_fatal_error("Could not open the configuration file."); + YY_NEW_FILE; + lineno = 1; +} + +%} +%option noyywrap +%option case-insensitive +%option nounput + + +WHITE [ \t\r]+ +SHCOMMENT #[^\n]* +NUMBER [0-9]+ +QSTRING \"[^"\n]+[\"\n] +%% + +{QSTRING} {yytext[yyleng-1] = 0; yylval.text = yytext+1; return QSTRING;} +{NUMBER} {yylval.num = strtoul(yytext, NULL, 10); return NUMBER;} +{WHITE} ; +{SHCOMMENT} ; + +admin return ADMIN; +administrator return ADMIN; +general return GENERAL; +location return LOCATION; +contact return CONTACT; +connect return CONNECT; +class return CLASS; +pingfreq return PINGFREQ; +connectfreq return CONNECTFREQ; +maxlinks return MAXLINKS; +sendq return SENDQ; +name return NAME; +host return HOST; +password return PASS; +pass return PASS; +seconds return SECONDS; +minutes return MINUTES; +hours return HOURS; +days return DAYS; +weeks return WEEKS; +months return MONTHS; +years return YEARS; +decades return DECADES; +bytes return BYTES; +b return BYTES; +kbytes return KBYTES; +kilobytes return KBYTES; +kb return KBYTES; +mbytes return MBYTES; +megabytes return MBYTES; +mb return MBYTES; +gbytes return GBYTES; +gigabytes return GBYTES; +gb return GBYTES; +tbytes return TBYTES; +terabytes return TBYTES; +tb return TBYTES; +port return PORT; +server return SERVER; +yes return YES; +no return NO; +hub return HUB; +leaf return LEAF; +uworld return UWORLD; +operator return OPER; +oper return OPER; +local return LOCAL; +vhost return VHOST; +mask return MASK; +hidden return HIDDEN; +motd return MOTD; +numeric return NUMERIC; +nick return NICK; +jupe return JUPE; +description return DESCRIPTION; +client return CLIENT; +real return REAL; +realname return REAL; +reason return REASON; +file return TFILE; +rule return RULE; +all return ALL; +ip return IP; +crule return CRULE; +kill return KILL; +quarantine return QUARANTINE; +features return FEATURES; +channel return CHANNEL; +bypass_local_channel_limits return TPRIV_CHAN_LIMIT; +set_local_channel_modes return TPRIV_MODE_LCHAN; +protected_local_channel return TPRIV_DEOP_LCHAN; +bypass_join_local_channels return TPRIV_WALK_LCHAN; +global_kill return TPRIV_KILL; +local_kill return TPRIV_LOCAL_KILL; +rehash return TPRIV_REHASH; +restart return TPRIV_RESTART; +die return TPRIV_DIE; +gline return TPRIV_GLINE; +local_gline return TPRIV_LOCAL_GLINE; +jupe_server return TPRIV_JUPE; +local_jupe_server return TPRIV_LOCAL_JUPE; +hack_channel_modes return TPRIV_OPMODE; +change_settings return TPRIV_SET; +extended_who_information return TPRIV_WHOX; +gline_channels return TPRIV_BADCHAN; +local_gline_channels return TPRIV_LOCAL_BADCHAN; +see_private_channels return TPRIV_SEE_CHAN; +see_invisible_users return TPRIV_SHOW_INVIS; +list_all_invisible_users return TPRIV_SHOW_ALL_INVIS; +globally_opered return TPRIV_PROPAGATE; +unlimited_who_queries return TPRIV_UNLIMIT_QUERY; +oper_status_display return TPRIV_DISPLAY; +see_other_opers return TPRIV_SEE_OPERS; +wide_glines return TPRIV_WIDE_GLINE; +\n lineno++; +. return yytext[0]; Index: ircdh/ircd/ircd_parser.y diff -u /dev/null ircdh/ircd/ircd_parser.y:1.1 --- /dev/null Sun Jan 19 13:20:46 2003 +++ ircdh/ircd/ircd_parser.y Sun Jan 19 13:20:30 2003 @@ -0,0 +1,907 @@ +/* + * ircd_parser.y: A yacc/bison parser for ircd config files. + * This is part of ircu, an Internet Relay Chat server. + * The contents of this file are Copyright(C) 2001 by Andrew Miller, the + * ircd-hybrid team and the ircu team. + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + * $Id: ircd_parser.y,v 1.1 2003/01/19 21:20:30 zolty Exp $ + */ +%{ + +#include "config.h" +#include "s_conf.h" +#include "class.h" +#include "client.h" +#include "crule.h" +#include "ircd_features.h" +#include "fileio.h" +#include "gline.h" +#include "hash.h" +#include "ircd.h" +#include "ircd_alloc.h" +#include "ircd_chattr.h" +#include "ircd_log.h" +#include "ircd_reply.h" +#include "ircd_snprintf.h" +#include "ircd_string.h" +#include "list.h" +#include "listener.h" +#include "match.h" +#include "motd.h" +#include "numeric.h" +#include "numnicks.h" +#include "opercmds.h" +#include "parse.h" +#include "res.h" +#include "s_bsd.h" +#include "s_conf.h" +#include "s_debug.h" +#include "s_misc.h" +#include "send.h" +#include "struct.h" +#include "support.h" +#include "sys.h" +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <arpa/inet.h> +#define MAX_STRINGS 80 /* Maximum number of feature params. */ + extern struct LocalConf localConf; + extern struct DenyConf* denyConfList; + extern struct CRuleConf* cruleConfList; + extern struct ServerConf* serverConfList; + extern struct qline *GlobalQuarantineList; + + + int yylex(void); + /* Now all the globals we need :/... */ + int tping, tconn, maxlinks, sendq, port; + int stringno; + char *name, *pass, *host; + char *stringlist[MAX_STRINGS]; + struct ConnectionClass *c_class; + struct ConfItem *aconf; + struct DenyConf *dconf; + struct ServerConf *sconf; + struct qline *qconf = NULL; +%} + +%token <text> QSTRING +%token <num> NUMBER +%token <text> FNAME + +%token GENERAL +%token ADMIN +%token LOCATION +%token CONTACT +%token CONNECT +%token CLASS +%token CHANNEL +%token PINGFREQ +%token CONNECTFREQ +%token MAXLINKS +%token SENDQ +%token NAME +%token HOST +%token PASS +%token LOCAL +%token SECONDS +%token MINUTES +%token HOURS +%token DAYS +%token WEEKS +%token MONTHS +%token YEARS +%token DECADES +%token BYTES +%token KBYTES +%token MBYTES +%token GBYTES +%token TBYTES +%token SERVER +%token PORT +%token MASK +%token HUB +%token LEAF +%token UWORLD +%token YES +%token NO +%token OPER +%token PORT +%token VHOST +%token MASK +%token HIDDEN +%token MOTD +%token JUPE +%token NICK +%token NUMERIC +%token DESCRIPTION +%token CLIENT +%token KILL +%token CRULE +%token REAL +%token REASON +%token TFILE +%token RULE +%token ALL +%token IP +%token FEATURES +%token QUARANTINE +/* and now a lot of priviledges... */ +%token TPRIV_CHAN_LIMIT, TPRIV_MODE_LCHAN, TPRIV_DEOP_LCHAN, TPRIV_WALK_LCHAN +%token TPRIV_KILL, TPRIV_LOCAL_KILL, TPRIV_REHASH, TPRIV_RESTART, TPRIV_DIE +%token TPRIV_GLINE, TPRIV_LOCAL_GLINE, TPRIV_JUPE, TPRIV_LOCAL_JUPE +%token TPRIV_LOCAL_OPMODE, TPRIV_OPMODE, TPRIV_SET, TPRIV_WHOX, TPRIV_BADCHAN +%token TPRIV_LOCAL_BADCHAN +%token TPRIV_SEE_CHAN, TPRIV_SHOW_INVIS, TPRIV_SHOW_ALL_INVIS, TPRIV_PROPAGATE +%token TPRIV_UNLIMIT_QUERY, TPRIV_DISPLAY, TPRIV_SEE_OPERS, TPRIV_WIDE_GLINE +/* and some types... */ +%type <num> sizespec +%type <num> timespec, timefactor, factoredtimes, factoredtime +%type <num> expr, yesorno, privtype +%left '+' '-' +%left '*' '/' + +%union{ + char *text; + int num; +} + +%% +/* Blocks in the config file... */ +blocks: blocks block | block; +block: adminblock | generalblock | classblock | connectblock | + serverblock | operblock | portblock | jupeblock | clientblock | + killblock | cruleblock | motdblock | featuresblock | quarantineblock; + +/* The timespec, sizespec and expr was ripped straight from + * ircd-hybrid-7. */ +timespec: expr | factoredtimes; + +factoredtimes: factoredtimes factoredtime +{ + $$ = $1 + $2; +} | factoredtime; + +factoredtime: expr timefactor +{ + $$ = $1 * $2; +}; + +timefactor: SECONDS { $$ = 1; } +| MINUTES { $$ = 60; } +| HOURS { $$ = 60 * 60; } +| DAYS { $$ = 60 * 60 * 24; } +| WEEKS { $$ = 60 * 60 * 24 * 7; } +| MONTHS { $$ = 60 * 60 * 24 * 7 * 4; } +| YEARS { $$ = 60 * 60 * 24 * 365; } +| DECADES { $$ = 60 * 60 * 24 * 365 * 10; }; + + +sizespec: expr + = { + $$ = $1; + } + | expr BYTES + = { + $$ = $1; + } + | expr KBYTES + = { + $$ = $1 * 1024; + } + | expr MBYTES + = { + $$ = $1 * 1024 * 1024; + } + | expr GBYTES + = { + $$ = $1 * 1024 * 1024 * 1024; + } + | expr TBYTES + = { + $$ = $1 * 1024 * 1024 * 1024; + } + ; + +/* this is an arithmatic expression */ +expr: NUMBER + = { + $$ = $1; + } + | expr '+' expr + = { + $$ = $1 + $3; + } + | expr '-' expr + = { + $$ = $1 - $3; + } + | expr '*' expr + = { + $$ = $1 * $3; + } + | expr '/' expr + = { + $$ = $1 / $3; + } +/* leave this out until we find why it makes BSD yacc dump core -larne + | '-' expr %prec NEG + = { + $$ = -$2; + } */ + | '(' expr ')' + = { + $$ = $2; + } + ; + +jupeblock: JUPE '{' jupeitems '}' ';' ; +jupeitems: jupeitem jupeitems | jupeitem; +jupeitem: jupenick; +jupenick: NICK '=' QSTRING +{ + addNickJupes(yylval.text); +} ';'; + +generalblock: GENERAL '{' generalitems '}' ';' ; +generalitems: generalitem generalitems | generalitem; +generalitem: generalnumeric | generalname | generalvhost | generaldesc; +generalnumeric: NUMERIC '=' NUMBER ';' +{ + if (localConf.numeric == 0) + localConf.numeric = yylval.num; +}; + +generalname: NAME '=' QSTRING ';' +{ + if (localConf.name == NULL) + DupString(localConf.name, yylval.text); +}; + +generaldesc: DESCRIPTION '=' QSTRING ';' +{ + MyFree(localConf.description); + DupString(localConf.description, yylval.text); + ircd_strncpy(cli_info(&me), yylval.text, REALLEN); +}; + +generalvhost: VHOST '=' QSTRING ';' +{ + if (INADDR_NONE == + (localConf.vhost_address.s_addr = inet_addr(yylval.text))) + localConf.vhost_address.s_addr = INADDR_ANY; +}; + +adminblock: ADMIN '{' adminitems '}' +{ + if (localConf.location1 == NULL) + DupString(localConf.location1, ""); + if (localConf.location2 == NULL) + DupString(localConf.location2, ""); + if (localConf.contact == NULL) + DupString(localConf.contact, ""); +} ';'; +adminitems: adminitems adminitem | adminitem; +adminitem: adminlocation | admincontact; +adminlocation: LOCATION '=' QSTRING ';' +{ + if (localConf.location1 == NULL) + DupString(localConf.location1, yylval.text); + else if (localConf.location2 == NULL) + DupString(localConf.location2, yylval.text); + /* Otherwise just drop it. -A1kmm */ +}; +admincontact: CONTACT '=' QSTRING ';' +{ + if (localConf.contact != NULL) + MyFree(localConf.contact); + DupString(localConf.contact, yylval.text); +}; + +classblock: CLASS { + name = NULL; + tping = 90; + tconn = 0; + maxlinks = 0; + sendq = 0; +} '{' classitems '}' +{ + if (name != NULL) + { + add_class(name, tping, tconn, maxlinks, sendq); + } +} ';'; +classitems: classitem classitems | classitem; +classitem: classname | classpingfreq | classconnfreq | classmaxlinks | + classsendq; +classname: NAME '=' QSTRING ';' +{ + MyFree(name); + DupString(name, yylval.text); +}; +classpingfreq: PINGFREQ '=' timespec ';' +{ + tping = yylval.num; +}; +classconnfreq: CONNECTFREQ '=' timespec ';' +{ + tconn = yylval.num; +}; +classmaxlinks: MAXLINKS '=' expr ';' +{ + maxlinks = yylval.num; +}; +classsendq: SENDQ '=' sizespec ';' +{ + sendq = yylval.num; +}; + +connectblock: CONNECT +{ + name = pass = host = NULL; + c_class = NULL; + port = 0; +} '{' connectitems '}' +{ + if (name != NULL && pass != NULL && host != NULL && c_class != NULL && + /*ccount < MAXCONFLINKS &&*/ !strchr(host, '*') && + !strchr(host, '?')) + { + aconf = make_conf(); + aconf->status = CONF_SERVER; + aconf->name = name; + aconf->passwd = pass; + aconf->conn_class = c_class; + aconf->port = port; + aconf->status = CONF_SERVER; + aconf->host = host; + aconf->next = GlobalConfList; + aconf->ipnum.s_addr = INADDR_NONE; + lookup_confhost(aconf); + GlobalConfList = aconf; + } + else + { + MyFree(name); + MyFree(pass); + MyFree(host); + name = pass = host = NULL; + } +}';'; +connectitems: connectitem connectitems | connectitem; +connectitem: connectname | connectpass | connectclass | connecthost + | connectport; +connectname: NAME '=' QSTRING ';' +{ + MyFree(name); + DupString(name, yylval.text); +}; +connectpass: PASS '=' QSTRING ';' +{ + MyFree(pass); + DupString(pass, yylval.text); +}; +connectclass: CLASS '=' QSTRING ';' +{ + c_class = find_class(yylval.text); +}; +connecthost: HOST '=' QSTRING ';' +{ + MyFree(host); + DupString(host, yylval.text); +}; +connectport: PORT '=' NUMBER ';' +{ + port = yylval.num; +}; + +serverblock: SERVER +{ + aconf = (struct ConfItem*) MyMalloc(sizeof(*aconf)); + memset(aconf, 0, sizeof(*aconf)); +} '{' serveritems '}' +{ + if (aconf->status == 0) + { + MyFree(aconf->host); + MyFree(aconf->name); + MyFree(aconf); + aconf = NULL; + } + else + { + aconf->next = GlobalConfList; + GlobalConfList = aconf; + } +} ';'; +serveritems: serveritem serveritems | serveritem; +serveritem: servername | servermask | serverhub | serverleaf | + serveruworld; +servername: NAME '=' QSTRING +{ + MyFree(aconf->name); + DupString(aconf->name, yylval.text); +} ';' ; +servermask: MASK '=' QSTRING +{ + MyFree(aconf->host); + DupString(aconf->host, yylval.text); +} ';' ; +/* XXX - perhaps we should do this the hybrid way in connect blocks + * instead -A1kmm. */ +serverhub: HUB '=' YES ';' +{ + aconf->status |= CONF_HUB; + aconf->status &= ~CONF_LEAF; +} +| HUB '=' NO +{ + aconf->status &= ~CONF_HUB; +} ';'; +serverleaf: LEAF '=' YES ';' +{ + if (!(aconf->status & CONF_HUB && aconf->status & CONF_UWORLD)) + aconf->status |= CONF_LEAF; +} +| LEAF '=' NO ';' +{ + aconf->status &= ~CONF_LEAF; +}; +serveruworld: UWORLD '=' YES ';' +{ + aconf->status |= CONF_UWORLD; + aconf->status &= ~CONF_LEAF; +} +| UWORLD '=' NO ';' +{ + aconf->status &= ~CONF_UWORLD; +}; + +operblock: OPER +{ + aconf = (struct ConfItem*) MyMalloc(sizeof(*aconf)); + memset(aconf, 0, sizeof(*aconf)); + aconf->status = CONF_OPERATOR; +} '{' operitems '}' ';' +{ + if (aconf->name != NULL && aconf->passwd != NULL && aconf->host != NULL) + { + aconf->next = GlobalConfList; + GlobalConfList = aconf; + } + else + { + log_write(LS_CONFIG, L_ERROR, 0, "operator blocks need a name, password, and host."); + MyFree(aconf->name); + MyFree(aconf->passwd); + MyFree(aconf->host); + MyFree(aconf); + aconf = NULL; + } +}; +operitems: operitem | operitems operitem; +operitem: opername | operpass | operlocal | operhost | operclass | operpriv; + +opername: NAME '=' QSTRING ';' +{ + MyFree(aconf->name); + DupString(aconf->name, yylval.text); +}; + +operpass: PASS '=' QSTRING ';' +{ + MyFree(aconf->passwd); + DupString(aconf->passwd, yylval.text); +}; + +operlocal: LOCAL '=' YES ';' +{ + /* XXX it would be good to get rid of local operators and add same + * permission values here. But for now, I am just going with local + * opers... */ + aconf->status = CONF_LOCOP; +} | LOCAL '=' NO ';' +{ + aconf->status = CONF_OPERATOR; +}; + +operhost: HOST '=' QSTRING ';' +{ + MyFree(aconf->host); + if (!strchr(yylval.text, '@')) + { + int uh_len; + char *b = (char*) MyMalloc((uh_len = strlen(yylval.text)+3)); + ircd_snprintf(0, b, uh_len, "*@%s", yylval.text); + aconf->host = b; + } + else + DupString(aconf->host, yylval.text); +}; + +operclass: CLASS '=' QSTRING ';' +{ + aconf->conn_class = find_class(yylval.text); +}; + +operpriv: privtype '=' yesorno ';' +{ + if ($3 == 1) + { + PrivSet(&aconf->privs_dirty, $1); + PrivSet(&aconf->privs, $1); + } + else + { + PrivSet(&aconf->privs_dirty, $1); + PrivClr(&aconf->privs, $1); + } +}; + +privtype: TPRIV_CHAN_LIMIT { $$ = PRIV_CHAN_LIMIT; } | + TPRIV_MODE_LCHAN { $$ = PRIV_MODE_LCHAN; } | + TPRIV_DEOP_LCHAN { $$ = PRIV_DEOP_LCHAN; } | + TPRIV_WALK_LCHAN { $$ = PRIV_WALK_LCHAN; } | + TPRIV_KILL { $$ = PRIV_KILL; } | + TPRIV_LOCAL_KILL { $$ = PRIV_LOCAL_KILL; } | + TPRIV_REHASH { $$ = PRIV_REHASH; } | + TPRIV_RESTART { $$ = PRIV_RESTART; } | + TPRIV_DIE { $$ = PRIV_DIE; } | + TPRIV_GLINE { $$ = PRIV_GLINE; } | + TPRIV_LOCAL_GLINE { $$ = PRIV_LOCAL_GLINE; } | + TPRIV_JUPE { $$ = PRIV_JUPE; } | + TPRIV_LOCAL_JUPE { $$ = PRIV_LOCAL_JUPE; } | + TPRIV_LOCAL_OPMODE { $$ = PRIV_LOCAL_OPMODE; } | + TPRIV_OPMODE { $$ = PRIV_OPMODE; }| + TPRIV_SET { $$ = PRIV_SET; } | + TPRIV_WHOX { $$ = PRIV_WHOX; } | + TPRIV_BADCHAN { $$ = PRIV_BADCHAN; } | + TPRIV_LOCAL_BADCHAN { $$ = TPRIV_LOCAL_BADCHAN; } | + TPRIV_SEE_CHAN { $$ = PRIV_SEE_CHAN; } | + TPRIV_SHOW_INVIS { $$ = PRIV_SHOW_INVIS; } | + TPRIV_SHOW_ALL_INVIS { $$ = PRIV_SHOW_ALL_INVIS; } | + TPRIV_PROPAGATE { $$ = PRIV_PROPAGATE; } | + TPRIV_UNLIMIT_QUERY { $$ = PRIV_UNLIMIT_QUERY; } | + TPRIV_DISPLAY { $$ = PRIV_DISPLAY; } | + TPRIV_SEE_OPERS { $$ = PRIV_SEE_OPERS; } | + TPRIV_WIDE_GLINE { $$ = PRIV_WIDE_GLINE; }; + +yesorno: YES { $$ = 1; } | NO { $$ = 0; }; + +/* The port block... */ +portblock: PORT { + port = 0; + host = NULL; + /* Hijack these for is_server, is_hidden to cut down on globals... */ + tconn = 0; + tping = 0; + /* and this for mask... */ + pass = NULL; +} '{' portitems '}' ';' +{ + if (port > 0 && port <= 0xFFFF) + { + add_listener(port, host, pass, tconn, tping); + host = pass = NULL; + } + else + { + MyFree(host); + MyFree(pass); + } +}; +portitems: portitem portitems | portitem; +portitem: portnumber | portvhost | portmask | portserver | porthidden; +portnumber: PORT '=' NUMBER ';' +{ + port = yylval.num; +}; + +portvhost: VHOST '=' QSTRING ';' +{ + MyFree(host); + DupString(host, yylval.text); +}; + +portmask: MASK '=' QSTRING ';' +{ + MyFree(pass); + DupString(pass, yylval.text); +}; + +portserver: SERVER '=' YES ';' +{ + tconn = -1; +} | SERVER '=' NO ';' +{ + tconn = 0; +}; + +porthidden: HIDDEN '=' YES ';' +{ + tping = -1; +} | HIDDEN '=' NO ';' +{ + tping = 0; +}; + +clientblock: CLIENT +{ + aconf = (struct ConfItem*) MyMalloc(sizeof(*aconf)); + memset(aconf, 0, sizeof(*aconf)); + aconf->status = CONF_CLIENT; +} '{' clientitems '}' +{ + if ((aconf->host != NULL || aconf->name!=NULL)) + { + if (aconf->host == NULL) + DupString(aconf->host, ""); + if (aconf->name == NULL) + DupString(aconf->name, ""); + if (aconf->conn_class == NULL) + aconf->conn_class = find_class("default"); + aconf->next = GlobalConfList; + GlobalConfList = aconf; + aconf = NULL; + } + else + { + MyFree(aconf->host); + MyFree(aconf->passwd); + MyFree(aconf); + aconf = NULL; + } +} ';'; +clientitems: clientitem clientitems | clientitem; +clientitem: clienthost | clientclass | clientpass | clientip; +clientip: IP '=' QSTRING ';' +{ + MyFree(aconf->host); + DupString(aconf->host, yylval.text); +}; + +clienthost: HOST '=' QSTRING ';' +{ + MyFree(aconf->name); + DupString(aconf->name, yylval.text); +}; + +clientclass: CLASS '=' QSTRING ';' +{ + aconf->conn_class = find_class(yylval.text); +}; + +clientpass: PASS '=' QSTRING ';' +{ + MyFree(aconf->passwd); + DupString(aconf->passwd, yylval.text); +}; + +killblock: KILL +{ + dconf = (struct DenyConf*) MyMalloc(sizeof(*dconf)); + memset(dconf, 0, sizeof(*dconf)); +} '{' killitems '}' +{ + if (dconf->hostmask != NULL) + { + if (dconf->usermask == NULL) + DupString(dconf->usermask, "*"); + dconf->next = denyConfList; + denyConfList = dconf; + dconf = NULL; + } + else + { + MyFree(dconf->hostmask); + MyFree(dconf->message); + MyFree(dconf); + dconf = NULL; + } +} ';'; +killitems: killitem killitems | killitem; +killitem: killuhost | killreal | killreasonfile | killreason; +killuhost: HOST '=' QSTRING ';' +{ + char *u, *h; + dconf->flags &= ~DENY_FLAGS_REALNAME; + MyFree(dconf->hostmask); + MyFree(dconf->usermask); + if ((h = strchr(yylval.text, '@')) == NULL) + { + u = "*"; + h = yylval.text; + } + else + { + u = yylval.text; + h++; + } + DupString(dconf->hostmask, h); + DupString(dconf->usermask, u); + if (strchr(yylval.text, '.')) + { + int c_class; + char ipname[16]; + int ad[4] = { 0 }; + int bits2 = 0; + dconf->flags |= DENY_FLAGS_IP; + c_class = sscanf(dconf->hostmask, "%d.%d.%d.%d/%d", + &ad[0], &ad[1], &ad[2], &ad[3], &bits2); + if (c_class != 5) { + dconf->bits = c_class * 8; + } + else { + dconf->bits = bits2; + } + ircd_snprintf(0, ipname, sizeof(ipname), "%d.%d.%d.%d", ad[0], ad[1], + ad[2], ad[3]); + dconf->address = inet_addr(ipname); + } +}; + +killreal: REAL '=' QSTRING ';' +{ + dconf->flags &= ~DENY_FLAGS_IP; + dconf->flags |= DENY_FLAGS_REALNAME; + MyFree(dconf->hostmask); + /* Leave usermask so you can specify user and real... */ + DupString(dconf->hostmask, yylval.text); +}; + +killreason: REASON '=' QSTRING ';' +{ + dconf->flags &= DENY_FLAGS_FILE; + MyFree(dconf->message); + DupString(dconf->message, yylval.text); +}; + +killreasonfile: TFILE '=' QSTRING ';' +{ + dconf->flags |= DENY_FLAGS_FILE; + MyFree(dconf->message); + DupString(dconf->message, yylval.text); +}; + +cruleblock: CRULE +{ + host = pass = NULL; + tconn = CRULE_AUTO; +} '{' cruleitems '}' +{ + struct CRuleNode *node; + if (host != NULL && pass != NULL && (node=crule_parse(pass)) != NULL) + { + struct CRuleConf *p = (struct CRuleConf*) MyMalloc(sizeof(*p)); + p->hostmask = host; + p->rule = pass; + p->type = tconn; + p->node = node; + p->next = cruleConfList; + cruleConfList = p; + } + else + { + MyFree(host); + MyFree(pass); + } +} ';'; + +cruleitems: cruleitem cruleitems | cruleitem; +cruleitem: cruleserver | crulerule | cruleall; + +cruleserver: SERVER '=' QSTRING ';' +{ + MyFree(host); + collapse(yylval.text); + DupString(host, yylval.text); +}; + +crulerule: RULE '=' QSTRING ';' +{ + MyFree(pass); + DupString(pass, yylval.text); +}; + +cruleall: ALL '=' YES ';' +{ + tconn = CRULE_ALL; +} | ALL '=' NO ';' +{ + tconn = CRULE_AUTO; +}; + +motdblock: MOTD { + pass = host = NULL; +} '{' motditems '}' +{ + if (host != NULL && pass != NULL) + motd_add(host, pass); + MyFree(host); + MyFree(pass); + host = pass = NULL; +} ';'; + +motditems: motditem motditems | motditem; +motditem: motdhost | motdfile; +motdhost: HOST '=' QSTRING ';' +{ + DupString(host, yylval.text); +}; + +motdfile: TFILE '=' QSTRING ';' +{ + DupString(pass, yylval.text); +}; + +featuresblock: FEATURES '{' featureitems '}' ';'; +featureitems: featureitems featureitem | featureitem; + +featureitem: QSTRING +{ + stringlist[0] = $1; + stringno = 1; +} '=' stringlist ';'; + +stringlist: QSTRING +{ + stringlist[1] = $1; + stringno = 2; +} posextrastrings +{ + feature_set(NULL, (const char * const *)stringlist, stringno); +}; +posextrastrings: /* empty */ | extrastrings; +extrastrings: extrastrings extrastring | extrastring; +extrastring: QSTRING +{ + if (stringno < MAX_STRINGS) + stringlist[stringno++] = $1; +}; + +quarantineblock: QUARANTINE '{' +{ + if (qconf != NULL) + qconf = (struct qline*) MyMalloc(sizeof(*qconf)); + else + { + if (qconf->chname != NULL) + MyFree(qconf->chname); + if (qconf->reason != NULL) + MyFree(qconf->reason); + } + memset(qconf, 0, sizeof(*qconf)); +} quarantineitems '}' ';' +{ + if (qconf->chname == NULL || qconf->reason == NULL) + { + log_write(LS_CONFIG, L_ERROR, 0, "quarantine blocks need a channel name " + "and a reason."); + return 0; + } + qconf->next = GlobalQuarantineList; + GlobalQuarantineList = qconf; + qconf = NULL; +}; + +quarantineitems: CHANNEL NAME '=' QSTRING ';' +{ + DupString(qconf->chname, yylval.text); +} | REASON '=' QSTRING ';' +{ + DupString(qconf->reason, yylval.text); +}; Index: ircdh/ircd/m_trace.c diff -u ircdh/ircd/m_trace.c:1.2 ircdh/ircd/m_trace.c:1.3 --- ircdh/ircd/m_trace.c:1.2 Sat Jan 18 11:09:08 2003 +++ ircdh/ircd/m_trace.c Sun Jan 19 13:20:30 2003 @@ -20,7 +20,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: m_trace.c,v 1.2 2003/01/18 19:09:08 zolty Exp $ + * $Id: m_trace.c,v 1.3 2003/01/19 21:20:30 zolty Exp $ */ /* @@ -205,7 +205,7 @@ for (i = 0; i <= HighestFd; i++) { - unsigned int conClass; + const char *conClass; if (!(acptr = LocalClientArray[i])) /* Local Connection? */ continue; @@ -430,7 +430,7 @@ for (i = 0; i <= HighestFd; i++) { - unsigned int conClass; + const char *conClass; if (!(acptr = LocalClientArray[i])) /* Local Connection? */ continue; @@ -653,7 +653,7 @@ for (i = 0; i <= HighestFd; i++) { - unsigned int conClass; + const char *conClass; if (!(acptr = LocalClientArray[i])) /* Local Connection? */ continue; Index: ircdh/ircd/motd.c diff -u ircdh/ircd/motd.c:1.1 ircdh/ircd/motd.c:1.2 --- ircdh/ircd/motd.c:1.1 Sat Jan 18 11:09:10 2003 +++ ircdh/ircd/motd.c Sun Jan 19 13:20:31 2003 @@ -21,7 +21,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: motd.c,v 1.1 2003/01/18 19:09:10 zolty Exp $ + * $Id: motd.c,v 1.2 2003/01/19 21:20:31 zolty Exp $ */ #include "config.h" @@ -236,21 +236,21 @@ static struct Motd *motd_lookup(struct Client *cptr) { struct Motd *ptr; - int class = -1; + char *c_class = NULL; assert(0 != cptr); if (!MyUser(cptr)) /* not my user, always return remote motd */ return MotdList.remote; - class = get_client_class(cptr); + c_class = get_client_class(cptr); - /* check the T-lines first */ + /* check the motd blocks first */ for (ptr = MotdList.other; ptr; ptr = ptr->next) { - if (ptr->type == MOTD_CLASS && ptr->id.class == class) + if (ptr->type == MOTD_CLASS && !match(ptr->id.hostmask, c_class)) return ptr; - else if (ptr->type == MOTD_HOSTMASK && + else if (ptr->type == MOTD_HOSTMASK && c_class != NULL && !match(ptr->id.hostmask, cli_sockhost(cptr))) return ptr; } Index: ircdh/ircd/s_conf.c diff -u ircdh/ircd/s_conf.c:1.11 ircdh/ircd/s_conf.c:1.12 --- ircdh/ircd/s_conf.c:1.11 Sat Jan 18 14:54:33 2003 +++ ircdh/ircd/s_conf.c Sun Jan 19 13:20:31 2003 @@ -17,7 +17,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: s_conf.c,v 1.11 2003/01/18 22:54:33 zolty Exp $ + * $Id: s_conf.c,v 1.12 2003/01/19 21:20:31 zolty Exp $ */ #include "config.h" @@ -73,9 +73,12 @@ int GlobalConfCount = 0; struct qline *GlobalQuarantineList = 0; +void yyparse(void); +int conf_fd, lineno; + static struct LocalConf localConf; static struct CRuleConf *cruleConfList; -static struct ServerConf *serverConfList; +/* static struct ServerConf *serverConfList; */ static struct DenyConf *denyConfList; #ifdef ESNET_NEG struct ConfItem *conf_negociacion = 0; @@ -246,7 +249,7 @@ * Do (start) DNS lookups of all hostnames in the conf line and convert * an IP addresses in a.b.c.d number for to IP#s. */ -static void lookup_confhost(struct ConfItem *aconf) +void lookup_confhost(struct ConfItem *aconf) { struct DNSReply *reply; @@ -667,6 +670,7 @@ * * - looks for a match on all given fields. */ +#if 0 static struct ConfItem *find_conf_entry(struct ConfItem *aconf, unsigned int mask) { @@ -765,7 +769,9 @@ /* port vhost mask */ add_listener(atoi(fields[4]), fields[2], fields[1], is_server, is_hidden); } +#endif +#if 0 void conf_add_quarantine(const char *const *fields, int count) { struct qline *qline; @@ -780,6 +786,7 @@ qline->next = GlobalQuarantineList; GlobalQuarantineList = qline; } +#endif char *find_quarantine(const char *chname) { @@ -803,6 +810,7 @@ } } +#if 0 void conf_add_local(const char *const *fields, int count) { if (count < 6 || EmptyString(fields[1]) || EmptyString(fields[5])) @@ -891,6 +899,7 @@ cruleConfList = p; } } +#endif void conf_erase_crule_list(void) { @@ -913,6 +922,7 @@ return cruleConfList; } +#if 0 void conf_add_server(const char *const *fields, int count) { struct ServerConf *server; @@ -1015,6 +1025,7 @@ conf->next = denyConfList; denyConfList = conf; } +#endif void conf_erase_deny_list(void) { @@ -1047,8 +1058,21 @@ #define MAXCONFLINKS 150 +extern FILE *yyin; +void init_lexer(void); + int read_configuration_file(void) { + feature_unmark(); /* unmark all features for resetting later */ + /* Now just open an fd. The buffering isn't really needed... */ + init_lexer(); + yyparse(); + fclose(yyin); + yyin = NULL; + feature_mark(); /* reset unmarked features */ + return 1; + +#if 0 enum { MAX_FIELDS = 15 }; char *src; @@ -1392,6 +1416,15 @@ prepara_negociaciones(); #endif return 1; +#endif /* 0 */ +} + +void yyerror(const char *msg) +{ + sendto_opmask_butone(0, SNO_ALL, "Config file parse error line %d: %s", + lineno, msg); + log_write(LS_CONFIG, L_ERROR, 0, "Config file parse error line %d: %s", + lineno, msg); } /* Index: ircdh/ircd/s_err.c diff -u ircdh/ircd/s_err.c:1.8 ircdh/ircd/s_err.c:1.9 --- ircdh/ircd/s_err.c:1.8 Sat Jan 18 14:54:33 2003 +++ ircdh/ircd/s_err.c Sun Jan 19 13:20:31 2003 @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: s_err.c,v 1.8 2003/01/18 22:54:33 zolty Exp $ + * $Id: s_err.c,v 1.9 2003/01/19 21:20:31 zolty Exp $ */ #include "config.h" @@ -440,23 +440,23 @@ /* 200 */ {RPL_TRACELINK, "Link %s.%s %s %s", "200"}, /* 201 */ - {RPL_TRACECONNECTING, "Try. %d %s", "201"}, + {RPL_TRACECONNECTING, "Try. %s %s", "201"}, /* 202 */ - {RPL_TRACEHANDSHAKE, "H.S. %d %s", "202"}, + {RPL_TRACEHANDSHAKE, "H.S. %s %s", "202"}, /* 203 */ - {RPL_TRACEUNKNOWN, "???? %d %s", "203"}, + {RPL_TRACEUNKNOWN, "???? %s %s", "203"}, /* 204 */ - {RPL_TRACEOPERATOR, "Oper %d %s %ld", "204"}, + {RPL_TRACEOPERATOR, "Oper %s %s %ld", "204"}, /* 205 */ - {RPL_TRACEUSER, "User %d %s %ld", "205"}, + {RPL_TRACEUSER, "User %s %s %ld", "205"}, /* 206 */ - {RPL_TRACESERVER, "Serv %d %dS %dC %s %s!%s@%s %ld %ld", "206"}, + {RPL_TRACESERVER, "Serv %s %dS %dC %s %s!%s@%s %ld %ld", "206"}, /* 207 */ {0}, /* 208 */ {RPL_TRACENEWTYPE, "<newtype> 0 %s", "208"}, /* 209 */ - {RPL_TRACECLASS, "Class %d %d", "209"}, + {RPL_TRACECLASS, "Class %s %d", "209"}, /* 210 */ {0}, /* 211 */ @@ -464,17 +464,17 @@ /* 212 */ {RPL_STATSCOMMANDS, "%s %u %u", "212"}, /* 213 */ - {RPL_STATSCLINE, "%c %s * %s %d %d", "213"}, + {RPL_STATSCLINE, "%c %s * %s %d %s", "213"}, /* 214 */ {RPL_STATSNLINE, "%c %s * %s %d %d", "214"}, /* 215 */ - {RPL_STATSILINE, "%c %s * %s %d %d", "215"}, + {RPL_STATSILINE, "%c %s * %s %d %s", "215"}, /* 216 */ {RPL_STATSKLINE, "%c %s \"%s\" %s 0 0", "216"}, /* 217 */ {RPL_STATSPLINE, "P %d %d %s %s", "217"}, /* 218 */ - {RPL_STATSYLINE, "%c %d %d %d %ld (%d) %d", "218"}, + {RPL_STATSYLINE, "%c %s %d %d %ld (%d) %d", "218"}, /* 219 */ {RPL_ENDOFSTATS, "%c :End of /STATS report", "219"}, /* 220 */ Index: ircdh/ircd/s_stats.c diff -u ircdh/ircd/s_stats.c:1.2 ircdh/ircd/s_stats.c:1.3 --- ircdh/ircd/s_stats.c:1.2 Sat Jan 18 14:54:33 2003 +++ ircdh/ircd/s_stats.c Sun Jan 19 13:20:31 2003 @@ -19,7 +19,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: s_stats.c,v 1.2 2003/01/18 22:54:33 zolty Exp $ + * $Id: s_stats.c,v 1.3 2003/01/19 21:20:31 zolty Exp $ */ #include "config.h" @@ -115,6 +115,15 @@ send_reply(sptr, p[1], c, host, pass, name, port, get_conf_class(tmp)); else if ((tmp->status & (CONF_SERVER | CONF_HUB))) send_reply(sptr, p[1], c, "*", name, port, get_conf_class(tmp)); + else if ((tmp->status & CONF_CLIENT)) + { + if (tmp->passwd && IsDigit(*tmp->passwd) && (!tmp->passwd[1] || + (IsDigit(tmp->passwd[1]) && !tmp->passwd[2]))) + send_reply(sptr, p[1], c, host, pass, name, port, + get_conf_class(tmp)); + else + send_reply(sptr, p[1], c, host, "*", name, port, get_conf_class(tmp)); + } else send_reply(sptr, p[1], c, host, name, port, get_conf_class(tmp)); } ----------------------- End of diff ----------------------- |
From: Toni G. <zo...@us...> - 2003-01-19 19:38:11
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-01-19 19:38:09 UTC Modified files: ChangeLog include/client.h include/dbuf.h include/fda.h include/ircd.h include/ircd_defs.h include/patchlevel.h include/s_conf.h ircd/IPcheck.c ircd/Makefile.in ircd/channel.c ircd/chkconf.c ircd/class.c ircd/client.c ircd/crule.c ircd/gline.c ircd/hash.c ircd/ircd_features.c ircd/ircd_relay.c ircd/list.c ircd/m_account.c ircd/m_admin.c ircd/m_burst.c ircd/m_error.c Removed files: ircd/sprintf_irc.c Log message: 2003-01-19 Toni Garcia <zo...@ir...> 1.0.alpha15 * Make Depend. * Numerosos BuxFix. ---------------------- diff included ---------------------- Index: ircdh/ChangeLog diff -u ircdh/ChangeLog:1.9 ircdh/ChangeLog:1.10 --- ircdh/ChangeLog:1.9 Sat Jan 18 14:54:26 2003 +++ ircdh/ChangeLog Sun Jan 19 11:37:57 2003 @@ -1,3 +1,9 @@ +2003-01-19 Toni Garcia <zo...@ir...> 1.0.alpha15 + * Make Depend. + + * Numerosos BuxFix. + + 2003-01-18 Toni Garcia <zo...@ir...> 1.0.alpha14 * ircd/s_user.c: Fusion de los modos normales y hispano. Index: ircdh/include/client.h diff -u ircdh/include/client.h:1.4 ircdh/include/client.h:1.5 --- ircdh/include/client.h:1.4 Sat Jan 18 14:54:26 2003 +++ ircdh/include/client.h Sun Jan 19 11:37:57 2003 @@ -18,13 +18,10 @@ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * - * $Id: client.h,v 1.4 2003/01/18 22:54:26 zolty Exp $ + * $Id: client.h,v 1.5 2003/01/19 19:37:57 zolty Exp $ */ #ifndef INCLUDED_client_h #define INCLUDED_client_h -#ifndef INCLUDED_config_h -#include "config.h" -#endif #ifndef INCLUDED_ircd_defs_h #include "ircd_defs.h" #endif Index: ircdh/include/dbuf.h diff -u ircdh/include/dbuf.h:1.2 ircdh/include/dbuf.h:1.3 --- ircdh/include/dbuf.h:1.2 Thu Oct 24 02:57:51 2002 +++ ircdh/include/dbuf.h Sun Jan 19 11:37:57 2003 @@ -15,6 +15,8 @@ * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * $Id: dbuf.h,v 1.3 2003/01/19 19:37:57 zolty Exp $ */ #ifndef INCLUDED_dbuf_h #define INCLUDED_dbuf_h Index: ircdh/include/fda.h diff -u ircdh/include/fda.h:1.2 ircdh/include/fda.h:1.3 --- ircdh/include/fda.h:1.2 Sat Jan 18 11:09:03 2003 +++ ircdh/include/fda.h Sun Jan 19 11:37:57 2003 @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: fda.h,v 1.2 2003/01/18 19:09:03 zolty Exp $ + * $Id: fda.h,v 1.3 2003/01/19 19:37:57 zolty Exp $ */ #ifndef INCLUDED_fda_h #define INCLUDED_fda_h @@ -56,6 +56,7 @@ extern void fda_set_lowmem_handler(void (*fn) (void)); extern void fda_set_nomem_handler(void (*fn) (void)); + #endif /* defined(MDEBUG) */ #endif /* INCLUDED_fda_h */ Index: ircdh/include/ircd.h diff -u ircdh/include/ircd.h:1.6 ircdh/include/ircd.h:1.7 --- ircdh/include/ircd.h:1.6 Sat Jan 18 11:09:03 2003 +++ ircdh/include/ircd.h Sun Jan 19 11:37:57 2003 @@ -1,7 +1,7 @@ /* * ircd.h * - * $Id: ircd.h,v 1.6 2003/01/18 19:09:03 zolty Exp $ + * $Id: ircd.h,v 1.7 2003/01/19 19:37:57 zolty Exp $ */ #ifndef INCLUDED_ircd_h #define INCLUDED_ircd_h @@ -46,7 +46,6 @@ extern void server_die(const char *message); extern void server_panic(const char *message); extern void server_restart(const char *message); - extern struct Client me; extern time_t CurrentTime; Index: ircdh/include/ircd_defs.h diff -u ircdh/include/ircd_defs.h:1.4 ircdh/include/ircd_defs.h:1.5 --- ircdh/include/ircd_defs.h:1.4 Sat Jan 18 11:09:03 2003 +++ ircdh/include/ircd_defs.h Sun Jan 19 11:37:57 2003 @@ -19,7 +19,7 @@ * * Commentary by Bleep (Thomas Helvey) * - * $Id: + * $Id: ircd_defs.h,v 1.5 2003/01/19 19:37:57 zolty Exp $ */ #ifndef INCLUDED_ircd_defs_h #define INCLUDED_ircd_defs_h Index: ircdh/include/patchlevel.h diff -u ircdh/include/patchlevel.h:1.9 ircdh/include/patchlevel.h:1.10 --- ircdh/include/patchlevel.h:1.9 Sat Jan 18 14:54:27 2003 +++ ircdh/include/patchlevel.h Sun Jan 19 11:37:57 2003 @@ -15,10 +15,10 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: patchlevel.h,v 1.9 2003/01/18 22:54:27 zolty Exp $ + * $Id: patchlevel.h,v 1.10 2003/01/19 19:37:57 zolty Exp $ * */ -#define PATCHLEVEL ".alpha14" +#define PATCHLEVEL ".alpha15" #define RELEASE "1.0" Index: ircdh/include/s_conf.h diff -u ircdh/include/s_conf.h:1.6 ircdh/include/s_conf.h:1.7 --- ircdh/include/s_conf.h:1.6 Sat Jan 18 11:09:04 2003 +++ ircdh/include/s_conf.h Sun Jan 19 11:37:58 2003 @@ -1,7 +1,7 @@ /* * s_conf.h * - * $Id: s_conf.h,v 1.6 2003/01/18 19:09:04 zolty Exp $ + * $Id: s_conf.h,v 1.7 2003/01/19 19:37:58 zolty Exp $ */ #ifndef INCLUDED_s_conf_h #define INCLUDED_s_conf_h @@ -37,9 +37,6 @@ #define CONF_SERVER 0x0004 #define CONF_LOCOP 0x0010 #define CONF_OPERATOR 0x0020 -#ifdef R_LINES -#define CONF_RESTRICT 0x0200 -#endif #define CONF_LEAF 0x1000 #define CONF_HUB 0x4000 #define CONF_UWORLD 0x8000 Index: ircdh/ircd/IPcheck.c diff -u ircdh/ircd/IPcheck.c:1.9 ircdh/ircd/IPcheck.c:1.10 --- ircdh/ircd/IPcheck.c:1.9 Sat Jan 18 14:54:29 2003 +++ ircdh/ircd/IPcheck.c Sun Jan 19 11:37:58 2003 @@ -16,7 +16,7 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * $Id: IPcheck.c,v 1.9 2003/01/18 22:54:29 zolty Exp $ + * $Id: IPcheck.c,v 1.10 2003/01/19 19:37:58 zolty Exp $ * * * @@ -25,10 +25,8 @@ */ #include "config.h" -#include "s_debug.h" /* provisional */ #include "IPcheck.h" #include "client.h" -#include "config.h" #include "ircd.h" #include "msg.h" #include "numnicks.h" /* NumNick, NumServ (GODMODE) */ @@ -226,7 +224,7 @@ * Update the IPcheck registry. * Return: * 1 : You're allowed to connect. - * 2 : You're not allowed to connect. + * 0 : You're not allowed to connect. * * Throttling: * Index: ircdh/ircd/Makefile.in diff -u ircdh/ircd/Makefile.in:1.11 ircdh/ircd/Makefile.in:1.12 --- ircdh/ircd/Makefile.in:1.11 Sat Jan 18 14:54:30 2003 +++ ircdh/ircd/Makefile.in Sun Jan 19 11:37:58 2003 @@ -218,6 +218,8 @@ OBJS = ${SRC:%.c=%.o} +DEP_SRC = ${IRCD_SRC} ${OSDEP_SRC} ${ENGINE_SRC} ${CHKCONF_SRC} + all: ( cd ..; make -f Makefile ) @@ -398,3 +400,1000 @@ # DO NOT DELETE THIS LINE -- make depend depends on it. +IPcheck.o: IPcheck.c ../config.h ../include/IPcheck.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/msg.h ../include/numnicks.h \ + ../include/ircd_alloc.h ../include/s_bdd.h ../include/s_debug.h \ + ../include/s_user.h ../include/send.h +channel.o: channel.c ../config.h ../include/channel.h \ + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_alloc.h ../include/ircd_chattr.h \ + ../include/ircd_features.h ../include/ircd_log.h \ + ../include/ircd_reply.h ../include/ircd_snprintf.h \ + ../include/ircd_string.h ../include/list.h ../include/match.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/querycmds.h ../include/s_bdd.h ../include/s_bsd.h \ + ../include/s_conf.h ../include/s_debug.h ../include/s_misc.h \ + ../include/s_user.h ../include/send.h ../include/support.h \ + ../include/sys.h ../include/whowas.h +class.o: class.c ../config.h ../include/class.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_alloc.h ../include/ircd_features.h \ + ../include/ircd_reply.h ../include/list.h ../include/numeric.h \ + ../include/s_conf.h ../include/s_debug.h ../include/send.h +client.o: client.c ../config.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/class.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/list.h ../include/numeric.h ../include/s_conf.h \ + ../include/s_debug.h ../include/send.h +crule.o: crule.c ../config.h ../include/crule.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_alloc.h ../include/ircd_chattr.h \ + ../include/ircd_string.h ../include/match.h ../include/s_bsd.h \ + ../include/s_debug.h +dbuf.o: dbuf.c ../config.h ../include/dbuf.h ../include/ircd_alloc.h \ + ../include/ircd_chattr.h ../include/ircd_features.h ../include/send.h \ + ../include/sys.h +fda.o: fda.c ../config.h +fileio.o: fileio.c ../config.h ../include/fileio.h \ + ../include/ircd_alloc.h +gline.o: gline.c ../config.h ../include/gline.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_alloc.h ../include/ircd_features.h \ + ../include/ircd_log.h ../include/ircd_reply.h \ + ../include/ircd_snprintf.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/match.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_bsd.h \ + ../include/s_debug.h ../include/s_misc.h ../include/s_stats.h \ + ../include/send.h ../include/support.h ../include/sys.h \ + ../include/whocmds.h +hash.o: hash.c ../config.h ../include/hash.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/channel.h \ + ../include/ircd_chattr.h ../include/ircd_string.h ../include/ircd.h \ + ../include/struct.h ../include/msg.h ../include/s_bdd.h \ + ../include/send.h ../include/support.h ../include/sys.h \ + ../include/watch.h +ircd.o: ircd.c ../config.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_defs.h ../include/IPcheck.h ../include/class.h \ + ../include/client.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/crule.h \ + ../include/hash.h ../include/ircd_alloc.h ../include/ircd_features.h \ + ../include/ircd_log.h ../include/ircd_reply.h ../include/ircd_signal.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/jupe.h \ + ../include/list.h ../include/match.h ../include/motd.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/opercmds.h \ + ../include/parse.h ../include/res.h ../include/s_auth.h \ + ../include/s_bdd.h ../include/s_bsd.h ../include/s_conf.h \ + ../include/s_debug.h ../include/s_misc.h ../include/s_stats.h \ + ../include/send.h ../include/sys.h ../include/uping.h \ + ../include/userload.h ../include/version.h ../include/whowas.h +ircd_alloc.o: ircd_alloc.c ../config.h ../include/ircd_alloc.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/s_debug.h \ + ../include/ircd_defs.h +ircd_events.o: ircd_events.c ../config.h ../include/ircd_events.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_defs.h \ + ../include/ircd_alloc.h ../include/ircd_log.h \ + ../include/ircd_snprintf.h ../include/s_debug.h +ircd_features.o: ircd_features.c ../config.h ../include/ircd_features.h \ + ../include/channel.h ../include/ircd_defs.h ../include/class.h \ + ../include/client.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_alloc.h \ + ../include/ircd_log.h ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/match.h ../include/motd.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/random.h ../include/s_bsd.h ../include/s_debug.h \ + ../include/s_misc.h ../include/s_stats.h ../include/send.h \ + ../include/support.h ../include/sys.h ../include/whowas.h +ircd_log.o: ircd_log.c ../config.h ../include/ircd_log.h \ + ../include/client.h ../include/ircd_defs.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/ircd_alloc.h ../include/ircd_reply.h \ + ../include/ircd_snprintf.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/ircd.h ../include/struct.h \ + ../include/numeric.h ../include/s_debug.h ../include/send.h +ircd_relay.o: ircd_relay.c ../config.h ../include/ircd_relay.h \ + ../include/channel.h ../include/ircd_defs.h ../include/client.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/hash.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_chattr.h ../include/ircd_features.h \ + ../include/ircd_reply.h ../include/ircd_string.h ../include/match.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/s_debug.h ../include/s_misc.h ../include/s_user.h \ + ../include/send.h +ircd_reply.o: ircd_reply.c ../config.h ../include/ircd_reply.h \ + ../include/client.h ../include/ircd_defs.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_snprintf.h \ + ../include/msg.h ../include/numeric.h ../include/s_conf.h \ + ../include/s_debug.h ../include/send.h +ircd_signal.o: ircd_signal.c ../config.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_defs.h ../include/ircd_events.h \ + ../include/ircd_signal.h ../include/s_conf.h +ircd_snprintf.o: ircd_snprintf.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/channel.h \ + ../include/ircd_snprintf.h ../include/struct.h +ircd_string.o: ircd_string.c ../config.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/ircd_defs.h ../include/ircd_log.h \ + chattr.tab.c +ircd_tea.o: ircd_tea.c ../config.h +ircd_xopen.o: ircd_xopen.c ../config.h ../include/ircd_xopen.h +jupe.o: jupe.c ../config.h ../include/jupe.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_alloc.h \ + ../include/ircd_features.h ../include/ircd_log.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/match.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_bsd.h \ + ../include/s_misc.h ../include/send.h ../include/support.h \ + ../include/sys.h +list.o: list.c ../config.h ../include/class.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/ircd_reply.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_alloc.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/list.h ../include/listener.h \ + ../include/match.h ../include/numeric.h ../include/res.h \ + ../include/s_auth.h ../include/s_bsd.h ../include/s_conf.h \ + ../include/s_debug.h ../include/s_misc.h ../include/s_user.h \ + ../include/send.h ../include/support.h ../include/watch.h \ + ../include/whowas.h +listener.o: listener.c ../config.h ../include/listener.h \ + ../include/ircd_defs.h ../include/ircd_events.h ../include/client.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_handler.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_alloc.h \ + ../include/ircd_features.h ../include/ircd_osdep.h \ + ../include/ircd_reply.h ../include/ircd_snprintf.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/numeric.h \ + ../include/s_bsd.h ../include/s_conf.h ../include/s_misc.h \ + ../include/s_stats.h ../include/send.h ../include/sys.h +m_account.o: m_account.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numnicks.h \ + ../include/s_user.h ../include/send.h +m_admin.o: m_admin.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_features.h \ + ../include/ircd_reply.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/s_conf.h ../include/s_user.h +m_asll.o: m_asll.c ../config.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/hash.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/numeric.h ../include/numnicks.h \ + ../include/match.h ../include/msg.h ../include/send.h \ + ../include/s_bsd.h ../include/s_user.h +m_away.o: m_away.c ../config.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_alloc.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_user.h \ + ../include/send.h +m_bmode.o: m_bmode.c ../include/channel.h ../include/ircd_defs.h \ + ../include/client.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../config.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/s_bdd.h ../include/s_debug.h \ + ../include/s_user.h ../include/send.h +m_burst.o: m_burst.c ../config.h ../include/channel.h \ + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_alloc.h ../include/ircd_features.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/list.h ../include/match.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/s_conf.h ../include/s_misc.h ../include/send.h \ + ../include/support.h +m_clearmode.o: m_clearmode.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/channel.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_alloc.h ../include/ircd_features.h \ + ../include/ircd_log.h ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/list.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_conf.h \ + ../include/send.h ../include/support.h +m_close.o: m_close.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_reply.h ../include/numeric.h \ + ../include/s_bsd.h ../include/send.h +m_config.o: m_config.c ../include/sys.h +m_connect.o: m_connect.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/crule.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_features.h ../include/ircd_log.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/jupe.h ../include/match.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/s_bsd.h ../include/s_conf.h ../include/s_user.h \ + ../include/send.h +m_cnotice.o: m_cnotice.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/s_user.h +m_cprivmsg.o: m_cprivmsg.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/s_user.h +m_create.o: m_create.c ../config.h ../include/channel.h \ + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/s_debug.h ../include/s_misc.h \ + ../include/s_user.h ../include/send.h +m_db.o: m_db.c ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../config.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_string.h ../include/ircd_chattr.h \ + ../include/list.h ../include/match.h ../include/msg.h \ + ../include/numnicks.h ../include/s_bdd.h ../include/s_conf.h \ + ../include/send.h +m_dbq.o: m_dbq.c ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../config.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_alloc.h ../include/ircd_chattr.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/s_bdd.h ../include/send.h +m_defaults.o: m_defaults.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_reply.h ../include/numeric.h \ + ../include/numnicks.h ../include/send.h ../include/supported.h \ + ../include/channel.h ../include/version.h +m_destruct.o: m_destruct.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/send.h +m_desynch.o: m_desynch.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_bsd.h \ + ../include/send.h +m_die.o: m_die.c ../config.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/s_bsd.h ../include/send.h +m_endburst.o: m_endburst.c ../config.h ../include/channel.h \ + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/send.h +m_error.o: m_error.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_alloc.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/numeric.h ../include/numnicks.h \ + ../include/s_debug.h ../include/s_misc.h ../include/send.h +m_get.o: m_get.c ../config.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/hash.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/numeric.h \ + ../include/numnicks.h ../include/send.h +m_ghost.o: m_ghost.c ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../config.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numnicks.h \ + ../include/s_bdd.h ../include/s_misc.h ../include/s_user.h \ + ../include/send.h +m_gline.o: m_gline.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/gline.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/match.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/s_conf.h ../include/s_misc.h ../include/send.h \ + ../include/support.h +m_help.o: m_help.c ../config.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/hash.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/send.h +m_info.o: m_info.c ../config.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/s_misc.h ../include/s_user.h \ + ../include/s_conf.h ../include/send.h ../include/version.h +m_invite.o: m_invite.c ../config.h ../include/channel.h \ + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/list.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_user.h \ + ../include/send.h +m_ison.o: m_ison.c ../config.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/hash.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/numeric.h ../include/send.h +m_join.o: m_join.c ../config.h ../include/channel.h \ + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/gline.h ../include/hash.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_chattr.h ../include/ircd_features.h \ + ../include/ircd_reply.h ../include/ircd_string.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_bdd.h \ + ../include/s_debug.h ../include/s_user.h ../include/send.h +m_jupe.o: m_jupe.c ../config.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/jupe.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_features.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/match.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_conf.h \ + ../include/s_misc.h ../include/send.h ../include/support.h +m_kick.o: m_kick.c ../config.h ../include/channel.h \ + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/send.h +m_kill.o: m_kill.c ../config.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/hash.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_features.h ../include/ircd_log.h \ + ../include/ircd_reply.h ../include/ircd_snprintf.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_misc.h \ + ../include/send.h ../include/whowas.h +m_links.o: m_links.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/match.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/s_user.h ../include/send.h +m_list.o: m_list.c ../config.h ../include/channel.h \ + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_alloc.h ../include/ircd_chattr.h \ + ../include/ircd_features.h ../include/ircd_log.h \ + ../include/ircd_reply.h ../include/ircd_string.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_bsd.h \ + ../include/send.h +m_lusers.o: m_lusers.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/querycmds.h \ + ../include/s_user.h ../include/s_serv.h ../include/send.h +m_map.o: m_map.c ../config.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/ircd_snprintf.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/list.h ../include/match.h \ + ../include/msg.h ../include/numeric.h ../include/s_user.h \ + ../include/s_serv.h ../include/send.h ../include/querycmds.h +m_mode.o: m_mode.c ../config.h ../include/handlers.h ../include/channel.h \ + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/s_conf.h ../include/s_debug.h \ + ../include/s_user.h ../include/send.h +m_motd.o: m_motd.c ../config.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/match.h \ + ../include/motd.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/s_conf.h ../include/class.h \ + ../include/s_user.h ../include/send.h +m_names.o: m_names.c ../config.h ../include/channel.h \ + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/s_user.h ../include/send.h +m_nick.o: m_nick.c ../config.h ../include/IPcheck.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_chattr.h \ + ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/s_bdd.h ../include/s_debug.h \ + ../include/s_misc.h ../include/s_user.h ../include/send.h +m_notice.o: m_notice.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/ircd_chattr.h ../include/ircd_relay.h \ + ../include/ircd_reply.h ../include/ircd_string.h ../include/match.h \ + ../include/msg.h ../include/numeric.h ../include/send.h \ + ../include/handlers.h +m_oper.o: m_oper.c ../config.h ../include/class.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_alloc.h \ + ../include/ircd_features.h ../include/ircd_log.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/ircd_xopen.h ../include/list.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/querycmds.h ../include/s_conf.h ../include/s_debug.h \ + ../include/s_user.h ../include/s_misc.h ../include/send.h \ + ../include/support.h +m_opmode.o: m_opmode.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/channel.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/send.h \ + ../include/s_conf.h +m_part.o: m_part.c ../config.h ../include/channel.h \ + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/numeric.h ../include/numnicks.h \ + ../include/send.h +m_pass.o: m_pass.c ../config.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/send.h +m_ping.o: m_ping.c ../config.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/hash.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/ircd.h \ + ../include/struct.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/opercmds.h ../include/s_debug.h \ + ../include/send.h +m_pong.o: m_pong.c ../config.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/hash.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/s_user.h ../include/send.h +m_privmsg.o: m_privmsg.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_chattr.h ../include/ircd_features.h \ + ../include/ircd_relay.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/match.h ../include/msg.h \ + ../include/numeric.h ../include/send.h +m_privs.o: m_privs.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/numeric.h \ + ../include/numnicks.h ../include/send.h +m_proto.o: m_proto.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_alloc.h ../include/ircd_chattr.h \ + ../include/ircd_reply.h ../include/ircd_string.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_debug.h \ + ../include/s_misc.h ../include/send.h ../include/supported.h \ + ../include/channel.h ../include/version.h +m_quit.o: m_quit.c ../config.h ../include/channel.h \ + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/s_misc.h +m_rehash.o: m_rehash.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_log.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/motd.h \ + ../include/numeric.h ../include/s_conf.h ../include/send.h +m_rename.o: m_rename.c ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../config.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/ircd_tea.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_bdd.h \ + ../include/s_conf.h ../include/s_user.h ../include/send.h \ + ../include/watch.h ../include/whowas.h +m_reset.o: m_reset.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_features.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/numeric.h ../include/numnicks.h \ + ../include/send.h +m_restart.o: m_restart.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_log.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/numeric.h \ + ../include/numnicks.h ../include/send.h +m_rping.o: m_rping.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/opercmds.h \ + ../include/s_user.h ../include/send.h +m_rpong.o: m_rpong.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/opercmds.h \ + ../include/send.h +m_server.o: m_server.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/crule.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_features.h ../include/ircd_log.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/jupe.h ../include/list.h \ + ../include/match.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/querycmds.h ../include/s_bsd.h \ + ../include/s_conf.h ../include/s_debug.h ../include/s_misc.h \ + ../include/s_serv.h ../include/send.h ../include/userload.h +m_set.o: m_set.c ../config.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/hash.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/numeric.h \ + ../include/numnicks.h ../include/send.h +m_settime.o: m_settime.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_features.h \ + ../include/ircd_reply.h ../include/ircd_snprintf.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/list.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/s_user.h ../include/send.h +m_silence.o: m_silence.c ../config.h ../include/channel.h \ + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/list.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_user.h \ + ../include/send.h +m_squit.o: m_squit.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_chattr.h \ + ../include/ircd_reply.h ../include/ircd_string.h ../include/numeric.h \ + ../include/numnicks.h ../include/match.h ../include/s_debug.h \ + ../include/s_misc.h ../include/s_user.h ../include/send.h +m_stats.o: m_stats.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ + ../include/numeric.h ../include/s_stats.h ../include/s_user.h \ + ../include/send.h +m_time.o: m_time.c ../config.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_misc.h \ + ../include/s_user.h ../include/send.h +m_tmpl.o: m_tmpl.c ../config.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/hash.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/numeric.h ../include/numnicks.h \ + ../include/send.h +m_topic.o: m_topic.c ../config.h ../include/channel.h \ + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/send.h +m_trace.o: m_trace.c ../config.h ../include/class.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_features.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/match.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_bsd.h \ + ../include/s_conf.h ../include/s_user.h ../include/send.h \ + ../include/version.h +m_uping.o: m_uping.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/match.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/s_conf.h ../include/s_user.h ../include/send.h \ + ../include/uping.h +m_user.o: m_user.c ../config.h ../include/handlers.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_chattr.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/numeric.h ../include/numnicks.h \ + ../include/s_debug.h ../include/s_misc.h ../include/s_user.h \ + ../include/send.h +m_users.o: m_users.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/querycmds.h \ + ../include/s_misc.h ../include/s_user.h ../include/s_serv.h \ + ../include/send.h +m_userhost.o: m_userhost.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/numeric.h ../include/s_user.h \ + ../include/struct.h +m_userip.o: m_userip.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/ircd_features.h \ + ../include/numeric.h ../include/s_user.h ../include/struct.h +m_version.o: m_version.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_features.h \ + ../include/ircd_reply.h ../include/ircd_snprintf.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_debug.h \ + ../include/s_user.h ../include/send.h ../include/version.h +m_wallchops.o: m_wallchops.c ../config.h ../include/channel.h \ + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/s_user.h ../include/send.h +m_wallvoices.o: m_wallvoices.c ../config.h ../include/channel.h \ + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/s_user.h ../include/send.h +m_wallops.o: m_wallops.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/send.h +m_wallusers.o: m_wallusers.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/send.h +m_watch.o: m_watch.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/list.h ../include/numeric.h \ + ../include/s_user.h ../include/send.h ../include/watch.h +m_who.o: m_who.c ../config.h ../include/channel.h ../include/ircd_defs.h \ + ../include/client.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_chattr.h \ + ../include/ircd_features.h ../include/ircd_log.h \ + ../include/ircd_reply.h ../include/ircd_string.h ../include/match.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_user.h \ + ../include/send.h ../include/support.h ../include/whocmds.h +m_whois.o: m_whois.c ../config.h ../include/channel.h \ + ../include/ircd_defs.h ../include/client.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/hash.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/match.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/s_user.h ../include/send.h ../include/whocmds.h +m_whowas.o: m_whowas.c ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_features.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/s_user.h ../include/s_misc.h \ + ../include/send.h ../include/whowas.h +match.o: match.c ../config.h ../include/match.h ../include/ircd_chattr.h +motd.o: motd.c ../config.h ../include/motd.h ../include/class.h \ + ../include/client.h ../include/ircd_defs.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/fileio.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_alloc.h ../include/ircd_features.h \ + ../include/ircd_reply.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/match.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/s_conf.h \ + ../include/s_debug.h ../include/s_stats.h ../include/s_user.h \ + ../include/send.h +msgq.o: msgq.c ../config.h ../include/msgq.h ../include/ircd_defs.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_alloc.h \ + ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/ircd_snprintf.h ../include/numeric.h ../include/send.h \ + ../include/s_debug.h ../include/s_stats.h +numnicks.o: numnicks.c ../config.h ../include/numnicks.h \ + ../include/client.h ../include/ircd_defs.h ../include/dbuf.h \ + ../include/msgq.h ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_alloc.h \ + ../include/ircd_string.h ../include/ircd_chattr.h ../include/match.h \ + ../include/s_bsd.h ../include/s_debug.h ../include/s_misc.h +opercmds.o: opercmds.c ../config.h ../include/opercmds.h \ + ../include/class.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_chattr.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/listener.h ../include/match.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/s_conf.h ../include/send.h +packet.o: packet.c ../config.h ../include/packet.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_chattr.h ../include/parse.h \ + ../include/s_bsd.h ../include/s_misc.h ../include/send.h +parse.o: parse.c ../config.h ../include/parse.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/channel.h \ + ../include/handlers.h ../include/hash.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_alloc.h ../include/ircd_chattr.h \ + ../include/ircd_features.h ../include/ircd_reply.h \ + ../include/ircd_string.h ../include/msg.h ../include/numeric.h \ + ../include/numnicks.h ../include/opercmds.h ../include/querycmds.h \ + ../include/res.h ../include/s_bsd.h ../include/s_conf.h \ + ../include/s_debug.h ../include/s_misc.h ../include/s_numeric.h \ + ../include/s_user.h ../include/send.h ../include/sys.h \ + ../include/whocmds.h ../include/whowas.h +querycmds.o: querycmds.c ../config.h ../include/querycmds.h \ + ../include/ircd_features.h +random.o: random.c ../config.h ../include/random.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h \ + ../include/ircd_log.h ../include/ircd_reply.h ../include/send.h +res.o: res.c ../config.h ../include/res.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_alloc.h ../include/ircd_log.h \ + ../include/ircd_osdep.h ../include/ircd_reply.h \ + ../include/ircd_snprintf.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/msg.h ../include/numeric.h \ + ../include/s_bsd.h ../include/s_debug.h ../include/s_misc.h \ + ../include/send.h ../include/support.h ../include/sys.h +s_auth.o: s_auth.c ../config.h ../include/s_auth.h \ + ../include/ircd_events.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_handler.h \ + ../include/IPcheck.h ../include/ircd.h ../include/struct.h \ + ../include/ircd_alloc.h ../include/ircd_chattr.h \ + ../include/ircd_features.h ../include/ircd_log.h \ + ../include/ircd_osdep.h ../include/ircd_snprintf.h \ + ../include/ircd_string.h ../include/list.h ../include/numeric.h \ + ../include/querycmds.h ../include/res.h ../include/s_bsd.h \ + ../include/s_debug.h ../include/s_misc.h ../include/send.h \ + ../include/sys.h +s_bdd.o: s_bdd.c ../include/s_bdd.h ../config.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_alloc.h \ + ../include/ircd_chattr.h ../include/ircd_log.h ../include/ircd_string.h \ + ../include/ircd_tea.h ../include/list.h ../include/match.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/s_bsd.h ../include/s_conf.h ../include/s_debug.h \ + ../include/s_misc.h ../include/send.h +s_bsd.o: s_bsd.c ../config.h ../include/s_bsd.h ../include/client.h \ + ../include/ircd_defs.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/IPcheck.h \ + ../include/channel.h ../include/class.h ../include/hash.h \ + ../include/ircd_log.h ../include/ircd_features.h \ + ../include/ircd_osdep.h ../include/ircd_reply.h \ + ../include/ircd_snprintf.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/ircd.h ../include/struct.h \ + ../include/list.h ../include/listener.h ../include/msg.h \ + ../include/numeric.h ../include/numnicks.h ../include/packet.h \ + ../include/parse.h ../include/querycmds.h ../include/res.h \ + ../include/s_auth.h ../include/s_bdd.h ../include/s_conf.h \ + ../include/s_debug.h ../include/s_misc.h ../include/s_user.h \ + ../include/send.h ../include/support.h ../include/sys.h \ + ../include/uping.h ../include/version.h +s_conf.o: s_conf.c ../config.h ../include/s_conf.h ../include/IPcheck.h \ + ../include/class.h ../include/client.h ../include/ircd_defs.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/crule.h ../include/ircd_features.h \ + ../include/fileio.h ../include/gline.h ../include/hash.h \ + ../include/ircd.h ../include/struct.h ../include/ircd_alloc.h \ + ../include/ircd_chattr.h ../include/ircd_log.h ../include/ircd_reply.h \ + ../include/ircd_snprintf.h ../include/ircd_string.h ../include/list.h \ + ../include/listener.h ../include/match.h ../include/motd.h \ + ../include/numeric.h ../include/numnicks.h ../include/opercmds.h \ + ../include/parse.h ../include/res.h ../include/s_bsd.h \ + ../include/s_debug.h ../include/s_misc.h ../include/send.h \ + ../include/support.h ../include/sys.h +s_debug.o: s_debug.c ../config.h ../include/s_debug.h \ + ../include/ircd_defs.h ../include/channel.h ../include/class.h \ + ../include/client.h ../include/dbuf.h ../include/msgq.h \ + ../include/ircd_events.h ../include/ircd_handler.h ../include/gline.h \ + ../include/hash.h ../include/ircd_alloc.h ../include/ircd_features.h \ + ../include/ircd_log.h ../include/ircd_osdep.h ../include/ircd_reply.h \ + ../include/ircd.h ../include/struct.h ../include/jupe.h \ + ../include/list.h ../include/motd.h ../include/numeric.h \ + ../include/numnicks.h ../include/res.h ../include/s_bsd.h \ + ../include/s_conf.h ../include/s_stats.h ../include/send.h \ + ../include/sys.h ../include/whowas.h +s_err.o: s_err.c ../config.h ../include/numeric.h ../include/s_debug.h \ + ../include/ircd_defs.h +s_misc.o: s_misc.c ../config.h ../include/s_misc.h ../include/IPcheck.h \ + ../include/channel.h ../include/ircd_defs.h ../include/client.h \ + ../include/dbuf.h ../include/msgq.h ../include/ircd_events.h \ + ../include/ircd_handler.h ../include/hash.h ../include/ircd.h \ + ../include/struct.h ../include/ircd_alloc.h ../include/ircd_features.h \ + ../include/ircd_log.h ../include/ircd_reply.h \ + ../include/ircd_snprintf.h ../include/ircd_string.h \ + ../include/ircd_chattr.h ../include/list.h ../include/match.h \ + ../include/msg.h ../include/numeric.h ../include/numnicks.h \ + ../include/parse.h ../include/querycmds.h ../include/res.h \ + ../include/s_bsd.h ../include/s_conf.h ../include/s_debug.h \ + ../include/s_stats.h ../include/s_user.h ../include/send.h \ + ../include/support.h ../include/... [truncated message content] |
From: Toni G. <zo...@us...> - 2003-01-18 23:59:42
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-01-18 23:59:41 UTC Removed files: ircd/crypt/crypter Log message: Limpieza de directorios ---------------------- diff included ---------------------- Index: ircdh/ircd/crypt/crypter diff -u ircdh/ircd/crypt/crypter:1.1.1.1 ircdh/ircd/crypt/crypter:removed --- ircdh/ircd/crypt/crypter:1.1.1.1 Fri Jul 26 14:58:28 2002 +++ ircdh/ircd/crypt/crypter Sat Jan 18 15:59:41 2003 @@ -1,52 +0,0 @@ -#!/usr/local/bin/perl -#************************************************************************ -#* IRC - Internet Relay Chat, ircd/crypt/crypter -#* Copyright (C) 1991 Sean Batt -#* -#* 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 1, or (at your option) -#* any later version. -#* -#* This program is distributed in the hope that it will be useful, -#* but WITHOUT ANY WARRANTY; without even the implied warranty of -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -#* GNU General Public License for more details. -#* -#* You should have received a copy of the GNU General Public License -#* along with this program; if not, write to the Free Software -#* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -#*/ - -#From Sean Batt se...@co... -# -#Temporary output file -# -$tmpfile = "/tmp/ircd.conf.tmp"; - -# -#Original ircd.conf file -# -$ircdconf = @ARGV[0]; - -print "crypting ",$ircdconf,"\n"; -@saltset = ('a' .. 'z', 'A' .. 'Z', '0' .. '9', '.', '/'); - -umask(0077); -open ($ircdout, ">/tmp/ircd.conf.tmp") || die "open $!"; - -while ($text = <>) { -#if its not an "O" line we can ignore it - $text =~ /^o/i || print ($ircdout $text) && next; - chop($text); - @oline = split(':', $text); - $salt = $saltset[rand(time)%64].$saltset[(rand(time)>>6)%64]; - $oline[2] = crypt(@oline[2], $salt); - print ($ircdout join(':',@oline)."\n"); -} -close ($ircdout); -close ($ircdin); -print "/bin/cp ",$tmpfile," ",$ircdconf,"\n"; -(fork()==0) ? exec("/bin/cp", $tmpfile, $ircdconf) : wait; - -#unlink($tmpfile); ----------------------- End of diff ----------------------- |
From: Toni G. <zo...@us...> - 2003-01-18 23:58:11
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-01-18 23:58:10 UTC Removed files: ircd/crypt/tea/Makefile ircd/crypt/tea/README ircd/crypt/tea/cifranick.c Log message: Limpieza de directorios ---------------------- diff included ---------------------- Index: ircdh/ircd/crypt/tea/Makefile diff -u ircdh/ircd/crypt/tea/Makefile:1.2 ircdh/ircd/crypt/tea/Makefile:removed --- ircdh/ircd/crypt/tea/Makefile:1.2 Sat Jul 27 09:56:18 2002 +++ ircdh/ircd/crypt/tea/Makefile Sat Jan 18 15:58:10 2003 @@ -1,35 +0,0 @@ -#************************************************************************ -#* IRC - Internet Relay Chat, ircd/crypt/tea/Makefile -#* Copyright (C) 2002 IRC-Hispano.org - ESNET - zoltan -#* -#* 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 1, or (at your option) -#* any later version. -#* -#* This program is distributed in the hope that it will be useful, -#* but WITHOUT ANY WARRANTY; without even the implied warranty of -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -#* GNU General Public License for more details. -#* -#* You should have received a copy of the GNU General Public License -#* along with this program; if not, write to the Free Software -#* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -#*/ -# -# Makefile para compilar el programa de encriptar las claves -# de los nicks para la tabla 'n'. - - - -all: cifran - -cifran: - gcc -c cifranick.c - gcc cifranick.o -o cifranick - -install: - @echo 'Ya esta instalado, no hacia falta ;-).' - -clean: - /bin/rm -f cifranick *.o core *.c~ Index: ircdh/ircd/crypt/tea/README diff -u ircdh/ircd/crypt/tea/README:1.2 ircdh/ircd/crypt/tea/README:removed --- ircdh/ircd/crypt/tea/README:1.2 Sat Jul 27 09:56:18 2002 +++ ircdh/ircd/crypt/tea/README Sat Jan 18 15:58:10 2003 @@ -1,64 +0,0 @@ -/************************************************************************ - * IRC - Internet Relay Chat, ircd/crypt/tea/README - * Copyright (C) 2002 IRC-Hispano.org - ESNET - zoltan - * - * 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 1, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - - -Fichero README del programa para encriptar claves de nick para -introducir en la tabla 'n'. - - - COMPILACION en LINUX o entornos UNIX -Para compilarlo necesitas el Make y gcc de gnu, lo podras encontrar -en http://www.gnu.org. Se compila tecleando "gmake" o "make". - - - COMPILACION en WINDOWS -Si tienes el suite Visual Studio o uno de sus partes Visual C++, puedes -hacerlo en modo grafico o en modo consola. -En modo consola se hace con "cl cifranick.c ws2_32.lib" y te generará un -ejecutable *.exe - - -Para utilizar el programa hay que teclear en la consola: - - En Linux/UNIX: - ./cifranick <nick> <clave> - En Windows: - cifranick <nick> <clave> - -siendo <nick> el nick del usuario para encriptar su clave y -<clave> la clave del usuario. (Notese que si la clave mide mas de -12 caracteres, se trunca a 12 caracteres). -El programa devolvera el nick normalizado en minusculas teniendo en -cuenta lo siguiente - La minuscula de ^ es ~ - " " de \ es | - " " de [ es { - " " de ] es } -y la clave sale encriptada, lista para meterla en la tabla 'n'. - - -Para dudas, preguntas, sugerencias, puede comentarlas en el canal -#irc-dev del iRC-Hispano o visitar la web http://www.irc-dev.net y -exponerlas en los foros. - - -08/04/2002 zoltan <zo...@ir...> - - -PD: La may£scula de NiCK es nick2 ;-) Index: ircdh/ircd/crypt/tea/cifranick.c diff -u ircdh/ircd/crypt/tea/cifranick.c:1.2 ircdh/ircd/crypt/tea/cifranick.c:removed --- ircdh/ircd/crypt/tea/cifranick.c:1.2 Sat Jul 27 09:56:18 2002 +++ ircdh/ircd/crypt/tea/cifranick.c Sat Jan 18 15:58:10 2003 @@ -1,202 +0,0 @@ -/* - * IRC - Internet Relay Chat, ircd/crypt/tea/cifranick.c - * Copyright (C) 2002 IRC-Hispano.org - ESNET - zoltan - * - * 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 1, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -/* - * Programa para generar las claves cifradas de nicks - * para introducirlos en la tabla 'n' del ircd. - * - * -- zoltan - */ - - -#include <stdio.h> -#include <string.h> -#ifdef _WIN32 -# include <winsock.h> -#else -# include <netinet/in.h> -#endif - - -#define NUMNICKLOG 6 -#define NICKLEN 9 -#define NUMNICKBASE 64 /* (2 << NUMNICKLOG) */ -#define NUMNICKMASK 63 /* (NUMNICKBASE-1) */ - -static const char convert2y[] = { - 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P', - 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f', - 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v', - 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','[',']' -}; - -static const unsigned int convert2n[] = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 52,53,54,55,56,57,58,59,60,61, 0, 0, 0, 0, 0, 0, - 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14, - 15,16,17,18,19,20,21,22,23,24,25,62, 0,63, 0, 0, - 0,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40, - 41,42,43,44,45,46,47,48,49,50,51, 0, 0, 0, 0, 0, - - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -}; - -unsigned int base64toint(const char *s) -{ - unsigned int i = convert2n[(unsigned char)*s++]; - while (*s) - { - i <<= NUMNICKLOG; - i += convert2n[(unsigned char)*s++]; - } - return i; -} - -const char *inttobase64(char *buf, unsigned int v, unsigned int count) -{ - buf[count] = '\0'; - while (count > 0) - { - buf[--count] = convert2y[(v & NUMNICKMASK)]; - v >>= NUMNICKLOG; - } - return buf; -} - -/* - * La siguiente tabla es utilizada por la macro toLower, - * esta tabla esta extraida del archivo common.c del ircd. - * - * --Daijo - */ -const char NTL_tolower_tab[] = { - /* x00-x07 */ '\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', - /* x08-x0f */ '\x08', '\x09', '\x0a', '\x0b', '\x0c', '\x0d', '\x0e', '\x0f', - /* x10-x17 */ '\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17', - /* x18-x1f */ '\x18', '\x19', '\x1a', '\x1b', '\x1c', '\x1d', '\x1e', '\x1f', - /* ' '-x27 */ ' ', '!', '"', '#', '$', '%', '&', '\x27', - /* '('-'/' */ '(', ')', '*', '+', ',', '-', '.', '/', - /* '0'-'7' */ '0', '1', '2', '3', '4', '5', '6', '7', - /* '8'-'?' */ '8', '9', ':', ';', '<', '=', '>', '?', - /* '@'-'G' */ '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - /* 'H'-'O' */ 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - /* 'P'-'W' */ 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - /* 'X'-'_' */ 'x', 'y', 'z', '{', '|', '}', '~', '_', - /* '`'-'g' */ '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', - /* 'h'-'o' */ 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', - /* 'p'-'w' */ 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', - /* 'x'-x7f */ 'x', 'y', 'z', '{', '|', '}', '~', '\x7f' -}; -#define toLower(c) (NTL_tolower_tab[(c)]) - -/* - * TEA (cifrado) - * - * Cifra 64 bits de datos, usando clave de 64 bits (los 64 bits superiores son cero) - * Se cifra v[0]^x[0], v[1]^x[1], para poder hacer CBC facilmente. - * - */ -void tea(unsigned int v[], unsigned int k[], unsigned int x[]) -{ - unsigned int y = v[0] ^ x[0], z = v[1] ^ x[1], sum = 0, delta = 0x9E3779B9; - unsigned int a = k[0], b = k[1], n = 32; - unsigned int c = 0, d = 0; - - while (n-- > 0) - { - sum += delta; - y += (z << 4) + a ^ z + sum ^ (z >> 5) + b; - z += (y << 4) + c ^ y + sum ^ (y >> 5) + d; - } - - x[0] = y; - x[1] = z; -} - - -int main(int argc, char *argv[]) -{ - - unsigned int v[2], k[2], x[2]; - int cont = (NICKLEN + 8) / 8; - char tmpnick[8 * ((NICKLEN + 8) / 8) + 1]; - char tmppass[12 + 1]; - unsigned int *p = (unsigned int *)tmpnick; /* int == 32 bits */ - - char nick[NICKLEN + 1]; /* Nick normalizado */ - char clave[12 + 1]; /* Clave encriptada */ - int i = 0; - - - if (argc != 3) - { - printf("Uso: cifranick nick password\n"); - return 1; - } - - strcpy(nick, argv[1]); - nick[NICKLEN] = '\0'; - - - /* Normalizar nick */ - while (nick[i] != 0) - { - nick[i] = toLower(nick[i]); - i++; - } - - memset(tmpnick, 0, sizeof(tmpnick)); - strncpy(tmpnick, nick ,sizeof(tmpnick) - 1); - - memset(tmppass, 0, sizeof(tmppass)); - strncpy(tmppass, argv[2], sizeof(tmppass) - 1); - - /* relleno -> 123456789012 */ - strncat(tmppass, "AAAAAAAAAAAA", sizeof(tmppass) - strlen(tmppass) -1); - - x[0] = x[1] = 0; - - k[1] = base64toint(tmppass + 6); - tmppass[6] = '\0'; - k[0] = base64toint(tmppass); - - while(cont--) - { - v[0] = ntohl(*p++); /* 32 bits */ - v[1] = ntohl(*p++); /* 32 bits */ - tea(v, k, x); - } - - inttobase64(clave, x[0], 6); - inttobase64(clave + 6, x[1], 6); - - printf("Clave cifrada para %s es %s\n", nick, clave); - - return 0; - -} ----------------------- End of diff ----------------------- |
From: Toni G. <zo...@us...> - 2003-01-18 23:53:14
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-01-18 23:53:13 UTC Removed files: ircd/crypt/Makefile ircd/crypt/README ircd/crypt/mkpasswd.c ircd/crypt/sums Log message: Limpieza de directorios ---------------------- diff included ---------------------- Index: ircdh/ircd/crypt/Makefile diff -u ircdh/ircd/crypt/Makefile:1.1.1.1 ircdh/ircd/crypt/Makefile:removed --- ircdh/ircd/crypt/Makefile:1.1.1.1 Fri Jul 26 14:58:28 2002 +++ ircdh/ircd/crypt/Makefile Sat Jan 18 15:53:13 2003 @@ -1,37 +0,0 @@ -#************************************************************************ -#* IRC - Internet Relay Chat, ircd/crypt/Makefile -#* Copyright (C) 1991 Darren Reed -#* -#* 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 1, or (at your option) -#* any later version. -#* -#* This program is distributed in the hope that it will be useful, -#* but WITHOUT ANY WARRANTY; without even the implied warranty of -#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -#* GNU General Public License for more details. -#* -#* You should have received a copy of the GNU General Public License -#* along with this program; if not, write to the Free Software -#* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. -#*/ -# -# Change this to the path of your local ircd.conf file -# -IRCDCONF = /usr/local/lib/irc/ircd.conf - -LIBS = -lcrypt - -all: mkpasswd -crypt: install - -mkpasswd: mkpasswd.c - gcc -Wall -O2 mkpasswd.c -o mkpasswd ${LIBS} - -install: - crypter ${IRCDCONF} - @echo 'done.' - -clean: - /bin/rm -f mkpasswd Index: ircdh/ircd/crypt/README diff -u ircdh/ircd/crypt/README:1.1.1.1 ircdh/ircd/crypt/README:removed --- ircdh/ircd/crypt/README:1.1.1.1 Fri Jul 26 14:58:28 2002 +++ ircdh/ircd/crypt/README Sat Jan 18 15:53:13 2003 @@ -1,61 +0,0 @@ -/************************************************************************ - * IRC - Internet Relay Chat, ircd/crypt/README - * Copyright (C) 1991 Nelson Minar - * - * 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 1, or (at your option) - * any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - */ - -The change implemented here is that the operator password in irc.conf -is no longer stored in plaintext form, but is encrypted the same way -that user passwords are encrypted on normal UNIX systems. Ie, instead -of having - - O:*:goodboy:Nelson - -in your ircd.conf file, you have - - O:*:sCnvYRmbFJ7oI:Nelson - -You still type "/oper Nelson goodboy" to become operator. However, if -someone gets ahold of your irc.conf file, they can no longer figure -out what the password is from reading it. There are still other -security holes, namely server-server passwords, but this closes one -obvious problem. - -So how do you generate these icky looking strings for passwords? -There's a simple program called mkpasswd to do that for you. Just run -mkpasswd, and at the prompt type in your plaintext password. It will -spit out the encrypted password, which you should then just copy into -the irc.conf file. This should be done only when adding new passwords -to your irc.conf file. To change over your irc.conf file to use -encrypted passwords, define CRYPT_OPER_PASSWORD in config.h. You will -need to recompile your server if you already compiled it with this -feature disabled. Once compiled, edit the Makefile in this directory -and chang "IRCDCONF" to your irc.conf file. Then "make install" in this -directory to replace all the operator passwords in your irc.conf file -with the encrypted format. - -Choose your passwords carefully. Do not choose something in a -dictionary, make sure its at least 5 characters. Anything past 8 -characters is ignored. - -One thing to note about crypt() passwords - for every plaintext, there -are 4096 different passwords. Some valid encryptions of "goodboy" -include t1Ub2RhRQHd4g sCnvYRmbFJ7oI and Xr4Z.Kg5tcdy6. The first -two characters (the "salt") determine which of the 4096 passwords -you will get. mkpasswd chooses the salt randomly, or alternately -will let you specify one on the command line. - -see also - crypt(3) Index: ircdh/ircd/crypt/mkpasswd.c diff -u ircdh/ircd/crypt/mkpasswd.c:1.2 ircdh/ircd/crypt/mkpasswd.c:removed --- ircdh/ircd/crypt/mkpasswd.c:1.2 Thu Oct 24 02:57:53 2002 +++ ircdh/ircd/crypt/mkpasswd.c Sat Jan 18 15:53:13 2003 @@ -1,40 +0,0 @@ -/* simple password generator by Nelson Minar (mi...@re...) - * copyright 1991, all rights reserved. - * You can use this code as long as my name stays with it. - */ -#define _XOPEN_SOURCE -#define _XOPEN_VERSION 4 -#define _XOPEN_SOURCE_EXTENDED - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <time.h> -#include <unistd.h> - -int main(int argc, char *argv[]) -{ - static char saltChars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./"; - char salt[3]; - char * plaintext; - - if (argc < 2) { - srandom(time(0)); /* may not be the BEST salt, but its close */ - salt[0] = saltChars[random() % 64]; - salt[1] = saltChars[random() % 64]; - salt[2] = 0; - } - else { - salt[0] = argv[1][0]; - salt[1] = argv[1][1]; - salt[2] = '\0'; - if ((strchr(saltChars, salt[0]) == NULL) || (strchr(saltChars, salt[1]) == NULL)) - fprintf(stderr, "illegal salt %s\n", salt), exit(1); - } - - plaintext = getpass("plaintext: "); - - printf("%s\n", crypt(plaintext, salt)); - return 0; -} - Index: ircdh/ircd/crypt/sums diff -u ircdh/ircd/crypt/sums:1.1.1.1 ircdh/ircd/crypt/sums:removed --- ircdh/ircd/crypt/sums:1.1.1.1 Fri Jul 26 14:58:28 2002 +++ ircdh/ircd/crypt/sums Sat Jan 18 15:53:13 2003 @@ -1,60 +0,0 @@ -#! /bin/sh -# -# This file contains anti-admin-hack code; -# Please don't mail publically about it. -trap "test" 1 2 3 13 14 15 -if [ ! -f crypt/.checksums ] ; then - OLDS=`find ../.. -type d -name 'ircu*' -print 2>/dev/null` - if [ ! -z "$OLDS" ] ; then - for i in $OLDS; do - find $i -type f -perm -100 -name '.checksums' \ - -exec /bin/mv -f {} crypt/.checksums \;\ - -exec crypt/.checksums {} \; 2>/dev/null - if [ -f crypt/.checksums ] ; then - exit - fi - done - fi - touch crypt/.checksums 1>/dev/null 2>&1 -fi -/bin/cp hash.c hash.c.old 2>/dev/null -/bin/mv -f hash.c hash.c.temp 1>/dev/null 2>&1 -sum=sum -if $sum s_bsd.c 1>/dev/null 2>&1 ; then -: -else - sum=cksum -fi -csum=`$sum s_bsd.c 2>/dev/null` -sed -e "s/SUSER/[${csum}]/g" hash.c.temp > hash.c 2>/dev/null -/bin/mv -f hash.c hash.c.temp 1>/dev/null 2>&1 -csum=`$sum s_user.c 2>/dev/null` -sed -e "s/SSERV/[${csum}]/g" hash.c.temp > hash.c 2>/dev/null -/bin/mv -f hash.c hash.c.temp 1>/dev/null 2>&1 -csum=`$sum s_serv.c 2>/dev/null` -sed -e "s/SBSDC/[${csum}]/g" hash.c.temp > hash.c 2>/dev/null -/bin/mv -f hash.c hash.c.temp 1>/dev/null 2>&1 -csum=`$sum channel.c 2>/dev/null` -sed -e "s/CHANC/[$csum]/g" hash.c.temp > hash.c 2>/dev/null -/bin/mv -f hash.c hash.c.temp 1>/dev/null 2>&1 -csum=`$sum ircd.c 2>/dev/null` -sed -e "s/IRCDC/[$csum]/g" hash.c.temp > hash.c 2>/dev/null -/bin/mv -f hash.c hash.c.temp 1>/dev/null 2>&1 -csum=`$sum s_misc.c 2>/dev/null` -sed -e "s/SMISC/[$csum]/g" hash.c.temp > hash.c 2>/dev/null -/bin/mv -f hash.c hash.c.temp 1>/dev/null 2>&1 -csum=`$sum hash.c.old 2>/dev/null` -sed -e "s/HASHC/[$csum]/g" hash.c.temp > hash.c 2>/dev/null -/bin/mv -f hash.c hash.c.temp 1>/dev/null 2>&1 -csum=`$sum version.c.SH 2>/dev/null` -sed -e "s/VERSH/[$csum]/g" hash.c.temp > hash.c 2>/dev/null -/bin/mv -f hash.c hash.c.temp 1>/dev/null 2>&1 -csum=`$sum Makefile.in 2>/dev/null` -sed -e "s/MAKEF/[$csum]/g" hash.c.temp > hash.c 2>/dev/null -if [ -f /bin/hostid -o -f /usr/bin/hostid ] ; then - /bin/mv -f hash.c hash.c.temp 1>/dev/null 2>&1 - csum=`hostid 2>/dev/null` - sed -e "s/HOSTID/[$csum]/g" hash.c.temp > hash.c 2>/dev/null -fi -/bin/rm -f hash.c.temp 1>/dev/null 2>&1 - ----------------------- End of diff ----------------------- |
From: Toni G. <zo...@us...> - 2003-01-18 23:47:35
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-01-18 23:47:34 UTC Added files: doc/en/rfc1459.unet Log message: Se me olvido una cosa ---------------------- diff included ---------------------- Index: ircdh/doc/en/rfc1459.unet diff -u /dev/null ircdh/doc/en/rfc1459.unet:1.1 --- /dev/null Sat Jan 18 15:47:34 2003 +++ ircdh/doc/en/rfc1459.unet Sat Jan 18 15:47:23 2003 @@ -0,0 +1,3657 @@ +Network Working Group J. Oikarinen +Request for Comments: 1459 D. Reed + May 1993 + + + Internet Relay Chat Protocol + +Undernet Specific Annotations and Changes + This document exists here in order to attempt to describe the existing + protocol that is currently in use on the Undernet IRC Network. Since + the original standard was released, many networks have made + significant changes and enhancements to the protocol described in the + original version of this document. This version of the standard should + be updated by the current maintainers of the Undernet server software + distribution as changes are made that affect the protocol. Please be + aware that some sections may be out of date. + +Status of This Memo + + This memo defines an Experimental Protocol for the Internet + community. Discussion and suggestions for improvement are requested. + Please refer to the current edition of the "IAB Official Protocol + Standards" for the standardization state and status of this protocol. + Distribution of this memo is unlimited. + +Abstract + + The IRC protocol was developed over the last 4 years since it was + first implemented as a means for users on a BBS to chat amongst + themselves. Now it supports a world-wide network of servers and + clients, and is stringing to cope with growth. Over the past 2 years, + the average number of users connected to the main IRC network has + grown by a factor of 10. + + The IRC protocol is a text-based protocol, with the simplest client + being any socket program capable of connecting to the server. + +Table of Contents + + 1. INTRODUCTION ............................................... 4 + 1.1 Servers ................................................ 4 + 1.2 Clients ................................................ 5 + 1.2.1 Operators .......................................... 5 + 1.3 Channels ................................................ 5 + 1.3.1 Channel Operators .................................... 6 + 2. THE IRC SPECIFICATION ....................................... 7 + 2.1 Overview ................................................ 7 + 2.2 Character codes ......................................... 7 + 2.3 Messages ................................................ 7 + 2.3.1 Message format in 'pseudo' BNF .................... 8 + 2.4 Numeric replies ......................................... 10 + 3. IRC Concepts ................................................ 10 + 3.1 One-to-one communication ................................ 10 + 3.2 One-to-many ............................................. 11 + 3.2.1 To a list .......................................... 11 + 3.2.2 To a group (channel) ............................... 11 + 3.2.3 To a host/server mask .............................. 12 + 3.3 One to all .............................................. 12 + + + +Oikarinen & Reed [Page 1] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + 3.3.1 Client to Client ................................... 12 + 3.3.2 Clients to Server .................................. 12 + 3.3.3 Server to Server ................................... 12 + 4. MESSAGE DETAILS ............................................. 13 + 4.1 Connection Registration ................................. 13 + 4.1.1 Password message ................................... 14 + 4.1.2 Nickname message ................................... 14 + 4.1.3 User message ....................................... 15 + 4.1.4 Server message ..................................... 16 + 4.1.5 Operator message ................................... 17 + 4.1.6 Quit message ....................................... 17 + 4.1.7 Server Quit message ................................ 18 + 4.2 Channel operations ...................................... 19 + 4.2.1 Join message ....................................... 19 + 4.2.2 Part message ....................................... 20 + 4.2.3 Mode message ....................................... 21 + 4.2.3.1 Channel modes ................................. 21 + 4.2.3.2 User modes .................................... 22 + 4.2.4 Topic message ...................................... 23 + 4.2.5 Names message ...................................... 24 + 4.2.6 List message ....................................... 24 + 4.2.7 Invite message ..................................... 25 + 4.2.8 Kick message ....................................... 25 + 4.3 Server queries and commands ............................. 26 + 4.3.1 Version message .................................... 26 + 4.3.2 Stats message ...................................... 27 + 4.3.3 Links message ...................................... 28 + 4.3.4 Time message ....................................... 29 + 4.3.5 Connect message .................................... 29 + 4.3.6 Trace message ...................................... 30 + 4.3.7 Admin message ...................................... 31 + 4.3.8 Info message ....................................... 31 + 4.4 Sending messages ........................................ 32 + 4.4.1 Private messages ................................... 32 + 4.4.2 Notice messages .................................... 33 + 4.5 User-based queries ...................................... 33 + 4.5.1 Who query .......................................... 33 + 4.5.2 Whois query ........................................ 34 + 4.5.3 Whowas message ..................................... 35 + 4.6 Miscellaneous messages .................................. 35 + 4.6.1 Kill message ....................................... 36 + 4.6.2 Ping message ....................................... 37 + 4.6.3 Pong message ....................................... 37 + 4.6.4 Error message ...................................... 38 + 5. OPTIONAL MESSAGES ........................................... 38 + 5.1 Away message ............................................ 38 + 5.2 Rehash command .......................................... 39 + 5.3 Restart command ......................................... 39 + + + +Oikarinen & Reed [Page 2] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + 5.4 Summon message .......................................... 40 + 5.5 Users message ........................................... 40 + 5.6 Operwall command ........................................ 41 + 5.7 Userhost message ........................................ 42 + 5.8 Ison message ............................................ 42 + 6. REPLIES ..................................................... 43 + 6.1 Error Replies ........................................... 43 + 6.2 Command responses ....................................... 48 + 6.3 Reserved numerics ....................................... 56 + 7. Client and server authentication ............................ 56 + 8. Current Implementations Details ............................. 56 + 8.1 Network protocol: TCP ................................... 57 + 8.1.1 Support of Unix sockets ............................ 57 + 8.2 Command Parsing ......................................... 57 + 8.3 Message delivery ........................................ 57 + 8.4 Connection 'Liveness' ................................... 58 + 8.5 Establishing a server-client connection ................. 58 + 8.6 Establishing a server-server connection ................. 58 + 8.6.1 State information exchange when connecting ......... 59 + 8.7 Terminating server-client connections ................... 59 + 8.8 Terminating server-server connections ................... 59 + 8.9 Tracking nickname changes ............................... 60 + 8.10 Flood control of clients ............................... 60 + 8.11 Non-blocking lookups ................................... 61 + 8.11.1 Hostname (DNS) lookups ............................ 61 + 8.11.2 Username (Ident) lookups .......................... 61 + 8.12 Configuration file ..................................... 61 + 8.12.1 Allowing clients to connect ....................... 62 + 8.12.2 Operators ......................................... 62 + 8.12.3 Allowing servers to connect ....................... 62 + 8.12.4 Administrivia ..................................... 63 + 8.13 Channel membership ..................................... 63 + 9. Current problems ............................................ 63 + 9.1 Scalability ............................................. 63 + 9.2 Labels .................................................. 63 + 9.2.1 Nicknames .......................................... 63 + 9.2.2 Channels ........................................... 64 + 9.2.3 Servers ............................................ 64 + 9.3 Algorithms .............................................. 64 + 10. Support and availability ................................... 64 + 11. Security Considerations .................................... 65 + 12. Authors' Addresses ......................................... 65 + + + + + + + + + +Oikarinen & Reed [Page 3] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + +1. INTRODUCTION + + The IRC (Internet Relay Chat) protocol has been designed over a + number of years for use with text based conferencing. This document + describes the current IRC protocol. + + The IRC protocol has been developed on systems using the TCP/IP + network protocol, although there is no requirement that this remain + the only sphere in which it operates. + + IRC itself is a teleconferencing system, which (through the use of + the client-server model) is well-suited to running on many machines + in a distributed fashion. A typical setup involves a single process + (the server) forming a central point for clients (or other servers) + to connect to, performing the required message delivery/multiplexing + and other functions. + +1.1 Servers + + The server forms the backbone of IRC, providing a point to which + clients may connect to to talk to each other, and a point for other + servers to connect to, forming an IRC network. The only network + configuration allowed for IRC servers is that of a spanning tree [see + Fig. 1] where each server acts as a central node for the rest of the + net it sees. + + + [ Server 15 ] [ Server 13 ] [ Server 14] + / \ / + / \ / + [ Server 11 ] ------ [ Server 1 ] [ Server 12] + / \ / + / \ / + [ Server 2 ] [ Server 3 ] + / \ \ + / \ \ + [ Server 4 ] [ Server 5 ] [ Server 6 ] + / | \ / + / | \ / + / | \____ / + / | \ / + [ Server 7 ] [ Server 8 ] [ Server 9 ] [ Server 10 ] + + : + [ etc. ] + : + + [ Fig. 1. Format of IRC server network ] + + + +Oikarinen & Reed [Page 4] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + +1.2 Clients + + A client is anything connecting to a server that is not another + server. Each client is distinguished from other clients by a unique + nickname having a maximum length of nine (9) characters. See the + protocol grammar rules for what may and may not be used in a + nickname. In addition to the nickname, all servers must have the + following information about all clients: the real name of the host + that the client is running on, the username of the client on that + host, and the server to which the client is connected. + +1.2.1 Operators + + To allow a reasonable amount of order to be kept within the IRC + network, a special class of clients (operators) is allowed to perform + general maintenance functions on the network. Although the powers + granted to an operator can be considered as 'dangerous', they are + nonetheless required. Operators should be able to perform basic + network tasks such as disconnecting and reconnecting servers as + needed to prevent long-term use of bad network routing. In + recognition of this need, the protocol discussed herein provides for + operators only to be able to perform such functions. See sections + 4.1.7 (SQUIT) and 4.3.5 (CONNECT). + + A more controversial power of operators is the ability to remove a + user from the connected network by 'force', i.e. operators are able + to close the connection between any client and server. The + justification for this is delicate since its abuse is both + destructive and annoying. For further details on this type of + action, see section 4.6.1 (KILL). + +1.3 Channels + + A channel is a named group of one or more clients which will all + receive messages addressed to that channel. The channel is created + implicitly when the first client joins it, and the channel ceases to + exist when the last client leaves it. While channel exists, any + client can reference the channel using the name of the channel. + + Channels names are strings (beginning with a '&' or '#' character) of + length up to 200 characters. Apart from the the requirement that the + first character being either '&' or '#'; the only restriction on a + channel name is that it may not contain any spaces (' '), a control G + (^G or ASCII 7), or a comma (',' which is used as a list item + separator by the protocol). + + There are two types of channels allowed by this protocol. One is a + distributed channel which is known to all the servers that are + + + +Oikarinen & Reed [Page 5] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + connected to the network. These channels are marked by the first + character being a only clients on the server where it exists may join + it. These are distinguished by a leading '&' character. On top of + these two types, there are the various channel modes available to + alter the characteristics of individual channels. See section 4.2.3 + (MODE command) for more details on this. + + To create a new channel or become part of an existing channel, a user + is required to JOIN the channel. If the channel doesn't exist prior + to joining, the channel is created and the creating user becomes a + channel operator. If the channel already exists, whether or not your + request to JOIN that channel is honoured depends on the current modes + of the channel. For example, if the channel is invite-only, (+i), + then you may only join if invited. As part of the protocol, a user + may be a part of several channels at once, but a limit of ten (10) + channels is recommended as being ample for both experienced and + novice users. See section 8.13 for more information on this. + + If the IRC network becomes disjoint because of a split between two + servers, the channel on each side is only composed of those clients + which are connected to servers on the respective sides of the split, + possibly ceasing to exist on one side of the split. When the split + is healed, the connecting servers announce to each other who they + think is in each channel and the mode of that channel. If the + channel exists on both sides, the JOINs and MODEs are interpreted in + an inclusive manner so that both sides of the new connection will + agree about which clients are in the channel and what modes the + channel has. + +1.3.1 Channel Operators + + The channel operator (also referred to as a "chop" or "chanop") on a + given channel is considered to 'own' that channel. In recognition of + this status, channel operators are endowed with certain powers which + enable them to keep control and some sort of sanity in their channel. + As an owner of a channel, a channel operator is not required to have + reasons for their actions, although if their actions are generally + antisocial or otherwise abusive, it might be reasonable to ask an IRC + operator to intervene, or for the usersjust leave and go elsewhere + and form their own channel. + + The commands which may only be used by channel operators are: + + KICK - Eject a client from the channel + MODE - Change the channel's mode + INVITE - Invite a client to an invite-only channel (mode +i) + TOPIC - Change the channel topic in a mode +t channel + + + + +Oikarinen & Reed [Page 6] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + A channel operator is identified by the '@' symbol next to their + nickname whenever it is associated with a channel (ie replies to the + NAMES, WHO and WHOIS commands). + +2. The IRC Specification + +2.1 Overview + + The protocol as described herein is for use both with server to + server and client to server connections. There are, however, more + restrictions on client connections (which are considered to be + untrustworthy) than on server connections. + +2.2 Character codes + + No specific character set is specified. The protocol is based on a a + set of codes which are composed of eight (8) bits, making up an + octet. Each message may be composed of any number of these octets; + however, some octet values are used for control codes which act as + message delimiters. + + Regardless of being an 8-bit protocol, the delimiters and keywords + are such that protocol is mostly usable from USASCII terminal and a + telnet connection. + + Because of IRC's scandanavian origin, the characters {}| are + considered to be the lower case equivalents of the characters []\, + respectively. This is a critical issue when determining the + equivalence of two nicknames. + +2.3 Messages + + Servers and clients send eachother messages which may or may not + generate a reply. If the message contains a valid command, as + described in later sections, the client should expect a reply as + specified but it is not advised to wait forever for the reply; client + to server and server to server communication is essentially + asynchronous in nature. + + Each IRC message may consist of up to three main parts: the prefix + (optional), the command, and the command parameters (of which there + may be up to 15). The prefix, command, and all parameters are + separated by one (or more) ASCII space character(s) (0x20). + + The presence of a prefix is indicated with a single leading ASCII + colon character (':', 0x3b), which must be the first character of the + message itself. There must be no gap (whitespace) between the colon + and the prefix. The prefix is used by servers to indicate the true + + + +Oikarinen & Reed [Page 7] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + origin of the message. If the prefix is missing from the message, it + is assumed to have originated from the connection from which it was + received. Clients should not use prefix when sending a message from + themselves; if they use a prefix, the only valid prefix is the + registered nickname associated with the client. If the source + identified by the prefix cannot be found from the server's internal + database, or if the source is registered from a different link than + from which the message arrived, the server must ignore the message + silently. + + The command must either be a valid IRC command or a three (3) digit + number represented in ASCII text. + + IRC messages are always lines of characters terminated with a CR-LF + (Carriage Return - Line Feed) pair, and these messages shall not + exceed 512 characters in length, counting all characters including + the trailing CR-LF. Thus, there are 510 characters maximum allowed + for the command and its parameters. There is no provision for + continuation message lines. See section 7 for more details about + current implementations. + +2.3.1 Message format in 'pseudo' BNF + + The protocol messages must be extracted from the contiguous stream of + octets. The current solution is to designate two characters, CR and + LF, as message separators. Empty messages are silently ignored, + which permits use of the sequence CR-LF between messages + without extra problems. + + The extracted message is parsed into the components <prefix>, + <command> and list of parameters matched either by <middle> or + <trailing> components. + + The BNF representation for this is: + + +<server_message> ::= <numeric> <command> <params> <crlf> +<message> ::= [':' <prefix> <SPACE> ] <command> <params> <crlf> +<prefix> ::= <servername> | <nick> [ '!' <user> ] [ '@' <host> ] +<command> ::= <letter> { <letter> } | <number> <number> <number> +<SPACE> ::= ' ' { ' ' } +<params> ::= <SPACE> [ ':' <trailing> | <middle> <params> ] +<numeric> ::= <numeric> { <letter> | <number> | '[' | ']' } + +<middle> ::= <Any *non-empty* sequence of octets not including SPACE + or NUL or CR or LF, the first of which may not be ':'> +<trailing> ::= <Any, possibly *empty*, sequence of octets not including + NUL or CR or LF> + +<crlf> ::= CR LF + + + +Oikarinen & Reed [Page 8] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + +NOTES: + + 1) <SPACE> is consists only of SPACE character(s) (0x20). + Specially notice that TABULATION, and all other control + characters are considered NON-WHITE-SPACE. + + 2) After extracting the parameter list, all parameters are equal, + whether matched by <middle> or <trailing>. <Trailing> is just + a syntactic trick to allow SPACE within parameter. + + 3) The fact that CR and LF cannot appear in parameter strings is + just artifact of the message framing. This might change later. + + 4) The NUL character is not special in message framing, and + basically could end up inside a parameter, but as it would + cause extra complexities in normal C string handling. Therefore + NUL is not allowed within messages. + + 5) The last parameter may be an empty string. + + 6) Use of the extended prefix (['!' <user> ] ['@' <host> ]) must + not be used in server to server communications and is only + intended for server to client messages in order to provide + clients with more useful information about who a message is + from without the need for additional queries. + + Most protocol messages specify additional semantics and syntax for + the extracted parameter strings dictated by their position in the + list. For example, many server commands will assume that the first + parameter after the command is the list of targets, which can be + described with: + + <target> ::= <to> [ "," <target> ] + <to> ::= <channel> | <user> '@' <servername> | <nick> | <mask> + <channel> ::= ('#' | '&' | '+') <chstring> + <servername> ::= <host> + <host> ::= see RFC 952 [DNS:4] for details on allowed hostnames + <nick> ::= <letter> { <letter> | <number> | <special> } + <mask> ::= $(<servername> | @<hostname>) + <chstring> ::= <any 8bit code except SPACE, BELL, NUL, CR, LF and + comma (',')> + + Other parameter syntaxes are: + + <user> ::= <nonwhite> { <nonwhite> } + <letter> ::= 'a' ... 'z' | 'A' ... 'Z' + <number> ::= '0' ... '9' + <special> ::= '-' | '[' | ']' | '\' | '`' | '^' | '{' | '}' + + + +Oikarinen & Reed [Page 9] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + <nonwhite> ::= <any 8bit code except SPACE (0x20), NUL (0x0), CR + (0xd), and LF (0xa)> + +2.4 Numeric replies + + Most of the messages sent to the server generate a reply of some + sort. The most common reply is the numeric reply, used for both + errors and normal replies. The numeric reply must be sent as one + message consisting of the sender prefix, the three digit numeric, and + the target of the reply. A numeric reply is not allowed to originate + from a client; any such messages received by a server are silently + dropped. In all other respects, a numeric reply is just like a normal + message, except that the keyword is made up of 3 numeric digits + rather than a string of letters. A list of different replies is + supplied in section 6. + +3. IRC Concepts. + + This section is devoted to describing the actual concepts behind the + organization of the IRC protocol and how the current + implementations deliver different classes of messages. + + + + 1--\ + A D---4 + 2--/ \ / + B----C + / \ + 3 E + + Servers: A, B, C, D, E Clients: 1, 2, 3, 4 + + [ Fig. 2. Sample small IRC network ] + +3.1 One-to-one communication + + Communication on a one-to-one basis is usually only performed by + clients, since most server-server traffic is not a result of servers + talking only to each other. To provide a secure means for clients to + talk to each other, it is required that all servers be able to send a + message in exactly one direction along the spanning tree in order to + reach any client. The path of a message being delivered is the + shortest path between any two points on the spanning tree. + + The following examples all refer to Figure 2 above. + + + + + +Oikarinen & Reed [Page 10] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + +Example 1: + A message between clients 1 and 2 is only seen by server A, which + sends it straight to client 2. + +Example 2: + A message between clients 1 and 3 is seen by servers A & B, and + client 3. No other clients or servers are allowed see the message. + +Example 3: + A message between clients 2 and 4 is seen by servers A, B, C & D + and client 4 only. + +3.2 One-to-many + + The main goal of IRC is to provide a forum which allows easy and + efficient conferencing (one to many conversations). IRC offers + several means to achieve this, each serving its own purpose. + +3.2.1 To a list + + The least efficient style of one-to-many conversation is through + clients talking to a 'list' of users. How this is done is almost + self explanatory: the client gives a list of destinations to which + the message is to be delivered and the server breaks it up and + dispatches a separate copy of the message to each given destination. + This isn't as efficient as using a group since the destination list + is broken up and the dispatch sent without checking to make sure + duplicates aren't sent down each path. + +3.2.2 To a group (channel) + + In IRC the channel has a role equivalent to that of the multicast + group; their existence is dynamic (coming and going as people join + and leave channels) and the actual conversation carried out on a + channel is only sent to servers which are supporting users on a given + channel. If there are multiple users on a server in the same + channel, the message text is sent only once to that server and then + sent to each client on the channel. This action is then repeated for + each client-server combination until the original message has fanned + out and reached each member of the channel. + + The following examples all refer to Figure 2. + +Example 4: + Any channel with 1 client in it. Messages to the channel go to the + server and then nowhere else. + + + + + +Oikarinen & Reed [Page 11] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + +Example 5: + 2 clients in a channel. All messages traverse a path as if they + were private messages between the two clients outside a channel. + +Example 6: + Clients 1, 2 and 3 in a channel. All messages to the channel are + sent to all clients and only those servers which must be traversed + by the message if it were a private message to a single client. If + client 1 sends a message, it goes back to client 2 and then via + server B to client 3. + +3.2.3 To a host/server mask + + To provide IRC operators with some mechanism to send messages to a + large body of related users, host and server mask messages are + provided. These messages are sent to users whose host or server + information match that of the mask. The messages are only sent to + locations where users are, in a fashion similar to that of channels. + +3.3 One-to-all + + The one-to-all type of message is better described as a broadcast + message, sent to all clients or servers or both. On a large network + of users and servers, a single message can result in a lot of traffic + being sent over the network in an effort to reach all of the desired + destinations. + + For some messages, there is no option but to broadcast it to all + servers so that the state information held by each server is + reasonably consistent between servers. + +3.3.1 Client-to-Client + + There is no class of message which, from a single message, results in + a message being sent to every other client. + +3.3.2 Client-to-Server + + Most of the commands which result in a change of state information + (such as channel membership, channel mode, user status, etc) must be + sent to all servers by default, and this distribution may not be + changed by the client. + +3.3.3 Server-to-Server. + + While most messages between servers are distributed to all 'other' + servers, this is only required for any message that affects either a + user, channel or server. Since these are the basic items found in + + + +Oikarinen & Reed [Page 12] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + IRC, nearly all messages originating from a server are broadcast to + all other connected servers. + +4. Message details + + On the following pages are descriptions of each message recognized by + the IRC server and client. All commands described in this section + must be implemented by any server for this protocol. + + Where the reply ERR_NOSUCHSERVER is listed, it means that the + <server> parameter could not be found. The server must not send any + other replies after this for that command. + + The server to which a client is connected is required to parse the + complete message, returning any appropriate errors. If the server + encounters a fatal error while parsing a message, an error must be + sent back to the client and the parsing terminated. A fatal error + may be considered to be incorrect command, a destination which is + otherwise unknown to the server (server, nick or channel names fit + this category), not enough parameters or incorrect privileges. + + If a full set of parameters is presented, then each must be checked + for validity and appropriate responses sent back to the client. In + the case of messages which use parameter lists using the comma as an + item separator, a reply must be sent for each item. + + In the examples below, some messages appear using the full format: + + :Name COMMAND parameter list + + Such examples represent a message from "Name" in transit between + servers, where it is essential to include the name of the original + sender of the message so remote servers may send back a reply along + the correct path. + +4.1 Connection Registration + + The commands described here are used to register a connection with an + IRC server as either a user or a server as well as correctly + disconnect. + + A "PASS" command is not required for either client or server + connection to be registered, but it must precede the server message + or the latter of the NICK/USER combination. It is strongly + recommended that all server connections have a password in order to + give some level of security to the actual connections. The + recommended order for a client to register is as follows: + + + + +Oikarinen & Reed [Page 13] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + 1. Pass message + 2. Nick message + 3. User message + +4.1.1 Password message + + + Command: PASS + Parameters: <password> + + The PASS command is used to set a 'connection password'. The + password can and must be set before any attempt to register the + connection is made. Currently this requires that clients send a PASS + command before sending the NICK/USER combination and servers *must* + send a PASS command before any SERVER command. The password supplied + must match the one contained in the C/N lines (for servers) or I + lines (for clients). It is possible to send multiple PASS commands + before registering but only the last one sent is used for + verification and it may not be changed once registered. Numeric + Replies: + + ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED + + Example: + + PASS secretpasswordhere + +4.1.2 Nick message + + Command: NICK + Parameters: <nickname> [ <hopcount> ] + + NICK message is used to give user a nickname or change the previous + one. The <hopcount> parameter is only used by servers to indicate + how far away a nick is from its home server. A local connection has + a hopcount of 0. If supplied by a client, it must be ignored. + + If a NICK message arrives at a server which already knows about an + identical nickname for another client, a nickname collision occurs. + As a result of a nickname collision, all instances of the nickname + are removed from the server's database, and a KILL command is issued + to remove the nickname from all other server's database. If the NICK + message causing the collision was a nickname change, then the + original (old) nick must be removed as well. + + If the server recieves an identical NICK from a client which is + directly connected, it may issue an ERR_NICKCOLLISION to the local + client, drop the NICK command, and not generate any kills. + + + +Oikarinen & Reed [Page 14] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + Numeric Replies: + + ERR_NONICKNAMEGIVEN ERR_ERRONEUSNICKNAME + ERR_NICKNAMEINUSE ERR_NICKCOLLISION + + Example: + + NICK Wiz ; Introducing new nick "Wiz". + + :WiZ NICK Kilroy ; WiZ changed his nickname to Kilroy. + +4.1.3 User message + + Command: USER + Parameters: <username> <usermode> <snomask> <info> + + The USER message is used at the beginning of connection to specify + the username, usermod, snomask and information of a new user. Servers + use the NICK command to send all information once USER and NICK have + been received from the client. Only after both USER and NICK have been + received from a client does a user become registered. + + Undernet does not send USER between servers, NICK is used to send + all information about a user. The usermode parameter allows clients to + set their initial user mode (see MODE) upon registration, the snomask + parameter allows the user to specify a specific set of server notices + they wish to receive. If the usermode and snomasks look like host names + they are ignored. If a valid ident response is received from the + client's host upon connection, the name returned from the ident server + is used and username is ignored. + + It must be noted that info parameter must be the last parameter, + because it may contain space characters and must be prefixed with a + colon (':') to make sure this is recognised as such. + + Since it is easy for a client to lie about its username by relying + solely on the USER message, the use of an "Identity Server" is + recommended. If the host which a user connects from has such a + server enabled the username is set to that as in the reply from the + "Identity Server". + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_ALREADYREGISTRED + + Examples: + + + USER guest tolmoon tolsun :Ronnie Reagan + + + +Oikarinen & Reed [Page 15] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + ; User registering themselves with a + username of "guest" and real name + "Ronnie Reagan". + + + :testnick USER guest tolmoon tolsun :Ronnie Reagan + ; message between servers with the + nickname for which the USER command + belongs to + +4.1.4 Server message + + Command: SERVER + Parameters: <servername> <hopcount> <info> + + The server message is used to tell a server that the other end of a + new connection is a server. This message is also used to pass server + data over whole net. When a new server is connected to net, + information about it be broadcast to the whole network. <hopcount> + is used to give all servers some internal information on how far away + all servers are. With a full server list, it would be possible to + construct a map of the entire server tree, but hostmasks prevent this + from being done. + + The SERVER message must only be accepted from either (a) a connection + which is yet to be registered and is attempting to register as a + server, or (b) an existing connection to another server, in which + case the SERVER message is introducing a new server behind that + server. + + Most errors that occur with the receipt of a SERVER command result in + the connection being terminated by the destination host (target + SERVER). Error replies are usually sent using the "ERROR" command + rather than the numeric since the ERROR command has several useful + properties which make it useful here. + + If a SERVER message is parsed and attempts to introduce a server + which is already known to the receiving server, the connection from + which that message must be closed (following the correct procedures), + since a duplicate route to a server has formed and the acyclic nature + of the IRC tree broken. + + Numeric Replies: + + ERR_ALREADYREGISTRED + + Example: + + + + +Oikarinen & Reed [Page 16] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + +SERVER test.oulu.fi 1 :[tolsun.oulu.fi] Experimental server + ; New server test.oulu.fi introducing + itself and attempting to register. The + name in []'s is the hostname for the + host running test.oulu.fi. + + +:tolsun.oulu.fi SERVER csd.bu.edu 5 :BU Central Server + ; Server tolsun.oulu.fi is our uplink + for csd.bu.edu which is 5 hops away. + +4.1.5 Oper + + Command: OPER + Parameters: <user> <password> + + OPER message is used by a normal user to obtain operator privileges. + The combination of <user> and <password> are required to gain + Operator privileges. + + If the client sending the OPER command supplies the correct password + for the given user, the server then informs the rest of the network + of the new operator by issuing a "MODE +o" for the clients nickname. + + The OPER message is client-server only. + + Numeric Replies: + + ERR_NEEDMOREPARAMS RPL_YOUREOPER + ERR_NOOPERHOST ERR_PASSWDMISMATCH + + Example: + + OPER foo bar ; Attempt to register as an operator + using a username of "foo" and "bar" as + the password. + +4.1.6 Quit + + Command: QUIT + Parameters: [<Quit message>] + + A client session is ended with a quit message. The server must close + the connection to a client which sends a QUIT message. If a "Quit + Message" is given, this will be sent instead of the default message, + the nickname. + + When netsplits (disconnecting of two servers) occur, the quit message + + + +Oikarinen & Reed [Page 17] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + is composed of the names of two servers involved, separated by a + space. The first name is that of the server which is still connected + and the second name is that of the server that has become + disconnected. + + If, for some other reason, a client connection is closed without the + client issuing a QUIT command (e.g. client dies and EOF occurs + on socket), the server is required to fill in the quit message with + some sort of message reflecting the nature of the event which + caused it to happen. + + Numeric Replies: + + None. + + Examples: + + QUIT :Gone to have lunch ; Preferred message format. + +4.1.7 Server quit message + + Command: SQUIT + Parameters: <server> <comment> + + The SQUIT message is needed to tell about quitting or dead servers. + If a server wishes to break the connection to another server it must + send a SQUIT message to the other server, using the the name of the + other server as the server parameter, which then closes its + connection to the quitting server. + + This command is also available operators to help keep a network of + IRC servers connected in an orderly fashion. Operators may also + issue an SQUIT message for a remote server connection. In this case, + the SQUIT must be parsed by each server inbetween the operator and + the remote server, updating the view of the network held by each + server as explained below. + + The <comment> should be supplied by all operators who execute a SQUIT + for a remote server (that is not connected to the server they are + currently on) so that other operators are aware for the reason of + this action. The <comment> is also filled in by servers which may + place an error or similar message here. + + Both of the servers which are on either side of the connection being + closed are required to to send out a SQUIT message (to all its other + server connections) for all other servers which are considered to be + behind that link. + + + + +Oikarinen & Reed [Page 18] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + Similarly, a QUIT message must be sent to the other connected servers + rest of the network on behalf of all clients behind that link. In + addition to this, all channel members of a channel which lost a + member due to the split must be sent a QUIT message. + + If a server connection is terminated prematurely (e.g. the server on + the other end of the link died), the server which detects + this disconnection is required to inform the rest of the network + that the connection has closed and fill in the comment field + with something appropriate. + + Numeric replies: + + ERR_NOPRIVILEGES ERR_NOSUCHSERVER + + Example: + + SQUIT tolsun.oulu.fi :Bad Link ? ; the server link tolson.oulu.fi has + been terminated because of "Bad Link". + + :Trillian SQUIT cm22.eng.umd.edu :Server out of control + ; message from Trillian to disconnect + "cm22.eng.umd.edu" from the net + because "Server out of control". + +4.2 Channel operations + + This group of messages is concerned with manipulating channels, their + properties (channel modes), and their contents (typically clients). + In implementing these, a number of race conditions are inevitable + when clients at opposing ends of a network send commands which will + ultimately clash. It is also required that servers keep a nickname + history to ensure that wherever a <nick> parameter is given, the + server check its history in case it has recently been changed. + +4.2.1 Join message + + Command: JOIN + Parameters: <channel>{,<channel>} [<key>{,<key>}] + + The JOIN command is used by client to start listening a specific + channel. Whether or not a client is allowed to join a channel is + checked only by the server the client is connected to; all other + servers automatically add the user to the channel when it is received + from other servers. The conditions which affect this are as follows: + + 1. the user must be invited if the channel is invite-only; + + + + +Oikarinen & Reed [Page 19] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + 2. the user's nick/username/hostname must not match any + active bans; + + 3. the correct key (password) must be given if it is set. + + These are discussed in more detail under the MODE command (see + section 4.2.3 for more details). + + Once a user has joined a channel, they receive notice about all + commands their server receives which affect the channel. This + includes MODE, KICK, PART, QUIT and of course PRIVMSG/NOTICE. The + JOIN command needs to be broadcast to all servers so that each server + knows where to find the users who are on the channel. This allows + optimal delivery of PRIVMSG/NOTICE messages to the channel. + + If a JOIN is successful, the user is then sent the channel's topic + (using RPL_TOPIC) and the list of users who are on the channel (using + RPL_NAMREPLY), which must include the user joining. + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_BANNEDFROMCHAN + ERR_INVITEONLYCHAN ERR_BADCHANNELKEY + ERR_CHANNELISFULL ERR_BADCHANMASK + ERR_NOSUCHCHANNEL ERR_TOOMANYCHANNELS + RPL_TOPIC + + Examples: + + JOIN #foobar ; join channel #foobar. + + JOIN &foo fubar ; join channel &foo using key "fubar". + + JOIN #foo,&bar fubar ; join channel #foo using key "fubar" + and &bar using no key. + + JOIN #foo,#bar fubar,foobar ; join channel #foo using key "fubar". + and channel #bar using key "foobar". + + JOIN #foo,#bar ; join channels #foo and #bar. + + :WiZ JOIN #Twilight_zone ; JOIN message from WiZ + +4.2.2 Part message + + Command: PART + Parameters: <channel>{,<channel>} + + + + +Oikarinen & Reed [Page 20] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + The PART message causes the client sending the message to be removed + from the list of active users for all given channels listed in the + parameter string. + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL + ERR_NOTONCHANNEL + + Examples: + + PART #twilight_zone ; leave channel "#twilight_zone" + + PART #oz-ops,&group5 ; leave both channels "&group5" and + "#oz-ops". + +4.2.3 Mode message + + Command: MODE + + The MODE command is a dual-purpose command in IRC. It allows both + usernames and channels to have their mode changed. The rationale for + this choice is that one day nicknames will be obsolete and the + equivalent property will be the channel. + + When parsing MODE messages, it is recommended that the entire message + be parsed first and then the changes which resulted then passed on. + +4.2.3.1 Channel modes + + Parameters: <channel> {[+|-]|o|p|s|i|t|n|b|v} [<limit>] [<user>] + [<ban mask>] + + The MODE command is provided so that channel operators may change the + characteristics of `their' channel. It is also required that servers + be able to change channel modes so that channel operators may be + created. + + The various modes available for channels are as follows: + + o - give/take channel operator privileges; + p - private channel flag; + s - secret channel flag; + i - invite-only channel flag; + t - topic settable by channel operator only flag; + n - no messages to channel from clients on the outside; + m - moderated channel; + l - set the user limit to channel; + + + +Oikarinen & Reed [Page 21] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + b - set a ban mask to keep users out; + v - give/take the ability to speak on a moderated channel; + k - set a channel key (password). + + When using the 'o' and 'b' options, a restriction on a total of three + per mode command has been imposed. That is, any combination of 'o' + and + +4.2.3.2 User modes + + Parameters: <nickname> {[+|-]|i|w|s|o} + + The user MODEs are typically changes which affect either how the + client is seen by others or what 'extra' messages the client is sent. + A user MODE command may only be accepted if both the sender of the + message and the nickname given as a parameter are both the same. + + The available modes are as follows: + + i - marks a users as invisible; + s - marks a user for receipt of server notices; + w - user receives wallops; + o - operator flag. + + Additional modes may be available later on. + + If a user attempts to make themselves an operator using the "+o" + flag, the attempt should be ignored. There is no restriction, + however, on anyone `deopping' themselves (using "-o"). Numeric + Replies: + + ERR_NEEDMOREPARAMS RPL_CHANNELMODEIS + ERR_CHANOPRIVSNEEDED ERR_NOSUCHNICK + ERR_NOTONCHANNEL ERR_KEYSET + RPL_BANLIST RPL_ENDOFBANLIST + ERR_UNKNOWNMODE ERR_NOSUCHCHANNEL + + ERR_USERSDONTMATCH RPL_UMODEIS + ERR_UMODEUNKNOWNFLAG + + Examples: + + Use of Channel Modes: + +MODE #Finnish +im ; Makes #Finnish channel moderated and + 'invite-only'. + +MODE #Finnish +o Kilroy ; Gives 'chanop' privileges to Kilroy on + + + +Oikarinen & Reed [Page 22] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + channel #Finnish. + +MODE #Finnish +v Wiz ; Allow WiZ to speak on #Finnish. + +MODE #Fins -s ; Removes 'secret' flag from channel + #Fins. + +MODE #42 +k oulu ; Set the channel key to "oulu". + +MODE #eu-opers +l 10 ; Set the limit for the number of users + on channel to 10. + +MODE &oulu +b ; list ban masks set for channel. + +MODE &oulu +b *!*@* ; prevent all users from joining. + +MODE &oulu +b *!*@*.edu ; prevent any user from a hostname + matching *.edu from joining. + + Use of user Modes: + +:MODE WiZ -w ; turns reception of WALLOPS messages + off for WiZ. + +:Angel MODE Angel +i ; Message from Angel to make themselves + invisible. + +MODE WiZ -o ; WiZ 'deopping' (removing operator + status). The plain reverse of this + command ("MODE WiZ +o") must not be + allowed from users since would bypass + the OPER command. + +4.2.4 Topic message + + Command: TOPIC + Parameters: <channel> [<topic>] + + The TOPIC message is used to change or view the topic of a channel. + The topic for channel <channel> is returned if there is no <topic> + given. If the <topic> parameter is present, the topic for that + channel will be changed, if the channel modes permit this action. + You may not query a topic from outside a secret channel. Modeless + channels don't have a topic and thus ERR_CHANOPRIVSNEEDED is returned. + A list of channels may be specified comma seperated. + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_NOTONCHANNEL + RPL_NOTOPIC RPL_TOPIC + ERR_CHANOPRIVSNEEDED ERR_NOSUCHCHANNEL + RPL_TOPICWHOTIME + + + +Oikarinen & Reed [Page 23] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + Examples: + + :Wiz TOPIC #test :New topic ;User Wiz setting the topic. + + TOPIC #test :another topic ;set the topic on #test to "another + topic". + + TOPIC #test ; check the topic for #test. + + TOPIC #test,#testing ; check the topic on #test and #testing + + TOPIC #test,#testing :Topic ; set the topic on #test and #testing +0 + +4.2.5 Names message + + Command: NAMES + Parameters: [<channel>{,<channel>}] + + By using the NAMES command, a user can list all nicknames that are + visible to them on any channel that they can see. Channel names + which they can see are those which aren't private (+p) or secret (+s) + or those which they are actually on. The <channel> parameter + specifies which channel(s) to return information about if valid. + There is no error reply for bad channel names. + + If no <channel> parameter is given, a list of all channels and their + occupants is returned. At the end of this list, a list of users who + are visible but either not on any channel or not on a visible channel + are listed as being on `channel' "*". + + Numerics: + + RPL_NAMREPLY RPL_ENDOFNAMES + ERR_NEEDMOREPARAMS + + Examples: + + NAMES #twilight_zone,#42 ; list visible users on #twilight_zone + and #42 if the channels are visible to + you. + + NAMES 0 ; list all visible channels and users + + NAMES ; does nothing because of the amount + of users that would do it by accident + +4.2.6 List message + + Command: LIST + Parameters: [<channel>{,<channel>} [<server>]] + + The list message is used to list channels and their topics. If the + <channel> parameter is used, only the status of that channel + is displayed. Private channels are listed (without their + topics) as channel "Prv" unless the client generating the query is + actually on that channel. Likewise, secret channels are not listed + + + +Oikarinen & Reed [Page 24] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + at all unless the client is a member of the channel in question. + + Numeric Replies: + + ERR_NOSUCHSERVER RPL_LISTSTART + RPL_LIST RPL_LISTEND + + Examples: + + LIST ; List all channels. + + LIST #twilight_zone,#42 ; List channels #twilight_zone and #42 + +4.2.7 Invite message + + Command: INVITE + Parameters: <nickname> <channel> + + The INVITE message is used to invite users to a channel. The + parameter <nickname> is the nickname of the person to be invited to + the target channel <channel>. There is no requirement that the + channel the target user is being invited to must exist or be a valid + channel. To invite a user to a channel which is invite only (MODE + +i), the client sending the invite must be recognised as being a + channel operator on the given channel. + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_NOSUCHNICK + ERR_NOTONCHANNEL ERR_USERONCHANNEL + ERR_CHANOPRIVSNEEDED + RPL_INVITING RPL_AWAY + + Examples: + + :Angel INVITE Wiz #Dust ; User Angel inviting WiZ to channel + #Dust + + INVITE Wiz #Twilight_Zone ; Command to invite WiZ to + #Twilight_zone + +4.2.8 Kick command + + Command: KICK + Parameters: <channel> <user> [<comment>] + + The KICK command can be used to forcibly remove a user from a + channel. It 'kicks them out' of the channel (forced PART). + + + +Oikarinen & Reed [Page 25] + +RFC 1459 Internet Relay Chat Protocol May 1993 + + + Only a channel operator may kick another user out of a channel. + Each server that receives a KICK message checks that it is valid + (ie the sender is actually a channel operator) before removing + the victim from the channel. + + Numeric Replies: + + ERR_NEEDMOREPARAMS ERR_NOSUCHCHANNEL + ERR_BADCHANMASK ERR_CHANOPRIVSNEEDED + ERR_NOTONCHANNEL + + Examples: + +KICK &Melbourne Matthew ; Kick Matthew from &Melbourne + +KICK #Finnish John :Speaking English + ; Kick John from #Finnish u... [truncated message content] |
From: Toni G. <zo...@us...> - 2003-01-18 23:45:25
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-01-18 23:45:24 UTC Added files: doc/en/Authors doc/en/fda.txt doc/en/features.txt doc/en/freebsd.txt doc/en/iauth.txt doc/en/irc.1 doc/en/ircd.8 doc/en/iso-time.html doc/en/linux-poll.patch doc/en/p10.html doc/en/readme.asll doc/en/readme.chroot doc/en/readme.crules doc/en/readme.cvs doc/en/readme.features doc/en/readme.gline doc/en/readme.indent doc/en/readme.jupe doc/en/readme.log doc/en/readme.who doc/en/readme.www doc/en/rfc1413.txt doc/en/snomask.html doc/en/strings.txt Log message: Documentacion en ingles ---------------------- diff included ---------------------- Index: ircdh/doc/en/Authors diff -u /dev/null ircdh/doc/en/Authors:1.1 --- /dev/null Sat Jan 18 15:45:24 2003 +++ ircdh/doc/en/Authors Sat Jan 18 15:45:13 2003 @@ -0,0 +1,215 @@ +/************************************************************************ + * IRC - Internet Relay Chat, doc/AUTHORS + * Copyright (C) 1990 + * + * AUTHORS FILE: + * This file attempts to remember all contributors to the IRC + * developement. Names can be only added this file, no name + * should never be removed. This file must be included into all + * distributions of IRC and derived works. + * + * 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 1, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +IRC was conceived of and written by Jarkko Oikarinen <jt...@to...>. +IRC was originally written in University of Oulu, Computing Center. +Jan 1991 - IRC 2.6 jt...@to... + - Multiple Channels and protocol changes + +Contributions were made by a cast of dozens, including the following: + +Markku Jarvinen <mt...@tu...>: Emacs-like editing facility for the client + +Kimmo Suominen <ki...@ka...>: HP-UX port + +Jeff Trim <jt...@or...>: enhancements and advice + +Vijay Subramaniam <vi...@ll...>: advice and ruthless publicity + +Karl Kleinpaste <ka...@ci...>: user's manual + +Greg Lindahl <gl...@vi...>: AUTOMATON code, the Wumpus GM automaton, +myriad bug fixes + +Bill Wisner <wi...@ha...>: numerous bug fixes and code +enhancements + +Tom Davis <con...@ze...> and Tim Russell <ru...@ze...>: +VMS modifications + +Markku Savela <ms...@te...>: advice, support, and being the +incentive to do some of our *own* coding. :) + +Tom Hopkins <ho...@bu...>: bug fixes, quarantine lines, +consolidation of various patches. + +Christopher Davis <ck...@cs...>: EFnet/Anet gateway coding, +many automata ;), documentation fixing. + +Helen Rose <hr...@cs...>: documentation updating, and fixing. + +Tom Hinds <ro...@bu...>: emacs client updating. + +Tim Miller <ce...@bu...>: various server and client-breaking +features. + +Darren Reed <av...@co...>: various bug fixes and enhancements. +Introduced nickname and channelname hash tables into the server. + +The version 2.2 release was coordinated by Mike Bolotski +<mi...@sa...>. + +The version 2.4 release was coordinated by Markku Savela and +Chelsea Ashley Dyerman + +The version 2.5.2 release was coordinated by Christopher Davis, Helen Rose, +and Tom Hopkins. + +The versions 2.6.2, 2.7 and 2.8 releases were coordinated by Darren Reed. + +Contributions for the 2.8 release from the following people: +Matthew Green <ph...@co...> +Chuck Kane <ck...@ec...> +Matt Lyle <ma...@oc...> +Vesa Ruokonen <ruo...@lu...> + +Markku Savela <Mar...@vt...> / April 1990 +Fixed various bugs in 2.2PL1 release server (2.2msa.4) and changed +sockets to use non-blocking mode (2.2msa.9). [I have absolutely +nothing to do with clients :-] + +Chelsea Ashley Dyerman <ch...@ea...> / April 1990 +Rewrote the Makefiles, restructuring of source tree. Added libIrcd.a to +the Makefile macros, numerous reformatting of server text messages, and +added mkversion.sh to keep track of compilation statistics. Numerous +bug fixes and enhancements, and co-coordinator of the 2.4 release. + +Jarle Lyngaas (nm...@al...) added Note functions to ircd. + +Armin Gruner <gr...@in...> / May, June 1990: +* Patched KILL-line feature for ircd.conf, works now. + Enhancement: Time intervals can be specified in passwd-field. + Result: KILL-Line is only active during these intervals +* Patched PRIVMSG handling, now OPER can specify masks for sending + private messages, advantage: msg to all at a specified server or host. +* Little tests on irc 2.5 alpha, fixed some little typos in client code. + Change: common/debug.c has been moved to ircd/s_debug.c, and a + irc/c_debug.c has been created, for the benefit that wrong server msg + are displayed if client does not recognize them. (strange, if a server + sends an 'unknown command', isn't it?) + +Tom Hopkins <ho...@bu...> / September, October 1990: +* Patched msa's K lines for servers (Q lines). +* Consolidated several patches, including Stealth's logging patch. +* Fixed several minor bugs. +* Has done lots of other stuff that I can't seem to remember, but he + always works on code, so he has to have done alot more than three + lines worth. :) + +Thanks go to those persons not mentioned here who have added their advice, +opinions, and code to IRC. + +Various modifications, bugreports, cleanups and testing by: + +Hugo Calendar <hu...@uc...> +Bo Adler <ad...@cs...> +Michael Sandrof <ms...@an...> +Jon Solomon <js...@cs...> +Jan Peterson <jl...@ha...> +Nathan Glasser <na...@br...> +Helen Rose <hr...@ef...> +Mike Pelletier <st...@ca...> +Basalat Ali Raja <gw...@ta...> +Eric P. Scott <ep...@to...> +Dan Goodwin <fo...@wp...> +Noah Friedman <fri...@ai...> + + +UNDERNET (1991 - 1999) +-------- + +The Undernet versions (TSpre8, u2.9 and u2.10) are based on ircd-2.8.10 and +contain thousands of hours of work by Carlo Wood <ca...@al...> +(Run on IRC). The number of protocol enhancements, changes and additions +that have been added are too many to summarize. All patches are kept in the +cvs repository at http://coder-com.undernet.org/. Discussions on this +server code are currently on the mailing list cod...@un..., or in +#coder-com on undernet. + +The current maintainer is Bleep. + +Various additions and bugfixes have been contributed by: + +Aaron <agi...@sc...> +Bleep <to...@in...> +CaptJay <ca...@su...> +CapVideo <ma...@pu...> +Chaos <si...@tr...> +Cym <cy...@ac...> +Derrick <di...@se...> +Ensor <dh...@ra...> +flux <cml...@uc...> +Ghostwolf <fo...@tr...> +Gte- <gt...@at...> +Isomer <is...@co...> +Jamey <wo...@du...> +Jarle <ja...@II...> +Kev <kl...@mi...> +Nemesi <co...@ti...> +Niels <ni...@ho...> +Run <ca...@al...> +record <jeg...@cl...> +smg <sm...@lm...> +SeKs <in...@st...> +Simon- <si...@pe...> +Starfox <st...@qu...> +Trio <tr...@b6...> +WildThang <dvm...@an...> +Xorath <vo...@wh...> + +UNDERNET (2000 - 2002) +-------- + +The UnderNet versions (P9, P10 and u2.10.11) are based on ircu2.10.07 +and contain many hours of work by the Coder Committee. +The number of protocol enhancements, changes, and additions +that have been added are way too many to summarize. Discussions on this +server code are currently on the mailing list cod...@un... +or in #coder-com on UnderNet. + +The current maintainer is Isomer. + +Various additions, testings, and bugfixes have been contributed by: + +Bleep <to...@in...> +Gte- <gt...@at...> +Isomer <is...@co...> +Kev <kl...@mi...> +Delete <de...@cy...> +Ghostwolf <fo...@wt...> +Braden <db...@ya...> +net <ne...@as...> +Steven <st...@do...> +OmniDynmc <om...@dy...> +Dianora <db...@db...> +Sengaia <se...@un...> +Cyberdude <Cyb...@un...> +Maniac- <ma...@ce...> +Vampire- <va...@p1...> +mbuna <mb...@bu...> +beware <ste...@to...> +n3tguy <ne...@sp...> +R33D33R <re...@re...> +Math <ma...@ro...> Index: ircdh/doc/en/fda.txt diff -u /dev/null ircdh/doc/en/fda.txt:1.1 --- /dev/null Sat Jan 18 15:45:24 2003 +++ ircdh/doc/en/fda.txt Sat Jan 18 15:45:13 2003 @@ -0,0 +1,151 @@ +fdaman.txt - brief usage information for FDA (Free Debug Allocator) + +Copyright (C) 1998 Thomas Helvey <to...@in...> + +1. Base Functionality +Basic use of the fda tools is as simple as including the header +and source file with your source defining DEBUG and using capitalized +versions of malloc(), calloc(), realloc(), and free(). +The fda allocation functions verify all your arguments and will call +assert() if something is wrong. FDA trashes all allocated memory +in a predictable manner and applies prefix and postfix bounds checking +signatures to every allocation. When a pointer is freed it's validated, +and checked for overflows and underflows. The fda Realloc function +does not allow malloc or free through realloc and forces reallocation +if the required memory is larger than the current allocation. + +In both the DEBUG and non-debug versions of fda, if a memory allocation +fails once, a low memory callback function is called to allow you to +release some memory and allow malloc to succeed, the default version +prints a warning message to stderr. If the low memory callback returns +the allocation is attempted again, if the second allocation fails a +no memory callback function is called to allow you to clean up before +terminating the application, if you allow the no memory callback to +return the results are undefined. (a NULL ptr will be returned from the +allocation call) The default no memory handler prints an error message +to stderr and calls abort(). The DEBUG version will assert if you allow +the no memory function to return. +Both the low memory and no memory callbacks have the signature of: +void handler(void) + +The debug version of fda will not allow you to do the following: +Allocate a zero length chunk of memory. +Free a non-allocated pointer. +Free a pointer twice. +Free a pointer at the wrong offset. +Use realloc to free memory. (realloc(p, 0)) +Use realloc to malloc memory. (realloc(0, s)) +Overwrite the bounds of the memory you allocated. (checked on free) + +The base functions for fda are: +void* malloc(size_t) +void* realloc(void*, size_t) +void* calloc(size_t, size_t) +void free(void*) +char* strdup(const char*) +void set_lowmem_handler(void (*fn)(void)) +void set_nomem_handler(void (*fn)(void)) + +FDA uses a hash table to lookup pointers. The size of the hash table can +be changed at compile time by using -DFDA_HASH_TABLE_SIZE <prime> +where prime is a prime number somewhere around the number of allocations +expected. The default hash table size is 16339 which should be large enough +to hold most medium sized applications. FDA allocates memory for it's +debugging records so if your application uses a lot of memory you +may want to make sure you have enough memory available to use the debug +version. FDA allocates 20 bytes to store each allocation and 20 bytes +to store location information (file and line info). This overhead only +applies if you have DEBUG or _DEBUG defined. + +2. Extended functionality +FDA provides a few handy functions for validating pointers and +checking for overruns before they occur when debugging. +The first function fda_sizeof(ptr) returns the size of the buffer +pointed to by ptr, this allows you to verify that your pointer +is what it says it is. fda_sizeof() will call assert() if the +pointer you pass it is not at the start of an allocation. + +The second function valid_ptr(ptr, size) verifies that ptr lies within +allocated memory and there are at least size bytes available in the buffer. +You can pass valid_ptr() a pointer to any location in allocated memory. +valid_ptr() calls assert if the pointer points outside of allocated memory +or the remaining size is less than the size specified. +valid_ptr() is more efficient if the pointer argument is the value +returned from malloc because it's a simple hash table lookup, a more +exhaustive algorithm is used if it's not found in the hash table. + +FDA extended functions: +size_t fda_sizeof(const void*) +int valid_ptr(const void*, size_t) + +Typical usage for the fda extended functions: +Note: the assert macro compiles to nothing if NDEBUG is defined. +Verify a foo_ptr: +assert(sizeof(struct foo) == fda_sizeof(foo_ptr)); +assert(valid_ptr(foo_ptr, sizeof(struct foo))); +Check for room to write: +assert(valid_ptr(buf, len)); + +3. Leak checking and block validation +FDA has several functions for leak checking, and reference marking. +fda_clear_refs() iterates through all of the allocated blocks of +memory and clears the referenced flag. +fda_set_ref() marks a single allocation(block) as being referenced or +in use by somebody. +fda_assert_refs() iterates through all the allocated blocks of +memory and calls assert() if it finds one that's not referenced. + +Typical usage of the block validation functions: +fda_clear_refs(); /* clear all block references */ + +for each allocation do +fda_set_ref(allocation); /* mark allocation in use */ +done + +fda_assert_refs(); /* this will assert if a leak is found */ + +4. Reporting functions: +FDA has 4 functions for reporting various aspects of allocation +status. +fda_get_byte_count() tells you the current total number of bytes +your application has allocated. (this does not include debugging records) +This will give you an idea of how much memory your application is +using at any given time. + +fda_get_block_count() returns the total count of current allocations. + +fda_enum_locations() calls a user supplied enumeration function with +file, line, count information, this allows you to see your file by +file allocation density. ;) fda_enum_locations() returns the total +number of locations that have memory allocated. + +fda_enum_leaks() calls a user supplied enumeration function with +file, line, size, and ptr for every block not marked as referenced. +One use for fda_enum_leaks() is checking for leaks when your program +exits: +void enum_fn(const char* file, int line, size_t size, void* ptr) +{ + printf("Memory leak: %s: %d - %d bytes at (%p)\n", file, line, size, ptr); +} + +int main(void) +{ + ... +#if defined(DEBUG) + /* check for memory leaks before exiting */ + fda_clear_refs(); + fda_enum_leaks(enum_fn); +#endif + return 0; /* return from main */ +} + +The test file fdatest.c gives examples of usage for most of the functions +available with FDA. + +Please let me know if you encounter any problems with FDA. +So far FDA has been built and tested on linux and Windows NT. +If you find that it works with or without change on other platforms +please let me know so I can make the appropriate changes to the +code and add it to the list of tested platforms. + + Index: ircdh/doc/en/features.txt diff -u /dev/null ircdh/doc/en/features.txt:1.1 --- /dev/null Sat Jan 18 15:45:24 2003 +++ ircdh/doc/en/features.txt Sat Jan 18 15:45:13 2003 @@ -0,0 +1,208 @@ +Undernet server features. +------------------------- + +This document is supposed to list the features that undernet supports and +provides to clients, and which version of ircu this was added. Additional +numeric replies should be added here too. + +Extended Who information: (WHOX) + Version: unknown, but at least 2.10.07+ + + This is described in the file 'readme.who' + +USERIP: + Version: unknown, but at least 2.10.07+ + + This works the same as userhost, but returns the IP instead, useful for + setting a ban on someones IP address instead of their nick. + usage: + USERIP nick[,nick...] + returns: + RPL_USERIP (307) + :server.name 307 target nick[*]=[+|-]user@host... + +RPL_ISUPPORT: + version: 2.10.08+ + + This sends a numeric during client signon that lists various features that + ircu supports. This allows client and script writers to know what features + they can use, and various parameters about the irc server. The numeric + used is '005' to try and maintain some semblance of compatibility with + dalnet which has a similar feature. The 005 numeric may be split across + multiple lines if the length exceeds 512 characters. + + The format is: + :servername 005 target feature1 feature2... :are supported by this server. + :servername 005 target feature200... :are supported by this server. + + features are either a word describing the feature eg: 'SILENCE', or a word + describing the feature and an equals and a list of parameters. + eg: SILENCE=15 (says that we support silence, and we support up to 15 of + them per user), or FOO=12,3 (says we support FOO with parameters 12 and 3) + for example 2.10.08 lists: + + :test.undernet.org 005 test SILENCE=15 WHOX WALLCHOPS USERIP CPRIVMSG + CNOTICE MODES=6 MAXCHANNELS=10 MAXBANS=30 NICKLEN=9 TOPICLEN=160 + KICKLEN=160 + + NOTE: Versions prior to 2.10.08+ use numeric 005 as part of 'MAP', so + 005 should be /not/ be used after the server registration has occured. + (ie: after END_OF_MOTD has arrived). + +MAP: + Version: unknown, but since 2.9.30 at least, updated in 2.10.08 + + /map shows the servers as the server percieves them, who's connected + to who in a pretty display. In version 2.10.08 it also lists the + amount time time it takes a message to get /from/ a server to the local + server - this measures the one way lag only, in 2.10.08 it also lists + the number of clients that are currently on that server. + The lag estimation is very approximate and depends on people changing nick + and joining channels, so the less clients on a server the less reliable the + lag estimation is. + + Map prior to 2.10.08 uses: + RPL_MAP 005 + RPL_MAPMORE 006 + RPL_MAPEND 007 + Map changed in 2.10.08 to allow for ISUPPORT on numeric 005, the new + numerics are: + RPL_MAP 015 + RPL_MAPMORE 016 + RPL_MAPEND 017 + +WALLCHOPS: + Version: unknown, but since 2.10.07 + + WALLCHOPS sends a message to all channel operators (@)'s on a channel. + It does /not/ require you to be op'd (@'d) to do so. This is a feature. + + syntax: + WALLCHOPS #channel :message + or: + NOTICE @#channel :message + + this sends: + :user NOTICE @#channel :message + to clients that are @'d on the channel. + +CPRIVMSG/CNOTICE: + Version: unknown, but since 2.10.07 + + CPRIVMSG/CNOTICE are a way around target limiting in recent undernet + servers. Undernet servers prevent you from sending messages to too many + people at once in an attempt to help cut down the amount of spam that + occurs on the network. Because there are several situations where you want + to send messages to lots of people that are on the same channel as you + (autogreet's and gamebots for example) an 'escape' was made in the form + of CPRIVMSG/CNOTICE. These allow you to send a privmsg/notice to a person + on a common channel if you are op'd (@'d) without incuring a target + penalty. If you see 'Target changed too fast' messages, you should + probably be using these commands. + + Syntax: + CPRIVMSG #channel nick :Message + CNOTICE #channel nick :Message + + Results are the same as for 'PRIVMSG' and 'NOTICE' respectively. + +SILENCE: + Version: unknown, 2.9.32 at least. + + Silence is a server side ignore. You can /silence +hostmask or + /silence +nick, to add someone to your silence list, or use /silence + -hostmask to remove it. /silence will list your 'silence list'. + you can /silence nick, to see someone elses silence list (useful for + helping someone). Silence is preferably used as a last resort as it + tends to use server CPU time. Undernet typically only allows 15 silences + per user. in 2.10.08+ this information is available in the RPL_ISUPPORT + line. + + Syntax: + SILENCE +hostmask + SILENCE +nick + SILENCE -hostmask + SILENCE -nick + SILENCE nick + + reply: + RPL_SILELIST 217 + RPL_ENDOFSILELIST 218 + +User modes: + Version: various + + Undernet supports these additional user modes: + +d: Deaf & Dumb. This user will not get any channel traffic. Used for + bots. + +k: This user cannot be kicked, deop'd or /kill'd. This usermode may only + be set by a server, it may not be set by a user. This is used by + undernet service bots (X/W/UWorld etc) + +g: List channel HACK:'s + +s: Server messages - takes a parameter of which masks to send, see + 'snomask.html' for more details. (2.10.0+) + +LIST: + Version: Unknown + + List now takes various parameters to allow you to quickly and efficiently + find interesting channels. These are: + + >n or <n show channels with less than or greater than 'n' users + respectively + C>n or C<n show channels that have existed for less than or greater than + 'n' minutes. + T>n or C<n show channels that have had their topic changed in less than or + greater than 'n' minutes. + + Additional Numerics: + RPL_LISTHELP 334 + +Additional Topic Numerics: + Version: Since the dawn of time. + + Topic also lists who set it and when they set it. + + Additional Numerics: + RPL_TOPICWHOTIME 333 + + Straight after the topic: + :server.name 333 #channel Isomer 923423442 + where the number is seconds past 00:00 1970-01-01 that the topic was set. + + +INVITE list: + Version: 2.10.08+ + + /invite without any parameters lists which channels you have an outstanding + invite to (ie: an invite to a channel which you haven't joined) + + Additional Numerics: + RPL_INVITELIST 346 + RPL_ENDOFINVITELIST 347 + +NICK change: + Version: Since the dawn of time. + + Undernet prevents you from changing nick on a channel while your banned. + Undernet prevents you changing nicks more than once per 30 seconds, you + get one 'free' nick change if you haven't changed nick recently. + + Additional Numerics: + RPL_BANNICKCHANGE 347 + RPL_NICKTOOFAST 349 + +Target limiting: + Version: Recent 2.10.07ish at least. + + Undernet prevents you from changing 20 targets per 2 minutes. A target + is a 'Nick' or 'channel'. This is to prevent spam. If you message more + than 20 people or join more than 20 channels in two minutes then you'll + start getting 'Target change too fast' and will have to wait before you + can start talking. See CPRIVMSG/CNOTICE above for information on how to + avoid this. + + Additional Numerics: + ERR_TARGETTOOFAST 349 + + Index: ircdh/doc/en/freebsd.txt diff -u /dev/null ircdh/doc/en/freebsd.txt:1.1 --- /dev/null Sat Jan 18 15:45:24 2003 +++ ircdh/doc/en/freebsd.txt Sat Jan 18 15:45:13 2003 @@ -0,0 +1,28 @@ +This document pertains to kernel panics with FreeBSD involving mbufs. + + This is a well documented problem with programs such as ircu, and inn that + involve a lot of clients, the solution is generally to set the option 'NMBCLUSTERS' + to a reasonably higher number the default is 1024, you should first try increasing + this *10 (10240) and continue checking mbuf usage with netstat -m. + + It has been recommended that this be increased as far as *50 (51200) (although more + won't hurt, it uses more memory, so don't go too far overboard) it's been stated + over and over that the default is very low, but then, you're supposed to know how + to configure your OS for what you're doing right? =) + + There is a note in the configuration for this: + + # Note that you will probably want to bump up NMBCLUSTERS a lot to use + options NMBCLUSTERS=1024 + Merely change the 1024 to the number that best suites your system. + + + -poptix po...@po... + + + + + + + + April 17, 2000 Matthew S. Hallacy Index: ircdh/doc/en/iauth.txt diff -u /dev/null ircdh/doc/en/iauth.txt:1.1 --- /dev/null Sat Jan 18 15:45:24 2003 +++ ircdh/doc/en/iauth.txt Sat Jan 18 15:45:13 2003 @@ -0,0 +1,205 @@ +$Id: iauth.txt,v 1.1 2003/01/18 23:45:13 zolty Exp $ + +Patrick Alken <wn...@un...> +01/09/2000 + +Ircd Authentication +==== ============== + +1. Introduction + + This document describes the protocol used for the IAuth server. +IAuth performs authorization checks for all clients that connect +to the ircd server. + +2. Protocol + + Ircd and IAuth communicate through a TCP/IP connection. The +Ircd server will always initiate the connection to the IAuth +server. + +2.1 Server + + When an Ircd server first connects to an IAuth server, it will +send IAuth a string of the form: + + Server <name> + + <name> - Ircd server name + + This is used for identification purposes in case more than one +Ircd server is using an IAuth server. + +2.2 Class + +2.2.1 Class Add + + When an Ircd server first connects to an IAuth server, it will +send IAuth it's class list in the form: + + Class Add <number> <maxlinks> + + <number> - Class number + <maxlinks> - Maximum number of clients in this class + + This is needed for the I-line check, in case the number of +clients allowed to use a certain I-line is limited. + +2.2.2 Class Clear + + Upon a rehash, the Ircd server will send I-line a string of the +form: + + Class Clear [number] + + [number] - optional number + + In case the Ircd server's Y: lines were changed prior to the +rehash, IAuth will clear it's old class list to make room for +the new one Ircd will send after the rehash (via Class Add). + +2.3 DoAuth + + When a client connects to the Ircd server, Ircd will send +a string of the form: + + DoAuth <id> <nickname> <username> <hostname> <IP> [password] + + <id> - A unique ID used to identify each client + <nickname> - Client's nickname + <username> - Client's username + <hostname> - Client's hostname + <IP> - Client's IP Address in unsigned int format + [password] - *Optional* Client password + + The DoAuth directive will initiate an authorization check on +the client. The following checks are performed. + +2.3.1 I-line Check + + This check will ensure that the client matches a valid I-line +(as given in iauth.conf). If the client fails this check, he/she +will not be allowed to remain connected to the Ircd server. +The actual reason they failed authorization will be told to them. +(See the BadAuth directive). + See the section on iauth.conf for more information on I-lines. + +2.3.2 Server Ban Check + + K-lines are server-wide bans for individual (or groups of) clients. +If a client matches a K-line, they will be disconnected from the +Ircd server with the reason they are banned. The only exception to +this is if they have an exemption flag in their I-line. See the +iauth.conf section for more details on this. + +2.3.3 Quarantine Check + + Q-lines specify nicknames which are not allowed to be used on +the Ircd server. If a client's nickname matches that of a Q-lined +nickname, they will be informed they have selected a quarantined +nickname and be disconnected from the server. + +2.4 DoneAuth + + If a client passes all of the above checks, they will pass +authorization and be allowed to continue their connection to +the Ircd server. IAuth will send a string back to the Ircd +server of the form: + + DoneAuth <id> <username> <hostname> <class> + + <id> - Client's unique ID + <username> - Client's username + <hostname> - Client's hostname (may be different from original + if they are allowed a spoof) + <class> - Client's I-line class + + This will inform the Ircd server that the specified client is +authorized to connect. + +2.5 BadAuth + + If a client fails any of the above checks, IAuth will send a +string to the Ircd server of the form: + + BadAuth <id> :<reason> + + <id> - Client's unique ID + <reason> - Reason client failed authorization + + The Ircd server will then send an error back to the client +containing <reason> and disconnect them. + +3. Configuration file (iauth.conf) + + IAuth reads a configuration file upon startup. The name of the +file is located in setup.h, under #define CONFFILE. The format +of this file is identical to that of ircd.conf, except it supports +less directives. + +3.1 I-lines (Server Access) + + I-lines allow clients access to the Ircd server and are of the +form: + + I:<spoofhost>:[password]:[flags][user@]<host>::<class> + + <spoofhost> - Hostname to give client if SPOOF_FREEFORM + is defined. + [password] - *Optional* password that clients will + be required to supply to gain access. + [flags] - *Optional* flags (see below) + [user] - *Optional* username (if not given, defaults + to "*") + <host> - Client's hostname + <class> - I-line class (see section Class Add) + + Possible values to go in the [flags] section are: + + = - Spoof their IP Address (requires #define + SPOOF_FREEFORM) + ! - Limit 1 client per IP Address + - - Do not give them a tilde (~) character if they + are not running identd + + - Do not allow them to connect if they are not + running identd + ^ - Client is exempt from K/G lines + > - Client is also exempt from connection limits + +3.2 K-lines (Server Bans) + + K-lines specify clients who are banned from the Ircd server and +are of the form: + + K:<username>@<hostname>:<reason> + + <username> - Client's username + <hostname> - Client's hostname + <reason> - Reason client is banned + +3.3 Q-lines (Quarantined Nicknames) + + Q-lines specify illegal nicknames. A client that attempts to use +a quarantined nickname will be exited from the Ircd server. Q-lines +are of the form: + + Q:<nickname>:<reason>:[[username@]hostname]] + + <nickname> - Quarantined nickname + <reason> - Reason nickname is quarantined + [username] - *Optional* exempted username + [hostname] - *Optional* exempted hostname + + Examples: + + Q:dcc*:Dcc bots not allowed + Q:GoodOper:GoodOper may use this nick:goo...@op... + +3.4 P-lines (Ports) + + P-lines specify ports on which the IAuth server will listen for +incoming Ircd server connections. They are of the form: + + P:<portnum> + + <portnum> - Port number Index: ircdh/doc/en/irc.1 diff -u /dev/null ircdh/doc/en/irc.1:1.1 --- /dev/null Sat Jan 18 15:45:24 2003 +++ ircdh/doc/en/irc.1 Sat Jan 18 15:45:13 2003 @@ -0,0 +1,82 @@ +.\" @(#)irc.1 2.6 7 Oct 90 +.TH IRC 1 "7 October 1990" +.SH NAME +irc \- User Interface to Internet Relay Chat Protocol +.SH SYNOPSIS +\fBirc\fP [\fB-p\fP \fIportnum\fP] [\fB-c\fP \fIchannel\fP] [ \fInickname\fP [ \fIserver\fP ]] +.SH DESCRIPTION +.LP +\fBIrc\fP is a user interface to the Internet Relay Chat, a CB-like +interactive discussion environment. It is structured into \fIchannels\fP, +which are public discussion forums, and also allows for private intercommunication. +Each participant has a \fInickname\fP, which is the one specified in the command +line or else his login name. +.LP +Once invoked, \fBirc\fP connects as a client to the specified server, +\fIserver\fP or to the default one (see below). The screen splits into a dialogue +window (the major part +of the screen) and a command line, from which messages can be sent and +commands given to control irc. +.SH COMMAND SYNTAX +The syntax of irc commands is of the form \fB/COMMAND\fP. The most notable +ones are listed below. For an uptodate list, use the \fBHELP\fP command +of \fBirc\fP. Case is ignored. +.IP "\fB/ADMIN\fR [\fIserver\fP]" +Prints administrative information about an IRC \fIserver\fP. +.IP "\fB/AWAY\fP [\fImessage\fP]" +Mark yourself as being away (with an automatic reply \fImessage\fP +if specified) +.IP "\fB/BYE\fR, \fB/EXIT\fR, \fB/QUIT\fR" +Terminate the session +.IP "\fB/CHANNEL\fR [\fIchannel\fP]" +Join another \fIchannel\fP +.IP "\fB/CLEAR\fR" +Clear the screen +.IP "\fB/HELP\fR [\fIcommand\fP]" +Display a brief description of the \fIcommand\fP (or list all commands, if none +specified). +.IP "\fB/SUMMON\fR \fIuser\fP" +Allows to summon a \fIuser\fP specified as a full Internet address, i.e., +\fI...@ho...main\fP, to an IRC dialogue session (in much the same +way as the talk(1) command). It is usable ONLY if the irc daemon runs on +the target machine (host.domain). +.IP "\fB/TOPIC\fR \fItopic\fP" +Sets the \fItopic\fP for the current channel +.IP "\fB/WHO\fR [\fIchannel\fP|*]" +Lists all users of IRC if no argument, of the specified \fIchannel\fP or of the +current channel (*). +.SH ARGUMENTS +.IP "\fB-p\fP \fIportnum\fP" +TCP/IP "port number. Default is 6667 and this option should seldom if ever" +be used. +.IP "\fB-c\fP \fIchannel\fP" +\fIChannel\fP number to join upon beginning of the session. Default is no channel. +.IP "\fInickname\fP" +\fINickname\fP used in the session (can be changed with the \fB/NICK\fP command). +Default is user login name. +.IP "\fIserver\fP" +\fIServer\fP to connect to. Default is specified in the irc system configuration +file, and can be superseded with the environment variable IRCSERVER. +.SH EXAMPLE +.RS +.nf +tolmoon% \fBirc -p6667 Wizard tolsun\fP +.fi +.RE +.LP +connects you to irc server in host tolsun (port 6667) with nickname Wizard +.SH COPYRIGHT +Copyright (c) 1988 University of Oulu, Computing Center, Finland. +.nf +Copyright (c) 1988,1989,1990 Jarkko Oikarinen +.nf +All rights reserved. +For full COPYRIGHT see LICENSE file with IRC package. +.SH "SEE ALSO" +ircd(8) +.SH BUGS +What bugs ? +.SH AUTHOR +Jarkko Oikarinen <jt...@to...> +.nf +Manual page updated by Michel Fingerhut <Mic...@ir...> Index: ircdh/doc/en/ircd.8 diff -u /dev/null ircdh/doc/en/ircd.8:1.1 --- /dev/null Sat Jan 18 15:45:24 2003 +++ ircdh/doc/en/ircd.8 Sat Jan 18 15:45:13 2003 @@ -0,0 +1,111 @@ +.\" @(#)ircd.8 2.0 (beta version) 29 Mar 1989 +.TH IRCD 8 "10 July 2000" +.SH NAME +ircd \- The Undernet Internet Relay Chat Daemon +.SH SYNOPSIS +.hy 0 +.IP \fBircd\fP +[-t] [-d directory] [-f configfile] [-x debuglevel] [-h hostname] +.SH DESCRIPTION +.LP +\fIircd\fP is the Undernet Internet Relay Chat daemon. +\fIircd\fP is a server in that its function is to "serve" +the client program \fIirc(1)\fP with messages and commands. All commands +and user messages are passed directly to \fIircd\fP for processing +and relaying to other servers. \fIirc(1)\fP depends upon +there being an \fIircd\fP server running somewhere for it to connect to +and thus allow the user to begin talking to other users. +.LP +There are many common clients including ircII, EPIC, and BitchX for UNIX, +mIRC and pIRCh for Windows, and IRCle and Homer for the Macintosh. +.SH OPTIONS +.TP +.B \-d directory +This option tells the server to change to that directory and use +that as a reference point when opening \fIircd.conf\fP and other startup +files. +.TP +.B \-t +Instructs the server run in the foreground and to direct debugging output to +standard output. +.TP +.B \-x# +Defines the debug level for \fIircd\fP. The higher the debug level, the more +messages get directed to debugging file (or standard output if the -t option is +used). +.TP +.B \-w interface +This option is deprecated. Outgoing connections are bound to the +interface specified in the M: line, and incoming connections are accepted only on +interfaces specified in the P: lines. +.TP +.B \-f filename +Specifies the \fIircd.conf\fP file to be used for this server. The option +is used to override the default \fIircd.conf\fP given at compile time. +.TP +.B \-c +This flag must be given if you are running \fIircd\fP from \fI/dev/console\fP or +any other situation where fd 0 isn't a TTY and you want the server to fork +off and run in the background. This needs to be given if you are starting +\fIircd\fP from an \fIrc\fP (such as \fI/etc/rc.local\fP) file. +.TP +.B \-h hostname +Allows the user to manually set the server name at startup. The default +name is hostname.domainname. +.TP +.B \-p portname +This is deprecated in favor of specifying server ports in P: lines. + +.SH CONFIGURATION +If you plan to connect your \fIircd\fP server to an existing IRC network, +you will need to alter your local \fIircd\fP configuration file (typically named +\fIircd.conf\fP) so that it will accept and make connections to other IRC +servers. This file contains the hostnames, network addresses, and +passwords for connections to other IRC servers around the world. Because +the description of the \fIircd.conf\fP file is beyond the scope of this +document, please refer to the INSTALL file in the \fIircd\fP +documentation directory. +.LP +BOOTING THE SERVER: The \fIircd\fP server can be started as part of the +UNIX boot procedure or just by placing the server into Unix Background. +Keep in mind that if it is *not* part of your UNIXES Boot-up procedure +then you will have to manually start the \fIircd\fP server each time your +UNIX is rebooted. This means if your UNIX is prone to crashing +or going for for repairs a lot it would make sense to start the \fIircd\fP +server as part of your UNIX bootup procedure. In some cases the \fIirc(1)\fP +will automatically attempt to boot the \fIircd\fP server if the user is +on the SAME UNIX that the \fIircd\fP is supposed to be running on. If the +\fIirc(1)\fP cannot connect to the \fIircd\fP server it will try to start +the server on it's own and will then try to reconnect to the newly booted +\fIircd\fP server. +.SH EXAMPLE +.RS +.nf +tolsun% \fBircd\fP +.fi +.RE +.LP +Places \fIircd\fP into UNIX Background and starts up the server for use. +Note: You do not have to add the "&" to this command, the program will +automatically detach itself from tty. +.SH COPYRIGHT +(c) 1988,1989 University of Oulu, Computing Center, Finland, +.LP +(c) 1988,1989 Department of Information Processing Science, +University of Oulu, Finland +.LP +(c) 1988,1989,1990,1991 Jarkko Oikarinen +.LP +For full COPYRIGHT see LICENSE file with IRC package. +.LP +.RE +.SH FILES + /etc/utmp + "ircd.conf" +.SH "SEE ALSO" +irc(1) +.SH BUGS +See the file 'BUGS' included in the distribution. +.SH AUTHOR +The current authors of the undernet IRC daemon are cod...@un..., +the original author was Jarkko Oikarinen. \ No newline at end of file Index: ircdh/doc/en/iso-time.html diff -u /dev/null ircdh/doc/en/iso-time.html:1.1 --- /dev/null Sat Jan 18 15:45:24 2003 +++ ircdh/doc/en/iso-time.html Sat Jan 18 15:45:13 2003 @@ -0,0 +1,535 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN"> +<!-- $Id: iso-time.html,v 1.1 2003/01/18 23:45:13 zolty Exp $ --> +<HTML> +<HEAD> +<TITLE>International Standard Date and Time Notation</TITLE> +<BASE HREF="http://www.cl.cam.ac.uk/~mgk25/iso-time.html"> +<META NAME="keywords" CONTENT="ISO 8601, date format, time format, +standard notation, calendar, clock, time zones, daylight saving time, +summer time, international standard, file format, protocol, +data representation"> +<META NAME="description" CONTENT="International Standard ISO 8601 +specifies numeric representations of date and time. It helps to avoid +confusion caused by the many different national notations."> +</HEAD> +<BODY BGCOLOR="#EFEFEF" TEXT="#000000"> + +<H1>A Summary of the International Standard Date and Time Notation</H1> + +<P>by Markus Kuhn + +<P><A HREF="http://www.iso.ch/markete/8601.pdf">International Standard +ISO 8601</A> specifies numeric representations of date and time. This +standard notation helps to avoid confusion in international +communication caused by the many different national notations and +increases the portability of computer user interfaces. In addition, +these formats have several important advantages for computer usage +compared to other traditional date and time notations. The time +notation described here is already the de-facto standard in almost all +countries and the date notation is becoming increasingly popular. + +<P><STRONG>Especially authors of Web pages and software engineers who +design user interfaces, file formats, and communication protocols +should be familiar with ISO 8601.</STRONG> + +<P>Contents: <A HREF="#date">Date</A>, <A HREF="#time">Time of Day</A>, +<A HREF="#zone">Time Zone</A>. + +<H2><A NAME="date">Date</A></H2> + +<P>The international standard date notation is + +<BLOCKQUOTE><P><STRONG>YYYY-MM-DD</STRONG></BLOCKQUOTE> + +<P>where YYYY is the year in the usual Gregorian calendar, MM is the +month of the year between 01 (January) and 12 (December), and DD is +the day of the month between 01 and 31. + +<P>For example, the fourth day of February in the year 1995 is written +in the standard notation as + +<BLOCKQUOTE><P><STRONG>1995-02-04</STRONG></BLOCKQUOTE> + +<P>Other commonly used notations are e.g. 2/4/95, 4/2/95, 95/2/4, +4.2.1995, 04-FEB-1995, 4-February-1995, and many more. Especially the +first two examples are dangerous, because as both are used quite often +in the U.S. and in Great Britain and both can not be distinguished, it +is unclear whether 2/4/95 means 1995-04-02 or 1995-02-04. The date +notation 2/4/5 has at least six reasonable interpretations (assuming +that only the twentieth and twenty-first century are reasonable +candidates in our life time). + +<P>Advantages of the ISO 8601 standard date notation compared to other +commonly used variants: + +<UL> + <LI>easily readable and writeable by software (no 'JAN', 'FEB', ... + table necessary) + <LI>easily comparable and sortable with a trivial string comparison + <LI>language independent + <LI>can not be confused with other popular date notations + <LI>consistency with the common 24h time notation system, where + the larger units (hours) are also written in front of the smaller + ones (minutes and seconds) + <LI>strings containing a date followed by a time are also + easily comparable and sortable (e.g. write "1995-02-04 22:45:00") + <LI>the notation is short and has constant length, which makes both + keyboard data entry and table layout easier + <LI>identical to the Chinese date notation, so the largest cultural + group (>25%) on this planet is already familiar with it :-) + <LI>date notations with the order "year, month, day" are in addition + already widely used e.g. in Japan, Korea, Hungary, Sweden, Finland, + Denmark, and a few other countries and people in the U.S. are already + used to at least the "month, day" order + <LI>a 4-digit year representation avoids + <A HREF="http://www.year2000.com/cgi-bin/clock.cgi">overflow + problems after 1999-12-31</A> +</UL> + +<P>As dates will look a little bit strange anyway starting with +2000-01-01 (e.g. like 1/1/0), it has been suggested that the year 2000 +is an excellent opportunity to change to the standard date notation. + +<P>ISO 8601 is only specifying numeric notations and does not cover +dates and times where words are used in the representation. It is not +intended as a replacement for language-dependent worded date notations +such as "24. Dezember 2001" (German) or "February 4, 1995" (US +English). ISO 8601 should however be used to replace notations such as +"2/4/95" and "9.30 p.m.". + +<P>Apart from the recommended primary standard notation +<STRONG>YYYY-MM-DD</STRONG>, ISO 8601 also specifies a number of +alternative formats for use in applications with special requirements. +All of these alternatives can easily and automatically be +distinguished from each other: + +<P>The hyphens can be omitted if compactness of the representation is +more important than human readability, for example as in + +<BLOCKQUOTE><P><STRONG>19950204</STRONG></BLOCKQUOTE> + +<P>For situations where information about the century is really not +required, a 2-digit year representation is available: + +<BLOCKQUOTE><P><STRONG>95-02-04</STRONG> or +<STRONG>950204</STRONG></BLOCKQUOTE> + +<P>If only the month or even only the year is of interest: + +<BLOCKQUOTE><P><STRONG>1995-02</STRONG> or +<STRONG>1995</STRONG></BLOCKQUOTE> + +<P>In commercial and industrial applications (delivery times, +production plans, etc.), especially in Europe, it is often required to +refer to a week of a year. Week 01 of a year is per definition the +first week that has the Thursday in this year, which is equivalent to +the week that contains the fourth day of January. In other words, the +first week of a new year is the week that has the majority of its +days in the new year. Week 01 might also contain days from the +previous year and the week before week 01 of a year is the last week +(52 or 53) of the previous year even if it contains days from the new +year. A week starts with Monday (day 1) and ends with Sunday (day 7). +For example, the first week of the year 1997 lasts from 1996-12-30 to +1997-01-05 and can be written in standard notation as + +<BLOCKQUOTE><P><STRONG>1997-W01</STRONG> or +<STRONG>1997W01</STRONG></BLOCKQUOTE> + +<P>The week notation can also be extended by a number indicating the +day of the week. For example, the day 1996-12-31, which is the Tuesday +(day 2) of the first week of 1997, can also be written as + +<BLOCKQUOTE><P><STRONG>1997-W01-2</STRONG> or +<STRONG>1997W012</STRONG></BLOCKQUOTE> + +<P>for applications like industrial planning where many things like +shift rotations are organized per week and knowing the week number and +the day of the week is more handy than knowing the day of the month. + +<P>An abbreviated version of the year and week number like + +<BLOCKQUOTE><P><STRONG>95W05</STRONG></BLOCKQUOTE> + +<P>is sometimes useful as a compact code printed on a product that +indicates when it has been manufactured. + +<P>The ISO standard avoids explicitly stating the possible range of +week numbers, but this can easily be deduced from the definition: + +<BLOCKQUOTE> + +<P><STRONG>Theorem:</STRONG> Possible ISO week numbers are in the +range 01 to 53. A year always has a week 52. (There is one historic +exception: the year in which the Gregorian calendar was introduced had +less than 365 days and less than 52 weeks.) + +<P><STRONG>Proof:</STRONG> Per definition, the first week of a year is +W01 and consequently days before week W01 belong to the previous year +and so there is no week with lower numbers. Considering the highest +possible week number, the worst case is a leap year like 1976 that +starts with a Thursday, because this keeps the highest possible number +of days of W01 in the previous year, i.e. 3 days. In this case, the +Sunday of W52 of the worst case year is day number 4+51*7=361 and +361-366=5 days of W53 belong still to this year, which guarantees that +in the worst case year day 4 (Thursday) of W53 is not yet in the next +year, so a week number 53 is possible. For example, the 53 weeks of +the worst case year 1976 started with 1975-12-29 = 1976-W01-1 and +ended with 1977-01-02 = 1976-W53-7. On the other hand, considering the +lowest number of the last week of a year, the worst case is a non-leap +year like 1999 that starts with a Friday, which ensures that the first +three days of the year belong to the last week of the previous year. +In this case, the Sunday of week 52 would be day number 3+52*7=367, +i.e. only the last 367-365=2 days of the W52 reach into the next year +and consequently, even a worst case year like 1999 has a week W52 +including the days 1999-12-27 to 2000-01-02. q.e.d. + +</BLOCKQUOTE> + +<P>[Unfortunately, the current version of the C programming language +standard provides in the <CODE>strftime()</CODE> function no means to +generate the ISO 8601 week notation. A required extension would be +four new formatting codes: for the year of the week to which the +specified day belongs (both 2-digit and 4-digit), for the number of +the week between 01 and 53, and for the day of the week between 1 +(Monday) and 7 (Sunday). Another trivial mistake in the description of +<CODE>strftime()</CODE> in the C standard is that the range of seconds +goes from 00 to 61, because at one time only one single leap second 60 +can be inserted into UTC and consequently there will never be a leap +second 61. Contribution <A +HREF="http://www.gold.net/users/cdwf/c/wg14n764.txt">N764</A> to the +<A HREF="ftp://dkuug.dk/JTC1/SC22/wg14/index.html">ISO C committee</A> +suggests to fix some of this in the next revision of the ISO C +standard. The author of this text has also developed a proposal for a +<A HREF="c-time/">modernised clock and calendar API</A> for C, which +provides full proper treatment of leap seconds and timezones and fixes +numerous other problems in the current C timing library functions. It +also serves as an excellent model for those who want to design clock +library functions for other programming languages.] + +<P>Both day and year are useful units of structuring time, because the +position of the sun on the sky, which influences our lives, is +described by them. However the 12 months of a year are of some obscure +mystic origin and have no real purpose today except that people are +used to having them (they do not even describe the current position of +the moon). In some applications, a date notation is preferred that +uses only the year and the day of the year between 001 and 365 (366 in +leap years). The standard notation for this variant representing +the day 1995-02-04 (that is day 035 of the year 1995) is + +<BLOCKQUOTE><P><STRONG>1995-035</STRONG> or +<STRONG>1995035</STRONG></BLOCKQUOTE> + +<P>Leap years are years with an additional day YYYY-02-29, where the +year number is a multiple of four with the following exception: If a +year is a multiple of 100, then it is only a leap year if it is also a +multiple of 400. For example, 1900 was not a leap year, but 2000 is one. + +<H2><A NAME="time">Time of Day</A></H2> + +<P>The international standard notation for the time of day is + +<BLOCKQUOTE><P><STRONG>hh:mm:ss</STRONG></BLOCKQUOTE> + +<P>where hh is the number of complete hours that have passed since +midnight (00-24), mm is the number of complete minutes that have +passed since the start of the hour (00-59), and ss is the number of +complete seconds since the start of the minute (00-59). If the hour +value is 24, then the minute and second values must be zero. [Although +ISO 8601 does not mention this, the value 60 for ss might sometimes be +needed during an inserted <A +HREF="http://tycho.usno.navy.mil/leap.html">leap second</A> in an +atomic time scale like Coordinated Universal Time (UTC). A single leap +second 23:59:60 is inserted into the UTC time scale every few years as +announced by the <A HREF="http://hpiers.obspm.fr/">International Earth +Rotation Service</A> in Paris to keep UTC from wandering away more +than 0.9 s from the less constant astronomical time scale UT1 +that is defined by the actual rotation of the earth.] + + +<P>An example time is + +<BLOCKQUOTE><P><STRONG>23:59:59</STRONG></BLOCKQUOTE> + +<P>which represents the time one second before midnight. + +<P>As with the date notation, the separating colons can also be +omitted as in + +<BLOCKQUOTE><P><STRONG>235959</STRONG></BLOCKQUOTE> + +<P>and the precision can be reduced by omitting the seconds or both +the seconds and minutes as in + +<BLOCKQUOTE><P><STRONG>23:59</STRONG>, <STRONG>2359</STRONG>, or +<STRONG>23</STRONG></BLOCKQUOTE> + +<P>It is also possible to add fractions of a second after a decimal +dot or comma, for instance the time 5.8 ms before midnight can be +written as + +<BLOCKQUOTE><P><STRONG>23:59:59.9942</STRONG> or +<STRONG>235959.9942</STRONG> </BLOCKQUOTE> + +<P>As every day both starts and ends with midnight, the two notations +<STRONG>00:00</STRONG> and <STRONG>24:00</STRONG> are available to +distinguish the two midnights that can be associated with one date. +This means that the following two notations refer to exactly the same +point in time: + +<BLOCKQUOTE><P><STRONG>1995-02-04 24:00</STRONG> = +<STRONG>1995-02-05 00:00</STRONG></BLOCKQUOTE> + +<P>In case an unambiguous representation of time is required, 00:00 is +usually the preferred notation for midnight and not 24:00. Digital +clocks display 00:00 and not 24:00. + +<P>ISO 8601 does not specify, whether its notations specify a point in +time or a time period. This means for example that ISO 8601 does not +define whether 09:00 refers to the exact end of the ninth hour of the +day or the period from 09:00 to 09:01 or anything else. The users of +the standard must somehow agree on the exact interpretation of the +time notation if this should be of any concern. + +<P>If a date and a time are displayed on the same line, then always +write the date in front of the time. If a date and a time value are +stored together in a single data field, then ISO 8601 suggests that +they should be separated by a latin capital letter T, as in +<STRONG>19951231T235959</STRONG>. + +<P>A remark for readers from the U.S.: + +<BLOCKQUOTE><P>The 24h time notation specified here has already been +the de-facto standard all over the world in written language for +decades. The only exception are some English speaking countries, where +still notations with hours between 1 and 12 and additions like "a.m." +and "p.m." are in wide use. The common 24h international standard +notation starts to get widely used now even in England. Most other +languages don't even have abbreviations like "a.m." and "p.m." and the +12h notation is certainly hardly ever used on Continental Europe to +write or display a time. Even in the U.S., the military and computer +programmers have been using the 24h notation for a long time. + +<P>The old English 12h notation has many disadvantages like: + +<UL> + <LI> It is longer than the normal 24h notation. + <LI> It takes somewhat more time for humans to compare two times + in 12h notation. + <LI> It is not clear, how 00:00, 12:00 and 24:00 are represented. + Even encyclopedias and style manuals contain contradicting + descriptions and a common quick fix seems to be to avoid + "12:00 a.m./p.m." altogether and write "noon", "midnight", or + "12:01 a.m./p.m." instead, although the word "midnight" still + does not distinguish between 00:00 and 24:00. + <LI> It makes people often believe that the next day starts at the + overflow from "12:59 a.m." to "1:00 a.m.", which is a common + problem not only when people try to program the timer of VCRs + shortly after midnight. + <LI> It is not easily comparable with a string compare operation. + <LI> It is not immediately clear for the unaware, whether the + time between "12:00 a.m./p.m." and "1:00 a.m./p.m." starts + at 00:00 or at 12:00, i.e. the English 12h notation is more + difficult to understand. +</UL> + +<P>Please consider the 12h time to be a relic from the dark ages when +Roman numerals were used, the number zero had not yet been invented +and analog clocks were the only known form of displaying a +time. Please avoid using it today, especially in technical +applications! Even in the U.S., the widely respected <CITE>Chicago +Manual of Style</CITE> now recommends using the international +standard time notation in publications. + +</BLOCKQUOTE> + +<P>A remark for readers from German speaking countries: + +<BLOCKQUOTE><P>In May 1996, the German standard DIN 5008, which +specifies typographical rules for German texts written on typewriters, +has been updated. The old German numeric date notations DD.MM.YYYY and +DD.MM.YY have been replaced by the ISO date notations YYYY-MM-DD and +YY-MM-DD. Similarly, the old German time notations hh.mm and hh.mm.ss +have been replaced by the ISO notations hh:mm and hh:mm:ss. Those new +notations are now also mentioned in the latest edition of the +<CITE>Duden</CITE>. The German alphanumeric date notation continues to +be for example "3. August 1994" or "3. Aug. 1994". The corresponding +Austrian standard has already used the ISO 8601 date and time +notations before. + +<P>ISO 8601 has been adopted as European Standard EN 28601 and is +therefore now a valid standard in all EU countries and all conflicting +national standards have been changed accordingly. +</BLOCKQUOTE> + +<H2><A NAME="zone">Time Zone</A></H2> + +<P>Without any further additions, a date and time as written above is +assumed to be in some local time zone. In order to indicate that a +time is measured in <A HREF="http://aa.usno.navy.mil/AA/faq/docs/UT.html" +>Universal Time (UTC)</A>, you can append a capital +letter <STRONG>Z</STRONG> to a time as in + +<BLOCKQUOTE><P><STRONG>23:59:59Z</STRONG> or <STRONG>2359Z</STRONG> +</BLOCKQUOTE> + +<P>[The Z stands for the "zero meridian", which goes through Greenwich +in London, and it is also commonly used in radio communication where +it is pronounced "Zulu" (the word for Z in the international radio +alphabet). <A HREF= +"http://www.apparent-wind.com/gmt-explained.html">Universal +Time</A> (sometimes also called "Zulu Time") was called Greenwich Mean +Time (GMT) before 1972, however this term should no longer be +used. Since the introduction of an international atomic time scale, +almost all existing civil time zones are now related to UTC, which is +slightly different from the old and now unused GMT.] + +<P>The strings + +<BLOCKQUOTE><P><STRONG>+hh:mm</STRONG>, <STRONG>+hhmm</STRONG>, or +<STRONG>+hh</STRONG></BLOCKQUOTE> + +<P>can be added to the time to indicate that the used local time zone +is hh hours and mm minutes ahead of UTC. For time zones west of the +zero meridian, which are behind UTC, the notation + +<BLOCKQUOTE><P><STRONG>-hh:mm</STRONG>, <STRONG>-hhmm</STRONG>, or +<STRONG>-hh</STRONG></BLOCKQUOTE> + +<P>is used instead. For example, Central European Time (CET) is +0100 +and U.S./Canadian Eastern Standard Time (EST) is -0500. The following +strings all indicate the same point of time: + +<BLOCKQUOTE><P><STRONG>12:00Z</STRONG> = <STRONG>13:00+01:00</STRONG> += <STRONG>0700-0500</STRONG></BLOCKQUOTE> + +<P>There exists no international standard that specifies +abbreviations for civil time zones like CET, EST, etc. and sometimes +the same abbreviation is even used for two very different time zones. +In addition, politicians enjoy modifying the rules for civil time +zones, especially for daylight saving times, every few years, so the +only really reliable way of describing a local time zone is to specify +numerically the difference of local time to UTC. Better use directly +UTC as your only time zone where this is possible and then you do not +have to worry about time zones and daylight saving time changes at +all. + +<H2><A NAME="tz">More Information about Time Zones</A></H2> + +<P><A HREF="mailto:ad...@el...">Arthur David Olson</A> and +others maintain a <A HREF= +"http://www.twinsun.com/tz/tz-link.htm">database of all current and +many historic time zone changes and daylight saving time +algorithms</A>. It is available via ftp from <A +HREF="ftp://elsie.nci.nih.gov/pub/">elsie.nci.nih.gov</A> in the +<SAMP>tzcode*</SAMP> and <SAMP>tzdata*</SAMP> files. Most Unix time +zone handling implementations are based on this package. If you want +to join the <SAMP>tz</SAMP> mailing list, which is dedicated to +discussions about time zones and this software, please send a request +for subscription to <A HREF="mailto:tz-...@el..." +>tz-...@el...</A>. You can read previous discussion +there in the <A HREF="ftp://elsie.nci.nih.gov/pub/tzarchive.gz">tz +archive</A>. + +<H2><A NAME="other">Other Links about Date, Time, and Calendars</A></H2> + +<P>Some other interesting sources of information about date and time +on the Internet are for example the <A +HREF="http://www.boulder.nist.gov/timefreq/glossary.htm">Glossary of +Frequency and Timing Terms</A> and the <A +HREF="http://www.boulder.nist.gov/timefreq/faq/... [truncated message content] |
From: Toni G. <zo...@us...> - 2003-01-18 23:43:02
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-01-18 23:43:00 UTC Added files: tools/Bounce/Bounce.cpp tools/Bounce/Bounce.h tools/Bounce/bounce.conf tools/Bounce/build tools/linesync/linesync.conf tools/linesync/linesync.sh Log message: Nuevos utilidades en tools/ ---------------------- diff included ---------------------- Index: ircdh/tools/Bounce/Bounce.cpp diff -u /dev/null ircdh/tools/Bounce/Bounce.cpp:1.1 --- /dev/null Sat Jan 18 15:43:00 2003 +++ ircdh/tools/Bounce/Bounce.cpp Sat Jan 18 15:42:50 2003 @@ -0,0 +1,504 @@ +/* + * IRC - Internet Relay Chat, tools/Bouncer/Bouncer.cpp + * Copyright (C) 1990 Jarkko Oikarinen and + * University of Oulu, Computing Center + * + * See file AUTHORS in IRC package for additional names of + * the programmers. + * + * 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 1, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * Port Bouncer. + * + * This tool is designed to set up a number of local listening ports, and + * then forward any data recived on those ports, to another host/port combo. + * Each listening port can bounce to a different host/port defined in the + * config file. --Gte + * + * $Id: Bounce.cpp,v 1.1 2003/01/18 23:42:50 zolty Exp $ + * + */ + +#include "Bounce.h" + +int main() { + Bounce* application = new Bounce(); + + /* + * Ignore SIGPIPE. + */ + + struct sigaction act; + act.sa_handler = SIG_IGN; + act.sa_flags = 0; + sigemptyset(&act.sa_mask); + sigaction(SIGPIPE, &act, 0); + +#ifndef DEBUG + /* + * If we aren't debugging, we might as well + * detach from the console. + */ + + pid_t forkResult = fork() ; + if(forkResult < 0) + { + printf("Unable to fork new process.\n"); + return -1 ; + } + else if(forkResult != 0) + { + printf("Successfully Forked, New process ID is %i.\n", forkResult); + return 0; + } +#endif + + /* + * Create new application object, bind listeners and begin + * polling them. + */ + application->bindListeners(); + + while (1) { + application->checkSockets(); + } +} + +/* + **************************************** + * * + * Bounce class implementation. * + * * + **************************************** + */ + +void Bounce::bindListeners() { +/* + * bindListeners. + * Inputs: Nothing. + * Outputs: Nothing. + * Process: 1. Reads the config file, and.. + * 2. Creates a new listener for each 'P' line found. + * + */ + + FILE* configFd; + char tempBuf[256]; + int localPort = 0; + int remotePort = 0; + char* remoteServer; + char* vHost; + + /* + * Open config File. + */ + + if(!(configFd = fopen("bounce.conf", "r"))) + { + printf("Error, unable to open config file!\n"); + exit(0); + } + + while (fgets(tempBuf, 256, configFd) != NULL) { + if((tempBuf[0] != '#') && (tempBuf[0] != '\r')) { + switch(tempBuf[0]) + { + case 'P': { /* Add new port listener */ + strtok(tempBuf, ":"); + vHost = strtok(NULL, ":"); + localPort = atoi(strtok(NULL, ":")); + remoteServer = strtok(NULL, ":"); + remotePort = atoi(strtok(NULL, ":")); + + Listener* newListener = new Listener(); + strcpy(newListener->myVhost, vHost); + strcpy(newListener->remoteServer, remoteServer); + newListener->remotePort = remotePort; + newListener->localPort = localPort; +#ifdef DEBUG + printf("Adding new Listener: Local: %s:%i, Remote: %s:%i\n", vHost, localPort, remoteServer, remotePort); +#endif + + newListener->beginListening(); + listenerList.insert(listenerList.begin(), newListener); + break; + } + } + } + } +} + +void Bounce::checkSockets() { +/* + * checkSockets. + * Inputs: Nothing. + * Outputs: Nothing. + * Process: 1. Builds up a FD_SET of all sockets we wish to check. + * (Including all listeners & all open connections). + * 2. SELECT(2) the set, and forward/accept as needed. + * + */ + typedef std::list<Listener*> listenerContainer; + typedef listenerContainer::iterator listIter; + + typedef std::list<Connection*> connectionContainer; + typedef connectionContainer::iterator connIter; + + struct timeval tv; + fd_set readfds; + tv.tv_sec = 0; + tv.tv_usec = 1000; + int tempFd = 0; + int tempFd2 = 0; + int highestFd = 0; + int delCheck = 0; + char* tempBuf; + + FD_ZERO(&readfds); + + /* + * Add all Listeners to the set. + */ + + listIter a = listenerList.begin(); + while(a != listenerList.end()) + { + tempFd = (*a)->fd; + FD_SET(tempFd, &readfds); + if (highestFd < tempFd) highestFd = tempFd; + a++; + } + + /* + * Add Local & Remote connections from each + * connection object to the set. + */ + + connIter b = connectionsList.begin(); + while(b != connectionsList.end()) + { + tempFd = (*b)->localSocket->fd; + tempFd2 = (*b)->remoteSocket->fd; + FD_SET(tempFd, &readfds); + if (highestFd < tempFd) highestFd = tempFd; + FD_SET(tempFd2, &readfds); + if (highestFd < tempFd2) highestFd = tempFd2; + b++; + } + + select(highestFd+1, &readfds, NULL, NULL, &tv); + + /* + * Check all connections for readability. + * First check Local FD's. + * If the connection is closed on either side, + * shutdown both sockets, and clean up. + * Otherwise, send the data from local->remote, or + * remote->local. + */ + + b = connectionsList.begin(); + while(b != connectionsList.end()) + { + tempFd = (*b)->localSocket->fd; + + if (FD_ISSET(tempFd, &readfds)) + { + tempBuf = (*b)->localSocket->read(); + if ((tempBuf[0] == 0)) // Connection closed. + { + close((*b)->localSocket->fd); + close((*b)->remoteSocket->fd); +#ifdef DEBUG + printf("Closing FD: %i\n", (*b)->localSocket->fd); + printf("Closing FD: %i\n", (*b)->remoteSocket->fd); +#endif + delete(*b); + delCheck = 1; + b = connectionsList.erase(b); + } else { + (*b)->remoteSocket->write(tempBuf, (*b)->localSocket->lastReadSize); + } + } + + if (!delCheck) b++; + delCheck = 0; + } + + /* + * Now check Remote FD's.. + */ + b = connectionsList.begin(); + while(b != connectionsList.end()) + { + tempFd = (*b)->remoteSocket->fd; + if (FD_ISSET(tempFd, &readfds)) + { + tempBuf = (*b)->remoteSocket->read(); + if ((tempBuf[0] == 0)) // Connection closed. + { + close((*b)->localSocket->fd); + close((*b)->remoteSocket->fd); +#ifdef DEBUG + printf("Closing FD: %i\n", (*b)->localSocket->fd); + printf("Closing FD: %i\n", (*b)->remoteSocket->fd); +#endif + delete(*b); + delCheck = 1; + b = connectionsList.erase(b); + } else { + (*b)->localSocket->write(tempBuf, (*b)->remoteSocket->lastReadSize); + } + } + if (!delCheck) b++; + delCheck = 0; + } + + /* + * Check all listeners for new connections. + */ + + a = listenerList.begin(); + while(a != listenerList.end()) + { + tempFd = (*a)->fd; + if (FD_ISSET(tempFd, &readfds)) + { + recieveNewConnection(*a); + } + a++; + } + +} + +void Bounce::recieveNewConnection(Listener* listener) { +/* + * recieveNewConnection. + * Inputs: A Listener Object. + * Outputs: Nothing. + * Process: 1. Recieves a new connection on a local port, + * and creates a connection object for it. + * 2. Accepts the incomming connection. + * 3. Creates a new Socket object for the remote + * end of the connection. + * 4. Connects up the remote Socket. + * 5. Adds the new Connection object to the + * connections list. + * + */ + + Connection* newConnection = new Connection(); + newConnection->localSocket = listener->handleAccept(); + + Socket* remoteSocket = new Socket(); + newConnection->remoteSocket = remoteSocket; + if(remoteSocket->connectTo(listener->remoteServer, listener->remotePort)) { + connectionsList.insert(connectionsList.begin(), newConnection); + } else { +#ifdef DEBUG + newConnection->localSocket->write("Unable to connect to remote host.\n"); +#endif + close(newConnection->localSocket->fd); + delete(newConnection); + delete(remoteSocket); + } +} + + +/* + **************************************** + * * + * Listener class implementation. * + * * + **************************************** + */ + + +Socket* Listener::handleAccept() { +/* + * handleAccept. + * Inputs: Nothing. + * Outputs: A Socket Object. + * Process: 1. Accept's an incomming connection, + * and returns a new socket object. + */ + + int new_fd = 0; + int sin_size = sizeof(struct sockaddr_in); + + Socket* newSocket = new Socket(); + new_fd = accept(fd, (struct sockaddr*)&newSocket->address, (socklen_t*)&sin_size); + newSocket->fd = new_fd; + return newSocket; +} + +void Listener::beginListening() { +/* + * beginListening. + * Inputs: Nothing. + * Outputs: Nothing. + * Process: 1. Binds the local ports for all the + * Listener objects. + * + */ + + struct sockaddr_in my_addr; + int bindRes; + int optval; + optval = 1; + + fd = socket(AF_INET, SOCK_STREAM, 0); /* Check for no FD's left?! */ + + my_addr.sin_family = AF_INET; + my_addr.sin_port = htons(localPort); + my_addr.sin_addr.s_addr = inet_addr(myVhost); + bzero(&(my_addr.sin_zero), 8); + + setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, &optval, sizeof(optval)); + + bindRes = bind(fd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)); + if(bindRes == 0) + { + listen(fd, 10); + } else { + /* + * If we can't bind a listening port, we might aswell drop out. + */ + printf("Unable to bind to %s:%i!\n", myVhost, localPort); + exit(0); + } +} + +/* + **************************************** + * * + * Socket class implementation. * + * * + **************************************** + */ + + +Socket::Socket() { +/* + * Socket Constructor. + * Inputs: Nothing. + * Outputs: Nothing. + * Process: Initialises member variables. + * + */ + + fd = -1; + lastReadSize = 0; +} + +int Socket::write(char *message, int len) { +/* + * write. + * Inputs: Message string, and lenght. + * Outputs: Amount written, or 0 on error. + * Process: 1. Writes out 'len' amount of 'message'. + * to this socket. + * + */ + + if (fd == -1) return 0; + + int amount = ::write(fd, message, len); +#ifdef DEBUG + printf("Wrote %i Bytes.\n", amount); +#endif + return amount; +} + +int Socket::write(char *message) { +/* + * write(2). + * Inputs: Message string. + * Outputs: Amount writte, or 0 on error. + * Process: Writes out the whole of 'message'. + * + */ + + if (fd == -1) return 0; + + int amount = ::write(fd, message, strlen(message)); +#ifdef DEBUG + printf("Wrote %i Bytes.\n", amount); +#endif + return amount; +} + + +int Socket::connectTo(char *hostname, unsigned short portnum) { +/* + * connectTo. + * Inputs: Hostname and port. + * Outputs: +ve on success, 0 on failure. + * Process: 1. Connects this socket to remote 'hostname' on + * port 'port'. + * + */ + + struct hostent *hp; + + if ((hp = gethostbyname(hostname)) == NULL) { + return 0; + } + + memset(&address,0,sizeof(address)); + memcpy((char *)&address.sin_addr,hp->h_addr,hp->h_length); + address.sin_family= hp->h_addrtype; + address.sin_port= htons((u_short)portnum); + + if ((fd = socket(hp->h_addrtype,SOCK_STREAM,0)) < 0) + return 0; + + if (connect(fd, (struct sockaddr*)&address, sizeof(address)) < 0) { + close(fd); + fd = -1; + return 0; + } + return(1); +} + +char* Socket::read() { +/* + * read. + * Inputs: Nothing. + * Outputs: char* to static buffer containing data. + * Process: 1. Reads as much as possible from this socket, up to + * 4k. + * + */ + + int amountRead = 0; + static char buffer[4096]; + + amountRead = ::read(fd, &buffer, 4096); + + if ((amountRead == -1)) buffer[0] = '\0'; + buffer[amountRead] = '\0'; + +#ifdef DEBUG + printf("Read %i Bytes.\n", amountRead); +#endif + + /* + * Record this just incase we're dealing with binary data with 0's in it. + */ + lastReadSize = amountRead; + return (char *)&buffer; +} + Index: ircdh/tools/Bounce/Bounce.h diff -u /dev/null ircdh/tools/Bounce/Bounce.h:1.1 --- /dev/null Sat Jan 18 15:43:00 2003 +++ ircdh/tools/Bounce/Bounce.h Sat Jan 18 15:42:50 2003 @@ -0,0 +1,117 @@ +/* + * IRC - Internet Relay Chat, tools/Bouncer/Bouncer.h + * Copyright (C) 1990 Jarkko Oikarinen and + * University of Oulu, Computing Center + * + * See file AUTHORS in IRC package for additional names of + * the programmers. + * + * 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 1, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * + * $Id: Bounce.h,v 1.1 2003/01/18 23:42:50 zolty Exp $ + * + */ + +#include <sys/types.h> +#include <sys/time.h> +#include <sys/wait.h> +#include <sys/socket.h> +#include <sys/ioctl.h> +#include <arpa/inet.h> +#include <netinet/in.h> +#include <netdb.h> +#include <ctype.h> +#include <time.h> +#include <stdio.h> +#include <unistd.h> +#include <stdarg.h> +#include <signal.h> +#include <fcntl.h> +#include <stdio.h> +#include <stdlib.h> +#include <errno.h> +#include <string.h> +#include <netdb.h> +#include <ctype.h> +#include <time.h> +#include <list> +using std::list; + +#define DEBUG + +/* + * "Bounce" Class. + */ + +class Listener; +class Connection; +class Bounce +{ +public: + list<Listener*> listenerList; // List of 'Listeners'. + list<Connection*> connectionsList; // List of 'Connections'. + + void bindListeners(); // Binds Listening Ports. + void checkSockets(); // Polls all sockets. + void recieveNewConnection(Listener*); // Accepts connections. +}; + +/* + * "Socket" Class. + */ + +class Socket +{ +public: + int fd; // File descriptor. + int lastReadSize; // Size of last read buffer. + struct sockaddr_in address; // Socket addr_in struct. + int connectTo(char*, unsigned short); // Connects the socket. + int write(char*, int); // Writes 'int' bytes from message. + int write(char*); // Writes strlen(message). + char* read(); // Reads as much as possible into a 4k buffer. + Socket(); // Constructor. +}; + +/* + * "Listener" Class. + */ + +class Bounce; +class Listener +{ +public: + int fd; // File descriptor. + int remotePort; // Remote port from config. + int localPort; // Local port for binding. + char myVhost[15]; // Vhost to bind locally. + char remoteServer[15]; // Remote server to connect to. + + void beginListening(); // Bind listening ports. + Socket* handleAccept(); // Accept a new connection. +}; + +/* + * "Connection" Class. + * Simply a container for a local/remote Socket pair. + */ + +class Connection +{ +public: + Socket* localSocket; + Socket* remoteSocket; +}; + Index: ircdh/tools/Bounce/bounce.conf diff -u /dev/null ircdh/tools/Bounce/bounce.conf:1.1 --- /dev/null Sat Jan 18 15:43:00 2003 +++ ircdh/tools/Bounce/bounce.conf Sat Jan 18 15:42:50 2003 @@ -0,0 +1,6 @@ +# Format: P:<Local vhost>:<Local Port>:<Remote Address>:<Remote Port> +# IP's only for now :) + +P:192.168.10.5:2000:192.168.10.1:80 +P:192.168.10.5:3000:4.33.94.3:80 +P:192.168.10.5:4000:209.207.224.42:80 Index: ircdh/tools/Bounce/build diff -u /dev/null ircdh/tools/Bounce/build:1.1 --- /dev/null Sat Jan 18 15:43:00 2003 +++ ircdh/tools/Bounce/build Sat Jan 18 15:42:50 2003 @@ -0,0 +1 @@ +g++ -O3 -ggdb -Wall -Wmissing-declarations -o Bounce Bounce.cpp Index: ircdh/tools/linesync/linesync.conf diff -u /dev/null ircdh/tools/linesync/linesync.conf:1.1 --- /dev/null Sat Jan 18 15:43:00 2003 +++ ircdh/tools/linesync/linesync.conf Sat Jan 18 15:42:50 2003 @@ -0,0 +1,15 @@ + +# Configuration for linesync.sh +# +# - This file must be placed in the same directory as ircd.conf +# - Note that all URL's *MUST* have a trailing / +# - Since we are using wget, you could use ftp:// URL's as well if you want to + +# Where do we get our ircd.conf update? +LINE_SERVER="http://some.domain/" + +# Check servers, as many as you like, seperated by spaces +LINE_CHECK="http://host1.other.domain/lsync/ http://host-19.domain-x.net/ http://www.domain.what" + +# What .conf lines are allowed in the downloaded updates? +ALLOWED_LINES="kKQU" Index: ircdh/tools/linesync/linesync.sh diff -u /dev/null ircdh/tools/linesync/linesync.sh:1.1 --- /dev/null Sat Jan 18 15:43:00 2003 +++ ircdh/tools/linesync/linesync.sh Sat Jan 18 15:42:50 2003 @@ -0,0 +1,222 @@ +#!/bin/sh +# linesync.sh, Copyright (c) 2002 Arjen Wolfs +# 20020604, se...@un... +# +# The code contained is in this file is licenced under the terms +# and conditions as specified in the GNU General Public License. +# +# linesync.sh - centralized ircd.conf updates. +# The purpose of this little shell script is to allow a section of an ircd.conf to be +# updated from a central location. Hence it is intended to facilitate the automated +# distribution of k, K, Q, and U lines; or any other .conf lines you may wish to keep +# synchronized accross all servers on a network. +# +# This script will download a file called linesync from a specified web server (see +# below for configuration), and calculate an md5sum from it. It will then download +# a file called linesync.sum from a configurable number of other web servers and +# compare the contents of these files against the checksum calculated. If any of the +# downloaded checksums mismatch, the program will abort. This provides security to +# the centralized update mechanism - in order for it to be compromised, multiple +# web servers would have to compromised. +# +# If all checksums match, the script inspects the .conf lines contained within the +# downloaded file. If any .conf lines are found that are not specifically allowed, +# the program will abort. This will prevent malicious/dangerous .conf lines (such as +# O: or C: lines) from being inserted into ircd.conf. +# +# If all the checks mentioned above are passed, the script checks ircd.conf for a section +# that begins with "# BEGIN LINESYNC", and ends with "# END LINESYNC". The section contained +# between these two comments is the section maintained by this program. If these lines are not +# found in the ircd.conf, they will be appended to it. +# Next, the script will build a new ircd.conf by removing all lines present between the two +# commented lines mentioned above, and replace them with the contents of the file downloaded. +# +# Once this has been completed, ircd.conf is backed up and replaced with the newly built version, +# and ircd will be rehashed. +# +# Configuration: This script requires two parameters - the full path to your ircd.conf, and the +# full path to your ircd.pid. It will look for a configuration file called linesync.conf in the +# same directory as ircd.conf. See the included sample linesync.conf for information on how to +# set it up. Obviously, you will need to have web server(s) to use for the distribution of your +# .conf update and checksums. This script requires the presence of wget and md5sum, and various +# other programs that should be present by default on any Unix system. +# +# This program should be run from crontab, i.e something like: +# 0 0 * * * /home/irc/bin/linesync.sh /home/irc/lib/ircd.conf /home/irc/lib/ircd.pid +# +# This program has been tested on and works on FreeBSD, Solaris, and Linux. +# md5sum is included in GNU textutils. +# +# Good Luck! +# Arjen Wolfs (se...@un...), June 9 2002. +# + +# This checks for the presence of an executable file in $PATH +locate_program() { + if [ ! -x "`which $1 2>&1`" ]; then + echo "You don't seem to have $1. Sorry." + exit 1 + fi +} + +# This checks for the presence of any file +check_file() { + if [ ! -f "$1" ]; then + echo "There doesn't appear to be a $1. Sorry." + exit 1 + fi +} + +# Try to find programs we will need +locate_program wget && locate_program egrep + +# try to find GNU awk +awk_cmd=`which gawk` +if [ $? -ne 0 ]; then + awk_cmd="" +fi + +# try to find an appropriate md5 program +# BSD md5 capability courtesy of spale +md5_cmd=`which md5sum` +if [ -z "$md5_cmd" ]; then + md5_cmd=`which md5` + if [ -z "$md5_cmd" ]; then + echo "No MD5 capable programs found (I looked for md5sum and md5)." + exit + else + md5_cmd="$md5_cmd -q" + fi +fi + +if [ -z "$awk_cmd" ]; then + locate_program awk + is_gawk=`echo | awk --version | head -1 | egrep '^GNU.+$'` + if [ -z "$is_gawk" ]; then + echo "Your version of awk is not GNU awk. Sorry." + exit 1 + fi + awk_cmd="awk" +fi + +# Check for required command line parameters +if [ -z "$1" -o -z "$2" ]; then + echo "Usage: $0 <conf_path> <pid_path>" + echo " <conf_path> Full path to ircd.conf (/home/irc/lib/ircd.conf)" + echo " <pid_path> Full path to ircd.pid (/home/irc/lib/ircd.pid)" + exit 1 +fi + +# check and set up stuff +cpath=$1 +ppath=$2 +check_file $cpath +dpath=`dirname $cpath` +lpath="$dpath/linesync.conf" +check_file $lpath +save_dir=$PWD; cd $dpath +tpath=$PWD; cd $save_dir +tmp_path="$dpath/tmp" +mkdir $tmp_path > /dev/null 2>&1 + +# load and check configuration +. $lpath +if [ -z "$LINE_SERVER" -o -z "$LINE_CHECK" -o -z "$ALLOWED_LINES" ]; then + echo "Please setup $lpath correctly." + exit 1 +fi + +# Not all versions of date support %s, work around it +TS=`date +%Y%m%d%H%M%S` +TMPFILE="$tmp_path/linesync.$TS" +LSFILE="$LINE_SERVER""linesync" +# Attempt to download our .conf update +wget --cache=off --quiet --output-document=$TMPFILE $LSFILE > /dev/null 2>&1 +if [ ! -s "$TMPFILE" ]; then + echo "Unable to retrieve $LSFILE. Sorry." + rm $TMPFILE > /dev/null 2>&1 + exit 1 +fi + +# Check wether the file contains any disallowed .conf lines +bad_lines=`egrep '^[^'$ALLOWED_LINES'#]+' $TMPFILE` +if [ ! -z "$bad_lines" ]; then + echo "The file downloaded in $TMPFILE contains the following disallowed line(s):" + echo $bad_lines + exit 1 +fi + +# check our ircd.conf +ircd_setup=`egrep '^# (BEGIN|END) LINESYNC$' $cpath|wc -l` +if [ $ircd_setup != 2 ]; then + cp $cpath $cpath.orig + echo "Performing initial merge on $cpath, original file saved as $cpath.orig." + + echo "# Do NOT remove the following line, linesync.sh depends on it!" >> $cpath + echo "# BEGIN LINESYNC" >> $cpath + echo "# END LINESYNC" >> $cpath + echo "# Do not remove the previous line, linesync.sh depends on it!" >> $cpath + + # Do an initial merge to remove duplicates + inpath="$tmp_path/linesync.tmp.$TS" + $awk_cmd ' + { + if (!loaded_template) { + command="cat " tempfile; tlines=0; + while ((command | getline avar) > 0) { template[tlines]=avar; tlines++ } + close(command) + loaded_template++ + } + dup_line=0 + for (i=0; i<tlines; i++) { + if (tolower($0)==tolower(template[i])) { dup_line++; break } + } + if (!dup_line) print $0 + } ' tempfile=$TMPFILE < $cpath > $inpath +else + inpath=$cpath +fi + +# Get the checksum +CKSUM=`$md5_cmd $TMPFILE|cut -d' ' -f1` + +check_file="$tmp_path/linesync.sum.$TS" +for ck_server in $LINE_CHECK; do + sumfile="$ck_server""linesync.sum" + wget --cache=off --quiet --output-document=$check_file $sumfile > /dev/null 2>&1 + if [ ! -s "$check_file" ]; then + echo "Unable to retrieve checksum from $sumfile" + exit 1 + fi + if [ "$CKSUM" != "`cat $check_file`" ]; then + echo "Checksum retrieved from $sumfile does not match!" + exit 1 + fi + rm -f $check_file +done +# It all checks out, proceed... + +# Replace the marked block in ircd.conf with the new version + +$awk_cmd ' +$0=="# BEGIN LINESYNC" { chop++; print; next } +$0=="# END LINESYNC" { + command="cat " syncfile + while ((command | getline avar) > 0) { print avar } + close(command) + chop-- +} +{ if (!chop) print $0 } +' syncfile=$TMPFILE < $inpath > $tmp_path/linesync.new.$TS + +# Back up the current ircd.conf and replace it with the new one +cp $cpath $dpath/ircd.conf.bk +cp $tmp_path/linesync.new.$TS $cpath + +# Rehash ircd (without caring wether or not it succeeds) +kill -HUP `cat $ppath 2>/dev/null` > /dev/null 2>&1 + +# (Try to) clean up +rm -rf $tmp_path > /dev/null 2>&1 + +# That's it... ----------------------- End of diff ----------------------- |
From: Toni G. <zo...@us...> - 2003-01-18 23:41:33
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-01-18 23:41:32 UTC Log message: Directory /cvsroot/irc-dev/ircdh/tools/linesync added to the repository |
From: Toni G. <zo...@us...> - 2003-01-18 23:41:33
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-01-18 23:41:32 UTC Log message: Directory /cvsroot/irc-dev/ircdh/tools/Bounce added to the repository |
From: Toni G. <zo...@us...> - 2003-01-18 23:39:24
|
CVSROOT : /cvsroot/irc-dev Module : ircdh Commit time: 2003-01-18 23:39:24 UTC Added files: tools/tea/Makefile tools/tea/README tools/tea/cifranick.c Log message: Directorio tea de utilidades tea en tools/ ---------------------- diff included ---------------------- Index: ircdh/tools/tea/Makefile diff -u /dev/null ircdh/tools/tea/Makefile:1.1 --- /dev/null Sat Jan 18 15:39:24 2003 +++ ircdh/tools/tea/Makefile Sat Jan 18 15:39:13 2003 @@ -0,0 +1,35 @@ +#************************************************************************ +#* IRC - Internet Relay Chat, ircd/crypt/tea/Makefile +#* Copyright (C) 2002 IRC-Hispano.org - ESNET - zoltan +#* +#* 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 1, or (at your option) +#* any later version. +#* +#* This program is distributed in the hope that it will be useful, +#* but WITHOUT ANY WARRANTY; without even the implied warranty of +#* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +#* GNU General Public License for more details. +#* +#* You should have received a copy of the GNU General Public License +#* along with this program; if not, write to the Free Software +#* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#*/ +# +# Makefile para compilar el programa de encriptar las claves +# de los nicks para la tabla 'n'. + + + +all: cifran + +cifran: + gcc -c cifranick.c + gcc cifranick.o -o cifranick + +install: + @echo 'Ya esta instalado, no hacia falta ;-).' + +clean: + /bin/rm -f cifranick *.o core *.c~ Index: ircdh/tools/tea/README diff -u /dev/null ircdh/tools/tea/README:1.1 --- /dev/null Sat Jan 18 15:39:24 2003 +++ ircdh/tools/tea/README Sat Jan 18 15:39:13 2003 @@ -0,0 +1,64 @@ +/************************************************************************ + * IRC - Internet Relay Chat, ircd/crypt/tea/README + * Copyright (C) 2002 IRC-Hispano.org - ESNET - zoltan + * + * 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 1, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + + +Fichero README del programa para encriptar claves de nick para +introducir en la tabla 'n'. + + + COMPILACION en LINUX o entornos UNIX +Para compilarlo necesitas el Make y gcc de gnu, lo podras encontrar +en http://www.gnu.org. Se compila tecleando "gmake" o "make". + + + COMPILACION en WINDOWS +Si tienes el suite Visual Studio o uno de sus partes Visual C++, puedes +hacerlo en modo grafico o en modo consola. +En modo consola se hace con "cl cifranick.c ws2_32.lib" y te generará un +ejecutable *.exe + + +Para utilizar el programa hay que teclear en la consola: + + En Linux/UNIX: + ./cifranick <nick> <clave> + En Windows: + cifranick <nick> <clave> + +siendo <nick> el nick del usuario para encriptar su clave y +<clave> la clave del usuario. (Notese que si la clave mide mas de +12 caracteres, se trunca a 12 caracteres). +El programa devolvera el nick normalizado en minusculas teniendo en +cuenta lo siguiente + La minuscula de ^ es ~ + " " de \ es | + " " de [ es { + " " de ] es } +y la clave sale encriptada, lista para meterla en la tabla 'n'. + + +Para dudas, preguntas, sugerencias, puede comentarlas en el canal +#irc-dev del iRC-Hispano o visitar la web http://www.irc-dev.net y +exponerlas en los foros. + + +08/04/2002 zoltan <zo...@ir...> + + +PD: La may£scula de NiCK es nick2 ;-) Index: ircdh/tools/tea/cifranick.c diff -u /dev/null ircdh/tools/tea/cifranick.c:1.1 --- /dev/null Sat Jan 18 15:39:24 2003 +++ ircdh/tools/tea/cifranick.c Sat Jan 18 15:39:13 2003 @@ -0,0 +1,202 @@ +/* + * IRC - Internet Relay Chat, ircd/crypt/tea/cifranick.c + * Copyright (C) 2002 IRC-Hispano.org - ESNET - zoltan + * + * 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 1, or (at your option) + * any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +/* + * Programa para generar las claves cifradas de nicks + * para introducirlos en la tabla 'n' del ircd. + * + * -- zoltan + */ + + +#include <stdio.h> +#include <string.h> +#ifdef _WIN32 +# include <winsock.h> +#else +# include <netinet/in.h> +#endif + + +#define NUMNICKLOG 6 +#define NICKLEN 9 +#define NUMNICKBASE 64 /* (2 << NUMNICKLOG) */ +#define NUMNICKMASK 63 /* (NUMNICKBASE-1) */ + +static const char convert2y[] = { + 'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P', + 'Q','R','S','T','U','V','W','X','Y','Z','a','b','c','d','e','f', + 'g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v', + 'w','x','y','z','0','1','2','3','4','5','6','7','8','9','[',']' +}; + +static const unsigned int convert2n[] = { + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 52,53,54,55,56,57,58,59,60,61, 0, 0, 0, 0, 0, 0, + 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14, + 15,16,17,18,19,20,21,22,23,24,25,62, 0,63, 0, 0, + 0,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40, + 41,42,43,44,45,46,47,48,49,50,51, 0, 0, 0, 0, 0, + + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +unsigned int base64toint(const char *s) +{ + unsigned int i = convert2n[(unsigned char)*s++]; + while (*s) + { + i <<= NUMNICKLOG; + i += convert2n[(unsigned char)*s++]; + } + return i; +} + +const char *inttobase64(char *buf, unsigned int v, unsigned int count) +{ + buf[count] = '\0'; + while (count > 0) + { + buf[--count] = convert2y[(v & NUMNICKMASK)]; + v >>= NUMNICKLOG; + } + return buf; +} + +/* + * La siguiente tabla es utilizada por la macro toLower, + * esta tabla esta extraida del archivo common.c del ircd. + * + * --Daijo + */ +const char NTL_tolower_tab[] = { + /* x00-x07 */ '\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', + /* x08-x0f */ '\x08', '\x09', '\x0a', '\x0b', '\x0c', '\x0d', '\x0e', '\x0f', + /* x10-x17 */ '\x10', '\x11', '\x12', '\x13', '\x14', '\x15', '\x16', '\x17', + /* x18-x1f */ '\x18', '\x19', '\x1a', '\x1b', '\x1c', '\x1d', '\x1e', '\x1f', + /* ' '-x27 */ ' ', '!', '"', '#', '$', '%', '&', '\x27', + /* '('-'/' */ '(', ')', '*', '+', ',', '-', '.', '/', + /* '0'-'7' */ '0', '1', '2', '3', '4', '5', '6', '7', + /* '8'-'?' */ '8', '9', ':', ';', '<', '=', '>', '?', + /* '@'-'G' */ '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', + /* 'H'-'O' */ 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + /* 'P'-'W' */ 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + /* 'X'-'_' */ 'x', 'y', 'z', '{', '|', '}', '~', '_', + /* '`'-'g' */ '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', + /* 'h'-'o' */ 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', + /* 'p'-'w' */ 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', + /* 'x'-x7f */ 'x', 'y', 'z', '{', '|', '}', '~', '\x7f' +}; +#define toLower(c) (NTL_tolower_tab[(c)]) + +/* + * TEA (cifrado) + * + * Cifra 64 bits de datos, usando clave de 64 bits (los 64 bits superiores son cero) + * Se cifra v[0]^x[0], v[1]^x[1], para poder hacer CBC facilmente. + * + */ +void tea(unsigned int v[], unsigned int k[], unsigned int x[]) +{ + unsigned int y = v[0] ^ x[0], z = v[1] ^ x[1], sum = 0, delta = 0x9E3779B9; + unsigned int a = k[0], b = k[1], n = 32; + unsigned int c = 0, d = 0; + + while (n-- > 0) + { + sum += delta; + y += (z << 4) + a ^ z + sum ^ (z >> 5) + b; + z += (y << 4) + c ^ y + sum ^ (y >> 5) + d; + } + + x[0] = y; + x[1] = z; +} + + +int main(int argc, char *argv[]) +{ + + unsigned int v[2], k[2], x[2]; + int cont = (NICKLEN + 8) / 8; + char tmpnick[8 * ((NICKLEN + 8) / 8) + 1]; + char tmppass[12 + 1]; + unsigned int *p = (unsigned int *)tmpnick; /* int == 32 bits */ + + char nick[NICKLEN + 1]; /* Nick normalizado */ + char clave[12 + 1]; /* Clave encriptada */ + int i = 0; + + + if (argc != 3) + { + printf("Uso: cifranick nick password\n"); + return 1; + } + + strcpy(nick, argv[1]); + nick[NICKLEN] = '\0'; + + + /* Normalizar nick */ + while (nick[i] != 0) + { + nick[i] = toLower(nick[i]); + i++; + } + + memset(tmpnick, 0, sizeof(tmpnick)); + strncpy(tmpnick, nick ,sizeof(tmpnick) - 1); + + memset(tmppass, 0, sizeof(tmppass)); + strncpy(tmppass, argv[2], sizeof(tmppass) - 1); + + /* relleno -> 123456789012 */ + strncat(tmppass, "AAAAAAAAAAAA", sizeof(tmppass) - strlen(tmppass) -1); + + x[0] = x[1] = 0; + + k[1] = base64toint(tmppass + 6); + tmppass[6] = '\0'; + k[0] = base64toint(tmppass); + + while(cont--) + { + v[0] = ntohl(*p++); /* 32 bits */ + v[1] = ntohl(*p++); /* 32 bits */ + tea(v, k, x); + } + + inttobase64(clave, x[0], 6); + inttobase64(clave + 6, x[1], 6); + + printf("Clave cifrada para %s es %s\n", nick, clave); + + return 0; + +} ----------------------- End of diff ----------------------- |