From f110f47e650b207131a8c3647ad5aaa392dc41d4 Mon Sep 17 00:00:00 2001 From: cmunk Date: Mon, 28 Feb 2000 22:45:44 +0000 Subject: [PATCH] Import of Unreal3.0 (STABLE) --- .CHANGES.NEW | 6 + .NEW_CONFIG | 8 + CREDITS.potential | 2 + Changes | 315 +++ Config | 1676 +++++++++++ Donation | 20 + INSTALL | 153 + LICENSE | 340 +++ Makefile.dist | 205 ++ READTHIS.NOW | 15 + TODO | 21 + TSpre.doc | 28 + Unreal.nfo | 49 + bsdinstall | 84 + crypt/Makefile | 38 + crypt/README | 63 + crypt/crypter | 55 + crypt/mkpasswd.c | 43 + doc/ADD-TO-IRCRC | 72 + doc/Authors | 142 + doc/Crule.readme | 128 + doc/Elite.Changes | 126 + doc/History/19.mu1-New | 16 + doc/History/2.8-New | 34 + doc/History/Advertisement | 41 + doc/History/Etiquette | 86 + doc/History/README.patches | 1902 +++++++++++++ doc/INSTALL | 963 +++++++ doc/Manual | 382 +++ doc/Operators | 241 ++ doc/conf.doc | 1582 +++++++++++ doc/example.conf | 481 ++++ doc/faq | 193 ++ doc/irc.1 | 82 + doc/ircd.8 | 140 + doc/m4macros | 47 + doc/server-compile-guide | 294 ++ doc/tao.of.irc | 271 ++ doc/unrealircd.doc | 407 +++ dynconf | 21 + extras/extras.txt | 1 + extras/tsp/Makefile | 12 + extras/tsp/README | 26 + extras/tsp/README.sscript | 40 + extras/tsp/socker.c | 149 + extras/tsp/sscript-lib.doc | 115 + extras/tsp/sscript.c | 509 ++++ extras/tsp/sscript.h | 45 + extras/tsp/tsp-client.c | 39 + extras/tsp/tsp-server | 2 + extras/tsp/tsp-server-run.c | 3 + include/channel.h | 44 + include/cio.h | 27 + include/ciofunc.h | 20 + include/class.h | 71 + include/common.h | 216 ++ include/config.h | 762 +++++ include/dbuf.h | 165 ++ include/dynconf.h | 103 + include/fdlist.h | 25 + include/h.h | 340 +++ include/hash.h | 48 + include/inet.h | 54 + include/license.h | 60 + include/msg.h | 476 ++++ include/nameser.h | 249 ++ include/numeric.h | 307 ++ include/relinfo.h | 14 + include/res.h | 73 + include/resolv.h | 79 + include/resource.h | 59 + include/sjoin.h | 65 + include/sock.h | 75 + include/stamp.h | 4 + include/struct.h | 1082 ++++++++ include/sys.h | 141 + include/userload.h | 54 + include/version.h | 54 + include/whowas.h | 120 + include/win32/settings.h | 3 + include/win32/setup.h | 49 + ircd | 79 + ircdcron/ircd.cron | 1 + ircdcron/ircdchk | 49 + ircdreg | 4 + killircd | 29 + makeconf | 543 ++++ makefile.win32 | 177 ++ networks/972-scripterz.network | 71 + networks/altirc.network | 71 + networks/bunker7.network | 29 + networks/digitalirc.network | 65 + networks/dragonwings.network | 29 + networks/fireirc.network | 30 + networks/global-irc.network | 29 + networks/infinity.network | 29 + networks/megairc.network | 31 + networks/mp3fans.network | 29 + networks/neohorizon.network | 70 + networks/networks.ndx | 24 + networks/nevernet.network | 72 + networks/newmilennium.network | 26 + networks/realchat.network | 70 + networks/roxnet.network | 30 + networks/solargalaxy.network | 36 + networks/solarxtreme.network | 69 + networks/spynet.network | 28 + networks/ss.network | 58 + networks/template.network | 71 + networks/tspre.network | 71 + networks/unrealircd.conf | 81 + networks/uzaynet.network | 72 + networks/v64net.network | 71 + newnet | 12 + rehash | 23 + src/Config.c | 377 +++ src/Makefile | 177 ++ src/bsd.c | 202 ++ src/buildm4 | 85 + src/channel.c | 4529 ++++++++++++++++++++++++++++++ src/chkconf.c | 812 ++++++ src/cio_init.c | 32 + src/cio_main.c | 836 ++++++ src/class.c | 238 ++ src/cloak.c | 324 +++ src/conftool.c | 15 + src/crule.c | 779 ++++++ src/dbuf.c | 351 +++ src/dynconf.c | 373 +++ src/fdlist.c | 70 + src/hash.c | 1170 ++++++++ src/help.c | 548 ++++ src/ircd.c | 1407 ++++++++++ src/list.c | 581 ++++ src/match.c | 370 +++ src/md5.c | 169 ++ src/packet.c | 141 + src/parse.c | 594 ++++ src/res.c | 1741 ++++++++++++ src/res_comp.c | 334 +++ src/res_init.c | 225 ++ src/res_mkquery.c | 195 ++ src/res_skipname.c | 34 + src/s_auth.c | 308 ++ src/s_bsd.c | 2657 ++++++++++++++++++ src/s_conf.c | 2630 ++++++++++++++++++ src/s_debug.c | 539 ++++ src/s_err.c | 469 ++++ src/s_extra.c | 690 +++++ src/s_kline.c | 710 +++++ src/s_misc.c | 852 ++++++ src/s_numeric.c | 133 + src/s_serv.c | 4146 +++++++++++++++++++++++++++ src/s_socks.c | 296 ++ src/s_unreal.c | 1210 ++++++++ src/s_user.c | 4789 ++++++++++++++++++++++++++++++++ src/send.c | 1300 +++++++++ src/strtoul.c | 118 + src/support.c | 500 ++++ src/userload.c | 367 +++ src/version.c.SH | 268 ++ src/whowas.c | 266 ++ src/win32.c | 905 ++++++ src/win32.rc | 228 ++ src/win32/Icon1.ico | Bin 0 -> 2238 bytes src/win32/Win32GUI.c | 1755 ++++++++++++ src/win32/Win32GUI.rc | 409 +++ src/win32/Win32New.h | 129 + src/win32/bar.bmp | Bin 0 -> 22318 bytes src/win32/ico00001.ico | Bin 0 -> 318 bytes src/win32/resource.h | 101 + src/win32/sysicon1.ico | Bin 0 -> 318 bytes src/win32/unrealircd.bmp.gz | Bin 0 -> 40808 bytes src/win32/version.c | 227 ++ virtual-ip | 15 + win32 | 9 + 176 files changed, 61466 insertions(+) create mode 100644 .CHANGES.NEW create mode 100644 .NEW_CONFIG create mode 100644 CREDITS.potential create mode 100644 Changes create mode 100755 Config create mode 100644 Donation create mode 100644 INSTALL create mode 100644 LICENSE create mode 100644 Makefile.dist create mode 100644 READTHIS.NOW create mode 100644 TODO create mode 100644 TSpre.doc create mode 100644 Unreal.nfo create mode 100755 bsdinstall create mode 100644 crypt/Makefile create mode 100644 crypt/README create mode 100644 crypt/crypter create mode 100644 crypt/mkpasswd.c create mode 100644 doc/ADD-TO-IRCRC create mode 100644 doc/Authors create mode 100644 doc/Crule.readme create mode 100644 doc/Elite.Changes create mode 100644 doc/History/19.mu1-New create mode 100644 doc/History/2.8-New create mode 100644 doc/History/Advertisement create mode 100644 doc/History/Etiquette create mode 100644 doc/History/README.patches create mode 100644 doc/INSTALL create mode 100644 doc/Manual create mode 100644 doc/Operators create mode 100644 doc/conf.doc create mode 100644 doc/example.conf create mode 100644 doc/faq create mode 100644 doc/irc.1 create mode 100644 doc/ircd.8 create mode 100644 doc/m4macros create mode 100644 doc/server-compile-guide create mode 100644 doc/tao.of.irc create mode 100644 doc/unrealircd.doc create mode 100644 dynconf create mode 100644 extras/extras.txt create mode 100644 extras/tsp/Makefile create mode 100644 extras/tsp/README create mode 100644 extras/tsp/README.sscript create mode 100644 extras/tsp/socker.c create mode 100644 extras/tsp/sscript-lib.doc create mode 100644 extras/tsp/sscript.c create mode 100644 extras/tsp/sscript.h create mode 100644 extras/tsp/tsp-client.c create mode 100755 extras/tsp/tsp-server create mode 100644 extras/tsp/tsp-server-run.c create mode 100644 include/channel.h create mode 100644 include/cio.h create mode 100644 include/ciofunc.h create mode 100644 include/class.h create mode 100644 include/common.h create mode 100644 include/config.h create mode 100644 include/dbuf.h create mode 100644 include/dynconf.h create mode 100644 include/fdlist.h create mode 100644 include/h.h create mode 100644 include/hash.h create mode 100644 include/inet.h create mode 100644 include/license.h create mode 100644 include/msg.h create mode 100644 include/nameser.h create mode 100644 include/numeric.h create mode 100644 include/relinfo.h create mode 100644 include/res.h create mode 100644 include/resolv.h create mode 100644 include/resource.h create mode 100644 include/sjoin.h create mode 100644 include/sock.h create mode 100644 include/stamp.h create mode 100644 include/struct.h create mode 100644 include/sys.h create mode 100644 include/userload.h create mode 100644 include/version.h create mode 100644 include/whowas.h create mode 100644 include/win32/settings.h create mode 100644 include/win32/setup.h create mode 100755 ircd create mode 100755 ircdcron/ircd.cron create mode 100755 ircdcron/ircdchk create mode 100755 ircdreg create mode 100755 killircd create mode 100755 makeconf create mode 100644 makefile.win32 create mode 100644 networks/972-scripterz.network create mode 100644 networks/altirc.network create mode 100644 networks/bunker7.network create mode 100644 networks/digitalirc.network create mode 100644 networks/dragonwings.network create mode 100644 networks/fireirc.network create mode 100644 networks/global-irc.network create mode 100644 networks/infinity.network create mode 100644 networks/megairc.network create mode 100644 networks/mp3fans.network create mode 100644 networks/neohorizon.network create mode 100644 networks/networks.ndx create mode 100644 networks/nevernet.network create mode 100644 networks/newmilennium.network create mode 100644 networks/realchat.network create mode 100644 networks/roxnet.network create mode 100644 networks/solargalaxy.network create mode 100644 networks/solarxtreme.network create mode 100644 networks/spynet.network create mode 100644 networks/ss.network create mode 100644 networks/template.network create mode 100644 networks/tspre.network create mode 100644 networks/unrealircd.conf create mode 100644 networks/uzaynet.network create mode 100644 networks/v64net.network create mode 100755 newnet create mode 100755 rehash create mode 100644 src/Config.c create mode 100644 src/Makefile create mode 100644 src/bsd.c create mode 100644 src/buildm4 create mode 100644 src/channel.c create mode 100644 src/chkconf.c create mode 100644 src/cio_init.c create mode 100644 src/cio_main.c create mode 100644 src/class.c create mode 100644 src/cloak.c create mode 100644 src/conftool.c create mode 100644 src/crule.c create mode 100644 src/dbuf.c create mode 100644 src/dynconf.c create mode 100644 src/fdlist.c create mode 100644 src/hash.c create mode 100644 src/help.c create mode 100644 src/ircd.c create mode 100644 src/list.c create mode 100644 src/match.c create mode 100644 src/md5.c create mode 100644 src/packet.c create mode 100644 src/parse.c create mode 100644 src/res.c create mode 100644 src/res_comp.c create mode 100644 src/res_init.c create mode 100644 src/res_mkquery.c create mode 100644 src/res_skipname.c create mode 100644 src/s_auth.c create mode 100644 src/s_bsd.c create mode 100644 src/s_conf.c create mode 100644 src/s_debug.c create mode 100644 src/s_err.c create mode 100644 src/s_extra.c create mode 100644 src/s_kline.c create mode 100644 src/s_misc.c create mode 100644 src/s_numeric.c create mode 100644 src/s_serv.c create mode 100644 src/s_socks.c create mode 100644 src/s_unreal.c create mode 100644 src/s_user.c create mode 100644 src/send.c create mode 100644 src/strtoul.c create mode 100644 src/support.c create mode 100644 src/userload.c create mode 100644 src/version.c.SH create mode 100644 src/whowas.c create mode 100644 src/win32.c create mode 100644 src/win32.rc create mode 100644 src/win32/Icon1.ico create mode 100644 src/win32/Win32GUI.c create mode 100644 src/win32/Win32GUI.rc create mode 100644 src/win32/Win32New.h create mode 100644 src/win32/bar.bmp create mode 100644 src/win32/ico00001.ico create mode 100644 src/win32/resource.h create mode 100644 src/win32/sysicon1.ico create mode 100644 src/win32/unrealircd.bmp.gz create mode 100644 src/win32/version.c create mode 100644 virtual-ip create mode 100644 win32 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::