commit f110f47e650b207131a8c3647ad5aaa392dc41d4 Author: cmunk Date: Mon Feb 28 22:45:44 2000 +0000 Import of Unreal3.0 (STABLE) diff --git a/.CHANGES.NEW b/.CHANGES.NEW new file mode 100644 index 000000000..1431ff14e --- /dev/null +++ b/.CHANGES.NEW @@ -0,0 +1,6 @@ +|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=| +| UnrealIRCd 3.0 | +| Configuration | +|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=| +| http://unreal.tspre.org | +|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=| diff --git a/.NEW_CONFIG b/.NEW_CONFIG new file mode 100644 index 000000000..84dfeb980 --- /dev/null +++ b/.NEW_CONFIG @@ -0,0 +1,8 @@ +|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=| +| UnrealIRCD Custom Create Network Configuration| +|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=| +| | +| This will not be too hard, just follow the | +| instructions, and answer the questions... | +| | +|=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=| diff --git a/CREDITS.potential b/CREDITS.potential new file mode 100644 index 000000000..02c3dfc6c --- /dev/null +++ b/CREDITS.potential @@ -0,0 +1,2 @@ +List of helpers in the alpha/beta phase: +* Headbang, Alpha/beta tester \ No newline at end of file diff --git a/Changes b/Changes new file mode 100644 index 000000000..d8dd2d38f --- /dev/null +++ b/Changes @@ -0,0 +1,315 @@ +/* + * UnrealIRCd Changes File - (C) Carsten Munk 1999 + * $Id$ + * + * 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. + * +*/ +*** BUGS *** +* When a +q sets +L it sets it but displays an error msg +(??: +*** Stskeeps (cmunk@rox-56506.fyremoon.net) has joined channel #a +*** #a 951758184 +*** Mode change "+q Stskeeps" on channel #a by Stskeeps +*** Mode change "-oaATcfebW" for user Stskeeps by Stskeeps +*** Channel mode +l is requried for +L to be set +*** Mode change "+l 1" on channel #a by Stskeeps +*** Mode change "+L #moo" on channel #a by Stskeeps +) + +*** Unreal3.0-Morrigan(fix) *** +* NOTE: If your system clock is wrong you will have problems with TOPICs + being set on all servers. That is because TOPICs which are _new_ are + taken instead of old +- Fixed +f not banning when * is specified +- Fixed +q (chan owners) not being able to set +L (partially fixed) +- Fixed /tsctl segfaulting the server +- Fixed the killing bug. The cause was that when m_mode was called in the + NICKv2 parsing routine, it sent out a :nick MODE :+x which was an unknown + nick, and the NICK was being sent just after, causing it to kill the user + (was a _huge_ bastard to find) +- If someone changes their nick to irc and WebTV is enabled, problems + occur FIX: deny change to that in m_nick (bug fixed) +- Added lost unrealircd.bmp.gz file + +*** Unreal3.0-Morrigan *** +- Added the new GUI main coded by DrBin, first coding by {X} +- Added v64net.network +- Added 972-scripterz.network +- Made NO_FDLIST compilation work as well +- Fixed DCCDENY bug (p->mask, p->mask) (*slaps sts*) +- +F not flood off if netsplit happens +- Made TODO, made "Unable to write tunefile" show an error if *nix +- Added stormdancing.network +- send.c sendto_realops problem solved +- Fixed a segfaulting bug in /tsctl reported by x-wartech +- Fixed segfaulting bug with -oh bounce stuff in channel.c reported by Dana +- Fixed +q bug reported by several people, inc DrBin +- Added networks/fireirc.network +- Fixed +f * option not banning correctly +- Fixed fdlist on win32 problem +- Added /HTM for high traffic mode status (partially added) +- Added networks/digitalirc.network +- G:lines expire every 5th second now +- /stats T now show incoming and outgoing rate +- Some HTM stuff +- Some release stuff +- Fixed up some NICKv2 stuff, more faster stuff:) +- Moved old Changes stuff to Changes.old +- Made so /path ~path or ".."'s in T:lines arent possible +- Made it so certain files ie ircd.conf,oper.motd, unrealircd.conf, ircd.log + can't be used in a T:line +- Added dynconf option to specify SOCKS kill message & ban message & bantime +- Fixed SOCKS exception bug (!!) +- Fixed some indention in dynconf.c and a memory leak problem (what were you + smoking code?:P) +- iNAH bugfixes( call them fixes and ill smash you;)) +- Recoded color striping to be ALOT more accurate and faster +- Using hybrid IsMember() +- Fixed +F bug (again) +- Added FDlists, does those work on win32? +- De-Potvinized addline, addmotd, and addomotd (should run faster) +- Made addline, addmotd, addomotd display to the user what was written +- Removed /snote and /snotes (no one used them) +- GPL stuff +- Some comestic tkl fixes.. +- Fixed +F bug +- Made +F connect notices more bandwidth friendly, + only bad things: + - Not showing port in connect +F + - On servers rejoin you get +F flooded (will be fixed in an later + release) +- Made ALLOW_CHATOPS a unrealircd.conf option rather than a #define +- Fixed a bug where you had to be +AC to see adminchats +- chatops, adchat, nachat, techat, wallops no longer require a leading : +- More TKL stuff.. +- m_chatops uses sendto_umode now, and also removed sendto_chatops +- Remote rehashes now support the - flags, ex -dcc, -vhost etc +- Fixed more G:Line stuff +- Fixed G:Line bug with not expiring correctly - thanks Dark-Prince for + being guinea pig, and to JojoII for finding it +- Fixed +ix remote bug reported by RevPsych +- /list can now make opers see +s channels +- Did some SJOIN2 work.. +- Fixed /whois bug with WHOIS_Channels +- Fixed a minor, yet annoying bug in the dynconf version system, thanks to GoNiS +- Fixed bug: EpicII stripping too much of /oper fail notice +- Fixed bug: SJOIN TS Change notice should not show when (ts == oldts) +- Fixed WEBTV_NONOTICE bug with CTCPs - thanks rjameson +- Fixed +h can +o themselves bug, thanks to Mikey, HERZ and many other + people +- Added TSP client/server +- Fixed m_netinfo stuff.. +- Fixed a bug with the new m_names and +h (chanmode) +- Removed .CHANGES.NEW2 - not in use anyways +- Now using new m_names from bahamut by Lucas Madar (DarkRot) +- Removed zombie code +- Fixed up the MODE_ADMINONLY code +- Fixed some bugs in can_send +- Added TS Change notice to SJOIN +- Fixed a +f bug, and fixed SJOIN resynch bug (serious) +- Fixed up the remote rehash code a bit +- Updated conf.doc +- Added some WebTV stuff, read config.h +- Removed the NO_DEFAULT_INVISIBLE define from config.h +- Added MODE_I to unrealircd.conf, auto setting of +i when a user connects +- Fixed a minor unrealircd.conf bug +- Fixed up all SJOIN fuzz, made RESYNCMODES be 12 +- Fixed this bug: + * After sync on other server + *** Stskeeps is using modes +oiwghsaHATcCreWIdt + should be: + Stskeeps is using modes +owghskaATcfrebW + +- Made unrealircd.conf option to hide U:lines from non-opers in /links +- Updated the unrealircd.conf and all the .network files to support the + version system, and for unrealircd.conf to support HIDE_ULINES +- Made a versioning system for unrealircd.conf and *.network (This will + allow us to makesure _old_ versions are not being used when new features + are added to the files) +- TKL/zap bugfix!! +- Channel mode +H errors in numeric 459 now, coded by Rev_Null- thanks +- Moved RPL_WHOISSPECIAL to 320 +- Another TKL bug. +- TKL bug fixed +- Made TKL backwards compatible +- TKLs are now syncing +- Bug fixes.. +- Fixed TKL<->GLINE protocol problems +- Renamed chmode +I to +V as it screwed up some clients thinking it was + IRCnet.. +- Took out m_fjoin, not in use +- Fixed up +e so it works with mIRC channel dialog now +- Added channel mode +H, only setable by SkoAdmin, makes +I users unable to + join channel - code&thanks to RevPsych & Rev_Null +- Removed all MegaIRC references +- Fixed VHOST desynch bug.. +- Removed aGline record +- Fixed some idention in msg.h +- Fixed warning in s_misc.c +- Removes /ns, /cs, /ms, /os, /hs commands (not in use) +- Fixed bug where /statserv needed a : for more than one param +- Fixed so that /trace only cloaks hostname if it is an oper +- Fixed token non case sensitive problem +- Fixed warning in mp2parv.. +- Fixed DEBUGMODE compile bug.. +- Fixed BOTMOTD bug.. +- Fixed some bugs (1.16->1.17) and removed aClient->user->host and replaced + it by realhost. Saves memory +- Fixing up for beta release +- Updated networks/networks.ndx +- Reason in temp and static K:lines like |kc.gline will show user klined + file kc.gline (only legal names are |kc.*) +- Added e:lines to the docs +- Added solargalaxy.network +- Fixed a minor +S (chanmode) bug +- Fixed a bug where if a channel was +n it would display a + must be +v msg rather than no external msgs (thank Potvin for that one) +- Made dccdeny's notice +e users when a file is rejected +- Added NOTICE in m_sajoin/m_sapart (You were forced to join/part #) +- Added e:lines, SOCKS check exception lines + format: e:ip (not hostname):*:* +- Added doc/faq entry about debian on sparcs.. +- added debian sparc support (read doc/faq) +- SJOIN sortof working. Straight testing needed +- made /botmotd use NOTICE AUTH (so all bots will see it) +- fixed NICKv2 umode field when no mode bug.. +- added T (TechAdmin) to the SMO flags +- fixed a little _mistake_ in the /dusers error message +- fixed a bug where +c (chanmode) blocked all privmsgs :P +- m_sjoin compiled, need to make it unreal3.0 compatible +- added include/sjoin.h for SJOIN stuff +- Deleted :server prefix from SWHOIS burst. +- Added UMODE_SETHOST (+t), and set NICKv2 up to only send when a real + virthost. Spares bandwidth:) +t is _not_ user setable +- Removed UMODE_COFOUND, UMODE_WMASTER, not in use anymore. +- Fixed up MODE_LINK, MODE_FLOODLIMIT syncronization, + you can mode do /mode # -lf without parameters +- Gave Unreal correct orgin (df4.6.5) +- Gave /stats N,S a header +- Added network solarxtreme.network +- /stats N returns .network file information +- /stats S returns unrealircd.conf information +- Added a virtualhost field to NICKv2 +- Updated conf.doc +- Removed all traces of CLIENT_COMPILE +- Some Linux-ALPHA support.. i need accces to a alpha box :P + Fixes done by Ramuh (irc.risanet.com) originally for UltimateIRCd, + thanks to ShadowMastr for forwarding me.. +- Removed all traces of services.h.. +- NICKv2 working.. :) +- Updated doc/faq slightly +- Updated doc/example.conf with new lines an Oflags +- Implemented NICKv2 (umode field in NICK) +- Similar topics are sent along now .. was a bug ? (thanks Headbang, + WonderWal, etc) +- Fixed up compile warnings +- Fixed channel.c warning in can_join +- Removed SHOW_PASSWORD define, not in use anymore +- Removed USE_CASETABLES define, not in use anymore +- Removed TIMED_KLINE define, not in use anymore +- Added OPER_NO_HIDING define +- Removed RelicNet +z, unreal isnt at use at relicnet anyways and + i still dont believe that potvin _thought_ he could make them use it? + hah! +- Added REMOVE_ADVERTISING define (off by default) , check include/config.h + and src/s_user.c (m_message) for more info (by ice) +- Fixed channel name similarity bug reported by IXpfah +- Comment on Nickflood/joinflood thing (stskeeps): Services can do that? +- Fixed up some version.c.SH stuff +- Added SJOIN protoctl for preparing for SJOIN +- Split up PROTOCTL_SUPPORTED in PROTOCTL_SERVER and PROTOCTL_CLIENT +- Added networks/uzaynet.network +- NOTICE auth, tells you that it found a bad SOCKS. +- Made umode +d work correctly +- Made it so users can't see the RPL_WHOISCHANNELS for a + +I user +- Fixed a bug in +I where a +I user couldn't see themself + in /names +- Fixed a minor bug in /chgident +- Added bot.motd support on +B and /botmotd +- /join 0 now shows "Left all channels" in reason why left +- Added +H umode, hides oper status + in /who /who 0 o /whois (so opers + can spy on a channel and no one knows +- win32: s_socks.c small problem fixed +- Fixed a bug in the new zline code +- Fixed a typo in the Win32 socks check (oops) +- (development) added TODO.maybe +- Added /vhost login password + read the s_extra.c on vhost.conf format +- vhost.conf, added /rehash -vhost +- Removed s_user.c/m_message warning +- SOCKS check functioning +- Removed src/list2.c - not in use +- Removed networks/agitated.network, no longer existing network +- Added networks/bunker7.network +- Deleted ircdbug +- Renamed LICENCE to LICENSE +- /version shows alpha while in development.. +- (development) added include/stamp.h for static development stamping +- send.c optimations from ircu :) +- Added codemastr as offical developer +- Now using GPL v2 +- NOTICE AUTH problem solved, i hope +- Took out UNIXPORT code +- Removed traces of R_LINE* in config.h +- SOCKS check in progress +- Fixed the Blowbug +- TSCTL svstime works now :P correctly that is +- nick is using modes +rx + instead of "nick is using modes [+rx] +- Removed some lame brackets +- /close sendto_ops() now +- Fixed small SVSNICK bug (.) +- Fixed +L resync bug.. +- df4.6.7 SVSNICK - fixes desynchs +- Took out all the R_LINES code +- Took out all SERVICES_MODE code +- Took out all USE_SERVICES code +- Added .crjava patch by Fish read include/config.h for more info.. +- Added IRCu .ack patch you can now use "ONE" in password line in I:Lines + to ensure only one connecting from that kind of I:line per IP. +- /Lusers is not working anymore.. took out possible flood thing.. +- /List - IRCops should be able to see +s now (thanks Headbang and others) +- RPL_YOURHOST - Your host is server, running version x + Removed [hostname]. +- RPL_MYINFO now selfupdates when adding new modes (channel and user) +- Fixed umodestring +- Umode +d avail to everyone now:P +- Fixed channel mode +r defunctional bug + (thanks to gdb and the coder-com people who learnt me to use gdb:P) +- SVSFLINE <+/-/*> [mask] [reason] + + = add (mask + reason) + - = delete (mask) + * = wipe all services F:Lines + (13/12/1999 working.) +- Fixed server<->server token problem +- Moved /info data to m_info_send +- Made SIGSEGV do core too.. MAIL THEM TO ME ALONG WITH THE src/ircd FILE + if it tells ya to! +- Fixed "GLINE @moo.org 10 :moo\r" G:Line bug (they haunt me) +- New F:Line system (dccdeny.conf) +- Removed OLD F:lines +- Fixed up /stats f/F +- Made /rehash -dcc = rehashes dccdeny.conf + /rehash -dyn = rehashes dynamic configuration (RISK OF TERMINATE:P) + /rehash -rest = rehashes channel restrict config chrestrict.conf +- New channel restrict system + (chrestrict.conf) + # = comment + allow #moo = can join #moo + msg message = shows message when cannot join cos of allow + diff --git a/Config b/Config new file mode 100755 index 000000000..6d361d328 --- /dev/null +++ b/Config @@ -0,0 +1,1676 @@ +#!/bin/sh +# +# Based off Config by Michael Graff (explorer@flame.org) +# Copyright 1996, 1997 +# +# (original that is =P) +# UnrealIRCd - by Techie +# +# You may distribute this file without changes freely providing this notice +# remains intact. This file may not be redistributed or made available for +# distribution without the author's prior consent. +# +# $Id$ +IRCD_VERSION="Unreal3.0" +CONF_DATE=`date` +LAST_VERSION="very very old" +# +trap "" 13 14 15 +MV=mv +RM=rm +SETUP=include/setup.h +OPTIONS_H=include/settings.h +OPTIONS=Settings +AUTO_CONFIG="" +# +STDLIBH=undef +STDDEFH=undef +SYSSYSLOGH=undef +MALLOCH=undef +PARAMH=undef +UNISTDH=undef +STRINGH=undef +STRINGSH=undef +RUSAGEH=undef +NOINDEX=undef +NSTRERROR=undef +NSTRTOKEN=undef +NSTRTOK=undef +NINETADDR=undef +NINETNTOA=undef +NINETNETOF=undef +GETTIMEOFDAY=undef +LRAND48=undef +STRTOUL=undef +NEEDSKIPNAME="" +CCPATH='' +SIGNAL='' +BLOCKING='' +TMP=/tmp/.Configtmp$$.c +EXEC=/tmp/.Configtmp$$ +PLATE=/tmp/.ConPlate$$ +c='' +n='' +# +DIR=`pwd` +# +# Some reasonable defaults +# +DEFOPT="-O -g" +DEFCFLAGS="$DEFOPT" +DEFLIBS="none" +OSNAME="an unrecgonized operating system" +# +IRCNET="" +NOSPOOF="1" +NOSPOOF_SEED01="0x12345678" +NOSPOOF_SEED02="0x9abcdef0" +KLINE_ADDRESS="" +DPATH="$DIR" +SPATH="$DIR/src/ircd" +MODE_X="" +TRUEHUB="" +CRYPT_OPER_PASSWORD="" +CRYPT_LINK_PASSWORD="" +LISTEN_SIZE="5" +MAXSENDQLENGTH="3000000" +BUFFERPOOL="(9 * MAXSENDQLENGTH)" +NICKNAMEHISTORYLENGTH="2000" +MAXCONNECTIONS="1024" +SHOWOPERS="Yes" + +# +# load $OPTIONS if present +# +if [ -r "$OPTIONS" ] ; then + . $OPTIONS +fi + +# +2>/dev/null +if [ "`eval echo -n 'a'`" = "-n a" ] ; then + c='\c' +else + n='-n' +fi + +clear + +if [ "$LAST_VERSION" != "$IRCD_VERSION" ] ; then + if [ -r .CHANGES.NEW ] ; then + more .CHANGES.NEW + echo $n "[Enter to begin]" + read cc + fi +fi + +if [ "$1" = "-n" ] ; then + if [ "$LAST_VERSION" != "$IRCD_VERSION" ] ; then + echo "You specified the no-questions-asked configure, but the version" + echo "of Config which created your Settings file was $LAST_VERSION," + echo "And the current version is $IRCD_VERSION." + echo " " + echo "Please read the prompts carefully since some of them may have" + echo "changed." + echo " " + else + AUTO_CONFIG=Yes + fi +fi + +# +# Take a wild stab at the OS, and take reasonable defaults for each +# +OS=`uname -a` +case "$OS" in + *NetBSD*) + DEFCFLAGS="$DEFOPT" + DEFLIBS="-lcrypt" + OSNAME="NetBSD" + ;; + *FreeBSD*2.2.*) + DEFCFLAGS="$DEFOPT" + DEFLIBS="-lcrypt" + OSNAME="FreeBSD 2.2.x" + CRYPT_OPER_PASSWORD="" + CRYPT_LINK_PASSWORD="" + echo "You are using FreeBSD 2.2.x; do NOT crypt passwords at this time" + ;; + *FreeBSD*2.2*) + DEFCFLAGS="$DEFOPT" + DEFLIBS="none" + OSNAME="FreeBSD 2.2" + CRYPT_OPER_PASSWORD="" + CRYPT_LINK_PASSWORD="" + echo "You are using FreeBSD 2.2; do NOT crypt passwords at this time" + ;; + *FreeBSD*3*) + DEFCFLAGS="$DEFOPT" + DEFLIBS="-lcrypt" + OSNAME="FreeBSD 3.x" + CRYPT_OPER_PASSWORD="" + CRYPT_LINK_PASSWORD="" + echo "You are using FreeBSD 3.x; You can use encrypted passwords now." + ;; + *FreeBSD*) + DEFCFLAGS="$DEFOPT" + DEFLIBS="none" + OSNAME="FreeBSD" + CRYPT_OPER_PASSWORD="" + CRYPT_LINK_PASSWORD="" + echo "You are using FreeBSD ; do NOT crypt passwords at this time" + ;; + *SCO_SV*) + DEFCFLAGS="$DEFOPT -DSCOUNIX" + DEFLIBS="-lsocket" + OSNAME="SCO Openserver" + NEEDSKIPNAME="Yep" + echo "You're using SCO Unix. For more support, contact potvin@eliteircd.on.ca" + ;; + *Apple*) + DEFCFLAGS="$DEFOPT" + DEFLIBS="none" + OSNAME="MacOS X" + ;; + + *OSF1*alpha*) + DEFCFLAGS="$DEFOPT" + DEFLIBS="none" + OSNAME="OSF/1 or Digital Unix" + ;; + *AmigaOS*68020*) + DEFCFLAGS="$DEFOPT -D_AMIGA -m68020" + DEFLIBS="" + OSNAME="AmigaOS (68020)" + ;; + *AmigaOS*68030*) + DEFCFLAGS="$DEFOPT -D_AMIGA -m68030" + DEFLIBS="" + OSNAME="AmigaOS (68030)" + ;; + *AmigaOS*68040*) + DEFCFLAGS="$DEFOPT -D_AMIGA -m68040" + DEFLIBS="" + OSNAME="AmigaOS (68040)" + ;; + *AmigaOS*68060*) + DEFCFLAGS="$DEFOPT -D_AMIGA -m68060" + DEFLIBS="" + OSNAME="AmigaOS (68060)" + ;; + *SunOS*4.*) + DEFCFLAGS="$DEFOPT" + DEFLIBS="none" + OSNAME="SunOS 4.x" + ;; + *SunOS*5.*) + DEFCFLAGS="$DEFOPT -DSOL20" + DEFLIBS="-lsocket -lnsl -lresolv" + OSNAME="Solaris 2.x (or SunOS 5.x)" + ;; + *Linux*) + cat > $TMP << __EOF__ +#include +main() +{ + printf("%d\n", +#ifndef __GLIBC__ +0); +#else +__GLIBC__); +#endif +exit(0); +} +__EOF__ + cc $TMP -o $EXEC >/dev/null 2>&1 + GLIBCVERS=`$EXEC` + if [ -n "$GLIBCVERS" -a "$GLIBCVERS" -ge 2 ];then + OSNAME="Linux (with GLIBC 2.x or greater)" + DEFLIBS="-lcrypt -lresolv" + else + OSNAME="Linux" + DEFLIBS="" + fi + DEFCFLAGS="$DEFOPT" + ;; + *HP-UX*.09.*) + DEFCFLAGS="$DEFOPT" + DEFLIBS="" + OSNAME="HPUX 9.x" + ;; + *HP-UX*.10.*) + DEFCFLAGS="$DEFOPT" + DEFLIBS="" + OSNAME="HPUX 10.x" + ;; +esac + +echo " " +echo You are running $OSNAME... +echo " " + +# Create Makefile if it doesn't exist... +if [ ! -f Makefile ] ; then + cp Makefile.dist Makefile +fi +cat << __EOF__ +Welcome to the configuration for the Unreal IRCD. +This UnrealIRCD version is: $IRCD_VERSION, Good Luck. + +Config will generate a system-specific $SETUP file, a top +level Makefile, $OPTIONS_H, and a persistant options file named +$OPTIONS + +Enter "none" at any prompt to effect a null entry. + +__EOF__ +runonce="" +FOO=`egrep "^CC=" Makefile 2>/dev/null | sed -e 's/^[^=]*[ ]*=\(.*\)/\1/'` +while [ -z "$CCPATH" ] ; do + MYP=`echo "$PATH" | sed -e 's/:/ /g'` + echo "Which compiler do you use, gcc or cc or...?" + echo $n "[$FOO] -> $c" + if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc + else + cc="" + fi + if [ -z "$cc" ] ; then + cc=$FOO + CCPATH=$FOO + elif [ -f $cc ] ; then + CCPATH=$cc + else + for i in $MYP; do + if [ -f $i/$cc -a -z "$CCPATH" ] ; then + CCPATH=$i/$cc + fi + done + fi + if [ -z "$CCPATH" ]; then runonce="Yes"; fi +done +if [ "$FOO" != "$cc" ] ; then + MYP=`echo "$CCPATH" | sed -e 's@/@ @g'` + set $MYP + if [ $2 ] ; then + while [ $2 ] ; do + shift + done + fi + if [ $1 = "gcc" ] ; then + CCPATH="$CCPATH" + fi +fi +echo "Compiler selected: $CCPATH" +echo " " +# Check it out +cat > $TMP <<__EOF__ +main() {} +__EOF__ +$CCPATH $TMP -o $EXEC >/dev/null 2>&1 +if [ ! -f $EXEC ] ; then + echo "You don't have $CCPATH or it's broken!" + exit 1 +fi +# Fix Makefile +# +$RM -f Makefile.tmp +sed -e "s@^CC=\(.*\)@CC=$CCPATH@" Makefile > Makefile.tmp +cp Makefile.tmp Makefile +$RM -f Makefile.tmp +# +echo "Enter additional flags to give to $CCPATH" +FOO=`egrep "^XCFLAGS=" Makefile 2>/dev/null | sed -e 's/^[^=]*=[ ]*\(.*\)/\1/'` +if [ -z "$FOO" ] ; then + echo "I recommend $DEFCFLAGS" + FOO="$DEFCFLAGS" +fi +echo $n "[$FOO] -> $c" +if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc +else + cc="" +fi +if [ -z "$cc" ] ; then + cc="$FOO" +fi +if [ "$cc" = "none" ] ; then + cc='' +fi +XCFLAGS=$cc +# Fix Makefile +# +$RM -f Makefile.tmp +sed -e "s@^XCFLAGS=\(.*\)@XCFLAGS=$XCFLAGS@" Makefile > Makefile.tmp +cp Makefile.tmp Makefile +$RM -f Makefile.tmp +# +cat <<__EOF__ + +If you need to use any extra libraries when compiling the server, +please tell me now (might need to look at the Makefiles) and please +include all the -l and -L flags. + +You should use the recommended value unless you have a compelling reason +not to... +__EOF__ +LIBS=`egrep "^IRCDLIBS=" Makefile 2>/dev/null | sed -e 's/^[^=]*=\(.*\)/\1/' | tr -d "\012"` +if [ -z "$LIBS" ] ; then + echo "I suggest: $DEFLIBS" + LIBS="$DEFLIBS" +fi +echo $n "[$LIBS] -> $c" +if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc +else + cc="" +fi +if [ -z "$cc" ] ; then + cc="$LIBS" +fi +if [ "$cc" = "none" ] ; then + cc='' +fi +LIBS=$cc +# Fix Makefile +# +$RM -f Makefile.tmp +sed -e "s@^IRCDLIBS=\(.*\)@IRCDLIBS=$LIBS@" Makefile > Makefile.tmp +cp Makefile.tmp Makefile +$RM -f Makefile.tmp +# +COMP="$CCPATH $XCFLAGS $TMP -o $EXEC $LIBS" +# +echo 'Checking out /usr/include' +echo $n "...Looking for /usr/include/stdlib.h...$c" +if [ -r /usr/include/stdlib.h ] ; then + STDLIBH=define + echo 'found!' +else + echo 'not found :(' +fi +echo $n "...Looking for stddef.h...$c" +if [ -r /usr/include/stddef.h ] ; then + STDDEFH=define + echo 'found!' +else + echo 'not found :(' +fi +echo $n "...Looking for /usr/include/sys/syslog.h...$c" +if [ -r /usr/include/sys/syslog.h ] ; then + SYSSYSLOGH=define + echo 'found!' +else + echo 'not found :(' +fi +#echo $n "...Looking for malloc.h...$c" +#if [ -r /usr/include/malloc.h ] ; then +# MALLOCH=malloc.h +# echo 'found!' +#elif [ -r /usr/include/sys/malloc.h ] ; then +# MALLOCH=sys/malloc.h +# echo 'found!' +#else +# echo 'not found :(' +# MALLOCH=undef +#fi +echo $n "...Looking for /usr/include/sys/param.h...$c" +if [ -r /usr/include/sys/param.h ] ; then + + PARAMH=define + echo 'found!' +else + echo 'not found :(' +fi +echo $n "...Looking for /usr/include/unistd.h...$c" +if [ -r /usr/include/unistd.h ] ; then + UNISTDH=define + echo 'found!' +else + echo 'not found :(' +fi +echo $n "...Looking for /usr/include/string.h...$c" +if [ -r /usr/include/string.h ] ; then + STRINGH=define + echo 'found!' +else + echo 'not found :(' +fi +echo $n "...Looking for /usr/include/strings.h...$c" +if [ -r /usr/include/strings.h ] ; then + STRINGSH=define + echo 'found!' +else + echo 'not found :(' +fi +echo $n "...Looking for /usr/include/sys/rusage.h...$c" +if [ -r /usr/include/sys/rusage.h ] ; then + RUSAGEH=define + echo 'found!' +else + echo 'not found (good!)' +fi +# +# to b or not to b +# +echo " " +echo $n "To be or not to be...$c" +cat > $TMP <<__EOF__ +main() +{ + char a[3], b[3]; + bzero(b,3); + bcopy(a,b,3); + (void)bcmp(a,b,3); + exit(0); +} +__EOF__ +$COMP >/dev/null 2>&1 +if [ $? -eq 0 ] ; then + echo "and so it shall be! bcopy/bzero/bcmp are about!" + BZERO=bzero +else + echo "and it wasn't. No bcopy/bzero/bcmp...hmpf" + BZERO=memset +fi +echo " " +echo $n "Which one, gettimeofday, or lrand48..$c" +cat > $TMP <<__EOF__ +#include +#include +main() + { + struct timeval tv; + (void) gettimeofday(&tv, NULL); + } +__EOF__ +$COMP >/dev/null 2>&1 +if [ $? -eq 0 ] ; then + echo "We have a winner! gettimeofday found." + GETTIMEOFDAY=define +else + echo "No gettimeofday. Lets try lrand48." +cat > $TMP <<__EOF__ +main() +{ + int a; + a=lrand48(); +} +__EOF__ + $COMP >/dev/null 2>&1 + if [ $? -eq 0 ] ; then + echo "Bingo! lrand48!" + LRAND48=define + fi +fi +# +# check for non-blocking fd style available.. +# +echo " " +echo 'Checking for POSIX/BSD/SYSV non-blocking stuff' +if [ -f $TMP -o -d $TMP ] ; then + $RM -f $TMP +fi +cat > $PLATE <<__EOF__ +#include +#include +#include +#include +#include +#include +alarmed() +{ + exit(1); +} +main() +{ + char b[12], x[32]; + int f, l = sizeof(x); + f = socket(AF_INET, SOCK_DGRAM, 0); + if (f >= 0 && !(fcntl(f, F_SETFL, BLOCKING))) { + signal(SIGALRM, alarmed); + alarm(3); + recvfrom(f, b, 12, 0, x, &l); + alarm(0); + exit(0); + } + exit(1); +} +__EOF__ +sed -e 's/BLOCKING/O_NONBLOCK/' $PLATE > $TMP +$COMP >/dev/null 2>&1 +if [ 0 -eq $? ] ; then + $EXEC +fi +if [ 0 -eq $? ] ; then + BLOCK=O_NONBLOCK +else + echo 'O_NONBLOCK not present/working in fcntl.h or sys/ioctl.h' + if [ -f $TMP -o -d $TMP ] ; then + $RM -f $TMP $EXEC; + fi + sed -e 's/BLOCKING/O_NDELAY/' $PLATE > $TMP + $COMP >/dev/null 2>&1 + if [ 0 -eq $? ] ; then + $EXEC + fi + if [ 0 -eq $? ] ; then + BLOCK=O_NDELAY + else + echo 'O_NDELAY not present/working in fcntl.h or sys/ioctl.h' + if [ -f $TMP -o -d $TMP ] ; then + $RM -f $TMP $EXEC; + fi + sed -e 's/BLOCKING/FIONBIO/' $PLATE > $TMP + $COMP >/dev/null 2>&1 + if [ 0 -eq $? ] ; then + echo 'FIONBIO not found! No option found!' + BLOCK=none + else + BLOCK=FIONBIO + fi + fi +fi +$RM -f $TMP $PLATE $EXEC +echo "Blocking selected: $BLOCK"; +# +# reliable signals ? +# +echo 'Looking for reliable signals...' +echo "Hmmm...wonder if you have 'action from POSIX..." +cat > $TMP <<__EOF__ +#include + +main() +{ /* poor replacement for NULL but who cares here ? */ + sigaction(SIGTERM, (struct sigaction *)0L, (struct sigaction *)0L); +} +__EOF__ +$COMP >/dev/null 2>&1 +if [ $? -eq 0 ] ; then + echo "Ooooh, you are a lucky one! 'action from POSIX!" + SIGNAL=posix +else + $RM -f $EXEC $TMP + cat > $TMP <<__EOF__ +#include +int calls = 0; +void handler() +{ + if (calls) + return; + calls++; + kill(getpid(), SIGTERM); + sleep(1); +} +main() +{ + signal(SIGTERM, handler); + kill(getpid(), SIGTERM); + exit (0); +} +__EOF__ + echo $n "Nope, but you have...$c" + $COMP >/dev/null 2>&1 + $EXEC + if [ $? -eq 0 ] ; then + echo 'reliable signals! Cheers BSD!' + SIGNAL=bsd + else + echo "yucky, unreliable SYSV!" + SIGNAL=sysv + fi +fi +$RM -f $EXEC $TMP +# +echo 'Now those strings libraries...hmm...which one is it...' +cat > $TMP <<__EOF__ +#$STRINGH STRINGH +#$STRINGSH STRINGSH +#ifdef STRINGH +#include +#endif +#ifdef STRINGSH +#include +#endif +main() +{ + char *s = index("foo", 'o'); + exit(0); +} +__EOF__ +$COMP >/dev/null 2>&1 +if [ $? -eq 0 ] ; then + echo "Cool...you have index()!" +else + NOINDEX=define + echo "Grmpf...I guess there is a strchr() out there somewhere..." +fi +$RM -f $EXEC $TMP +# +# getrusage or times ? +# +echo $n "One for debugging, mainly, getrusage(2) or times(2)...$c" +cat > $TMP <<__EOF__ +#include +#include +#include +main() +{ + struct rusage rus; + (void)getrusage(RUSAGE_SELF, &rus); +} +__EOF__ +$COMP >/dev/null 2>&1 +if [ $? -eq 0 ] ; then + TIMES=getrusage + echo "getrusage()" +else + $RM -f $EXEC $TMP + cat > $TMP <<__EOF__ +#include +#include +#include +main() +{ + struct tms tmsbuf; + (void)times(&tmsbuf); +} +__EOF__ + $COMP >/dev/null 2>&1 + if [ $? -eq 0 ] ; then + TIMES=times + echo "times()" + else + echo "couldn't get either ?!" + TIMES=none + fi +fi +# +# what do we need that isn't here already ? +# +echo "What else do I need that you don't have..." +echo $n "Lets see...$c" +cat > $TMP <<__EOF__ +main() +{ + unsigned long foo; + + char *s = strtoul("0x12345", &foo, 16); + exit(0); +} +__EOF__ +$COMP >/dev/null 2>&1 +if [ $? -ne 0 ] ; then + echo $n " strtoul$c" + $RM -f Makefile.tmp + sed -e "s@^STRTOUL=\(.*\)@STRTOUL=strtoul.o@" Makefile > Makefile.tmp + cp Makefile.tmp Makefile + $RM -f Makefile.tmp +else + $RM -f Makefile.tmp + sed -e "s@^STRTOUL=\(.*\)@STRTOUL=@" Makefile > Makefile.tmp + cp Makefile.tmp Makefile + $RM -f Makefile.tmp +fi +$RM -f $EXEC $TMP +cat > $TMP <<__EOF__ +main() +{ + char *s = strerror(0); + exit(0); +} +__EOF__ +$COMP >/dev/null 2>&1 +if [ $? -ne 0 ] ; then + echo $n " strerror$c" + NSTRERROR=define +fi +$RM -f $EXEC $TMP +cat > $TMP <<__EOF__ +#include +#include +#include +#include + +main() +{ + dn_skipname("",""); + exit(0); +} +__EOF__ +$COMP >/dev/null 2>&1 +if [ $? -ne 0 -o "$OSNAME" = "Linux RedHat 5.0" -o -n "$NEEDSKIPNAME" ] ; then + echo $n " dn_skipname$c" + $RM -f Makefile.tmp + sed -e "s@^RES=\(.*\)@RES=res_skipname.o@" Makefile > Makefile.tmp + cp Makefile.tmp Makefile + $RM -f Makefile.tmp +else if [ $? -ne 0 -o "$OSNAME" = "Linux RedHat 5.1" -o -n "$NEEDSKIPNAME" ] ; then + echo $n " dn_skipname$c" + $RM -f Makefile.tmp + sed -e "s@^RES=\(.*\)@RES=res_skipname.o@" Makefile > Makefile.tmp + cp Makefile.tmp Makefile + $RM -f Makefile.tmp +else + $RM -f Makefile.tmp + sed -e "s@^RES=\(.*\)@RES=@" Makefile > Makefile.tmp + cp Makefile.tmp Makefile + $RM -f Makefile.tmp +fi +fi +$RM -f $EXEC $TMP +cat > $TMP <<__EOF__ +#include +main() +{ + u_int32_t foo; + exit(0); +} +__EOF__ +$COMP >/dev/null 2>&1 +if [ $? -ne 0 ] ; then + echo $n " u_int32_t$c" + $RM -f Makefile.tmp + sed -e "s@^NEED_U_INT32_T=\(.*\)@NEED_U_INT32_T=-DNEED_U_INT32_T@" Makefile > Makefile.tmp + cp Makefile.tmp Makefile + $RM -f Makefile.tmp +else + $RM -f Makefile.tmp + sed -e "s@^NEED_U_INT32_T=\(.*\)@NEED_U_INT32_T=@" Makefile > Makefile.tmp + cp Makefile.tmp Makefile + $RM -f Makefile.tmp +fi +$RM -f $EXEC $TMP +cat > $TMP <<__EOF__ +#$STRINGH STRINGH +#$STRINGSH STRINGSH +#ifdef STRINGH +#include +#endif +#ifdef STRINGSH +#include +#endif +main() +{ + char *t = "a", **p = NULL, *s = strtoken(&p, t, ","); + if (!strcmp(t, s)) + exit(0); + exit(1); +} +__EOF__ +$COMP >/dev/null 2>&1 +if [ $? -ne 0 ] ; then + echo $n " strtoken$c" + NSTRTOKEN=define +else + $EXEC + if [ $? -ne 0 ] ; then + echo $n " strtoken$c" + NSTRTOKEN=define + fi +fi +$RM -f $EXEC $TMP +cat > $TMP <<__EOF__ +#$STRINGH STRINGH +#$STRINGSH STRINGSH +#ifdef STRINGH +#include +#endif +#ifdef STRINGSH +#include +#endif +main() +{ + char *t = "1\0", *s; + s = strtok(t, ","); + if (!strcmp(t, s)) + exit(0); + exit(1); +} +__EOF__ +$COMP >/dev/null 2>&1 +if [ $? -ne 0 ] ; then + echo $n " strtok$c" + NSTRTOK=define +else + $EXEC + if [ $? -ne 0 ] ; then + echo $n " strtok$c" + NSTRTOK=define + fi +fi +$RM -f $EXEC $TMP +cat > $TMP << __EOF__ +#include +#include +main() +{ + struct in_addr in; + (void)inet_addr("1.2.3.4"); +} +__EOF__ +$COMP >/dev/null 2>&1 +if [ $? -ne 0 ] ; then + echo $n " inet_addr$c" + NINETADDR=define +fi +$RM -f $EXEC $TMP +cat > $TMP << __EOF__ +#include +#include +main() +{ + struct in_addr in; + in.s_addr = 0x12345678; + (void)inet_ntoa(in); +} +__EOF__ +$COMP >/dev/null 2>&1 +if [ $? -ne 0 ] ; then + echo $n " inet_ntoa$c" +fi +$RM -f $EXEC $TMP +cat > $TMP << __EOF__ +#include +#include +main() +{ + struct in_addr in; + in.s_addr = 0x87654321; + (void)inet_netof(in); +} +__EOF__ +$COMP >/dev/null 2>&1 +if [ $? -ne 0 ] ; then + echo $n " inet_netof$c" + NINETNETOF=define +fi +$RM -f $EXEC $TMP +echo " " +# +# +# +echo " " +echo "Ok, here's your chance...I think you should use $BLOCK, you want" +echo "which of these ? O_NONBLOCK (POSIX) O_NDELAY (BSD) FIONBIO (SYSV)" +echo $n "[$BLOCK] -> $c" +if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc +else + cc="" +fi +if [ "$cc" = "none" ] ; then + cc='' +elif [ -z "$cc" ] ; then + cc=$BLOCK +fi +BLOCK=$cc +echo "I found $SIGNAL signals." +if [ "$cc" = "none" ] ; then + cc='' +elif [ "$SIGNAL" = "posix" ] ; then + echo "Hmmm...I'm not sure if signal() is reliable or not either..." +fi +echo "You can choose between posix, bsd and sysv. What'll it be ?" +echo $n "[$SIGNAL] -> $c" +if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc +else + cc="" +fi +if [ "$cc" = "none" ] ; then + cc='' +elif [ -z "$cc" ] ; then + cc=$SIGNAL +fi +SIGNAL=$cc +if [ "$TIMES" = "none" ] ; then + echo "I didn't find either getrusage or times earlier...If you do have" + echo "either of these, please tell me now." +else + echo "I found $TIMES, out of getrusage and times. getrusage is" + echo "more informative. If you wish to swap your choice, please" + echo "do so now." +fi +echo $n "[$TIMES] -> $c" +if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc +else + cc="" +fi +if [ "$cc" = "none" ] ; then + cc='' +elif [ -z "$cc" ] ; then + cc=$TIMES +fi +TIMES=$cc + +$RM -f $EXEC $TMP $PLATE +cat > $SETUP <<__EOF__ +#ifndef __setup_include__ +#define __setup_include__ +#$PARAMH PARAMH +#$UNISTDH UNISTDH +#$STRINGH STRINGH +#$STRINGSH STRINGSH +#$STDLIBH STDLIBH +#$STDDEFH STDDEFH +#$SYSSYSLOGH SYSSYSLOGH +#$NOINDEX NOINDEX +#$NSTRERROR NEED_STRERROR +#$NSTRTOKEN NEED_STRTOKEN +#$NSTRTOK NEED_STRTOK +#$NINETADDR NEED_INET_ADDR +#$NINETNTOA NEED_INET_NTOA +#$NINETNETOF NEED_INET_NETOF +#$GETTIMEOFDAY GETTIMEOFDAY +#$LRAND48 LRAND48 +__EOF__ +if [ "$MALLOCH" = "undef" ] ; then + echo "#undef MALLOCH" >> $SETUP +else + echo "#define MALLOCH <$MALLOCH>" >> $SETUP +fi +if [ "$BZERO" = "memset" ] ; then + cat >> $SETUP <<__EOF__ +#define bzero(a,b) memset(a,0,b) +#define bcopy(a,b,c) memcpy(b,a,c) +#define bcmp memcmp +__EOF__ +fi +if [ "$BLOCK" = "O_NONBLOCK" ] ; then + echo "#define NBLOCK_POSIX" >> $SETUP +elif [ "$BLOCK" = "O_NDELAY" ] ; then + echo "#define NBLOCK_BSD" >> $SETUP +else + echo "#define NBLOCK_SYSV" >> $SETUP +fi +if [ "$SIGNAL" = "posix" ] ; then + echo "#define POSIX_SIGNALS" >> $SETUP +elif [ "$SIGNAL" = "bsd" ] ; then + echo "#define BSD_RELIABLE_SIGNALS" >> $SETUP +else + echo "#define SYSV_UNRELIABLE_SIGNALS" >> $SETUP +fi +if [ "$TIMES" = "times" ] ; then + echo "#define TIMES_2" >> $SETUP + echo "#undef GETRUSAGE_2" >> $SETUP +elif [ "$TIMES" = "getrusage" ] ; then + echo "#undef TIMES_2" >> $SETUP + echo "#define GETRUSAGE_2" >> $SETUP +else + echo "#undef TIMES_2" >> $SETUP + echo "#undef GETRUSAGE_2" >> $SETUP +fi +echo "#endif" >> $SETUP + +FOO="" +runonce="" +while [ -z "$FOO" ] ; do + if [ -n "$NOSPOOF" ] ; then + FOO="Yes" + else + FOO="No" + fi + echo "" + echo "Many operating systems are running with insecure TCP stacks." + echo "This allows IP spoofing attacks, which are very difficult for" + echo "operators to track down and ban." + echo "" + echo "If you are CERTAIN your operating system has secure TCP stacks" + echo "you do not need to define this. If you are not certain, define" + echo "this and find out if you need it later or not. You can mail the" + echo "source mailing list later; someone there can help you determine" + echo "if your OS is secure or not." + echo "" + + if [ "$OSNAME" = "FreeBSD 2.2" ]; then + echo "Your version of FreeBSD is 2.2-Release or later, so you do not" + echo "need to run nospoof." + echo "" + FOO=No + fi + + if [ "$OSNAME" = "FreeBSD" ]; then + echo "If your version of FreeBSD is 2.2-Release or later, you do not" + echo "need to run nospoof." + echo "" + fi + + echo "Do you have an insecure operating system and therefore want to" + echo "use the server anti-spoof protection?" + echo $n "[$FOO] -> $c" + if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc + else + cc="" + runonce=Yes + fi + if [ -z "$cc" ] ; then + cc=$FOO + fi + case "$cc" in + [Yy]*) + NOSPOOF="1" + ;; + [Nn]*) + NOSPOOF="" + ;; + *) + echo "" + echo "You need to enter either Yes or No here..." + echo "" + FOO="" + ;; + esac +done + +if [ -n "$NOSPOOF" ] ; then + +FOO="" +runonce="" +while [ -z "$FOO" ] ; do + FOO="$NOSPOOF_SEED01" + echo "For security, the nospoof code uses two special values, called" + echo "seeds. Here, please enter one of them. The values are in" + echo "hexidecimal (base 16) using the digits 0123456789abcdef. Each" + echo "value can contain up to 8 digits, and should be specified in the" + echo "form 0x12345678. If you use the defaults, that should be ok, but" + echo "it is more secure if you choose your own special values and keep" + echo "them secret." + echo $n "[$FOO] -> $c" + if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc + else + cc="" + runonce=Yes + fi + if [ -z "$cc" ] ; then + cc=$FOO + fi + case "$cc" in + 0x[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]) + NOSPOOF_SEED01=$cc + ;; + [0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]) + NOSPOOF_SEED01=0x$cc + ;; + *) + echo " " + echo "Read the instructions and try again... You did not enter the" + echo "value correctly." + echo "" + FOO="" + ;; + esac +done + +FOO="" +runonce="" +while [ -z "$FOO" ] ; do + FOO="$NOSPOOF_SEED02" + echo "For security, the nospoof code uses two special values, called" + echo "seeds. Here, please enter one of them. The values are in" + echo "hexidecimal (base 16) using the digits 0123456789abcdef. Each" + echo "value can contain up to 8 digits, and should be specified in the" + echo "form 0x12345678. If you use the defaults, that should be ok, but" + echo "it is more secure if you choose your own special values and keep" + echo "them secret." + echo $n "[$FOO] -> $c" + if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc + else + cc="" + runonce=Yes + fi + if [ -z "$cc" ] ; then + cc=$FOO + fi + case "$cc" in + 0x[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]) + NOSPOOF_SEED02=$cc + ;; + [0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F]) + NOSPOOF_SEED02=0x$cc + ;; + *) + echo " " + echo "Read the instructions and try again... You did not enter the" + echo "value correctly." + echo "" + FOO="" + ;; + esac +done + +# this matches a NOSPOOF check waaaaaay up there +fi + +FOO="" +runonce="" +while [ -z "$FOO" ] ; do + FOO="$DPATH" + echo "" + echo "What directory are all the server configuration files in?" + echo $n "[$FOO] -> $c" + if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc + else + cc="" + runonce=Yes + fi + if [ -z "$cc" ] ; then + cc=$FOO + fi +done +DPATH=$cc + +FOO="" +runonce="" +while [ -z "$FOO" ] ; do + FOO="$SPATH" + echo "" + echo "What is the explicit path to where the ircd binary will be" + echo "installed? This should point to a file, not a directory" + echo $n "[$FOO] -> $c" + if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc + else + cc="" + runonce=Yes + fi + if [ -z "$cc" ] ; then + cc=$FOO + fi +done +SPATH=$cc + +FOO="" +runonce="" +while [ -z "$FOO" ] ; do + if [ -n "$HUB" ] ; then + FOO="Hub" + else + FOO="Hub" + fi + echo "" + echo "Would you like to compile as a Halfhub or as a leaf?" + echo "The halfhub will be a real hub if set so in unrealircd.conf" + echo "Type Hub for selecting hub and Leaf for a leaf.." + echo $n "[$FOO] -> $c" + if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc + else + cc="" + runonce=Yes + fi + if [ -z "$cc" ] ; then + cc=$FOO + fi + case "$cc" in + [Hh]*) + HUB="1" + ;; + [Ll]*) + HUB="" + ;; + *) + echo "" + echo "You need to enter either Hub or Leaf here..." + echo "" + FOO="" + ;; + esac +done + +DOMAINNAME="box.name" +FOO="" +runonce="" +while [ -z "$FOO" ] ; do + FOO="$DOMAINNAME" + echo "" + echo "What is your box hostname?" + echo $n "[$FOO] -> $c" + if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc + else + cc="" + runonce=Yes + fi + if [ -z "$cc" ] ; then + cc=$FOO + fi +done +DOMAINNAME=$cc + +FOO="" +runonce="" +while [ -z "$FOO" ] ; do + if [ -n "$CRYPT_OPER_PASSWORD" ] ; then + FOO="Yes" + else + FOO="No" + fi + echo "" + echo "Do you use encrypted operator passwords?" + echo $n "[$FOO] -> $c" + if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc + else + cc="" + runonce=Yes + fi + if [ -z "$cc" ] ; then + cc=$FOO + fi + case "$cc" in + [Yy]*) + CRYPT_OPER_PASSWORD="1" + ;; + [Nn]*) + CRYPT_OPER_PASSWORD="" + ;; + *) + echo "" + echo "You need to enter either Yes or No here..." + echo "" + FOO="" + ;; + esac +done + +FOO="" +runonce="" +while [ -z "$FOO" ] ; do + if [ -n "$CRYPT_LINK_PASSWORD" ] ; then + FOO="Yes" + else + FOO="No" + fi + echo "" + echo "Do you use encrypted incoming link passwords? (N lines only," + echo "C lines must remain unencrypted always)" + echo $n "[$FOO] -> $c" + if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc + else + cc="" + runonce=Yes + fi + if [ -z "$cc" ] ; then + cc=$FOO + fi + case "$cc" in + [Yy]*) + CRYPT_LINK_PASSWORD="1" + ;; + [Nn]*) + CRYPT_LINK_PASSWORD="" + ;; + *) + echo "" + echo "You need to enter either Yes or No here..." + echo "" + FOO="" + ;; + esac +done + +FOO="" +runonce="" +while [ -z "$FOO" ] ; do + FOO="$LISTEN_SIZE" + echo "" + echo "What listen() backlog value do you wish to use? Some servers" + echo "have problems with more than 5, others work fine with many, many" + echo "more." + echo $n "[$FOO] -> $c" + if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc + else + cc="" + runonce=Yes + fi + if [ -z "$cc" ] ; then + cc=$FOO + fi + case "$cc" in + [1-9]*) + LISTEN_SIZE="$cc" + ;; + *) + echo "" + echo "You need to enter a number here." + echo "" + FOO="" + ;; + esac +done + +FOO="" +runonce="" +while [ -z "$FOO" ] ; do + FOO="$NICKNAMEHISTORYLENGTH" + echo "" + echo "How far back do you want to keep the nickname history?" + echo $n "[$FOO] -> $c" + if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc + else + cc="" + runonce=Yes + fi + if [ -z "$cc" ] ; then + cc=$FOO + fi + case "$cc" in + [1-9]*) + NICKNAMEHISTORYLENGTH="$cc" + ;; + *) + echo "" + echo "You need to enter a number here." + echo "" + FOO="" + ;; + esac +done + +FOO="" +runonce="" +while [ -z "$FOO" ] ; do + FOO="$MAXSENDQLENGTH" + echo "" + echo "What sendq length do you wish to have?" + echo $n "[$FOO] -> $c" + if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc + else + cc="" + runonce=Yes + fi + if [ -z "$cc" ] ; then + cc=$FOO + fi + case "$cc" in + [1-9]*) + MAXSENDQLENGTH="$cc" + ;; + *) + echo "" + echo "You need to enter a number here." + echo "" + FOO="" + ;; + esac +done + +FOO="" +runonce="" +while [ -z "$FOO" ] ; do + FOO="$BUFFERPOOL" + echo "" + echo "What size of a bufferpool (total of ALL sendq's in use) do you" + echo "do you wish to have?" + echo $n "[$FOO] -> $c" + if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc + else + cc="" + runonce=Yes + fi + if [ -z "$cc" ] ; then + cc=$FOO + fi + case "$cc" in + \([1-9]*\)) + BUFFERPOOL="$cc" + ;; + *) + echo "" + echo "You need to enter a number here, either based on" + echo "MAXSENDQLENGTH or a literal value. Also, this value" + echo "MUST be enclosed in parens -- (9*MAXSENDQLENGTH), for example." + echo "" + FOO="" + ;; + esac +done + +FOO="" +runonce="" +while [ -z "$FOO" ] ; do +if [ "$OSNAME" = "Linux" ] ; then + FOO="256" +elif [ "$OSNAME" = "Linux (with GLIBC 2.x or greater)" ] ; then + FOO="256" +else + FOO="$MAXCONNECTIONS" +fi + echo "" + echo "How many file descriptors (or sockets) can the irc server use?" + echo $n "[$FOO] -> $c" + if [ -z "$AUTO_CONFIG" -o -n "$runonce" ] ; then + read cc + else + cc="" + runonce=Yes + fi + if [ -z "$cc" ] ; then + cc=$FOO + fi + case "$cc" in + [1-9][0-9][0-9]*) + MAXCONNECTIONS="$cc" + ;; + *) + echo "" + echo "You need to enter a number here, greater or equal to 100." + echo "" + FOO="" + ;; + esac +done + +# +# check FD_SETSIZE and override if needed. +# + +cat > $TMP <<__EOF__ +#include +#include + +#ifndef FD_SETSIZE +#define FD_SETSIZE -1 +#endif + +/* + * Prints "notdef" if FD_SETSIZE is undefined, + * "ok" if FD_SETSIZE is at least as large as provided on the + * compile command line (-DMAXCONNECTIONS=1234) + * "###" if it is less. (### is the FD_SETSIZE value) + */ +int +main(int argc, char *argv[]) +{ + if (FD_SETSIZE == -1) + printf("notdef\n"); + else if (FD_SETSIZE >= MAXCONNECTIONS) + printf("ok\n"); + else + printf("%d\n", FD_SETSIZE); + + return 0; +} +__EOF__ +$COMP "-DMAXCONNECTIONS=$MAXCONNECTIONS" >/dev/null 2>&1 +if [ $? -ne 0 ] ; then + echo " " + echo "I could not derrive what your system allows for the maximum number" + echo "of connections becuase the test program did not compile." + echo " " + FD_SETSIZE="" +else + fd_setsize_ok=`$EXEC` + case $fd_setsize_ok in + notdef) + echo " " + echo "I could not derrive what your system allows for the maximum" + echo "number of connections because the test program did not find" + echo "a system-supplied value for FD_SETSIZE. Assuming it is" + echo "defined correctly but the test program cannot find it." + echo " " + FD_SETSIZE="" + ;; + ok) + echo " " + echo "Your system-supplied value for FD_SETSIZE is large enough" + echo "for ircd to leave it untouched." + echo " " + FD_SETSIZE="" + ;; + *) + echo " " + echo "Your system-supplied value for FD_SETSIZE is $fd_setsize_ok" + echo "but you requested $MAXCONNECTIONS for ircd. FD_SETSIZE will" + echo "be overridden using -DFD_SETSIZE=$MAXCONNECTIONS when" + echo "compiling ircd." + echo " " + FD_SETSIZE=$MAXCONNECTIONS + ;; + esac +fi + +if [ -n "$FD_SETSIZE" ] ; then + $RM -f Makefile.tmp + sed -e "s@^FD_SETSIZE=\(.*\)@FD_SETSIZE=-DFD_SETSIZE=$FD_SETSIZE@" Makefile > Makefile.tmp + cp Makefile.tmp Makefile + $RM -f Makefile.tmp +else + $RM -f Makefile.tmp + sed -e "s@^FD_SETSIZE=\(.*\)@FD_SETSIZE=@" Makefile > Makefile.tmp + cp Makefile.tmp Makefile + $RM -f Makefile.tmp +fi + +$RM -f $EXEC $TMP + +$RM -f ./core +# +# create the $OPTIONS_H file +# +rm -f $OPTIONS_H +cat > $OPTIONS_H << __EOF__ + +/* + * VERSION: $IRCD_VERSION + * DATE: $CONF_DATE + * OS: $OSNAME + * + * You shouldn't have to edit this file, if you really need to change + * something, i'd suggest running Config again. + */ + +#define MYOSNAME "$OS" +#define DPATH "$DPATH" +#define SPATH "$SPATH" +#define DOMAINNAME "$DOMAINNAME" +#define LISTEN_SIZE $LISTEN_SIZE +#define MAXSENDQLENGTH $MAXSENDQLENGTH +#define BUFFERPOOL $BUFFERPOOL +#define MAXCONNECTIONS $MAXCONNECTIONS +#define NICKNAMEHISTORYLENGTH $NICKNAMEHISTORYLENGTH +__EOF__ + +if [ -n "$CRYPT_OPER_PASSWORD" ] ; then + echo "#define CRYPT_OPER_PASSWORD 1" >> $OPTIONS_H +else + echo "#undef CRYPT_OPER_PASSWORD" >> $OPTIONS_H +fi +if [ -n "$CRYPT_LINK_PASSWORD" ] ; then + echo "#define CRYPT_LINK_PASSWORD 1" >> $OPTIONS_H +else + echo "#undef CRYPT_LINK_PASSWORD" >> $OPTIONS_H +fi +if [ -n "$HUB" ] ; then + echo "#define HUB 1" >> $OPTIONS_H +else + echo "#undef HUB" >> $OPTIONS_H +fi + +if [ -n "$NOSPOOF" ] ; then + echo "#define NOSPOOF 1" >> $OPTIONS_H +else + echo "#undef NOSPOOF" >> $OPTIONS_H +fi +if [ -n "$NOSPOOF_SEED01" ] ; then + echo "#define NOSPOOF_SEED01 $NOSPOOF_SEED01" >> $OPTIONS_H +fi +if [ -n "$NOSPOOF_SEED02" ] ; then + echo "#define NOSPOOF_SEED02 $NOSPOOF_SEED02" >> $OPTIONS_H +fi + +if [ "$OSNAME" = "Linux (with GLIBC 2.x or greater)" ]; then + echo "#define GLIBC2_x" >> $OPTIONS_H +fi + +# +# create the persistant file +# +rm -f $OPTIONS +cat > $OPTIONS << __EOF__ +# +# VERSION: $IRCD_VERSION +# DATE: $CONF_DATE +# OS: $OSNAME +# +# You shouldn't have to edit this file, if you really need to change +# something, i'd suggest running Config again. +# +# +IRCNET="$IRCNET" +LAST_VERSION="$IRCD_VERSION" +NOSPOOF="$NOSPOOF" +NOSPOOF_SEED01="$NOSPOOF_SEED01" +NOSPOOF_SEED02="$NOSPOOF_SEED02" +DPATH="$DPATH" +SPATH="$SPATH" +CRYPT_OPER_PASSWORD="$CRYPT_OPER_PASSWORD" +CRYPT_LINK_PASSWORD="$CRYPT_LINK_PASSWORD" +LISTEN_SIZE="$LISTEN_SIZE" +MAXSENDQLENGTH="$MAXSENDQLENGTH" +BUFFERPOOL="$BUFFERPOOL" +MAXCONNECTIONS="$MAXCONNECTIONS" +NICKNAMEHISTORYLENGTH="$NICKNAMEHISTORYLENGTH" +HUB="$HUB" +DOMAINNAME="$DOMAINNAME" +__EOF__ + +if [ "$OSNAME" = "Linux (with GLIBC 2.x or greater)" ]; then + echo "GLIBC2_x="YES"" >> $OPTIONS + echo "" +fi + +cat << __EOF__ + + _____________________________________________________________________ +| | +| UnrealIRCd Compile-Time Config | +| | +| The file "$OPTIONS" was either created or rewritten to contain your | +| answers to the above questions. | +| | +|_____________________________________________________________________| +|_____________________________________________________________________| +| | +| Now all you have todo is type 'make' and let it compile. When thats | +| done, you will receive other instructions on what todo next. | +| | +|_____________________________________________________________________| +|_____________________________________________________________________| +| - The UnrealIRCd Team - | +| * Stskeeps stskeeps@tspre.org +| * codemastr codemastr@tspre.org +|_____________________________________________________________________| +__EOF__ diff --git a/Donation b/Donation new file mode 100644 index 000000000..ea8f3c958 --- /dev/null +++ b/Donation @@ -0,0 +1,20 @@ +Send donations to: + +UnrealIRCd Project +P.O.Box 52 +7400 Herning +Denmark + +(if you want to that is.. I mean .. I do my coding for fun.. - + send a teddybear or something to my nephews or something for + my nieces.. so they can keep quiet while I'm trying to do anything) + + Disks, HD's, free internet time or alike are welcome ;p ;) + +-- Techie (which HAD got 20 MB free HD space out of 400 MB on his own puter) + (just got a 8.4gb and rh6.0 *_*) + (and used 200 MB on his shell to code this :>) .. + - oh and btw i'm male:P (*looks at BlueFlame^*) + + +[ $Id$ ] diff --git a/INSTALL b/INSTALL new file mode 100644 index 000000000..8f5811946 --- /dev/null +++ b/INSTALL @@ -0,0 +1,153 @@ +$Id$ + +Installation Procedures for the UnrealIRCD: +======================================================================= +Created by Stskeeps +======================================================================= + +This document describes how to install ircd, the unix daemon that acts as +an IRC server. + +For more information on UnrealIRCD contact us at + unreal-dev@lists.sourceforge.net + +The UnrealIRCD is available from http://unreal.tspre.org +along with the latest copy of this document. + + +======================================================================= +This version of the UnrealIRCD is known to compile on the following +platforms, and with the following compilers. If you wish to add to this +list, send the relevant information to us. + +OS and Version Compiler and Version Comments +------------------- ------------------------ ------------------------------- +NetBSD 1.2B gcc 2.7.2 + +FreeBSD 2.1.0 gcc 2.6.3 Do NOT use crypt at all... + +SunOS 4.1.4 gcc 2.7-96q1 (Cygnus) + +Solaris 2.4 gcc 2.7-96q1 (Cygnus) (SunOS 5.4) + +Solaris 2.5 SunWorks Pro C (SunOS 5.5.1) + cc: SC4.0 18 Oct 1995 C 4.0 + +Digital Unix 3.2 gcc 2.7-96q3 (Cygnus) + +Linux 2.0.24 gcc 2.7.2.1 + +HPUX 9.01 gcc 2.6.3 + +HPUX 10.01 gcc 2.7-96q3 (Cygnus) + +Linux PPC (iMac) + +AmigaOS 3.0 GCC egcs-2.91.66 (compile with -D_AMIGA) + +Windows NT/95 MSVC++ 4.0 + +Linux Mandrake Read FAQ +======================================================================= +Unpacking the Distribution + +If you are reading this, you have most likely already done this, but to +recap: + +The UnrealIRCD server comes tarred and gziped. To uncompress it and expand +it, use the following commands at the Unix prompt: + +gzip -d Unreal3.0.tar.gz +tar -xvf Unreal3.0.tar + +This will create a new directory called Unreal3.0 and unpack the source +into it. + +======================================================================= +Editing the Configuration Files + +In previous versions of the source code many files had to be edited to +make things right for any given server. + +In this version you DO NOT NEED TO EDIT THE Makefile OR ANY FILES +IN include! That is, unless you set some strange options. If you +find the need to edit include/config.h, for example, +mail us and tell us why ; Config can be made smarter, and that will make +it so you won't have to edit anything for the next version. + +======================================================================= +Compiling Your Server + +Windows users: You must compile the Config program first. To do this +run the following command: $CC src\Config.c +where $CC is the name of your compiler. for MSVC users that is 'cl' + +To build the server, simply run + % ./Config +to start the configuraton program. This program looks at your system +and generate the include/setup.h, include/settings.h, and Options files. +You will be asked some questions. Usually the default answers are the best +ones and most correct. To accept the default, just hit RETURN. + +Next, type 'make'. This will compile your server. Depending on your system, +this may be a good time for a caffeine break. (MSVC users run 'nmake') + +Hopefully, the server will compile without incident. If it does not, and +you are not able to determine the error, please email +unreal-dev@lists.sourceforge.net and hopefully someone will be able to help you with the problem. If you +do need to fix something, mail there with a patch. + +BE CERTAIN TO INCLUDE OPERATING SYSTEM INFORMATION (uname -a) AND COMPILER +VERSION (gcc -v, for instance) IN ALL BUG REPORTS. + + +======================================================================= +Installing the Files + +'make install' does not work in this release -- it doesn't do anything +except a compile if that is needed. + +The only files you need are the binary from src/ircd and and an ircd.conf +(see below for copying doc/example.conf as your initial ircd.conf). You +probably will want to create a MOTD file too, as well as place the man +pages from the doc directory to appropriate place in your system. + + +======================================================================= +Configuring Your Server + +The previous step places a file named 'example.conf' into your irc +directory you specified to Config. + +To create an IRC configuration file, edit: ircd.conf + +Now edit this file to reflect your server. The file is mainly +self-explanatory. Note that if you plan to use your server on ROXnet, +make sure that you have the following line: + +U:services.roxnet.org:*:* + +If you need help configuring your file, please connect to ROXnet, +(irc.flirt.org or irc.roxnet.org) - go to channel #UnrealIRCd, and ask. + + +======================================================================= +Starting Your Server + +Simply enter the complete path to the executable into the Unix command +line, then hit return. Your server is now operational, assuming that you +have completed all the steps described above. + +NOTE: If you get something like the following when running ircd: + +ircd fd table too big +Hard Limit: 256 IRC max: 1024 +Fix MAXCONNECTIONS + +You need to change config.h and recompile. Find the line that says +"#define MAXCONNECTIONS 1024", and change it to the number given after +"Hard Limit" (most likely 256), then make the server again, following the +above instructions. + +Enjoy! +- The UnrealIRCd Team - unreal-dev@lists.sourceforge.net diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..d60c31a97 --- /dev/null +++ b/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + 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 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. 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. 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 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 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, +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. + + 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 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.) + +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 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 with such + an offer, in accord with Subsection b above.) + +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. +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. + + 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 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 +this License, you may choose any version ever published by the Free Software +Foundation. + + 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 +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 + + 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 +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. + + 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 +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 + + 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 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. + + + Copyright (C) + + 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 + + +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) 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. + +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 is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +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. diff --git a/Makefile.dist b/Makefile.dist new file mode 100644 index 000000000..bebf33f8c --- /dev/null +++ b/Makefile.dist @@ -0,0 +1,205 @@ +#/************************************************************************ +#* IRC - Internet Relay Chat, Makefile +#* Copyright (C) 1990, Jarkko Oikarinen +#* +#* 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$ +#*/ + +CC=gcc +INCLUDEDIR=../include +NETWORKSDIR= +FROMDOS=/home/cmunk/bin/4dos +# [CHANGEME] +# Default flags: +# Change XCFLAGS if you don't like what Config puts there. Same with +# IRCDLIBS. +# +# If you are configuring by hand, try "-O -g" for XCFLAGS, and leave +# IRCDLIBS blank. If that fails, try recomendations below. +# +XCFLAGS= +IRCDLIBS= + +# +# use the following on MIPS: +#CFLAGS= -systype bsd43 -DSYSTYPE_BSD43 -I$(INCLUDEDIR) +# For Irix 4.x (SGI), use the following: +#CFLAGS= -g -cckr -I$(INCLUDEDIR) +# +# on NEXT use: +#CFLAGS=-bsd -I$(INCLUDEDIR) +#on NeXT other than 2.0: +#IRCDLIBS=-lsys_s +# +# AIX 370 flags +#CFLAGS=-D_BSD -Hxa -I$(INCLUDEDIR) +#IRCDLIBS=-lbsd +# +# Dynix/ptx V2.0.x +#CFLAGS= -I$(INCLUDEDIR) -O -Xo +#IRCDLIBS= -lsocket -linet -lnsl -lseq +# +# Dynix/ptx V1.x.x +#IRCDLIBS= -lsocket -linet -lnsl -lseq +# +#use the following on SUN OS without nameserver libraries inside libc +#IRCDLIBS=-lresolv +# +# Solaris 2 +#IRCDLIBS=-lsocket -lnsl -lresolv -L/usr/ucblib -R/usr/ucblib -lgen +# +# ESIX +#CFLAGS=-O -I$(INCLUDEDIR) -I/usr/ucbinclude +#IRCDLIBS=-L/usr/ucblib -L/usr/lib -lsocket -lucb -lns -lnsl +# +# LDFLAGS - flags to send the loader (ld). SunOS users may want to add +# -Bstatic here. +# +#LDFLAGS=-Bstatic +# +#Dell SVR4 +#CC=gcc +#CFLAGS= -I$(INCLUDEDIR) -O2 +#IRCDLIBS=-lsocket -lnsl -lucb + +# [CHANGEME] +# IRCDMODE is the mode you want the binary to be. +# The 4 at the front is important (allows for setuidness) +# +# WARNING: if you are making ircd SUID or SGID, check config.h to make sure +# you are not defining CMDLINE_CONFIG +IRCDMODE = 711 + +# [CHANGEME] +# IRCDDIR must be the same as DPATH in include/config.h +# +IRCDDIR=/usr/local/lib/ircd + +# [CHANGEME] +# Some SunOS versions want this. Try it without first. +#RES=res_init.o res_comp.o res_mkquery.o +# BSDI systems want this. +#RES=res_skipname.o +# The rest are perfectly content with this. +RES= + +# [CHANGEME] +# If you get a compile-time error dealing with u_int32_t, comment out +# this line. +# NEED_U_INT32_T= -DNEED_U_INT32_T +NEED_U_INT32_T= + +# [CHANGEME] +# If you get a link-time error dealing with strtoul, comment out +# this line. +# STRTOUL= strtoul.o +STRTOUL= + +# [CHANGEME] +# If you get crashes around a specific number of clients, and that client +# load comes close or a little over the system-defined value of FD_SETSIZE, +# override it here and see what happens. +FD_SETSIZE= + +CFLAGS=-I$(INCLUDEDIR) $(XCFLAGS) $(NEED_U_INT32_T) $(FD_SETSIZE) + +SHELL=/bin/sh +SUBDIRS=src +BINDIR=$(IRCDDIR) +MANDIR=/usr/local/man +INSTALL=/usr/bin/install +RM=rm +CP=cp +TOUCH=touch + +all: build + +MAKEARGS = 'CFLAGS=${CFLAGS}' 'CC=${CC}' 'IRCDLIBS=${IRCDLIBS}' \ + 'LDFLAGS=${LDFLAGS}' 'IRCDMODE=${IRCDMODE}' \ + 'BINDIR=${BINDIR}' 'INSTALL=${INSTALL}' \ + 'INCLUDEDIR=${INCLUDEDIR}' 'IRCDDIR=${IRCDDIR}' \ + 'MANDIR=${MANDIR}' 'RM=${RM}' 'CP=${CP}' 'TOUCH=${TOUCH}' \ + 'RES=${RES}' 'SHELL=${SHELL}' 'STRTOUL=${STRTOUL}' + +server: +build: + -@if [ ! -f include/setup.h ] ; then \ + echo "Hmm...doesn't look like you've run Config..."; \ + echo "Doing so now."; \ + sh Config; \ + fi + @for i in $(SUBDIRS); do \ + echo "Building $$i";\ + ( cd $$i; ${MAKE} ${MAKEARGS} build; ) \ + done + @echo ' __________________________________________________ ' + @echo '| Compile is now complete. Now you have to go do |' + @echo '| The load-time configuration - try go read the |' + @echo '| file "dynconf" using your favourite viewer or |' + @echo '| editor. The file will contain instructions on how|' + @echo '| to do the dynamic configuration :) |' + @echo '| |' + @echo '| Thanks for using Unreal IRCd! If you are in need |' + @echo '| for any kind of help regarding the IRCd email us |' + @echo '| at unreal-dev@lists.sourceforge.net |' + @echo '|__________________________________________________|' + +clean: + $(RM) -f *~ \#* core *.orig include/*.orig + @for i in $(SUBDIRS); do \ + echo "Cleaning $$i";\ + ( cd $$i; ${MAKE} ${MAKEARGS} clean; ) \ + done + -@if [ -f include/setup.h ] ; then \ + echo "To really restart installation, remove include/setup.h" ; \ + fi + -@if [ -f include/settings.h ] ; then \ + echo "and include/settings.h" ; \ + fi + +cleandir: clean + rm -rf include/networks.h include/setup.h include/settings.h Makefile Settings + +makex: fromdos + chmod +x Config newnet bsdinstall ircd ircdcron/ircdchk killircd + chmod +x makeconf rehash ircdreg + +fromdos: cleandir + $(FROMDOS) -dv * + $(FROMDOS) -dv src/* + $(FROMDOS) -dv include/* + $(FROMDOS) -dv doc/* + $(FROMDOS) -dv crypt/* + $(FROMDOS) -dv ircdcron/* +makedist: makex + echo "Making UnrealIRCd compatible IRCd Dist." + +stamp: makedist + echo "/* Auto created release stamping */" > include/stamp.h + echo "#define RELEASEID2 \"`date +%s`\"" >> include/stamp.h + echo "#define RELEASESTUFF \"`hostname`\"" >> include/stamp.h + echo "" >> include/stamp.h + +depend: + @for i in $(SUBDIRS); do \ + echo "Making dependencies in $$i";\ + ( cd $$i; ${MAKE} ${MAKEARGS} depend; ) \ + done + +install: all + @echo "Now install by hand; make install is broken." + diff --git a/READTHIS.NOW b/READTHIS.NOW new file mode 100644 index 000000000..9543b856e --- /dev/null +++ b/READTHIS.NOW @@ -0,0 +1,15 @@ +Some notes to remember: +----------------------- +* Don't EVER try to link it to incompatible IRCds (this does not + include services). It is *INCOMPATIBLE*. Please HEED this warning!!! + +* If you need any help you can email me at stskeeps@tspre.org + +* Please read the Changes file about release notes + +* Bugs? Read Unreal.nfo + +* Unreal IRCd is not meant to be a simple IRCd, rather an advanced + IRCd, please read the documentation before asking questions + +[ $Id$ ] diff --git a/TODO b/TODO new file mode 100644 index 000000000..a76578551 --- /dev/null +++ b/TODO @@ -0,0 +1,21 @@ +TODO: (Possible 3.1) +* Limit calls to these functions using parse() + 0.00 3.91 0.00 6475 0.00 0.00 check_registered + 0.00 3.91 0.00 6827 0.00 0.00 check_registered_user +* Optimize: + 0.00 3.91 0.00 1292 0.00 0.01 is_banned + 12.55 9.61 2.57 41320 0.06 0.10 check_lusers + 4.64 11.54 0.95 41566 0.02 0.02 count_channels + 3.08 13.96 0.63 850968 0.00 0.00 flush_connections + (fdlists?) + 0.15 19.62 0.03 29 1.03 1.80 send_list +* Add svsvline for global vlines +* New /whowas system /who as well +* Short MOTDs +* B:Lines +* Channel mode +d +* Raising PING bug +* Make alternative I/O engine using poll() +* Remove some of the _little_ config.h defines and replace with + unrealircd.conf lines, ex ADMINCHAT, REMOTE_REHASH +* X-Windows GUI (how bad it can be but hey! :P) diff --git a/TSpre.doc b/TSpre.doc new file mode 100644 index 000000000..419c3f568 --- /dev/null +++ b/TSpre.doc @@ -0,0 +1,28 @@ + + TSpre.org + +Many here maybe not heard of the Story +how IRC started (and how EFnet started) +EFnet's name means "Eris-Free Network". +Eris was a central hub at the fomer world- +wide IRC network, that anyone could just add +C:N pairs for and connect to. + +I was inspired of the tought of a network +where anyone could link without application and all +that shit.. + +Combined with the IRCd i made (Unreal) and the tspre.org +domain i got donated by Nutcais (my IRC bro). Ive decided to +start the TSpre IRC network, where anyone with TSpre servers +(dreamforge, IRCu p9, and their alike) + +(mostly preffered is Unreal thou).. Its an experimental +network where people can test out thier IRCds and +wIRds without having to fill out apps and so on. + +There are no real rules. So just have fun :) + +See http://www.tspre.org for more info on this=) + +--Stskeeps (stskeeps@tspre.org) diff --git a/Unreal.nfo b/Unreal.nfo new file mode 100644 index 000000000..4a521f381 --- /dev/null +++ b/Unreal.nfo @@ -0,0 +1,49 @@ +=============================================== += UnrealIRCd v3.0 = +=============================================== + Was brought to you by: + * Stskeeps + * codemastr + + Precenses on the Internet: + * http://unreal.tspre.org or http://unreal.sourceforge.net + * ftp://unreal.sourceforge.net/pub/unreal + * ftp://ftp.shadow-realm.org/pub/ircd/UnrealIRCd + + CVS Repository: + * Alpha versions (or beta) + ========================== +cvs -z9 -d :pserver:anonymous@cvs.unreal.sourceforge.net:/cvsroot/unreal login + (just press enter when it asks for password) +cvs -z9 -d :pserver:anonymous@cvs.unreal.sourgeforge.net:/cvsroot/unreal co alpha + + * To get support + ================ + * IRC: /server irc.flirt.org 6667 - /join #unrealircd + * Mailing list: unreal-support@lists.sourceforge.net (for support) + + * Got a bug to report? + ====================== + * If the server crashes and dumps core do this: + * Go into the Unreal directory and type this: + gdb src/ircd core.filename + where core.filename is the filename in the dumping core message + if it loads gdb, (not saying "command not found" etc), type "bt" in + the program (type "quit" to get out again) + + The output coming out there please mail it to + unreal-dev@lists.sourceforge.net, along with OS type, + what "uname -a" says, any clues what it is, if you did anything etc + etc. Please keep the core dump files if we ask you to mail us them + if needed + + * If you experince any wierdnesses (that doesnt crash the server) + please mail unreal-dev@lists.sourceforge.net with any clues on what + you did, what you experinced etc. + + * Got a suggestion? + =================== + * Mail it to unreal-dev@lists.sourceforge.net :) or catch one from + the Unreal team online on IRC:) + + \ No newline at end of file diff --git a/bsdinstall b/bsdinstall new file mode 100755 index 000000000..25b565c93 --- /dev/null +++ b/bsdinstall @@ -0,0 +1,84 @@ +#! /bin/sh +# +# $Id$ +# Old: @(#)install.sh 4.5 (Berkeley) 10/12/83 +# +cmd=/bin/mv +strip="" +chmod="/bin/chmod 755" +chown="chown -f root" +chgrp="/bin/chgrp -f bin" +while true ; do + case $1 in + -s ) strip="strip" + shift + ;; + -c ) cmd="/bin/cp" + shift + ;; + -m ) chmod="/bin/chmod $2" + shift + shift + ;; + -o ) chown="/etc/chown -f $2" + shift + shift + ;; + -g ) chgrp="/bin/chgrp -f $2" + shift + shift + ;; + -d ) cmd="/bin/mkdir" + shift + ;; + * ) break + ;; + esac +done + +if [ ! ${2-""} ] +then echo "install: no destination specified" + exit 1 +fi +if [ ${3-""} ] +then echo "install: too many files specified -> $*" + exit 1 +fi +if [ $1 = $2 -o $2 = . ] +then echo "install: can't move $1 onto itself" + exit 1 +fi +case $cmd in +/bin/mkdir ) + file=$2/$1 + ;; +* ) + if [ '!' -f $1 ] + then echo "install: can't open $1" + exit 1 + fi + if [ -d $2 ] + then file=$2/$1 + else file=$2 + fi + /bin/rm -f $file + ;; +esac + +case $cmd in +/bin/mkdir ) + if [ ! -d "$file" ] + then $cmd $file + fi + ;; +* ) + $cmd $1 $file + if [ $strip ] + then $strip $file + fi + ;; +esac + +$chown $file +$chgrp $file +$chmod $file diff --git a/crypt/Makefile b/crypt/Makefile new file mode 100644 index 000000000..7bc4b1b24 --- /dev/null +++ b/crypt/Makefile @@ -0,0 +1,38 @@ +#************************************************************************ +#* 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. +#* +#* $Id$ +#*/ +# +# Change this to the path of your local ircd.conf file +# + +IRCDCONF = ../ircd.conf + +all: mkpasswd +crypt: install + +mkpasswd: mkpasswd.c + cc -lcrypt -O mkpasswd.c -o mkpasswd + +install: + crypter ${IRCDCONF} + @echo 'done.' + +clean: + /bin/rm -f mkpasswd diff --git a/crypt/README b/crypt/README new file mode 100644 index 000000000..817cc208b --- /dev/null +++ b/crypt/README @@ -0,0 +1,63 @@ +/************************************************************************ + * 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. + * + * $Id$ + */ + +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) diff --git a/crypt/crypter b/crypt/crypter new file mode 100644 index 000000000..0d6b3769f --- /dev/null +++ b/crypt/crypter @@ -0,0 +1,55 @@ +#!/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. +#* +#* $Id$ +#* +#*/ + +#From Sean Batt sean@coombs.anu.edu.au +# +#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); diff --git a/crypt/mkpasswd.c b/crypt/mkpasswd.c new file mode 100644 index 000000000..de72fb5ef --- /dev/null +++ b/crypt/mkpasswd.c @@ -0,0 +1,43 @@ +/* simple password generator by Nelson Minar (minar@reed.edu) + * copyright 1991, all rights reserved. + * You can use this code as long as my name stays with it. + * + * $Id$ + * + */ + +#include +#include +#include + +extern char *getpass(); + +int main(argc, argv) +int argc; +char *argv[]; +{ + static char saltChars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./"; + char salt[3]; + char * plaintext; + int i; + + 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("Enter Password: "); + + printf("Encryption: %s\n", crypt(plaintext, salt)); + return 0; +} + diff --git a/doc/ADD-TO-IRCRC b/doc/ADD-TO-IRCRC new file mode 100644 index 000000000..15eb48ba0 --- /dev/null +++ b/doc/ADD-TO-IRCRC @@ -0,0 +1,72 @@ +# $Id$ + +on ^367 * if ([$4] != []) {echo *** $1 \($3 - $stime($4)) $2} {echo *** $1-} +on ^333 * echo *** Topic for $1 set by $2 on $stime($3) +on ^317 * if (index(012345679 $3) != -1) {echo *** $1 has been idle for $2 seconds. Signon at $stime($3)} {echo *** $1 has been idle for $2 seconds.} +On ^329 "*" echo *** $1 : created $stime($2) +on ^ +alias silence quote silence +alias sile quote silence +on ^raw_irc "% SILENCE %" echo *** $* + +@ hideit = 0 +on ^server_notice "% % NOTICE -- CLIENT*" if (hideit != 1) {echo *** $2-} +alias show @ hideit = 0;echo *** You can now see clients connecting/exiting +alias hide @ hideit = 1;echo *** You will no longer see clients connecting/exiting + + +# ctime and sendq written by bry +# modified by Mmmm + +alias ctime { + ^on 211 - + if ( [$0] ) + { ^assign SS $0- } + { ^assign SS $S } + +^on ^211 * { + eval ^assign hrs2 ${ ([$7]/60)/60} + eval ^assign min2 ${[$7]/60} + + eval ^assign dys ${[$HRS2]/24} + eval ^assign hrs ${[$HRS2]-([$DYS]*24)} + eval ^assign min ${[$MIN2] - ( ([$HRS]+([$DYS]*24) )*60)} + eval ^assign sec ${[$7]-([$MIN2]*60)} + @ a = index(\[ $1) - 1 + @ b = left($a $1) + if (index(. $b) == -1) + {eval echo *** $1 $[2]DYS days, $[2]HRS hrs, $[2]MIN min, $[2]SEC s} + {eval echo *** $1 $[2]DYS days, $[2]HRS hrs, $[2]MIN min, $[2]SEC s} + } + ^stats l $SS +} + +alias sendq { + eval ^on ^211 "$SRV *" { + @ a = index(\[ $1) - 1 + @ b = left($a $1) + if (index(. $b) == -1) + {eval echo *** $[11]2 sendq $1} + {eval echo *** $[11]2 sendq $1} + } + if ( [$0] ) + { ^assign SRV $0- } + { ^assign SRV $S } + stats l $SRV + wait -cmd eval ^on ^211 -"$SRV *" +} + +# If you use Daveman's toolbox or any auto rejoin line, remove the old +# on raw_irc for KICK, and use the foll. one instead: (Run) +# +#ON ^RAW_IRC "% KICK % % *" { +# IF ([$3]==[$N]) +# { +# //QUOTE JOIN $2 +# ECHO $MID(11 5 $STIME($TIME())) * You have been kicked off channel $2 by $LEFT($INDEX(! $0) $0) \($MID(1 256 $4-)\) +# } +# { +# ECHO $MID(11 5 $STIME($TIME())) * $3 has been kicked off channel $2 by $LEFT($INDEX(! $0) $0) \($MID(1 256 $4-)\) +# } +# } + diff --git a/doc/Authors b/doc/Authors new file mode 100644 index 000000000..6e1b1b0b1 --- /dev/null +++ b/doc/Authors @@ -0,0 +1,142 @@ +/************************************************************************ + * 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 . +IRC was originally written in University of Oulu, Computing Center. +Jan 1991 - IRC 2.6 jto@tolsun.oulu.fi + - Multiple Channels and protocol changes + +Contributions were made by a cast of dozens, including the following: + +Markku Jarvinen : Emacs-like editing facility for the client + +Kimmo Suominen : HP-UX port + +Jeff Trim : enhancements and advice + +Vijay Subramaniam : advice and ruthless publicity + +Karl Kleinpaste : user's manual + +Greg Lindahl : AUTOMATON code, the Wumpus GM automaton, +myriad bug fixes + +Bill Wisner : numerous bug fixes and code +enhancements + +Tom Davis and Tim Russell : +VMS modifications + +Markku Savela : advice, support, and being the +incentive to do some of our *own* coding. :) + +Tom Hopkins : bug fixes, quarantine lines, +consolidation of various patches. + +Christopher Davis : EFnet/Anet gateway coding, +many automata ;), documentation fixing. + +Helen Rose : documentation updating, and fixing. + +Tom Hinds : emacs client updating. + +Tim Miller : various server and client-breaking +features. + +Darren Reed : various bug fixes and enhancements. +Introduced nickname and channelname hash tables into the server. + +The version 2.2 release was coordinated by Mike Bolotski +. + +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 +Chuck Kane +Matt Lyle +Vesa Ruokonen + +Markku Savela / 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 / 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 (nmijl@alf.uib.no) added Note functions to ircd. + +Armin Gruner / 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 / 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. :) + +Carsten Munk / May and futher 1999: +* Made many features based on Elite.. :/ + +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 +Bo Adler +Michael Sandrof +Jon Solomon +Jan Peterson +Nathan Glasser +Helen Rose +Mike Pelletier +Basalat Ali Raja +Eric P. Scott +Dan Goodwin +Noah Friedman + +[ $Id$ ] \ No newline at end of file diff --git a/doc/Crule.readme b/doc/Crule.readme new file mode 100644 index 000000000..7f23c706a --- /dev/null +++ b/doc/Crule.readme @@ -0,0 +1,128 @@ +SmartRoute +Rule based connects +Draft 4 - Aug 19, 1994 +by Tony Vencill + +Rule based connects allow an admin to specify under what conditions +a connect should not be allowed. If no rules are specified for a +given C and/or N line it will be allowed under any condition. + +A rule may consist of any legal combination of the following functions +and operators. + +Functions +--------- +connected(targetmask) - true if a server other than that processing + the rule is connected that matches the + target mask +directcon(targetmask) - true if a server other than that processing + the rule is directly connected that matches + the target mask +via(viamask, targetmask) - true if a server other than that processing + the rule matches the target mask and is + connected via a directly connected server + that matches the via mask +directop() - true if an oper is directly connected + +Unary operators +--------------- +! eg: !argument - true if the argument is false + +Binary operartors +----------------- +&& eg: arg1&&arg2 - true if arg1 and arg2 are both true +|| eg: arg1||arg2 - true if arg1, arg2, or both are true + +Parenthesis () are allowed for grouping arguments, but if no parenthesis +are included, && will take precedence over ||, ! will take precedence +over both && and ||, and the function will be evaluated from left to +right. White space in a rule is ignored. Invalid characters in a rule +will lead to the rule being ignored. + +Examples +-------- + +A simple example of a connect rule might be: + +connected(*eu.under*) + +This might be used in a US undernet server for a Europe CN pair to +insure that a second Europe link is not allowed if one US-EU link +already exists. Note that on the undernet, US server names are +city.state.us.undernet.org and Europe server names are +city.country.eu.undernet.org. + +A more interesting example might be: + +connected(*eu.under*) && + ( !direct(*eu.under*) || via(manhat*, *eu.under*) ) + +Imagine the Boston undernet server uses this rule on its Europe CN +pairs. This says that if a Europe server is already connected, a +Boston-Europe connect will not be allowed. It also says that if a +Europe server does already exist and Boston is not directly connected +to one or more Europe servers or Manhattan is, the Boston-Europe +connect will not be allowed. This has the effect of allowing multiple +US-EU links but attempting to limit these links to one server (ie: +Boston will not initiate its first Europe link if another server is +already linking Europe). This rule will also prefer to let Manhattan +handle the US-EU link by disallowing Boston-Europe links if a Europe +server is already linked to Manhattan. + +A example of the remaining function, directop(), is: + +connected(*eu.under*) || directop() + +If this line is used on Boston for the Paderborn CN pair, it will allow +connects to Paderborn only if another Europe server is not already +connected and there is not an oper on Boston. If this rule is +overrideable (ie: is applied only to autoconnects as described below), +then it will disallow Boston autoconnects to Paderborn while a Boston +oper is online, but allow oper-initiated connects to Paderborn under any +circumstance. This directop() function could be used to invoke less +prefered routes only when an oper is not present to handle routing, or +conversly to allow use of less preferable routes only when an oper is +present to monitor their performance. + +ircd.conf entries +----------------- + +A rule is listed in the ircd.conf file using a D or d line (which can +be thought of as a "disallow" line). D lines will apply to all oper +and server originated connects, while d lines will apply only to +autoconnects (ie: they are overrideable by opers). The formats are: + +D:targetmask::rule +d:targetmask::rule + +Remember that newlines are not allowed in conf lines. Two examples +(from above) are: + +D:*eu.under*::connected(*eu.under*) +d:*eu.under*::connected(*eu.under*) || directop() + +Connects originating from other servers will be checked against and +matching D lines, while matching d lines will be ignored as it will not +be clear whether or not the connection attempt is oper initiated. + +Checking and viewing rules +-------------------------- + +The chkconf program that comes with the servers has been modified to +also check your connect rules. If running in debug mode, parsing errors +will show up at debug level 8. To view rules online, "/stats d" can be +used to see all rules and "/stats D" can be used to view those rules +which affect oper initiated connects and accepts. + +Processing and storage +---------------------- + +The rules are parsed when the conf file is read and transformed into a +more efficiently computed form, then all applicable rules are +evaluated each time a connect command is given or an autoconnect is +due. If more than one applicable rule is given, only one need +evaluate to true for the connect to be allowed (ie: the rules are ored +together). Note that conditions that exist when the connect is +initiated might differ from conditions when the link is established. + +[ $Id$ ] \ No newline at end of file diff --git a/doc/Elite.Changes b/doc/Elite.Changes new file mode 100644 index 000000000..0c95ce22c --- /dev/null +++ b/doc/Elite.Changes @@ -0,0 +1,126 @@ +[ $Id$ ] +--------------------------- +Version Elite2.0 ========== +=========================== +- Since +x was rewritten, the ban bug is 100% fixed. :) +- Rewrote +x hidden host function completely. +- Fixed FUNNY bug with hiddenhost and /who (Reported by Prod|gy) +- Added/Removed irc networks +- Fixed bug in /watch (Reported/Fixed by Despise) +- Added nick-change flood protection. +- Added an awesome manual... ./manual to run +- Removed /who notice for opers. +- Added protection of /akill *@* :) +- Removed java stuff completely. (Java clients are like normal IRC clients...right?) +- Added new +a mode. This mode can only be set by +q channel owners. When you are +a in a + channel, you cannot be deopped or kicked. (Syntax: /mode #chan +a ) +- Added new +q channel mode. ChanServ must set the channel founder +q so they are also + known as channel owners via the ircd. Channel owners are protected and may set + other users +a which they will also be protected (but not chan owners). + (Syntax: /mode #chan +q ) +- Re-coded /MAP +- Changed GLINE notices from sendto_ops to send to all opers with +e flag on. +- Added (addnet) script, you can run this to add your net settings to the next release. +- Changed to in whois "Blah is an oper on " +- Added new +L channel mode. If a #chat has a limit (+l) of 10 users, and +L set to channel + #chat2, when a user trys to join #chat, they won't get "#chat is full", they will be + auto-joined to #chat2 - (Linked channels in other words). + (Syntax: /mode #chan +L ) +- Changes user@shadow-33.com to user@user-33.one.com (noone will know one.com is the realhost) +- Changed +x for IP's from (x.x.x.***) to (x.x.x.network-#) +- In oline flags * will introduce +e on oper up. (before: required +e in oline flag) +- Removed +t usermode (UMODE_ALL) - wasn't used. +- Made 'create your own network setting' feature more stable. +- Added new channel mode (+x) to disable colored text in channel. +- Added +C (Co Administrator) +- Added +T (Technical Administrator) +- Changed /map to numerics... +- Made startup message when booting more stable. + +Version Elite1.3 (02/23/99) +============================ +- Cleaned up version.c.SH +- Added new net settings (netdomain & helpchan) +- Added new net config creator in ./Config +- Made ./Config more easier... +- Created new usermode +j (Java user) +- New hostname (java.shadownet.org) for java users. +- Removed RUN_SERVICES code from entire ircd. + +Version Elite1.2.4 (02/14/99) +============================ +- Fixed the nick crash bug! (damn m_kill small error) +- New network(s) added. +- Changed one thing in m_gline (nothing big) + +Version Elite1.2.3 (02/10/99) +============================ +- Removed SOCKS checking. (possibly cause of crashing) +- Added new networks + +Version Elite1.2.2 (02/02/99) +============================ +- Fixed the crashing bug. (Changing nicks with linked servers) +- Modified AceStar net settings. +- Q-line notices are back (except for ULined clients). +- Fixed /kill bug with services. + +Version Elite1.2.1 (01/29/99) +============================ +- Fixed multiple notices from +N / -N +- Added some text to s_err.c +- Possibly fixed the odd crashing... ? + +Version Elite1.2 (01/24/99) +============================ +- Netadmin can be used via +N in the oline slot now. +- When +N is executed, net-wide oper msg's are sent about it. +- Completely removed the freeze function (it's a toy unlike a command) +- Changed abit of the GLINE adding notice. +- Added logging to a file for glines (gline.log) +- Implemented SOCKS checking (thx Rhom). +- Changed channel lists only when 2 ppl in chan to 1. +- Changed sendto_ops function in many places in s_user.c/s_serv.c to + sendto_locfailops. +- Changed GNOTICE in s_user.c/s_serv.c to GLOBOPS +- Fixed hiddenhost bug with /kill (+w could see real host of oper) +- Fixed hiddenhost bug with /oper (+s could see real host of oper) + +[Special thanks goes out to Rhom for reporting/help patch bugs] + +Version Elite1.1.1 (12/12/98) +============================= +- Fixed /whois bug (had problems with mIRC clients *sigh*) +- Fixed /topic bug (didn't allow topic changes at all.) + +Version Elite1.1 (12/6/98) +============================ +- Fixed ./Config script (Net select) +- Fixed /remgline bug. +- If ULined clients, channels are not shown which they are in. +- Fixed +e / +t / +b (non-opers could get +et before) +- Fixed OperMode notice. +- Fixed Gline sending extra Global on expire. +- Fixed /whowas wrong hostname bug (by Thiago) +- Fixed chkconf ZLINE error (by matt) +- Added PhazeNet configuration +- Added option for auto +x in ./Config +- Freeze was disabled in this version (It will be back in 1.2) + +Version Elite1.0 (09/20/98) +============================ +- Changed Shadow3.9 to Elite1.0 (Starting a new IRCD) +- Changed some numeric's around in src/s_err.c +- Auto +x on Oper up. +- Fixed small error in ./ircd script. +- Made ./Config more Linux-redhat friendly. +- Added RelicNet to the ircd. +- include/config.h is much more compatible with all IRC nets. +- Added /gline (works 100%) [/gline ]. +- Fixed up /map. +- Added UMODE's +e & +t + * e: EYES [Can see ppl who /whois, and other notices.] + * t: ALL [See's all net notices ie: See's all Client connectings...] +- Fixed the hiddenhost bug with IP's... +- Fixed major bug with hiddenhost which caused coredump. +- Made a new script (makeconf) -- generates the ircd.conf file. diff --git a/doc/History/19.mu1-New b/doc/History/19.mu1-New new file mode 100644 index 000000000..2136000e8 --- /dev/null +++ b/doc/History/19.mu1-New @@ -0,0 +1,16 @@ +The foll. patches are NEW in 19.mu1 (besides the old patches of stats-w, +ban, topic, client connect, signon time, trace times in previous .mu +versions): + +* All the modifications contained in U3.2, namely - TSpre8, silence, bquiet + +* The K line comments patch. + +* The operfail notification patch + +* The mixed case userid reject patch + +For info on these check the file README.patches + + - Mmmm +[ $Id$ ] \ No newline at end of file diff --git a/doc/History/2.8-New b/doc/History/2.8-New new file mode 100644 index 000000000..7586f8fcc --- /dev/null +++ b/doc/History/2.8-New @@ -0,0 +1,34 @@ + +For starters, not a lot is new. What is ? + + * STATS o and STATS h added; + + * most STATS options are no longer oper-only; + + * privacy fixes to all of WHO, WHOIS, TRACE and STATS; + + * more options in the ircd.conf file; + + * non-debilitating DNS/ident use (DNS routines written specifically + for ircd which indludes small local cache); + + * less bugs; + + * easier to compile; + + * heaps and heaps of new numerics; + + * more problems for old clients that do stupid things; + + * more numeric replies which replace old NOTICE's; + + * compulsory ident checks and optional result usage; + + * sendQ can now be class dependant; + + * server handles client flooding better; + + * for more information on changes, bug fixes during development, see + ircd/ChangeLog and common/ChangeLog + +[ $Id$ ] \ No newline at end of file diff --git a/doc/History/Advertisement b/doc/History/Advertisement new file mode 100644 index 000000000..880a72594 --- /dev/null +++ b/doc/History/Advertisement @@ -0,0 +1,41 @@ + The Internet Relay Chat Program - IRC + + Author: Jeff Trim, April '89 + Revised: Greg Lindahl, Oct '90 (gl8f@virginia.edu) + Re-Revised: Helen Rose, March '94 (hrose@kei.com) + +Have you ever wanted to talk with other computer users in other parts of +the world? Well guess what? You can! The program is called IRC and it +is networked much over North America, Europe, and Asia, Oceania, and parts +of Africa. This program is a substitution for talk(1), ytalk(1) and many +other multiple talk programs you might have read about. When you are +talking in IRC, everything you type will instantly be transmitted around +the world to other users that might be watching their terminals at the +time - they can then type something and RESPOND to your messages - and +vise versa. I should warn you that the program can be very addictive once +you begin to make friends and contacts on IRC ;-) especially when you +learn how to cuss in 14 languages. + +Topics of discussion on IRC are varied, just like the topics of Usenet +newsgroups are varied. Technical and political discussions are +popular, especially when world events are in progress. IRC is also a +way to expand your horizons, as people from many countries and +cultures are on, 24 hours a day. Most conversations are in English, +but there are always channels in German, Japanese, and Finnish, and +occasionally other languages. + + How To Get IRC (technical) + +IRC is a fully-distributed client-server system, much like +NNTP-Usenet, with several clients availble in C and elisp. You may ftp +documentation and clients from any of the following sites: + +many kinds of clients (C, elisp, X11, VMS, REXX for VM, MSDOS, Macintosh): +cs.bu.edu:/irc/clients +ftp.acsu.buffalo.edu:/pub/irc +ftp.funet.fi:/pub/unix/irc +coombs.anu.edu.au:/pub/irc + +If you have any questions about IRC installation, write to hrose@kei.com. + +[ $Id$ ] \ No newline at end of file diff --git a/doc/History/Etiquette b/doc/History/Etiquette new file mode 100644 index 000000000..0376a1729 --- /dev/null +++ b/doc/History/Etiquette @@ -0,0 +1,86 @@ +/************************************************************************ + * IRC - Internet Relay Chat, doc/etiquette + * Copyright (C) 1990, Lea Viljanen and Ari Husa + * + * 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$ + */ + +HOW TO BEHAVE ON IRC + +Authors: Lea Viljanen (LadyBug) viljanen@kreeta.helsinki.fi + Ari Husa (luru) so-luru@tolsun.oulu.fi + + +1) Language + + The most widely understood and spoken language on IRC is English. +However! As IRC is used in many different countries, English is by +no means the only language. If you want to speak some other language +than English (for example with your friends), go to a separate channel +and set the topic (with /topic) to indicate that. For example + /topic Finnish only! +would mean that this channel would be reserved for Finnish discussion. +On the other hand, you should check the topic (with /list command) +before you move to a channel to see if there are any restrictions about +language. + On a channel not restricted by /topic, please speak a language +everybody can understand. If you want to do otherwise, change channels +and set the topic accordingly. + + +2) Hello/Goodbye + + It's not necessary to greet everybody on a channel personally. +Usually one "Hello" or equivalent is enough. And don't expect everybody +to greet you back. On a channel with 20 people that would mean one +screenful of hellos. It's sensible not to greet, in order not to be rude +to the rest of the channel. If you must say hello, do it with a private /msg. +The same applies to goodbyes. + + +3) Discussion + + When you come to a new channel it's advised you to listen +for a while to get an impression of what's discussed. Please feel free +to join in, but do not try to force your topic into the discussion +if that doesn't come naturally. + + +4) {}|[]\ + + IRC has quite a lot of people from Scandinavian countries, +the above characters are letters in their alphabet. This +has been explained on IRC about a thousand and one times, so +read the following, do not ask it on IRC: + + { is an A with 2 dots over it + } is an A with a small circle above it + | is either an O with 2 dots over it or an O with a dash (/) through it + [, ], and \ are the preceding three letters in upper case. + + There are a lot of people from Japan as well, who use Kanji characters +which may look quite exotic as well. As I don't know Kanji I don't +even try to explain any of the characters. + +5) ATTENTION! + + Remember, people on IRC form their opinions about you only by +your actions, writings and comments on IRC. So think before you type. +Do not "dump" to a channel or user (send large amounts of unwanted +information). This is likely to get you /kicked off the channel or +/killed off from irc. Dumping causes network 'burbs', connections going +down because servers cannot handle the large amount of traffic any more. diff --git a/doc/History/README.patches b/doc/History/README.patches new file mode 100644 index 000000000..e6ff11b73 --- /dev/null +++ b/doc/History/README.patches @@ -0,0 +1,1902 @@ +[ $Id$ ] + +The available patches for 2.8*mu servers are: + +Tp8 = TimeStampPre8 - A protocol which disallows netsplit ops and channel + desynchs. + +Bquiet - does not allow a person who is banned to speak over the channel + +Silence - Cuts off flooding at local server + +Anc = Anti-Nick collide - *Intentional* nick collides are impossible with + this wonderful patch. + +W = Wallops - lets you send messages to other IRC ops + +ban = BanInformation - Lets you see who did a ban and when, as well + +sw = /stats w - lets you gather statistics on average client connects + +To = TopicInformation - Lets you see who set the topic for a channel and when + +S = Signon Time - Tells you when a local user signed onto IRC + +Cl = Client connect - Notifies opers on your server of client connects/ + disconnects (with disconnect reason) + +TT = Trace Times - displays the time (in secs) since your server last heard + anything from a client/server, when you do /trace. + +KL = K-line comments - Allows you to modify the lame "no ghosts allowed" default + comment to whatever you wish, or alternately, display a + file to a rejected client. + +OF = Oper fail patch - displays a warning to current ops when someone fails + in entering the right oper password. + +MC = Mixed case patch - useful for those pesky clone bots and hacked logins; + disallows userids which have mixed case or control chars + +N = Note - allows you keep a "note" for other users, amongst other things + +----------------------------------------------------------------------------- +Explanations for these patches follow..... + +Help on patches written by Mandar Mirashi (mmmirash@mailhost.ecn.uoknor.edu) + Mmmm on IRC. + + +============================================================================= + TIMESTAMP +============================================================================= +Author: Carlo, carlo@sg.tn.tudelft.nl, Run on IRC. +Info on TS protocol: + + TSpre7 + +------ +Effects of the TS protocol: + +> No mode wars possible. + When you take someones op there are three possibilities: + - You were too late (You was already de-opped on your server). + - You take it (On the *whole* net). + - You start taking it (on your server, but it is 'bounced' (ie your mode + change is cancelled); This occurs when you try to do mode change + direct after a net re-connection in a situation were you hacked op by + net-break riding. +> No desynchronisation possible. +> No unnecessary MODE msg send. You can't send 'double' mode's that don't + make sense. Servers don't send unnecessary MODE's either. +> Hacking op is from now on *only* possible by admins that hacked their + servercode, and therefor easier to prosecute. Also you can 'hack' op still + exactly like now (by riding net break) on an *opless* channel. +> The protocol is fully compatible with older servers: It is invisible + and it works with old servers like this: Every 'block' of direct connected + 2.8.x.TS servers will stay synchronized, Hacking op is impossible by means + of riding a net break between two TS-servers on channels that were created + within that block. In all other cases the same happens as without TS. + +Here follow technical details implemented in TSpre7: + +------ + +Reference: 2.8.14/15.TSpre7 +Full list of TS-MODE-Change protocol: + +-Mode changes (originating by clients) are refused only: + 1) from a client that is directly connected and has no chan ops on + the channel on its server. + 2) when not being a change of the internal state of a server (Well, refused + is to strong, propagation of the mode is just unnecessary and thus not + done). + 3) from someone flagged as de-opped-by-server. (flag is reset when this + person is opped again by anyone) (The server detecting this mode change + cancels the mode change, by bouncing it upstream, thus keeping the net + synchronized). + +-An extra parameter is added behind MODE changes *done* by servers, sended + *to* other servers. It is a Universal Time in ascii seconds. This extra + parameter is NOT sended when it is 0 (can happen with old servers on the + net), 0 means rather then Jan 1st 1970 :). + This parameter is the creationtime of the channel being: the universal time at + which the channel was created by a *local* client; or the non-zero received + creation time from an other server (as parameter with a mode change) that + was earlier then its own; or equal 0 when the channel was created by + a non-local client and no MODE with TS was received (yet). + +-Of the channel_flags is 1 bit more used: CHFL_DEOPPED, set when de-opped + by a server (compare CHFL_CHANOP, set when channel operator). It's reset + when opped. (And starts reset on joining (creation?) of a channel, this + will be changed to 'set' on join, when all servers have TS; making detection + of op hacking by admins a bit easier). + +-Timestamps (sended by TS-servers) are handled as follows: + Received TS Own TS Bounced/Propagated + equal equal propagated + later >0,earlier if ops: bounced with own TS + if no ops: propagated with own TS + (own TS is sended upstream too, to make sure + TS stays synchronized). + earlier later TS copied, propagated + none any propagated, own TS sended. + >0 none if ops: propagated, no TS sended, own TS stays 0. + if no ops: TS copied, propagated. + +-A mode change +/-o nick (+/- v) from a person that is deopped by a server + results in a -/+o nick back up stream (and is not propagated) if it was + an attempt to change the internal state of the receiving server. + +-kick is handled as mode -o, internal state 'not on channel' being 'already + de-opped'. Bounce includes JOIN and restoring o and v flags. + (Effect: You don't even *see* the kick on one side, on the other side + the person joins again and gets his flags back from the bouncing server). + +-A received TimeStamp that claims a creation time *earlier* then that + this server dissapeared from the net results in a HACK: notice (with + time difference in seconds). Bye OPER.. (This meaning, to hack op + on an existing channel that was created 15 minutes before you disconnected + your server, you will have generated a HACK notice: Clock set back at least + 900 seconds by .) (Not yet implemented, prob. in pre8). + + + TSpre8 + + +From: Carlo Kid - Runaway +Subject: *** IMPORTANT; RFC +To: wastelanders@rush.cc.edu (New Wastelanders MailingList) +Date: Thu, 14 Apr 94 18:03:38 METDST +Mailer: Elm [revision: 66.33] +Status: RO + +Hi, please read this carefully and respond if you think it will result +in INCORRECT behaviour under any circumstances: + +Here follow technical details implemented in TSpre8: + +------ + +Reference: 2.8.17.TSpre8 +Full list of TS-MODE-Change protocol: + +-Mode changes (originating by clients) are refused only: + 1) from a client that is directly connected and has no chan ops on + the channel on its server. + 2) when not being a change of the internal state of a server (Well, refused + is to strong, propagation of the mode is just unnecessary and thus not + done). + 3) from someone flagged as de-opped-by-server. (flag is reset when this + person is opped again by anyone) (The server detecting this mode change + cancels the mode change, by bouncing it upstream, thus keeping the net + synchronized). + 4) When a '0' as timestamp is received, originating from a server (see below). + Then the whole mode is ignored, a HACK notice is sent to all ops and the + string is propagated as received. + +-An extra parameter is added behind MODE changes *done* by servers, sent + *to* other servers *containing* a +o, -o, +v or -v. + It is a Universal Time in ascii seconds. + Whenever a HACK is detected, a HACK: notice is sent to all local opers, + and the full MODE is propagated with a '0' as timestamp, generating + a HACK notice on all other servers. + Otherwise this parameter is the creationtime of the channel being: the + universal time at which the channel was created by a *local* client; + or the non-zero received creation time from an other server (as parameter + with a mode change) that was earlier then its own; or equal 0 when the + channel was created by a non-local client and no MODE with TS was received + (yet). + +-Of the channel_flags is 1 bit more used: CHFL_DEOPPED, set when de-opped + by a server (compare CHFL_CHANOP, set when channel operator). It's reset + when opped. It starts *set* on joining (creation?) of a channel, making + detection of op hacking by admins a bit easier. + +-Timestamps (sent by TS-servers) are handled as follows: + Received TS Own TS Bounced/Propagated + equal equal propagated + later >0,earlier if ops: bounced with own TS + if no ops: TS copied, propagated + earlier later TS copied, propagated + 0 or none any HACK generated, 0 propagated, own TS is kept + >0 none TS copied, propagated. + +-A mode change +/-o nick (+/- v) from a person that is deopped by a server + results in a -/+o nick back up stream (and is not propagated) if it was + an attempt to change the internal state of the receiving server. + +-kick is handled as mode -o, internal state 'not on channel' being 'already + de-opped'. Bounce includes JOIN and restoring o and v flags. + (Effect: You don't even *see* the kick on one side, on the other side + the person joins again and gets his flags back from the bouncing server). + +-A received TimeStamp that claims a creation time *earlier* then that + this server dissapeared from the net results in a HACK: notice (with + time difference in seconds). Bye OPER.. (This meaning, to hack op + on an existing channel that was created 15 minutes before you disconnected + your server, you will have generated a HACK notice: Clock set back at least + 900 seconds by .) + + + + +From: Carlo Kid - Runaway +Subject: TSpre8 can work! :) +To: wastelanders@rush.cc.edu (New Wastelanders MailingList) +Date: Wed, 20 Apr 94 11:44:39 METDST +Mailer: Elm [revision: 66.33] +Status: RO + +Well... it took me a few days (a night and some dreams actually), but +I think I found a solution for the problem I mentioned during the meeting :) + +Let me first repeat the problem: + +- I stated that TSpre8 would prevent op hacking by admins, but... later + I realized that that was impossible the way wanted it :( + My idea was at first: Simply generate a HACK notice when a server + comes on the net with a creation time earlier then when it did split off + (and earlier then my own creation time). This sounds nice, but in + even this simple case it doesn't work: + +Server A and B, users a and b: + + A -- B + | + @a TS=100 + +Split at t=200 + + A B + | + @a + +b joins at t=300 + + A(TS=100) B(TS=300) + | | + @a @b + +Net joins: + + A -- B + | | + a b + +Both are de-opped: b because he sends a TS of 300 with is greater (later) +then 100 (correctly: he used the netbreak). And a is deopped with a +HACK notice by B, because he introduces 1) a TS earlier then the existing +TS (100<300) and 2) the 100 is earlier then the time the split occured. + +The reason why this goes wrong is simply because B *forgets* the channel +AND the TS of 100, after the split... If B would *keep* in memory that +the channel existed on A and with what TS, it would be possible, but only +at cost of a lot of extra memory usage... + +Now my new idea :) It allows hacking, but only in not so very interesting +cases... And at least it makes it extremely difficult for a newbee, so we +might at least catch 99% before they understand how it works :) + +(This explanation should not be on a public ftp site anymore after a while :) + +New rules: + +- Servers that are OFF the net for more then one day are forgotten. +- New servers (or forgotten servers), are always bounced except on channels + that have no ops (when they create a channel of their own thus :) unless + the receiving server is younger then one day and the introduced TS is + earlier then the start up time (minus 10 minutes :/) of the receiving server. + 'Birthdays' of those servers are also kept. +- A server that splitted off while a channel already existed, and thus + has a creation time earlier then the "received squit time" of that + server, is not allowed to introduce an earlier timestamp then the + creationtime of the channel (HACK), and also not an equal TS when + younger then one day. +- A server introducing a server with an earlier "time of received squit" + inherrits that time as its own "time of received squit". + +This allows to hack op on a channel that didn't exist when you splitted +(not interesting). You also can't keep a server off the net till you need +it (a telnet connection), because those can't do anything for one day long, +unless they send the TS *equal* to the existing TS (The only exception :(), +having to connect between two and one days before the hack, break between +zero and one day before the hack but before the channel existed, connect +and hack with equal TS. + +What do you think? Just for fun? :) + +Apart from that it would be suspicious when someone connects/breaks every +24 hours a "test" server, channels that exist longer then one day are +unhackable. + +The "disadvantages" are: servers that break off the net for *longer* then +one day, but keep a channel up with an op, on *both sides of the net, will +be completely de-opped after reconnection. + +*** IMPORTANT: + +I am absolutely not sure ;) if there aren't any other disadvantages or +unwanted effects :) Please, think this over and mail me if you find some +objection... + +Run + + + + +From: Carlo Kid - Runaway +Subject: 2.8.19.U3 RELEASED +To: wastelanders@rush.cc.edu (New Wastelanders MailingList) +Date: Sun, 22 May 94 14:15:41 METDST +Cc: carlo@sg.tn.tudelft.nl +Mailer: Elm [revision: 66.33] +Status: RO + +Hi all :) + +Proud to present: 2.8.19.U3 :) + +I have spend *enormous* amounts of time in TESTING this version, +and I really hope it is completely bug free, but the changes are +very big, so maybe persons who only want to upgrade/compile ONCE +should wait a little longer then the compile cracks we have here ;) + +For real testing we need the HUBs though! So please, don't hesitate, +Delft (a HUB) is running it already for a long time, also linked to +other 2.8.19.U3 test servers. + +Before I'll tell about whats new in U3, I want to especially thank +President for the tremendous help in testing TSpre8 -- I would never +have been able bring up the stength to go through the difficult +periods without him being there to listen to my technical complaints ;) + +======================================================================= + +NEW in .U3 +---------- + +First all, TSpre8. + +It did not become what I hoped/expected to be possible :( +Hacking will still be possible, but at least it will be a LOT +more difficult when you don't know what you are doing, and I think +we WILL catch (new) admins that think they can abuse their powers +to be GOD on "their" channel. + +Especially, nobody will be able to hack *anything* with a normal nick. +And because server modes are more obvious a hack, this alone is a +step forward against admin hacking prevention imho. + +The .patch file is +-rw------- 1 carlo users 65142 May 22 01:29 irc2.8.19-TSpre8.patch +big. + +I'll now brows through it and mentions changes in the order they appear +in the .patch file, arbitrary order thus ;) + +Zombies +------- + +As mentioned before on 'wastelanders', I changed the internal way a KICK +is handled, to be able to stop illegal -hacked- kicks from *outside* the +channel. This has no effect on server-server protocol nor on server-client +protocol. But because this way it is possible to keep (a little) memory +for channels you're not on (being kicked from) I thought it would be no +more then logical to stop people from joining the usual 10 ten channels +at the same time, *including* the ones you are kicked from (because they +occupy memory). This memory is released when you 1) Try to rejoin (so with +all people having a auto-rejoin-on kick NOTHING changed at all), or 2) +when you do a part - this is new and only intended to use when you do +NOT have auto-rejoin, when you do not even WANT to rejoin, or try, assuming +you might not be banned, when you have been kicked like this of a lot of +channels and all together are "on" 10 channels so you NEED to leave one +before you can join another... For this rare case, you must know on +*which* channels you "are", therefor this is visible when you do a +/names, or /who or /whois to yourself. It is never visible for others. +Example: + +12:07 * Run (Daryl@sg.tn.tudelft.nl) has joined channel #wasteland +*** Mode change "+o Run" on channel #wasteland by Wasted +*** #wasteland : created Fri May 13 17:08:34 1994 + Hi Run ! +*** You have been kicked off channel #wasteland by Run (Test) +*** Run is Daryl@sg.tn.tudelft.nl (/msg Run profile) +*** on channels: !#wasteland +*** on irc via server Delft.NL.EU.undernet.org (Runaway Server ++[130.161.188.188]) +*** Run is away: Writting E-mail +*** Run is an IRC Operator +*** Run has been idle for 642 seconds. + +As you can see, the channel is marked with a '!' to show you are NOT +not that channel... Both, a part #wasteland as well as a join (being +not able to actually join because of ban, invite-only, key or limit), will +remove you from this channel. The part will be sent back to (only) you, and +everything has turned out to be 100% compatible with ircii protocol. +Finally, of course the channel is removed when everyone is kicked and/or +left the channel (a channel with only zombies is removed immedeately). + +#define RPL_CREATIONTIME 329 +-------------------------------- + +A new numeric is sent when you ask for a MODE of a channel, by doing +/MODE #channel +without parameters. +The reply is the same as before, but followed by a new numeric 329: + +/MODE #wasteland +Delft.NL.EU.undernet.org 324 Run #wasteland +t +Delft.NL.EU.undernet.org 329 Run #wasteland 768845314 + +To supress this, you'll have to add something like: +ON ^329 * +to your .ircrc file. If you want to see this new numeric, you would +add +On ^329 "*" echo *** $1 : created $stime($2) + +It turns out that ircii clients ask for this mode when you join a +channel, therefor you will see the creationtime when you join a channel, +I'll leave it as an exercise to suppress this, but still being able to +see it when you specifically ask for it :) + +New ircd.conf line +------------------ + +This is IMPORTANT : +In order for Uworld to work you MUST add those lines to your ircd.conf file: + +U:Uworld.undernet.org::* +U:Underworld.nl::* + +The later to allow the backup Underworld.nl to still function. +If you forget this, or do it wrong, your server might refuse to accept +certain mode changes from Uworld.undernet.org and start *bouncing* +modes done by lusers that got op from it. The name of servers allowed +to hack have to be agreed upon totally, by all admins. If one admin +removes his U: line, the service will not work always correctly. + +When a server does a mode change that is detected to be a hack, you +will see -as an oper, or +s luser- this notice: + +-> *uworld* opcom MODE #wasteland +o Mmmm +!Uworld.undernet.org! Run is using Uworld to : MODE #wasteland +o Mmmm +*** Notice -- HACK: Uworld.undernet.org MODE #wasteland +o Mmmm +*** Mode change "+o Mmmm" on channel #wasteland by Uworld.undernet.org + +Normally, this HACK notice would NOT take effect! You still *see* the +HACK notice for the U: line server(s) but then they DO take effect. + +Every other message (some including the word HACK) do also take effect, +and are only a warning that someone is MAYBE hacking... +I didn't see it occur yet. + +Removed bugs +------------ + +I did find some bugs in TSpre7, never thought that was possible :) +I forgot what it exactly was, but under (very rare) circumstances it +could be pretty serious :/ + +One rather important thing is that now the TimeStamp is sent during a +net re.join when there are no ops. Before it was possible to create +a partly TimeStamp less net on an opless channel. TSpre8 garantees +that the TS is synchronized on the whole net at any time. + +Other messages +-------------- + +Apart from the (true) HACK notice, you can get a: + +BOUNCE or HACK: notice, which does take effect and is most probably +just a bounce of a mode done by an attacker: someone immedeately after +a net re.join with his net.ride ops trying to de-op the others. +I don't think this will happen often because it will be clear to all lusers +that it is useless to try. + +NET.RIDE on opless #channel notice, you'll see this if someone does +really abuses a net break to get ops on some opless channel. The mode +does take effect however. + +FULL bounce of modes +-------------------- + +When before someone would ride a net break, and try something, ONLY +his +/- o/v modes. Other modes like +mlk 1 \\|/\|/ would still take +effect. With TSpre8 this changed... All modes (except bans) are bounced +when someone rides a net break. Also the bouncing is more compact, while +with TSpre7 every o and v mode took one line, now all modes are kept into +one line. + +More allowed +------------ + +Before you was (how lame) not allowed to mix things like k, o and v... +Now you are allowed, why not? Also you can use up to six parameters, +really gives you a power kick ;) + +*** Mode change "+vvvvvv flux epa Skip Run Mmmm gyn" on channel #wasteland by ++Run + +User friendly mask fixing +------------------------- + +The lame way Avalon fixes a mask (for a ban) is like this: + +/mode * +bb *.tudelft.nl Daryl@sg*.tn.tudelft.nl + +becomes: + +*** Mode change "+bb *.tudelft!*@* Daryl!*@sg*.tn.tudelft.nl" on channel ++#wasteland by Run + +The same on a TSpre8 server gives: + +*** Mode change "+b *!*@*.tudelft.nl" on channel #wasteland by Run + +While just Daryl@sg*.tn.tudelft.nl results in: + +*** Mode change "+b *!Daryl@sg*.tn.tudelft.nl" on channel #wasteland by Run + +which what one would expect! + + +---------------------------------------------------------------- + +Goodluck with compiling, + +Run + +PS If you encounter any problems, realize it is VERY unlikely that + it is .U3, but if you really think so, then first try to compile + plain 2.8.19. If you succeed, save the Makefile the include/config.h + and the include/setup.h. Unpack .U3, replace those files and recompile. + With this I assume you don't put your ircd.conf inside the source + directories of course, that would still have the paths set wrong then. + + A smart move is to make patch file once for your Makefile/config.h : + First ONLY edit the Makefile and config.h (or copy the them from a + working source tree to a empty directory), and then make a diff with: + diff -rc irc2.8.19.clean irc2.8.19.my.makefile > Makefile.config.h.patch + + That really speeds up upgrading with later versions. + (irc2.8.19.my.makefile only needs to contain + irc2.8.19.my.makefile/Makefile + irc2.8.19.my.makefile/include/config.h ) + Of course, keep the include/setup.h seperately. + +### KILL for Mmm. Mmmm (stop it lamer (unnecessary flooding of alexbot)) + + +============================================================================= + BQUIET +============================================================================= +Author: Carlo, carlo@sg.tn.tudelft.nl, Run on IRC. +Helpful ideas by: Aaron, agifford@sci.dixie.edu, Karll on IRC + + +In order to fight flooding, and as discussed on wastelanders, banning +someone on a channel will now also stop him from doing anything visible +on the channel. This allows to let someone see what you think of him +without even kicking him, he will leave by himself. +He will still be able to appologise by private msgs of course and then +he can be de-banned. A ban is this way a short cut for +m+vvvv everyone +excpet the flooder. Note that even NICK floods are stopped: When you are +on a channel where you are banned, you are not allowed to change your nick. + +============================================================================= + SILENCE +============================================================================= +Author: Carlo, carlo@sg.tn.tudelft.nl, Run on IRC. +Helpful ideas by: Aaron, agifford@sci.dixie.edu, Karll on IRC + +My solution to flooders with clone bots etc :) +Let the user that GETS flooded decide he doesn't want that and stop +the flooder right at his own server (the server of the flooder). +This is a new command, and the clients will need unfortunately a few +lines in their .ircrc before it can work. +Moreover, before this works, ALL servers must have .U3. + +The lines I use at the moment are: + +ALIAS SILENCE QUOTE SILENCE +ALIAS SILE QUOTE SILENCE +ON ^RAW_IRC "% SILENCE %" echo *** $* + +It turns out that some auto-rejoin on kick lines, like Davemans toolbox, +disables the use of ON RAW_IRC, or at least makes it work incorrectly. +You should disable this auto-rejoin line and you could add the one I use +instead: + +ON ^RAW_IRC "% KICK % % *" { + IF ([$3]==[$N]) { + //QUOTE JOIN $2 + ECHO $MID(11 5 $STIME($TIME())) * You have been kicked off channel $2 by $LEFT($INDEX(! $0) $0) \($MID(1 256 $4-)\) } { + ECHO $MID(11 5 $STIME($TIME())) * $3 has been kicked off channel $2 by $LEFT($INDEX(! $0) $0) \($MID(1 256 $4-)\) } +} + +which are 6 lines, not 8. + +The way the silence patch works is as follows: + +When you add a silence mask (using the same user friendly mask fixing) +like: + +/SILENCE Tsunami*@ + +It will echo back to you how it is added: + +*** Run!Daryl@sg.tn.tudelft.nl SILENCE +*!Tsunami*@* + +Note that there is a '+' infront of the mask now. +You can also type: + +/SILENCE +bot* + +*** Run!Daryl@sg.tn.tudelft.nl SILENCE +bot*!*@* + +If you want to silence one particular nick, you must add the '+', because +when you do: + +/SILENCE nick + +and 'nick' exists, you will get the silence list of nick. Just using +/SILENCE gives your own silence list: + +*** Run bot*!*@* +*** Run *!Tsunami*@* +*** End of Silence List + +However, check the silence list of someone ELSE make only really sense +when you already did sent a message to this person. Because a silence +mask only propagates to the server of the flooder when it is actually +necessary. For instance: You can add up to 5 silence masks and delete them +again and it will only be local to your own server. Only when someone +would message you, matching a mask, the mask propagates to the server of +the flooder. And stays there till you signoff, or till you delete it. +If you delete a mask, it follows the same path as the +masks... + +As a result of this, +s lusers and opers will see the message: + +*** SILENCE : Unknown command (from Lausanne.CH.EU.UnderNet.org) + +When someone from *behind* a non .U3 server sends you a message +(Lausanne is this case). So, you will STILL be flooded ;) UNTIL ALL +servers are upgraded... (Or must do -s, but at least the net is flooded). + + +To: wastelanders@rush.cc.edu +From: agifford@sci.dixie.edu (Aaron Gifford) +Subject: HELP with HELP for SILENCE +Status: RO + +Hey, here's a VERY VERY VERY rough draft of a HELP entry for SILENCE, +assuming it becomes a new command for ircII and not a replacement for +IGNORE either via new code, or aliases like: + ALIAS SILENCE { QUOTE SILENCE $* } + +Anyway, PLEASE PLEASE PLEASE alter, modify, correct, add, hack-up, etc this +rough draft and send me your alterations. I just typed this up VERY +quickly because StGeorge is now running irc2.8.19.U3.1. The bug I mention +in the file will hopefully disappear very soon, so that text will have to +do likewise and vanish. :) + +Here it is, draft #1 HELP for SILENCE: + +Usage: SILENCE [] + SILENCE [+|-] + + SILENCE allows you to TOTALLY ignore all private messages (PRIVMSG's) + and notices (NOTICE's) from any user whose nick!user@host matches + the parameter. The characters * and ? can be used + as wildcards in the pattern. + + If you wanted to ignore all users from "somewhere.com" you would use: + SILENCE +*!*@somewhere.com + + To ignore some with the nickname "Jerk" you would use: + SILENCE +Jerk + NOTE: The server will complete the pattern, storing it as "Jerk!*@*" + + The only drawback of just SILENCE'ing someone by nickname only is + that the user could quickly change nicknames to avoid your pattern. + + To remove a pattern, use a - before the pattern you want to remove. + When the command is used without any parameters, the server will list + all stored patterns you are currently ignoring with the SILENCE + command. + + When used in the first form listed, you will see the SILENCE list for + the specified user. This list is not necessarily complete nor accurate + because of how servers share SILENCE information internally. You can + check to see if someone is ignoring you with SILENCE by first sending + that user a private message, then using the command to see the user's + SILENCE list. + + Currently there is a bug in the servers (hopefully to be fixed soon) + that will add the nickname you specify to your SILENCE list when you + attempt to see that user's SILENCE list if that user is not currently + online. + + Because SILENCE is a part of the IRC server protocol (on the Undernet) + it works much more efficiently than IGNORE, but is limited to a very + brief list of patterns. Also, you don't have as may options as you + do with IGNORE. If a user is flooding you, SILENCE is many times + more efficient than IGNORE because the offending user's PRIMSG's or + NOTICE's (including CTCP) are stopped at the server and never even + sent to your client. + +See Also: + IGNORE + + + + +From: Carlo Kid - Runaway +Subject: Re: HELP with HELP for SILENCE +To: agifford@sci.dixie.edu (Aaron Gifford) (Aaron Gifford) +Date: Wed, 25 May 94 12:29:37 METDST +Cc: wastelanders@rush.cc.edu (New Wastelanders MailingList) +In-Reply-To: <9405250313.AA18446@sci.dixie.edu>; from "Aaron Gifford" at May 24, 94 9:20 pm +Mailer: Elm [revision: 66.33] +Status: RO + +> Here it is, draft #1 HELP for SILENCE: +> +> Usage: SILENCE [] +> SILENCE [+|-] +> + +As it is now (I do not consider what you mentioned as a bug, I was aware +of this effect and didn't choose to alter it), it really is: + +Usage: SILENCE [+|-] +Or : SILENCE + +When you leave the '+|-' away A '+' is assumed. + +The second possibility allows you to check your own silence lists, or +allows to check if you are silenced by someone after you did message +him but didn't get a respond (did ping him for instance). +Indeed, this could be interpreted as a pattern, when doesn't +exists. + +> If you wanted to ignore all users from "somewhere.com" you would use: +> SILENCE +*!*@somewhere.com + +SILENCE somewhere.com + +would do. + +> When used in the first form listed, you will see the SILENCE list for +> the specified user. This list is not necessarily complete nor accurate +> because of how servers share SILENCE information internally. You can +> check to see if someone is ignoring you with SILENCE by first sending +> that user a private message, then using the command to see the user's +> SILENCE list. + +Mention that a EVAL CTCP PING $TIME() is better... +It would not be necessary to do the silence if the ping returns... +To determine between huge lag and silence, you have to do the silence +check after that. +If you add something like this in the manual, people will automatically +wait a while after the 'message' (ping), so that the servers have time +to send the silence mask back. Otherwise they might think they can do +a quick msg+silence at the same time. Nah... Not too important, unless +with huge lag + silence combination. + +> +> Currently there is a bug in the servers (hopefully to be fixed soon) +> that will add the nickname you specify to your SILENCE list when you +> attempt to see that user's SILENCE list if that user is not currently +> online. + +I didn't consider this as too bad... +But if people want it, I can change it so that you MUST add a '+' to +add a mask that doesn't contain a '.', '!' or '@'. +That would lead to 2.8.19.U3.2 and a very tiny patch for the people who +already compiled .U3 + +Run + + +============================================================================= + U3 - required additions to .ircrc +============================================================================= + + +From: Carlo Kid - Runaway +Subject: Re: .ircrc codes for the new patches :) +To: lamberdc@dad.cs.tuns.ca +Date: Mon, 23 May 94 11:41:31 METDST +Cc: wastelanders@rush.cc.edu (New Wastelanders MailingList) +In-Reply-To: <9405222118.AA02415@dad.cs.tuns.ca>; from "Donald "WHIZZARD" Lambert" at May 22, 94 6:18 pm +Mailer: Elm [revision: 66.33] +Status: RO + +> hiya All +> I was wondering if some one could send me a copy of the script/ +> for the new patches including the ban , topic and client connecting patches. +> +> And whatever is now out with the new .19 code :) +> +> thanks +> +> -- Donnie +> +> aka WHIZZARD + +The ftp.undernet.org:/pub/undernet/servers/Patches/README file: + +These are lines you need to add to your .ircrc file in order +to use all posibilities .U3 profides you: + +To see when a channel was created: + +On ^329 * echo *** $1 : created $stime($2) + +When your server has the .ban patch use this to see who did a ban and when: + +On ^367 * if ([$4] != []) {echo *** $1 \($3 - $stime($4)) $2} {echo *** $1-} + +--------------------------- +When ALL servers upgraded to .U3, you can use this command: + +ALIAS SILENCE QUOTE SILENCE +On ^RAW_IRC "% SILENCE %" echo *** $* + +Use this as: +/SILENCE +mask + +To add 'mask' to your silence list (will completely stop all private +messages from people matching 'mask' with their nick!user@host). +You can VIEW your silence list by typing: +/SILENCE + +If you message someone and he doesn't react (like with ping), then you +can check if you match a silence mask he added by viewing his silence list +with: +/SILENCE nick + +A mask can be deleted by using the command: +/SILENCE -mask + +When the some messages you from behind a NON-.U3 server you will not +receive his message but the line: +*** Unknown command (SILENCE) (From server.name.undernet.org) +instead, so you will still be flooded. +We hope all servers will be upgraded within a few months. + +------ +And my ircd.motd from Delft* : + +*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*%*% + N E W : - This server now runs the official released + beta version 2.8.19.U3.1.ban + For you as users this means that: + -More security : .U3 contains the .TSpre8 patch with + disallows even ADMINs of servers to hack op on your + channel with a nick, most server modes are detected. + -The possibility to see the *creationtime* of a channel + (used with the TimeStamp (TS) protocol - unique on + undernet (disables the possibility of 'net.riding')) + -The possibility to stop EVERY kind of channel flooding + by *banning* someone : Now a ban stops not only + part/join floods, but also message floods and even + nick floods! + -The possibility to see who did when a certain ban. + -The possibility to stop anyone flooding you with + any kind of private messages at his *own* server! + (This will only work when ALL servers have upgraded) +To be able to use all of this, ftp to sg.tn.tudelft.nl +login: ftp ; password : anything ; file: /pub/README +Put those lines in your .ircrc initialisation file ! +Have fun, Run. + +---- + +Run + +============================================================================= + U3.1 -> U3.2 +============================================================================= + + +From: Carlo Kid - Runaway +Subject: *BUG* .U3.1 found !! +To: wastelanders@rush.cc.edu (New Wastelanders MailingList) +Date: Wed, 25 May 94 16:45:39 METDST +In-Reply-To: <457.9405250732@ccws-09.brunel.ac.uk>; from "James T Lowe" at May 25, 94 8:32 am +Mailer: Elm [revision: 66.33] +Status: RO + +> :-> +> :-> Hiya.. +> :-> +> :-> Here's what I observed tonight: +> :-> +> :-> *** Mmmm (mandar@roosevelt.ecn.uoknor.edu) has joined channel #friendly +> :-> *** Users on #friendly: @Mmmm +> :-> *** Mode change "-o Mmmm" on channel #friendly by Uxbridge.* +> +> Not surprising : +> +> #friendly RedRum H* cs93jtl@ccws-09.brunel.ac.uk +> #friendly Emmy H lamphear@cheshire.oxy.edu +> #friendly ChemBot H@ cmrobert@hellcat.ecn.uoknor.edu +> +> +> +> >From Norman : +> +> *** ChemBot is cmrobert@hellcat.ecn.uoknor.edu (Charles Michael Roberts) +> *** on channels: @#ChatZone +> *** on irc via server Norman.OK.US.undernet.org +> *** ChemBot has been idle 10 minutes +> +> +> and from Uxbridge : +> +> ** ChemBot is cmrobert@hellcat.ecn.uoknor.edu (Charles Michael Roberts) +> *** on channels: @#chatZone @#friendly +> *** on irc via server Norman.OK.US.undernet.org +> +> :-> But, +> :-> +> :-> *** Mmmm has left channel #friendly +> :-> *** Mmmm (mandar@roosevelt.ecn.uoknor.edu) has joined channel #test +> :-> *** Users on #test: @Mmmm +> :-> +> :-> works fine.. +> :-> +> :-> Is this due to the U lines? Uworld was in no way involved though :-( +> :-> +> :-> I personally feel that uxbridge's retaining timestamps of old channels - +> :-> Run, can ya take a look asap. It can prove most distressing for our users :( +> :-> +> :-> Thanks!! +> :-> +> :-> Mmmm +> +> + +Weeehhhw, yeah a real bug :/ + +RedRum and I looked for it for almost 4 hours before it was found... + +I will release .U3.2 and a patch for .U3.1-U3.2 asap... + +Description of bug: + +When someone gets kicked (and doesn't (try to) rejoin), it is flagged +as a zombie. After a net-break, users are mutual re-joined on both +sides of the net. It turned out that a zombie is also rejoined after +a net rejoin. + +What happened with ChemBot: + +ChemBot was on #friendly via Norman (non TSpre8). It was banned and then +kicked. It tried to rejoin, but Norman didn't allow that (ban). +Delft never saw this try, and ChemBot stayed as a zombie on #friendly. +Then Delft-UxBridge broke and reconnected... Delft did send a JOIN for +ChemBot to UxBridge, ending up in a nick-desynced state. +When Mmmm joined #friendly, he was the first on #friendly on all of the +net except UxBridge... He was opped by Norman, but that is considered +as a HACK by UxBridge and was bounced (ChemBot was still there *with* +ops (those flags aren't reset when someone is marked zombie)). +The second time Mmmm joined, he again got ops from Norman which now +was accepted by UxBridge because this +o could be a BOUNCE of the de-op +by UxBridge (Generating a BOUNCE or HACK: notice on UxBridge). + +Run + + + +From: Carlo Kid - Runaway +Subject: Release 2.8.19.U3.2 +To: wastelanders@rush.cc.edu (New Wastelanders MailingList) +Date: Wed, 25 May 94 23:30:57 METDST +Mailer: Elm [revision: 66.33] +Status: RO + +Hi all, + +I released 2.8.19.U3.2 + +Fixed: + + - Rejoining of zombies after net break :/ (ChemBot case) + - Silence command now give: No such nick, when doing /silence nick + - I fixed the way a kick is handle, because in a last minute + thought I realized MURC would get trouble otherwise, see below. + +As usual you can get it from ftp.undernet.org:/pub/undernet/servers + +Patches/irc2.8.19.U3.1-2.patch : If you already had .U3.1 + +irc2.8.19.U3.2.tar.gz : If start from scratch (DO SO!!!) + +For those who use the irc2.8.19.U3.1-2.patch ... + +------------------------------------------ +*** EDIT include/patchlevel.h !!!!!!!! *** +------------------------------------------ + +This patch will change your version to irc2.8.19.U3.2 so if you run + .ban EDIT it !!! + +========================================================================= + +The change in KICK handling is as follows: + +- A kick received from a local client, or for a local client or + from a direction in which the kicked client is located, is + simply handled as before: completely removed from channel, no zombie. + This means also that there is no client-server protocol change anymore: + /who, /whois and /names won't change. + +- A kick received for a local client originating from a remote client + lets the server sent a PART upstream. Since this results for non TSpre8 + servers in a remote "You're not on that channel" message, this + message is suppressed (would never occur anyway now we are completely + synced). + +The reason why this was needed is mainly because MURC constantly kicks +people who have auto-rejoin disabled from different channels. With U3.1 +they would get into problems after ten channels (needed to send extra +PART's). + +Run + +-- +------------------------------------------------------------------------------- +| carlo@sg.tn.tudelft.nl | Run @ IRC | +| | Admin of Delft.NL.EU.undernet.org | +| * Don't expect anything of live, | and Ircserver.et.tudelft.nl | +| or you'll miss all the rest of it.| | +------------------------------------------------------------------------------- + + + +============================================================================= + U3->U4, ANTI NICK COLLIDE +============================================================================= +Author: Carlo, carlo@sg.tn.tudelft.nl, Run on IRC. + +Hi all... + +After we dealt with channel msg-, join/part- and nick-floods (.bquiet), +and with private message flooding (.silence), now in a sort of follow up +to the anti net.break.ride (.TSpre7) and anti admin.hacks (TSpre8) we are +about to deal with one of the last vulnerabilities of our net: +nick-collision bots. +Called .anc (anti nick collision). + - - - + +Socially spoken it does the following (I hope): + +- Only kills the RIGHT person, when a nick collision occurs. + +This would mean: + +A) If someone tries to harash by connecting to servers that just broke off +and then take the nick of a person on the other side, both would be +killed on reconnection. But with the .anc patch on both connecting servers, +only the net.break rider will be killed. + +B) Secondly, when your server (or side) breaks off and you connect to some +other server on the other side, it happens sometimes that due to lag you get +killed by a nick collision after reconnection of the net. + +A and B differ strongly in the sense that in case A the *new* -the youngest- +nick must be killed, while in case B the *old* (lagged) nick must be +killed. +Technically this means that we have to look at the user@host.name too. +This gives rise to some incompatible changes, and therefor, this patch +must be done in two steps: First we deal with the nick-collision bots and +make the server compatible with both - the old and new protocol. And then +once all server upgraded, we deal with the last step: the nick collision +with yourself. + +In the future there will be a third possible condition in which we can have +a nick collision: (long example follows, can be skipped) + +C) The net breaks, and reconnects else where, and somehow a race condition +occurs between the 'SERVER' messages of the servers of one side. +For example: + +Servers: Part A Part B1 PartB2 +Nicks a(A),b(B) a(A),b(B) a(A),b(B) +Part A breaks off Part B: + <-- :b QUIT --> :a QUIT + <-- SQUIT serversB --> SQUIT serversA +Result: a(A) b(B) b(B) +A reconnects to Part B1, but immedeately breaks off again: + -->SERVERs A + -->NICK a + -->:a USER ... +Break: + -->SERVERs A + -->NICK a + -->:a USER ... + --> :a QUIT + --> SQUIT serversA +A connects to part B2, note that 'part B1 --> part B2' is lagged and the +"SERVERs A ... etc" didn't arrive yet on partB2. +Servers: Part B1 Part B2 Part A +Nicks: b(B) b(B) a(A) + -->SERVERs A + -->NICK a + -->:a USER ... + --> :a QUIT + --> SQUIT serversA + --> SERVERs B + --> NICK b + --> :b USER ... + <-- SERVERs A + <-- NICK a + <-- :a USER ... +Result *before* the lagged messages arive on Part B2: +Nicks: b(B) b(B),a(A) b(B),a(A) + -->SERVERs A + -->NICK a + -->:a USER ... + -->:a QUIT + -->SQUIT serversA +And when the lagged messages arrive on Part B2, the +'SERVERs A' get all ignored: "server exists", even more, Part B2 disconnects +Part B1... :/. Now we are going to deal with the "server exists" problem +*once* (attaching a timestamp to SERVER I think), in which case 'SERVERs A' +would only be ignored by Part B2. Then the 'NICK a' would cause a nick +collision with 1) Same user@host.name, 2) same server A, and 3) same +nick-TS ! This means: We need to ignore 'NICK nick' when is has the same +TimeStamp and the same user@host. But when the user@host differ, two people +signed on at exactly the same time with the same nick and we must kill +*both* to avoid a desync. +---- + +How to handle a nick collision, general +--------------------------------------- + +Up till now when a nick collision occurs, both nicks (when a nick change +from 'old' to 'new' is involved) are KILLed in ALL directions.. wiped off the +net thus. +But even with wiping off the net in mind, it doesn't make sense to kill in +old direction, it is sufficient to deal with "our side" of the net, because +every nick collision occurs on two servers, both can deal with their side. +As an example: + +Servers: A B +Nicks: a(A) a(B) +Reconnection: + <-- NICK a + NICK a --> + +As you see, if A receives the 'NICK a' from B, it only has to deal with +its own side, because it is certain that B will receive the 'NICK a' from +A and handle it too as a nick collision (and therefore this 'NICK a' *is* +already a 'KILL' message). + +Thus, when we receive a 'NICK' that gives rise to the need of purging +a nick on *our* side, we deal with it by doing: +sendto_serv_butone(cptr,":%s KILL ... +which sends the KILL to all server connections except the link 'cptr' that +generated the nick collision. +Also then we have to destroy the memory usage of the killed client on our +own server, and disconnect him if it is ours, so we call exit_client(). + +Summary so far +-------------- + +Ok, we discussed when to kill who. Resulting rules are: + +We receive a "NICK new" or ":old NICK new" from a server direction, and +we already have a registered 'new'. Then we have a nick collison and deal +with it as follows: +1) If the user@host differ, + and our 'new' is younger or equal, KILL our 'new'. + and our 'new' is older, ignore the 'NICK new', but kill 'old' on + our side if it was a nick change. +2) If user@host is the same: + and our 'new' is older, KILL our 'new'. + and our 'new' is younger, ignore the 'NICK new', but kill + 'old' on our side if it was a nick change. + and our 'new' is equal, KILL our 'new', + and kill 'old' on our side too if it was a nick change. + +Remarks: + The last case, where have a ':old NICK new' collission with +the same user@host and TimeStamp, can't be case C), but it +is possible that *we* did send a 'NICK new', and the server at +the other side kills 'old' off... So we have to do it too. + With this protocol we *ignore* 'NICK new' message, but of course +in most cases they will be followed by at least a ':new USER ...' and +probably +more like ':new JOIN #...'. This would cause 'Fake direction' errors and +the current protocol KILLs such a nick in *ALL* direction (???). Now, we +DON'T want to KILL the nick in the right direction do we? And killing the +fake direction nick makes no sense: it will be killed automatically due to +the fact we did send a 'NICK new' in that direction. Thus: we can/have to +remove the Fake Direction kills. + Of course, when we receive a 'NICK new hopcount :TimeStamp', we +*can't* compare with the user@host, because it takes some time before we +will receive the 'USER'... We also can't store the nick, because it must +be unique. To solve this, we need to change the protocol so that 'NICK new' +contains all information and the USER message will be redundant and removed +in a later patch. This also reduces net.bursts. + +Attaching a TimeStamp (TS) to nicks +----------------------------------- + +Whenever someone takes a new nick, which is available of course, either by +changing nick or by signing on, the local server attaches a TimeStamp (TS) +to the nick. Now there will be sent: + +NICK new hopcount TS user host.name server.name :Real name +or +:old NICK new :TS + +This is 100% compatible with the existing protocol. + +When a server receives such a nick from a neighbouring server it copies the +TS, keeping track of the local change time. (When not all servers have +upgraded, and no TS is received, the .anc server will fill in the time +itself - being a slight advantage over keeping it 0. It also will assume +that the host.names are equal or not equal resulting a as many kills as +needed in the worst case). + + +Examples +-------- + +Servers: A B +Nicks: a(A),b(B) b(B),a(A) +Both change simultaneously to nick 'c', but 'a' slightly faster (at time=1, +and b at time=2): + c(A),b(B) c(B),a(A) + -> :a NICK c :1 + :b NICK c :2 <- +Then A receives a ':b NICK c :2' where 2 > 1, and KILLs b on its own side. +B however receives ':a NICK c :1' where 1 < 2, and KILLs c on its own side. +Result: c(A) c(A) + +Due to 'lag', more :c PRIVMSG .. from B to A can follow, resulting in a +fake direction. 'A' will simply ignore them and not kill c (kills for +fake direction are nonsense anyway). + +In the case that someone signs on, taking the same nick as a nick change +we have almost the same: + +Servers: A B +Nicks: a(A) a(A) +'a' changes simultaneously to nick 'c', but slightly faster (at time=1), +as a new 'c' signs on at B (time=2). + c(A) a(A),c(B) + -> :a NICK c :1 + NICK c 1 :2 <- +Then A receives a 'NICK c 1 :2' where 2 > 1, and ignores it simply. +B however receives ':a NICK c :1' where 1 < 2, and KILLs c on its own side. +Result: c(A) c(A) + +If the new 'c' was a little bit earlier, we get: + +Servers: A B +Nicks: a(A) a(A) +'a' changes simultaneously to nick 'c', and slightly slower (at time=2), +as a new 'c' signs on at B (time=1). + c(A) a(A),c(B) + -> :a NICK c :2 + NICK c 1 :1 <- +Then A receives a 'NICK c 1 :1' where 1 < 2, and KILLs c on its own side. +B however receives ':a NICK c :2' where 2 > 1, and KILLs a on its own side. + +Result: c(B) c(B) + +Last case, two people sign on (or during a net reconnection): + +Server: A B +Sign on: c(A) c(B) + -> NICK c 1 :1 + NICK c 1 :2 <- +Then A receives 'NICK c 1 :2' where 2 > 1, and ignores it. +and B receives a 'NICK c 1 :1' where 1 < 2, and KILLs c on its own side. +Result: c(A) c(A) + +Note: the above didn't take equal TS's into account, and I assumed +user@hosts to be different: the nick collision bot cases. + +A last possibility when someone starts hacking... a 'NICK new' twice +from the same direction, should not be accepted: we kill the earlier one +always. + +Compatibility problems +---------------------- + +In the future, we want to also take 'user@host' into account... Therefor, +we need to start to ignore 'NICK new' and only act upon ':new USER ...'. +We can only do that if also 'USER contains the hopcount and TimeStamp'... +If we change the protocol immedeately to say: +:nick USER user host.name server.name hopcount TimeStamp :Real name +the 'hopcount' would be treated as realname, and we the rest would be +lost :( + +We can also transfer the info to 'NICK', with: + +:server.name NICK nick hopcount user host.name TimeStamp :Real name + +and later forget the USER message. Although someone lamer uses +the C source line " if (sptr == cptr) ..." in m_nick() to determine if +it was a 'NICK new' or a ':old NICK new' :/ Geesh (unlogical). He should +have used " if (IsServer(sptr)) ...". You would need three upgrade steps +or we will have to do with: +NICK nick hopcount user host.name server.name TimeStamp :Real name + +The nice thing about this is, that we can check how many parameters we +receive and then immedeately use the user@host if it is there... That way +the .acn will immedeately work once everyone upgraded once, and the second +step would only get rid of the 'USER' line between servers. + +Run + + +============================================================================= + WALLOPS +============================================================================= +Usage: /WALLOPS + +Sends a message to IRC ops on-line. Remember that users who are /umode +w +can see wallops as well. + + +============================================================================= + STATS W +============================================================================= +Author: Michael Vanloon (michaelv@iastate.edu) - mlv on IRC +Help on /stats w : + +I've been working on something I think would be quite a useful +addition to the ircd. It keeps track of the average number of local +clients, total clients, and total connections (including servers) over +various periods of time, currently over the last minute, hour, day and +week. It is invoked by "/stats w server.name". You may try it +yourself by "/stats w *.iastate.edu". A sample from +ircserver.iastate.edu looks like this: + +*** Minute Hour Day Week Userload for: +*** 44.91 39.4 33 33 iastate.edu clients +*** 114.40 103.2 69 65 total clients +*** 120.40 109.0 73 70 total connections +*** * End of /STATS report + +I'm debating changing it to show average connections over the last +minute, hour, day, prev. day, and prev. day, as I think the data +doesn't change enough after that to really be useful to justify +keeping it over an entire week. + +On smaller, less used servers, it should add a negligible amount to +the resident memory consumed by the ircd. On a large hub such as the +*.bu.edu servers, penfold, or ircserver.iastate.edu, it might add as +much as 300k to the amount of memory the ircd attempts to keep +resident. The amount is determined solely by the number of +connects/disconnects the server processes over the span of time +measured. + +The code is bulletproof and has undergone *extensive* debugging and +testing before I announced it here. + +The reason I'm posting this is because I would like to know how many +people think this would be a useful addition to the server. In +addition, I'd like feedback on whether you think this should be a +standard part of the distributed server code. I think it should, but +Avalon wants me to post here first and see how others feel about it. +I'd appreciate your input. + +I will be making a patched 2.7.2 server available with this included, +for those who would like to have this and stability too. I'll also be +hooking it into 2.8.x soon, and giving it back to Av to include in the +standard 2.8 distribution as it matures, if he sees fit to do so. + +Thanks for your time... + + --Michael (mlv) + +IRC log started Wed Aug 18 21:52 +*** Value of LOG set to ON +*mlv* it's the usage of your server +*mlv* average number of users on your server over the last minute, hour, day, yesterday, and the day before +*mlv* local clients, total clients, and total connections (clients + servers) +-ircserver.iastate.edu- Minute Hour Day Yest. YYest. Userload for: +-ircserver.iastate.edu- 23.00 23.0 16 17 11 iastate.edu clients +-ircserver.iastate.edu- 52.00 52.8 37 35 23 total clients +-ircserver.iastate.edu- 61.00 61.7 45 42 21 total connections +-> *mlv* hmm...so iastate had 23 local clients in the last minute? +*mlv* right... in the last minute the average number of local users on our server was 23 +*mlv* 23.45 actually +-> *mlv* okie...gotcha... thanks :) one other thing +*mlv* there were an average of 23.1 local users on here over the last hour +*mlv* shoot +-> *mlv* is it possible to specify multiple domains? +-> *mlv* for e.g. uoknor.edu and okstate.edu cos those will be local to midway +*mlv* it could be coded in, but 1) my code doesn't support it out of the box, and 2) that would add more state info which would increase the memory usage a bit +-> *mlv* hmm... +*mlv* it's purely informational... i wouldn't worry about it, really that much +-> *mlv* okay...also, the Makefile on the ftp site seems hosed.....there's junk at the end...I tried both the .Z and the .gz +*mlv* i'm thinking about making it log by connection class... but i'll have to use a more efficient statistical algorithm (less precise) if i do that +*mlv* that way you could put all the local domains into certain classes +*mlv* oh yeah... it's harmless, just weird +-> *mlv* that'll work :) +-> *mlv* well...thanks for your help....will have a look at the stats w patch when you're finished with it :) +IRC Log ended *** Wed Aug 18 22:22 + + +============================================================================= + BAN/TOPIC/SIGNON INFO +============================================================================= +Author: Paul Foley (pfoley@kauri.vuw.ac.nz) SIO on IRC + +Help on Ban/Topic/Signon : + +Since these patches allow the server to maintain additional information, the +server replies have been changes for the /mode #channel +b (#367), /whois +(#317) and an additional reply #333 has been added for topic info. The time +is returned as a long integer in UTC format in all cases. Since the existing +clients will ignore this additional information, you will need to either +patch the client, or in case you're using ircII, use the foll. /on statements +to take benefit of these patches : + +on ^367 * if ([$4] != []) {echo *** $1 \($3 - $stime($4)) $2} {echo *** $1-} +on ^333 * echo *** Topic for $1 set by $2 on $stime($3) +on ^317 * if (index(012345679 $3) != -1) {echo *** $1 has been idle for $2 seconds. Signon at $stime($3)} {echo *** $1 has been idle for $2 seconds.} + + +Once you have done this, you can see info as follows: +/mode #wasteland +b +*** #wasteland (Mmmm - Thu Aug 19 04:44:24 1993) test!*@* + +/topic #wasteland +*** Topic for #wasteland: We all love Axl Rose! +*** Topic for #wasteland set by rbarnes on Thu Aug 19 04:26:56 1993 + +/whois Mmmm +*** Mmmm is mandar@essex.ecn.uoknor.edu (Mmmm,I get high with a little help ++from my friends) +*** on channels: @#wasteland +*** on irc via server essex.ecn.uoknor.edu (MIDWEST HUB..HELPS YOU GET THERE ++SOONER) +*** Mmmm is an IRC Operator +*** Mmmm has been idle for 454 seconds. Signon at Wed Aug 18 23:47:19 1993 + + +============================================================================= + CLIENT NOTIFY +============================================================================= +Authors: Patrick Ashmore (pda@engr.engr.uark.edu) - Twilight1 on IRC + Mandar Mirashi (mmmirash@mailhost.ecn.uoknor.edu) - Mmmm on IRC + Tony Vencill (vencill@iastate.edu) - Tony/Tonto on IRC + +Help on Client Notify: + +This patch allows all opers on your server to see clients connecting to your +server and disconnecting from it (with the reason why they disconnected). +This can help you identify troublesome clients, or redirect remote clients +to closer servers, or troubleshoot the reason why a client disconnected. + +A sample output: + +*** Notice -- Client connecting : Karll (agifford@sci.dixie.edu). + +*** Notice -- Client exiting : Karll (agifford@sci.dixie.edu) [Bad link?]. + +PS: if you wish to selectively decide when you wish to see these connection +notices, use the foll. script + +on ^server_notice "% % NOTICE -- CLIENT*" if (hideit != 1) {echo *** $2-} +alias show @ hideit = 0;echo *** You can now see clients connecting/exiting +alias hide @ hideit = 1;echo *** You will no longer see clients connecting/exiting + +If you then wish to not see client connects/exits when you are opered, simply +type /hide. If you wish to see them again, type /show. + +============================================================================= + TRACE TIMES +============================================================================= +Author: Tony Vencill (vencill@iastate.edu) - Tony/Tonto on IRC + +Help on Trace Time: + + This useful patch lets you identify the times since your server last +heard from any connected servers or clients. This time is displayed in +seconds, appended to each line of your /trace output. It can be very +helpful in identifying which servers are going to drop off or which +clients may ping timeout from your server. + +A sample output: + +/trace essex* +*** Serv [30] ==> 10S 8C cancun.caltech.edu *!*@essex.ecn.uoknor.edu 73 +*** Serv [30] ==> 9S 6C imageek.york.cuny.edu *!*@essex.ecn.uoknor.edu 27 +*** Serv [0] ==> 1S 0C inga1.acc.stolaf.edu[130.71.192.16] ++*!*@essex.ecn.uoknor.edu 58 +*** Serv [0] ==> 1S 0C shadow.acc.iit.edu *!*@essex.ecn.uoknor.edu 97 +*** Serv [0] ==> 1S 2C curie.ualr.edu Mmmm!mmmirash@essex.ecn.uoknor.edu 98 +*** Serv [0] ==> 1S 1C piaget.phys.ksu.edu *!*@essex.ecn.uoknor.edu 117 +*** Oper [0] ==> Mmmm[essex.ecn.uoknor.edu] 0 +*** Serv [50] ==> 1S 0C pv1629.vincent.iastate.edu *!*@essex.ecn.uoknor.edu 7 +*** Class 0 Entries linked: 6 +*** Class 50 Entries linked: 1 +*** Class 30 Entries linked: 2 + + +============================================================================= + K- line comments +============================================================================= +Author: Mandar Mirashi (mmmirash@mailhost.ecn.uoknor.edu) - Mmmm on IRC + +This extremely useful patch allows you to specify either a comment or an +interval in the 2nd field of the K line (instead of the previous format +of just a restricted interval). The "comment" can even be configured to +be a *file* name which can then be displayed to the client rejected via +the K line. All existing K lines will work as they are. This patch is +an *enhancement* to the K-lines. + +e.g. (of a comment field) + +K:*.sdsu.edu:Flooding.is.not.cool.lamer:masc0482 + +As far as possible, do not use a white space in the comment field, because +this breaks ircII's /stats k handling. You can use the period (.) or the +underscore instead (_). + +e.g (of a file to be output to a rejected client + - #define COMMENT_IS_FILE in config.h) + +K:*.netcom.com:/ecn/staff0/irc/servers/vinson/sorry.txt:* + + +============================================================================= + OPER FAIL +============================================================================= +Authors: Michael Vanloon (michaelv@iastate.edu) - mlv on IRC + Jon C Green (jcgreen@iastate.edu) - Jon2 on IRC + Bryan Collins (b@ctpm.org) - bwy on IRC + +This patch notifies you if someone tries to gain oper on your server and +fails. The notice goes out only to the operators on the server. + +*** Notice -- Failed OPER attempt by M (mmmirash@lincoln.ecn.uoknor.edu) +[crackit] + + +============================================================================= + MIXED CASE +============================================================================= +Authors: Michael Vanloon (michaelv@iastate.edu) - mlv on IRC + Jon C Green (jcgreen@iastate.edu) - Jon2 on IRC + +"Here's a patch mlv and I wrote that prevents clients with mixed-case usernames +from connecting. I don't know of many sites that allow mixed-case, so it +is effective for stopping many clonebot attacks and also stops many +would-be username hackers." - Jon2 + +This has been slightly modified by Mmmm to give an option of ignoring the +case of the first character if desired (useful for those PC users who +intuitevely enter their first name with the first letter capitalised). + +e.g. +*** Notice -- Invalid username: buankBOT[saucer.cc.umr.edu] + + +============================================================================= + NOTE +============================================================================= + +Usage: + NOTE USER [&passwd] [+-flags] [+-maxtime] +- or SEND|SPY|FIND|WAITFOR|NEWS +* or SEND|SPY|FIND|WAITFOR|WALL|WALLOPS|DENY|NEWS|KEY + NOTE LS|COUNT|RM|LOG [&pwd][+-flags][#ID] [date] + NOTE FLAG [&passwd] [+-flags] [#ID] <+-flags> +* NOTE SENT [NAME|COUNT|USERS] [RM] +- NOTE STATS [MSM|MSW|MUM|MUW|MST|MSF|USED] +- NOTE SENT [NAME|COUNT] +* NOTE STATS [MSM|MSW|MUM|MUW|MST|MSF|USED|RESET] [value] +* NOTE SAVE + + The Note system have two main functions: + 1. Let you send one line messages to irc users which + they will get when they next sign on to irc. + Example: NOTE SEND Hi, this is a note to you. + 2. Let you spy on people, to see when they sign on or off, + change nick name or join channels. + Example: NOTE SPY +100 (spy on nick for 100 days) + + You may fill in none or any of the arguments listed above, including + * or ? at any place, as nick@*.edu, !username, ni?k!username etc... + Other usefull features may be NOTE WAIT , making nick and + you get a message when you both are on at the same time. + + Note was developed 1990 by jarle@stud.cs.uit.no (Wizible on IRC). + + +*Usage: NOTE [] ANTIWALL +* Switch off b flag for wall's which you have received on specified +* server. The person who queued the wall would be notified about +* the antiwall, and who requested this. + + +Usage: NOTE COUNT [&] [+|-flags] [#] + Displays the number of messages sent from your nick and username. See + HELP LS for more info. See HELP FLAG for more info about flag setting. + + +*Usage: NOTE DENY [&] [+|-] [+|-] +* +* DENY is an alias for USER +RZ (default max 1 day) +* This command makes it impossible for any matching recipient to +* queue any Note requests until timeout. + + +Usage: NOTE FIND [&] [+|-] [+|-] + + FIND is an alias for USER +FLR (default max 1 day) + This command makes the server search for any matching recipient, and + send a note message back if this is found. If field is used, this + should specify the realname of the person to be searched for. Examples: + FIND -4 foo*!username@host + FIND @host Internet* + FIND nicky Annie* + FIND +7 * Annie* + + +Usage: NOTE FLAG [&] [+|-] [#] + <+|-flags> + You can add or delete as many flags as you wish with +/-. + + switch the flag on, and - switch it off. Example: -S+RL + Following flags with its default set specified first are available: + -S > News flag for subscribing. + -M > Request is removed after you sign off. + -Q > Ignore request if recipient's first nick is equal to username. + -I > Ignore request if recipient is not on same server as request. + -W > Ignore request if recipient is not an operator. + -Y > Ignore request if sender is not on IRC. + -N > Let server send a note to you if message is delivered. + -D > Same as N, except you only get a message (no queued note to you). + -R > Repeat processing the request until timeout. + -F > Let server send note info for matching recipient(s). Any message + part specify what to match with the realname of the recipient. + -L > Same as F, except you only get a message (no queued note to you). + -C > Make sender's nicks be valid in all cases username@host is valid. + -V > Make sender's "nick*" be valid in all cases username@host is valid. + -X > Let server display if recipient signs on/off IRC or change + nickname. Any message specified is returned to sender. + -A > Show what server matching user is on using X flag. + -J > Show what channel matching user is on using X flag. + -U > Do not display nick-change using X flag. + -E > Ignore request if nick, name and host matches the message text + starting with any number of this format: 'nick!name@host nick!... ' +* -B > Send a message to every account who match the nick!user@host +* This creates a received list with flag H set. (see LS +h) +* -T > Send a message not all nicks on same accounts too using B flag. +* -K > Give keys to unlock privileged flags by setting that flags on. +* The recipient does also get privileges to queue unlimited +* numer of requests, list privileged flags and see all stats. +* -Z > Make it impossible for recipient to queue anything at all. + Other flags which are only displayed but can't be set by user: + -O > Request is queued by an operator. + -G > Notice message is generated by server. +- -B > Broadcasting message. +* -H > Flag list for who's received Broadcast message (B flag). +- Notice: Message is not sent to recipient using F, L, R or X flag. +- Using this flags, no message needs to be specified. +* Notice: Message is not sent to recip. using F, L, R, X, K, Z or H +* flag (except if B flag is set for R). For this flags, no msg. needed. + + Examples: + FLAG * +cj : Switch on c and j flag for all requests. + FLAG +x * +c : Switch on c flag for all req. which have x flag. + FLAG nick -c+j : Switch off c flag and which on j flag for nick + + +*Usage: NOTE KEY [&] [+|-] [+|-] +* KEY is an alias for USER +KR (default max 1 day) +* This command is for allowing no-opers to use oper-options by specifying +* the flag to unlock. Be careful with this option! +* Example: KEY +365 +s * would make it possible for everybody to use s flag. + + +Usage: NOTE LOG [&] [+|-] [#] + Displays how long time since matching person was on IRC. This works + only after use of NOTE SPY. The log is protected to be seen for other + users than the person who queued the SPY request. To get short + output, do not specify any arguments. Example: + LOG : Print short log of all + LOG * : Print long log including real names of all + LOG nick : Print long log for user nick. + + +Usage: NOTE LS [&] [+|-] [#] + [] + Displays requests you have queued. No arguments would show you + all requests without the message field. + Use flags for matching all messages which have the specified flags set + on or off. See HELP NOTE FLAG for more info about flag settings. Time + can be specified on the form day.month.year or only day, or day/month, + and separated with one of the three '.,/' characters. You can also + specify -n for n days ago. Examples: 1.jan-90, 1/1.90, 3, 3/5, 3.may. + If only '-' and no number is specified max time is set to all days. + The time specified is always the local time on your system. Example: + LS !user would show you all requests to username@* + LS +x would show all your SPY requests. + LS #300 would show you only request #300. + + +Usage: NOTE NEWS [&] [+|-] [+|-] + + NEWS with no message is an alias for USER +RS (default max 60 days) + This command is for subscribing on a specified newsgroup from any + user(s) or host(s). Wildcards may be used anywhere. Example: + NEWS irc.note : Subscribe on irc.note +* NEWS irc.note@*.no : Send to group irc.note, but only for +* users at host *.no +* NEWS irc.note : Send to all for group irc.note +* NEWS Users@*.edu Hi : Send Hi to all users using note in your +* server located at host *.edu. + (Advanced users may use User +rs <...> where filter is a + string which must matches with field in received news message) +- Only opers can send news as default. +* To send news add message and use same format as subscribing, except +* that username field must matches with subscribed group as alt.irc!*.irc - +* everybody subscribing on a*.irc or *.irc or alt.irc... would get the news. +* A speciall case is the group Users which everybody using note in the server +* are member of. + + +Usage: NOTE RM [&] [+|-] [#] + Deletes any messages sent from your nick and username which matches + with nick and username@host. Use flags for matching all messages which + have the specified flags set on or off. See HELP FLAG for more info + about flag settings, and HELP LS for info about time. + + +*Usage: NOTE SAVE +* SAVE saves all messages with the save flag set. Notice that the +* messages are automatically saved (see HELP STATS). Each time server is +* restarted, the save file is read and messages are restored. If no users +* are connected to this server when saving, the ID number for each +* message is renumbered. + + +Usage: NOTE SEND [&] [+|-] [+|-] + + SEND is an alias for USER +D (default max 60 days) + This command is for sending a message to recipient, and let the server + send a note + a notice to sender if this is on IRC - if message is sent. + SEND foobar Hello, this is a test. + SEND +7 !username@*.edu Hello again! + + +-Usage: NOTE SENT [NAME|COUNT] +*Usage: NOTE SENT [NAME|COUNT|USERS] [RM] + Displays host and time for messages which are queued without specifying + any password. If no option is specified SENT displays host/time for + messages sent from your nick and username. + NAME displays host/time for messages sent from your username + COUNT displays number of messages sent from your username +* USERS Displays the number of messages in [], and names for all users +* who have queued any message which matches with spec. nick/name/host. +* RM means that the server removes the messages from the specified user. + + +*Usage: NOTE SERVICE +* Useful in robots. Note will take the requests as if from + + +Usage: NOTE SPY [&] [+|-] [+|-] + [msg] + SPY is an alias for USER +RX (default 1 max day) + SPY makes the server tell you if any matching recipient sign(s) + on/off IRC or change nick name. No message needs to be specified. + However, if a message is specified this is returned to sender including + with the message about recipient. Message could for example be one or + more Ctrl-G characters to activate the bell on senders machine. + As an alternative for using C flag, field could start with + any number of nicks on this format: %nick1 %nick2... %nickn, with + no space between % and the nick name you use. Spy messages would be + valid for any of the nicks specified. + SPY with no argument would tell you what users you have spy on who are + currently on IRC. The system logs last time the last matching person was + on IRC for each SPY request is queued in the server. See NOTE LOG for this. + You may use flag +A to see what server matching user is on, + and/or +J flag to see what channel. (Read HELP NOTE USER for more). Example: + SPY foobar!username@host + SPY +10 foobar + SPY +aj &secret * + SPY +365 +e !user nick!*@* + SPY % +7 foo!user + SPY +5 nicky %mynick %meenick + + +-Usage: NOTE STATS [MSM|MSW|MUM|MUW|MST|MSF|USED] +*Usage: NOTE STATS [MSM|MSW|MUM|MUW|MST|MSF|USED|RESET] [value] + STATS with no option displays the values of the following variables: + MSM: Max number of server messages. + MSW: Max number of server messages with username-wildcards. + MUM: Max number of user messages. + MUW: Max number of user messages with username-wildcards. + MST: Max server time. + MSF: Note save frequency (checks for save only when an user register) + Notice that 'dynamic' mark after MSM means that if there are more + messages in the server than MSM, the current number of messages are + displayed instead of MSM. + Only one of this variables are displayed if specified. +* You can change any of the stats by specifying new value after it. +* RESET sets the stats to the same values which is set when starting the +* server daemon if no note file exist. Notice that this stats are saved +* in same file as the other messages. + + +Usage: NOTE USER [&] [+|-] [+|-] + + With USER you can queue a message in the server, and when the recipient + signs on/off IRC, change nick or join any channel, note checks for + valid messages. This works even if the sender is not on IRC. See HELP + FLAGS for more info. + Password can be up to ten characters long. You may specify password + using the &, % or $ character. & is equal to to $, except working much + better cause client use $ for other things... + The % character works like &, except it makes the queuing silent. It + makess also sense to use this without any following password. + If any request queued is equal to any previous except time and maxtime, + only maxtime is changed as specified. You then get "Joined" instead of + "Queued". + HELP FLAGS for info about flag settings. Username can be specified + without @host. Do not use wildcards in username if you know what it + is, even if it's possible. Max time before the server automatically + remove the message from the queue, is specified with hours with a + '-' character first, or days if a '+' character is specified, as + -5 hours, or +10 days. Default maxtime is 7 days. + Note: The received message is *directly* displayed on the screen, + without the need for a read or remove request. + NOTE USER &secret +WN +10 Wizible!jarlek@ifi.uio.no Howdy! + is an example of a message sent only to the specified recipient if + this person is an operator, and after receiving the message, the server + sends a note message back to sender to inform about the delivery. + NOTE USER +XR -5 Anybody + is an example which makes the server to tell when Anybody signs + on/off irc, change nick etc. This process repeats for 5 hours. + NOTE USER +FL @*.edu *account* + is an example which makes the server send a message back if any real- + name of any user matches *account*. Message is sent back as note from + server, or directly as a notice if sender is on IRC at this time. + + +Usage: NOTE WAITFOR [&] [+|-] [+|-] + [] + WAITFOR is an alias for USER +YD (default max 1 day) + Default message is [Waiting] + This command is for telling the recipient if this appears on IRC that + you are waiting for him/her and notice that this got that message. Example: + WAITFOR foobar + WAITFOR -2 foobar!username@* + WAITFOR foobar Waiting for you until pm3:00.. + + +*Usage: NOTE WALL [&] [+|-] [+|-] +* +* WALL is an alias for USER +BR (default max 1 day) +* This command is for sending a message once to every matching user +* on IRC. Be careful using this command. WALL creates a list of +* persons received the message (and should not have it once more time) +* with H flag set. This list can be displayed using ls +h from the +* nick and username@host which the WALL request is queued from. +* Removing the headers (H) before WALL request is removed would cause +* the message to be sent once more to what users specified in list. +* WALL +7 @*.edu Do not do this! - Makes it clear for all users using +* IRC on host @*.edu the next 7 days how stupid it is to send such WALL's ;) + + +*Usage: NOTE WALLOPS [&] [+|-] [+|-] +* +* WALLOPS is an alias for USER +BRW (default max 1 day) +* This command is same as WALL, except only opers could receive it. +============================================================================= diff --git a/doc/INSTALL b/doc/INSTALL new file mode 100644 index 000000000..67fdf7182 --- /dev/null +++ b/doc/INSTALL @@ -0,0 +1,963 @@ +/************************************************************************ + * IRC - Internet Relay Chat, doc/INSTALL + * Copyright (C) 1990,1991,1992, Jeff Trim, Mike Bolotski, + * Jarkko Oikarinen and 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. + * + * $Id$ + */ + + Installing IRC - The Internet Relay Chat Program + + +Overview of this document: + + 1) The config.h file + 2) Editing the Makefile + 3) Compiling IRC + 4) The ircd.conf file + + +1) Edit the "config.h" file and make changes to the various #DEFINE's: + + a) Copy the config.h.dist file to config.h before editing. + + b) Define what type of UNIX your machine uses. + + Pick the machine type which best describes your machine and change + the #undef to #define (if needed). Some flavours of Unix require no + #define and in such cases all others should be #undef'd. + + c) DEBUGMODE + + Define DEBUGMODE if you want to see the ircd debugging information + as the daemon is running. Normally this function will be undefined + as ircd produces a considerable amount of output. DEBUGMODE must be + defined for either of -t or -x command line options to work. + + d) DPATH, SPATH, CPATH, MPATH, LPATH, PPATH + + DPATH is provided so that the other pathnames (SPATH, CPATH, etc) + may be provided in just filename form. When the server starts, it + chdir's to DPATH before chroot or any other file operation, making + it the "current directory" for the server. This is where core files + will go if it core dumps. + + Define SPATH to be the directory path to ircd. This is usually + /usr/local/bin/ircd, unless you don't have installation permission + there. + + Define CPATH to be the directory path to the "irc.conf" file. + This path is usually /usr/local/lib/irc.conf. The format of this file + will be discussed later. + + The LPATH #define should be set to "/dev/null" unless you plan to + debug the program. Note that the logfile grows very quickly. + + Define MPATH to be the path to the 'motd' (message of the day) file + for the server. Keep in mind this is displayed whenever anyone + signs on to your server. + + The PPATH is optional, but if defined, should point to a file which + either doesn't exist (but is creatable) or a previously used PPATH + file. It is used for storing the server's PID so a ps(1) isn't + necessary. + + e) CHROOTDIR + + To use the CHROOTDIR feature, make sure it is #define'd and that + the server is being run as root. The server will chroot to the + directory name provded by DPATH. + + f) ENABLE_SUMMON, ENABLE_USERS + + For security conscious server admins, they may wish to leave + ENABLE_USERS undefined, disabling the USERS command which can be used + to glean information the same as finger can. ENABLE_SUMMON toggles + whether the server will attempt to summon local users to irc by + writing a message similar to that from talk(1) to a user's tty. + + g) SHOW_INVISIBLE_LUSERS, NO_DEFAULT_INVISIBLE + + On large IRC networks, the number of invisible users is likely to + be large and reporting that number cause no pain. To aid and effect + this, SHOW_INVISIBLE_LUSERS is provided to cause the LUSERS command + to report the number of invisible users to all people and not just + operators. The NO_DEFAULT_INVISIBLE define is used to toggle whether + clients are automatically made invisible when they register. + + h) OPER_KILL, OPER_REHASH, OPER_RESTART, LOCAL_KILL_ONLY + + The three operator only commands, KILL, REHASH and RESTART, may all + be disabled to ensure that an operator who does not have the correct + privilidges does not have the power to cause untoward things to occur. + To further curb the actions of guest operators, LOCAL_KILL_ONLY can + be defined to only allow locally connected clients to be KILLed. + + i) The rest of the user changable #define's should be pretty much self + explanatory in the config.h file. It is *NOT* recommended that any + of the file undef the line with "STOP STOP" in it be changed. + +3) Configure and compile the code. + + Edit the root Makefile for the server, uncomment/comment the correct + CFLAGS/IRCDLIBS lines as appropriate for your system. + Change DESTDIR to be the same as the path for DPATH in config.h. + Type "make". This will compile the server, the client, and the services. + At the end of this step, the server directory will contain 'ircd', + and the client directory will contain 'irc'. To get the server installed, + type "make install" which will build a default m4 file for preprocessing, + copy example.conf and put the server all in DESTDIR. The irc client and + a copy of the server will also be placed in BINDIR and the modes set + accordingly. + +4) The ircd.conf file. + + After installing the ircd and irc programs, edit the irc.conf file + as per the instructions in this section and install it in the + location you specified in the config.h file. There is a sample + conf file called example.conf in the /doc directory. + + Appendix A describes the differences between IP addresses and host + names. If you are unfamiliar with this, you should probably scan + through it before proceeding. + + The irc.conf file contains various records that specify configuration + options. The record types are as follows: + + 1. Server connections (C,N) + 2. Machine information (M) + 3. Client connections (I) + 4. Default local server (U) + 5. Operator priviliges (O) + 6. Administrative info (A) + 7. Excluded accounts (K) + 8. Excluded machines (Q) + 9. Connection Classes (Y) + 10. Leaf connections (L) + 11. Service connections (S) + 12. Port connections (P) + 13. Hub connections (H) + + + 1. SERVER CONNECTIONS: How to connect to other servers + How other servers can connect to you + + WARNING: + The hostnames used as examples are really only examples and + not meant to be used (simply because they don't work) in real life. + + Now you must decide WHICH hosts you want to connect to and WHAT ORDER you + want to connect to them in. For my example let us assume I am on the + machine "rieska.oulu.fi" and I want to connect to irc daemons on 3 other + machines: + + "garfield.mit.edu" - Tertiary Connection + "irc.nada.kth.se" - Secondary Connection + "nic.funet.fi" - Primary Connection + + And I prefer to connect to them in that order, meaning I first want to + try connecting to "nic.funet.fi", then to "irc.nada.kth.edu", and + finally to "garfield.mit.edu". So if "nic.funet.fi" is down or + unreachable, the program will try to connect to "irc.nada.kth.se". + If irc.nada.kth.se is down it will try to connect to garfield and so forth. + PLEASE limit the number of hosts you will attempt to connect to down to 3. + This is because of two main reasons: + a) to save your server from causing extra load and delays + to users + b) to save internet from extra network traffic + (remember the old rwho program with traffic problems when + the number of machines increased). + + The format for the CONNECT entry in the "irc.conf" is: + + C:::: +Field: 1 2 3 4 5 + + for example: + + C:nic.funet.fi:passwd:nic.funet.fi:6667 + + - or - + + C:128.214.6.100:passwd:nic.funet.fi:6667 + + - or - + + C:root@nic.funet.fi:passwd:nic.funet.fi:6667 + + + Explanation: + + Each field is separated with a ":" charcter: + + Field 1: Field 1 tells the IRC program which option is being configured. + "C" corresponds to a server Connect option. + + Field 2: Specifies the host name or IP address of the machine to connect + to. If "user@" prefixes the actual hostname or IP address + the server will require that the remote username returned by + the ident server be the same as the one given before the "@". + + Field 3: The password of the other host. A password must always be + present for the line to be recognized. + + Field 4: The full hostname of the target machine. This is the name that + the TARGET server will identify itself with when you connect + to it. If you were connecting to nic.funet.fi you would receive + "nic.funet.fi" and that is what you should place in + this field. + + Field 5: The INTERNET Port that you want to connect to on the TARGET + machine. Most of the time this will be set to "6667". + If this field is left blank, then no connections will + be attempted to the TARGET host, and your host will accept + connections FROM the TARGET host instead. + + Some examples: + + C:nic.funet.fi::nic.funet.fi:6667 + + This reads: Connect to host "nic.funet.fi", with no password + and expect this server to identify itself to you as + "nic.funet.fi". Your machine will connect to this host to + PORT 6667. + + C:18.72.0.252:Jeff:garfield.mit.edu:6667 + + This reads: Connect to a host at address "18.72.0.252", using a + password of "Jeff". The TARGET server should identify + itself as "garfield.mit.edu". You will connect to Internet + Port 6667 on this host. + + C:irc.nada.kth.se::irc.nada.kth.se + + This reads: do not attempt to connect to "irc.nada.kth.se", + but if "irc.nada.kth.se" requests a connection, + allow it to connect. + + Now back to our original problem, we wanted OUR server CONNECT to 3 + hosts, "nic.funet.fi", "irc.nada.kth.se" and "garfield.mit.edu" in + that order. So as we enter these entries into the file they must be + done in REVERSE order of how we could want to connect to them. + + Here's how it would look if we connected "nic.funet.fi" first: + + C:garfield.mit.edu::garfield.mit.edu:6667 + C:irc.nada.kth.se::irc.nada.kth.se:6667 + C:nic.funet.fi::nic.funet.fi:6667 + + Ircd will attempt to connect to nic.funet.fi first, then to irc.nada + and finally to garfield. + + Reciprocal entries: + + Each "C" entry requires a corresponding 'N' entry that specifies + connection priviliges to other hosts. The 'N' entry contains + the password, if any, that you require other hosts to have before + they can connect to you. These entries are of the same format as + the "C" entries. + + Let us assume that "garfield.mit.edu" connects to your server + and you want to place password authorization authorization on garfield. + The "N" entry would be: + + N:garfield.mit.edu:golden:garfield.mit.edu + + This line says: expect a connection from host "garfield.mit.edu", + and expect a login password of "golden" + and expect the host to identify itself as "garfield.mit.edu". + + N:18.72.0.252::garfield.mit.edu + + This line says: expect a Connection from host "18.72.0.252", and + don't expect login password. The connecting host should identify itself + as "garfield.mit.edu". + + + Wildcards domains: + To reduce the great amount of servers in IRCnet wildcard + DOMAINS were introduced in 2.6. To explain the usage of + wildcard domains we take an example of such: + *.de - a domain name matching all machines + in Germany. + Wildcard domains are useful in that ALL SERVERS in Germany + (or any other domain area) can be shown as one to the + rest of the world. Imagine 100 servers in Germany, it + would be incredible waste of netwotk bandwidth to broadcast + all of them to all servers around the world. + + So wildcard domains are a great help, but how to use them ? + They can be defined in the N-line for a given connection, + in place of port number you write a magic number called + wildcard count. + + Wildcard count tells you HOW MANY PARTS of your server's name + should be replaced by a wildcard. For example, your server's + name is "tolsun.oulu.fi" and you want to represent it as + "*.oulu.fi" to "nic.funet.fi". In this case the wildcard count + is 1, because only one word (tolsun) is replaced by a wildcard. + If the wildcard count would be 2, then the wildcard domain would + be "*.fi". Note that with wildcard name "*.fi" you could NOT + connect to "nic.funet.fi", because that would result in a server + name COLLISION (*.fi matches nic.funet.fi). + + I advice you to not to use wildcard servers before you know + for sure how they are used, they are mostly beneficial for + backbones of countries and other large areas with common domain. + + + 2. MACHINE INFORMATION + + IRC needs to know a few things about your UNIX site, and the "M" command + specifies this information for IRC. The fomat of this command is: + + M::xxx:: + Field: 1 2 3 4 5 + + Explanation: + + Field 1: "M" specifies a Machine description line + + Field 2: The name of YOUR host adding any Internet DOMAINNAME that + might also be present. + + Field 3: -- NOT USED --: Set to Value NULL (No spaces at ALL!). + + Field 4: Geographic Location is used to say WHERE YOUR SEVRER is, + and gives people in other parts of the world a good + idea of where you are! If your server is in the USA, it is + usually best to say: , USA. Like for Denver + I say: "Denver Colorado, USA". Finnish sites (like + tolsun.oulu.fi generally say something like "Oulu, Finland". + + Field 5: The Internet port your server will use. Should be set to + the same value as in the config.h file. + + + Example: + M:tolsun.oulu.fi::Oulu, Finland:6667 + + This line reads: My Host's name is "tolsun.oulu.fi" and + my site is located in "Oulu, Finland". My ircd will use + Internet Port 6667. + + + M:orion.cair.du.edu::Denver Colorado, USA:6667 + + This line reads: My Hosts name is "orion.cair.du.edu" + and my site is located in "Denver Colorado, USA". + I have defined Internet Port number "6667" to be used + as my IRCD Socket Port. + + + 3. CLIENT CONNECTIONS - How to let clients connect to your IRCD. + + A client is a program that connects to the ircd daemon (ircd). Currently + there are clients written in C and in GNU Emacs Lisp. The "irc" + program is the C client. Each person that talks via IRC is running + their own client. + + The irc.conf files contains entries that specify which clients are allowed + to connect to your irc daemon. Obviously you want to allow your cwn + machine's clients to connect. You may want to allow clients from + other sites to connect. These remote clients will use your server + as a connection point. All messages sent by these clients will pass + through your machine. + + The format of this entry in the conf file is: + + I:::: + Field:1 2 3 4 5 + + + For example, if you were installing IRC on tolsun.oulu.fi and you wanted + to allow examples sake let us assume you were making this file for + tolsun and you wanted to let your own clients to connect to your + server, you would add this entry to the file: + + I:128.214.5.6::tolsun.oulu.fi + or + I:tolsun.oulu.fi::tolsun.oulu.fi + + If you wanted to let remote clients connect, you could add the + following lines: + + I:*.du.edu::*.du.edu + + Allow any clients from machines whose names end in "du.edu" to connect + with no password. + + I:128.214.6.100::nic.funet.fi + + Allow clients from a machine with that IP number and the name + nic.funet.fi to connect. + + I:*.tut.fi:secret:*.tut.fi + + Allow clients from machines matching *.tut.fi to connect + with the password 'secret'. + + I:*::* + + Allow anyone from anywhere to connect your server. + This is the easiest way, but it also allows people to for example + dump files to your server, or connect 1000 (or how many open + sockets per process your OS allows) clients to your machine + and take your network ports. Of course the same things can be + done by simply telnetting to your machine's SMTP port (for example). + + NEW!!! + As of the 2.7.2d version of the server, the server is able to accept + connections on multiple ports. I-lines are required for each P-line + to allow connections to be accepted. For unix sockets, this means + either adding I:/path/port::/path/port or some variation (wildcards + are recognised here). For internet ports, there must be an I-line + which allows the host access as normal, but the port field of the + I-line must match that of the port of the socket accepting the + connectiion. A port number of 0 is a wildcard (matches all ports). + + 4. DEFAULT HOSTS (for local clients) + + This defines the default connection for the irc client. If you are + running an ircd server on the same machine, you will want to define + this command to connect to your own host. If your site is not running + a server then this command should contain the TARGET host's connection + information and password (if any). The format for this command is: + + U:::: + Field: 1 2 3 4 5 + + + For example: + + U:tolsun.oulu.fi::tolsun.oulu.fi:6667 + U:128.214.5.6::tolsun.oulu.fi:6667 + U:tolsun.oulu.fi::tolsun.oulu.fi + + If the port number is omitted, irc will default to using 6667. + + 5. OPERATOR Privileges: How to become the IRC administrator on your site + + To become an IRC Administrator, IRC must know who is authorized to become + an operator and what their "Nickname" and "Password" is. To add this + information, EDIT your "irc.conf" file and add the following command + line to it: + + O::::: + Field: 1 2 3 4 5 6 + + Explanation: + + Field 1: Speficies Operator record. If you use capital letter ('O') + in it, it specifies a global operator. Small letter ('o') + specifies a local operator. Local operator has basically the + same rights except global operator with some restrictions. + + Field 2: Tells IRC which host you have the privileges FROM. This + means that you should be logged into this host when you + ask for the priviliges. If you specify "tolsun.oulu.fi" + then IRC will expect your CLIENT to be connected at + "tolsun.oulu.fi" - when you ask for OPERATOR privileges + from "tolsun.oulu.fi". You cannot be logged in at any + other host and be able to use your OPERATOR privileges + at tolsun, only when you are connected at TOLSUN will this + work - this is a safeguard against unauthorized sites. + + + Field 3: If your AUTHORIZATION Password - this is the password that + let's IRC know you are who you say you are! Never tell anyone + your password and always keep the "irc.conf" file protected + from all of the other users. + + Field 4: The Nickname you usually go by - but you can make this what + you want. It is better to make this a NICKNAME that no one + else knows, but anything will do. I usually use my own + loginname. + + Field 5: Unused. + + Field 6: The class field should refer to an existing class (preferably + having a lower number than that for the relevant I-line) and + determines the maximum number of simultaneous uses of the + O-line allowable through the max. links field in the Y-line. + + Example: + O:orion.cair.du.edu:pyunxc:Jeff + + There is an OPERATOR at "orion.cair.du.edu" that can get + Operator priviliges if he specifies a password of "pyunxc" + and uses a NICKNAME of "Jeff". + + + + 6. ADMINISTRATIVE INFORMATION + + The "A" command is used for administrative information about a site. + The e-mail address of the person running the server should be included + here in case problems arise. + + + A::: + Field: 1 2 3 4 + + Explanation: + + Field 1: "A" specifies an Admin record. + + + Field 2: Use this field to say tell your FULL NAME and where in the + world your machine is. Be sure to add your City, + State/Province and Country. + + + Field 3: Use this field to specify your Electronic Mailing Address + preferably your Internet Mailing Address. If you have + a UUCP or ARAPnet address - please add that as well. Be + sure to add any extra DOMAIN information that is needed, + for example "mail jtrim@orion" probably won't work as a + mail address to me if you happen to be in Alaska. But + "mail jtrim@orion.cair.du.edu" would work because you + know that "orion" is part of the DOMAIN "cair.du.edu". + So be sure to add your DOMAINNAMES to your mailing addresses. + + Field 4: Is really an OTHER field - you can add what you want here, + + + Examples (the line is just one line in the confuration file, here it + is cut into two lines to make it clearer to read): + +A:Jeff Trim - Denver Colorado, USA:INET jtrim@orion.cair.du.edu UUCP {hao, +isis}!udenva!jtrim:Terve! Heippa! Have you said hello in Finnish today?;) + + Would look like this when printed out with the /admin command: + + Jeff Trim - Denver Colorado, USA + INET jtrim@orion.cair.du.edu UUCP {hao,isis}!udenva!jtrim + Terve! Hei! Heippa! Have you said hello in Finnish today? ;) + + + Note that the A record cannot be split across multiple lines; it will + typically be longer than 80 characters and will therefore wrap around + the screen. + + + 7. REMOVING A USER FROM IRC Remove an errant user from IRC on your site. + + Obviously it is hoped that you wouldn't have to use this command. + Unfortunately sometimes a user can become unmanageable and this is your + only recourse - the KILL USER command. THIS COMMAND ONLY AFFECTS YOUR + SERVER - If this user can connect to another SERVER somewhere else in + the IRC-Network then you would have to talk to the administrator on that + site to disable his access from that IRCD Server as well. + + The format of this command is: + + K::